one 1.12.2 → 1.12.3

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 (139) hide show
  1. package/dist/cjs/Root.cjs +7 -1
  2. package/dist/cjs/Root.js +7 -2
  3. package/dist/cjs/Root.js.map +1 -1
  4. package/dist/cjs/Root.native.js +8 -2
  5. package/dist/cjs/Root.native.js.map +1 -1
  6. package/dist/cjs/createApp.cjs +2 -2
  7. package/dist/cjs/createApp.js +2 -2
  8. package/dist/cjs/createApp.js.map +1 -1
  9. package/dist/cjs/createHandleRequest.cjs +5 -1
  10. package/dist/cjs/createHandleRequest.js +6 -2
  11. package/dist/cjs/createHandleRequest.js.map +1 -1
  12. package/dist/cjs/createHandleRequest.native.js +5 -1
  13. package/dist/cjs/createHandleRequest.native.js.map +1 -1
  14. package/dist/cjs/fork/SSRNavigationContainer.cjs +18 -9
  15. package/dist/cjs/fork/SSRNavigationContainer.js +17 -6
  16. package/dist/cjs/fork/SSRNavigationContainer.js.map +1 -1
  17. package/dist/cjs/fork/SSRNavigationContainer.native.js +21 -10
  18. package/dist/cjs/fork/SSRNavigationContainer.native.js.map +1 -1
  19. package/dist/cjs/router/linkingConfig.cjs +2 -1
  20. package/dist/cjs/router/linkingConfig.js +2 -2
  21. package/dist/cjs/router/linkingConfig.js.map +1 -1
  22. package/dist/cjs/router/linkingConfig.native.js +2 -1
  23. package/dist/cjs/router/linkingConfig.native.js.map +1 -1
  24. package/dist/cjs/serve.cjs +67 -28
  25. package/dist/cjs/serve.js +68 -28
  26. package/dist/cjs/serve.js.map +1 -1
  27. package/dist/cjs/serve.native.js +96 -35
  28. package/dist/cjs/serve.native.js.map +1 -1
  29. package/dist/cjs/server/oneServe.cjs +112 -39
  30. package/dist/cjs/server/oneServe.js +94 -41
  31. package/dist/cjs/server/oneServe.js.map +2 -2
  32. package/dist/cjs/server/oneServe.native.js +180 -80
  33. package/dist/cjs/server/oneServe.native.js.map +1 -1
  34. package/dist/cjs/utils/evictOldest.cjs +34 -0
  35. package/dist/cjs/utils/evictOldest.js +29 -0
  36. package/dist/cjs/utils/evictOldest.js.map +6 -0
  37. package/dist/cjs/utils/evictOldest.native.js +34 -0
  38. package/dist/cjs/utils/evictOldest.native.js.map +1 -0
  39. package/dist/cjs/utils/isResponse.cjs +1 -1
  40. package/dist/cjs/utils/isResponse.js +1 -1
  41. package/dist/cjs/utils/isResponse.js.map +1 -1
  42. package/dist/cjs/utils/isResponse.native.js +1 -1
  43. package/dist/cjs/utils/isResponse.native.js.map +1 -1
  44. package/dist/cjs/vite/one-server-only.cjs +9 -6
  45. package/dist/cjs/vite/one-server-only.js +8 -7
  46. package/dist/cjs/vite/one-server-only.js.map +1 -1
  47. package/dist/cjs/vite/resolveResponse.cjs +17 -4
  48. package/dist/cjs/vite/resolveResponse.js +15 -2
  49. package/dist/cjs/vite/resolveResponse.js.map +1 -1
  50. package/dist/cjs/vite/resolveResponse.native.js +17 -4
  51. package/dist/cjs/vite/resolveResponse.native.js.map +1 -1
  52. package/dist/esm/Root.js +7 -1
  53. package/dist/esm/Root.js.map +1 -1
  54. package/dist/esm/Root.mjs +7 -1
  55. package/dist/esm/Root.mjs.map +1 -1
  56. package/dist/esm/Root.native.js +7 -1
  57. package/dist/esm/Root.native.js.map +1 -1
  58. package/dist/esm/createApp.js +2 -2
  59. package/dist/esm/createApp.js.map +1 -1
  60. package/dist/esm/createApp.mjs +2 -2
  61. package/dist/esm/createApp.mjs.map +1 -1
  62. package/dist/esm/createHandleRequest.js +6 -2
  63. package/dist/esm/createHandleRequest.js.map +1 -1
  64. package/dist/esm/createHandleRequest.mjs +5 -2
  65. package/dist/esm/createHandleRequest.mjs.map +1 -1
  66. package/dist/esm/createHandleRequest.native.js +5 -2
  67. package/dist/esm/createHandleRequest.native.js.map +1 -1
  68. package/dist/esm/fork/SSRNavigationContainer.js +17 -6
  69. package/dist/esm/fork/SSRNavigationContainer.js.map +1 -1
  70. package/dist/esm/fork/SSRNavigationContainer.mjs +18 -9
  71. package/dist/esm/fork/SSRNavigationContainer.mjs.map +1 -1
  72. package/dist/esm/fork/SSRNavigationContainer.native.js +21 -10
  73. package/dist/esm/fork/SSRNavigationContainer.native.js.map +1 -1
  74. package/dist/esm/router/linkingConfig.js +2 -1
  75. package/dist/esm/router/linkingConfig.js.map +1 -1
  76. package/dist/esm/router/linkingConfig.mjs +2 -1
  77. package/dist/esm/router/linkingConfig.mjs.map +1 -1
  78. package/dist/esm/router/linkingConfig.native.js +2 -1
  79. package/dist/esm/router/linkingConfig.native.js.map +1 -1
  80. package/dist/esm/serve.js +68 -28
  81. package/dist/esm/serve.js.map +1 -1
  82. package/dist/esm/serve.mjs +67 -28
  83. package/dist/esm/serve.mjs.map +1 -1
  84. package/dist/esm/serve.native.js +96 -35
  85. package/dist/esm/serve.native.js.map +1 -1
  86. package/dist/esm/server/oneServe.js +95 -42
  87. package/dist/esm/server/oneServe.js.map +2 -2
  88. package/dist/esm/server/oneServe.mjs +113 -40
  89. package/dist/esm/server/oneServe.mjs.map +1 -1
  90. package/dist/esm/server/oneServe.native.js +181 -81
  91. package/dist/esm/server/oneServe.native.js.map +1 -1
  92. package/dist/esm/utils/evictOldest.js +13 -0
  93. package/dist/esm/utils/evictOldest.js.map +6 -0
  94. package/dist/esm/utils/evictOldest.mjs +11 -0
  95. package/dist/esm/utils/evictOldest.mjs.map +1 -0
  96. package/dist/esm/utils/evictOldest.native.js +8 -0
  97. package/dist/esm/utils/evictOldest.native.js.map +1 -0
  98. package/dist/esm/utils/isResponse.js +1 -1
  99. package/dist/esm/utils/isResponse.js.map +1 -1
  100. package/dist/esm/utils/isResponse.mjs +1 -1
  101. package/dist/esm/utils/isResponse.mjs.map +1 -1
  102. package/dist/esm/utils/isResponse.native.js +1 -1
  103. package/dist/esm/utils/isResponse.native.js.map +1 -1
  104. package/dist/esm/vite/one-server-only.js +8 -7
  105. package/dist/esm/vite/one-server-only.js.map +1 -1
  106. package/dist/esm/vite/one-server-only.mjs +9 -6
  107. package/dist/esm/vite/one-server-only.mjs.map +1 -1
  108. package/dist/esm/vite/resolveResponse.js +15 -2
  109. package/dist/esm/vite/resolveResponse.js.map +1 -1
  110. package/dist/esm/vite/resolveResponse.mjs +16 -4
  111. package/dist/esm/vite/resolveResponse.mjs.map +1 -1
  112. package/dist/esm/vite/resolveResponse.native.js +16 -4
  113. package/dist/esm/vite/resolveResponse.native.js.map +1 -1
  114. package/package.json +9 -9
  115. package/src/Root.tsx +14 -1
  116. package/src/createApp.tsx +8 -2
  117. package/src/createHandleRequest.ts +9 -2
  118. package/src/fork/SSRNavigationContainer.tsx +30 -7
  119. package/src/router/linkingConfig.ts +2 -2
  120. package/src/serve.ts +134 -48
  121. package/src/server/oneServe.ts +153 -47
  122. package/src/utils/evictOldest.ts +13 -0
  123. package/src/utils/isResponse.ts +4 -4
  124. package/src/vite/one-server-only.tsx +25 -11
  125. package/src/vite/resolveResponse.ts +20 -1
  126. package/types/Root.d.ts.map +1 -1
  127. package/types/createApp.d.ts.map +1 -1
  128. package/types/createHandleRequest.d.ts +4 -0
  129. package/types/createHandleRequest.d.ts.map +1 -1
  130. package/types/fork/SSRNavigationContainer.d.ts.map +1 -1
  131. package/types/router/linkingConfig.d.ts.map +1 -1
  132. package/types/serve.d.ts.map +1 -1
  133. package/types/server/oneServe.d.ts.map +1 -1
  134. package/types/utils/evictOldest.d.ts +6 -0
  135. package/types/utils/evictOldest.d.ts.map +1 -0
  136. package/types/vite/one-server-only.d.ts +9 -3
  137. package/types/vite/one-server-only.d.ts.map +1 -1
  138. package/types/vite/resolveResponse.d.ts +4 -0
  139. package/types/vite/resolveResponse.d.ts.map +1 -1
