@cedarjs/vite 0.0.4
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/LICENSE +21 -0
- package/bins/rw-vite-build.mjs +61 -0
- package/bins/rw-vite-dev.mjs +57 -0
- package/bins/vite.mjs +12 -0
- package/dist/build/build.d.ts +21 -0
- package/dist/build/build.d.ts.map +1 -0
- package/dist/build/build.js +78 -0
- package/dist/buildFeServer.d.ts +6 -0
- package/dist/buildFeServer.d.ts.map +1 -0
- package/dist/buildFeServer.js +39 -0
- package/dist/buildRouteHooks.d.ts +3 -0
- package/dist/buildRouteHooks.d.ts.map +1 -0
- package/dist/buildRouteHooks.js +45 -0
- package/dist/buildRouteManifest.d.ts +6 -0
- package/dist/buildRouteManifest.d.ts.map +1 -0
- package/dist/buildRouteManifest.js +58 -0
- package/dist/buildRscClientAndServer.d.ts +4 -0
- package/dist/buildRscClientAndServer.d.ts.map +1 -0
- package/dist/buildRscClientAndServer.js +30 -0
- package/dist/bundled/react-server-dom-webpack.server.d.ts +2 -0
- package/dist/bundled/react-server-dom-webpack.server.d.ts.map +1 -0
- package/dist/bundled/react-server-dom-webpack.server.js +33529 -0
- package/dist/cjs/ClientRouter.d.ts +1 -0
- package/dist/cjs/build/build.d.ts +1 -0
- package/dist/cjs/build/build.js +116 -0
- package/dist/cjs/buildFeServer.d.ts +1 -0
- package/dist/cjs/buildFeServer.js +63 -0
- package/dist/cjs/buildRouteHooks.js +66 -0
- package/dist/cjs/buildRouteManifest.js +92 -0
- package/dist/cjs/buildRscClientAndServer.js +54 -0
- package/dist/cjs/client.d.ts +1 -0
- package/dist/cjs/clientSsr.d.ts +1 -0
- package/dist/cjs/devFeServer.js +153 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +184 -0
- package/dist/cjs/lib/StatusError.js +36 -0
- package/dist/cjs/lib/entries.js +53 -0
- package/dist/cjs/lib/envVarDefinitions.js +87 -0
- package/dist/cjs/lib/getMergedConfig.js +187 -0
- package/dist/cjs/lib/onWarn.js +36 -0
- package/dist/cjs/lib/registerFwGlobalsAndShims.js +117 -0
- package/dist/cjs/middleware/index.js +22 -0
- package/dist/cjs/middleware/invokeMiddleware.js +52 -0
- package/dist/cjs/middleware/register.js +106 -0
- package/dist/cjs/middleware/types.js +16 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/plugins/vite-plugin-jsx-loader.js +42 -0
- package/dist/cjs/plugins/vite-plugin-remove-from-bundle.js +56 -0
- package/dist/cjs/plugins/vite-plugin-rsc-analyze.js +104 -0
- package/dist/cjs/plugins/vite-plugin-rsc-reload.js +75 -0
- package/dist/cjs/plugins/vite-plugin-rsc-routes-auto-loader.js +159 -0
- package/dist/cjs/plugins/vite-plugin-rsc-routes-imports.js +125 -0
- package/dist/cjs/plugins/vite-plugin-rsc-ssr-router-import.js +75 -0
- package/dist/cjs/plugins/vite-plugin-rsc-transform-client.js +229 -0
- package/dist/cjs/plugins/vite-plugin-rsc-transform-server.js +398 -0
- package/dist/cjs/plugins/vite-plugin-swap-apollo-provider.js +41 -0
- package/dist/cjs/rsc/rscBuildAnalyze.js +116 -0
- package/dist/cjs/rsc/rscBuildClient.js +91 -0
- package/dist/cjs/rsc/rscBuildCopyCssAssets.js +56 -0
- package/dist/cjs/rsc/rscBuildEntriesFile.js +115 -0
- package/dist/cjs/rsc/rscBuildForServer.js +157 -0
- package/dist/cjs/rsc/rscBuildForSsr.js +172 -0
- package/dist/cjs/rsc/rscBuildRwEnvVars.js +56 -0
- package/dist/cjs/rsc/rscRenderer.js +165 -0
- package/dist/cjs/rsc/rscRequestHandler.js +162 -0
- package/dist/cjs/rsc/rscStudioHandlers.js +154 -0
- package/dist/cjs/runFeServer.js +166 -0
- package/dist/cjs/streaming/buildForStreamingServer.js +65 -0
- package/dist/cjs/streaming/collectCss.js +52 -0
- package/dist/cjs/streaming/createReactStreamingHandler.js +173 -0
- package/dist/cjs/streaming/streamHelpers.js +228 -0
- package/dist/cjs/streaming/transforms/bufferedTransform.js +61 -0
- package/dist/cjs/streaming/transforms/cancelTimeoutTransform.js +34 -0
- package/dist/cjs/streaming/transforms/encode-decode.js +36 -0
- package/dist/cjs/streaming/transforms/serverInjectionTransform.js +84 -0
- package/dist/cjs/streaming/triggerRouteHooks.js +96 -0
- package/dist/cjs/types.js +16 -0
- package/dist/cjs/utils.js +91 -0
- package/dist/devFeServer.d.ts +2 -0
- package/dist/devFeServer.d.ts.map +1 -0
- package/dist/devFeServer.js +134 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +154 -0
- package/dist/lib/StatusError.d.ts +8 -0
- package/dist/lib/StatusError.d.ts.map +1 -0
- package/dist/lib/StatusError.js +11 -0
- package/dist/lib/entries.d.ts +3 -0
- package/dist/lib/entries.d.ts.map +1 -0
- package/dist/lib/entries.js +32 -0
- package/dist/lib/envVarDefinitions.d.ts +14 -0
- package/dist/lib/envVarDefinitions.d.ts.map +1 -0
- package/dist/lib/envVarDefinitions.js +53 -0
- package/dist/lib/getMergedConfig.d.ts +11 -0
- package/dist/lib/getMergedConfig.d.ts.map +1 -0
- package/dist/lib/getMergedConfig.js +153 -0
- package/dist/lib/onWarn.d.ts +3 -0
- package/dist/lib/onWarn.d.ts.map +1 -0
- package/dist/lib/onWarn.js +12 -0
- package/dist/lib/registerFwGlobalsAndShims.d.ts +12 -0
- package/dist/lib/registerFwGlobalsAndShims.d.ts.map +1 -0
- package/dist/lib/registerFwGlobalsAndShims.js +83 -0
- package/dist/middleware/index.d.ts +2 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +1 -0
- package/dist/middleware/invokeMiddleware.d.ts +14 -0
- package/dist/middleware/invokeMiddleware.d.ts.map +1 -0
- package/dist/middleware/invokeMiddleware.js +32 -0
- package/dist/middleware/register.d.ts +23 -0
- package/dist/middleware/register.d.ts.map +1 -0
- package/dist/middleware/register.js +69 -0
- package/dist/middleware/types.d.ts +3 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +0 -0
- package/dist/package.json +1 -0
- package/dist/plugins/vite-plugin-jsx-loader.d.ts +8 -0
- package/dist/plugins/vite-plugin-jsx-loader.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-jsx-loader.js +18 -0
- package/dist/plugins/vite-plugin-remove-from-bundle.d.ts +17 -0
- package/dist/plugins/vite-plugin-remove-from-bundle.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-remove-from-bundle.js +31 -0
- package/dist/plugins/vite-plugin-rsc-analyze.d.ts +3 -0
- package/dist/plugins/vite-plugin-rsc-analyze.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-rsc-analyze.js +70 -0
- package/dist/plugins/vite-plugin-rsc-reload.d.ts +3 -0
- package/dist/plugins/vite-plugin-rsc-reload.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-rsc-reload.js +41 -0
- package/dist/plugins/vite-plugin-rsc-routes-auto-loader.d.ts +3 -0
- package/dist/plugins/vite-plugin-rsc-routes-auto-loader.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-rsc-routes-auto-loader.js +130 -0
- package/dist/plugins/vite-plugin-rsc-routes-imports.d.ts +3 -0
- package/dist/plugins/vite-plugin-rsc-routes-imports.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-rsc-routes-imports.js +96 -0
- package/dist/plugins/vite-plugin-rsc-ssr-router-import.d.ts +7 -0
- package/dist/plugins/vite-plugin-rsc-ssr-router-import.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-rsc-ssr-router-import.js +41 -0
- package/dist/plugins/vite-plugin-rsc-transform-client.d.ts +3 -0
- package/dist/plugins/vite-plugin-rsc-transform-client.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-rsc-transform-client.js +195 -0
- package/dist/plugins/vite-plugin-rsc-transform-server.d.ts +3 -0
- package/dist/plugins/vite-plugin-rsc-transform-server.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-rsc-transform-server.js +364 -0
- package/dist/plugins/vite-plugin-swap-apollo-provider.d.ts +12 -0
- package/dist/plugins/vite-plugin-swap-apollo-provider.d.ts.map +1 -0
- package/dist/plugins/vite-plugin-swap-apollo-provider.js +17 -0
- package/dist/rsc/rscBuildAnalyze.d.ts +16 -0
- package/dist/rsc/rscBuildAnalyze.d.ts.map +1 -0
- package/dist/rsc/rscBuildAnalyze.js +92 -0
- package/dist/rsc/rscBuildClient.d.ts +7 -0
- package/dist/rsc/rscBuildClient.d.ts.map +1 -0
- package/dist/rsc/rscBuildClient.js +67 -0
- package/dist/rsc/rscBuildCopyCssAssets.d.ts +7 -0
- package/dist/rsc/rscBuildCopyCssAssets.d.ts.map +1 -0
- package/dist/rsc/rscBuildCopyCssAssets.js +22 -0
- package/dist/rsc/rscBuildEntriesFile.d.ts +10 -0
- package/dist/rsc/rscBuildEntriesFile.d.ts.map +1 -0
- package/dist/rsc/rscBuildEntriesFile.js +81 -0
- package/dist/rsc/rscBuildForServer.d.ts +7 -0
- package/dist/rsc/rscBuildForServer.d.ts.map +1 -0
- package/dist/rsc/rscBuildForServer.js +133 -0
- package/dist/rsc/rscBuildForSsr.d.ts +9 -0
- package/dist/rsc/rscBuildForSsr.d.ts.map +1 -0
- package/dist/rsc/rscBuildForSsr.js +138 -0
- package/dist/rsc/rscBuildRwEnvVars.d.ts +10 -0
- package/dist/rsc/rscBuildRwEnvVars.d.ts.map +1 -0
- package/dist/rsc/rscBuildRwEnvVars.js +22 -0
- package/dist/rsc/rscRenderer.d.ts +9 -0
- package/dist/rsc/rscRenderer.d.ts.map +1 -0
- package/dist/rsc/rscRenderer.js +130 -0
- package/dist/rsc/rscRequestHandler.d.ts +10 -0
- package/dist/rsc/rscRequestHandler.d.ts.map +1 -0
- package/dist/rsc/rscRequestHandler.js +131 -0
- package/dist/rsc/rscStudioHandlers.d.ts +10 -0
- package/dist/rsc/rscStudioHandlers.d.ts.map +1 -0
- package/dist/rsc/rscStudioHandlers.js +120 -0
- package/dist/runFeServer.d.ts +2 -0
- package/dist/runFeServer.d.ts.map +1 -0
- package/dist/runFeServer.js +132 -0
- package/dist/streaming/buildForStreamingServer.d.ts +4 -0
- package/dist/streaming/buildForStreamingServer.d.ts.map +1 -0
- package/dist/streaming/buildForStreamingServer.js +41 -0
- package/dist/streaming/collectCss.d.ts +7 -0
- package/dist/streaming/collectCss.d.ts.map +1 -0
- package/dist/streaming/collectCss.js +27 -0
- package/dist/streaming/createReactStreamingHandler.d.ts +12 -0
- package/dist/streaming/createReactStreamingHandler.d.ts.map +1 -0
- package/dist/streaming/createReactStreamingHandler.js +139 -0
- package/dist/streaming/streamHelpers.d.ts +23 -0
- package/dist/streaming/streamHelpers.d.ts.map +1 -0
- package/dist/streaming/streamHelpers.js +192 -0
- package/dist/streaming/transforms/bufferedTransform.d.ts +2 -0
- package/dist/streaming/transforms/bufferedTransform.d.ts.map +1 -0
- package/dist/streaming/transforms/bufferedTransform.js +37 -0
- package/dist/streaming/transforms/cancelTimeoutTransform.d.ts +2 -0
- package/dist/streaming/transforms/cancelTimeoutTransform.d.ts.map +1 -0
- package/dist/streaming/transforms/cancelTimeoutTransform.js +10 -0
- package/dist/streaming/transforms/encode-decode.d.ts +3 -0
- package/dist/streaming/transforms/encode-decode.d.ts.map +1 -0
- package/dist/streaming/transforms/encode-decode.js +11 -0
- package/dist/streaming/transforms/serverInjectionTransform.d.ts +16 -0
- package/dist/streaming/transforms/serverInjectionTransform.d.ts.map +1 -0
- package/dist/streaming/transforms/serverInjectionTransform.js +60 -0
- package/dist/streaming/triggerRouteHooks.d.ts +26 -0
- package/dist/streaming/triggerRouteHooks.d.ts.map +1 -0
- package/dist/streaming/triggerRouteHooks.js +71 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +0 -0
- package/dist/utils.d.ts +14 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +62 -0
- package/inject/reactRefresh.js +7 -0
- package/package.json +116 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var rscRenderer_exports = {};
|
|
30
|
+
__export(rscRenderer_exports, {
|
|
31
|
+
renderRscToStream: () => renderRscToStream,
|
|
32
|
+
setClientEntries: () => setClientEntries
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(rscRenderer_exports);
|
|
35
|
+
var import_node_path = __toESM(require("node:path"), 1);
|
|
36
|
+
var import_react = require("react");
|
|
37
|
+
var import_server = require("react-server-dom-webpack/server.edge");
|
|
38
|
+
var import_project_config = require("@cedarjs/project-config");
|
|
39
|
+
var import_entries = require("../lib/entries.js");
|
|
40
|
+
var import_StatusError = require("../lib/StatusError.js");
|
|
41
|
+
let absoluteClientEntries = {};
|
|
42
|
+
function renderRscToStream(input) {
|
|
43
|
+
return input.rscId ? renderRsc(input) : executeRsa(input);
|
|
44
|
+
}
|
|
45
|
+
async function loadServerFile(filePath) {
|
|
46
|
+
console.log("rscRenderer.ts loadServerFile filePath", filePath);
|
|
47
|
+
return import(`file://${filePath}`);
|
|
48
|
+
}
|
|
49
|
+
const getRoutesComponent = async () => {
|
|
50
|
+
const serverEntries = await (0, import_entries.getEntriesFromDist)();
|
|
51
|
+
console.log("rscRenderer.ts serverEntries", serverEntries);
|
|
52
|
+
const routesPath = import_node_path.default.join(
|
|
53
|
+
(0, import_project_config.getPaths)().web.distRsc,
|
|
54
|
+
serverEntries["__rwjs__Routes"]
|
|
55
|
+
);
|
|
56
|
+
if (!routesPath) {
|
|
57
|
+
throw new import_StatusError.StatusError("No entry found for __rwjs__Routes", 404);
|
|
58
|
+
}
|
|
59
|
+
const routes = await loadServerFile(routesPath);
|
|
60
|
+
return routes.default;
|
|
61
|
+
};
|
|
62
|
+
async function setClientEntries() {
|
|
63
|
+
const entriesFile = (0, import_project_config.getPaths)().web.distRscEntries;
|
|
64
|
+
console.log("setClientEntries :: entriesFile", entriesFile);
|
|
65
|
+
const { clientEntries } = await loadServerFile(entriesFile);
|
|
66
|
+
console.log("setClientEntries :: clientEntries", clientEntries);
|
|
67
|
+
if (!clientEntries) {
|
|
68
|
+
throw new Error("Failed to load clientEntries");
|
|
69
|
+
}
|
|
70
|
+
const baseDir = import_node_path.default.dirname(entriesFile);
|
|
71
|
+
absoluteClientEntries = Object.fromEntries(
|
|
72
|
+
Object.entries(clientEntries).map(([key, val]) => {
|
|
73
|
+
let fullKey = import_node_path.default.join(baseDir, key);
|
|
74
|
+
if (process.platform === "win32") {
|
|
75
|
+
fullKey = fullKey.replaceAll("\\", "/");
|
|
76
|
+
}
|
|
77
|
+
return [fullKey, "/" + val];
|
|
78
|
+
})
|
|
79
|
+
);
|
|
80
|
+
console.log(
|
|
81
|
+
"setClientEntries :: absoluteClientEntries",
|
|
82
|
+
absoluteClientEntries
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
function getBundlerConfig() {
|
|
86
|
+
const bundlerConfig = new Proxy(
|
|
87
|
+
{},
|
|
88
|
+
{
|
|
89
|
+
get(_target, encodedId) {
|
|
90
|
+
console.log("Proxy get encodedId", encodedId);
|
|
91
|
+
const [filePath, name] = encodedId.split("#");
|
|
92
|
+
const filePathSlash = filePath.replaceAll("\\", "/");
|
|
93
|
+
const id = absoluteClientEntries[filePathSlash];
|
|
94
|
+
console.log("absoluteClientEntries", absoluteClientEntries);
|
|
95
|
+
console.log("filePath", filePathSlash);
|
|
96
|
+
if (!id) {
|
|
97
|
+
throw new Error("No client entry found for " + filePathSlash);
|
|
98
|
+
}
|
|
99
|
+
console.log("rscRenderer proxy id", id);
|
|
100
|
+
return { id, chunks: [id], name, async: true };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
return bundlerConfig;
|
|
105
|
+
}
|
|
106
|
+
async function renderRsc(input) {
|
|
107
|
+
if (input.rsaId || !input.args) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
"Unexpected input. Can't request both RSCs and execute RSAs at the same time."
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
if (!input.rscId) {
|
|
113
|
+
throw new Error("Unexpected input. Missing rscId or props.");
|
|
114
|
+
}
|
|
115
|
+
console.log("renderRsc input", input);
|
|
116
|
+
const serverRoutes = await getRoutesComponent();
|
|
117
|
+
const model = {
|
|
118
|
+
__rwjs__Routes: (0, import_react.createElement)(serverRoutes)
|
|
119
|
+
};
|
|
120
|
+
console.log("rscRenderer.ts renderRsc model", model);
|
|
121
|
+
return (0, import_server.renderToReadableStream)(model, getBundlerConfig());
|
|
122
|
+
}
|
|
123
|
+
function isSerializedFormData(data) {
|
|
124
|
+
return !!data && data?.__formData__;
|
|
125
|
+
}
|
|
126
|
+
async function executeRsa(input) {
|
|
127
|
+
console.log("executeRsa input", input);
|
|
128
|
+
if (!input.rsaId || !input.args) {
|
|
129
|
+
throw new Error("Unexpected input");
|
|
130
|
+
}
|
|
131
|
+
const [fileName, actionName] = input.rsaId.split("#");
|
|
132
|
+
console.log("Server Action fileName", fileName, "actionName", actionName);
|
|
133
|
+
const module2 = await loadServerFile(fileName);
|
|
134
|
+
if (isSerializedFormData(input.args[0])) {
|
|
135
|
+
const formData = new FormData();
|
|
136
|
+
Object.entries(input.args[0].state).forEach(([key, value]) => {
|
|
137
|
+
if (Array.isArray(value)) {
|
|
138
|
+
value.forEach((v) => {
|
|
139
|
+
formData.append(key, v);
|
|
140
|
+
});
|
|
141
|
+
} else {
|
|
142
|
+
formData.append(key, value);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
input.args[0] = formData;
|
|
146
|
+
}
|
|
147
|
+
const method = module2[actionName] || module2;
|
|
148
|
+
console.log("rscRenderer.ts method", method);
|
|
149
|
+
console.log("rscRenderer.ts args", ...input.args);
|
|
150
|
+
const data = await method(...input.args);
|
|
151
|
+
console.log("rscRenderer.ts rsa return data", data);
|
|
152
|
+
const serverRoutes = await getRoutesComponent();
|
|
153
|
+
console.log("rscRenderer.ts executeRsa serverRoutes", serverRoutes);
|
|
154
|
+
const model = {
|
|
155
|
+
__rwjs__Routes: (0, import_react.createElement)(serverRoutes),
|
|
156
|
+
__rwjs__rsa_data: data
|
|
157
|
+
};
|
|
158
|
+
console.log("rscRenderer.ts executeRsa model", model);
|
|
159
|
+
return (0, import_server.renderToReadableStream)(model, getBundlerConfig());
|
|
160
|
+
}
|
|
161
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
162
|
+
0 && (module.exports = {
|
|
163
|
+
renderRscToStream,
|
|
164
|
+
setClientEntries
|
|
165
|
+
});
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var rscRequestHandler_exports = {};
|
|
30
|
+
__export(rscRequestHandler_exports, {
|
|
31
|
+
createRscRequestHandler: () => createRscRequestHandler
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(rscRequestHandler_exports);
|
|
34
|
+
var import_node_stream = require("node:stream");
|
|
35
|
+
var DefaultFetchAPI = __toESM(require("@whatwg-node/fetch"), 1);
|
|
36
|
+
var import_server = require("@whatwg-node/server");
|
|
37
|
+
var import_busboy = __toESM(require("busboy"), 1);
|
|
38
|
+
var import_react_server_dom_webpack_server = require("../bundled/react-server-dom-webpack.server.js");
|
|
39
|
+
var import_StatusError = require("../lib/StatusError.js");
|
|
40
|
+
var import_invokeMiddleware = require("../middleware/invokeMiddleware.js");
|
|
41
|
+
var import_rscRenderer = require("./rscRenderer.js");
|
|
42
|
+
var import_rscStudioHandlers = require("./rscStudioHandlers.js");
|
|
43
|
+
const BASE_PATH = "/rw-rsc/";
|
|
44
|
+
function createRscRequestHandler(options) {
|
|
45
|
+
return async (req, res, next) => {
|
|
46
|
+
console.log("BASE_PATH", BASE_PATH);
|
|
47
|
+
console.log("req.originalUrl", req.originalUrl, "req.url", req.url);
|
|
48
|
+
console.log("req.headers.host", req.headers.host);
|
|
49
|
+
console.log("req.headers['rw-rsc']", req.headers["rw-rsc"]);
|
|
50
|
+
const mwRouter = await options.getMiddlewareRouter();
|
|
51
|
+
if (mwRouter) {
|
|
52
|
+
const webReq = (0, import_server.normalizeNodeRequest)(req, DefaultFetchAPI);
|
|
53
|
+
const matchedMw = mwRouter.find(webReq.method, webReq.url);
|
|
54
|
+
const [mwResponse] = await (0, import_invokeMiddleware.invoke)(
|
|
55
|
+
webReq,
|
|
56
|
+
matchedMw?.handler,
|
|
57
|
+
{
|
|
58
|
+
params: matchedMw?.params,
|
|
59
|
+
viteDevServer: options.viteDevServer
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
const webRes = mwResponse.toResponse();
|
|
63
|
+
webRes.headers.forEach((value, key) => {
|
|
64
|
+
res.setHeader(key, value);
|
|
65
|
+
});
|
|
66
|
+
if (mwResponse.isRedirect() || mwResponse.body) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
"Not Implemented: What should happen if this RSC handler fails? And which part - Client side router?"
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (req.headers["rw-rsc"] !== "1") {
|
|
73
|
+
return next();
|
|
74
|
+
}
|
|
75
|
+
const url = new URL(req.originalUrl || "", "http://" + req.headers.host);
|
|
76
|
+
let rscId;
|
|
77
|
+
let rsaId;
|
|
78
|
+
let args = [];
|
|
79
|
+
if (url.pathname.startsWith(BASE_PATH)) {
|
|
80
|
+
rscId = url.pathname.split("/").pop();
|
|
81
|
+
rsaId = url.searchParams.get("action_id") || void 0;
|
|
82
|
+
console.log("rscId", rscId);
|
|
83
|
+
console.log("rsaId", rsaId);
|
|
84
|
+
if (rscId && rscId !== "_") {
|
|
85
|
+
res.setHeader("Content-Type", "text/x-component");
|
|
86
|
+
} else {
|
|
87
|
+
rscId = void 0;
|
|
88
|
+
}
|
|
89
|
+
args = await handleRsa(rsaId, req, args);
|
|
90
|
+
}
|
|
91
|
+
console.log("rscRequestHandler: args", args);
|
|
92
|
+
if (rscId || rsaId) {
|
|
93
|
+
const handleError = (err) => {
|
|
94
|
+
console.log("handleError() err", err);
|
|
95
|
+
if ((0, import_StatusError.hasStatusCode)(err)) {
|
|
96
|
+
res.statusCode = err.statusCode;
|
|
97
|
+
} else {
|
|
98
|
+
console.info("Cannot render RSC", err);
|
|
99
|
+
res.statusCode = 500;
|
|
100
|
+
}
|
|
101
|
+
res.end(String(err));
|
|
102
|
+
};
|
|
103
|
+
try {
|
|
104
|
+
const readable = await (0, import_rscRenderer.renderRscToStream)({ rscId, rsaId, args });
|
|
105
|
+
import_node_stream.Readable.fromWeb(readable).pipe(res);
|
|
106
|
+
await (0, import_rscStudioHandlers.sendRscFlightToStudio)({
|
|
107
|
+
rscId,
|
|
108
|
+
rsaId,
|
|
109
|
+
args,
|
|
110
|
+
basePath: BASE_PATH,
|
|
111
|
+
req,
|
|
112
|
+
handleError
|
|
113
|
+
});
|
|
114
|
+
} catch (e) {
|
|
115
|
+
handleError(e);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
async function handleRsa(rsaId, req, args) {
|
|
121
|
+
if (!rsaId) {
|
|
122
|
+
return args;
|
|
123
|
+
}
|
|
124
|
+
if (req.headers["content-type"]?.startsWith("multipart/form-data")) {
|
|
125
|
+
console.log("RSA: multipart/form-data");
|
|
126
|
+
const bb = (0, import_busboy.default)({ headers: req.headers });
|
|
127
|
+
const reply = (0, import_react_server_dom_webpack_server.decodeReplyFromBusboy)(bb);
|
|
128
|
+
req.pipe(bb);
|
|
129
|
+
args = await reply;
|
|
130
|
+
if (args[0] instanceof FormData) {
|
|
131
|
+
const serializedFormData = {};
|
|
132
|
+
for (const [key, value] of args[0]) {
|
|
133
|
+
if (serializedFormData[key] !== void 0) {
|
|
134
|
+
if (!Array.isArray(serializedFormData[key])) {
|
|
135
|
+
serializedFormData[key] = [serializedFormData[key]];
|
|
136
|
+
}
|
|
137
|
+
serializedFormData[key].push(value);
|
|
138
|
+
} else {
|
|
139
|
+
serializedFormData[key] = value;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
args[0] = {
|
|
143
|
+
__formData__: true,
|
|
144
|
+
state: serializedFormData
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
console.log("RSA: regular body");
|
|
149
|
+
let body = "";
|
|
150
|
+
for await (const chunk of req) {
|
|
151
|
+
body += chunk;
|
|
152
|
+
}
|
|
153
|
+
if (body) {
|
|
154
|
+
args = await (0, import_react_server_dom_webpack_server.decodeReply)(body);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return args;
|
|
158
|
+
}
|
|
159
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
160
|
+
0 && (module.exports = {
|
|
161
|
+
createRscRequestHandler
|
|
162
|
+
});
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var rscStudioHandlers_exports = {};
|
|
30
|
+
__export(rscStudioHandlers_exports, {
|
|
31
|
+
sendRscFlightToStudio: () => sendRscFlightToStudio
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(rscStudioHandlers_exports);
|
|
34
|
+
var import_node_http = __toESM(require("node:http"), 1);
|
|
35
|
+
var import_project_config = require("@cedarjs/project-config");
|
|
36
|
+
var import_rscRenderer = require("./rscRenderer.js");
|
|
37
|
+
const isTest = () => {
|
|
38
|
+
return process.env.NODE_ENV === "test";
|
|
39
|
+
};
|
|
40
|
+
const isDevelopment = () => {
|
|
41
|
+
return process.env.NODE_ENV !== "production" && !isTest();
|
|
42
|
+
};
|
|
43
|
+
const isStudioEnabled = () => {
|
|
44
|
+
return (0, import_project_config.getRawConfig)()["studio"] !== void 0;
|
|
45
|
+
};
|
|
46
|
+
const shouldSendToStudio = () => {
|
|
47
|
+
return isStudioEnabled() && !isDevelopment();
|
|
48
|
+
};
|
|
49
|
+
const getStudioPort = () => {
|
|
50
|
+
return (0, import_project_config.getConfig)().studio.basePort;
|
|
51
|
+
};
|
|
52
|
+
const processRenderRscStream = async (readable) => {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
const chunks = [];
|
|
55
|
+
const writable = new WritableStream({
|
|
56
|
+
write(chunk) {
|
|
57
|
+
chunks.push(chunk);
|
|
58
|
+
},
|
|
59
|
+
close() {
|
|
60
|
+
resolve(Buffer.concat(chunks).toString("utf8"));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
readable.pipeTo(writable).catch((error) => reject(error));
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
const postFlightToStudio = (payload, metadata) => {
|
|
67
|
+
if (!shouldSendToStudio()) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const base64Payload = Buffer.from(payload).toString("base64");
|
|
71
|
+
const encodedMetadata = Buffer.from(JSON.stringify(metadata)).toString(
|
|
72
|
+
"base64"
|
|
73
|
+
);
|
|
74
|
+
const jsonBody = JSON.stringify({
|
|
75
|
+
flight: {
|
|
76
|
+
encodedPayload: base64Payload,
|
|
77
|
+
encoding: "base64",
|
|
78
|
+
encodedMetadata
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const options = {
|
|
82
|
+
hostname: "localhost",
|
|
83
|
+
port: getStudioPort(),
|
|
84
|
+
path: "/.redwood/functions/rsc-flight",
|
|
85
|
+
method: "POST",
|
|
86
|
+
headers: {
|
|
87
|
+
"Content-Type": "application/json",
|
|
88
|
+
"Content-Length": Buffer.byteLength(jsonBody)
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const req = import_node_http.default.request(options, (res) => {
|
|
92
|
+
res.setEncoding("utf8");
|
|
93
|
+
});
|
|
94
|
+
req.on("error", (e) => {
|
|
95
|
+
console.error("An error occurred sending the Flight Payload to Studio");
|
|
96
|
+
console.error(e);
|
|
97
|
+
});
|
|
98
|
+
req.write(jsonBody);
|
|
99
|
+
req.end();
|
|
100
|
+
};
|
|
101
|
+
const createStudioFlightHandler = (readable, metadata) => {
|
|
102
|
+
processRenderRscStream(readable).then((payload) => {
|
|
103
|
+
console.debug("Sending RSC Rendered stream to Studio");
|
|
104
|
+
postFlightToStudio(payload, metadata);
|
|
105
|
+
console.debug("Sent RSC Rendered stream to Studio");
|
|
106
|
+
console.debug("payload to Studio:", payload);
|
|
107
|
+
console.debug("metadata to Studio:", metadata);
|
|
108
|
+
}).catch((error) => {
|
|
109
|
+
console.error("An error occurred getting RSC Rendered steam:", error);
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
const sendRscFlightToStudio = async (input) => {
|
|
113
|
+
if (!shouldSendToStudio()) {
|
|
114
|
+
console.debug("Studio is not enabled");
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const { rscId, rsaId, args, basePath, req, handleError } = input;
|
|
118
|
+
try {
|
|
119
|
+
const startedAt = Date.now();
|
|
120
|
+
const start = performance.now();
|
|
121
|
+
const readable = await (0, import_rscRenderer.renderRscToStream)({ rscId, rsaId, args });
|
|
122
|
+
const endedAt = Date.now();
|
|
123
|
+
const end = performance.now();
|
|
124
|
+
const duration = end - start;
|
|
125
|
+
const metadata = {
|
|
126
|
+
rsc: {
|
|
127
|
+
rscId,
|
|
128
|
+
rsaId,
|
|
129
|
+
args
|
|
130
|
+
},
|
|
131
|
+
request: {
|
|
132
|
+
basePath,
|
|
133
|
+
originalUrl: req.originalUrl,
|
|
134
|
+
url: req.url,
|
|
135
|
+
headers: req.headers
|
|
136
|
+
},
|
|
137
|
+
performance: {
|
|
138
|
+
startedAt,
|
|
139
|
+
endedAt,
|
|
140
|
+
duration
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
createStudioFlightHandler(readable, metadata);
|
|
144
|
+
} catch (e) {
|
|
145
|
+
if (e instanceof Error) {
|
|
146
|
+
console.error("An error occurred rendering RSC and sending to Studio:", e);
|
|
147
|
+
handleError(e);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
152
|
+
0 && (module.exports = {
|
|
153
|
+
sendRscFlightToStudio
|
|
154
|
+
});
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var runFeServer_exports = {};
|
|
30
|
+
__export(runFeServer_exports, {
|
|
31
|
+
runFeServer: () => runFeServer
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(runFeServer_exports);
|
|
34
|
+
var import_node_path = __toESM(require("node:path"), 1);
|
|
35
|
+
var import_node_url = __toESM(require("node:url"), 1);
|
|
36
|
+
var import_server = require("@whatwg-node/server");
|
|
37
|
+
var import_dotenv_defaults = require("dotenv-defaults");
|
|
38
|
+
var import_express = __toESM(require("express"), 1);
|
|
39
|
+
var import_http_proxy_middleware = require("http-proxy-middleware");
|
|
40
|
+
var import_ws = __toESM(require("ws"), 1);
|
|
41
|
+
var import_project_config = require("@cedarjs/project-config");
|
|
42
|
+
var import_rscCss = require("@cedarjs/router/rscCss");
|
|
43
|
+
var import_server_store = require("@cedarjs/server-store");
|
|
44
|
+
var import_registerFwGlobalsAndShims = require("./lib/registerFwGlobalsAndShims.js");
|
|
45
|
+
var import_invokeMiddleware = require("./middleware/invokeMiddleware.js");
|
|
46
|
+
var import_register = require("./middleware/register.js");
|
|
47
|
+
var import_createReactStreamingHandler = require("./streaming/createReactStreamingHandler.js");
|
|
48
|
+
var import_utils = require("./utils.js");
|
|
49
|
+
(0, import_dotenv_defaults.config)({
|
|
50
|
+
path: import_node_path.default.join((0, import_project_config.getPaths)().base, ".env"),
|
|
51
|
+
defaults: import_node_path.default.join((0, import_project_config.getPaths)().base, ".env.defaults"),
|
|
52
|
+
// @ts-expect-error - Old typings. @types/dotenv-defaults depends on dotenv
|
|
53
|
+
// v8. dotenv-defaults uses dotenv v14
|
|
54
|
+
multiline: true
|
|
55
|
+
});
|
|
56
|
+
async function runFeServer() {
|
|
57
|
+
const app = (0, import_express.default)();
|
|
58
|
+
const rwPaths = (0, import_project_config.getPaths)();
|
|
59
|
+
const rwConfig = (0, import_project_config.getConfig)();
|
|
60
|
+
const rscEnabled = rwConfig.experimental?.rsc?.enabled;
|
|
61
|
+
(0, import_registerFwGlobalsAndShims.registerFwGlobalsAndShims)();
|
|
62
|
+
if (rscEnabled) {
|
|
63
|
+
const { setClientEntries } = await import("./rsc/rscRenderer.js");
|
|
64
|
+
createWebSocketServer();
|
|
65
|
+
try {
|
|
66
|
+
await setClientEntries();
|
|
67
|
+
} catch (e) {
|
|
68
|
+
console.error("Failed to load client entries");
|
|
69
|
+
console.error(e);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const routeManifestUrl = import_node_url.default.pathToFileURL(rwPaths.web.routeManifest).href;
|
|
74
|
+
const routeManifest = (await import(routeManifestUrl, { with: { type: "json" } })).default;
|
|
75
|
+
const clientBuildManifestUrl = import_node_url.default.pathToFileURL(
|
|
76
|
+
import_node_path.default.join(rwPaths.web.distBrowser, "client-build-manifest.json")
|
|
77
|
+
).href;
|
|
78
|
+
const clientBuildManifest = (await import(clientBuildManifestUrl, { with: { type: "json" } })).default;
|
|
79
|
+
const clientEntry = rscEnabled ? clientBuildManifest["entry.client.tsx"] || clientBuildManifest["entry.client.jsx"] : Object.values(clientBuildManifest).find(
|
|
80
|
+
(manifestItem) => manifestItem.isEntry
|
|
81
|
+
);
|
|
82
|
+
if (!clientEntry) {
|
|
83
|
+
throw new Error("Could not find client entry in build manifest");
|
|
84
|
+
}
|
|
85
|
+
const middlewareRouter = await (0, import_register.createMiddlewareRouter)();
|
|
86
|
+
const serverStorage = (0, import_server_store.createServerStorage)();
|
|
87
|
+
const handleWithMiddleware = () => {
|
|
88
|
+
return (0, import_server.createServerAdapter)(async (req) => {
|
|
89
|
+
const matchedMw = middlewareRouter.find(req.method, req.url);
|
|
90
|
+
const handler = matchedMw?.handler;
|
|
91
|
+
if (!matchedMw) {
|
|
92
|
+
return new Response("No middleware found", { status: 404 });
|
|
93
|
+
}
|
|
94
|
+
const [mwRes] = await (0, import_invokeMiddleware.invoke)(req, handler, {
|
|
95
|
+
params: matchedMw?.params
|
|
96
|
+
});
|
|
97
|
+
return mwRes.toResponse();
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
app.use(
|
|
101
|
+
"/assets",
|
|
102
|
+
import_express.default.static(rwPaths.web.distBrowser + "/assets", { index: false })
|
|
103
|
+
);
|
|
104
|
+
app.use("*", (req, _res, next) => {
|
|
105
|
+
const fullUrl = (0, import_utils.getFullUrl)(req, rscEnabled);
|
|
106
|
+
const headers = (0, import_utils.convertExpressHeaders)(req.headersDistinct);
|
|
107
|
+
const perReqStore = (0, import_server_store.createPerRequestMap)({ headers, fullUrl });
|
|
108
|
+
serverStorage.run(perReqStore, next);
|
|
109
|
+
});
|
|
110
|
+
app.use(
|
|
111
|
+
rwConfig.web.apiUrl,
|
|
112
|
+
(0, import_http_proxy_middleware.createProxyMiddleware)({
|
|
113
|
+
changeOrigin: false,
|
|
114
|
+
// Using 127.0.0.1 to force ipv4. With `localhost` you don't really know
|
|
115
|
+
// if it's going to be ipv4 or ipv6
|
|
116
|
+
target: `http://127.0.0.1:${rwConfig.api.port}`
|
|
117
|
+
})
|
|
118
|
+
);
|
|
119
|
+
if (rscEnabled) {
|
|
120
|
+
const { createRscRequestHandler } = await import("./rsc/rscRequestHandler.js");
|
|
121
|
+
app.use(
|
|
122
|
+
"/rw-rsc",
|
|
123
|
+
createRscRequestHandler({
|
|
124
|
+
getMiddlewareRouter: async () => middlewareRouter
|
|
125
|
+
})
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
app.use(import_express.default.static(rwPaths.web.distBrowser, { index: false }));
|
|
129
|
+
const getStylesheetLinks = rscEnabled ? (0, import_rscCss.getRscStylesheetLinkGenerator)(clientEntry.css) : () => clientEntry.css || [];
|
|
130
|
+
const routeHandler = await (0, import_createReactStreamingHandler.createReactStreamingHandler)({
|
|
131
|
+
routes: Object.values(routeManifest),
|
|
132
|
+
clientEntryPath: clientEntry.file,
|
|
133
|
+
getStylesheetLinks,
|
|
134
|
+
getMiddlewareRouter: async () => middlewareRouter
|
|
135
|
+
});
|
|
136
|
+
app.get("*", (0, import_server.createServerAdapter)(routeHandler));
|
|
137
|
+
app.post("*", handleWithMiddleware());
|
|
138
|
+
app.listen(rwConfig.web.port);
|
|
139
|
+
console.log(
|
|
140
|
+
`Started production FE server on http://localhost:${rwConfig.web.port}`
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
function createWebSocketServer() {
|
|
144
|
+
const wsServer = new import_ws.WebSocketServer({ port: 18998 });
|
|
145
|
+
wsServer.on("connection", (ws) => {
|
|
146
|
+
console.log("A new client connected.");
|
|
147
|
+
ws.on("message", (data) => {
|
|
148
|
+
const message = data.toString();
|
|
149
|
+
console.log("runFeServer.ts: Received message:");
|
|
150
|
+
console.log(message.slice(0, 120) + "...");
|
|
151
|
+
wsServer.clients.forEach((client) => {
|
|
152
|
+
if (client.readyState === import_ws.default.OPEN) {
|
|
153
|
+
client.send(message);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
ws.on("close", () => {
|
|
158
|
+
console.log("A client disconnected.");
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
runFeServer();
|
|
163
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
164
|
+
0 && (module.exports = {
|
|
165
|
+
runFeServer
|
|
166
|
+
});
|