one 1.21.1 → 1.21.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 (158) hide show
  1. package/dist/cjs/cli/build.cjs +9 -8
  2. package/dist/cjs/cli/build.native.js +17 -16
  3. package/dist/cjs/cli/build.native.js.map +1 -1
  4. package/dist/cjs/cli/buildPage.cjs +1 -1
  5. package/dist/cjs/cli/buildPage.native.js +1 -1
  6. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  7. package/dist/cjs/daemon/ipc.cjs +21 -3
  8. package/dist/cjs/daemon/ipc.native.js +21 -3
  9. package/dist/cjs/daemon/ipc.native.js.map +1 -1
  10. package/dist/cjs/router/getRoutes.cjs +1 -2
  11. package/dist/cjs/router/getRoutes.native.js +1 -2
  12. package/dist/cjs/router/getRoutes.native.js.map +1 -1
  13. package/dist/cjs/router/hmrImport.native.js +13 -2
  14. package/dist/cjs/router/hmrImport.native.js.map +1 -1
  15. package/dist/cjs/router/hmrImport.native.test.cjs +52 -0
  16. package/dist/cjs/router/hmrImport.native.test.native.js +61 -0
  17. package/dist/cjs/router/hmrImport.native.test.native.js.map +1 -0
  18. package/dist/cjs/router/matchers.cjs +7 -0
  19. package/dist/cjs/router/matchers.native.js +8 -0
  20. package/dist/cjs/router/matchers.native.js.map +1 -1
  21. package/dist/cjs/router/routeHmr.cjs +32 -0
  22. package/dist/cjs/router/routeHmr.native.js +57 -0
  23. package/dist/cjs/router/routeHmr.native.js.map +1 -0
  24. package/dist/cjs/router/routeHmr.native.test.cjs +83 -0
  25. package/dist/cjs/router/routeHmr.native.test.native.js +95 -0
  26. package/dist/cjs/router/routeHmr.native.test.native.js.map +1 -0
  27. package/dist/cjs/router/useScreens.cjs +2 -0
  28. package/dist/cjs/router/useScreens.native.js +2 -0
  29. package/dist/cjs/router/useScreens.native.js.map +1 -1
  30. package/dist/cjs/router/useViteRoutes.cjs +7 -17
  31. package/dist/cjs/router/useViteRoutes.native.js +8 -18
  32. package/dist/cjs/router/useViteRoutes.native.js.map +1 -1
  33. package/dist/cjs/router/useViteRoutes.test.cjs +42 -0
  34. package/dist/cjs/router/useViteRoutes.test.native.js +55 -0
  35. package/dist/cjs/router/useViteRoutes.test.native.js.map +1 -0
  36. package/dist/cjs/utils/cleanUrl.cjs +12 -2
  37. package/dist/cjs/utils/cleanUrl.native.js +15 -3
  38. package/dist/cjs/utils/cleanUrl.native.js.map +1 -1
  39. package/dist/cjs/utils/cleanUrl.test.cjs +37 -0
  40. package/dist/cjs/utils/cleanUrl.test.native.js +37 -0
  41. package/dist/cjs/utils/cleanUrl.test.native.js.map +1 -1
  42. package/dist/cjs/vite/plugins/virtualEntryPlugin.cjs +37 -2
  43. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js +70 -8
  44. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  45. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.cjs +58 -0
  46. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js +62 -0
  47. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js.map +1 -1
  48. package/dist/esm/cli/build.mjs +9 -8
  49. package/dist/esm/cli/build.mjs.map +1 -1
  50. package/dist/esm/cli/build.native.js +17 -16
  51. package/dist/esm/cli/build.native.js.map +1 -1
  52. package/dist/esm/cli/buildPage.mjs +2 -2
  53. package/dist/esm/cli/buildPage.mjs.map +1 -1
  54. package/dist/esm/cli/buildPage.native.js +2 -2
  55. package/dist/esm/cli/buildPage.native.js.map +1 -1
  56. package/dist/esm/daemon/ipc.mjs +21 -3
  57. package/dist/esm/daemon/ipc.mjs.map +1 -1
  58. package/dist/esm/daemon/ipc.native.js +21 -3
  59. package/dist/esm/daemon/ipc.native.js.map +1 -1
  60. package/dist/esm/getURL.native.test.mjs +1 -1
  61. package/dist/esm/router/getRoutes.mjs +2 -3
  62. package/dist/esm/router/getRoutes.mjs.map +1 -1
  63. package/dist/esm/router/getRoutes.native.js +2 -3
  64. package/dist/esm/router/getRoutes.native.js.map +1 -1
  65. package/dist/esm/router/hmrImport.native.js +13 -2
  66. package/dist/esm/router/hmrImport.native.js.map +1 -1
  67. package/dist/esm/router/hmrImport.native.test.js +51 -0
  68. package/dist/esm/router/hmrImport.native.test.js.map +6 -0
  69. package/dist/esm/router/hmrImport.native.test.mjs +53 -0
  70. package/dist/esm/router/hmrImport.native.test.mjs.map +1 -0
  71. package/dist/esm/router/hmrImport.native.test.native.js +59 -0
  72. package/dist/esm/router/hmrImport.native.test.native.js.map +1 -0
  73. package/dist/esm/router/matchers.mjs +7 -1
  74. package/dist/esm/router/matchers.mjs.map +1 -1
  75. package/dist/esm/router/matchers.native.js +8 -1
  76. package/dist/esm/router/matchers.native.js.map +1 -1
  77. package/dist/esm/router/routeHmr.mjs +6 -0
  78. package/dist/esm/router/routeHmr.mjs.map +1 -0
  79. package/dist/esm/router/routeHmr.native.js +28 -0
  80. package/dist/esm/router/routeHmr.native.js.map +1 -0
  81. package/dist/esm/router/routeHmr.native.test.js +58 -0
  82. package/dist/esm/router/routeHmr.native.test.js.map +6 -0
  83. package/dist/esm/router/routeHmr.native.test.mjs +60 -0
  84. package/dist/esm/router/routeHmr.native.test.mjs.map +1 -0
  85. package/dist/esm/router/routeHmr.native.test.native.js +69 -0
  86. package/dist/esm/router/routeHmr.native.test.native.js.map +1 -0
  87. package/dist/esm/router/useScreens.mjs +1 -0
  88. package/dist/esm/router/useScreens.mjs.map +1 -1
  89. package/dist/esm/router/useScreens.native.js +2 -0
  90. package/dist/esm/router/useScreens.native.js.map +1 -1
  91. package/dist/esm/router/useViteRoutes.mjs +7 -17
  92. package/dist/esm/router/useViteRoutes.mjs.map +1 -1
  93. package/dist/esm/router/useViteRoutes.native.js +8 -18
  94. package/dist/esm/router/useViteRoutes.native.js.map +1 -1
  95. package/dist/esm/router/useViteRoutes.test.mjs +43 -0
  96. package/dist/esm/router/useViteRoutes.test.mjs.map +1 -0
  97. package/dist/esm/router/useViteRoutes.test.native.js +53 -0
  98. package/dist/esm/router/useViteRoutes.test.native.js.map +1 -0
  99. package/dist/esm/utils/cleanUrl.mjs +11 -3
  100. package/dist/esm/utils/cleanUrl.mjs.map +1 -1
  101. package/dist/esm/utils/cleanUrl.native.js +14 -4
  102. package/dist/esm/utils/cleanUrl.native.js.map +1 -1
  103. package/dist/esm/utils/cleanUrl.test.mjs +38 -1
  104. package/dist/esm/utils/cleanUrl.test.mjs.map +1 -1
  105. package/dist/esm/utils/cleanUrl.test.native.js +38 -1
  106. package/dist/esm/utils/cleanUrl.test.native.js.map +1 -1
  107. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs +26 -2
  108. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs.map +1 -1
  109. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js +59 -8
  110. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  111. package/dist/esm/vite/plugins/virtualEntryPlugin.test.mjs +58 -0
  112. package/dist/esm/vite/plugins/virtualEntryPlugin.test.mjs.map +1 -1
  113. package/dist/esm/vite/plugins/virtualEntryPlugin.test.native.js +62 -0
  114. package/dist/esm/vite/plugins/virtualEntryPlugin.test.native.js.map +1 -1
  115. package/package.json +9 -9
  116. package/src/cli/build.ts +18 -11
  117. package/src/cli/buildPage.ts +12 -2
  118. package/src/daemon/ipc.ts +46 -4
  119. package/src/router/getRoutes.ts +2 -3
  120. package/src/router/hmrImport.native.test.ts +55 -0
  121. package/src/router/hmrImport.native.ts +25 -5
  122. package/src/router/matchers.ts +10 -0
  123. package/src/router/routeHmr.native.test.ts +71 -0
  124. package/src/router/routeHmr.native.ts +37 -0
  125. package/src/router/routeHmr.ts +8 -0
  126. package/src/router/useScreens.tsx +12 -0
  127. package/src/router/useViteRoutes.test.ts +49 -0
  128. package/src/router/useViteRoutes.tsx +12 -21
  129. package/src/utils/cleanUrl.test.ts +63 -1
  130. package/src/utils/cleanUrl.ts +25 -3
  131. package/src/vite/plugins/virtualEntryPlugin.test.ts +70 -0
  132. package/src/vite/plugins/virtualEntryPlugin.ts +48 -2
  133. package/src/vite/types.ts +9 -0
  134. package/types/cli/build.d.ts.map +1 -1
  135. package/types/cli/buildPage.d.ts.map +1 -1
  136. package/types/daemon/ipc.d.ts.map +1 -1
  137. package/types/router/getRoutes.d.ts.map +1 -1
  138. package/types/router/hmrImport.native.d.ts +8 -3
  139. package/types/router/hmrImport.native.d.ts.map +1 -1
  140. package/types/router/hmrImport.native.test.d.ts +2 -0
  141. package/types/router/hmrImport.native.test.d.ts.map +1 -0
  142. package/types/router/matchers.d.ts +2 -0
  143. package/types/router/matchers.d.ts.map +1 -1
  144. package/types/router/routeHmr.d.ts +3 -0
  145. package/types/router/routeHmr.d.ts.map +1 -0
  146. package/types/router/routeHmr.native.d.ts +6 -0
  147. package/types/router/routeHmr.native.d.ts.map +1 -0
  148. package/types/router/routeHmr.native.test.d.ts +2 -0
  149. package/types/router/routeHmr.native.test.d.ts.map +1 -0
  150. package/types/router/useScreens.d.ts.map +1 -1
  151. package/types/router/useViteRoutes.d.ts.map +1 -1
  152. package/types/router/useViteRoutes.test.d.ts +2 -0
  153. package/types/router/useViteRoutes.test.d.ts.map +1 -0
  154. package/types/utils/cleanUrl.d.ts +2 -0
  155. package/types/utils/cleanUrl.d.ts.map +1 -1
  156. package/types/vite/plugins/virtualEntryPlugin.d.ts.map +1 -1
  157. package/types/vite/types.d.ts +8 -0
  158. package/types/vite/types.d.ts.map +1 -1
