one 1.2.21 → 1.2.22-1765155190908

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 (120) hide show
  1. package/dist/cjs/cli/build.cjs +11 -2
  2. package/dist/cjs/cli/build.js +10 -2
  3. package/dist/cjs/cli/build.js.map +1 -1
  4. package/dist/cjs/cli/build.native.js +44 -19
  5. package/dist/cjs/cli/build.native.js.map +1 -1
  6. package/dist/cjs/cli/buildPage.cjs +20 -4
  7. package/dist/cjs/cli/buildPage.js +21 -7
  8. package/dist/cjs/cli/buildPage.js.map +1 -1
  9. package/dist/cjs/cli/buildPage.native.js +38 -6
  10. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  11. package/dist/cjs/createApp.cjs +23 -16
  12. package/dist/cjs/createApp.js +73 -67
  13. package/dist/cjs/createApp.js.map +2 -2
  14. package/dist/cjs/fork/useLinking.cjs +2 -2
  15. package/dist/cjs/fork/useLinking.js +2 -2
  16. package/dist/cjs/fork/useLinking.js.map +1 -1
  17. package/dist/cjs/index.cjs +2 -0
  18. package/dist/cjs/index.js +2 -1
  19. package/dist/cjs/index.js.map +1 -1
  20. package/dist/cjs/index.native.js +2 -0
  21. package/dist/cjs/index.native.js.map +1 -1
  22. package/dist/cjs/router/router.cjs +14 -11
  23. package/dist/cjs/router/router.js +18 -15
  24. package/dist/cjs/router/router.js.map +1 -1
  25. package/dist/cjs/router/router.native.js +15 -12
  26. package/dist/cjs/router/router.native.js.map +1 -1
  27. package/dist/cjs/router/useViteRoutes.cjs +57 -17
  28. package/dist/cjs/router/useViteRoutes.js +55 -17
  29. package/dist/cjs/router/useViteRoutes.js.map +2 -2
  30. package/dist/cjs/router/useViteRoutes.native.js +76 -0
  31. package/dist/cjs/router/useViteRoutes.native.js.map +1 -1
  32. package/dist/cjs/useLoader.cjs +39 -40
  33. package/dist/cjs/useLoader.js +10 -7
  34. package/dist/cjs/useLoader.js.map +1 -1
  35. package/dist/cjs/useLoader.native.js +54 -54
  36. package/dist/cjs/useLoader.native.js.map +1 -1
  37. package/dist/cjs/vite/plugins/virtualEntryPlugin.cjs +12 -1
  38. package/dist/cjs/vite/plugins/virtualEntryPlugin.js +12 -1
  39. package/dist/cjs/vite/plugins/virtualEntryPlugin.js.map +1 -1
  40. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js +12 -1
  41. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  42. package/dist/esm/cli/build.js +10 -2
  43. package/dist/esm/cli/build.js.map +1 -1
  44. package/dist/esm/cli/build.mjs +11 -2
  45. package/dist/esm/cli/build.mjs.map +1 -1
  46. package/dist/esm/cli/build.native.js +44 -19
  47. package/dist/esm/cli/build.native.js.map +1 -1
  48. package/dist/esm/cli/buildPage.js +21 -7
  49. package/dist/esm/cli/buildPage.js.map +1 -1
  50. package/dist/esm/cli/buildPage.mjs +20 -4
  51. package/dist/esm/cli/buildPage.mjs.map +1 -1
  52. package/dist/esm/cli/buildPage.native.js +38 -6
  53. package/dist/esm/cli/buildPage.native.js.map +1 -1
  54. package/dist/esm/createApp.js +73 -66
  55. package/dist/esm/createApp.js.map +2 -2
  56. package/dist/esm/createApp.mjs +23 -16
  57. package/dist/esm/createApp.mjs.map +1 -1
  58. package/dist/esm/fork/useLinking.js +2 -2
  59. package/dist/esm/fork/useLinking.js.map +1 -1
  60. package/dist/esm/fork/useLinking.mjs +2 -2
  61. package/dist/esm/fork/useLinking.mjs.map +1 -1
  62. package/dist/esm/index.js +2 -0
  63. package/dist/esm/index.js.map +1 -1
  64. package/dist/esm/index.mjs +2 -1
  65. package/dist/esm/index.mjs.map +1 -1
  66. package/dist/esm/index.native.js +2 -1
  67. package/dist/esm/index.native.js.map +1 -1
  68. package/dist/esm/router/router.js +18 -14
  69. package/dist/esm/router/router.js.map +1 -1
  70. package/dist/esm/router/router.mjs +14 -12
  71. package/dist/esm/router/router.mjs.map +1 -1
  72. package/dist/esm/router/router.native.js +15 -13
  73. package/dist/esm/router/router.native.js.map +1 -1
  74. package/dist/esm/router/useViteRoutes.js +55 -17
  75. package/dist/esm/router/useViteRoutes.js.map +1 -1
  76. package/dist/esm/router/useViteRoutes.mjs +54 -18
  77. package/dist/esm/router/useViteRoutes.mjs.map +1 -1
  78. package/dist/esm/router/useViteRoutes.native.js +73 -1
  79. package/dist/esm/router/useViteRoutes.native.js.map +1 -1
  80. package/dist/esm/useLoader.js +10 -8
  81. package/dist/esm/useLoader.js.map +1 -1
  82. package/dist/esm/useLoader.mjs +40 -41
  83. package/dist/esm/useLoader.mjs.map +1 -1
  84. package/dist/esm/useLoader.native.js +55 -55
  85. package/dist/esm/useLoader.native.js.map +1 -1
  86. package/dist/esm/vite/plugins/virtualEntryPlugin.js +12 -1
  87. package/dist/esm/vite/plugins/virtualEntryPlugin.js.map +1 -1
  88. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs +12 -1
  89. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs.map +1 -1
  90. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js +12 -1
  91. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  92. package/package.json +10 -10
  93. package/src/cli/build.ts +26 -1
  94. package/src/cli/buildPage.ts +28 -5
  95. package/src/createApp.tsx +29 -21
  96. package/src/fork/useLinking.ts +10 -1
  97. package/src/index.ts +1 -0
  98. package/src/router/router.ts +33 -20
  99. package/src/router/useViteRoutes.tsx +127 -17
  100. package/src/types.ts +1 -0
  101. package/src/useLoader.ts +20 -12
  102. package/src/vite/plugins/virtualEntryPlugin.ts +12 -1
  103. package/src/vite/types.ts +2 -0
  104. package/types/cli/build.d.ts.map +1 -1
  105. package/types/cli/buildPage.d.ts +1 -1
  106. package/types/cli/buildPage.d.ts.map +1 -1
  107. package/types/createApp.d.ts.map +1 -1
  108. package/types/fork/useLinking.d.ts.map +1 -1
  109. package/types/index.d.ts +1 -0
  110. package/types/index.d.ts.map +1 -1
  111. package/types/router/router.d.ts +3 -2
  112. package/types/router/router.d.ts.map +1 -1
  113. package/types/router/useViteRoutes.d.ts +11 -0
  114. package/types/router/useViteRoutes.d.ts.map +1 -1
  115. package/types/types.d.ts +1 -0
  116. package/types/types.d.ts.map +1 -1
  117. package/types/useLoader.d.ts.map +1 -1
  118. package/types/vite/plugins/virtualEntryPlugin.d.ts.map +1 -1
  119. package/types/vite/types.d.ts +1 -0
  120. package/types/vite/types.d.ts.map +1 -1
