waku 0.10.0 → 0.11.0

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 (107) hide show
  1. package/README.md +3 -0
  2. package/dist/cjs/cli.js +109 -0
  3. package/dist/cjs/client.js +6 -9
  4. package/dist/cjs/config.js +9 -0
  5. package/dist/cjs/{builder.js → lib/builder.js} +22 -112
  6. package/dist/cjs/lib/config.js +37 -0
  7. package/dist/cjs/lib/middleware.js +134 -0
  8. package/dist/cjs/{middleware/lib → lib}/rsc-handler-worker.js +58 -54
  9. package/dist/cjs/{middleware/lib → lib}/rsc-handler.js +3 -2
  10. package/dist/cjs/{middleware/lib → lib}/rsc-utils.js +2 -3
  11. package/dist/cjs/{middleware/lib → lib}/vite-plugin-rsc.js +65 -4
  12. package/dist/cjs/main.js +9 -6
  13. package/dist/cjs/router/client.js +16 -6
  14. package/dist/cli.d.ts +2 -0
  15. package/dist/cli.js +61 -0
  16. package/dist/client.d.ts +1 -1
  17. package/dist/client.js +6 -9
  18. package/dist/config.d.ts +9 -28
  19. package/dist/config.js +3 -1
  20. package/dist/lib/builder.d.ts +1 -0
  21. package/dist/{builder.js → lib/builder.js} +22 -73
  22. package/dist/lib/config.d.ts +50 -0
  23. package/dist/lib/config.js +19 -0
  24. package/dist/lib/middleware.d.ts +8 -0
  25. package/dist/lib/middleware.js +111 -0
  26. package/dist/{middleware/lib → lib}/rsc-handler-worker.js +58 -54
  27. package/dist/{middleware/lib → lib}/rsc-handler.js +3 -2
  28. package/dist/{middleware/lib → lib}/rsc-utils.d.ts +1 -1
  29. package/dist/{middleware/lib → lib}/rsc-utils.js +2 -3
  30. package/dist/lib/vite-plugin-rsc.d.ts +5 -0
  31. package/dist/{middleware/lib → lib}/vite-plugin-rsc.js +59 -4
  32. package/dist/main.d.ts +2 -3
  33. package/dist/main.js +2 -2
  34. package/dist/router/client.d.ts +4 -1
  35. package/dist/router/client.js +16 -6
  36. package/dist/server.d.ts +2 -2
  37. package/package.json +30 -19
  38. package/src/cli.ts +64 -0
  39. package/src/client.ts +6 -10
  40. package/src/config.ts +19 -35
  41. package/src/{builder.ts → lib/builder.ts} +26 -80
  42. package/src/lib/config.ts +20 -0
  43. package/src/lib/middleware.ts +117 -0
  44. package/src/{middleware/lib → lib}/rsc-handler-worker.ts +95 -112
  45. package/src/{middleware/lib → lib}/rsc-handler.ts +6 -19
  46. package/src/{middleware/lib → lib}/rsc-utils.ts +2 -3
  47. package/src/{middleware/lib → lib}/vite-plugin-rsc.ts +63 -4
  48. package/src/main.ts +2 -4
  49. package/src/router/client.ts +17 -6
  50. package/src/server.ts +1 -1
  51. package/cli.js +0 -4
  52. package/dist/builder.d.ts +0 -2
  53. package/dist/cjs/cli-build.js +0 -7
  54. package/dist/cjs/cli-dev.js +0 -8
  55. package/dist/cjs/cli-start.js +0 -8
  56. package/dist/cjs/devServer.js +0 -85
  57. package/dist/cjs/middleware/indexFallback.js +0 -41
  58. package/dist/cjs/middleware/lib/common.js +0 -26
  59. package/dist/cjs/middleware/notFound.js +0 -15
  60. package/dist/cjs/middleware/rewriteRsc.js +0 -32
  61. package/dist/cjs/middleware/rscDev.js +0 -69
  62. package/dist/cjs/middleware/rscPrd.js +0 -72
  63. package/dist/cjs/middleware/staticFile.js +0 -37
  64. package/dist/cjs/middleware/viteServer.js +0 -101
  65. package/dist/cjs/prdServer.js +0 -86
  66. package/dist/cli-build.d.ts +0 -1
  67. package/dist/cli-build.js +0 -3
  68. package/dist/cli-dev.d.ts +0 -1
  69. package/dist/cli-dev.js +0 -4
  70. package/dist/cli-start.d.ts +0 -1
  71. package/dist/cli-start.js +0 -4
  72. package/dist/devServer.d.ts +0 -2
  73. package/dist/devServer.js +0 -31
  74. package/dist/middleware/indexFallback.d.ts +0 -3
  75. package/dist/middleware/indexFallback.js +0 -26
  76. package/dist/middleware/lib/common.d.ts +0 -3
  77. package/dist/middleware/lib/common.js +0 -16
  78. package/dist/middleware/lib/vite-plugin-rsc.d.ts +0 -3
  79. package/dist/middleware/notFound.d.ts +0 -3
  80. package/dist/middleware/notFound.js +0 -5
  81. package/dist/middleware/rewriteRsc.d.ts +0 -3
  82. package/dist/middleware/rewriteRsc.js +0 -22
  83. package/dist/middleware/rscDev.d.ts +0 -3
  84. package/dist/middleware/rscDev.js +0 -54
  85. package/dist/middleware/rscPrd.d.ts +0 -3
  86. package/dist/middleware/rscPrd.js +0 -57
  87. package/dist/middleware/staticFile.d.ts +0 -3
  88. package/dist/middleware/staticFile.js +0 -22
  89. package/dist/middleware/viteServer.d.ts +0 -3
  90. package/dist/middleware/viteServer.js +0 -86
  91. package/dist/prdServer.d.ts +0 -2
  92. package/dist/prdServer.js +0 -32
  93. package/src/cli-build.ts +0 -5
  94. package/src/cli-dev.ts +0 -7
  95. package/src/cli-start.ts +0 -7
  96. package/src/devServer.ts +0 -36
  97. package/src/middleware/indexFallback.ts +0 -28
  98. package/src/middleware/lib/common.ts +0 -22
  99. package/src/middleware/notFound.ts +0 -8
  100. package/src/middleware/rewriteRsc.ts +0 -28
  101. package/src/middleware/rscDev.ts +0 -55
  102. package/src/middleware/rscPrd.ts +0 -59
  103. package/src/middleware/staticFile.ts +0 -28
  104. package/src/middleware/viteServer.ts +0 -87
  105. package/src/prdServer.ts +0 -37
  106. /package/dist/{middleware/lib → lib}/rsc-handler-worker.d.ts +0 -0
  107. /package/dist/{middleware/lib → lib}/rsc-handler.d.ts +0 -0