@@ -31,6 +31,7 @@ __export(linkingConfig_exports, {
31
31
  });
32
32
  module.exports = __toCommonJS(linkingConfig_exports);
33
33
  var import_constants = require("../constants.native.js"),
34
+ import_evictOldest = require("../utils/evictOldest.native.js"),
34
35
  import_getLinkingConfig = require("./getLinkingConfig.native.js"),
35
36
  linkingConfig,
36
37
  cachedBaseLinkingConfig,
@@ -54,7 +55,7 @@ function getSSRInitialState(routeNode, initialLocation) {
54
55
  var path = initialLocation.pathname + (initialLocation.search || "");
55
56
  if (ssrStateCache.has(path)) return ssrStateCache.get(path);
56
57
  var state = (_cachedBaseLinkingConfig_getStateFromPath = cachedBaseLinkingConfig.getStateFromPath) === null || _cachedBaseLinkingConfig_getStateFromPath === void 0 ? void 0 : _cachedBaseLinkingConfig_getStateFromPath.call(cachedBaseLinkingConfig, path, cachedBaseLinkingConfig.config);
57
- return ssrStateCache.size > 1e4 && ssrStateCache.clear(), ssrStateCache.set(path, state), state;
58
+ return (0, import_evictOldest.evictOldest)(ssrStateCache, 5e3, 1e3), ssrStateCache.set(path, state), state;
58
59
  }
