diff --git a/apps/aws-app/webpack.config.js b/apps/aws-app/webpack.config.js index d165659..465385c 100644 --- a/apps/aws-app/webpack.config.js +++ b/apps/aws-app/webpack.config.js @@ -142,13 +142,12 @@ export default function createConfigs(_env, argv) { module: { rules: [ { - resource: [/rsc\.ts$/, /\/app\.tsx$/], + resource: [/\/server\/rsc\//, /\/app\.tsx$/], layer: webpackRscLayerName, }, { - // AsyncLocalStorage module instances must be in a shared layer. + resource: /\/server\/shared\//, layer: `shared`, - test: /(router-location-async-local-storage|use-router-location)/, }, { issuerLayer: webpackRscLayerName, diff --git a/apps/cloudflare-app/webpack.config.js b/apps/cloudflare-app/webpack.config.js index d832f30..76d7311 100644 --- a/apps/cloudflare-app/webpack.config.js +++ b/apps/cloudflare-app/webpack.config.js @@ -121,13 +121,12 @@ export default function createConfigs(_env, argv) { module: { rules: [ { - resource: [/rsc\.ts$/, /\/app\.tsx$/], + resource: [/\/server\/rsc\//, /\/app\.tsx$/], layer: webpackRscLayerName, }, { - // AsyncLocalStorage module instances must be in a shared layer. + resource: /\/server\/shared\//, layer: `shared`, - test: /(router-location-async-local-storage|use-router-location)/, }, { issuerLayer: webpackRscLayerName, diff --git a/apps/vercel-app/webpack.config.js b/apps/vercel-app/webpack.config.js index 3d129f7..064b7f5 100644 --- a/apps/vercel-app/webpack.config.js +++ b/apps/vercel-app/webpack.config.js @@ -148,13 +148,12 @@ export default function createConfigs(_env, argv) { module: { rules: [ { - resource: [/rsc\.ts$/, /\/app\.tsx$/], + resource: [/\/server\/rsc\//, /\/app\.tsx$/], layer: webpackRscLayerName, }, { - // AsyncLocalStorage module instances must be in a shared layer. + resource: /\/server\/shared\//, layer: `shared`, - test: /(router-location-async-local-storage|use-router-location)/, }, { issuerLayer: webpackRscLayerName, diff --git a/packages/core/package.json b/packages/core/package.json index 9fb10d4..8d01ef8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,23 +20,23 @@ "default": "./lib/client/browser.js" }, "./server/rsc": { - "@mfng:internal": "./src/server/rsc.ts", - "default": "./lib/server/rsc.js" + "@mfng:internal": "./src/server/rsc/index.ts", + "default": "./lib/server/rsc/index.js" }, "./server/ssr": { - "@mfng:internal": "./src/server/ssr.ts", - "default": "./lib/server/ssr.js" + "@mfng:internal": "./src/server/ssr/index.ts", + "default": "./lib/server/ssr/index.js" }, "./use-router-location": { - "@mfng:internal:node": "./src/server/use-router-location.ts", + "@mfng:internal:node": "./src/server/shared/use-router-location.ts", "@mfng:internal": "./src/client/use-router-location.ts", "types": "./lib/use-router-location.d.ts", - "node": "./lib/server/use-router-location.js", + "node": "./lib/server/shared/use-router-location.js", "default": "./lib/client/use-router-location.js" }, "./router-location-async-local-storage": { - "@mfng:internal": "./src/server/router-location-async-local-storage.ts", - "default": "./lib/server/router-location-async-local-storage.js" + "@mfng:internal": "./src/server/shared/router-location-async-local-storage.ts", + "default": "./lib/server/shared/router-location-async-local-storage.js" } }, "files": [ diff --git a/packages/core/src/server/create-rsc-action-stream.ts b/packages/core/src/server/rsc/create-rsc-action-stream.ts similarity index 100% rename from packages/core/src/server/create-rsc-action-stream.ts rename to packages/core/src/server/rsc/create-rsc-action-stream.ts diff --git a/packages/core/src/server/create-rsc-app-stream.tsx b/packages/core/src/server/rsc/create-rsc-app-stream.tsx similarity index 100% rename from packages/core/src/server/create-rsc-app-stream.tsx rename to packages/core/src/server/rsc/create-rsc-app-stream.tsx diff --git a/packages/core/src/server/create-rsc-form-state.ts b/packages/core/src/server/rsc/create-rsc-form-state.ts similarity index 100% rename from packages/core/src/server/create-rsc-form-state.ts rename to packages/core/src/server/rsc/create-rsc-form-state.ts diff --git a/packages/core/src/server/rsc.ts b/packages/core/src/server/rsc/index.ts similarity index 100% rename from packages/core/src/server/rsc.ts rename to packages/core/src/server/rsc/index.ts diff --git a/packages/core/src/server/router-location-async-local-storage.ts b/packages/core/src/server/shared/router-location-async-local-storage.ts similarity index 68% rename from packages/core/src/server/router-location-async-local-storage.ts rename to packages/core/src/server/shared/router-location-async-local-storage.ts index 09ec103..a09d5b4 100644 --- a/packages/core/src/server/router-location-async-local-storage.ts +++ b/packages/core/src/server/shared/router-location-async-local-storage.ts @@ -1,5 +1,5 @@ import {AsyncLocalStorage} from 'node:async_hooks'; -import type {RouterLocation} from '../use-router-location.js'; +import type {RouterLocation} from '../../use-router-location.js'; export const routerLocationAsyncLocalStorage = new AsyncLocalStorage(); diff --git a/packages/core/src/server/use-router-location.ts b/packages/core/src/server/shared/use-router-location.ts similarity index 86% rename from packages/core/src/server/use-router-location.ts rename to packages/core/src/server/shared/use-router-location.ts index 3184dda..347759b 100644 --- a/packages/core/src/server/use-router-location.ts +++ b/packages/core/src/server/shared/use-router-location.ts @@ -1,4 +1,4 @@ -import type {RouterLocation} from '../use-router-location.js'; +import type {RouterLocation} from '../../use-router-location.js'; import {routerLocationAsyncLocalStorage} from './router-location-async-local-storage.js'; export function useRouterLocation(): RouterLocation { diff --git a/packages/core/src/server/create-buffered-transform-stream.tsx b/packages/core/src/server/ssr/create-buffered-transform-stream.tsx similarity index 100% rename from packages/core/src/server/create-buffered-transform-stream.tsx rename to packages/core/src/server/ssr/create-buffered-transform-stream.tsx diff --git a/packages/core/src/server/create-html-stream.tsx b/packages/core/src/server/ssr/create-html-stream.tsx similarity index 96% rename from packages/core/src/server/create-html-stream.tsx rename to packages/core/src/server/ssr/create-html-stream.tsx index b1b9a55..6a5a2b6 100644 --- a/packages/core/src/server/create-html-stream.tsx +++ b/packages/core/src/server/ssr/create-html-stream.tsx @@ -6,9 +6,9 @@ import type {ReactFormState} from 'react-dom/server'; import ReactDOMServer from 'react-dom/server.edge'; import type {SSRManifest} from 'react-server-dom-webpack'; import ReactServerDOMClient from 'react-server-dom-webpack/client.edge'; +import type {RscAppResult} from '../rsc/create-rsc-app-stream.js'; import {createBufferedTransformStream} from './create-buffered-transform-stream.js'; import {createInitialRscResponseTransformStream} from './create-initial-rsc-response-transform-stream.js'; -import type {RscAppResult} from './create-rsc-app-stream.js'; export interface CreateHtmlStreamOptions { readonly reactSsrManifest: SSRManifest; diff --git a/packages/core/src/server/create-initial-rsc-response-transform-stream.ts b/packages/core/src/server/ssr/create-initial-rsc-response-transform-stream.ts similarity index 100% rename from packages/core/src/server/create-initial-rsc-response-transform-stream.ts rename to packages/core/src/server/ssr/create-initial-rsc-response-transform-stream.ts diff --git a/packages/core/src/server/ssr.ts b/packages/core/src/server/ssr/index.ts similarity index 100% rename from packages/core/src/server/ssr.ts rename to packages/core/src/server/ssr/index.ts diff --git a/packages/core/src/server/next-macro-task.ts b/packages/core/src/server/ssr/next-macro-task.ts similarity index 100% rename from packages/core/src/server/next-macro-task.ts rename to packages/core/src/server/ssr/next-macro-task.ts diff --git a/packages/core/src/server/node-compat-environment.ts b/packages/core/src/server/ssr/node-compat-environment.ts similarity index 100% rename from packages/core/src/server/node-compat-environment.ts rename to packages/core/src/server/ssr/node-compat-environment.ts diff --git a/packages/webpack-rsc/README.md b/packages/webpack-rsc/README.md index 12f1eaf..929abfd 100644 --- a/packages/webpack-rsc/README.md +++ b/packages/webpack-rsc/README.md @@ -63,10 +63,15 @@ const serverConfig = { module: { rules: [ { - // Match the resource path of the modules that create RSC streams, e.g.: - resource: (value) => /create-rsc-\w+-stream\.tsx?$/.test(value), + // Match the entry modules that should end up in the RSC layer: + resource: [/\/server\/rsc\//, /\/app\.tsx$/], layer: webpackRscLayerName, }, + { + // Match the modules that should end up in a shared layer (RSC & SSR): + resource: /\/server\/shared\//, + layer: 'shared', + }, { issuerLayer: webpackRscLayerName, resolve: {conditionNames: ['react-server', '...']},