package/README.md CHANGED
@@ -65,6 +65,9 @@ pnpm create waku # pnpm not working for now
65
65
  - https://twitter.com/dai_shi/status/1643224085755998210
66
66
  - https://twitter.com/dai_shi/status/1647132330543419392
67
67
  - https://twitter.com/dai_shi/status/1654755487391559680
68
+ - https://twitter.com/dai_shi/status/1660306318140542976
69
+ - https://twitter.com/dai_shi/status/1660537733201248257
70
+ - https://twitter.com/dai_shi/status/1660660331528728578
68
71
 
69
72
  </details>
70
73
 
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs"));
7
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
8
+ function _interop_require_default(obj) {
9
+ return obj && obj.__esModule ? obj : {
10
+ default: obj
11
+ };
12
+ }
13
+ function _getRequireWildcardCache(nodeInterop) {
14
+ if (typeof WeakMap !== "function") return null;
15
+ var cacheBabelInterop = new WeakMap();
16
+ var cacheNodeInterop = new WeakMap();
17
+ return (_getRequireWildcardCache = function(nodeInterop) {
18
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
19
+ })(nodeInterop);
20
+ }
21
+ function _interop_require_wildcard(obj, nodeInterop) {
22
+ if (!nodeInterop && obj && obj.__esModule) {
23
+ return obj;
24
+ }
25
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
26
+ return {
27
+ default: obj
28
+ };
29
+ }
30
+ var cache = _getRequireWildcardCache(nodeInterop);
31
+ if (cache && cache.has(obj)) {
32
+ return cache.get(obj);
33
+ }
34
+ var newObj = {};
35
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
36
+ for(var key in obj){
37
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
38
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
39
+ if (desc && (desc.get || desc.set)) {
40
+ Object.defineProperty(newObj, key, desc);
41
+ } else {
42
+ newObj[key] = obj[key];
43
+ }
44
+ }
45
+ }
46
+ newObj.default = obj;
47
+ if (cache) {
48
+ cache.set(obj, newObj);
49
+ }
50
+ return newObj;
51
+ }
52
+ const cmd = process.argv[2];
53
+ for(let i = 3; i < process.argv.length; ++i){
54
+ if (process.argv[i] === "--config") {
55
+ const fname = process.argv[i + 1];
56
+ if (fname && _nodefs.default.existsSync(fname)) {
57
+ process.env.CONFIG_FILE = fname;
58
+ } else {
59
+ throw new Error("config file does not exist");
60
+ }
61
+ ++i;
62
+ }
63
+ }
64
+ switch(cmd){
65
+ case "dev":
66
+ runDev();
67
+ break;
68
+ case "build":
69
+ runBuild();
70
+ break;
71
+ case "start":
72
+ runStart();
73
+ break;
74
+ default:
75
+ throw Error("unknown cmd: " + cmd);
76
+ }
77
+ async function runDev() {
78
+ const { default: express } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("express")));
79
+ const { rsc , devServer } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("./lib/middleware.js")));
80
+ const app = express();
81
+ app.use(rsc({
82
+ mode: "development"
83
+ }));
84
+ app.use(devServer());
85
+ const port = process.env.PORT || 3000;
86
+ app.listen(port, ()=>{
87
+ console.info("Listening on", port);
88
+ });
89
+ }
90
+ async function runBuild() {
91
+ const { build } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("./lib/builder.js")));
92
+ await build();
93
+ }
94
+ async function runStart() {
95
+ const { default: express } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("express")));
96
+ const { resolveConfig } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("./lib/config.js")));
97
+ const config = await resolveConfig("serve");
98
+ const { rsc } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("./lib/middleware.js")));
99
+ const app = express();
100
+ app.use(rsc({
101
+ mode: "production"
102
+ }));
103
+ app.use(express.static(_nodepath.default.join(config.root, config.framework.outPublic)));
104
+ express.static.mime.default_type = "";
105
+ const port = process.env.PORT || 8080;
106
+ app.listen(port, ()=>{
107
+ console.info("Listening on", port);
108
+ });
109
+ }
@@ -19,9 +19,7 @@ _export(exports, {
19
19
  });