59
60
  }
60
61
  function setupLinking(routeNode, initialLocation) {
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","linkingConfig_exports","__export","ensureBaseLinkingConfig","getLinking","getSSRInitialState","resetLinking","setLinking","setupLinking","module","exports","import_constants","require","import_getLinkingConfig","linkingConfig","cachedBaseLinkingConfig","cachedRouteNodeForLinking","ssrStateCache","Map","_","routeNode","getLinkingConfig","initialLocation","_cachedBaseLinkingConfig_getStateFromPath","path","pathname","search","has","get","state","getStateFromPath","call","config","size","clear","set","initialState","_linkingConfig_getStateFromPath","getInitialURL","toString","isWebClient","_historyState___tempLocation","historyState","window","history","__tempLocation","__tempKey"],"sources":["../../../src/router/linkingConfig.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","linkingConfig_exports","__export","ensureBaseLinkingConfig","getLinking","getSSRInitialState","resetLinking","setLinking","setupLinking","module","exports","import_constants","require","import_evictOldest","import_getLinkingConfig","linkingConfig","cachedBaseLinkingConfig","cachedRouteNodeForLinking","ssrStateCache","Map","_","routeNode","getLinkingConfig","initialLocation","_cachedBaseLinkingConfig_getStateFromPath","path","pathname","search","has","get","state","getStateFromPath","call","config","evictOldest","set","initialState","_linkingConfig_getStateFromPath","getInitialURL","toString","isWebClient","_historyState___tempLocation","historyState","window","history","__tempLocation","__tempKey"],"sources":["../../../src/router/linkingConfig.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -44,30 +44,69 @@ process.on("uncaughtException", err => {
44
44
  });
45
45
  async function serve(args = {}) {
46
46
  if (args.cluster) {
47
- const cluster = await import("node:cluster"),
48
- {
49
- cpus
50
- } = await import("node:os");
51
- if (cluster.default.isPrimary) {
52
- const numWorkers = typeof args.cluster == "number" ? args.cluster : cpus().length;
53
- console.info(`[one] cluster: starting ${numWorkers} workers`);
54
- for (let i = 0; i < numWorkers; i++) cluster.default.fork();
55
- let recentCrashes = 0,
56
- lastCrashTime = 0;
57
- cluster.default.on("exit", (worker, code, signal) => {
58
- if (code === 0 || signal === "SIGTERM" || signal === "SIGINT") return;
59
- const now = Date.now();
60
- now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(`[one] worker ${worker.process.pid} died (code ${code}, signal ${signal}), restarting`), setTimeout(() => cluster.default.fork(), Math.min(recentCrashes * 500, 5e3));
61
- });
62
- const shutdown = () => {
63
- for (const id in cluster.default.workers) cluster.default.workers[id]?.process.kill("SIGTERM");
64
- setTimeout(() => process.exit(0), 5e3);
65
- };
66
- process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown);
67
- return;
68
- }
47
+ const {
48
+ cpus,
49
+ platform
50
+ } = await import("node:os"),
51
+ numWorkers = typeof args.cluster == "number" ? args.cluster : cpus().length,
52
+ [major, minor] = process.versions.node.split(".").map(Number);
53
+ return !["win32", "darwin"].includes(platform()) && (major > 22 || major === 22 && minor >= 12 || major >= 23) ? await serveWithReusePort(args, numWorkers) : await serveWithCluster(args, numWorkers);
54
+ }
55
+ return await startWorker(args);
56
+ }
57
+ async function serveWithReusePort(args, numWorkers) {
58
+ const {
59
+ fork
60
+ } = await import("node:child_process");
61
+ console.info(`[one] cluster: starting ${numWorkers} workers (SO_REUSEPORT)`);
62
+ const workers = [];
63
+ let recentCrashes = 0,
64
+ lastCrashTime = 0;
65
+ function spawnWorker() {
66
+ const child = fork(process.argv[1], process.argv.slice(2).filter(a => !a.startsWith("--cluster")), {
67
+ env: {
68
+ ...process.env,
69
+ ONE_CLUSTER_WORKER: "1"
70
+ },
71
+ stdio: "inherit"
72
+ });
73
+ workers.push(child), child.on("exit", (code, signal) => {
74
+ const idx = workers.indexOf(child);
75
+ if (idx >= 0 && workers.splice(idx, 1), code === 0 || signal === "SIGTERM" || signal === "SIGINT") return;
76
+ const now = Date.now();
77
+ now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(`[one] worker ${child.pid} died (code ${code}, signal ${signal}), restarting`), setTimeout(spawnWorker, Math.min(recentCrashes * 500, 5e3));
78
+ });
79
+ }
80
+ for (let i = 0; i < numWorkers; i++) spawnWorker();
81
+ const shutdown = () => {
82
+ for (const w of workers) w.kill("SIGTERM");
83
+ setTimeout(() => process.exit(0), 5e3);
84
+ };
85
+ process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown), await new Promise(() => {});
86
+ }
87
+ async function serveWithCluster(args, numWorkers) {
88
+ const cluster = await import("node:cluster");
89
+ if (cluster.default.isPrimary) {
90
+ console.info(`[one] cluster: starting ${numWorkers} workers (IPC)`);
91
+ for (let i = 0; i < numWorkers; i++) cluster.default.fork();
92
+ let recentCrashes = 0,
93
+ lastCrashTime = 0;
94
+ cluster.default.on("exit", (worker, code, signal) => {
95
+ if (code === 0 || signal === "SIGTERM" || signal === "SIGINT") return;
96
+ const now = Date.now();
97
+ now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(`[one] worker ${worker.process.pid} died (code ${code}, signal ${signal}), restarting`), setTimeout(() => cluster.default.fork(), Math.min(recentCrashes * 500, 5e3));
98
+ });
99
+ const shutdown = () => {
100
+ for (const id in cluster.default.workers) cluster.default.workers[id]?.process.kill("SIGTERM");
101
+ setTimeout(() => process.exit(0), 5e3);
102
+ };
103
+ process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown);
104
+ return;
69
105
  }