@@ -1,7 +1,6 @@
1
1
  import { useCallback, useSyncExternalStore } from "react";
2
2
  import { useParams, usePathname } from "./hooks.native.js";
3
- import { resolveHref } from "./link/href.native.js";
4
- import { preloadingLoader } from "./router/router.native.js";
3
+ import { preloadedLoaderData, preloadingLoader } from "./router/router.native.js";
5
4
  import { getLoaderPath } from "./utils/cleanUrl.native.js";
6
5
  import { dynamicImport } from "./utils/dynamicImport.native.js";
7
6
  import { weakKey } from "./utils/weakKey.native.js";
@@ -63,10 +62,7 @@ function useLoaderState(loader) {
63
62
  } = useServerContext() || {},
64
63
  params = useParams(),
65
64
  pathname = usePathname(),
66
- currentPath = resolveHref({
67
- pathname,
68
- params
69
- }).replace(/index$/, "");
65
+ currentPath = pathname.replace(/\/index$/, "").replace(/\/$/, "") || "/";
70
66
  if (typeof window > "u" && loader) {
71
67
  var serverData = useAsyncFn(loader, loaderPropsFromServerContext || {
72
68
  path: pathname,
@@ -78,7 +74,8 @@ function useLoaderState(loader) {
78
74
  state: "idle"
79
75
  };
80
76
  }
81
- var preloadedData = loaderPropsFromServerContext?.path === currentPath ? loaderDataFromServerContext : void 0,
77
+ var serverContextPath = loaderPropsFromServerContext?.path,
78
+ preloadedData = serverContextPath === currentPath ? loaderDataFromServerContext : void 0,
82
79
  loaderStateEntry = useSyncExternalStore(subscribe, function () {
83
80
  return getLoaderState(currentPath, preloadedData);
84
81
  }, function () {
@@ -91,63 +88,66 @@ function useLoaderState(loader) {
91
88
  refetch,
92
89
  state: loaderStateEntry.state
93
90
  };
94
- if (!loaderStateEntry.data && !loaderStateEntry.promise && !loaderStateEntry.hasLoadedOnce && loader) if (preloadingLoader[currentPath]) {
95
- typeof preloadingLoader[currentPath] == "function" && (preloadingLoader[currentPath] = preloadingLoader[currentPath]());
96
- var promise = preloadingLoader[currentPath].then(function (val) {
97
- delete preloadingLoader[currentPath], updateState(currentPath, {
98
- data: val,
99
- hasLoadedOnce: !0,
100
- promise: void 0
101
- });
102
- }).catch(function (err) {
103
- console.error("Error running loader()", err), delete preloadingLoader[currentPath], updateState(currentPath, {
104
- error: err,
105
- promise: void 0
106
- });
107
- });
108
- loaderStateEntry.promise = promise;
109
- } else {
110
- var loadData = async function () {
111
- try {
112
- var loaderJSUrl = getLoaderPath(currentPath, !0),
113
- nativeLoaderJSUrl = `${loaderJSUrl}?platform=ios`;
91
+ if (!loaderStateEntry.data && !loaderStateEntry.promise && !loaderStateEntry.hasLoadedOnce && loader) {
92
+ var resolvedPreloadData = preloadedLoaderData[currentPath];
93
+ if (resolvedPreloadData !== void 0) delete preloadedLoaderData[currentPath], delete preloadingLoader[currentPath], loaderStateEntry.data = resolvedPreloadData, loaderStateEntry.hasLoadedOnce = !0;else if (preloadingLoader[currentPath]) {
94
+ var preloadPromise = preloadingLoader[currentPath],
95
+ promise = preloadPromise.then(function (val) {
96
+ delete preloadingLoader[currentPath], delete preloadedLoaderData[currentPath], updateState(currentPath, {
97
+ data: val,
98
+ hasLoadedOnce: !0,
99
+ promise: void 0
100
+ });
101
+ }).catch(function (err) {
102
+ console.error("Error running loader()", err), delete preloadingLoader[currentPath], updateState(currentPath, {
103
+ error: err,
104
+ promise: void 0
105
+ });
106
+ });
107
+ loaderStateEntry.promise = promise;
108
+ } else {
109
+ var loadData = async function () {
114
110
  try {
115
- var loaderJsCodeResp = await fetch(nativeLoaderJSUrl);
116
- if (!loaderJsCodeResp.ok) throw new Error(`Response not ok: ${loaderJsCodeResp.status}`);
117
- var loaderJsCode = await loaderJsCodeResp.text(),
118
- result = eval(`() => { var exports = {}; ${loaderJsCode}; return exports; }`)();
119
- if (typeof result.loader != "function") throw new Error("Loader code isn't exporting a `loader` function");
120
- var data = await result.loader();
111
+ var loaderJSUrl = getLoaderPath(currentPath, !0),
112
+ nativeLoaderJSUrl = `${loaderJSUrl}?platform=ios`;
113
+ try {
114
+ var loaderJsCodeResp = await fetch(nativeLoaderJSUrl);
115
+ if (!loaderJsCodeResp.ok) throw new Error(`Response not ok: ${loaderJsCodeResp.status}`);
116
+ var loaderJsCode = await loaderJsCodeResp.text(),
117
+ result = eval(`() => { var exports = {}; ${loaderJsCode}; return exports; }`)();
118
+ if (typeof result.loader != "function") throw new Error("Loader code isn't exporting a `loader` function");
119
+ var data = await result.loader();
120
+ updateState(currentPath, {
121
+ data,
122
+ hasLoadedOnce: !0,
123
+ promise: void 0
124
+ });
125
+ return;
126
+ } catch (e) {
127
+ updateState(currentPath, {
128
+ data: {},
129
+ promise: void 0
130
+ });
131
+ return;
132
+ }
133
+ var loaderJSUrl = getLoaderPath(currentPath, !0),
134
+ module = await dynamicImport(loaderJSUrl),
135
+ result = await module.loader();
121
136
  updateState(currentPath, {
122
- data,
137
+ data: result,
123
138
  hasLoadedOnce: !0,
124
139
  promise: void 0
125
140
  });
126
- return;
127
- } catch (e) {
141
+ } catch (err) {
128
142
  updateState(currentPath, {
129
- data: {},
143
+ error: err,
130
144
  promise: void 0
131
145
  });
132
- return;
133
146
  }
134
- var loaderJSUrl = getLoaderPath(currentPath, !0),
135
- module = await dynamicImport(loaderJSUrl),
136
- result = await module.loader();
137
- updateState(currentPath, {
138
- data: result,
139
- hasLoadedOnce: !0,
140
- promise: void 0
141
- });
142
- } catch (err) {
143
- updateState(currentPath, {
144
- error: err,
145
- promise: void 0
146
- });
147
- }
148
- },
149
- promise = loadData();
150
- loaderStateEntry.promise = promise;
147
+ },
148
+ promise = loadData();
149
+ loaderStateEntry.promise = promise;
150
+ }
151
151
  }
152
152
  if (loader) {
153
153
  if (loaderStateEntry.error && !loaderStateEntry.hasLoadedOnce) throw loaderStateEntry.error;
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useSyncExternalStore","useParams","usePathname","resolveHref","preloadingLoader","getLoaderPath","dynamicImport","weakKey","useServerContext","_instanceof","left","right","Symbol","hasInstance","loaderState","subscribers","Set","updateState","path","updates","forEach","callback","subscribe","add","delete","getLoaderState","preloadedData2","data","error","promise","state","hasLoadedOnce","refetchLoader","pathname2","cacheBust","Date","now","loaderJSUrl2","module2","result2","loader","timestamp","err","useLoaderState","loaderProps","loaderPropsFromServerContext","loaderData","loaderDataFromServerContext","params","pathname","currentPath","replace","window","serverData","useAsyncFn","refetch","preloadedData","loaderStateEntry","then","val","catch","console","loadData","loaderJSUrl","nativeLoaderJSUrl","loaderJsCodeResp","fetch","ok","Error","status","loaderJsCode","text","result","eval","e","module"],"sources":["../../src/useLoader.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useSyncExternalStore","useParams","usePathname","preloadedLoaderData","preloadingLoader","getLoaderPath","dynamicImport","weakKey","useServerContext","_instanceof","left","right","Symbol","hasInstance","loaderState","subscribers","Set","updateState","path","updates","forEach","callback","subscribe","add","delete","getLoaderState","preloadedData2","data","error","promise","state","hasLoadedOnce","refetchLoader","pathname2","cacheBust","Date","now","loaderJSUrl2","module2","result2","loader","timestamp","err","useLoaderState","loaderProps","loaderPropsFromServerContext","loaderData","loaderDataFromServerContext","params","pathname","currentPath","replace","window","serverData","useAsyncFn","refetch","serverContextPath","preloadedData","loaderStateEntry","resolvedPreloadData","preloadPromise","then","val","catch","console","loadData","loaderJSUrl","nativeLoaderJSUrl","loaderJsCodeResp","fetch","ok","Error","status","loaderJsCode","text","result","eval","e","module"],"sources":["../../src/useLoader.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -43,7 +43,18 @@ function createVirtualEntry(options) {
43
43
  return `
44
44
  ${isNativeEnvironment(this.environment) ? "" : getSetupFileImport(this.environment.name)}
45
45
 
46
- import { createApp } from 'one'
46
+ import { createApp, registerPreloadedRoute as _registerPreloadedRoute } from 'one'
47
+
48
+ // Export registerPreloadedRoute so preload files can import it from this bundle
49
+ // Named export that wraps the original function
50
+ export function registerPreloadedRoute(key, module) {
51
+ return _registerPreloadedRoute(key, module)
52
+ }
53
+
54
+ // Also expose on window for debugging and to prevent tree-shaking
55
+ if (typeof window !== 'undefined') {
56
+ window.__oneRegisterPreloadedRoute = registerPreloadedRoute
57
+ }
47
58
 
48
59
  // globbing ${JSON.stringify(routeGlobs)}
49
60
  export default createApp({
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/vite/plugins/virtualEntryPlugin.ts"],
4
- "mappings": "AACA,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,mBAAmB,iBAAiC;AAQ3D,QAAM,SAPY;AAAA,IAChB,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,EACX,EAEyB,eAAe;AACxC,SAAK,SAEE;AAAA,kBACS,MAAM;AAAA,0CACkB,MAAM;AAAA;AAAA,IAJ1B;AAOtB;AAEO,SAAS,mBAAmB,SAMxB;AACT,QAAM,aAAa;AAAA,IACjB,IAAI,QAAQ,IAAI,IAAI,kBAAkB;AAAA,IACtC,GAAI,QAAQ,QAAQ,mBAAmB,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,OAAO,EAAE,KAAK,CAAC;AAAA,EAC9F,GACM,gBAAgB,IAAI,QAAQ,IAAI,IAAI,sBAAsB;AAEhE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IAET,UAAU,IAAI;AACZ,UAAI,OAAO;AACT,eAAO;AAET,UAAI,OAAO;AACT,eAAO;AAAA,IAEX;AAAA,IAEA,KAAK,IAAI;AACP,UAAI,OAAO;AAIT,eAAO;AAAA,EAHa,oBAAoB,KAAK,WAAW,IACpD,KACA,mBAAmB,KAAK,YAAY,IAAI,CAEvC;AAAA;AAAA;AAAA;AAAA,cAIC,KAAK,UAAU,UAAU,CAAC;AAAA;AAAA,6BAEX,KAAK,UAAU,CAAC,GAAG,YAAY,GAAG,kCAAkC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,gBACtG,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,WACjC,KAAK,UAAU,QAAQ,KAAK,CAAC;AAAA;AAAA;AAKlC,UAAI,OAAO;AAIT,eAAO;AAAA,EAHa,oBAAoB,KAAK,WAAW,IACpD,KACA,mBAAmB,KAAK,YAAY,IAAI,CAEvC;AAAA;AAAA;AAAA;AAAA,cAIC,KAAK,UAAU,UAAU,CAAC;AAAA;AAAA,6BAEX,KAAK,UAAU,CAAC,GAAG,YAAY,GAAG,qCAAqC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,CAAC,CAAC;AAAA,gBAC9H,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,WACjC,KAAK,UAAU,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA,IAIpC;AAAA,EACF;AACF;",
4
+ "mappings": "AACA,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,mBAAmB,iBAAiC;AAQ3D,QAAM,SAPY;AAAA,IAChB,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,EACX,EAEyB,eAAe;AACxC,SAAK,SAEE;AAAA,kBACS,MAAM;AAAA,0CACkB,MAAM;AAAA;AAAA,IAJ1B;AAOtB;AAEO,SAAS,mBAAmB,SAMxB;AACT,QAAM,aAAa;AAAA,IACjB,IAAI,QAAQ,IAAI,IAAI,kBAAkB;AAAA,IACtC,GAAI,QAAQ,QAAQ,mBAAmB,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,OAAO,EAAE,KAAK,CAAC;AAAA,EAC9F,GACM,gBAAgB,IAAI,QAAQ,IAAI,IAAI,sBAAsB;AAEhE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IAET,UAAU,IAAI;AACZ,UAAI,OAAO;AACT,eAAO;AAET,UAAI,OAAO;AACT,eAAO;AAAA,IAEX;AAAA,IAEA,KAAK,IAAI;AACP,UAAI,OAAO;AAIT,eAAO;AAAA,EAHa,oBAAoB,KAAK,WAAW,IACpD,KACA,mBAAmB,KAAK,YAAY,IAAI,CAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAeC,KAAK,UAAU,UAAU,CAAC;AAAA;AAAA,6BAEX,KAAK,UAAU,CAAC,GAAG,YAAY,GAAG,kCAAkC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,gBACtG,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,WACjC,KAAK,UAAU,QAAQ,KAAK,CAAC;AAAA;AAAA;AAKlC,UAAI,OAAO;AAIT,eAAO;AAAA,EAHa,oBAAoB,KAAK,WAAW,IACpD,KACA,mBAAmB,KAAK,YAAY,IAAI,CAEvC;AAAA;AAAA;AAAA;AAAA,cAIC,KAAK,UAAU,UAAU,CAAC;AAAA;AAAA,6BAEX,KAAK,UAAU,CAAC,GAAG,YAAY,GAAG,qCAAqC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,CAAC,CAAC;AAAA,gBAC9H,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,WACjC,KAAK,UAAU,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA,IAIpC;AAAA,EACF;AACF;",
5
5
  "names": []
6
6
  }
@@ -28,7 +28,18 @@ function createVirtualEntry(options) {
28
28
  if (id === resolvedVirtualEntryId) return `
29
29
  ${isNativeEnvironment(this.environment) ? "" : getSetupFileImport(this.environment.name)}
30
30
 
31
- import { createApp } from 'one'
31
+ import { createApp, registerPreloadedRoute as _registerPreloadedRoute } from 'one'
32
+
33
+ // Export registerPreloadedRoute so preload files can import it from this bundle
34
+ // Named export that wraps the original function
35
+ export function registerPreloadedRoute(key, module) {
36
+ return _registerPreloadedRoute(key, module)
37
+ }
38
+
39
+ // Also expose on window for debugging and to prevent tree-shaking
40
+ if (typeof window !== 'undefined') {
41
+ window.__oneRegisterPreloadedRoute = registerPreloadedRoute
42
+ }
32
43
 
33
44
  // globbing ${JSON.stringify(routeGlobs)}
34
45
  export default createApp({
@@ -1 +1 @@
1
- {"version":3,"names":["isNativeEnvironment","API_ROUTE_GLOB_PATTERN","ROUTE_GLOB_PATTERN","ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS","ROUTE_WEB_EXCLUSION_GLOB_PATTERNS","resolvedVirtualEntryId","resolvedVirtualEntryIdNative","virtualEntryId","virtualEntryIdNative","getSetupFileImport","environmentName","envVar","client","ssr","ios","android","createVirtualEntry","options","routeGlobs","root","router","ignoredRouteFiles","map","pattern","apiRouteGlobs","name","enforce","resolveId","id","load","environment","JSON","stringify","p","flags"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,mBAAA,QAA2B;AACpC,SACEC,sBAAA,EACAC,kBAAA,EACAC,oCAAA,EACAC,iCAAA,QACK;AAEP,SACEC,sBAAA,EACAC,4BAAA,EACAC,cAAA,EACAC,oBAAA,QACK;AAEP,SAASC,mBAAmBC,eAAA,EAAiC;EAQ3D,MAAMC,MAAA,GAPY;IAChBC,MAAA,EAAQ;IACRC,GAAA,EAAK;IACLC,GAAA,EAAK;IACLC,OAAA,EAAS;EACX,EAEyBL,eAAe;EACxC,OAAKC,MAAA,GAEE;AAAA,kBACSA,MAAM;AAAA,0CACkBA,MAAM;AAAA;AAAA,IAJ1B;AAOtB;AAEO,SAASK,mBAAmBC,OAAA,EAMxB;EACT,MAAMC,UAAA,GAAa,CACjB,IAAID,OAAA,CAAQE,IAAI,IAAIjB,kBAAkB,IACtC,IAAIe,OAAA,CAAQG,MAAA,EAAQC,iBAAA,EAAmBC,GAAA,CAAKC,OAAA,IAAY,KAAKN,OAAA,CAAQE,IAAI,IAAII,OAAO,EAAE,KAAK,EAAC,EAC9F;IACMC,aAAA,GAAgB,IAAIP,OAAA,CAAQE,IAAI,IAAIlB,sBAAsB;EAEhE,OAAO;IACLwB,IAAA,EAAM;IACNC,OAAA,EAAS;IAETC,UAAUC,EAAA,EAAI;MACZ,IAAIA,EAAA,KAAOrB,cAAA,EACT,OAAOF,sBAAA;MAET,IAAIuB,EAAA,KAAOpB,oBAAA,EACT,OAAOF,4BAAA;IAEX;IAEAuB,KAAKD,EAAA,EAAI;MACP,IAAIA,EAAA,KAAOvB,sBAAA,EAIT,OAAO;AAAA,EAHaL,mBAAA,CAAoB,KAAK8B,WAAW,IACpD,KACArB,kBAAA,CAAmB,KAAKqB,WAAA,CAAYL,IAAI,CAEvC;AAAA;AAAA;AAAA;AAAA,cAICM,IAAA,CAAKC,SAAA,CAAUd,UAAU,CAAC;AAAA;AAAA,6BAEXa,IAAA,CAAKC,SAAA,CAAU,CAAC,GAAGd,UAAA,EAAY,GAAGd,iCAAA,CAAkCkB,GAAA,CAAKW,CAAA,IAAM,IAAIA,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,gBACtGF,IAAA,CAAKC,SAAA,CAAUf,OAAA,CAAQE,IAAI,CAAC;AAAA,WACjCY,IAAA,CAAKC,SAAA,CAAUf,OAAA,CAAQiB,KAAK,CAAC;AAAA;AAAA;MAKlC,IAAIN,EAAA,KAAOtB,4BAAA,EAIT,OAAO;AAAA,EAHaN,mBAAA,CAAoB,KAAK8B,WAAW,IACpD,KACArB,kBAAA,CAAmB,KAAKqB,WAAA,CAAYL,IAAI,CAEvC;AAAA;AAAA;AAAA;AAAA,cAICM,IAAA,CAAKC,SAAA,CAAUd,UAAU,CAAC;AAAA;AAAA,6BAEXa,IAAA,CAAKC,SAAA,CAAU,CAAC,GAAGd,UAAA,EAAY,GAAGf,oCAAA,CAAqCmB,GAAA,CAAKW,CAAA,IAAM,IAAIA,CAAC,EAAE,GAAG,IAAIT,aAAa,EAAE,CAAC,CAAC;AAAA,gBAC9HO,IAAA,CAAKC,SAAA,CAAUf,OAAA,CAAQE,IAAI,CAAC;AAAA,WACjCY,IAAA,CAAKC,SAAA,CAAUf,OAAA,CAAQiB,KAAK,CAAC;AAAA;AAAA;IAIpC;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"names":["isNativeEnvironment","API_ROUTE_GLOB_PATTERN","ROUTE_GLOB_PATTERN","ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS","ROUTE_WEB_EXCLUSION_GLOB_PATTERNS","resolvedVirtualEntryId","resolvedVirtualEntryIdNative","virtualEntryId","virtualEntryIdNative","getSetupFileImport","environmentName","envVar","client","ssr","ios","android","createVirtualEntry","options","routeGlobs","root","router","ignoredRouteFiles","map","pattern","apiRouteGlobs","name","enforce","resolveId","id","load","environment","JSON","stringify","p","flags"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,mBAAA,QAA2B;AACpC,SACEC,sBAAA,EACAC,kBAAA,EACAC,oCAAA,EACAC,iCAAA,QACK;AAEP,SACEC,sBAAA,EACAC,4BAAA,EACAC,cAAA,EACAC,oBAAA,QACK;AAEP,SAASC,mBAAmBC,eAAA,EAAiC;EAQ3D,MAAMC,MAAA,GAPY;IAChBC,MAAA,EAAQ;IACRC,GAAA,EAAK;IACLC,GAAA,EAAK;IACLC,OAAA,EAAS;EACX,EAEyBL,eAAe;EACxC,OAAKC,MAAA,GAEE;AAAA,kBACSA,MAAM;AAAA,0CACkBA,MAAM;AAAA;AAAA,IAJ1B;AAOtB;AAEO,SAASK,mBAAmBC,OAAA,EAMxB;EACT,MAAMC,UAAA,GAAa,CACjB,IAAID,OAAA,CAAQE,IAAI,IAAIjB,kBAAkB,IACtC,IAAIe,OAAA,CAAQG,MAAA,EAAQC,iBAAA,EAAmBC,GAAA,CAAKC,OAAA,IAAY,KAAKN,OAAA,CAAQE,IAAI,IAAII,OAAO,EAAE,KAAK,EAAC,EAC9F;IACMC,aAAA,GAAgB,IAAIP,OAAA,CAAQE,IAAI,IAAIlB,sBAAsB;EAEhE,OAAO;IACLwB,IAAA,EAAM;IACNC,OAAA,EAAS;IAETC,UAAUC,EAAA,EAAI;MACZ,IAAIA,EAAA,KAAOrB,cAAA,EACT,OAAOF,sBAAA;MAET,IAAIuB,EAAA,KAAOpB,oBAAA,EACT,OAAOF,4BAAA;IAEX;IAEAuB,KAAKD,EAAA,EAAI;MACP,IAAIA,EAAA,KAAOvB,sBAAA,EAIT,OAAO;AAAA,EAHaL,mBAAA,CAAoB,KAAK8B,WAAW,IACpD,KACArB,kBAAA,CAAmB,KAAKqB,WAAA,CAAYL,IAAI,CAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAeCM,IAAA,CAAKC,SAAA,CAAUd,UAAU,CAAC;AAAA;AAAA,6BAEXa,IAAA,CAAKC,SAAA,CAAU,CAAC,GAAGd,UAAA,EAAY,GAAGd,iCAAA,CAAkCkB,GAAA,CAAKW,CAAA,IAAM,IAAIA,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,gBACtGF,IAAA,CAAKC,SAAA,CAAUf,OAAA,CAAQE,IAAI,CAAC;AAAA,WACjCY,IAAA,CAAKC,SAAA,CAAUf,OAAA,CAAQiB,KAAK,CAAC;AAAA;AAAA;MAKlC,IAAIN,EAAA,KAAOtB,4BAAA,EAIT,OAAO;AAAA,EAHaN,mBAAA,CAAoB,KAAK8B,WAAW,IACpD,KACArB,kBAAA,CAAmB,KAAKqB,WAAA,CAAYL,IAAI,CAEvC;AAAA;AAAA;AAAA;AAAA,cAICM,IAAA,CAAKC,SAAA,CAAUd,UAAU,CAAC;AAAA;AAAA,6BAEXa,IAAA,CAAKC,SAAA,CAAU,CAAC,GAAGd,UAAA,EAAY,GAAGf,oCAAA,CAAqCmB,GAAA,CAAKW,CAAA,IAAM,IAAIA,CAAC,EAAE,GAAG,IAAIT,aAAa,EAAE,CAAC,CAAC;AAAA,gBAC9HO,IAAA,CAAKC,SAAA,CAAUf,OAAA,CAAQE,IAAI,CAAC;AAAA,WACjCY,IAAA,CAAKC,SAAA,CAAUf,OAAA,CAAQiB,KAAK,CAAC;AAAA;AAAA;IAIpC;EACF;AACF","ignoreList":[]}
@@ -36,7 +36,18 @@ function createVirtualEntry(options) {
36
36
  return `
37
37
  ${prependCode}
38
38
 
39
- import { createApp } from 'one'
39
+ import { createApp, registerPreloadedRoute as _registerPreloadedRoute } from 'one'
40
+
41
+ // Export registerPreloadedRoute so preload files can import it from this bundle
42
+ // Named export that wraps the original function
43
+ export function registerPreloadedRoute(key, module) {
44
+ return _registerPreloadedRoute(key, module)
45
+ }
46
+
47
+ // Also expose on window for debugging and to prevent tree-shaking
48
+ if (typeof window !== 'undefined') {
49
+ window.__oneRegisterPreloadedRoute = registerPreloadedRoute
50
+ }
40
51
 
41
52
  // globbing ${JSON.stringify(routeGlobs)}
42
53
  export default createApp({
@@ -1 +1 @@
1
- {"version":3,"names":["isNativeEnvironment","API_ROUTE_GLOB_PATTERN","ROUTE_GLOB_PATTERN","ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS","ROUTE_WEB_EXCLUSION_GLOB_PATTERNS","resolvedVirtualEntryId","resolvedVirtualEntryIdNative","virtualEntryId","virtualEntryIdNative","getSetupFileImport","environmentName","envVarMap","client","ssr","ios","android","envVar","createVirtualEntry","options","_options_router_ignoredRouteFiles","_options_router","routeGlobs","root","router","ignoredRouteFiles","map","pattern","apiRouteGlobs","name","enforce","resolveId","id","load","prependCode","environment","JSON","stringify","p","flags","prependCode1"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,mBAAA,QAA2B;AACpC,SAAAC,sBAAA,EAAAC,kBAAA,EAAAC,oCAAA,EAAAC,iCAAA;AAAA,SACEC,sBAAA,EAAAC,4BAAA,EAAAC,cAAA,EAAAC,oBAAA;AAAA,SACAC,mBAAAC,eAAA;EACA,IAAAC,SAAA;MACAC,MAAA;MAAAC,GACK;MAEPC,GAAA;MACEC,OAAA;IACA;IAAAC,MAAA,GAAAL,SAAA,CAAAD,eAAA;EACA,OAAAM,MAAA;AAAA,kBACAA,MAAA;AAAA,0CACKA,MAAA;AAEP;AAQE;AAPkB;AACR,SACHC,mBAAAC,OAAA;EAAA,IACLC,iCAAK;IAAAC,eAAA;IAAAC,UAAA,IACL,IAAAH,OAAS,CAAAI,IAAA,IAAApB,kBAAA,IAGc,MAAAkB,eAAe,GAAAF,OAAA,CAAAK,MAAA,cAAAH,eAAA,gBAAAD,iCAAA,GAAAC,eAAA,CAAAI,iBAAA,cAAAL,iCAAA,uBAAAA,iCAAA,CAAAM,GAAA,WAAAC,OAAA;MACxC,OAAK,KAEER,OAAA,CAAAI,IAAA,IAAAI,OAAA;IAAA,WACe;IAAAC,aAAA,OAAAT,OAAA,CAAAI,IAAA,IAAArB,sBACwB;EAAA;IAJ1B2B,IAAA;IAOtBC,OAAA;IAEOC,SAASA,CAAAC,EAAA;MAOd,IAAMA,EAAA,KAAAxB,cAAa,EACb,OAAAF,sBAAgB;MACpB,IAAI0B,EAAA,KAAQvB,oBAAQ,EAEhB,OAAAF,4BAAoC;IAE1C;IACE0B,KAAAD,EAAM;MACN,IAAAA,EAAA,KAAS1B,sBAAA;QAET,IAAA4B,WAAc,GAAAjC,mBAAA,MAAAkC,WAAA,UACR;QACFzB,kBAAO,MAAAyB,WAAA,CAAAN,IAAA,EAET;QACE,OAAO;AAAA,EAAAK,WAEX;AAAA;AAGE;AAIE;AAAO,cAHaE,IAAA,CAAAC,SAAyB,CAAAf,UAAW;AAInD;AAAA,6BAAAc,IAAA,CAAAC,SAAA,KAAAf,UAAA,KAAAjB,iCAI2B,CAAAqB,GAAA,WAAAY,CAAA;UAAA,WAAAA,CAAA;QAAA,GAE8E;AAC1E,gBAC5BF,IAAA,CAAAC,SAAU,CAAAlB,OAAQ,CAAKI,IAAC;AAAA,WAAAa,IAAA,CAAAC,SAAA,CAAAlB,OAAA,CAAAoB,KAAA;AAAA;AAKlC;MAIE;MAHoB,IAAAP,EAAA,KAAAzB,4BAChB,EACA;QAEC,IAAAiC,YAAA,GAAAvC,mBAAA,MAAAkC,WAAA;QAAAzB,kBAAA,MAAAyB,WAAA,CAAAN,IAAA;QAI2B;AAAA,EAAAW,YAAA;AAEsG;AAClG;AACJ;AAAA,cAAAJ,IAAA,CAAAC,SAAA,CAAAf,UAAA;AAAA;AAIpC,6BACFc,IAAA,CAAAC,SAAA,EACF,GAAAf,UAAA,E","ignoreList":[]}
1
+ {"version":3,"names":["isNativeEnvironment","API_ROUTE_GLOB_PATTERN","ROUTE_GLOB_PATTERN","ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS","ROUTE_WEB_EXCLUSION_GLOB_PATTERNS","resolvedVirtualEntryId","resolvedVirtualEntryIdNative","virtualEntryId","virtualEntryIdNative","getSetupFileImport","environmentName","envVarMap","client","ssr","ios","android","envVar","createVirtualEntry","options","_options_router_ignoredRouteFiles","_options_router","routeGlobs","root","router","ignoredRouteFiles","map","pattern","apiRouteGlobs","name","enforce","resolveId","id","load","prependCode","environment","JSON","stringify","p","flags","prependCode1"],"sources":["../../../../src/vite/plugins/virtualEntryPlugin.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,mBAAA,QAA2B;AACpC,SAAAC,sBAAA,EAAAC,kBAAA,EAAAC,oCAAA,EAAAC,iCAAA;AAAA,SACEC,sBAAA,EAAAC,4BAAA,EAAAC,cAAA,EAAAC,oBAAA;AAAA,SACAC,mBAAAC,eAAA;EACA,IAAAC,SAAA;MACAC,MAAA;MAAAC,GACK;MAEPC,GAAA;MACEC,OAAA;IACA;IAAAC,MAAA,GAAAL,SAAA,CAAAD,eAAA;EACA,OAAAM,MAAA;AAAA,kBACAA,MAAA;AAAA,0CACKA,MAAA;AAEP;AAQE;AAPkB;AACR,SACHC,mBAAAC,OAAA;EAAA,IACLC,iCAAK;IAAAC,eAAA;IAAAC,UAAA,IACL,IAAAH,OAAS,CAAAI,IAAA,IAAApB,kBAAA,IAGc,MAAAkB,eAAe,GAAAF,OAAA,CAAAK,MAAA,cAAAH,eAAA,gBAAAD,iCAAA,GAAAC,eAAA,CAAAI,iBAAA,cAAAL,iCAAA,uBAAAA,iCAAA,CAAAM,GAAA,WAAAC,OAAA;MACxC,OAAK,KAEER,OAAA,CAAAI,IAAA,IAAAI,OAAA;IAAA,WACe;IAAAC,aAAA,OAAAT,OAAA,CAAAI,IAAA,IAAArB,sBACwB;EAAA;IAJ1B2B,IAAA;IAOtBC,OAAA;IAEOC,SAASA,CAAAC,EAAA;MAOd,IAAMA,EAAA,KAAAxB,cAAa,EACb,OAAAF,sBAAgB;MACpB,IAAI0B,EAAA,KAAQvB,oBAAQ,EAEhB,OAAAF,4BAAoC;IAE1C;IACE0B,KAAAD,EAAM;MACN,IAAAA,EAAA,KAAS1B,sBAAA;QAET,IAAA4B,WAAc,GAAAjC,mBAAA,MAAAkC,WAAA,UACR;QACFzB,kBAAO,MAAAyB,WAAA,CAAAN,IAAA,EAET;QACE,OAAO;AAAA,EAAAK,WAEX;AAAA;AAGE;AAIE;AAAO;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAAE,IAAA,CAAAC,SAAA,CAAAf,UAAA;AAAA;AAAA,6BAAAc,IAAA,CAAAC,SAAA,KAAAf,UAAA,KAAAjB,iCAe2B,CAAAqB,GAAA,WAAAY,CAAA;UAAA,WAAAA,CAAA;QAAA,GAE8E;AAC1E,gBAC5BF,IAAA,CAAAC,SAAU,CAAAlB,OAAQ,CAAKI,IAAC;AAAA,WAAAa,IAAA,CAAAC,SAAA,CAAAlB,OAAA,CAAAoB,KAAA;AAAA;AAKlC;MAIE;MAHoB,IAAAP,EAAA,KAAAzB,4BAChB,EACA;QAEC,IAAAiC,YAAA,GAAAvC,mBAAA,MAAAkC,WAAA;QAAAzB,kBAAA,MAAAyB,WAAA,CAAAN,IAAA;QAI2B;AAAA,EAAAW,YAAA;AAEsG;AAClG;AACJ;AAAA,cAAAJ,IAAA,CAAAC,SAAA,CAAAf,UAAA;AAAA;AAIpC,6BACFc,IAAA,CAAAC,SAAA,EACF,GAAAf,UAAA,E","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one",
3
- "version": "1.2.21",
3
+ "version": "1.2.22-1765155190908",
4
4
  "license": "BSD-3-Clause",
5
5
  "sideEffects": [
6
6
  "setup.mjs",
@@ -121,17 +121,17 @@
121
121
  "@react-navigation/routers": "~7.5.1",
122
122
  "@swc/core": "^1.14.0",
123
123
  "@ungap/structured-clone": "^1.2.0",
124
- "@vxrn/compiler": "1.2.21",
125
- "@vxrn/resolve": "1.2.21",
126
- "@vxrn/tslib-lite": "1.2.21",
127
- "@vxrn/universal-color-scheme": "1.2.21",
128
- "@vxrn/use-isomorphic-layout-effect": "1.2.21",
129
- "@vxrn/vite-plugin-metro": "1.2.21",
124
+ "@vxrn/compiler": "1.2.22-1765155190908",
125
+ "@vxrn/resolve": "1.2.22-1765155190908",
126
+ "@vxrn/tslib-lite": "1.2.22-1765155190908",
127
+ "@vxrn/universal-color-scheme": "1.2.22-1765155190908",
128
+ "@vxrn/use-isomorphic-layout-effect": "1.2.22-1765155190908",
129
+ "@vxrn/vite-plugin-metro": "1.2.22-1765155190908",
130
130
  "babel-dead-code-elimination": "^1.0.10",
131
131
  "babel-plugin-module-resolver": "^5.0.2",
132
132
  "citty": "^0.1.6",
133
133
  "core-js": "^3.38.1",
134
- "create-vxrn": "1.2.21",
134
+ "create-vxrn": "1.2.22-1765155190908",
135
135
  "escape-string-regexp": "^5.0.0",
136
136
  "expo-linking": "~8.0.8",
137
137
  "expo-modules-core": "~3.0.24",
@@ -157,7 +157,7 @@
157
157
  "vite": "^7.1.12",
158
158
  "vite-plugin-barrel": "^0.4.1",
159
159
  "vite-tsconfig-paths": "^5.1.4",
160
- "vxrn": "1.2.21",
160
+ "vxrn": "1.2.22-1765155190908",
161
161
  "ws": "^8.18.0",
162
162
  "xxhashjs": "^0.2.2"
163
163
  },
@@ -175,7 +175,7 @@
175
175
  "devDependencies": {
176
176
  "@react-navigation/core": "^7.13.0",
177
177
  "@react-navigation/native": "~7.1.19",
178
- "@tamagui/build": "^1.138.6",
178
+ "@tamagui/build": "^1.139.1",
179
179
  "@types/node": "^24.10.0",
180
180
  "@types/react-dom": "^19.2.2",
181
181
  "@types/xxhashjs": "^0.2.4",
package/src/cli/build.ts CHANGED
@@ -333,6 +333,30 @@ export async function build(args: {
333
333
  return [entry.file, ...collectImports(entry)]
334
334
  })
335
335
 
336
+ // create mapping of route keys to bundle paths for hydration preloading
337
+ const routePreloads: Record<string, string> = {}
338
+
339
+ // add root layout
340
+ const rootLayoutKey = `${routerRoot}/_layout.tsx`
341
+ const rootLayoutEntry = vxrnOutput.clientManifest[rootLayoutKey]
342
+ if (rootLayoutEntry) {
343
+ routePreloads[`/${rootLayoutKey}`] = `/${rootLayoutEntry.file}`
344
+ }
345
+
346
+ // add all layouts for this route
347
+ if (foundRoute.layouts) {
348
+ for (const layout of foundRoute.layouts) {
349
+ const clientKey = `${routerRoot}${layout.contextKey.slice(1)}`
350
+ const entry = vxrnOutput.clientManifest[clientKey]
351
+ if (entry) {
352
+ routePreloads[`/${clientKey}`] = `/${entry.file}`
353
+ }
354
+ }
355
+ }
356
+
357
+ // add the page itself
358
+ routePreloads[`/${clientManifestKey}`] = `/${clientManifestEntry.file}`
359
+
336
360
  const preloadSetupFilePreloads = (() => {
337
361
  if (!oneOptions.setupFile) return []
338
362
 
@@ -443,7 +467,8 @@ export async function build(args: {
443
467
  builtMiddlewares,
444
468
  serverJsPath,
445
469
  preloads,
446
- allCSS
470
+ allCSS,
471
+ routePreloads
447
472
  )
448
473
  })
449
474
 
@@ -21,7 +21,8 @@ export async function buildPage(
21
21
  builtMiddlewares: Record<string, string>,
22
22
  serverJsPath: string,
23
23
  preloads: string[],
24
- allCSS: string[]
24
+ allCSS: string[],
25
+ routePreloads: Record<string, string>
25
26
  ): Promise<One.RouteBuildInfo> {
26
27
  const render = await getRender(serverEntry)
27
28
  const htmlPath = `${path.endsWith('/') ? `${removeTrailingSlash(path)}/index` : path}.html`
@@ -34,12 +35,33 @@ export async function buildPage(
34
35
  let loaderData = {}
35
36
 
36
37
  try {
37
- // todo await optimize
38
- await FSExtra.writeFile(
39
- join(clientDir, preloadPath),
40
- preloads.map((preload) => `import "${preload}"`).join('\n')
38
+ // generate preload file with route module registration
39
+ const routeImports: string[] = []
40
+ const routeRegistrations: string[] = []
41
+ let routeIndex = 0
42
+
43
+ for (const [routeKey, bundlePath] of Object.entries(routePreloads)) {
44
+ const varName = `_r${routeIndex++}`
45
+ routeImports.push(`import * as ${varName} from "${bundlePath}"`)
46
+ routeRegistrations.push(`registerPreloadedRoute("${routeKey}", ${varName})`)
47
+ }
48
+
49
+ // Use window global for registration since ES module exports get tree-shaken
50
+ const registrationCalls = routeRegistrations.map((call) =>
51
+ call.replace('registerPreloadedRoute(', 'window.__oneRegisterPreloadedRoute(')
41
52
  )
42
53
 
54
+ const preloadContent = [
55
+ // import all route modules
56
+ ...routeImports,
57
+ // static imports for cache warming (original behavior)
58
+ ...preloads.map((preload) => `import "${preload}"`),
59
+ // register all route modules using window global
60
+ ...registrationCalls,
61
+ ].join('\n')
62
+
63
+ await FSExtra.writeFile(join(clientDir, preloadPath), preloadContent)
64
+
43
65
  const exported = await import(toAbsolute(serverJsPath))
44
66
 
45
67
  if (exported.loader) {
@@ -73,6 +95,7 @@ if (typeof document === 'undefined') globalThis.document = {}
73
95
  loaderData,
74
96
  css: allCSS,
75
97
  mode: 'ssg',
98
+ routePreloads,
76
99
  })
77
100
  await outputFile(htmlOutPath, html)
78
101
  } else if (foundRoute.type === 'spa') {
package/src/createApp.tsx CHANGED
@@ -6,6 +6,7 @@ import { AppRegistry } from 'react-native'
6
6
  import { resolveClientLoader } from './clientLoaderResolver'
7
7
  import { Root } from './Root'
8
8
  import { render } from './render'
9
+ import { registerPreloadedRoute } from './router/useViteRoutes'
9
10
  import { renderToString } from './server-render'
10
11
  import type { RenderAppProps } from './types'
11
12
  import { getServerHeadInsertions } from './useServerHeadInsertion'
@@ -25,7 +26,7 @@ export function createApp(options: CreateAppProps) {
25
26
  return {
26
27
  options,
27
28
  render: async (props: RenderAppProps) => {
28
- let { loaderData, loaderProps, css, mode, loaderServerData } = props
29
+ let { loaderData, loaderProps, css, mode, loaderServerData, routePreloads } = props
29
30
 
30
31
  setServerContext({
31
32
  postRenderData: loaderServerData,
@@ -33,6 +34,7 @@ export function createApp(options: CreateAppProps) {
33
34
  loaderProps,
34
35
  mode,
35
36
  css,
37
+ routePreloads,
36
38
  })
37
39
 
38
40
  let renderId: string | undefined
@@ -116,29 +118,35 @@ export function createApp(options: CreateAppProps) {
116
118
  }
117
119
  }
118
120
 
119
- // run their root layout before calling resolveClientLoader so they can register hook
120
- const rootLayoutImport = options.routes[`/${options.routerRoot}/_layout.tsx`]?.()
121
+ const serverContext = getServerContext() || {}
122
+ const routePreloads = serverContext.routePreloads
121
123
 
122
- return rootLayoutImport
124
+ // preload routes using build-time mapping (production SSG)
125
+ // for SPA/dev mode, fall back to importing root layout directly
126
+ const preloadPromises = routePreloads
127
+ ? Object.entries(routePreloads).map(async ([routeKey, bundlePath]) => {
128
+ const mod = await import(/* @vite-ignore */ bundlePath)
129
+ registerPreloadedRoute(routeKey, mod)
130
+ return mod
131
+ })
132
+ : [options.routes[`/${options.routerRoot}/_layout.tsx`]?.()]
133
+
134
+ return Promise.all(preloadPromises)
123
135
  .then(() => {
124
- resolveClientLoader(getServerContext() || {})
125
- .then(() => {
126
- // on client we just render
127
- render(
128
- <Root
129
- isClient
130
- flags={options.flags}
131
- routes={options.routes}
132
- routerRoot={options.routerRoot}
133
- path={window.location.href}
134
- />
135
- )
136
- })
137
- .catch((err) => {
138
- console.error(`Error running client loader resolver "onClientLoaderResolve":`, err)
139
- })
136
+ return resolveClientLoader(serverContext)
137
+ })
138
+ .then(() => {
139
+ render(
140
+ <Root
141
+ isClient
142
+ flags={options.flags}
143
+ routes={options.routes}
144
+ routerRoot={options.routerRoot}
145
+ path={window.location.href}
146
+ />
147
+ )
140
148
  })
141
149
  .catch((err) => {
142
- console.error(`Error importing root layout on client`, err)
150
+ console.error(`Error during client initialization:`, err)
143
151
  })
144
152
  }
@@ -157,9 +157,18 @@ export function useLinking(
157
157
  (state: ResultState) => {
158
158
  const navigation = ref.current
159
159
  const rootState = navigation?.getRootState()
160
+ // @modified - start
161
+ // Fix for back/forward button navigation: if routeNames is undefined (stale state),
162
+ // don't reject the navigation. This can happen during browser back/forward.
163
+ // See: https://github.com/expo/expo/pull/37747
164
+ const routeNames = rootState?.routeNames
165
+ if (!routeNames) {
166
+ return false // Don't reject navigation if we can't validate
167
+ }
168
+ // @modified - end
160
169
  // Make sure that the routes in the state exist in the root navigator
161
170
  // Otherwise there's an error in the linking configuration
162
- return state?.routes.some((r) => !rootState?.routeNames?.includes(r.name))
171
+ return state?.routes.some((r) => !routeNames.includes(r.name))
163
172
  },
164
173
  [ref]
165
174
  )
package/src/index.ts CHANGED
@@ -66,6 +66,7 @@ export { createRoute, route } from './router/createRoute'
66
66
  export { router } from './router/imperative-api'
67
67
  export * as routerStore from './router/router'
68
68
  export { useNavigation } from './router/useNavigation'
69
+ export { registerPreloadedRoute } from './router/useViteRoutes'
69
70
  export type { Endpoint, LoaderProps } from './types'
70
71
  // React Navigation
71
72
  export { useFocusEffect } from './useFocusEffect'
@@ -24,6 +24,7 @@ import { getLinking, resetLinking, setupLinking } from './linkingConfig'
24
24
  import type { RouteNode } from './Route'
25
25
  import { sortRoutes } from './sortRoutes'
26
26
  import { getQualifiedRouteComponent } from './useScreens'
27
+ import { preloadRouteModules } from './useViteRoutes'
27
28
  import { getNavigateAction } from './utils/getNavigateAction'
28
29
 
29
30
  // Module-scoped variables
@@ -367,38 +368,49 @@ export function cleanup() {
367
368
  }
368
369
 
369
370
  // TODO
370
- export const preloadingLoader = {}
371
-
372
- function setupPreload(href: string) {
373
- if (preloadingLoader[href]) return
374
- preloadingLoader[href] = async () => {
375
- try {
376
- const [_preload, loader] = await Promise.all([
377
- dynamicImport(getPreloadPath(href)),
378
- dynamicImport(getLoaderPath(href)),
379
- ])
380
- const response = await loader
381
- return await response.loader?.()
382
- } catch (err) {
383
- console.error(`Error preloading loader: ${err}`)
371
+ export const preloadingLoader: Record<string, Promise<any> | undefined> = {}
372
+
373
+ async function doPreload(href: string) {
374
+ const preloadPath = getPreloadPath(href)
375
+ const loaderPath = getLoaderPath(href)
376
+ try {
377
+ const [_preload, loader] = await Promise.all([
378
+ dynamicImport(preloadPath),
379
+ dynamicImport(loaderPath),
380
+ preloadRouteModules(href),
381
+ ])
382
+
383
+ if (!loader?.loader) {
384
384
  return null
385
385
  }
386
+
387
+ const result = await loader.loader()
388
+ return result ?? null
389
+ } catch (err) {
390
+ console.error(`[one] preload error for ${href}:`, err)
391
+ return null
386
392
  }
387
393
  }
388
394
 
389
- export function preloadRoute(href: string) {
395
+ // Store resolved preload data separately from promises
396
+ export const preloadedLoaderData: Record<string, any> = {}
397
+
398
+ export function preloadRoute(href: string): Promise<any> | undefined {
390
399
  if (process.env.TAMAGUI_TARGET === 'native') {
391
- // not enabled for now
392
400
  return
393
401
  }
394
402
  if (process.env.NODE_ENV === 'development') {
395
403
  return
396
404
  }
397
405
 
398
- setupPreload(href)
399
- if (typeof preloadingLoader[href] === 'function') {
400
- void preloadingLoader[href]()
406
+ if (!preloadingLoader[href]) {
407
+ preloadingLoader[href] = doPreload(href).then((data) => {
408
+ // Store the resolved data for synchronous access
409
+ preloadedLoaderData[href] = data
410
+ return data
411
+ })
401
412
  }
413
+ return preloadingLoader[href]
402
414
  }
403
415
 
404
416
  export async function linkTo(href: string, event?: string, options?: OneRouter.LinkToOptions) {
@@ -477,7 +489,8 @@ export async function linkTo(href: string, event?: string, options?: OneRouter.L
477
489
 
478
490
  setLoadingState('loading')
479
491
 
480
- preloadRoute(href)
492
+ // await preload on web to ensure route modules are loaded before navigating
493
+ await preloadRoute(href)
481
494
 
482
495
  const rootState = navigationRef.getRootState()
483
496