Skip to content

Commit

Permalink
refactor unstable_defineRouter with new_defineEntries (#1043)
Browse files Browse the repository at this point in the history
Refactor `unstable_defineRouter` with `new_defineEntries` instead of
`defineEntries`.
  • Loading branch information
dai-shi authored Dec 14, 2024
1 parent 2d2d318 commit 8a54eab
Show file tree
Hide file tree
Showing 23 changed files with 155 additions and 227 deletions.
3 changes: 1 addition & 2 deletions e2e/fixtures/broken-links/waku.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ export default {
import('waku/middleware/context'),
import('./src/redirects.js'),
import('waku/middleware/dev-server'),
import('waku/middleware/rsc'),
import('waku/middleware/ssr'),
import('waku/middleware/handler'),
],
};
17 changes: 16 additions & 1 deletion e2e/fixtures/rsc-router/src/entries.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { ReactNode } from 'react';
import { unstable_defineRouter } from 'waku/router/server';
import { Slot, Children } from 'waku/minimal/client';
import { new_defineEntries } from 'waku/minimal/server';

import Layout from './routes/layout.js';
import Page from './routes/page.js';
Expand All @@ -12,7 +13,7 @@ const PATH_PAGE: Record<string, ReactNode> = {
'/foo': <FooPage />,
};

export default unstable_defineRouter({
const router: ReturnType<typeof unstable_defineRouter> = unstable_defineRouter({
getPathConfig: async () =>
STATIC_PATHS.map((path) => ({
pattern: `^${path}$`,
Expand Down Expand Up @@ -60,3 +61,17 @@ export default unstable_defineRouter({
};
},
});

const entries: ReturnType<typeof new_defineEntries> = new_defineEntries({
unstable_handleRequest: async (input, utils) => {
if (input.type === 'custom') {
return null; // no ssr
}
return router.unstable_handleRequest(input, utils);
},
unstable_getBuildConfig: (utils) => {
return router.unstable_getBuildConfig(utils);
},
});

export default entries;
8 changes: 0 additions & 8 deletions e2e/fixtures/rsc-router/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions e2e/fixtures/ssr-basic/waku.config.ts

This file was deleted.

3 changes: 1 addition & 2 deletions e2e/fixtures/ssr-catch-error/waku.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ export default {
import('waku/middleware/context'),
import('waku/middleware/dev-server'),
import('./src/middleware/validator.js'),
import('waku/middleware/rsc'),
import('waku/middleware/ssr'),
import('waku/middleware/handler'),
],
/**
* Base path for HTTP requests to indicate RSC requests.
Expand Down
11 changes: 0 additions & 11 deletions e2e/fixtures/ssr-context-provider/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions e2e/fixtures/ssr-swr/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions e2e/fixtures/ssr-target-bundle/waku.config.ts

This file was deleted.

22 changes: 16 additions & 6 deletions examples/12_nossr/src/entries.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
/// <reference types="vite/client" />

import { new_defineEntries } from 'waku/minimal/server';
import { fsRouter } from 'waku/router/server';

export default {
...fsRouter(import.meta.url, (file) =>
import.meta.glob('./pages/**/*.tsx')[`./pages/${file}`]?.(),
),
getSsrConfig: undefined,
};
const router = fsRouter(import.meta.url, (file) =>
import.meta.glob('./pages/**/*.tsx')[`./pages/${file}`]?.(),
);

export default new_defineEntries({
unstable_handleRequest: async (input, utils) => {
if (input.type === 'custom') {
return null; // no ssr
}
return router.unstable_handleRequest(input, utils);
},
unstable_getBuildConfig: (utils) => {
return router.unstable_getBuildConfig(utils);
},
});
2 changes: 1 addition & 1 deletion examples/12_nossr/waku.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export default {
middleware: () => [
import('waku/middleware/context'),
import('waku/middleware/dev-server'),
import('waku/middleware/rsc'),
import('waku/middleware/handler'),
import('waku/middleware/fallback'),
],
};
11 changes: 0 additions & 11 deletions examples/31_minimal/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions examples/32_minimal_js/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions examples/33_promise/waku.config.ts

This file was deleted.

12 changes: 0 additions & 12 deletions examples/34_functions/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions examples/35_nesting/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions examples/36_form/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions examples/37_css/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions examples/39_api/waku.config.ts

This file was deleted.

11 changes: 0 additions & 11 deletions examples/41_path-alias/waku.config.ts

This file was deleted.

3 changes: 1 addition & 2 deletions packages/waku/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ export interface Config {
* () => [
* import('waku/middleware/context'),
* import('waku/middleware/dev-server'),
* import('waku/middleware/rsc'),
* import('waku/middleware/ssr'),
* import('waku/middleware/handler'),
* ]
*/
middleware?: () => Promise<{ default: Middleware }>[];
Expand Down
27 changes: 14 additions & 13 deletions packages/waku/src/lib/builder/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import type { LoggingFunction, RollupLog } from 'rollup';
import type { ReactNode } from 'react';

import type { Config } from '../../config.js';
import { unstable_getPlatformObject } from '../../server.js';
import { setAllEnvInternal, unstable_getPlatformObject } from '../../server.js';
import type {
BuildConfig,
EntriesPrd,
Expand Down Expand Up @@ -834,6 +834,16 @@ const emitStaticFiles = async (
);
htmlHead += `<script type="module" async>${code}</script>`;
}
if (!isStatic) {
const lastPathSpecItem = pathSpec.at(-1);
const ext =
lastPathSpecItem?.type === 'literal' && extname(lastPathSpecItem.name);
if (!ext || ext === '.html') {
// HACK doesn't feel ideal
dynamicHtmlPathMap.set(pathSpec, htmlHead);
}
return;
}
const pathname = pathSpec2pathname(pathSpec);
const destFile = joinPath(
rootDir,
Expand All @@ -845,13 +855,6 @@ const emitStaticFiles = async (
? '404.html' // HACK special treatment for 404, better way?
: pathname + '/index.html',
);
if (!isStatic) {
if (destFile.endsWith('.html')) {
// HACK doesn't feel ideal
dynamicHtmlPathMap.set(pathSpec, htmlHead);
}
return;
}
// In partial mode, skip if the file already exists.
if (existsSync(destFile)) {
return;
Expand Down Expand Up @@ -1026,13 +1029,11 @@ export async function build(options: {

// TODO: Add progress indication for static builds.
if ('unstable_handleRequest' in distEntries.default) {
const rsdwServer = await distEntries.loadModule('rsdw-server'); // FIXME hard-coded id
setAllEnvInternal(env);
const buildConfig = await distEntries.default.unstable_getBuildConfig({
unstable_collectClientModules: (elements: never) =>
collectClientModules(
config,
distEntries.loadModule('rsdw-server'), // FIXME hard-coded id
elements,
),
collectClientModules(config, rsdwServer, elements),
});
const cssAssets = clientBuildOutput.output.flatMap(({ type, fileName }) =>
type === 'asset' && fileName.endsWith('.css') ? [fileName] : [],
Expand Down
3 changes: 1 addition & 2 deletions packages/waku/src/lib/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ export type PureConfig = Omit<
const DEFAULT_MIDDLEWARE = () => [
import('waku/middleware/context'),
import('waku/middleware/dev-server'),
import('waku/middleware/rsc'),
import('waku/middleware/ssr'),
import('waku/middleware/handler'),
];

// Keep async function for future extension
Expand Down
Loading

0 comments on commit 8a54eab

Please sign in to comment.