70
- const outDir = args.outDir || (import_fs_extra.default.existsSync("buildInfo.json") ? "." : null) || "dist",
106
+ return await startWorker(args);
107
+ }
108
+ async function startWorker(args) {
109
+ const outDir = args?.outDir || (import_fs_extra.default.existsSync("buildInfo.json") ? "." : null) || "dist",
71
110
  buildInfo = await import_fs_extra.default.readJSON(`${outDir}/buildInfo.json`),
72
111
  {
73
112
  oneOptions
@@ -87,14 +126,14 @@ async function serve(args = {}) {
87
126
  {
88
127
  oneServe
89
128
  } = await import("./server/oneServe");
90
- return labelProcess("serve"), args.loadEnv && (await loadEnv("production")), await vxrnServe({
129
+ return labelProcess("serve"), args?.loadEnv && (await loadEnv("production")), await vxrnServe({
91
130
  outDir: buildInfo.outDir || outDir,
92
- app: args.app,
131
+ app: args?.app,
93
132
  ...oneOptions.server,
94
133
  ...removeUndefined({
95
- port: args.port ? +args.port : void 0,
96
- host: args.host,
97
- compress: args.compress
134
+ port: args?.port ? +args.port : void 0,
135
+ host: args?.host,
136
+ compress: args?.compress
98
137
  }),
99
138
  async beforeRegisterRoutes(options, app) {
100
139
  await oneServe(oneOptions, buildInfo, app, {
package/dist/cjs/serve.js CHANGED
@@ -31,40 +31,80 @@ process.on("uncaughtException", (err) => {
31
31
  });
32
32
  async function serve(args = {}) {
33
33
  if (args.cluster) {
34
- const cluster = await import("node:cluster"), { cpus } = await import("node:os");
35
- if (cluster.default.isPrimary) {
36
- const numWorkers = typeof args.cluster == "number" ? args.cluster : cpus().length;
37
- console.info(`[one] cluster: starting ${numWorkers} workers`);
38
- for (let i = 0; i < numWorkers; i++)
39
- cluster.default.fork();
40
- let recentCrashes = 0, lastCrashTime = 0;
41
- cluster.default.on("exit", (worker, code, signal) => {
42
- if (code === 0 || signal === "SIGTERM" || signal === "SIGINT") return;
43
- const now = Date.now();
44
- now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(
45
- `[one] worker ${worker.process.pid} died (code ${code}, signal ${signal}), restarting`
46
- ), setTimeout(() => cluster.default.fork(), Math.min(recentCrashes * 500, 5e3));
47
- });
48
- const shutdown = () => {
49
- for (const id in cluster.default.workers)
50
- cluster.default.workers[id]?.process.kill("SIGTERM");
51
- setTimeout(() => process.exit(0), 5e3);
52
- };
53
- process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown);
54
- return;
55
- }
34
+ const { cpus, platform } = await import("node:os"), numWorkers = typeof args.cluster == "number" ? args.cluster : cpus().length, [major, minor] = process.versions.node.split(".").map(Number);
35
+ return !["win32", "darwin"].includes(platform()) && (major > 22 || major === 22 && minor >= 12 || major >= 23) ? await serveWithReusePort(args, numWorkers) : await serveWithCluster(args, numWorkers);
36
+ }
37
+ return await startWorker(args);
38
+ }
39
+ async function serveWithReusePort(args, numWorkers) {
40
+ const { fork } = await import("node:child_process");
41
+ console.info(`[one] cluster: starting ${numWorkers} workers (SO_REUSEPORT)`);
42
+ const workers = [];
43
+ let recentCrashes = 0, lastCrashTime = 0;
44
+ function spawnWorker() {
45
+ const child = fork(
46
+ process.argv[1],
47
+ process.argv.slice(2).filter((a) => !a.startsWith("--cluster")),
48
+ {
49
+ env: { ...process.env, ONE_CLUSTER_WORKER: "1" },
50
+ stdio: "inherit"
51
+ }
52
+ );
53
+ workers.push(child), child.on("exit", (code, signal) => {
54
+ const idx = workers.indexOf(child);
55
+ if (idx >= 0 && workers.splice(idx, 1), code === 0 || signal === "SIGTERM" || signal === "SIGINT") return;
56
+ const now = Date.now();
57
+ now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(
58
+ `[one] worker ${child.pid} died (code ${code}, signal ${signal}), restarting`
59
+ ), setTimeout(spawnWorker, Math.min(recentCrashes * 500, 5e3));
60
+ });
56
61
  }
57
- const outDir = args.outDir || (import_fs_extra.default.existsSync("buildInfo.json") ? "." : null) || "dist", buildInfo = await import_fs_extra.default.readJSON(`${outDir}/buildInfo.json`), { oneOptions } = buildInfo;
62
+ for (let i = 0; i < numWorkers; i++)
63
+ spawnWorker();
64
+ const shutdown = () => {
65
+ for (const w of workers)
66
+ w.kill("SIGTERM");
67
+ setTimeout(() => process.exit(0), 5e3);
68
+ };
69
+ process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown), await new Promise(() => {
70
+ });
71
+ }
72
+ async function serveWithCluster(args, numWorkers) {
73
+ const cluster = await import("node:cluster");
74
+ if (cluster.default.isPrimary) {
75
+ console.info(`[one] cluster: starting ${numWorkers} workers (IPC)`);
76
+ for (let i = 0; i < numWorkers; i++)
77
+ cluster.default.fork();
78
+ let recentCrashes = 0, lastCrashTime = 0;
79
+ cluster.default.on("exit", (worker, code, signal) => {
80
+ if (code === 0 || signal === "SIGTERM" || signal === "SIGINT") return;
81
+ const now = Date.now();
82
+ now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(
83
+ `[one] worker ${worker.process.pid} died (code ${code}, signal ${signal}), restarting`
84
+ ), setTimeout(() => cluster.default.fork(), Math.min(recentCrashes * 500, 5e3));
85
+ });
86
+ const shutdown = () => {
87
+ for (const id in cluster.default.workers)
88
+ cluster.default.workers[id]?.process.kill("SIGTERM");
89
+ setTimeout(() => process.exit(0), 5e3);
90
+ };
91
+ process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown);
92
+ return;
93
+ }
94
+ return await startWorker(args);
95
+ }
96
+ async function startWorker(args) {
97
+ const outDir = args?.outDir || (import_fs_extra.default.existsSync("buildInfo.json") ? "." : null) || "dist", buildInfo = await import_fs_extra.default.readJSON(`${outDir}/buildInfo.json`), { oneOptions } = buildInfo;
58
98
  (0, import_setServerGlobals.setServerGlobals)(), (0, import_setupBuildOptions.setupBuildInfo)(buildInfo), (0, import_ensureExists.ensureExists)(oneOptions);
59
99
  const { labelProcess } = await import("./cli/label-process"), { removeUndefined } = await import("./utils/removeUndefined"), { loadEnv, serve: vxrnServe, serveStaticAssets } = await import("vxrn/serve"), { oneServe } = await import("./server/oneServe");
60
- return labelProcess("serve"), args.loadEnv && await loadEnv("production"), await vxrnServe({
100
+ return labelProcess("serve"), args?.loadEnv && await loadEnv("production"), await vxrnServe({
61
101
  outDir: buildInfo.outDir || outDir,
62
- app: args.app,
102
+ app: args?.app,
63
103
  ...oneOptions.server,
64
104
  ...removeUndefined({
65
- port: args.port ? +args.port : void 0,
66
- host: args.host,
67
- compress: args.compress
105
+ port: args?.port ? +args.port : void 0,
106
+ host: args?.host,
107
+ compress: args?.compress
68
108
  }),
69
109
  async beforeRegisterRoutes(options, app) {
70
110
  await oneServe(oneOptions, buildInfo, app, { serveStaticAssets });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/serve.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAO,+BAEP,kBAAoB,iCAGpB,0BAAiC,sCACjC,2BAA+B,uCAC/B,sBAA6B;AAG7B,QAAQ,GAAG,qBAAqB,CAAC,QAAQ;AACvC,UAAQ,MAAM,4BAA4B,KAAK,SAAS,GAAG;AAC7D,CAAC;AAED,eAAsB,MACpB,OAII,CAAC,GACL;AAEA,MAAI,KAAK,SAAS;AAChB,UAAM,UAAU,MAAM,OAAO,cAAc,GACrC,EAAE,KAAK,IAAI,MAAM,OAAO,SAAS;AAEvC,QAAI,QAAQ,QAAQ,WAAW;AAC7B,YAAM,aAAa,OAAO,KAAK,WAAY,WAAW,KAAK,UAAU,KAAK,EAAE;AAE5E,cAAQ,KAAK,2BAA2B,UAAU,UAAU;AAE5D,eAAS,IAAI,GAAG,IAAI,YAAY;AAC9B,gBAAQ,QAAQ,KAAK;AAIvB,UAAI,gBAAgB,GAChB,gBAAgB;AAEpB,cAAQ,QAAQ,GAAG,QAAQ,CAAC,QAAQ,MAAM,WAAW;AACnD,YAAI,SAAS,KAAK,WAAW,aAAa,WAAW,SAAU;AAE/D,cAAM,MAAM,KAAK,IAAI;AACrB,QAAI,MAAM,gBAAgB,MACxB,kBAEA,gBAAgB,GAElB,gBAAgB,KAEZ,gBAAgB,aAAa,MAC/B,QAAQ,MAAM,yCAAyC,GACvD,QAAQ,KAAK,CAAC,IAGhB,QAAQ;AAAA,UACN,gBAAgB,OAAO,QAAQ,GAAG,eAAe,IAAI,YAAY,MAAM;AAAA,QACzE,GACA,WAAW,MAAM,QAAQ,QAAQ,KAAK,GAAG,KAAK,IAAI,gBAAgB,KAAK,GAAI,CAAC;AAAA,MAC9E,CAAC;AAED,YAAM,WAAW,MAAM;AACrB,mBAAW,MAAM,QAAQ,QAAQ;AAC/B,kBAAQ,QAAQ,QAAQ,EAAE,GAAG,QAAQ,KAAK,SAAS;AAErD,mBAAW,MAAM,QAAQ,KAAK,CAAC,GAAG,GAAI;AAAA,MACxC;AACA,cAAQ,GAAG,UAAU,QAAQ,GAC7B,QAAQ,GAAG,WAAW,QAAQ;AAE9B;AAAA,IACF;AAAA,EACF;AAGA,QAAM,SACJ,KAAK,WAAW,gBAAAA,QAAQ,WAAW,gBAAgB,IAAI,MAAM,SAAS,QAClE,YAAa,MAAM,gBAAAA,QAAQ,SAAS,GAAG,MAAM,iBAAiB,GAC9D,EAAE,WAAW,IAAI;AAEvB,gDAAiB,OACjB,yCAAe,SAAS,OACxB,kCAAa,UAAU;AAEvB,QAAM,EAAE,aAAa,IAAI,MAAM,OAAO,qBAAqB,GACrD,EAAE,gBAAgB,IAAI,MAAM,OAAO,yBAAyB,GAC5D,EAAE,SAAS,OAAO,WAAW,kBAAkB,IAAI,MAAM,OAAO,YAAY,GAC5E,EAAE,SAAS,IAAI,MAAM,OAAO,mBAAmB;AAErD,sBAAa,OAAO,GAEhB,KAAK,WACP,MAAM,QAAQ,YAAY,GAGrB,MAAM,UAAU;AAAA,IACrB,QAAQ,UAAU,UAAU;AAAA,IAC5B,KAAK,KAAK;AAAA,IACV,GAAG,WAAW;AAAA,IACd,GAAG,gBAAgB;AAAA,MACjB,MAAM,KAAK,OAAO,CAAC,KAAK,OAAO;AAAA,MAC/B,MAAM,KAAK;AAAA,MACX,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,IAED,MAAM,qBAAqB,SAAS,KAAK;AACvC,YAAM,SAAS,YAAY,WAAW,KAAK,EAAE,kBAAkB,CAAC;AAAA,IAClE;AAAA,IAEA,MAAM,oBAAoB,SAAS,KAAK;AAAA,IAAC;AAAA,EAC3C,CAAC;AACH;",
4
+ "mappings": "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",
5
5
  "names": ["FSExtra"]
6
6
  }
@@ -47,38 +47,99 @@ process.on("uncaughtException", function (err) {
47
47
  async function serve() {
48
48
  var args = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
49
49
  if (args.cluster) {
50
- var cluster = await import("cluster"),
51
- {
52
- cpus
53
- } = await import("os");
54
- if (cluster.default.isPrimary) {
55
- var numWorkers = typeof args.cluster == "number" ? args.cluster : cpus().length;
56
- console.info(`[one] cluster: starting ${numWorkers} workers`);
57
- for (var i = 0; i < numWorkers; i++) cluster.default.fork();
58
- var recentCrashes = 0,
59
- lastCrashTime = 0;
60
- cluster.default.on("exit", function (worker, code, signal) {
61
- if (!(code === 0 || signal === "SIGTERM" || signal === "SIGINT")) {
62
- var now = Date.now();
63
- now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(`[one] worker ${worker.process.pid} died (code ${code}, signal ${signal}), restarting`), setTimeout(function () {
64
- return cluster.default.fork();
65
- }, Math.min(recentCrashes * 500, 5e3));
66
- }
67
- });
68
- var shutdown = function () {
69
- for (var id in cluster.default.workers) {
70
- var _cluster_default_workers_id;
71
- (_cluster_default_workers_id = cluster.default.workers[id]) === null || _cluster_default_workers_id === void 0 || _cluster_default_workers_id.process.kill("SIGTERM");
72
- }
73
- setTimeout(function () {
74
- return process.exit(0);
75
- }, 5e3);
76
- };
77
- process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown);
78
- return;
50
+ var {
51
+ cpus,
52
+ platform
53
+ } = await import("os"),
54
+ numWorkers = typeof args.cluster == "number" ? args.cluster : cpus().length,
55
+ [major, minor] = process.versions.node.split(".").map(Number),
56
+ canReusePort = !["win32", "darwin"].includes(platform()) && (major > 22 || major === 22 && minor >= 12 || major >= 23);
57
+ return canReusePort ? await serveWithReusePort(args, numWorkers) : await serveWithCluster(args, numWorkers);
58
+ }
59
+ return await startWorker(args);
60
+ }
61
+ async function serveWithReusePort(args, numWorkers) {
62
+ var {
63
+ fork
64
+ } = await import("child_process");
65
+ console.info(`[one] cluster: starting ${numWorkers} workers (SO_REUSEPORT)`);
66
+ var workers = [],
67
+ recentCrashes = 0,
68
+ lastCrashTime = 0;
69
+ function spawnWorker() {
70
+ var child = fork(process.argv[1], process.argv.slice(2).filter(function (a) {
71
+ return !a.startsWith("--cluster");
72
+ }), {
73
+ env: {
74
+ ...process.env,
75
+ ONE_CLUSTER_WORKER: "1"
76
+ },
77
+ stdio: "inherit"
78
+ });
79
+ workers.push(child), child.on("exit", function (code, signal) {
80
+ var idx = workers.indexOf(child);
81
+ if (idx >= 0 && workers.splice(idx, 1), !(code === 0 || signal === "SIGTERM" || signal === "SIGINT")) {
82
+ var now = Date.now();
83
+ now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(`[one] worker ${child.pid} died (code ${code}, signal ${signal}), restarting`), setTimeout(spawnWorker, Math.min(recentCrashes * 500, 5e3));
84
+ }
85
+ });
86
+ }
87
+ for (var i = 0; i < numWorkers; i++) spawnWorker();
88
+ var shutdown = function () {
89
+ var _iteratorNormalCompletion = !0,
90
+ _didIteratorError = !1,
91
+ _iteratorError = void 0;
92
+ try {
93
+ for (var _iterator = workers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
94
+ var w = _step.value;
95
+ w.kill("SIGTERM");
96
+ }
97
+ } catch (err) {
98
+ _didIteratorError = !0, _iteratorError = err;
99
+ } finally {
100
+ try {
101
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
102
+ } finally {
103
+ if (_didIteratorError) throw _iteratorError;
104
+ }
79
105
  }
106
+ setTimeout(function () {
107
+ return process.exit(0);
108
+ }, 5e3);
109
+ };
110
+ process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown), await new Promise(function () {});
111
+ }
112
+ async function serveWithCluster(args, numWorkers) {
113
+ var cluster = await import("cluster");
114
+ if (cluster.default.isPrimary) {
115
+ console.info(`[one] cluster: starting ${numWorkers} workers (IPC)`);
116
+ for (var i = 0; i < numWorkers; i++) cluster.default.fork();
117
+ var recentCrashes = 0,
118
+ lastCrashTime = 0;
119
+ cluster.default.on("exit", function (worker, code, signal) {
120
+ if (!(code === 0 || signal === "SIGTERM" || signal === "SIGINT")) {
121
+ var now = Date.now();
122
+ now - lastCrashTime < 5e3 ? recentCrashes++ : recentCrashes = 1, lastCrashTime = now, recentCrashes > numWorkers * 2 && (console.error("[one] too many worker crashes, stopping"), process.exit(1)), console.error(`[one] worker ${worker.process.pid} died (code ${code}, signal ${signal}), restarting`), setTimeout(function () {
123
+ return cluster.default.fork();
124
+ }, Math.min(recentCrashes * 500, 5e3));
125
+ }
126
+ });
127
+ var shutdown = function () {
128
+ for (var id in cluster.default.workers) {
129
+ var _cluster_default_workers_id;
130
+ (_cluster_default_workers_id = cluster.default.workers[id]) === null || _cluster_default_workers_id === void 0 || _cluster_default_workers_id.process.kill("SIGTERM");
131
+ }
132
+ setTimeout(function () {
133
+ return process.exit(0);
134
+ }, 5e3);
135
+ };
136
+ process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown);
137
+ return;
80
138
  }
81
- var outDir = args.outDir || (import_fs_extra.default.existsSync("buildInfo.json") ? "." : null) || "dist",
139
+ return await startWorker(args);
140
+ }
141
+ async function startWorker(args) {
142
+ var outDir = args?.outDir || (import_fs_extra.default.existsSync("buildInfo.json") ? "." : null) || "dist",
82
143
  buildInfo = await import_fs_extra.default.readJSON(`${outDir}/buildInfo.json`),
83
144
  {
84
145
  oneOptions
@@ -98,14 +159,14 @@ async function serve() {
98
159
  {
99
160
  oneServe
100
161
  } = await import("./server/oneServe");
101
- return labelProcess("serve"), args.loadEnv && (await loadEnv("production")), await vxrnServe({
162
+ return labelProcess("serve"), args?.loadEnv && (await loadEnv("production")), await vxrnServe({
102
163
  outDir: buildInfo.outDir || outDir,
103
- app: args.app,
164
+ app: args?.app,
104
165
  ...oneOptions.server,
105
166
  ...removeUndefined({
106
- port: args.port ? +args.port : void 0,
107
- host: args.host,
108
- compress: args.compress
167
+ port: args?.port ? +args.port : void 0,
168
+ host: args?.host,
169
+ compress: args?.compress
109
170
  }),
110
171
  async beforeRegisterRoutes(options, app) {
111
172
  await oneServe(oneOptions, buildInfo, app, {
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","serve_exports","__export","serve","module","exports","import_polyfills_server","require","import_fs_extra","__toESM","import_setServerGlobals","import_setupBuildOptions","import_ensureExists","process","on","err","console","error","stack","args","arguments","length","cluster","cpus","default","isPrimary","numWorkers","info","i","fork","recentCrashes","lastCrashTime","worker","code","signal","now","Date","exit","pid","setTimeout","Math","min","shutdown","id","workers","_cluster_default_workers_id","kill","outDir","existsSync","buildInfo","readJSON","oneOptions","setServerGlobals","setupBuildInfo","ensureExists","labelProcess","removeUndefined","loadEnv","vxrnServe","serveStaticAssets","oneServe","app","server","port","host","compress"],"sources":["../../src/serve.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","serve_exports","__export","serve","module","exports","import_polyfills_server","require","import_fs_extra","__toESM","import_setServerGlobals","import_setupBuildOptions","import_ensureExists","process","on","err","console","error","stack","args","arguments","length","cluster","cpus","platform","numWorkers","major","minor","versions","node","split","map","Number","canReusePort","includes","serveWithReusePort","serveWithCluster","startWorker","fork","info","workers","recentCrashes","lastCrashTime","spawnWorker","child","argv","slice","filter","a","startsWith","env","ONE_CLUSTER_WORKER","stdio","push","code","signal","idx","indexOf","splice","now","Date","exit","pid","setTimeout","Math","min","i","shutdown","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","w","kill","return","Promise","default","isPrimary","worker","id","_cluster_default_workers_id"],"sources":["../../src/serve.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}