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.
- package/README.md +3 -0
- package/dist/cjs/cli.js +109 -0
- package/dist/cjs/client.js +6 -9
- package/dist/cjs/config.js +9 -0
- package/dist/cjs/{builder.js → lib/builder.js} +22 -112
- package/dist/cjs/lib/config.js +37 -0
- package/dist/cjs/lib/middleware.js +134 -0
- package/dist/cjs/{middleware/lib → lib}/rsc-handler-worker.js +58 -54
- package/dist/cjs/{middleware/lib → lib}/rsc-handler.js +3 -2
- package/dist/cjs/{middleware/lib → lib}/rsc-utils.js +2 -3
- package/dist/cjs/{middleware/lib → lib}/vite-plugin-rsc.js +65 -4
- package/dist/cjs/main.js +9 -6
- package/dist/cjs/router/client.js +16 -6
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +61 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.js +6 -9
- package/dist/config.d.ts +9 -28
- package/dist/config.js +3 -1
- package/dist/lib/builder.d.ts +1 -0
- package/dist/{builder.js → lib/builder.js} +22 -73
- package/dist/lib/config.d.ts +50 -0
- package/dist/lib/config.js +19 -0
- package/dist/lib/middleware.d.ts +8 -0
- package/dist/lib/middleware.js +111 -0
- package/dist/{middleware/lib → lib}/rsc-handler-worker.js +58 -54
- package/dist/{middleware/lib → lib}/rsc-handler.js +3 -2
- package/dist/{middleware/lib → lib}/rsc-utils.d.ts +1 -1
- package/dist/{middleware/lib → lib}/rsc-utils.js +2 -3
- package/dist/lib/vite-plugin-rsc.d.ts +5 -0
- package/dist/{middleware/lib → lib}/vite-plugin-rsc.js +59 -4
- package/dist/main.d.ts +2 -3
- package/dist/main.js +2 -2
- package/dist/router/client.d.ts +4 -1
- package/dist/router/client.js +16 -6
- package/dist/server.d.ts +2 -2
- package/package.json +30 -19
- package/src/cli.ts +64 -0
- package/src/client.ts +6 -10
- package/src/config.ts +19 -35
- package/src/{builder.ts → lib/builder.ts} +26 -80
- package/src/lib/config.ts +20 -0
- package/src/lib/middleware.ts +117 -0
- package/src/{middleware/lib → lib}/rsc-handler-worker.ts +95 -112
- package/src/{middleware/lib → lib}/rsc-handler.ts +6 -19
- package/src/{middleware/lib → lib}/rsc-utils.ts +2 -3
- package/src/{middleware/lib → lib}/vite-plugin-rsc.ts +63 -4
- package/src/main.ts +2 -4
- package/src/router/client.ts +17 -6
- package/src/server.ts +1 -1
- package/cli.js +0 -4
- package/dist/builder.d.ts +0 -2
- package/dist/cjs/cli-build.js +0 -7
- package/dist/cjs/cli-dev.js +0 -8
- package/dist/cjs/cli-start.js +0 -8
- package/dist/cjs/devServer.js +0 -85
- package/dist/cjs/middleware/indexFallback.js +0 -41
- package/dist/cjs/middleware/lib/common.js +0 -26
- package/dist/cjs/middleware/notFound.js +0 -15
- package/dist/cjs/middleware/rewriteRsc.js +0 -32
- package/dist/cjs/middleware/rscDev.js +0 -69
- package/dist/cjs/middleware/rscPrd.js +0 -72
- package/dist/cjs/middleware/staticFile.js +0 -37
- package/dist/cjs/middleware/viteServer.js +0 -101
- package/dist/cjs/prdServer.js +0 -86
- package/dist/cli-build.d.ts +0 -1
- package/dist/cli-build.js +0 -3
- package/dist/cli-dev.d.ts +0 -1
- package/dist/cli-dev.js +0 -4
- package/dist/cli-start.d.ts +0 -1
- package/dist/cli-start.js +0 -4
- package/dist/devServer.d.ts +0 -2
- package/dist/devServer.js +0 -31
- package/dist/middleware/indexFallback.d.ts +0 -3
- package/dist/middleware/indexFallback.js +0 -26
- package/dist/middleware/lib/common.d.ts +0 -3
- package/dist/middleware/lib/common.js +0 -16
- package/dist/middleware/lib/vite-plugin-rsc.d.ts +0 -3
- package/dist/middleware/notFound.d.ts +0 -3
- package/dist/middleware/notFound.js +0 -5
- package/dist/middleware/rewriteRsc.d.ts +0 -3
- package/dist/middleware/rewriteRsc.js +0 -22
- package/dist/middleware/rscDev.d.ts +0 -3
- package/dist/middleware/rscDev.js +0 -54
- package/dist/middleware/rscPrd.d.ts +0 -3
- package/dist/middleware/rscPrd.js +0 -57
- package/dist/middleware/staticFile.d.ts +0 -3
- package/dist/middleware/staticFile.js +0 -22
- package/dist/middleware/viteServer.d.ts +0 -3
- package/dist/middleware/viteServer.js +0 -86
- package/dist/prdServer.d.ts +0 -2
- package/dist/prdServer.js +0 -32
- package/src/cli-build.ts +0 -5
- package/src/cli-dev.ts +0 -7
- package/src/cli-start.ts +0 -7
- package/src/devServer.ts +0 -36
- package/src/middleware/indexFallback.ts +0 -28
- package/src/middleware/lib/common.ts +0 -22
- package/src/middleware/notFound.ts +0 -8
- package/src/middleware/rewriteRsc.ts +0 -28
- package/src/middleware/rscDev.ts +0 -55
- package/src/middleware/rscPrd.ts +0 -59
- package/src/middleware/staticFile.ts +0 -28
- package/src/middleware/viteServer.ts +0 -87
- package/src/prdServer.ts +0 -37
- /package/dist/{middleware/lib → lib}/rsc-handler-worker.d.ts +0 -0
- /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
|
|
package/dist/cjs/cli.js
ADDED
|
@@ -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
|
+
}
|
package/dist/cjs/client.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
38
|
+
let id;
|
|
41
39
|
if (isMutating) {
|
|
42
|
-
|
|
40
|
+
id = rscId;
|
|
43
41
|
searchParams.set("props", serializedProps);
|
|
44
42
|
} else {
|
|
45
|
-
|
|
43
|
+
id = "_";
|
|
46
44
|
}
|
|
47
|
-
const response = fetch(basePath +
|
|
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
|
|
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
|
package/dist/cjs/config.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
Object.defineProperty(exports, "
|
|
5
|
+
Object.defineProperty(exports, "build", {
|
|
6
6
|
enumerable: true,
|
|
7
7
|
get: function() {
|
|
8
|
-
return
|
|
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
|
|
17
|
-
const
|
|
18
|
-
const
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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
|
-
|
|
170
|
-
base: basePath,
|
|
81
|
+
..._config.configFileConfig,
|
|
171
82
|
ssr: {
|
|
172
|
-
noExternal: Array.from(clientEntryFileSet).map(
|
|
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
|
-
|
|
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:
|
|
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),
|
|
243
|
-
|
|
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(
|
|
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(
|
|
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
|
+
}
|