|
1 | | -import * as React from 'react'; |
2 | | -import { createFromNodeStream } from 'react-on-rails-rsc/client.node'; |
3 | | -import transformRSCStream from './transformRSCNodeStreamAndReplayConsoleLogs'; |
4 | | -import loadJsonFile from './loadJsonFile'; |
5 | | - |
6 | | -if (!('use' in React && typeof React.use === 'function')) { |
7 | | - throw new Error('React.use is not defined. Please ensure you are using React 18 with experimental features enabled or React 19+ to use server components.'); |
8 | | -} |
9 | | - |
10 | | -const { use } = React; |
11 | | - |
12 | | -export type RSCServerRootProps = { |
13 | | - getRscPromise: NodeJS.ReadableStream, |
14 | | - reactClientManifestFileName: string, |
15 | | - reactServerManifestFileName: string, |
16 | | -} |
17 | | - |
18 | | -const createFromFetch = (stream: NodeJS.ReadableStream, ssrManifest: Record<string, unknown>) => { |
19 | | - const transformedStream = transformRSCStream(stream); |
20 | | - return createFromNodeStream(transformedStream, ssrManifest); |
21 | | -} |
22 | | - |
23 | | -const createSSRManifest = (reactServerManifestFileName: string, reactClientManifestFileName: string) => { |
24 | | - const reactServerManifest = loadJsonFile(reactServerManifestFileName); |
25 | | - const reactClientManifest = loadJsonFile(reactClientManifestFileName); |
26 | | - |
27 | | - const ssrManifest = { |
28 | | - moduleLoading: { |
29 | | - prefix: "/webpack/development/", |
30 | | - crossOrigin: null, |
31 | | - }, |
32 | | - moduleMap: {} as Record<string, unknown>, |
33 | | - }; |
34 | | - |
35 | | - Object.entries(reactClientManifest).forEach(([aboluteFileUrl, clientFileBundlingInfo]) => { |
36 | | - const serverFileBundlingInfo = reactServerManifest[aboluteFileUrl]; |
37 | | - ssrManifest.moduleMap[(clientFileBundlingInfo as { id: string }).id] = { |
38 | | - '*': { |
39 | | - id: (serverFileBundlingInfo as { id: string }).id, |
40 | | - chunks: (serverFileBundlingInfo as { chunks: string[] }).chunks, |
41 | | - name: '*', |
42 | | - } |
43 | | - }; |
44 | | - }); |
45 | | - |
46 | | - return ssrManifest; |
47 | | -} |
48 | | - |
49 | | -const RSCServerRoot = ({ |
50 | | - getRscPromise, |
51 | | - reactClientManifestFileName, |
52 | | - reactServerManifestFileName, |
53 | | -}: RSCServerRootProps) => { |
54 | | - const ssrManifest = createSSRManifest(reactServerManifestFileName, reactClientManifestFileName); |
55 | | - return use(createFromFetch(getRscPromise, ssrManifest)); |
56 | | -}; |
57 | | - |
58 | | -export default RSCServerRoot; |
| 1 | +// import * as React from 'react'; |
| 2 | +// import { createFromNodeStream } from 'react-on-rails-rsc/client.node'; |
| 3 | +// import transformRSCStream from './transformRSCNodeStreamAndReplayConsoleLogs'; |
| 4 | +// import loadJsonFile from './loadJsonFile'; |
| 5 | + |
| 6 | +// if (!('use' in React && typeof React.use === 'function')) { |
| 7 | +// throw new Error('React.use is not defined. Please ensure you are using React 18 with experimental features enabled or React 19+ to use server components.'); |
| 8 | +// } |
| 9 | + |
| 10 | +// const { use } = React; |
| 11 | + |
| 12 | +// export type RSCServerRootProps = { |
| 13 | +// getRscPromise: NodeJS.ReadableStream, |
| 14 | +// reactClientManifestFileName: string, |
| 15 | +// reactServerManifestFileName: string, |
| 16 | +// } |
| 17 | + |
| 18 | +// const createFromFetch = (stream: NodeJS.ReadableStream, ssrManifest: Record<string, unknown>) => { |
| 19 | +// const transformedStream = transformRSCStream(stream); |
| 20 | +// return createFromNodeStream(transformedStream, ssrManifest); |
| 21 | +// } |
| 22 | + |
| 23 | +// const createSSRManifest = (reactServerManifestFileName: string, reactClientManifestFileName: string) => { |
| 24 | +// const reactServerManifest = loadJsonFile(reactServerManifestFileName); |
| 25 | +// const reactClientManifest = loadJsonFile(reactClientManifestFileName); |
| 26 | + |
| 27 | +// const ssrManifest = { |
| 28 | +// moduleLoading: { |
| 29 | +// prefix: "/webpack/development/", |
| 30 | +// crossOrigin: null, |
| 31 | +// }, |
| 32 | +// moduleMap: {} as Record<string, unknown>, |
| 33 | +// }; |
| 34 | + |
| 35 | +// Object.entries(reactClientManifest).forEach(([aboluteFileUrl, clientFileBundlingInfo]) => { |
| 36 | +// const serverFileBundlingInfo = reactServerManifest[aboluteFileUrl]; |
| 37 | +// ssrManifest.moduleMap[(clientFileBundlingInfo as { id: string }).id] = { |
| 38 | +// '*': { |
| 39 | +// id: (serverFileBundlingInfo as { id: string }).id, |
| 40 | +// chunks: (serverFileBundlingInfo as { chunks: string[] }).chunks, |
| 41 | +// name: '*', |
| 42 | +// } |
| 43 | +// }; |
| 44 | +// }); |
| 45 | + |
| 46 | +// return ssrManifest; |
| 47 | +// } |
| 48 | + |
| 49 | +// const RSCServerRoot = ({ |
| 50 | +// getRscPromise, |
| 51 | +// reactClientManifestFileName, |
| 52 | +// reactServerManifestFileName, |
| 53 | +// }: RSCServerRootProps) => { |
| 54 | +// const ssrManifest = createSSRManifest(reactServerManifestFileName, reactClientManifestFileName); |
| 55 | +// return use(createFromFetch(getRscPromise, ssrManifest)); |
| 56 | +// }; |
| 57 | + |
| 58 | +// export default RSCServerRoot; |
0 commit comments