@@ -1,8 +1,10 @@
1
1
  import { resolve } from "path";
2
2
  import { pathToFileURL } from "url";
3
3
  import { configuration } from "@vxrn/compiler";
4
+ import Glob from "fast-glob";
4
5
  import { isNativeEnvironment } from "vxrn";
5
6
  import { API_ROUTE_GLOB_PATTERN, ROUTE_GLOB_PATTERN, ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS, ROUTE_WEB_EXCLUSION_GLOB_PATTERNS } from "../../router/glob-patterns.native.js";
7
+ import { matchDirectoryRenderMode, matchFileRenderMode } from "../../router/matchers.native.js";
6
8
  import { resolvedVirtualEntryId, resolvedVirtualEntryIdNative, virtualEntryId, virtualEntryIdNative } from "./virtualEntryConstants.native.js";
7
9
  function normalizeSetupFile(setupFile) {
8
10
  if (!setupFile) return {};
@@ -89,14 +91,62 @@ function createVirtualEntry(options) {
89
91
  },
90
92
  load(id) {
91
93
  if (id === resolvedVirtualEntryId) {
92
- var _options_router2;
94
+ var _options_router2, _options_router1;
93
95
  var isNative = isNativeEnvironment(this.environment);
94
96
  var isSSR = this.environment.name === "ssr";
97
+ var serverSpaRouteFiles = isSSR ? Glob.sync("**/*.{ts,tsx}", {
98
+ cwd: resolve(viteRoot, options.root),
99
+ ignore: [...ROUTE_WEB_EXCLUSION_GLOB_PATTERNS, ...(((_options_router2 = options.router) === null || _options_router2 === void 0 ? void 0 : _options_router2.ignoredRouteFiles) || [])]
100
+ }).map(function (file) {
101
+ return file.replaceAll("\\", "/");
102
+ }).filter(function (file) {
103
+ var parts = file.split("/");
104
+ var filename = parts.at(-1) || "";
105
+ if (filename.startsWith("_layout") || filename.startsWith("_middleware")) {
106
+ return false;
107
+ }
108
+ var fileMode = matchFileRenderMode(filename);
109
+ if (fileMode) return fileMode === "spa";
110
+ var parentMode;
111
+ var _iteratorNormalCompletion = true,
112
+ _didIteratorError = false,
113
+ _iteratorError = void 0;
114
+ try {
115
+ for (var _iterator = parts.slice(0, -1)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
116
+ var directory = _step.value;
117
+ var _ref;
118
+ var _matchDirectoryRenderMode;
119
+ parentMode = (_ref = (_matchDirectoryRenderMode = matchDirectoryRenderMode(directory)) === null || _matchDirectoryRenderMode === void 0 ? void 0 : _matchDirectoryRenderMode.renderMode) !== null && _ref !== void 0 ? _ref : parentMode;
120
+ }
121
+ } catch (err) {
122
+ _didIteratorError = true;
123
+ _iteratorError = err;
124
+ } finally {
125
+ try {
126
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
127
+ _iterator.return();
128
+ }
129
+ } finally {
130
+ if (_didIteratorError) {
131
+ throw _iteratorError;
132
+ }
133
+ }
134
+ }
135
+ return parentMode === "spa";
136
+ }) : [];
137
+ var serverSpaRouteStubs = serverSpaRouteFiles.map(function (file) {
138
+ return `${JSON.stringify(`/${options.root}/${file}`)}: () => Promise.resolve({})`;
139
+ }).join(",\n ");
140
+ var webRouteGlobs = [...routeGlobs, ...ROUTE_WEB_EXCLUSION_GLOB_PATTERNS.map(function (pattern) {
141
+ return `!${pattern}`;
142
+ }), ...serverSpaRouteFiles.map(function (file) {
143
+ return `!/${options.root}/${file}`;
144
+ })];
95
145
  var useStaticImport = isNative || isSSR && isDevMode;
96
146
  var setupResult = getSetupFileImport(this.environment.name, setupFiles, useStaticImport, viteRoot);
97
147
  var nativewindImport = configuration.enableNativewind ? `import 'react-native-css-interop/dist/runtime/components'` : "";
98
148
  var setupPromiseArg = setupResult.promiseVarName ? `getSetupPromise: ${setupResult.promiseVarName},` : "";
99
- var linkingArg = ((_options_router2 = options.router) === null || _options_router2 === void 0 ? void 0 : _options_router2.linking) ? `linking: ${JSON.stringify(options.router.linking)},` : "";
149
+ var linkingArg = ((_options_router1 = options.router) === null || _options_router1 === void 0 ? void 0 : _options_router1.linking) ? `linking: ${JSON.stringify(options.router.linking)},` : "";
100
150
  return `
101
151
  ${setupResult.promiseDeclaration}
102
152
  ${nativewindImport}
@@ -115,12 +165,13 @@ if (typeof window !== 'undefined') {
115
165
  window.__oneRegisterPreloadedRoute = registerPreloadedRoute
116
166
  }
117
167
 
118
- // globbing ${JSON.stringify(routeGlobs)}
168
+ // globbing ${JSON.stringify(webRouteGlobs)}
119
169
  export default createApp({
120
170
  ${setupPromiseArg}
121
- routes: import.meta.glob(${JSON.stringify([...routeGlobs, ...ROUTE_WEB_EXCLUSION_GLOB_PATTERNS.map(function (p) {
122
- return `!${p}`;
123
- })])}, { exhaustive: true }),
171
+ routes: {
172
+ ...import.meta.glob(${JSON.stringify(webRouteGlobs)}, { exhaustive: true }),
173
+ ${serverSpaRouteStubs}
174
+ },
124
175
  routerRoot: ${JSON.stringify(options.root)},
125
176
  flags: ${JSON.stringify(options.flags)},
126
177
  ${linkingArg}
@@ -128,10 +179,10 @@ export default createApp({
128
179
  `;
129
180
  }
130
181
  if (id === resolvedVirtualEntryIdNative) {
131
- var _options_router1;
182
+ var _options_router22;
132
183
  var isNative1 = isNativeEnvironment(this.environment);
133
184
  var setupResult1 = getSetupFileImport(this.environment.name, setupFiles, isNative1, viteRoot);
134
- var linkingArg1 = ((_options_router1 = options.router) === null || _options_router1 === void 0 ? void 0 : _options_router1.linking) ? `linking: ${JSON.stringify(options.router.linking)},` : "";
185
+ var linkingArg1 = ((_options_router22 = options.router) === null || _options_router22 === void 0 ? void 0 : _options_router22.linking) ? `linking: ${JSON.stringify(options.router.linking)},` : "";
135
186
  return `
136
187
  import { createApp } from 'one'
137
188
  ${setupResult1.importStatement}
@@ -1 +1 @@
1
- {"version":3,"names":["resolve","pathToFileURL","configuration","isNativeEnvironment","API_ROUTE_GLOB_PATTERN","ROUTE_GLOB_PATTERN","ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS","ROUTE_WEB_EXCLUSION_GLOB_PATTERNS","resolvedVirtualEntryId","resolvedVirtualEntryIdNative","virtualEntryId","virtualEntryIdNative","normalizeSetupFile","setupFile","client","server","ios","android","native","sf","getSetupFileImport","environmentName","setupFiles","useStaticImport","root","envMap","ssr","key","importStatement","promiseDeclaration","promiseVarName","resolvedSetupFile","href","JSON","stringify","createVirtualEntry","options","_options_router_ignoredRouteFiles","_options_router","routeGlobs","router","ignoredRouteFiles","map","pattern","apiRouteGlobs","viteRoot","isDevMode","name","enforce","configResolved","config","command","resolveId","id","load","_options_router2","isNative","environment","isSSR","setupResult","nativewindImport","enableNativewind","setupPromiseArg","linkingArg","linking","p","flags","_options_router1","isNative1","setupResult1","linkingArg1"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["resolve","pathToFileURL","configuration","Glob","isNativeEnvironment","API_ROUTE_GLOB_PATTERN","ROUTE_GLOB_PATTERN","ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS","ROUTE_WEB_EXCLUSION_GLOB_PATTERNS","matchDirectoryRenderMode","matchFileRenderMode","resolvedVirtualEntryId","resolvedVirtualEntryIdNative","virtualEntryId","virtualEntryIdNative","normalizeSetupFile","setupFile","client","server","ios","android","native","sf","getSetupFileImport","environmentName","setupFiles","useStaticImport","root","envMap","ssr","key","importStatement","promiseDeclaration","promiseVarName","resolvedSetupFile","href","JSON","stringify","createVirtualEntry","options","_options_router_ignoredRouteFiles","_options_router","routeGlobs","router","ignoredRouteFiles","map","pattern","apiRouteGlobs","viteRoot","isDevMode","name","enforce","configResolved","config","command","resolveId","id","load","_options_router2","_options_router1","isNative","environment","isSSR","serverSpaRouteFiles","sync","cwd","ignore","file","replaceAll","filter","parts","split","filename","at","startsWith","fileMode","parentMode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","slice","Symbol","iterator","_step","next","done","directory","value","_ref","_matchDirectoryRenderMode","renderMode","err","return","serverSpaRouteStubs","join","webRouteGlobs","setupResult","nativewindImport","enableNativewind","setupPromiseArg","linkingArg","linking","flags","_options_router22","isNative1","setupResult1","linkingArg1"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,9 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join, resolve } from "node:path";
1
5
  import { describe, expect, it, vi } from "vitest";
6
+ import { build } from "vite";
2
7
  import { createVirtualEntry } from "./virtualEntryPlugin.mjs";
3
8
  vi.mock("vxrn", () => ({
4
9
  isNativeEnvironment: env => {
@@ -23,6 +28,59 @@ function loadEntry(plugin, envName, command = "build") {
23
28
  return plugin.load.call(ctx, "\0virtual:one-entry");
24
29
  }
25
30
  describe("virtualEntryPlugin", () => {
31
+ it("keeps spa route matching without bundling the client module on the server", async () => {
32
+ const root = mkdtempSync(join(tmpdir(), "one-spa-server-"));
33
+ const appDir = join(root, "app");
34
+ mkdirSync(appDir);
35
+ const spaRoute = join(appDir, "client-only+spa.tsx");
36
+ writeFileSync(spaRoute, `export const browserPayload = 'must-not-enter-server-graph'
37
+ export default function ClientOnlyPage() { return null }
38
+ `);
39
+ try {
40
+ const result = await build({
41
+ root,
42
+ configFile: false,
43
+ logLevel: "silent",
44
+ plugins: [{
45
+ name: "test-one-entry",
46
+ enforce: "pre",
47
+ resolveId(id) {
48
+ if (id === "one") return "\0test-one-entry";
49
+ },
50
+ load(id) {
51
+ if (id === "\0test-one-entry") {
52
+ return `export const createApp = (options) => options
53
+ export const registerPreloadedRoute = () => {}`;
54
+ }
55
+ }
56
+ }, createVirtualEntry({
57
+ root: "app",
58
+ flags: {}
59
+ })],
60
+ build: {
61
+ ssr: true,
62
+ write: false,
63
+ rolldownOptions: {
64
+ input: "virtual:one-entry"
65
+ }
66
+ }
67
+ });
68
+ if (Array.isArray(result)) throw new Error("expected one server build output");
69
+ if (!("output" in result)) throw new Error("expected completed server build");
70
+ const moduleIds = result.output.flatMap(output => output.type === "chunk" ? output.moduleIds : []);
71
+ expect(moduleIds).not.toContain(resolve(spaRoute));
72
+ const entry = result.output.find(output => output.type === "chunk" && output.isEntry);
73
+ if (!entry || entry.type !== "chunk") throw new Error("missing server entry chunk");
74
+ const built = await import(`data:text/javascript;base64,${Buffer.from(entry.code).toString("base64")}`);
75
+ expect(Object.keys(built.default.routes)).toContain("/app/client-only+spa.tsx");
76
+ await expect(built.default.routes["/app/client-only+spa.tsx"]()).resolves.toEqual({});
77
+ } finally {
78
+ rmSync(root, {
79
+ recursive: true,
80
+ force: true
81
+ });
82
+ }
83
+ });
26
84
  describe("setupFile", () => {
27
85
  const base = {
28
86
  root: "app",
@@ -1 +1 @@
1
- {"version":3,"names":["describe","expect","it","vi","createVirtualEntry","mock","isNativeEnvironment","env","name","configuration","enableNativewind","loadEntry","plugin","envName","command","configResolved","root","ctx","environment","load","call","base","flags","setupFile","client","server","code","not","toContain","native","ssrCode","clientCode","iosCode","router","linking","scheme","prefixes"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Buffer","mkdirSync","mkdtempSync","rmSync","writeFileSync","tmpdir","join","resolve","describe","expect","it","vi","build","createVirtualEntry","mock","isNativeEnvironment","env","name","configuration","enableNativewind","loadEntry","plugin","envName","command","configResolved","root","ctx","environment","load","call","appDir","spaRoute","result","configFile","logLevel","plugins","enforce","resolveId","id","flags","ssr","write","rolldownOptions","input","Array","isArray","Error","moduleIds","output","flatMap","type","not","toContain","entry","find","isEntry","built","from","code","toString","Object","keys","default","routes","resolves","toEqual","recursive","force","base","setupFile","client","server","native","ssrCode","clientCode","iosCode","router","linking","scheme","prefixes"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,9 @@
1
+ import { Buffer } from "buffer";
2
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs";
3
+ import { tmpdir } from "os";
4
+ import { join, resolve } from "path";
1
5
  import { describe, expect, it, vi } from "vitest";
6
+ import { build } from "vite";
2
7
  import { createVirtualEntry } from "./virtualEntryPlugin.native.js";
3
8
  vi.mock("vxrn", function () {
4
9
  return {
@@ -29,6 +34,63 @@ function loadEntry(plugin, envName) {
29
34
  return plugin.load.call(ctx, "\0virtual:one-entry");
30
35
  }
31
36
  describe("virtualEntryPlugin", function () {
37
+ it("keeps spa route matching without bundling the client module on the server", async function () {
38
+ var root = mkdtempSync(join(tmpdir(), "one-spa-server-"));
39
+ var appDir = join(root, "app");
40
+ mkdirSync(appDir);
41
+ var spaRoute = join(appDir, "client-only+spa.tsx");
42
+ writeFileSync(spaRoute, `export const browserPayload = 'must-not-enter-server-graph'
43
+ export default function ClientOnlyPage() { return null }
44
+ `);
45
+ try {
46
+ var result = await build({
47
+ root,
48
+ configFile: false,
49
+ logLevel: "silent",
50
+ plugins: [{
51
+ name: "test-one-entry",
52
+ enforce: "pre",
53
+ resolveId(id) {
54
+ if (id === "one") return "\0test-one-entry";
55
+ },
56
+ load(id) {
57
+ if (id === "\0test-one-entry") {
58
+ return `export const createApp = (options) => options
59
+ export const registerPreloadedRoute = () => {}`;
60
+ }
61
+ }
62
+ }, createVirtualEntry({
63
+ root: "app",
64
+ flags: {}
65
+ })],
66
+ build: {
67
+ ssr: true,
68
+ write: false,
69
+ rolldownOptions: {
70
+ input: "virtual:one-entry"
71
+ }
72
+ }
73
+ });
74
+ if (Array.isArray(result)) throw new Error("expected one server build output");
75
+ if (!("output" in result)) throw new Error("expected completed server build");
76
+ var moduleIds = result.output.flatMap(function (output) {
77
+ return output.type === "chunk" ? output.moduleIds : [];
78
+ });
79
+ expect(moduleIds).not.toContain(resolve(spaRoute));
80
+ var entry = result.output.find(function (output) {
81
+ return output.type === "chunk" && output.isEntry;
82
+ });
83
+ if (!entry || entry.type !== "chunk") throw new Error("missing server entry chunk");
84
+ var built = await import(`data:text/javascript;base64,${Buffer.from(entry.code).toString("base64")}`);
85
+ expect(Object.keys(built.default.routes)).toContain("/app/client-only+spa.tsx");
86
+ await expect(built.default.routes["/app/client-only+spa.tsx"]()).resolves.toEqual({});
87
+ } finally {
88
+ rmSync(root, {
89
+ recursive: true,
90
+ force: true
91
+ });
92
+ }
93
+ });
32
94
  describe("setupFile", function () {
33
95
  var base = {
34
96
  root: "app",
@@ -1 +1 @@
1
- {"version":3,"names":["describe","expect","it","vi","createVirtualEntry","mock","isNativeEnvironment","env","name","configuration","enableNativewind","loadEntry","plugin","envName","command","arguments","length","_plugin_configResolved","configResolved","call","root","ctx","environment","load","base","flags","setupFile","client","server","code","not","toContain","native","ssrCode","clientCode","iosCode","router"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Buffer","mkdirSync","mkdtempSync","rmSync","writeFileSync","tmpdir","join","resolve","describe","expect","it","vi","build","createVirtualEntry","mock","isNativeEnvironment","env","name","configuration","enableNativewind","loadEntry","plugin","envName","command","arguments","length","_plugin_configResolved","configResolved","call","root","ctx","environment","load","appDir","spaRoute","result","configFile","logLevel","plugins","enforce","resolveId","id","flags","ssr","write","rolldownOptions","input","Array","isArray","Error","moduleIds","output","flatMap","type","not","toContain","entry","find","isEntry","built","from","code","toString","Object","keys","default","routes","resolves","toEqual","recursive","force","base","setupFile","client","server","native","ssrCode","clientCode","iosCode"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one",
3
- "version": "1.21.1",
3
+ "version": "1.21.3",
4
4
  "license": "BSD-3-Clause",
5
5
  "sideEffects": [
6
6
  "setup.mjs",
@@ -181,18 +181,18 @@
181
181
  "@cloudflare/vite-plugin": "^1.33.1",
182
182
  "@swc/core": "^1.14.0",
183
183
  "@ungap/structured-clone": "^1.2.0",
184
- "@vxrn/color-scheme": "1.21.1",
185
- "@vxrn/compiler": "1.21.1",
186
- "@vxrn/resolve": "1.21.1",
187
- "@vxrn/tslib-lite": "1.21.1",
188
- "@vxrn/use-isomorphic-layout-effect": "1.21.1",
189
- "@vxrn/vite-plugin-metro": "1.21.1",
184
+ "@vxrn/color-scheme": "1.21.3",
185
+ "@vxrn/compiler": "1.21.3",
186
+ "@vxrn/resolve": "1.21.3",
187
+ "@vxrn/tslib-lite": "1.21.3",
188
+ "@vxrn/use-isomorphic-layout-effect": "1.21.3",
189
+ "@vxrn/vite-plugin-metro": "1.21.3",
190
190
  "babel-dead-code-elimination": "1.0.10",
191
191
  "babel-plugin-module-resolver": "^5.0.2",
192
192
  "babel-preset-expo": "~55.0.0",
193
193
  "citty": "^0.1.6",
194
194
  "core-js": "^3.38.1",
195
- "create-vxrn": "1.21.1",
195
+ "create-vxrn": "1.21.3",
196
196
  "escape-string-regexp": "^5.0.0",
197
197
  "expo-linking": "~55.0.7",
198
198
  "expo-modules-core": "~55.0.16",
@@ -212,7 +212,7 @@
212
212
  "tsconfig-paths": "^4",
213
213
  "use-latest-callback": "^0.2.3",
214
214
  "vite": "^8.0.13",
215
- "vxrn": "1.21.1",
215
+ "vxrn": "1.21.3",
216
216
  "ws": "^8.21.0",
217
217
  "xxhashjs": "^0.2.2"
218
218
  },
package/src/cli/build.ts CHANGED
@@ -287,16 +287,9 @@ async function getCloudflareProjectName(root: string): Promise<string> {
287
287
  return 'one-app'
288
288
  }
289
289
 
290
- // concurrency limit for parallel page builds
291
- // can be overridden with ONE_BUILD_CONCURRENCY env var
292
- // default based on CPU count for I/O parallelism benefits
293
290
  // ensure worker threads inherit the same CACHE_KEY as the main process
294
291
  process.env.ONE_CACHE_KEY = constants.CACHE_KEY
295
292
 
296
- const BUILD_CONCURRENCY = process.env.ONE_BUILD_CONCURRENCY
297
- ? Math.max(1, parseInt(process.env.ONE_BUILD_CONCURRENCY, 10))
298
- : Math.max(1, Math.min(cpus().length, 8))
299
-
300
293
  // worker threads enabled by default, can be disabled via config or env var
301
294
  function shouldUseWorkers(oneOptions?: { build?: { workers?: boolean } }) {
302
295
  // env var takes precedence (ONE_BUILD_WORKERS=0 to disable, =1 to force enable)
@@ -401,6 +394,20 @@ export async function build(args: {
401
394
  const { oneOptions, config: viteLoadedConfig } = await loadUserOneOptions('build')
402
395
  const routerRoot = getRouterRootFromOneOptions(oneOptions)
403
396
 
397
+ const configuredBuildConcurrency =
398
+ process.env.ONE_BUILD_CONCURRENCY ?? oneOptions.build?.concurrency
399
+ const buildConcurrency =
400
+ configuredBuildConcurrency === undefined
401
+ ? Math.max(1, Math.min(cpus().length, 8))
402
+ : Number(configuredBuildConcurrency)
403
+ if (!Number.isInteger(buildConcurrency) || buildConcurrency < 1) {
404
+ throw new Error(
405
+ `build.concurrency must be a positive integer, received ${JSON.stringify(
406
+ configuredBuildConcurrency
407
+ )}`
408
+ )
409
+ }
410
+
404
411
  // Set defaultRenderMode env var so getManifest knows the correct route types
405
412
  if (oneOptions.web?.defaultRenderMode) {
406
413
  process.env.ONE_DEFAULT_RENDER_MODE = oneOptions.web.defaultRenderMode
@@ -679,11 +686,11 @@ export async function build(args: {
679
686
  const criticalCSSOutputPaths = getCriticalCSSOutputPaths(vxrnOutput.clientManifest)
680
687
 
681
688
  // concurrency limiter for parallel page builds
682
- const limit = pLimit(BUILD_CONCURRENCY)
689
+ const limit = pLimit(buildConcurrency)
683
690
 
684
691
  // initialize worker pool if enabled (default: true)
685
692
  const useWorkers = shouldUseWorkers(oneOptions)
686
- const workerPool = useWorkers ? getWorkerPool(BUILD_CONCURRENCY) : null
693
+ const workerPool = useWorkers ? getWorkerPool(buildConcurrency) : null
687
694
  if (workerPool) {
688
695
  // strip non-cloneable values so workers skip re-loading vite config
689
696
  const serializableOptions = JSON.parse(
@@ -697,7 +704,7 @@ export async function build(args: {
697
704
  const staticStartTime = performance.now()
698
705
  const modeLabel = useWorkers
699
706
  ? `workers: ${workerPool?.size}`
700
- : `concurrency: ${BUILD_CONCURRENCY}`
707
+ : `concurrency: ${buildConcurrency}`
701
708
  console.info(`\n 🔨 build static routes (${modeLabel})\n`)
702
709
 
703
710
  const staticDir = join(`${outDir}/static`)
@@ -1251,7 +1258,7 @@ export async function build(args: {
1251
1258
 
1252
1259
  // once done building static we can move it to client dir:
1253
1260
  await moveAllFiles(staticDir, clientDir)
1254
- await FSExtra.rm(staticDir, { force: true, recursive: true })
1261
+ await FSExtra.remove(staticDir)
1255
1262
 
1256
1263
  // write out the static paths (pathname => html) for the server
1257
1264
  const routeMap: Record<string, string> = {}
@@ -4,7 +4,12 @@ import { normalizePath } from 'vite'
4
4
  import * as constants from '../constants'
5
5
  import { LOADER_JS_POSTFIX_UNCACHED } from '../constants'
6
6
  import type { LoaderProps } from '../types'
7
- import { getLoaderPath, getPreloadCSSPath, getPreloadPath } from '../utils/cleanUrl'
7
+ import {
8
+ encodeReservedFilenameChars,
9
+ getLoaderPath,
10
+ getPreloadCSSPath,
11
+ getPreloadPath,
12
+ } from '../utils/cleanUrl'
8
13
  import { isResponse } from '../utils/isResponse'
9
14
  import { toAbsolute, toAbsoluteUrl } from '../utils/toAbsolute'
10
15
  import { replaceLoader } from '../vite/replaceLoader'
@@ -64,7 +69,12 @@ export async function buildPage(
64
69
  const render = await getRender(serverEntry)
65
70
  recordTiming('getRender', performance.now() - t0)
66
71
 
67
- const htmlPath = `${path.endsWith('/') ? `${removeTrailingSlash(path)}/index` : path}.html`
72
+ // encode NTFS-reserved characters (`:` from `/:param` patterns, `*` from
73
+ // catch-alls, hostile param values) so the artifact is writable on Windows;
74
+ // routeMap stores this same string, so serve-side lookups stay consistent
75
+ const htmlPath = encodeReservedFilenameChars(
76
+ `${path.endsWith('/') ? `${removeTrailingSlash(path)}/index` : path}.html`
77
+ )
68
78
  // forward-slash for cross-platform manifest hygiene (matches serverJsPath)
69
79
  const clientJsPath = clientManifestEntry
70
80
  ? normalizePath(join(clientDir, clientManifestEntry.file))
package/src/daemon/ipc.ts CHANGED
@@ -4,6 +4,7 @@ import * as net from 'node:net'
4
4
  import * as fs from 'node:fs'
5
5
  import * as path from 'node:path'
6
6
  import * as os from 'node:os'
7
+ import { createHash } from 'node:crypto'
7
8
  import type { IPCMessage, IPCResponse, DaemonState } from './types'
8
9
  import {
9
10
  registerServer,
@@ -18,9 +19,32 @@ import {
18
19
  } from './registry'
19
20
 
20
21
  const SOCKET_DIR = path.join(os.homedir(), '.one')
21
- const SOCKET_PATH = path.join(SOCKET_DIR, 'daemon.sock')
22
22
  const SERVERS_FILE = path.join(SOCKET_DIR, 'servers.json')
23
23
 
24
+ /**
25
+ * Resolve the daemon IPC endpoint for the current platform.
26
+ *
27
+ * Node's `net` implements local IPC as a Unix domain socket on POSIX and a named
28
+ * pipe on Windows — the same `listen(path)`/`connect(path)` API, but on Windows
29
+ * the name must live under `\\.\pipe\` (a flat, machine-global namespace) rather
30
+ * than the filesystem. So we select each platform's native primitive: an AF_UNIX
31
+ * socket file inside the owner-only `~/.one` dir on POSIX, a named pipe on
32
+ * Windows. The Windows name is a deterministic per-user hash so the daemon and
33
+ * the CLI derive the same pipe independently, and so distinct users on one
34
+ * machine don't collide in the shared pipe namespace.
35
+ *
36
+ * @see https://nodejs.org/api/net.html#identifying-paths-for-ipc-connections
37
+ */
38
+ function resolveSocketPath(): string {
39
+ if (process.platform === 'win32') {
40
+ const scope = createHash('sha256').update(SOCKET_DIR).digest('hex').slice(0, 8)
41
+ return path.win32.join(String.raw`\\.\pipe`, `one-daemon-${scope}`)
42
+ }
43
+ return path.join(SOCKET_DIR, 'daemon.sock')
44
+ }
45
+
46
+ const SOCKET_PATH = resolveSocketPath()
47
+
24
48
  export function getSocketPath(): string {
25
49
  return SOCKET_PATH
26
50
  }
@@ -124,9 +148,24 @@ export function createIPCServer(
124
148
  })
125
149
  })
126
150
 
151
+ // surface a bind failure as an actionable message rather than an uncaught
152
+ // 'error' event that crashes the process (e.g. another daemon already owns the
153
+ // socket/pipe).
154
+ server.on('error', (err: NodeJS.ErrnoException) => {
155
+ if (err.code === 'EADDRINUSE') {
156
+ console.error(`[daemon] Another daemon is already listening at ${SOCKET_PATH}`)
157
+ } else {
158
+ console.error('[daemon] IPC server error:', err.message)
159
+ }
160
+ process.exit(1)
161
+ })
162
+
127
163
  server.listen(SOCKET_PATH, () => {
128
- // owner-only permissions for security
129
- fs.chmodSync(SOCKET_PATH, 0o600)
164
+ // owner-only permissions on POSIX; the Windows named pipe is not a filesystem
165
+ // entry, so chmod does not apply there (and would throw).
166
+ if (process.platform !== 'win32') {
167
+ fs.chmodSync(SOCKET_PATH, 0o600)
168
+ }
130
169
  })
131
170
 
132
171
  return server
@@ -205,7 +244,10 @@ function handleMessage(
205
244
 
206
245
  export async function isDaemonRunning(): Promise<boolean> {
207
246
  return new Promise((resolve) => {
208
- if (!fs.existsSync(SOCKET_PATH)) {
247
+ // On POSIX a stale socket file may linger, so a cheap existence check avoids a
248
+ // needless connect. On Windows the endpoint is a named pipe — not a filesystem
249
+ // entry — so existsSync is always false there; probe by connecting instead.
250
+ if (process.platform !== 'win32' && !fs.existsSync(SOCKET_PATH)) {
209
251
  resolve(false)
210
252
  return
211
253
  }
@@ -5,6 +5,7 @@ import {
5
5
  matchArrayGroupName,
6
6
  matchDirectoryRenderMode,
7
7
  matchDynamicName,
8
+ matchFileRenderMode,
8
9
  matchGroupName,
9
10
  matchInterceptPrefix,
10
11
  matchSlotName,
@@ -536,9 +537,7 @@ function getFileMeta(
536
537
  const isLayout = filenameWithoutExtensions.startsWith('_layout')
537
538
  const isMiddleware = filenameWithoutExtensions.startsWith('_middleware')
538
539
 
539
- const [, renderModeFound] =
540
- filename.match(/\+(api|ssg|ssr|spa)\.(\w+\.)?[jt]sx?$/) || []
541
- const fileRenderMode = renderModeFound as 'api' | One.RouteRenderMode | undefined
540
+ const fileRenderMode = matchFileRenderMode(filename)
542
541
 
543
542
  // Hierarchical render mode resolution:
544
543
  // 1. File suffix (highest priority)