@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.
Files changed (213) hide show
  1. package/LICENSE +21 -0
  2. package/bins/rw-vite-build.mjs +61 -0
  3. package/bins/rw-vite-dev.mjs +57 -0
  4. package/bins/vite.mjs +12 -0
  5. package/dist/build/build.d.ts +21 -0
  6. package/dist/build/build.d.ts.map +1 -0
  7. package/dist/build/build.js +78 -0
  8. package/dist/buildFeServer.d.ts +6 -0
  9. package/dist/buildFeServer.d.ts.map +1 -0
  10. package/dist/buildFeServer.js +39 -0
  11. package/dist/buildRouteHooks.d.ts +3 -0
  12. package/dist/buildRouteHooks.d.ts.map +1 -0
  13. package/dist/buildRouteHooks.js +45 -0
  14. package/dist/buildRouteManifest.d.ts +6 -0
  15. package/dist/buildRouteManifest.d.ts.map +1 -0
  16. package/dist/buildRouteManifest.js +58 -0
  17. package/dist/buildRscClientAndServer.d.ts +4 -0
  18. package/dist/buildRscClientAndServer.d.ts.map +1 -0
  19. package/dist/buildRscClientAndServer.js +30 -0
  20. package/dist/bundled/react-server-dom-webpack.server.d.ts +2 -0
  21. package/dist/bundled/react-server-dom-webpack.server.d.ts.map +1 -0
  22. package/dist/bundled/react-server-dom-webpack.server.js +33529 -0
  23. package/dist/cjs/ClientRouter.d.ts +1 -0
  24. package/dist/cjs/build/build.d.ts +1 -0
  25. package/dist/cjs/build/build.js +116 -0
  26. package/dist/cjs/buildFeServer.d.ts +1 -0
  27. package/dist/cjs/buildFeServer.js +63 -0
  28. package/dist/cjs/buildRouteHooks.js +66 -0
  29. package/dist/cjs/buildRouteManifest.js +92 -0
  30. package/dist/cjs/buildRscClientAndServer.js +54 -0
  31. package/dist/cjs/client.d.ts +1 -0
  32. package/dist/cjs/clientSsr.d.ts +1 -0
  33. package/dist/cjs/devFeServer.js +153 -0
  34. package/dist/cjs/index.d.ts +1 -0
  35. package/dist/cjs/index.js +184 -0
  36. package/dist/cjs/lib/StatusError.js +36 -0
  37. package/dist/cjs/lib/entries.js +53 -0
  38. package/dist/cjs/lib/envVarDefinitions.js +87 -0
  39. package/dist/cjs/lib/getMergedConfig.js +187 -0
  40. package/dist/cjs/lib/onWarn.js +36 -0
  41. package/dist/cjs/lib/registerFwGlobalsAndShims.js +117 -0
  42. package/dist/cjs/middleware/index.js +22 -0
  43. package/dist/cjs/middleware/invokeMiddleware.js +52 -0
  44. package/dist/cjs/middleware/register.js +106 -0
  45. package/dist/cjs/middleware/types.js +16 -0
  46. package/dist/cjs/package.json +1 -0
  47. package/dist/cjs/plugins/vite-plugin-jsx-loader.js +42 -0
  48. package/dist/cjs/plugins/vite-plugin-remove-from-bundle.js +56 -0
  49. package/dist/cjs/plugins/vite-plugin-rsc-analyze.js +104 -0
  50. package/dist/cjs/plugins/vite-plugin-rsc-reload.js +75 -0
  51. package/dist/cjs/plugins/vite-plugin-rsc-routes-auto-loader.js +159 -0
  52. package/dist/cjs/plugins/vite-plugin-rsc-routes-imports.js +125 -0
  53. package/dist/cjs/plugins/vite-plugin-rsc-ssr-router-import.js +75 -0
  54. package/dist/cjs/plugins/vite-plugin-rsc-transform-client.js +229 -0
  55. package/dist/cjs/plugins/vite-plugin-rsc-transform-server.js +398 -0
  56. package/dist/cjs/plugins/vite-plugin-swap-apollo-provider.js +41 -0
  57. package/dist/cjs/rsc/rscBuildAnalyze.js +116 -0
  58. package/dist/cjs/rsc/rscBuildClient.js +91 -0
  59. package/dist/cjs/rsc/rscBuildCopyCssAssets.js +56 -0
  60. package/dist/cjs/rsc/rscBuildEntriesFile.js +115 -0
  61. package/dist/cjs/rsc/rscBuildForServer.js +157 -0
  62. package/dist/cjs/rsc/rscBuildForSsr.js +172 -0
  63. package/dist/cjs/rsc/rscBuildRwEnvVars.js +56 -0
  64. package/dist/cjs/rsc/rscRenderer.js +165 -0
  65. package/dist/cjs/rsc/rscRequestHandler.js +162 -0
  66. package/dist/cjs/rsc/rscStudioHandlers.js +154 -0
  67. package/dist/cjs/runFeServer.js +166 -0
  68. package/dist/cjs/streaming/buildForStreamingServer.js +65 -0
  69. package/dist/cjs/streaming/collectCss.js +52 -0
  70. package/dist/cjs/streaming/createReactStreamingHandler.js +173 -0
  71. package/dist/cjs/streaming/streamHelpers.js +228 -0
  72. package/dist/cjs/streaming/transforms/bufferedTransform.js +61 -0
  73. package/dist/cjs/streaming/transforms/cancelTimeoutTransform.js +34 -0
  74. package/dist/cjs/streaming/transforms/encode-decode.js +36 -0
  75. package/dist/cjs/streaming/transforms/serverInjectionTransform.js +84 -0
  76. package/dist/cjs/streaming/triggerRouteHooks.js +96 -0
  77. package/dist/cjs/types.js +16 -0
  78. package/dist/cjs/utils.js +91 -0
  79. package/dist/devFeServer.d.ts +2 -0
  80. package/dist/devFeServer.d.ts.map +1 -0
  81. package/dist/devFeServer.js +134 -0
  82. package/dist/index.d.ts +6 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +154 -0
  85. package/dist/lib/StatusError.d.ts +8 -0
  86. package/dist/lib/StatusError.d.ts.map +1 -0
  87. package/dist/lib/StatusError.js +11 -0
  88. package/dist/lib/entries.d.ts +3 -0
  89. package/dist/lib/entries.d.ts.map +1 -0
  90. package/dist/lib/entries.js +32 -0
  91. package/dist/lib/envVarDefinitions.d.ts +14 -0
  92. package/dist/lib/envVarDefinitions.d.ts.map +1 -0
  93. package/dist/lib/envVarDefinitions.js +53 -0
  94. package/dist/lib/getMergedConfig.d.ts +11 -0
  95. package/dist/lib/getMergedConfig.d.ts.map +1 -0
  96. package/dist/lib/getMergedConfig.js +153 -0
  97. package/dist/lib/onWarn.d.ts +3 -0
  98. package/dist/lib/onWarn.d.ts.map +1 -0
  99. package/dist/lib/onWarn.js +12 -0
  100. package/dist/lib/registerFwGlobalsAndShims.d.ts +12 -0
  101. package/dist/lib/registerFwGlobalsAndShims.d.ts.map +1 -0
  102. package/dist/lib/registerFwGlobalsAndShims.js +83 -0
  103. package/dist/middleware/index.d.ts +2 -0
  104. package/dist/middleware/index.d.ts.map +1 -0
  105. package/dist/middleware/index.js +1 -0
  106. package/dist/middleware/invokeMiddleware.d.ts +14 -0
  107. package/dist/middleware/invokeMiddleware.d.ts.map +1 -0
  108. package/dist/middleware/invokeMiddleware.js +32 -0
  109. package/dist/middleware/register.d.ts +23 -0
  110. package/dist/middleware/register.d.ts.map +1 -0
  111. package/dist/middleware/register.js +69 -0
  112. package/dist/middleware/types.d.ts +3 -0
  113. package/dist/middleware/types.d.ts.map +1 -0
  114. package/dist/middleware/types.js +0 -0
  115. package/dist/package.json +1 -0
  116. package/dist/plugins/vite-plugin-jsx-loader.d.ts +8 -0
  117. package/dist/plugins/vite-plugin-jsx-loader.d.ts.map +1 -0
  118. package/dist/plugins/vite-plugin-jsx-loader.js +18 -0
  119. package/dist/plugins/vite-plugin-remove-from-bundle.d.ts +17 -0
  120. package/dist/plugins/vite-plugin-remove-from-bundle.d.ts.map +1 -0
  121. package/dist/plugins/vite-plugin-remove-from-bundle.js +31 -0
  122. package/dist/plugins/vite-plugin-rsc-analyze.d.ts +3 -0
  123. package/dist/plugins/vite-plugin-rsc-analyze.d.ts.map +1 -0
  124. package/dist/plugins/vite-plugin-rsc-analyze.js +70 -0
  125. package/dist/plugins/vite-plugin-rsc-reload.d.ts +3 -0
  126. package/dist/plugins/vite-plugin-rsc-reload.d.ts.map +1 -0
  127. package/dist/plugins/vite-plugin-rsc-reload.js +41 -0
  128. package/dist/plugins/vite-plugin-rsc-routes-auto-loader.d.ts +3 -0
  129. package/dist/plugins/vite-plugin-rsc-routes-auto-loader.d.ts.map +1 -0
  130. package/dist/plugins/vite-plugin-rsc-routes-auto-loader.js +130 -0
  131. package/dist/plugins/vite-plugin-rsc-routes-imports.d.ts +3 -0
  132. package/dist/plugins/vite-plugin-rsc-routes-imports.d.ts.map +1 -0
  133. package/dist/plugins/vite-plugin-rsc-routes-imports.js +96 -0
  134. package/dist/plugins/vite-plugin-rsc-ssr-router-import.d.ts +7 -0
  135. package/dist/plugins/vite-plugin-rsc-ssr-router-import.d.ts.map +1 -0
  136. package/dist/plugins/vite-plugin-rsc-ssr-router-import.js +41 -0
  137. package/dist/plugins/vite-plugin-rsc-transform-client.d.ts +3 -0
  138. package/dist/plugins/vite-plugin-rsc-transform-client.d.ts.map +1 -0
  139. package/dist/plugins/vite-plugin-rsc-transform-client.js +195 -0
  140. package/dist/plugins/vite-plugin-rsc-transform-server.d.ts +3 -0
  141. package/dist/plugins/vite-plugin-rsc-transform-server.d.ts.map +1 -0
  142. package/dist/plugins/vite-plugin-rsc-transform-server.js +364 -0
  143. package/dist/plugins/vite-plugin-swap-apollo-provider.d.ts +12 -0
  144. package/dist/plugins/vite-plugin-swap-apollo-provider.d.ts.map +1 -0
  145. package/dist/plugins/vite-plugin-swap-apollo-provider.js +17 -0
  146. package/dist/rsc/rscBuildAnalyze.d.ts +16 -0
  147. package/dist/rsc/rscBuildAnalyze.d.ts.map +1 -0
  148. package/dist/rsc/rscBuildAnalyze.js +92 -0
  149. package/dist/rsc/rscBuildClient.d.ts +7 -0
  150. package/dist/rsc/rscBuildClient.d.ts.map +1 -0
  151. package/dist/rsc/rscBuildClient.js +67 -0
  152. package/dist/rsc/rscBuildCopyCssAssets.d.ts +7 -0
  153. package/dist/rsc/rscBuildCopyCssAssets.d.ts.map +1 -0
  154. package/dist/rsc/rscBuildCopyCssAssets.js +22 -0
  155. package/dist/rsc/rscBuildEntriesFile.d.ts +10 -0
  156. package/dist/rsc/rscBuildEntriesFile.d.ts.map +1 -0
  157. package/dist/rsc/rscBuildEntriesFile.js +81 -0
  158. package/dist/rsc/rscBuildForServer.d.ts +7 -0
  159. package/dist/rsc/rscBuildForServer.d.ts.map +1 -0
  160. package/dist/rsc/rscBuildForServer.js +133 -0
  161. package/dist/rsc/rscBuildForSsr.d.ts +9 -0
  162. package/dist/rsc/rscBuildForSsr.d.ts.map +1 -0
  163. package/dist/rsc/rscBuildForSsr.js +138 -0
  164. package/dist/rsc/rscBuildRwEnvVars.d.ts +10 -0
  165. package/dist/rsc/rscBuildRwEnvVars.d.ts.map +1 -0
  166. package/dist/rsc/rscBuildRwEnvVars.js +22 -0
  167. package/dist/rsc/rscRenderer.d.ts +9 -0
  168. package/dist/rsc/rscRenderer.d.ts.map +1 -0
  169. package/dist/rsc/rscRenderer.js +130 -0
  170. package/dist/rsc/rscRequestHandler.d.ts +10 -0
  171. package/dist/rsc/rscRequestHandler.d.ts.map +1 -0
  172. package/dist/rsc/rscRequestHandler.js +131 -0
  173. package/dist/rsc/rscStudioHandlers.d.ts +10 -0
  174. package/dist/rsc/rscStudioHandlers.d.ts.map +1 -0
  175. package/dist/rsc/rscStudioHandlers.js +120 -0
  176. package/dist/runFeServer.d.ts +2 -0
  177. package/dist/runFeServer.d.ts.map +1 -0
  178. package/dist/runFeServer.js +132 -0
  179. package/dist/streaming/buildForStreamingServer.d.ts +4 -0
  180. package/dist/streaming/buildForStreamingServer.d.ts.map +1 -0
  181. package/dist/streaming/buildForStreamingServer.js +41 -0
  182. package/dist/streaming/collectCss.d.ts +7 -0
  183. package/dist/streaming/collectCss.d.ts.map +1 -0
  184. package/dist/streaming/collectCss.js +27 -0
  185. package/dist/streaming/createReactStreamingHandler.d.ts +12 -0
  186. package/dist/streaming/createReactStreamingHandler.d.ts.map +1 -0
  187. package/dist/streaming/createReactStreamingHandler.js +139 -0
  188. package/dist/streaming/streamHelpers.d.ts +23 -0
  189. package/dist/streaming/streamHelpers.d.ts.map +1 -0
  190. package/dist/streaming/streamHelpers.js +192 -0
  191. package/dist/streaming/transforms/bufferedTransform.d.ts +2 -0
  192. package/dist/streaming/transforms/bufferedTransform.d.ts.map +1 -0
  193. package/dist/streaming/transforms/bufferedTransform.js +37 -0
  194. package/dist/streaming/transforms/cancelTimeoutTransform.d.ts +2 -0
  195. package/dist/streaming/transforms/cancelTimeoutTransform.d.ts.map +1 -0
  196. package/dist/streaming/transforms/cancelTimeoutTransform.js +10 -0
  197. package/dist/streaming/transforms/encode-decode.d.ts +3 -0
  198. package/dist/streaming/transforms/encode-decode.d.ts.map +1 -0
  199. package/dist/streaming/transforms/encode-decode.js +11 -0
  200. package/dist/streaming/transforms/serverInjectionTransform.d.ts +16 -0
  201. package/dist/streaming/transforms/serverInjectionTransform.d.ts.map +1 -0
  202. package/dist/streaming/transforms/serverInjectionTransform.js +60 -0
  203. package/dist/streaming/triggerRouteHooks.d.ts +26 -0
  204. package/dist/streaming/triggerRouteHooks.d.ts.map +1 -0
  205. package/dist/streaming/triggerRouteHooks.js +71 -0
  206. package/dist/types.d.ts +31 -0
  207. package/dist/types.d.ts.map +1 -0
  208. package/dist/types.js +0 -0
  209. package/dist/utils.d.ts +14 -0
  210. package/dist/utils.d.ts.map +1 -0
  211. package/dist/utils.js +62 -0
  212. package/inject/reactRefresh.js +7 -0
  213. 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
+ });