@bleedingdev/modern-js-render 3.2.0-ultramodern.120 → 3.2.0-ultramodern.122
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/rsc.mjs +55 -50
- package/dist/esm/rscWorker.mjs +62 -52
- package/dist/esm/ssr.mjs +1 -5
- package/dist/types/server/rsc/handle-action.d.ts +9 -0
- package/package.json +5 -5
package/dist/esm/rsc.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { decodeReply, loadServerAction, registerClientReference, registerServerReference, renderToReadableStream } from "react-server-dom-rspack/server.node";
|
|
1
|
+
import { decodeReply as server_node_decodeReply, loadServerAction as server_node_loadServerAction, registerClientReference, registerServerReference, renderToReadableStream } from "react-server-dom-rspack/server.node";
|
|
2
2
|
const server_encoder = new TextEncoder();
|
|
3
3
|
const closingTagsPattern = /<\/body>\s*<\/html>\s*$/i;
|
|
4
4
|
function injectRSCPayload(rscStream, { injectClosingTags = true }) {
|
|
@@ -105,63 +105,68 @@ function injectCSS(cssFiles, { injectClosingTags = true } = {}) {
|
|
|
105
105
|
}
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
|
-
const
|
|
109
|
-
const readable = renderToReadableStream(options.element);
|
|
110
|
-
return readable;
|
|
111
|
-
};
|
|
112
|
-
const handleAction = async (req)=>{
|
|
113
|
-
try {
|
|
114
|
-
const serverReference = req.headers.get('x-rsc-action');
|
|
115
|
-
if (!serverReference) return new Response('Cannot find server reference', {
|
|
116
|
-
status: 404
|
|
117
|
-
});
|
|
118
|
-
const action = loadServerAction(serverReference);
|
|
119
|
-
if ('function' != typeof action) {
|
|
120
|
-
console.error('[RSC] Invalid action: server reference is not a function, serverReference:', serverReference);
|
|
121
|
-
return new Response('Invalid action', {
|
|
122
|
-
status: 400
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
const contentType = req.headers.get('content-type');
|
|
126
|
-
let args;
|
|
108
|
+
const createHandleAction = ({ decodeReply, loadServerAction, renderRsc })=>async (req)=>{
|
|
127
109
|
try {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
110
|
+
const serverReference = req.headers.get('x-rsc-action');
|
|
111
|
+
if (!serverReference) return new Response('Cannot find server reference', {
|
|
112
|
+
status: 404
|
|
113
|
+
});
|
|
114
|
+
const action = loadServerAction(serverReference);
|
|
115
|
+
if ('function' != typeof action) {
|
|
116
|
+
console.error('[RSC] Invalid action: server reference is not a function, serverReference:', serverReference);
|
|
117
|
+
return new Response('Invalid action', {
|
|
118
|
+
status: 400
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const contentType = req.headers.get('content-type');
|
|
122
|
+
let args;
|
|
123
|
+
try {
|
|
124
|
+
if (contentType?.includes('multipart/form-data')) {
|
|
125
|
+
const formData = await req.formData();
|
|
126
|
+
args = await decodeReply(formData);
|
|
127
|
+
} else {
|
|
128
|
+
const text = await req.text();
|
|
129
|
+
args = await decodeReply(text);
|
|
130
|
+
}
|
|
131
|
+
} catch (error) {
|
|
132
|
+
console.error('[RSC] Failed to decode request arguments, error:', error instanceof Error ? error.message : String(error), 'contentType:', contentType || 'unknown');
|
|
133
|
+
return new Response('Failed to decode request arguments', {
|
|
134
|
+
status: 400
|
|
135
|
+
});
|
|
134
136
|
}
|
|
137
|
+
const result = await Promise.resolve(action.apply(null, args));
|
|
138
|
+
const stream = renderRsc({
|
|
139
|
+
element: result
|
|
140
|
+
});
|
|
141
|
+
const response = new Response(stream, {
|
|
142
|
+
status: 200,
|
|
143
|
+
headers: {
|
|
144
|
+
'Content-Type': 'text/html'
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
return response;
|
|
135
148
|
} catch (error) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
149
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
150
|
+
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
151
|
+
console.error('[RSC] Error handling server action, error:', errorMessage, errorStack ? `\n${errorStack}` : '');
|
|
152
|
+
return new Response('Internal server error', {
|
|
153
|
+
status: 500
|
|
139
154
|
});
|
|
140
155
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const response = new Response(stream, {
|
|
146
|
-
status: 200,
|
|
147
|
-
headers: {
|
|
148
|
-
'Content-Type': 'text/html'
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
return response;
|
|
152
|
-
} catch (error) {
|
|
153
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
154
|
-
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
155
|
-
console.error('[RSC] Error handling server action, error:', errorMessage, errorStack ? `\n${errorStack}` : '');
|
|
156
|
-
return new Response('Internal server error', {
|
|
157
|
-
status: 500
|
|
158
|
-
});
|
|
159
|
-
}
|
|
156
|
+
};
|
|
157
|
+
const rsc_renderRsc = (options)=>{
|
|
158
|
+
const readable = renderToReadableStream(options.element);
|
|
159
|
+
return readable;
|
|
160
160
|
};
|
|
161
|
+
const handleAction = createHandleAction({
|
|
162
|
+
decodeReply: server_node_decodeReply,
|
|
163
|
+
loadServerAction: server_node_loadServerAction,
|
|
164
|
+
renderRsc: rsc_renderRsc
|
|
165
|
+
});
|
|
161
166
|
async function renderCSRWithRSC(options) {
|
|
162
167
|
const entryCssFiles = __webpack_require__.rscM?.entryCssFiles;
|
|
163
168
|
const cssFiles = entryCssFiles ? Object.values(entryCssFiles).flat() : [];
|
|
164
|
-
const rscPayloadStream =
|
|
169
|
+
const rscPayloadStream = rsc_renderRsc({
|
|
165
170
|
element: options.rscRoot
|
|
166
171
|
});
|
|
167
172
|
const htmlStream = new ReadableStream({
|
|
@@ -184,4 +189,4 @@ async function renderCSRWithRSC(options) {
|
|
|
184
189
|
});
|
|
185
190
|
}
|
|
186
191
|
export { createFromReadableStream } from "react-server-dom-rspack/client.node";
|
|
187
|
-
export { handleAction, registerClientReference, registerServerReference, renderCSRWithRSC,
|
|
192
|
+
export { handleAction, registerClientReference, registerServerReference, renderCSRWithRSC, renderToReadableStream, rsc_renderRsc as renderRsc };
|
package/dist/esm/rscWorker.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { renderToReadableStream } from "react-server-dom-rspack/server.node";
|
|
1
|
+
import { decodeReply as server_node_decodeReply, loadServerAction as server_node_loadServerAction, renderToReadableStream } from "react-server-dom-rspack/server.node";
|
|
2
2
|
import { decodeReply as server_edge_decodeReply, loadServerAction as server_edge_loadServerAction, registerClientReference, registerServerReference, renderToReadableStream as server_edge_renderToReadableStream } from "react-server-dom-rspack/server.edge";
|
|
3
3
|
const server_encoder = new TextEncoder();
|
|
4
4
|
const closingTagsPattern = /<\/body>\s*<\/html>\s*$/i;
|
|
@@ -106,14 +106,68 @@ function injectCSS(cssFiles, { injectClosingTags = true } = {}) {
|
|
|
106
106
|
}
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
|
-
const
|
|
109
|
+
const createHandleAction = ({ decodeReply, loadServerAction, renderRsc })=>async (req)=>{
|
|
110
|
+
try {
|
|
111
|
+
const serverReference = req.headers.get('x-rsc-action');
|
|
112
|
+
if (!serverReference) return new Response('Cannot find server reference', {
|
|
113
|
+
status: 404
|
|
114
|
+
});
|
|
115
|
+
const action = loadServerAction(serverReference);
|
|
116
|
+
if ('function' != typeof action) {
|
|
117
|
+
console.error('[RSC] Invalid action: server reference is not a function, serverReference:', serverReference);
|
|
118
|
+
return new Response('Invalid action', {
|
|
119
|
+
status: 400
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const contentType = req.headers.get('content-type');
|
|
123
|
+
let args;
|
|
124
|
+
try {
|
|
125
|
+
if (contentType?.includes('multipart/form-data')) {
|
|
126
|
+
const formData = await req.formData();
|
|
127
|
+
args = await decodeReply(formData);
|
|
128
|
+
} else {
|
|
129
|
+
const text = await req.text();
|
|
130
|
+
args = await decodeReply(text);
|
|
131
|
+
}
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.error('[RSC] Failed to decode request arguments, error:', error instanceof Error ? error.message : String(error), 'contentType:', contentType || 'unknown');
|
|
134
|
+
return new Response('Failed to decode request arguments', {
|
|
135
|
+
status: 400
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const result = await Promise.resolve(action.apply(null, args));
|
|
139
|
+
const stream = renderRsc({
|
|
140
|
+
element: result
|
|
141
|
+
});
|
|
142
|
+
const response = new Response(stream, {
|
|
143
|
+
status: 200,
|
|
144
|
+
headers: {
|
|
145
|
+
'Content-Type': 'text/html'
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return response;
|
|
149
|
+
} catch (error) {
|
|
150
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
151
|
+
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
152
|
+
console.error('[RSC] Error handling server action, error:', errorMessage, errorStack ? `\n${errorStack}` : '');
|
|
153
|
+
return new Response('Internal server error', {
|
|
154
|
+
status: 500
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const rsc_renderRsc = (options)=>{
|
|
110
159
|
const readable = renderToReadableStream(options.element);
|
|
111
160
|
return readable;
|
|
112
161
|
};
|
|
162
|
+
createHandleAction({
|
|
163
|
+
decodeReply: server_node_decodeReply,
|
|
164
|
+
loadServerAction: server_node_loadServerAction,
|
|
165
|
+
renderRsc: rsc_renderRsc
|
|
166
|
+
});
|
|
113
167
|
async function renderCSRWithRSC(options) {
|
|
114
168
|
const entryCssFiles = __webpack_require__.rscM?.entryCssFiles;
|
|
115
169
|
const cssFiles = entryCssFiles ? Object.values(entryCssFiles).flat() : [];
|
|
116
|
-
const rscPayloadStream =
|
|
170
|
+
const rscPayloadStream = rsc_renderRsc({
|
|
117
171
|
element: options.rscRoot
|
|
118
172
|
});
|
|
119
173
|
const htmlStream = new ReadableStream({
|
|
@@ -139,54 +193,10 @@ const rsc_worker_renderRsc = (options)=>{
|
|
|
139
193
|
const readable = server_edge_renderToReadableStream(options.element);
|
|
140
194
|
return readable;
|
|
141
195
|
};
|
|
142
|
-
const rsc_worker_handleAction =
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
});
|
|
148
|
-
const action = server_edge_loadServerAction(serverReference);
|
|
149
|
-
if ('function' != typeof action) {
|
|
150
|
-
console.error('[RSC] Invalid action: server reference is not a function, serverReference:', serverReference);
|
|
151
|
-
return new Response('Invalid action', {
|
|
152
|
-
status: 400
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
const contentType = req.headers.get('content-type');
|
|
156
|
-
let args;
|
|
157
|
-
try {
|
|
158
|
-
if (contentType?.includes('multipart/form-data')) {
|
|
159
|
-
const formData = await req.formData();
|
|
160
|
-
args = await server_edge_decodeReply(formData);
|
|
161
|
-
} else {
|
|
162
|
-
const text = await req.text();
|
|
163
|
-
args = await server_edge_decodeReply(text);
|
|
164
|
-
}
|
|
165
|
-
} catch (error) {
|
|
166
|
-
console.error('[RSC] Failed to decode request arguments, error:', error instanceof Error ? error.message : String(error), 'contentType:', contentType || 'unknown');
|
|
167
|
-
return new Response('Failed to decode request arguments', {
|
|
168
|
-
status: 400
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
const result = await Promise.resolve(action.apply(null, args));
|
|
172
|
-
const stream = rsc_worker_renderRsc({
|
|
173
|
-
element: result
|
|
174
|
-
});
|
|
175
|
-
const response = new Response(stream, {
|
|
176
|
-
status: 200,
|
|
177
|
-
headers: {
|
|
178
|
-
'Content-Type': 'text/html'
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
return response;
|
|
182
|
-
} catch (error) {
|
|
183
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
184
|
-
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
185
|
-
console.error('[RSC] Error handling server action, error:', errorMessage, errorStack ? `\n${errorStack}` : '');
|
|
186
|
-
return new Response('Internal server error', {
|
|
187
|
-
status: 500
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
};
|
|
196
|
+
const rsc_worker_handleAction = createHandleAction({
|
|
197
|
+
decodeReply: server_edge_decodeReply,
|
|
198
|
+
loadServerAction: server_edge_loadServerAction,
|
|
199
|
+
renderRsc: rsc_worker_renderRsc
|
|
200
|
+
});
|
|
191
201
|
export { createFromReadableStream } from "react-server-dom-rspack/client.edge";
|
|
192
202
|
export { registerClientReference, registerServerReference, renderCSRWithRSC, rsc_worker_handleAction as handleAction, rsc_worker_renderRsc as renderRsc, server_edge_renderToReadableStream as renderToReadableStream };
|
package/dist/esm/ssr.mjs
CHANGED
|
@@ -26,11 +26,7 @@ const renderSSRStream = async (children, options)=>{
|
|
|
26
26
|
identifierPrefix: SSR_HYDRATION_ID_PREFIX
|
|
27
27
|
});
|
|
28
28
|
try {
|
|
29
|
-
const rscRuntime = 'edge' === process.env.MODERN_SSR_ENV ?
|
|
30
|
-
var e = new Error("Cannot find module '@modern-js/render/rsc-worker'");
|
|
31
|
-
e.code = 'MODULE_NOT_FOUND';
|
|
32
|
-
throw e;
|
|
33
|
-
}) : import("@modern-js/render/rsc");
|
|
29
|
+
const rscRuntime = 'edge' === process.env.MODERN_SSR_ENV ? import("@modern-js/render/rsc-worker") : import("@modern-js/render/rsc");
|
|
34
30
|
const [{ renderRsc }, { createFromReadableStream }, { injectRSCPayload }] = await Promise.all([
|
|
35
31
|
rscRuntime,
|
|
36
32
|
import("react-server-dom-rspack/client.edge"),
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
export type RscActionRuntime = {
|
|
3
|
+
decodeReply: (body: string | FormData) => Promise<unknown[]>;
|
|
4
|
+
loadServerAction: (actionId: string) => unknown;
|
|
5
|
+
renderRsc: (options: {
|
|
6
|
+
element: ReactElement;
|
|
7
|
+
}) => ReadableStream<Uint8Array>;
|
|
8
|
+
};
|
|
9
|
+
export declare const createHandleAction: ({ decodeReply, loadServerAction, renderRsc }: RscActionRuntime) => (req: Request) => Promise<Response>;
|
package/package.json
CHANGED
|
@@ -17,15 +17,15 @@
|
|
|
17
17
|
"modern",
|
|
18
18
|
"modern.js"
|
|
19
19
|
],
|
|
20
|
-
"version": "3.2.0-ultramodern.
|
|
20
|
+
"version": "3.2.0-ultramodern.122",
|
|
21
21
|
"files": [
|
|
22
22
|
"dist",
|
|
23
23
|
"hook.d.ts"
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@swc/helpers": "^0.5.23",
|
|
27
|
-
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.
|
|
28
|
-
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.
|
|
27
|
+
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.122",
|
|
28
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.122"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@rslib/core": "0.22.0",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"react": "^19.2.7",
|
|
36
36
|
"react-dom": "^19.2.7",
|
|
37
37
|
"react-server-dom-rspack": "0.0.2",
|
|
38
|
-
"@
|
|
39
|
-
"@
|
|
38
|
+
"@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.2.0-ultramodern.122",
|
|
39
|
+
"@scripts/rstest-config": "2.66.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"react": "^19.2.7",
|