vite-plugin-react-server 1.3.6 → 1.4.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 +32 -18
- package/dist/package.json +4 -2
- package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
- package/dist/plugin/config/resolveOptions.js +4 -2
- package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -1
- package/dist/plugin/dev-server/plugin.client.js +13 -3
- package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -1
- package/dist/plugin/dev-server/plugin.server.js +54 -4
- package/dist/plugin/react-static/plugin.server.d.ts.map +1 -1
- package/dist/plugin/react-static/plugin.server.js +9 -1
- package/dist/plugin/react-static/renderPagesBatched.d.ts.map +1 -1
- package/dist/plugin/react-static/renderPagesBatched.js +136 -36
- package/dist/plugin/react-static/types.d.ts +1 -0
- package/dist/plugin/react-static/types.d.ts.map +1 -1
- package/dist/plugin/types.d.ts +15 -0
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/utils/createReactFetcher.js +24 -2
- package/dist/plugin/utils/useRscHmr.js +10 -2
- package/dist/plugin/vendor/register-vendor.js +1 -1
- package/dist/plugin/vendor/vendor-alias.d.ts +5 -2
- package/dist/plugin/vendor/vendor-alias.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor-alias.js +60 -26
- package/dist/plugin/vendor/vendor.server.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor.server.js +2 -2
- package/dist/plugin/vendor/vendor.static.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor.static.js +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +1 -1
- package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +1 -1
- package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +1 -1
- package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +1 -1
- package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +1 -1
- package/oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +1 -1
- package/oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +1 -1
- package/oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.production.js +1 -1
- package/oss-experimental/react-server-dom-esm/package.json +3 -3
- package/package.json +4 -2
- package/plugin/config/resolveOptions.ts +2 -0
- package/plugin/dev-server/plugin.client.ts +13 -2
- package/plugin/dev-server/plugin.server.ts +71 -4
- package/plugin/react-static/plugin.server.ts +11 -1
- package/plugin/react-static/renderPagesBatched.ts +148 -39
- package/plugin/react-static/types.ts +1 -0
- package/plugin/types.ts +15 -0
- package/plugin/vendor/register-vendor.ts +1 -1
- package/plugin/vendor/vendor-alias.ts +61 -39
- package/plugin/vendor/vendor.server.ts +3 -3
- package/plugin/vendor/vendor.static.ts +3 -2
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { configureReactServer } from './configureReactServer.server.js';
|
|
7
7
|
import { resolveOptions } from '../config/resolveOptions.js';
|
|
8
|
+
import { readFileSync } from 'node:fs';
|
|
8
9
|
|
|
9
10
|
const vitePluginReactDevServer = function _vitePluginReactServerDevServer(options) {
|
|
10
11
|
if (options == null) {
|
|
@@ -22,13 +23,59 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
|
|
|
22
23
|
name: "vite-plugin-react-server:server-hmr",
|
|
23
24
|
apply: "serve",
|
|
24
25
|
// Server-level handleHotUpdate — sends custom WS event to client
|
|
26
|
+
// Vite 6 Environment API: hotUpdate runs per-environment.
|
|
27
|
+
// Prevent server/ssr environments from triggering page reload for client components.
|
|
28
|
+
hotUpdate(ctx) {
|
|
29
|
+
const { file, server } = ctx;
|
|
30
|
+
const envName = ctx.environment?.name ?? "unknown";
|
|
31
|
+
const moduleBase = userOptions.moduleBase || "src";
|
|
32
|
+
const projectRoot = userOptions.projectRoot || server?.config?.root || "";
|
|
33
|
+
const normalizedFile = file.replace(projectRoot, "").replace(/^\/+/, "");
|
|
34
|
+
const isSourceFile = normalizedFile.startsWith(moduleBase + "/");
|
|
35
|
+
if (!isSourceFile) return;
|
|
36
|
+
if (envName === "client") {
|
|
37
|
+
const isClient = (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js")) && (() => {
|
|
38
|
+
try {
|
|
39
|
+
const head = readFileSync(file, "utf-8").slice(0, 200);
|
|
40
|
+
return /^\s*["']use client["']/.test(head.split("\n")[0]);
|
|
41
|
+
} catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
})();
|
|
45
|
+
if (isClient) return;
|
|
46
|
+
server.config.logger.info(`[vite-plugin-react-server] File changed (RSC refetch): ${normalizedFile}`);
|
|
47
|
+
server.ws.send({
|
|
48
|
+
type: "custom",
|
|
49
|
+
event: "vite-plugin-react-server:server-component-update",
|
|
50
|
+
data: { file: normalizedFile, path: file }
|
|
51
|
+
});
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
if (envName === "server") {
|
|
55
|
+
const mod = ctx.environment?.moduleGraph?.getModulesByFile(file);
|
|
56
|
+
if (mod) {
|
|
57
|
+
for (const m of mod) {
|
|
58
|
+
ctx.environment.moduleGraph.invalidateModule(m);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return [];
|
|
63
|
+
},
|
|
25
64
|
handleHotUpdate({ file, server }) {
|
|
26
65
|
const moduleBase = userOptions.moduleBase || "src";
|
|
27
66
|
const projectRoot = userOptions.projectRoot || server.config.root;
|
|
28
67
|
const normalizedFile = file.replace(projectRoot, "").replace(/^\/+/, "");
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
68
|
+
const isSourceFile = normalizedFile.startsWith(moduleBase + "/") && (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js"));
|
|
69
|
+
const isClientFile = isSourceFile && (() => {
|
|
70
|
+
try {
|
|
71
|
+
const head = readFileSync(file, "utf-8").slice(0, 200);
|
|
72
|
+
return /^\s*["']use client["']/.test(head.split("\n")[0]);
|
|
73
|
+
} catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
})();
|
|
77
|
+
if (isSourceFile && !isClientFile) {
|
|
78
|
+
server.config.logger.info(`[vite-plugin-react-server] File changed (RSC refetch): ${normalizedFile}`);
|
|
32
79
|
server.ws.send({
|
|
33
80
|
type: "custom",
|
|
34
81
|
event: "vite-plugin-react-server:server-component-update",
|
|
@@ -45,6 +92,9 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
|
|
|
45
92
|
}
|
|
46
93
|
return [];
|
|
47
94
|
}
|
|
95
|
+
if (isClientFile) {
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
48
98
|
}
|
|
49
99
|
};
|
|
50
100
|
const serverPlugin = {
|
|
@@ -105,4 +155,4 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
|
|
|
105
155
|
};
|
|
106
156
|
|
|
107
157
|
export { vitePluginReactDevServer };
|
|
108
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbVBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBWaXRlRGV2U2VydmVyIH0gZnJvbSBcInZpdGVcIjtcblxuLyoqXG4gKiBEZXYgc2VydmVyIHBsdWdpbiBmb3Igc2VydmVyIGVudmlyb25tZW50LlxuICogUmV0dXJucyB0d28gcGx1Z2luczogb25lIGZvciBITVIgaGFuZGxpbmcgKGFsbCBlbnZpcm9ubWVudHMpIGFuZCBvbmUgZm9yIHNlcnZlciBjb25maWcuXG4gKi9cbmV4cG9ydCBjb25zdCB2aXRlUGx1Z2luUmVhY3REZXZTZXJ2ZXIgPSBmdW5jdGlvbiBfdml0ZVBsdWdpblJlYWN0U2VydmVyRGV2U2VydmVyKG9wdGlvbnM6IFN0cmVhbVBsdWdpbk9wdGlvbnMpOiBQbHVnaW5bXSB7XG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZU9wdGlvbnMob3B0aW9ucyk7XG4gIGlmIChyZXNvbHZlZE9wdGlvbnMudHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgaWYgKHJlc29sdmVkT3B0aW9ucy5lcnJvciAhPSBudWxsKSB7XG4gICAgICB0aHJvdyByZXNvbHZlZE9wdGlvbnMuZXJyb3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZXNvbHZlIG9wdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgdXNlck9wdGlvbnMgPSByZXNvbHZlZE9wdGlvbnMudXNlck9wdGlvbnM7XG5cbiAgLy8gU2VwYXJhdGUgcGx1Z2luIGZvciBITVIgaGFuZGxpbmcgKG11c3QgYXBwbHkgdG8gYWxsIGVudmlyb25tZW50cylcbiAgY29uc3QgaG1yUGx1Z2luID0ge1xuICAgIG5hbWU6IFwidml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1obXJcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiIGFzIGNvbnN0LFxuICAgIC8vIFNlcnZlci1sZXZlbCBoYW5kbGVIb3RVcGRhdGUg4oCUIHNlbmRzIGN1c3RvbSBXUyBldmVudCB0byBjbGllbnRcbiAgICBoYW5kbGVIb3RVcGRhdGUoeyBmaWxlLCBzZXJ2ZXIgfTogeyBmaWxlOiBzdHJpbmc7IHNlcnZlcjogVml0ZURldlNlcnZlciB9KSB7XG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTZXJ2ZXJGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKSAmJiBcbiAgICAgICAgKGZpbGUuZW5kc1dpdGgoJy50c3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcudHMnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzJykpO1xuICAgICAgXG4gICAgICBpZiAoaXNTZXJ2ZXJGaWxlKSB7XG4gICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIFNlcnZlciBjb21wb25lbnQgY2hhbmdlZDogJHtub3JtYWxpemVkRmlsZX1gKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNlbmQgY3VzdG9tIEhNUiBldmVudCBzbyBjbGllbnQgY2FuIHJlZmV0Y2ggUlNDIHN0cmVhbVxuICAgICAgICBzZXJ2ZXIud3Muc2VuZCh7XG4gICAgICAgICAgdHlwZTogJ2N1c3RvbScsXG4gICAgICAgICAgZXZlbnQ6ICd2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6c2VydmVyLWNvbXBvbmVudC11cGRhdGUnLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZpbGU6IG5vcm1hbGl6ZWRGaWxlLFxuICAgICAgICAgICAgcGF0aDogZmlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIEludmFsaWRhdGUgdGhlIHNlcnZlciBtb2R1bGUgc28gbmV4dCByZXF1ZXN0IGdldHMgZnJlc2ggY29udGVudFxuICAgICAgICBjb25zdCBtb2QgPSBzZXJ2ZXIuZW52aXJvbm1lbnRzWydzZXJ2ZXInXT8ubW9kdWxlR3JhcGg/LmdldE1vZHVsZXNCeUZpbGUoZmlsZSk7XG4gICAgICAgIGlmIChtb2QpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbW9kKSB7XG4gICAgICAgICAgICBzZXJ2ZXIuZW52aXJvbm1lbnRzWydzZXJ2ZXInXT8ubW9kdWxlR3JhcGg/LmludmFsaWRhdGVNb2R1bGUobSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgdG8gcHJldmVudCBWaXRlJ3MgZGVmYXVsdCBmdWxsLXBhZ2UgcmVsb2FkXG4gICAgICAgIC8vIFRoZSBjbGllbnQgd2lsbCByZWZldGNoIHRoZSBSU0Mgc3RyZWFtIHZpYSB0aGUgY3VzdG9tIGV2ZW50XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHNlcnZlclBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpkZXYtc2VydmVyLXNlcnZlclwiLFxuICAgIGFwcGx5OiBcInNlcnZlXCIgYXMgY29uc3QsXG4gICAgYXBwbHlUb0Vudmlyb25tZW50KHBhcnRpYWxFbnZpcm9ubWVudDogYW55KSB7XG4gICAgICByZXR1cm4gcGFydGlhbEVudmlyb25tZW50Py5jb25zdW1lciA9PT0gJ3NlcnZlcic7XG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyOiBWaXRlRGV2U2VydmVyKSB7XG4gICAgICAvLyBMb2cgdGhhdCBwbHVnaW4gaXMgYmVpbmcgY29uZmlndXJlZFxuICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRGV2IHNlcnZlciBwbHVnaW4gY29uZmlndXJlZCBmb3Igc2VydmVyIGVudmlyb25tZW50IChyZWFjdC1zZXJ2ZXIgY29uZGl0aW9uKWApO1xuICAgICAgXG4gICAgICAvLyBDb25maWd1cmUgdGhlIFJlYWN0IHNlcnZlciBmb3Igc2VydmVyIGVudmlyb25tZW50IChkaXJlY3QgUlNDIHByb2Nlc3NpbmcpXG4gICAgICAvLyBUaGlzIHVzZXMgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyZVJlYWN0U2VydmVyLnNlcnZlci5qcyBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uZmlndXJlUmVhY3RTZXJ2ZXIoe1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXM6IHtcbiAgICAgICAgICBwcm9wc01hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHBhZ2VNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb290TWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgaHRtbE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvdXRlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgdXJsTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICB3b3JrZXJQYXRoczoge30sXG4gICAgICAgICAgc2VydmVyRW50cnk6IG51bGwsXG4gICAgICAgICAgY2xpZW50RW50cnk6IHt9LFxuICAgICAgICAgIGNsaWVudElucHV0czoge30sXG4gICAgICAgICAgc3RhdGljSW5wdXRzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJJbnB1dHM6IHt9LFxuICAgICAgICAgIC8vIHN0YXRpY01hbmlmZXN0IHJlbW92ZWQgZnJvbSBBdXRvRGlzY292ZXJlZEZpbGVzXG4gICAgICAgICAgc2VydmVyQWN0aW9uczoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgICBzZXJ2ZXJNYW5pZmVzdDoge30sXG4gICAgICAgIHJlc29sdmVkQ29uZmlnOiBzZXJ2ZXIuY29uZmlnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICAvLyBGaXggQ0pTIG5hbWVkIGltcG9ydHMgaW4gc2VydmVyIGVudmlyb25tZW50LlxuICAvLyBWaXRlJ3MgZXNidWlsZCBKU1ggdHJhbnNmb3JtIChhbmQgQHZpdGVqcy9wbHVnaW4tcmVhY3QgaWYgcHJlc2VudCkgZ2VuZXJhdGVzXG4gIC8vIG5hbWVkIGltcG9ydHMgbGlrZSBgaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCJgLiBJbiB0aGUgc2VydmVyIGVudmlyb25tZW50LFxuICAvLyByZWFjdCdzIHJlYWN0LXNlcnZlciBleHBvcnQgaXMgQ0pTLW9ubHksIGFuZCBOb2RlJ3MgRVNNIGludGVyb3AgZG9lc24ndCBzdXBwb3J0XG4gIC8vIG5hbWVkIGV4cG9ydHMgZnJvbSBDSlMuIFRoaXMgcG9zdC10cmFuc2Zvcm0gcmV3cml0ZXMgdGhlbS5cbiAgY29uc3QgY2pzRml4UGx1Z2luOiBQbHVnaW4gPSB7XG4gICAgbmFtZTogXCJ2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6c2VydmVyLWNqcy1maXhcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiIGFzIGNvbnN0LFxuICAgIGVuZm9yY2U6IFwicG9zdFwiIGFzIGNvbnN0LFxuICAgIGFwcGx5VG9FbnZpcm9ubWVudChlbnY6IGFueSkge1xuICAgICAgcmV0dXJuIGVudj8ubmFtZSA9PT0gJ3NlcnZlcic7XG4gICAgfSxcbiAgICB0cmFuc2Zvcm0oY29kZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgICBpZiAoaWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcycpKSByZXR1cm47XG4gICAgICBpZiAoIWlkLm1hdGNoKC9cXC5banRdc3g/JC8pKSByZXR1cm47XG4gICAgICBcbiAgICAgIGNvbnN0IG5hbWVkSW1wb3J0UmUgPSAvaW1wb3J0XFxzKlxceyhbXn1dKylcXH1cXHMqZnJvbVxccypbXCInXXJlYWN0W1wiJ11cXHMqOz8vZztcbiAgICAgIGlmICghbmFtZWRJbXBvcnRSZS50ZXN0KGNvZGUpKSByZXR1cm47XG4gICAgICBcbiAgICAgIG5hbWVkSW1wb3J0UmUubGFzdEluZGV4ID0gMDtcbiAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvZGUucmVwbGFjZShuYW1lZEltcG9ydFJlLCAoX21hdGNoLCBpbXBvcnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWFzID0gYF9fcmVhY3RfY2pzXyR7Y291bnRlcisrfWA7XG4gICAgICAgIHJldHVybiBgaW1wb3J0ICR7YWxpYXN9IGZyb20gXCJyZWFjdFwiOyBjb25zdCB7JHtpbXBvcnRzfX0gPSAke2FsaWFzfTtgO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdCwgbWFwOiBudWxsIH07XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gW2htclBsdWdpbiwgY2pzRml4UGx1Z2luLCBzZXJ2ZXJQbHVnaW5dO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNhLE1B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
|
|
158
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbVBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBWaXRlRGV2U2VydmVyIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5cbi8qKlxuICogRGV2IHNlcnZlciBwbHVnaW4gZm9yIHNlcnZlciBlbnZpcm9ubWVudC5cbiAqIFJldHVybnMgdHdvIHBsdWdpbnM6IG9uZSBmb3IgSE1SIGhhbmRsaW5nIChhbGwgZW52aXJvbm1lbnRzKSBhbmQgb25lIGZvciBzZXJ2ZXIgY29uZmlnLlxuICovXG5leHBvcnQgY29uc3Qgdml0ZVBsdWdpblJlYWN0RGV2U2VydmVyID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldlNlcnZlcihvcHRpb25zOiBTdHJlYW1QbHVnaW5PcHRpb25zKTogUGx1Z2luW10ge1xuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucyBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpO1xuICBpZiAocmVzb2x2ZWRPcHRpb25zLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgIGlmIChyZXNvbHZlZE9wdGlvbnMuZXJyb3IgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgcmVzb2x2ZWRPcHRpb25zLmVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVzb2x2ZSBvcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IHVzZXJPcHRpb25zID0gcmVzb2x2ZWRPcHRpb25zLnVzZXJPcHRpb25zO1xuXG4gIC8vIFNlcGFyYXRlIHBsdWdpbiBmb3IgSE1SIGhhbmRsaW5nIChtdXN0IGFwcGx5IHRvIGFsbCBlbnZpcm9ubWVudHMpXG4gIGNvbnN0IGhtclBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpzZXJ2ZXItaG1yXCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiBhcyBjb25zdCxcbiAgICAvLyBTZXJ2ZXItbGV2ZWwgaGFuZGxlSG90VXBkYXRlIOKAlCBzZW5kcyBjdXN0b20gV1MgZXZlbnQgdG8gY2xpZW50XG4gICAgLy8gVml0ZSA2IEVudmlyb25tZW50IEFQSTogaG90VXBkYXRlIHJ1bnMgcGVyLWVudmlyb25tZW50LlxuICAgIC8vIFByZXZlbnQgc2VydmVyL3NzciBlbnZpcm9ubWVudHMgZnJvbSB0cmlnZ2VyaW5nIHBhZ2UgcmVsb2FkIGZvciBjbGllbnQgY29tcG9uZW50cy5cbiAgICBob3RVcGRhdGUoY3R4OiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgZmlsZSwgc2VydmVyIH0gPSBjdHg7XG4gICAgICBjb25zdCBlbnZOYW1lID0gY3R4LmVudmlyb25tZW50Py5uYW1lID8/ICd1bmtub3duJztcbiAgICAgIFxuICAgICAgY29uc3QgbW9kdWxlQmFzZSA9IHVzZXJPcHRpb25zLm1vZHVsZUJhc2UgfHwgXCJzcmNcIjtcbiAgICAgIGNvbnN0IHByb2plY3RSb290ID0gdXNlck9wdGlvbnMucHJvamVjdFJvb3QgfHwgc2VydmVyPy5jb25maWc/LnJvb3QgfHwgJyc7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTb3VyY2VGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKTtcbiAgICAgIFxuICAgICAgaWYgKCFpc1NvdXJjZUZpbGUpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gQ2xpZW50IGVudmlyb25tZW50OiBsZXQgVml0ZS9Adml0ZWpzL3BsdWdpbi1yZWFjdCBoYW5kbGUgaXRcbiAgICAgIGlmIChlbnZOYW1lID09PSAnY2xpZW50Jykge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgY2xpZW50IGNvbXBvbmVudCDigJQgbGV0IEZhc3QgUmVmcmVzaCBoYW5kbGUgaXRcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSAoZmlsZS5lbmRzV2l0aCgnLnRzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy50cycpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanMnKSkgJiYgKCgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaGVhZCA9IHJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKS5zbGljZSgwLCAyMDApO1xuICAgICAgICAgICAgcmV0dXJuIC9eXFxzKltcIidddXNlIGNsaWVudFtcIiddLy50ZXN0KGhlYWQuc3BsaXQoJ1xcbicpWzBdKTtcbiAgICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNDbGllbnQpIHJldHVybjsgLy8gTGV0IEZhc3QgUmVmcmVzaCBoYW5kbGUgY2xpZW50IGNvbXBvbmVudHNcbiAgICAgICAgXG4gICAgICAgIC8vIFNlcnZlciBjb21wb25lbnQgY2hhbmdlZCDigJQgc2VuZCBSU0MgcmVmZXRjaCBldmVudCB0byBjbGllbnRcbiAgICAgICAgLy8gT25seSBkbyB0aGlzIG9uY2UgKGZyb20gY2xpZW50IGVudikgdG8gYXZvaWQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBGaWxlIGNoYW5nZWQgKFJTQyByZWZldGNoKTogJHtub3JtYWxpemVkRmlsZX1gKTtcbiAgICAgICAgc2VydmVyLndzLnNlbmQoe1xuICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgIGV2ZW50OiAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJyxcbiAgICAgICAgICBkYXRhOiB7IGZpbGU6IG5vcm1hbGl6ZWRGaWxlLCBwYXRoOiBmaWxlIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIFtdOyAvLyBEb24ndCB0cmlnZ2VyIGNsaWVudC1zaWRlIHBhZ2UgcmVsb2FkXG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNlcnZlci9TU1IgZW52aXJvbm1lbnRzOiBzdXBwcmVzcyBwYWdlIHJlbG9hZCBmb3IgYWxsIHNvdXJjZSBmaWxlc1xuICAgICAgLy8gU2VydmVyIGNvbXBvbmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlIFJTQyByZWZldGNoIGV2ZW50IHNlbnQgYWJvdmVcbiAgICAgIC8vIEludmFsaWRhdGUgdGhlIHNlcnZlciBtb2R1bGUgc28gbmV4dCBSU0MgcmVxdWVzdCBnZXRzIGZyZXNoIGNvbnRlbnRcbiAgICAgIGlmIChlbnZOYW1lID09PSAnc2VydmVyJykge1xuICAgICAgICBjb25zdCBtb2QgPSBjdHguZW52aXJvbm1lbnQ/Lm1vZHVsZUdyYXBoPy5nZXRNb2R1bGVzQnlGaWxlKGZpbGUpO1xuICAgICAgICBpZiAobW9kKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1vZCkge1xuICAgICAgICAgICAgY3R4LmVudmlyb25tZW50Lm1vZHVsZUdyYXBoLmludmFsaWRhdGVNb2R1bGUobSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBoYW5kbGVIb3RVcGRhdGUoeyBmaWxlLCBzZXJ2ZXIgfTogeyBmaWxlOiBzdHJpbmc7IHNlcnZlcjogVml0ZURldlNlcnZlciB9KSB7XG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTb3VyY2VGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKSAmJiBcbiAgICAgICAgKGZpbGUuZW5kc1dpdGgoJy50c3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcudHMnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzJykpO1xuICAgICAgXG4gICAgICAvLyBTa2lwIGNsaWVudCBjb21wb25lbnRzIOKAlCBsZXQgQHZpdGVqcy9wbHVnaW4tcmVhY3QgaGFuZGxlIHRoZW1cbiAgICAgIC8vIHdpdGggRmFzdCBSZWZyZXNoIChwcmVzZXJ2ZXMgY29tcG9uZW50LWxldmVsIHN0YXRlKS5cbiAgICAgIGNvbnN0IGlzQ2xpZW50RmlsZSA9IGlzU291cmNlRmlsZSAmJiAoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSByZWFkRmlsZVN5bmMoZmlsZSwgJ3V0Zi04Jykuc2xpY2UoMCwgMjAwKTtcbiAgICAgICAgICByZXR1cm4gL15cXHMqW1wiJ111c2UgY2xpZW50W1wiJ10vLnRlc3QoaGVhZC5zcGxpdCgnXFxuJylbMF0pO1xuICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICB9KSgpO1xuICAgICAgXG4gICAgICBpZiAoaXNTb3VyY2VGaWxlICYmICFpc0NsaWVudEZpbGUpIHtcbiAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmlsZSBjaGFuZ2VkIChSU0MgcmVmZXRjaCk6ICR7bm9ybWFsaXplZEZpbGV9YCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTZW5kIGN1c3RvbSBITVIgZXZlbnQgc28gY2xpZW50IGNhbiByZWZldGNoIFJTQyBzdHJlYW1cbiAgICAgICAgc2VydmVyLndzLnNlbmQoe1xuICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgIGV2ZW50OiAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmaWxlOiBub3JtYWxpemVkRmlsZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBzZXJ2ZXIgbW9kdWxlIHNvIG5leHQgcmVxdWVzdCBnZXRzIGZyZXNoIGNvbnRlbnRcbiAgICAgICAgY29uc3QgbW9kID0gc2VydmVyLmVudmlyb25tZW50c1snc2VydmVyJ10/Lm1vZHVsZUdyYXBoPy5nZXRNb2R1bGVzQnlGaWxlKGZpbGUpO1xuICAgICAgICBpZiAobW9kKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1vZCkge1xuICAgICAgICAgICAgc2VydmVyLmVudmlyb25tZW50c1snc2VydmVyJ10/Lm1vZHVsZUdyYXBoPy5pbnZhbGlkYXRlTW9kdWxlKG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IHRvIHByZXZlbnQgVml0ZSdzIGRlZmF1bHQgZnVsbC1wYWdlIHJlbG9hZFxuICAgICAgICAvLyBUaGUgY2xpZW50IHdpbGwgcmVmZXRjaCB0aGUgUlNDIHN0cmVhbSB2aWEgdGhlIGN1c3RvbSBldmVudFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChpc0NsaWVudEZpbGUpIHtcbiAgICAgICAgLy8gQ2xpZW50IGNvbXBvbmVudHMgYXJlIGhhbmRsZWQgYnkgQHZpdGVqcy9wbHVnaW4tcmVhY3QgKEZhc3QgUmVmcmVzaClcbiAgICAgICAgLy8gb3IgVml0ZSdzIGNsaWVudC1zaWRlIEhNUi4gUmV0dXJuIGVtcHR5IHRvIHByZXZlbnQgdGhlIHNlcnZlclxuICAgICAgICAvLyBlbnZpcm9ubWVudCBmcm9tIHRyaWdnZXJpbmcgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBzZXJ2ZXJQbHVnaW4gPSB7XG4gICAgbmFtZTogXCJ2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6ZGV2LXNlcnZlci1zZXJ2ZXJcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiIGFzIGNvbnN0LFxuYXBwbHlUb0Vudmlyb25tZW50KHBhcnRpYWxFbnZpcm9ubWVudDogYW55KSB7XG4gICAgICByZXR1cm4gcGFydGlhbEVudmlyb25tZW50Py5jb25zdW1lciA9PT0gJ3NlcnZlcic7XG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyOiBWaXRlRGV2U2VydmVyKSB7XG4gICAgICAvLyBMb2cgdGhhdCBwbHVnaW4gaXMgYmVpbmcgY29uZmlndXJlZFxuICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRGV2IHNlcnZlciBwbHVnaW4gY29uZmlndXJlZCBmb3Igc2VydmVyIGVudmlyb25tZW50IChyZWFjdC1zZXJ2ZXIgY29uZGl0aW9uKWApO1xuICAgICAgXG4gICAgICAvLyBDb25maWd1cmUgdGhlIFJlYWN0IHNlcnZlciBmb3Igc2VydmVyIGVudmlyb25tZW50IChkaXJlY3QgUlNDIHByb2Nlc3NpbmcpXG4gICAgICAvLyBUaGlzIHVzZXMgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyZVJlYWN0U2VydmVyLnNlcnZlci5qcyBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uZmlndXJlUmVhY3RTZXJ2ZXIoe1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXM6IHtcbiAgICAgICAgICBwcm9wc01hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHBhZ2VNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb290TWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgaHRtbE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvdXRlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgdXJsTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICB3b3JrZXJQYXRoczoge30sXG4gICAgICAgICAgc2VydmVyRW50cnk6IG51bGwsXG4gICAgICAgICAgY2xpZW50RW50cnk6IHt9LFxuICAgICAgICAgIGNsaWVudElucHV0czoge30sXG4gICAgICAgICAgc3RhdGljSW5wdXRzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJJbnB1dHM6IHt9LFxuICAgICAgICAgIC8vIHN0YXRpY01hbmlmZXN0IHJlbW92ZWQgZnJvbSBBdXRvRGlzY292ZXJlZEZpbGVzXG4gICAgICAgICAgc2VydmVyQWN0aW9uczoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgICBzZXJ2ZXJNYW5pZmVzdDoge30sXG4gICAgICAgIHJlc29sdmVkQ29uZmlnOiBzZXJ2ZXIuY29uZmlnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICAvLyBGaXggQ0pTIG5hbWVkIGltcG9ydHMgaW4gc2VydmVyIGVudmlyb25tZW50LlxuICAvLyBWaXRlJ3MgZXNidWlsZCBKU1ggdHJhbnNmb3JtIChhbmQgQHZpdGVqcy9wbHVnaW4tcmVhY3QgaWYgcHJlc2VudCkgZ2VuZXJhdGVzXG4gIC8vIG5hbWVkIGltcG9ydHMgbGlrZSBgaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCJgLiBJbiB0aGUgc2VydmVyIGVudmlyb25tZW50LFxuICAvLyByZWFjdCdzIHJlYWN0LXNlcnZlciBleHBvcnQgaXMgQ0pTLW9ubHksIGFuZCBOb2RlJ3MgRVNNIGludGVyb3AgZG9lc24ndCBzdXBwb3J0XG4gIC8vIG5hbWVkIGV4cG9ydHMgZnJvbSBDSlMuIFRoaXMgcG9zdC10cmFuc2Zvcm0gcmV3cml0ZXMgdGhlbS5cbiAgY29uc3QgY2pzRml4UGx1Z2luOiBQbHVnaW4gPSB7XG4gICAgbmFtZTogXCJ2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6c2VydmVyLWNqcy1maXhcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiIGFzIGNvbnN0LFxuICAgIGVuZm9yY2U6IFwicG9zdFwiIGFzIGNvbnN0LFxuICAgIGFwcGx5VG9FbnZpcm9ubWVudChlbnY6IGFueSkge1xuICAgICAgcmV0dXJuIGVudj8ubmFtZSA9PT0gJ3NlcnZlcic7XG4gICAgfSxcbiAgICB0cmFuc2Zvcm0oY29kZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgICBpZiAoaWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcycpKSByZXR1cm47XG4gICAgICBpZiAoIWlkLm1hdGNoKC9cXC5banRdc3g/JC8pKSByZXR1cm47XG4gICAgICBcbiAgICAgIGNvbnN0IG5hbWVkSW1wb3J0UmUgPSAvaW1wb3J0XFxzKlxceyhbXn1dKylcXH1cXHMqZnJvbVxccypbXCInXXJlYWN0W1wiJ11cXHMqOz8vZztcbiAgICAgIGlmICghbmFtZWRJbXBvcnRSZS50ZXN0KGNvZGUpKSByZXR1cm47XG4gICAgICBcbiAgICAgIG5hbWVkSW1wb3J0UmUubGFzdEluZGV4ID0gMDtcbiAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvZGUucmVwbGFjZShuYW1lZEltcG9ydFJlLCAoX21hdGNoLCBpbXBvcnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWFzID0gYF9fcmVhY3RfY2pzXyR7Y291bnRlcisrfWA7XG4gICAgICAgIHJldHVybiBgaW1wb3J0ICR7YWxpYXN9IGZyb20gXCJyZWFjdFwiOyBjb25zdCB7JHtpbXBvcnRzfX0gPSAke2FsaWFzfTtgO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdCwgbWFwOiBudWxsIH07XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gW2htclBsdWdpbiwgY2pzRml4UGx1Z2luLCBzZXJ2ZXJQbHVnaW5dO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVYSxNQUFBLHdCQUFBLEdBQTJCLFNBQVMsK0JBQUEsQ0FBZ0MsT0FBd0MsRUFBQTtBQUN2SCxFQUFBLElBQUksV0FBVyxJQUFNLEVBQUE7QUFDbkIsSUFBTSxNQUFBLElBQUksTUFBTSxxQkFBcUIsQ0FBQTtBQUFBO0FBR3ZDLEVBQU0sTUFBQSxlQUFBLEdBQWtCLGVBQWUsT0FBTyxDQUFBO0FBQzlDLEVBQUksSUFBQSxlQUFBLENBQWdCLFNBQVMsT0FBUyxFQUFBO0FBQ3BDLElBQUksSUFBQSxlQUFBLENBQWdCLFNBQVMsSUFBTSxFQUFBO0FBQ2pDLE1BQUEsTUFBTSxlQUFnQixDQUFBLEtBQUE7QUFBQTtBQUV4QixJQUFNLE1BQUEsSUFBSSxNQUFNLDJCQUEyQixDQUFBO0FBQUE7QUFFN0MsRUFBQSxNQUFNLGNBQWMsZUFBZ0IsQ0FBQSxXQUFBO0FBR3BDLEVBQUEsTUFBTSxTQUFZLEdBQUE7QUFBQSxJQUNoQixJQUFNLEVBQUEscUNBQUE7QUFBQSxJQUNOLEtBQU8sRUFBQSxPQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJUCxVQUFVLEdBQVUsRUFBQTtBQUNsQixNQUFNLE1BQUEsRUFBRSxJQUFNLEVBQUEsTUFBQSxFQUFXLEdBQUEsR0FBQTtBQUN6QixNQUFNLE1BQUEs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/plugin.server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/plugin.server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,aAAa,CAAC;AA0CrB,eAAO,MAAM,iBAAiB,EAAE,YAwoB/B,CAAC"}
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
import { createLogger, } from "vite";
|
|
17
17
|
import { resolveOptions } from "../config/resolveOptions.js";
|
|
18
18
|
import { createBuildLoader } from "./createBuildLoader.server.js";
|
|
19
|
-
import {
|
|
19
|
+
import { renderPagesBatched } from "./renderPagesBatched.js";
|
|
20
|
+
import { renderPages as renderPagesSequential } from "./renderPages.js";
|
|
20
21
|
import { getBundleManifest } from "../helpers/getBundleManifest.js";
|
|
21
22
|
import { createWorker } from "../worker/createWorker.js";
|
|
22
23
|
import { serializedOptions, serializeResolvedConfig, } from "../helpers/serializeUserOptions.js";
|
|
@@ -375,6 +376,12 @@ export const reactStaticPlugin = function _reactStaticPlugin(options) {
|
|
|
375
376
|
}
|
|
376
377
|
}
|
|
377
378
|
}
|
|
379
|
+
// Select render mode based on build config
|
|
380
|
+
const renderMode = userOptions.build?.renderMode ?? "parallel";
|
|
381
|
+
const renderPages = renderMode === "sequential" ? renderPagesSequential : renderPagesBatched;
|
|
382
|
+
if (userOptions.verbose) {
|
|
383
|
+
logger.info(`[static] Using ${renderMode} rendering${renderMode === "parallel" ? ` (batch size: ${userOptions.build?.batchSize ?? 8})` : ""}`);
|
|
384
|
+
}
|
|
378
385
|
// this will render the routes
|
|
379
386
|
const renderPagesGenerator = renderPages(routes, {
|
|
380
387
|
...handlerOptions,
|
|
@@ -393,6 +400,7 @@ export const reactStaticPlugin = function _reactStaticPlugin(options) {
|
|
|
393
400
|
staticManifest: staticManifest, // Pass static manifest for path resolution
|
|
394
401
|
autoDiscoveredFiles: autoDiscoveredFiles,
|
|
395
402
|
cssFilesByPage: cssFilesByPage,
|
|
403
|
+
batchSize: userOptions.build?.batchSize,
|
|
396
404
|
}, renderPage);
|
|
397
405
|
// Process render results
|
|
398
406
|
let finalResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderPagesBatched.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/renderPagesBatched.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAA2C,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"renderPagesBatched.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/renderPagesBatched.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAA2C,MAAM,YAAY,CAAC;AA4OzF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,aA6HhC,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { handleError } from "../error/handleError.js";
|
|
2
2
|
import { fileWriter } from "./fileWriter.js";
|
|
3
|
+
import { createRenderMetrics } from "../metrics/createRenderMetrics.js";
|
|
4
|
+
import { createStreamMetrics } from "../metrics/createStreamMetrics.js";
|
|
3
5
|
const DEFAULT_BATCH_SIZE = 8;
|
|
4
6
|
function resolvePathWithManifest(path, manifest) {
|
|
5
7
|
const entry = manifest[path];
|
|
@@ -10,9 +12,10 @@ function resolvePathWithManifest(path, manifest) {
|
|
|
10
12
|
}
|
|
11
13
|
/**
|
|
12
14
|
* Renders a single route completely, consuming all yields from renderPage
|
|
13
|
-
* and writing the RSC and HTML files
|
|
15
|
+
* and writing the RSC and HTML files. Collects metrics and handles events
|
|
16
|
+
* identically to the sequential renderPages.
|
|
14
17
|
*/
|
|
15
|
-
async function renderSingleRoute(route, handlerOptions, renderPage, manifest) {
|
|
18
|
+
async function renderSingleRoute(route, handlerOptions, renderPage, manifest, failedRoutes) {
|
|
16
19
|
const { autoDiscoveredFiles, cssFilesByPage, ...options } = handlerOptions;
|
|
17
20
|
const { page, props, root, html } = autoDiscoveredFiles.urlMap?.get(route) || {};
|
|
18
21
|
if (!page) {
|
|
@@ -23,6 +26,120 @@ async function renderSingleRoute(route, handlerOptions, renderPage, manifest) {
|
|
|
23
26
|
const resolvedPropsPath = props ? resolvePathWithManifest(props, manifest) : undefined;
|
|
24
27
|
const resolvedRootPath = root ? resolvePathWithManifest(root, manifest) : undefined;
|
|
25
28
|
const resolvedHtmlPath = html ? resolvePathWithManifest(html, manifest) : undefined;
|
|
29
|
+
// Store results for metrics tracking
|
|
30
|
+
const routeResults = new Map();
|
|
31
|
+
// Create onEvent wrapper that handles route.error and metrics collection
|
|
32
|
+
// This mirrors the sequential renderPages behavior exactly
|
|
33
|
+
const wrapperOnEvent = (event) => {
|
|
34
|
+
// Call the original onEvent first
|
|
35
|
+
if (options.onEvent) {
|
|
36
|
+
options.onEvent(event);
|
|
37
|
+
}
|
|
38
|
+
// Handle route.error events
|
|
39
|
+
if (event.type === "route.error") {
|
|
40
|
+
const detectedPanicError = handleError({
|
|
41
|
+
error: event.data.error,
|
|
42
|
+
logger: options.logger,
|
|
43
|
+
panicThreshold: event.data.panicThreshold,
|
|
44
|
+
context: `route.error (${event.data.route})`,
|
|
45
|
+
});
|
|
46
|
+
if (detectedPanicError != null) {
|
|
47
|
+
options.logger?.error(`[renderPagesBatched] Panic error for route ${event.data.route}: ${event.data.error.message}`);
|
|
48
|
+
failedRoutes.set(event.data.route, event.data.error);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
options.logger?.warn(`[renderPagesBatched] Non-panic error for route ${event.data.route}: ${event.data.error.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Handle metrics collection on file.write.done
|
|
55
|
+
if (event.type === "file.write.done" && event.data.route === route) {
|
|
56
|
+
const routeResult = routeResults.get(route);
|
|
57
|
+
if (routeResult && routeResult.type === "success") {
|
|
58
|
+
if (event.data.fileType === "html") {
|
|
59
|
+
const endTime = performance.now();
|
|
60
|
+
const htmlMetrics = createRenderMetrics({
|
|
61
|
+
route: route,
|
|
62
|
+
type: routeResult.metrics.html.type,
|
|
63
|
+
fromMainThread: routeResult.metrics.html.fromMainThread,
|
|
64
|
+
fromRscWorker: routeResult.metrics.html.fromRscWorker,
|
|
65
|
+
fromHtmlWorker: routeResult.metrics.html.fromHtmlWorker,
|
|
66
|
+
fileSize: event.data.content.length,
|
|
67
|
+
chunks: event.data.chunks || 0,
|
|
68
|
+
processingTime: endTime - routeResult.metrics.html.streamMetrics.startTime,
|
|
69
|
+
chunkRate: (event.data.chunks || 0) / ((endTime - routeResult.metrics.html.streamMetrics.startTime) / 1000),
|
|
70
|
+
fileName: event.data.fileName,
|
|
71
|
+
outputPath: event.data.path,
|
|
72
|
+
baseDir: event.data.baseDir,
|
|
73
|
+
routePath: event.data.routePath,
|
|
74
|
+
streamMetrics: createStreamMetrics({
|
|
75
|
+
...routeResult.metrics.html.streamMetrics,
|
|
76
|
+
chunks: event.data.chunks || 0,
|
|
77
|
+
bytes: event.data.content.length,
|
|
78
|
+
duration: endTime - routeResult.metrics.html.streamMetrics.startTime,
|
|
79
|
+
endTime: endTime,
|
|
80
|
+
}),
|
|
81
|
+
});
|
|
82
|
+
if (options.onMetrics) {
|
|
83
|
+
options.onMetrics(htmlMetrics);
|
|
84
|
+
}
|
|
85
|
+
// Also emit RSC Full metrics if available
|
|
86
|
+
if (routeResult.metrics?.rscFull) {
|
|
87
|
+
const rscFullEndTime = performance.now();
|
|
88
|
+
const rscFullMetrics = createRenderMetrics({
|
|
89
|
+
route: route,
|
|
90
|
+
type: routeResult.metrics.rscFull.type,
|
|
91
|
+
fromMainThread: routeResult.metrics.rscFull.fromMainThread,
|
|
92
|
+
fromRscWorker: routeResult.metrics.rscFull.fromRscWorker,
|
|
93
|
+
fromHtmlWorker: routeResult.metrics.rscFull.fromHtmlWorker,
|
|
94
|
+
processingTime: rscFullEndTime - routeResult.metrics.rscFull.streamMetrics.startTime,
|
|
95
|
+
chunks: routeResult.metrics.rscFull.streamMetrics.chunks,
|
|
96
|
+
chunkRate: routeResult.metrics.rscFull.streamMetrics.chunks / ((rscFullEndTime - routeResult.metrics.rscFull.streamMetrics.startTime) / 1000),
|
|
97
|
+
fileName: event.data.fileName,
|
|
98
|
+
outputPath: event.data.path,
|
|
99
|
+
baseDir: event.data.baseDir,
|
|
100
|
+
routePath: event.data.routePath,
|
|
101
|
+
streamMetrics: createStreamMetrics({
|
|
102
|
+
...routeResult.metrics.rscFull.streamMetrics,
|
|
103
|
+
duration: rscFullEndTime - routeResult.metrics.rscFull.streamMetrics.startTime,
|
|
104
|
+
endTime: rscFullEndTime,
|
|
105
|
+
}),
|
|
106
|
+
});
|
|
107
|
+
if (options.onMetrics) {
|
|
108
|
+
options.onMetrics(rscFullMetrics);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (event.data.fileType === "rsc") {
|
|
113
|
+
const rscEndTime = performance.now();
|
|
114
|
+
const rscMetrics = createRenderMetrics({
|
|
115
|
+
route: route,
|
|
116
|
+
type: routeResult.metrics.rscHeadless.type,
|
|
117
|
+
fromMainThread: routeResult.metrics.rscHeadless.fromMainThread,
|
|
118
|
+
fromRscWorker: routeResult.metrics.rscHeadless.fromRscWorker,
|
|
119
|
+
fromHtmlWorker: routeResult.metrics.rscHeadless.fromHtmlWorker,
|
|
120
|
+
fileSize: event.data.content.length,
|
|
121
|
+
chunks: event.data.chunks || 0,
|
|
122
|
+
processingTime: rscEndTime - routeResult.metrics.rscHeadless.streamMetrics.startTime,
|
|
123
|
+
chunkRate: (event.data.chunks || 0) / ((rscEndTime - routeResult.metrics.rscHeadless.streamMetrics.startTime) / 1000),
|
|
124
|
+
fileName: event.data.fileName,
|
|
125
|
+
outputPath: event.data.path,
|
|
126
|
+
baseDir: event.data.baseDir,
|
|
127
|
+
routePath: event.data.routePath,
|
|
128
|
+
streamMetrics: createStreamMetrics({
|
|
129
|
+
...routeResult.metrics.rscHeadless.streamMetrics,
|
|
130
|
+
chunks: event.data.chunks || 0,
|
|
131
|
+
bytes: event.data.content.length,
|
|
132
|
+
duration: rscEndTime - routeResult.metrics.rscHeadless.streamMetrics.startTime,
|
|
133
|
+
endTime: rscEndTime,
|
|
134
|
+
}),
|
|
135
|
+
});
|
|
136
|
+
if (options.onMetrics) {
|
|
137
|
+
options.onMetrics(rscMetrics);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
};
|
|
26
143
|
const routeHandlerOptions = {
|
|
27
144
|
...options,
|
|
28
145
|
manifest,
|
|
@@ -34,6 +151,7 @@ async function renderSingleRoute(route, handlerOptions, renderPage, manifest) {
|
|
|
34
151
|
cssFiles: cssFilesByPage?.get(route) ?? new Map(),
|
|
35
152
|
globalCss: options.globalCss ?? new Map(),
|
|
36
153
|
id: `${route}-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
|
|
154
|
+
onEvent: wrapperOnEvent,
|
|
37
155
|
};
|
|
38
156
|
const pageRenderer = renderPage(routeHandlerOptions);
|
|
39
157
|
const results = [];
|
|
@@ -41,18 +159,17 @@ async function renderSingleRoute(route, handlerOptions, renderPage, manifest) {
|
|
|
41
159
|
// Consume all yields from the page renderer and write files
|
|
42
160
|
for await (const result of pageRenderer) {
|
|
43
161
|
results.push(result);
|
|
44
|
-
// Track error results
|
|
45
162
|
if (result.type === "error" && result.error) {
|
|
46
163
|
routeError = result.error instanceof Error ? result.error : new Error(String(result.error));
|
|
47
164
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
165
|
+
if (result.type === "success" || result.type === "skip") {
|
|
166
|
+
// Store result for metrics tracking (wrapperOnEvent needs this)
|
|
167
|
+
routeResults.set(route, result);
|
|
168
|
+
const rscWritePromise = fileWriter(result.rsc, "rsc", { ...options, route, onEvent: wrapperOnEvent, logger: options.logger }, options.signal);
|
|
169
|
+
const htmlWritePromise = fileWriter(result.html, "html", { ...options, route, onEvent: wrapperOnEvent, logger: options.logger }, options.signal);
|
|
52
170
|
await Promise.all([rscWritePromise, htmlWritePromise]);
|
|
53
171
|
}
|
|
54
172
|
}
|
|
55
|
-
// Return error if any result was an error
|
|
56
173
|
if (routeError) {
|
|
57
174
|
return { route, results, error: routeError };
|
|
58
175
|
}
|
|
@@ -116,7 +233,7 @@ export const renderPagesBatched = (routes, handlerOptions, renderPage) => {
|
|
|
116
233
|
return abortResult;
|
|
117
234
|
}
|
|
118
235
|
// Render all pages in this batch concurrently
|
|
119
|
-
const batchPromises = batch.map(route => renderSingleRoute(route, handlerOptions, renderPage, manifest));
|
|
236
|
+
const batchPromises = batch.map(route => renderSingleRoute(route, handlerOptions, renderPage, manifest, failedRoutes));
|
|
120
237
|
const batchResults = await Promise.all(batchPromises);
|
|
121
238
|
// Process results from this batch
|
|
122
239
|
for (const { route, results: pageResults, error } of batchResults) {
|
|
@@ -130,6 +247,16 @@ export const renderPagesBatched = (routes, handlerOptions, renderPage) => {
|
|
|
130
247
|
if (panicError != null) {
|
|
131
248
|
failedRoutes.set(route, error);
|
|
132
249
|
options.logger?.error(`[renderPagesBatched] Panic error for route ${route}: ${error.message}`);
|
|
250
|
+
const errorResult = {
|
|
251
|
+
type: "error",
|
|
252
|
+
error,
|
|
253
|
+
route,
|
|
254
|
+
failedRoutes,
|
|
255
|
+
completedRoutes,
|
|
256
|
+
results,
|
|
257
|
+
};
|
|
258
|
+
yield errorResult;
|
|
259
|
+
return errorResult;
|
|
133
260
|
}
|
|
134
261
|
else {
|
|
135
262
|
options.logger?.warn(`[renderPagesBatched] Non-panic error for route ${route}: ${error.message}`);
|
|
@@ -137,7 +264,6 @@ export const renderPagesBatched = (routes, handlerOptions, renderPage) => {
|
|
|
137
264
|
}
|
|
138
265
|
else {
|
|
139
266
|
completedRoutes.add(route);
|
|
140
|
-
// Yield each result from this page
|
|
141
267
|
for (const result of pageResults) {
|
|
142
268
|
if (result.type === "success" || result.type === "skip") {
|
|
143
269
|
results.set(route, result);
|
|
@@ -156,32 +282,6 @@ export const renderPagesBatched = (routes, handlerOptions, renderPage) => {
|
|
|
156
282
|
options.logger?.info(`[renderPagesBatched] Completed batch: ${completedRoutes.size}/${routeArray.length} pages`);
|
|
157
283
|
}
|
|
158
284
|
}
|
|
159
|
-
// Check if we should panic based on failed routes
|
|
160
|
-
if (failedRoutes.size > 0) {
|
|
161
|
-
const firstError = Array.from(failedRoutes.values())[0];
|
|
162
|
-
const panicError = handleError({
|
|
163
|
-
error: firstError,
|
|
164
|
-
logger: options.logger,
|
|
165
|
-
panicThreshold: options.panicThreshold,
|
|
166
|
-
context: `renderPagesBatched final check`,
|
|
167
|
-
});
|
|
168
|
-
if (panicError != null) {
|
|
169
|
-
if (options.verbose) {
|
|
170
|
-
options.logger?.error(`[renderPagesBatched] Build failed due to panic threshold: ${failedRoutes.size} routes failed`);
|
|
171
|
-
}
|
|
172
|
-
// Yield error before returning
|
|
173
|
-
const errorResult = {
|
|
174
|
-
type: "error",
|
|
175
|
-
error: panicError,
|
|
176
|
-
route: "",
|
|
177
|
-
failedRoutes,
|
|
178
|
-
completedRoutes,
|
|
179
|
-
results,
|
|
180
|
-
};
|
|
181
|
-
yield errorResult;
|
|
182
|
-
return errorResult;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
285
|
// Final success result
|
|
186
286
|
const finalResult = {
|
|
187
287
|
type: "success",
|
|
@@ -59,6 +59,7 @@ export type RenderPagesHandlerOptions = Omit<CreateHandlerOptions, "pagePath" |
|
|
|
59
59
|
cssFilesByPage: Map<string, Map<string, CssContent>>;
|
|
60
60
|
serverPipeableStreamOptions: any;
|
|
61
61
|
staticManifest?: Manifest;
|
|
62
|
+
batchSize?: number;
|
|
62
63
|
};
|
|
63
64
|
export type RenderPagesFn = (routes: string[], handlerOptions: RenderPagesHandlerOptions, renderPage: RenderPageFn) => RenderPagesReturn;
|
|
64
65
|
export type RenderPageReturn = AsyncGenerator<RenderPageResult, void, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/types.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin/types.d.ts
CHANGED
|
@@ -724,6 +724,21 @@ export type BuildConfig = {
|
|
|
724
724
|
rscExtension?: string;
|
|
725
725
|
cssModuleExtension?: string;
|
|
726
726
|
nodeExtension?: string;
|
|
727
|
+
/**
|
|
728
|
+
* Controls how pages are rendered during static generation.
|
|
729
|
+
*
|
|
730
|
+
* - `"parallel"` (default): Renders pages in concurrent batches for faster builds.
|
|
731
|
+
* Use `batchSize` to control concurrency (default: 8).
|
|
732
|
+
* - `"sequential"`: Renders pages one at a time. Slower but uses less memory
|
|
733
|
+
* and produces deterministic output order.
|
|
734
|
+
*/
|
|
735
|
+
renderMode?: "parallel" | "sequential";
|
|
736
|
+
/**
|
|
737
|
+
* Number of pages to render concurrently when `renderMode` is `"parallel"`.
|
|
738
|
+
* Higher values use more memory but build faster.
|
|
739
|
+
* @default 8
|
|
740
|
+
*/
|
|
741
|
+
batchSize?: number;
|
|
727
742
|
};
|
|
728
743
|
export type DevConfig = {
|
|
729
744
|
useHtmlWorker?: boolean | undefined;
|