20
20
  const _react = require("react");
21
21
  const _client = require("react-server-dom-webpack/client");
22
- // FIXME only works with basePath="/"
23
- const basePath = "/";
24
- function serve(rscId) {
22
+ function serve(rscId, basePath = "/RSC/") {
25
23
  const fetchRSC = (0, _react.cache)((serializedProps)=>{
26
24
  let rerender;
27
25
  const setRerender = (fn)=>{
@@ -37,14 +35,14 @@ function serve(rscId) {
37
35
  const isMutating = !!mutationMode;
38
36
  const searchParams = new URLSearchParams();
39
37
  searchParams.set("action_id", rsfId);
40
- let rscPath = "RSC/";
38
+ let id;
41
39
  if (isMutating) {
42
- rscPath += rscId;
40
+ id = rscId;
43
41
  searchParams.set("props", serializedProps);
44
42
  } else {
45
- rscPath += "_";
43
+ id = "_";
46
44
  }
47
- const response = fetch(basePath + rscPath + "/" + searchParams, {
45
+ const response = fetch(basePath + id + "/" + searchParams, {
48
46
  method: "POST",
49
47
  body: await (0, _client.encodeReply)(args)
50
48
  });
@@ -59,8 +57,7 @@ function serve(rscId) {
59
57
  }
60
58
  };
61
59
  const prefetched = globalThis.__WAKU_PREFETCHED__?.[rscId]?.[serializedProps];
62
- const rscPath = "RSC/" + rscId;
63
- const data = (0, _client.createFromFetch)(prefetched || fetch(basePath + rscPath + "/" + searchParams), options);
60
+ const data = (0, _client.createFromFetch)(prefetched || fetch(basePath + rscId + "/" + searchParams), options);
64
61
  return [
65
62
  data,
66
63
  setRerender
@@ -2,3 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
+ Object.defineProperty(exports, "defineConfig", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return defineConfig;
9
+ }
10
+ });
11
+ function defineConfig(config) {
12
+ return config;
13
+ }
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "runBuild", {
5
+ Object.defineProperty(exports, "build", {
6
6
  enumerable: true,
7
7
  get: function() {
8
- return runBuild;
8
+ return build;
9
9
  }
10
10
  });
11
11
  const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
@@ -13,105 +13,19 @@ const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs"));
13
13
  const _nodemodule = require("node:module");
14
14
  const _vite = require("vite");
15
15
  const _pluginreact = /*#__PURE__*/ _interop_require_default(require("@vitejs/plugin-react"));
16
- const _core = /*#__PURE__*/ _interop_require_wildcard(require("@swc/core"));
17
- const _rscutils = require("./middleware/lib/rsc-utils.js");
18
- const _rschandler = require("./middleware/lib/rsc-handler.js");
16
+ const _config = require("./config.js");
17
+ const _rschandler = require("./rsc-handler.js");
18
+ const _vitepluginrsc = require("./vite-plugin-rsc.js");
19
19
  function _interop_require_default(obj) {
20
20
  return obj && obj.__esModule ? obj : {
21
21
  default: obj
22
22
  };
23
23
  }
24
- function _getRequireWildcardCache(nodeInterop) {
25
- if (typeof WeakMap !== "function") return null;
26
- var cacheBabelInterop = new WeakMap();
27
- var cacheNodeInterop = new WeakMap();
28
- return (_getRequireWildcardCache = function(nodeInterop) {
29
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
30
- })(nodeInterop);
31
- }
32
- function _interop_require_wildcard(obj, nodeInterop) {
33
- if (!nodeInterop && obj && obj.__esModule) {
34
- return obj;
35
- }
36
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
37
- return {
38
- default: obj
39
- };
40
- }
41
- var cache = _getRequireWildcardCache(nodeInterop);
42
- if (cache && cache.has(obj)) {
43
- return cache.get(obj);
44
- }
45
- var newObj = {};
46
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
47
- for(var key in obj){
48
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
49
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
50
- if (desc && (desc.get || desc.set)) {
51
- Object.defineProperty(newObj, key, desc);
52
- } else {
53
- newObj[key] = obj[key];
54
- }
55
- }
56
- }
57
- newObj.default = obj;
58
- if (cache) {
59
- cache.set(obj, newObj);
60
- }
61
- return newObj;
62
- }
63
- // FIXME we could do this without plugin anyway
64
- const rscIndexPlugin = ()=>{
65
- return {
66
- name: "rsc-index-plugin",
67
- async transformIndexHtml () {
68
- return [
69
- {
70
- tag: "script",
71
- children: _rscutils.codeToInject,
72
- injectTo: "body"
73
- }
74
- ];
75
- }
76
- };
77
- };
78
- const rscAnalyzePlugin = (clientEntryCallback, serverEntryCallback)=>{
79
- return {
80
- name: "rsc-bundle-plugin",
81
- transform (code, id) {
82
- const ext = _nodepath.default.extname(id);
83
- if ([
84
- ".ts",
85
- ".tsx",
86
- ".js",
87
- ".jsx"
88
- ].includes(ext)) {
89
- const mod = _core.parseSync(code, {
90
- syntax: ext === ".ts" || ext === ".tsx" ? "typescript" : "ecmascript",
91
- tsx: ext === ".tsx"
92
- });
93
- for (const item of mod.body){
94
- if (item.type === "ExpressionStatement" && item.expression.type === "StringLiteral") {
95
- if (item.expression.value === "use client") {
96
- clientEntryCallback(id);
97
- } else if (item.expression.value === "use server") {
98
- serverEntryCallback(id);
99
- }
100
- }
101
- }
102
- }
103
- return code;
104
- }
105
- };
106
- };
107
- async function runBuild(config = {}) {
108
- const dir = _nodepath.default.resolve(config.build?.dir || ".");
109
- const basePath = config.build?.basePath || "/";
110
- const distPath = config.files?.dist || "dist";
111
- const publicPath = _nodepath.default.join(distPath, config.files?.public || "public");
112
- const indexHtmlFile = _nodepath.default.join(dir, config.files?.indexHtml || "index.html");
113
- const distEntriesFile = _nodepath.default.join(dir, distPath, config.files?.entriesJs || "entries.js");
114
- let entriesFile = _nodepath.default.join(dir, config.files?.entriesJs || "entries.js");
24
+ async function build() {
25
+ const config = await (0, _config.resolveConfig)("build");
26
+ const indexHtmlFile = _nodepath.default.join(config.root, config.framework.indexHtml);
27
+ const distEntriesFile = _nodepath.default.join(config.root, config.build.outDir, config.framework.entriesJs);
28
+ let entriesFile = _nodepath.default.join(config.root, config.framework.entriesJs);
115
29
  if (entriesFile.endsWith(".js")) {
116
30
  for (const ext of [
117
31
  ".js",
@@ -131,10 +45,9 @@ async function runBuild(config = {}) {
131
45
  const clientEntryFileSet = new Set();
132
46
  const serverEntryFileSet = new Set();
133
47
  await (0, _vite.build)({
134
- root: dir,
135
- base: basePath,
48
+ ..._config.configFileConfig,
136
49
  plugins: [
137
- rscAnalyzePlugin((id)=>clientEntryFileSet.add(id), (id)=>serverEntryFileSet.add(id))
50
+ (0, _vitepluginrsc.rscAnalyzePlugin)((id)=>clientEntryFileSet.add(id), (id)=>serverEntryFileSet.add(id))
138
51
  ],
139
52
  ssr: {
140
53
  // FIXME Without this, waku/router isn't considered to have client
@@ -146,7 +59,6 @@ async function runBuild(config = {}) {
146
59
  ]
147
60
  },
148
61
  build: {
149
- outDir: distPath,
150
62
  write: false,
151
63
  ssr: true,
152
64
  rollupOptions: {
@@ -166,13 +78,12 @@ async function runBuild(config = {}) {
166
78
  fname
167
79
  ]));
168
80
  const serverBuildOutput = await (0, _vite.build)({
169
- root: dir,
170
- base: basePath,
81
+ ..._config.configFileConfig,
171
82
  ssr: {
172
- noExternal: Array.from(clientEntryFileSet).map((fname)=>_nodepath.default.relative(_nodepath.default.join(dir, "node_modules"), fname).split("/")[0])
83
+ noExternal: Array.from(clientEntryFileSet).map(// FIXME this might not work with pnpm
84
+ (fname)=>_nodepath.default.relative(_nodepath.default.join(config.root, "node_modules"), fname).split("/")[0])
173
85
  },
174
86
  build: {
175
- outDir: distPath,
176
87
  ssr: true,
177
88
  rollupOptions: {
178
89
  input: {
@@ -207,15 +118,14 @@ async function runBuild(config = {}) {
207
118
  throw new Error("Unexpected vite server build output");
208
119
  }
209
120
  const clientBuildOutput = await (0, _vite.build)({
210
- root: dir,
211
- base: basePath,
121
+ ..._config.configFileConfig,
212
122
  plugins: [
213
123
  // @ts-ignore
214
124
  (0, _pluginreact.default)(),
215
- rscIndexPlugin()
125
+ (0, _vitepluginrsc.rscIndexPlugin)()
216
126
  ],
217
127
  build: {
218
- outDir: publicPath,
128
+ outDir: _nodepath.default.join(config.build.outDir, config.framework.outPublic),
219
129
  rollupOptions: {
220
130
  input: {
221
131
  main: indexHtmlFile,
@@ -239,12 +149,12 @@ async function runBuild(config = {}) {
239
149
  console.log("clientEntries", clientEntries);
240
150
  _nodefs.default.appendFileSync(distEntriesFile, `export const clientEntries=${JSON.stringify(clientEntries)};`);
241
151
  const absoluteClientEntries = Object.fromEntries(Object.entries(clientEntries).map(([key, val])=>[
242
- _nodepath.default.join(_nodepath.default.dirname(entriesFile), distPath, key),
243
- basePath + val
152
+ _nodepath.default.join(_nodepath.default.dirname(entriesFile), config.build.outDir, key),
153
+ config.base + val
244
154
  ]));
245
155
  await (0, _rschandler.setClientEntries)(absoluteClientEntries);
246
156
  await (0, _rschandler.buildRSC)();
247
- const origPackageJson = require1(_nodepath.default.join(dir, "package.json"));
157
+ const origPackageJson = require1(_nodepath.default.join(config.root, "package.json"));
248
158
  const packageJson = {
249
159
  name: origPackageJson.name,
250
160
  version: origPackageJson.version,
@@ -255,6 +165,6 @@ async function runBuild(config = {}) {
255
165
  },
256
166
  dependencies: origPackageJson.dependencies
257
167
  };
258
- _nodefs.default.writeFileSync(_nodepath.default.join(dir, distPath, "package.json"), JSON.stringify(packageJson, null, 2));
168
+ _nodefs.default.writeFileSync(_nodepath.default.join(config.root, config.build.outDir, "package.json"), JSON.stringify(packageJson, null, 2));
259
169
  await (0, _rschandler.shutdown)();
260
170
  }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ configFileConfig: function() {
13
+ return configFileConfig;
14
+ },
15
+ resolveConfig: function() {
16
+ return resolveConfig;
17
+ }
18
+ });
19
+ const _vite = require("vite");
20
+ const configFileConfig = process.env.CONFIG_FILE ? {
21
+ configFile: process.env.CONFIG_FILE
22
+ } : {};
23
+ async function resolveConfig(command) {
24
+ const origConfig = await (0, _vite.resolveConfig)(configFileConfig, command);
25
+ const framework = {
26
+ indexHtml: "index.html",
27
+ entriesJs: "entries.js",
28
+ outPublic: "public",
29
+ rscPrefix: "RSC/",
30
+ ...origConfig.framework
31
+ };
32
+ const config = {
33
+ ...origConfig,
34
+ framework
35
+ };
36
+ return config;
37
+ }
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ rsc: function() {
13
+ return rsc;
14
+ },
15
+ devServer: function() {
16
+ return devServer;
17
+ }
18
+ });
19
+ const _vite = require("vite");
20
+ const _pluginreact = /*#__PURE__*/ _interop_require_default(require("@vitejs/plugin-react"));
21
+ const _servernodeunbundled = /*#__PURE__*/ _interop_require_default(require("react-server-dom-webpack/server.node.unbundled"));
22
+ const _busboy = /*#__PURE__*/ _interop_require_default(require("busboy"));
23
+ const _config = require("./config.js");
24
+ const _rschandler = require("./rsc-handler.js");
25
+ const _vitepluginrsc = require("./vite-plugin-rsc.js");
26
+ function _interop_require_default(obj) {
27
+ return obj && obj.__esModule ? obj : {
28
+ default: obj
29
+ };
30
+ }
31
+ const { decodeReply , decodeReplyFromBusboy } = _servernodeunbundled.default;
32
+ function rsc(options) {
33
+ const promise = options.mode === "production" ? (0, _rschandler.setClientEntries)("load") : Promise.resolve();
34
+ const configPromise = (0, _config.resolveConfig)("serve");
35
+ return async (req, res, next)=>{
36
+ await promise;
37
+ const config = await configPromise;
38
+ const basePath = config.base + config.framework.rscPrefix;
39
+ const url = new URL(req.url || "", "http://" + req.headers.host);
40
+ let rscId;
41
+ let props = {};
42
+ let rsfId;
43
+ let args = [];
44
+ if (url.pathname.startsWith(basePath)) {
45
+ const index = url.pathname.lastIndexOf("/");
46
+ rscId = url.pathname.slice(basePath.length, index);
47
+ const params = new URLSearchParams(url.pathname.slice(index + 1));
48
+ if (rscId && rscId !== "_") {
49
+ res.setHeader("Content-Type", "text/x-component");
50
+ props = JSON.parse(params.get("props") || "{}");
51
+ } else {
52
+ rscId = undefined;
53
+ }
54
+ rsfId = params.get("action_id") || undefined;
55
+ if (rsfId) {
56
+ if (req.headers["content-type"]?.startsWith("multipart/form-data")) {
57
+ const bb = (0, _busboy.default)({
58
+ headers: req.headers
59
+ });
60
+ const reply = decodeReplyFromBusboy(bb);
61
+ req.pipe(bb);
62
+ args = await reply;
63
+ } else {
64
+ let body = "";
65
+ for await (const chunk of req){
66
+ body += chunk;
67
+ }
68
+ if (body) {
69
+ args = await decodeReply(body);
70
+ }
71
+ }
72
+ }
73
+ }
74
+ if (rscId || rsfId) {
75
+ const pipeable = (0, _rschandler.renderRSC)({
76
+ rscId,
77
+ props,
78
+ rsfId,
79
+ args
80
+ });
81
+ pipeable.on("error", (err)=>{
82
+ console.info("Cannot render RSC", err);
83
+ res.statusCode = 500;
84
+ if (options.mode === "development") {
85
+ res.end(String(err));
86
+ } else {
87
+ res.end();
88
+ }
89
+ });
90
+ pipeable.pipe(res);
91
+ return;
92
+ }
93
+ next();
94
+ };
95
+ }
96
+ function devServer() {
97
+ const vitePromise = (0, _vite.createServer)({
98
+ ..._config.configFileConfig,
99
+ optimizeDeps: {
100
+ include: [
101
+ "react-server-dom-webpack/client"
102
+ ],
103
+ // FIXME without this, waku router has dual module hazard,
104
+ // and "Uncaught Error: Missing Router" happens.
105
+ exclude: [
106
+ "waku"
107
+ ]
108
+ },
109
+ plugins: [
110
+ // @ts-ignore
111
+ (0, _pluginreact.default)(),
112
+ (0, _vitepluginrsc.rscIndexPlugin)()
113
+ ],
114
+ server: {
115
+ middlewareMode: true
116
+ }
117
+ });
118
+ vitePromise.then((vite)=>{
119
+ (0, _rschandler.registerReloadCallback)((type)=>vite.ws.send({
120
+ type
121
+ }));
122
+ });
123
+ return async (req, res, next)=>{
124
+ const vite = await vitePromise;
125
+ const absoluteClientEntries = Object.fromEntries(Array.from(vite.moduleGraph.idToModuleMap.values()).map(({ file , url })=>[
126
+ file,
127
+ url
128
+ ]));
129
+ absoluteClientEntries["*"] = "*"; // HACK to use fallback resolver
130
+ // FIXME this is bad in performance, let's revisit it
131
+ await (0, _rschandler.setClientEntries)(absoluteClientEntries);
132
+ vite.middlewares(req, res, next);
133
+ };
134
+ }