Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: config prd instead of pure config #1276

Merged
merged 1 commit into from
Mar 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/waku/src/lib/builder/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,8 @@ const buildServerBundle = async (
addEntriesToInput: true,
}),
rscEntriesPlugin({
basePath: config.basePath,
rscBase: config.rscBase,
srcDir: config.srcDir,
ssrDir: DIST_SSR,
moduleMap: {
Expand Down
15 changes: 1 addition & 14 deletions packages/waku/src/lib/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,4 @@ export async function resolveConfig(config: Config) {
return resolvedConfig;
}

export type PureConfig = Omit<
Required<Config>,
'middleware' | 'unstable_honoEnhancer' | 'unstable_viteConfigs'
>;

export function extractPureConfig(config: ResolvedConfig): PureConfig {
const {
middleware: _removed1,
unstable_honoEnhancer: _removed2,
unstable_viteConfigs: _removed3,
...pureConfig
} = config;
return pureConfig;
}
export type ConfigPrd = Pick<Required<Config>, 'basePath' | 'rscBase'>;
7 changes: 2 additions & 5 deletions packages/waku/src/lib/middleware/dev-server-impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { createServer as createViteServer } from 'vite';
import viteReact from '@vitejs/plugin-react';

import type { EntriesDev } from '../types.js';
import { resolveConfig, extractPureConfig } from '../config.js';
import { resolveConfig } from '../config.js';
import { SRC_MAIN, SRC_ENTRIES } from '../constants.js';
import {
decodeFilePathFromAbsolute,
Expand Down Expand Up @@ -390,10 +390,7 @@ export const devServer: Middleware = (options) => {
let initialModules: ClonableModuleNode[];

return async (ctx, next) => {
const [config, vite] = await Promise.all([
configPromise.then(extractPureConfig),
vitePromise,
]);
const [config, vite] = await Promise.all([configPromise, vitePromise]);

if (!initialModules) {
const processedModules = new Set<string>();
Expand Down
41 changes: 19 additions & 22 deletions packages/waku/src/lib/middleware/handler.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { ReactNode } from 'react';

import { resolveConfig, extractPureConfig } from '../config.js';
import type { PureConfig } from '../config.js';
import { resolveConfig } from '../config.js';
import type { ConfigPrd } from '../config.js';
import {
INTERNAL_setAllEnv,
INTERNAL_setPlatformDataLoader,
Expand All @@ -26,7 +26,7 @@ export const CLIENT_MODULE_MAP = {
export const CLIENT_PREFIX = 'client/';

const getInput = async (
config: PureConfig,
config: ConfigPrd,
ctx: HandlerContext,
loadServerModule: (fileId: string) => Promise<unknown>,
): Promise<Parameters<HandleRequest>[0] | null> => {
Expand Down Expand Up @@ -73,28 +73,25 @@ const getInput = async (
export const handler: Middleware = (options) => {
const env = options.env || {};
INTERNAL_setAllEnv(env);
const entriesPromise =
options.cmd === 'start'
? options.loadEntries()
: ('Error: loadEntries are not available' as never);
const configPromise =
options.cmd === 'start'
? entriesPromise.then(async (entries) => {
if (entries.loadPlatformData) {
INTERNAL_setPlatformDataLoader(entries.loadPlatformData);
}
return resolveConfig(await entries.loadConfig());
})
: resolveConfig(options.config);
const entriesPrdPromise =
options.cmd === 'start' ? options.loadEntries() : null;
entriesPrdPromise
?.then((entries) => {
if (entries.loadPlatformData) {
INTERNAL_setPlatformDataLoader(entries.loadPlatformData);
}
})
.catch(() => {});
const configDevPromise =
options.cmd === 'dev' ? resolveConfig(options.config) : null;

return async (ctx, next) => {
const { unstable_devServer: devServer } = ctx;
const [config, entriesPrd] = await Promise.all([
configPromise.then(extractPureConfig),
entriesPromise,
]);
const entriesDev = devServer && (await devServer.loadEntriesDev(config));
const entries = devServer ? entriesDev! : entriesPrd;
const entriesPrd = await entriesPrdPromise!;
const config = devServer ? await configDevPromise! : entriesPrd.configPrd;
const entries = devServer
? await devServer.loadEntriesDev(await configDevPromise!)
: entriesPrd;
const rsdwServer = devServer
? await devServer.loadServerModuleRsc(SERVER_MODULE_MAP['rsdw-server'])
: await entriesPrd.loadModule('rsdw-server');
Expand Down
6 changes: 6 additions & 0 deletions packages/waku/src/lib/plugins/vite-plugin-rsc-entries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ const stripExt = (fname: string) => {
const CONFIG_FILE = 'waku.config.ts'; // XXX only ts extension

export function rscEntriesPlugin(opts: {
basePath: string;
rscBase: string;
srcDir: string;
ssrDir: string;
moduleMap: Record<string, string>;
Expand All @@ -23,6 +25,10 @@ export function rscEntriesPlugin(opts: {
globalThis.AsyncLocalStorage = require('node:async_hooks').AsyncLocalStorage;
`;
const codeToAppend = `
export const configPrd = {
basePath: '${opts.basePath}',
rscBase: '${opts.rscBase}',
};
export function loadModule(id) {
switch (id) {
${Object.entries(opts.moduleMap)
Expand Down
8 changes: 5 additions & 3 deletions packages/waku/src/lib/renderers/html.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import type { default as RSDWClientType } from 'react-server-dom-webpack/client.
import { injectRSCPayload } from 'rsc-html-stream/server';

import type * as WakuMinimalClientType from '../../minimal/client.js';
import type { PureConfig } from '../config.js';
import type { ResolvedConfig, ConfigPrd } from '../config.js';
import { SRC_MAIN } from '../constants.js';
import { concatUint8Arrays } from '../utils/stream.js';
import { filePathToFileURL } from '../utils/path.js';
Expand Down Expand Up @@ -162,7 +162,7 @@ const rectifyHtml = () => {
let hackToIgnoreTheVeryFirstError = true;

export async function renderHtml(
config: PureConfig,
config: ResolvedConfig | ConfigPrd,
ctx: Pick<HandlerContext, 'unstable_modules' | 'unstable_devServer'>,
htmlHead: string,
elements: Elements,
Expand Down Expand Up @@ -254,7 +254,9 @@ export async function renderHtml(
injectHtmlHead(
config.basePath + config.rscBase + '/' + encodeRscPath(rscPath),
htmlHead,
isDev ? `${config.basePath}${config.srcDir}/${SRC_MAIN}` : '',
isDev
? `${config.basePath}${(config as ResolvedConfig).srcDir}/${SRC_MAIN}`
: '',
),
)
.pipeThrough(injectRSCPayload(stream2));
Expand Down
8 changes: 4 additions & 4 deletions packages/waku/src/lib/renderers/rsc.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { ReactNode } from 'react';
import type { default as RSDWServerType } from 'react-server-dom-webpack/server.edge';

import type { PureConfig } from '../config.js';
import type { ConfigPrd } from '../config.js';
// TODO move types somewhere
import type { HandlerContext } from '../middleware/types.js';
import { filePathToFileURL } from '../utils/path.js';
Expand All @@ -20,7 +20,7 @@ const onError = (err: unknown) => {
};

export async function renderRsc(
config: PureConfig,
config: ConfigPrd,
ctx: Pick<HandlerContext, 'unstable_modules' | 'unstable_devServer'>,
elements: Record<string, unknown>,
moduleIdCallback?: (id: string) => void,
Expand Down Expand Up @@ -50,7 +50,7 @@ export async function renderRsc(
}

export function renderRscElement(
config: PureConfig,
config: ConfigPrd,
ctx: Pick<HandlerContext, 'unstable_modules' | 'unstable_devServer'>,
element: ReactNode,
): ReadableStream {
Expand Down Expand Up @@ -78,7 +78,7 @@ export function renderRscElement(
}

export async function collectClientModules(
config: PureConfig,
config: ConfigPrd,
rsdwServer: { default: typeof RSDWServerType },
elements: Record<string, unknown>,
): Promise<string[]> {
Expand Down
3 changes: 3 additions & 0 deletions packages/waku/src/lib/types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { ReactNode } from 'react';

import type { Config } from '../config.js';
import type { ConfigPrd } from '../lib/config.js';
import type { PathSpec } from '../lib/utils/path.js';

type Elements = Record<string, unknown>;
Expand Down Expand Up @@ -81,7 +82,9 @@ export type EntriesDev = {
};

export type EntriesPrd = EntriesDev & {
// TODO eliminate loadConfig
loadConfig: () => Promise<Config>;
configPrd: ConfigPrd;
loadModule: (id: string) => Promise<unknown>;
dynamicHtmlPaths: [pathSpec: PathSpec, htmlHead: string][];
publicIndexHtml: string;
Expand Down
Loading