one 1.16.12 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/cjs/babel-preset/index.cjs +154 -0
  2. package/dist/cjs/babel-preset/index.native.js +186 -0
  3. package/dist/cjs/babel-preset/index.native.js.map +1 -0
  4. package/dist/cjs/babel-preset/index.test.cjs +143 -0
  5. package/dist/cjs/babel-preset/index.test.native.js +165 -0
  6. package/dist/cjs/babel-preset/index.test.native.js.map +1 -0
  7. package/dist/cjs/babel-preset/integration.test.cjs +94 -0
  8. package/dist/cjs/babel-preset/integration.test.native.js +97 -0
  9. package/dist/cjs/babel-preset/integration.test.native.js.map +1 -0
  10. package/dist/cjs/cli/generateBundlerConfig.cjs +247 -0
  11. package/dist/cjs/cli/generateBundlerConfig.native.js +316 -0
  12. package/dist/cjs/cli/generateBundlerConfig.native.js.map +1 -0
  13. package/dist/cjs/cli/generateBundlerConfig.test.cjs +350 -0
  14. package/dist/cjs/cli/generateBundlerConfig.test.native.js +380 -0
  15. package/dist/cjs/cli/generateBundlerConfig.test.native.js.map +1 -0
  16. package/dist/cjs/cli/patch.cjs +19 -2
  17. package/dist/cjs/cli/patch.native.js +26 -2
  18. package/dist/cjs/cli/patch.native.js.map +1 -1
  19. package/dist/cjs/cli/patch.test.cjs +56 -0
  20. package/dist/cjs/cli/patch.test.native.js +65 -0
  21. package/dist/cjs/cli/patch.test.native.js.map +1 -0
  22. package/dist/cjs/cli.cjs +39 -2
  23. package/dist/cjs/cli.native.js +40 -2
  24. package/dist/cjs/cli.native.js.map +1 -1
  25. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.cjs +102 -0
  26. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.native.js +109 -0
  27. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.native.js.map +1 -0
  28. package/dist/cjs/metro-config/getViteMetroPluginOptions.cjs +17 -150
  29. package/dist/cjs/metro-config/getViteMetroPluginOptions.integration.test.cjs +84 -0
  30. package/dist/cjs/metro-config/getViteMetroPluginOptions.integration.test.native.js +90 -0
  31. package/dist/cjs/metro-config/getViteMetroPluginOptions.integration.test.native.js.map +1 -0
  32. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js +17 -158
  33. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
  34. package/dist/cjs/metro-config/withOne.cjs +82 -0
  35. package/dist/cjs/metro-config/withOne.native.js +88 -0
  36. package/dist/cjs/metro-config/withOne.native.js.map +1 -0
  37. package/dist/cjs/metro-config/withOne.test.cjs +129 -0
  38. package/dist/cjs/metro-config/withOne.test.native.js +156 -0
  39. package/dist/cjs/metro-config/withOne.test.native.js.map +1 -0
  40. package/dist/cjs/vite/loadConfig.cjs +20 -1
  41. package/dist/cjs/vite/loadConfig.native.js +20 -1
  42. package/dist/cjs/vite/loadConfig.native.js.map +1 -1
  43. package/dist/cjs/vite/plugins/warmRoutesPlugin.cjs +13 -7
  44. package/dist/cjs/vite/plugins/warmRoutesPlugin.native.js +13 -7
  45. package/dist/cjs/vite/plugins/warmRoutesPlugin.native.js.map +1 -1
  46. package/dist/esm/babel-preset/index.mjs +116 -0
  47. package/dist/esm/babel-preset/index.mjs.map +1 -0
  48. package/dist/esm/babel-preset/index.native.js +145 -0
  49. package/dist/esm/babel-preset/index.native.js.map +1 -0
  50. package/dist/esm/babel-preset/index.test.mjs +120 -0
  51. package/dist/esm/babel-preset/index.test.mjs.map +1 -0
  52. package/dist/esm/babel-preset/index.test.native.js +139 -0
  53. package/dist/esm/babel-preset/index.test.native.js.map +1 -0
  54. package/dist/esm/babel-preset/integration.test.mjs +71 -0
  55. package/dist/esm/babel-preset/integration.test.mjs.map +1 -0
  56. package/dist/esm/babel-preset/integration.test.native.js +71 -0
  57. package/dist/esm/babel-preset/integration.test.native.js.map +1 -0
  58. package/dist/esm/cli/generateBundlerConfig.mjs +207 -0
  59. package/dist/esm/cli/generateBundlerConfig.mjs.map +1 -0
  60. package/dist/esm/cli/generateBundlerConfig.native.js +273 -0
  61. package/dist/esm/cli/generateBundlerConfig.native.js.map +1 -0
  62. package/dist/esm/cli/generateBundlerConfig.test.mjs +327 -0
  63. package/dist/esm/cli/generateBundlerConfig.test.mjs.map +1 -0
  64. package/dist/esm/cli/generateBundlerConfig.test.native.js +354 -0
  65. package/dist/esm/cli/generateBundlerConfig.test.native.js.map +1 -0
  66. package/dist/esm/cli/patch.mjs +19 -2
  67. package/dist/esm/cli/patch.mjs.map +1 -1
  68. package/dist/esm/cli/patch.native.js +26 -2
  69. package/dist/esm/cli/patch.native.js.map +1 -1
  70. package/dist/esm/cli/patch.test.mjs +57 -0
  71. package/dist/esm/cli/patch.test.mjs.map +1 -0
  72. package/dist/esm/cli/patch.test.native.js +63 -0
  73. package/dist/esm/cli/patch.test.native.js.map +1 -0
  74. package/dist/esm/cli.mjs +39 -2
  75. package/dist/esm/cli.mjs.map +1 -1
  76. package/dist/esm/cli.native.js +40 -2
  77. package/dist/esm/cli.native.js.map +1 -1
  78. package/dist/esm/metro-config/buildOneMetroResolverOverrides.mjs +66 -0
  79. package/dist/esm/metro-config/buildOneMetroResolverOverrides.mjs.map +1 -0
  80. package/dist/esm/metro-config/buildOneMetroResolverOverrides.native.js +70 -0
  81. package/dist/esm/metro-config/buildOneMetroResolverOverrides.native.js.map +1 -0
  82. package/dist/esm/metro-config/getViteMetroPluginOptions.integration.test.mjs +61 -0
  83. package/dist/esm/metro-config/getViteMetroPluginOptions.integration.test.mjs.map +1 -0
  84. package/dist/esm/metro-config/getViteMetroPluginOptions.integration.test.native.js +64 -0
  85. package/dist/esm/metro-config/getViteMetroPluginOptions.integration.test.native.js.map +1 -0
  86. package/dist/esm/metro-config/getViteMetroPluginOptions.mjs +17 -138
  87. package/dist/esm/metro-config/getViteMetroPluginOptions.mjs.map +1 -1
  88. package/dist/esm/metro-config/getViteMetroPluginOptions.native.js +17 -146
  89. package/dist/esm/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
  90. package/dist/esm/metro-config/withOne.mjs +45 -0
  91. package/dist/esm/metro-config/withOne.mjs.map +1 -0
  92. package/dist/esm/metro-config/withOne.native.js +48 -0
  93. package/dist/esm/metro-config/withOne.native.js.map +1 -0
  94. package/dist/esm/metro-config/withOne.test.mjs +106 -0
  95. package/dist/esm/metro-config/withOne.test.mjs.map +1 -0
  96. package/dist/esm/metro-config/withOne.test.native.js +130 -0
  97. package/dist/esm/metro-config/withOne.test.native.js.map +1 -0
  98. package/dist/esm/vite/loadConfig.mjs +20 -1
  99. package/dist/esm/vite/loadConfig.mjs.map +1 -1
  100. package/dist/esm/vite/loadConfig.native.js +20 -1
  101. package/dist/esm/vite/loadConfig.native.js.map +1 -1
  102. package/dist/esm/vite/plugins/warmRoutesPlugin.mjs +13 -7
  103. package/dist/esm/vite/plugins/warmRoutesPlugin.mjs.map +1 -1
  104. package/dist/esm/vite/plugins/warmRoutesPlugin.native.js +13 -7
  105. package/dist/esm/vite/plugins/warmRoutesPlugin.native.js.map +1 -1
  106. package/package.json +20 -9
  107. package/src/babel-preset/index.test.ts +148 -0
  108. package/src/babel-preset/index.ts +250 -0
  109. package/src/babel-preset/integration.test.ts +91 -0
  110. package/src/cli/generateBundlerConfig.test.ts +343 -0
  111. package/src/cli/generateBundlerConfig.ts +339 -0
  112. package/src/cli/patch.test.ts +65 -0
  113. package/src/cli/patch.ts +30 -2
  114. package/src/cli.ts +31 -0
  115. package/src/metro-config/buildOneMetroResolverOverrides.ts +104 -0
  116. package/src/metro-config/getViteMetroPluginOptions.integration.test.ts +75 -0
  117. package/src/metro-config/getViteMetroPluginOptions.ts +15 -230
  118. package/src/metro-config/withOne.test.ts +120 -0
  119. package/src/metro-config/withOne.ts +112 -0
  120. package/src/vite/loadConfig.ts +22 -0
  121. package/src/vite/plugins/warmRoutesPlugin.ts +22 -6
  122. package/types/babel-preset/index.d.ts +68 -0
  123. package/types/babel-preset/index.d.ts.map +1 -0
  124. package/types/babel-preset/index.test.d.ts +2 -0
  125. package/types/babel-preset/index.test.d.ts.map +1 -0
  126. package/types/babel-preset/integration.test.d.ts +2 -0
  127. package/types/babel-preset/integration.test.d.ts.map +1 -0
  128. package/types/cli/generateBundlerConfig.d.ts +61 -0
  129. package/types/cli/generateBundlerConfig.d.ts.map +1 -0
  130. package/types/cli/generateBundlerConfig.test.d.ts +2 -0
  131. package/types/cli/generateBundlerConfig.test.d.ts.map +1 -0
  132. package/types/cli/patch.d.ts.map +1 -1
  133. package/types/cli/patch.test.d.ts +2 -0
  134. package/types/cli/patch.test.d.ts.map +1 -0
  135. package/types/metro-config/buildOneMetroResolverOverrides.d.ts +20 -0
  136. package/types/metro-config/buildOneMetroResolverOverrides.d.ts.map +1 -0
  137. package/types/metro-config/getViteMetroPluginOptions.d.ts +0 -5
  138. package/types/metro-config/getViteMetroPluginOptions.d.ts.map +1 -1
  139. package/types/metro-config/getViteMetroPluginOptions.integration.test.d.ts +2 -0
  140. package/types/metro-config/getViteMetroPluginOptions.integration.test.d.ts.map +1 -0
  141. package/types/metro-config/withOne.d.ts +44 -0
  142. package/types/metro-config/withOne.d.ts.map +1 -0
  143. package/types/metro-config/withOne.test.d.ts +2 -0
  144. package/types/metro-config/withOne.test.d.ts.map +1 -0
  145. package/types/vite/loadConfig.d.ts +1 -0
  146. package/types/vite/loadConfig.d.ts.map +1 -1
  147. package/types/vite/plugins/warmRoutesPlugin.d.ts.map +1 -1
  148. package/dist/cjs/metro-config/getViteMetroPluginOptions.test.cjs +0 -23
  149. package/dist/cjs/metro-config/getViteMetroPluginOptions.test.native.js +0 -26
  150. package/dist/cjs/metro-config/getViteMetroPluginOptions.test.native.js.map +0 -1
  151. package/dist/esm/metro-config/getViteMetroPluginOptions.test.mjs +0 -24
  152. package/dist/esm/metro-config/getViteMetroPluginOptions.test.mjs.map +0 -1
  153. package/dist/esm/metro-config/getViteMetroPluginOptions.test.native.js +0 -24
  154. package/dist/esm/metro-config/getViteMetroPluginOptions.test.native.js.map +0 -1
  155. package/src/metro-config/getViteMetroPluginOptions.test.ts +0 -34
  156. package/types/metro-config/getViteMetroPluginOptions.test.d.ts +0 -2
  157. package/types/metro-config/getViteMetroPluginOptions.test.d.ts.map +0 -1
@@ -11,10 +11,18 @@ function getUserOneOptions() {
11
11
  async function loadUserOneOptions(command) {
12
12
  var silent = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
13
13
  var originalConsoleError = console.error;
14
+ var previousIsVxrnCli = process.env.IS_VXRN_CLI;
15
+ var previousOneOptions = globalThis["__oneOptions"];
16
+ var previousVxrnPluginConfig = globalThis["__vxrnPluginConfig__"];
17
+ var previousVxrnMetroOptions = globalThis["__vxrnMetroOptions__"];
14
18
  if (silent) {
15
19
  console.error = function () {};
16
20
  }
17
21
  try {
22
+ process.env.IS_VXRN_CLI = "true";
23
+ delete globalThis["__oneOptions"];
24
+ delete globalThis["__vxrnPluginConfig__"];
25
+ delete globalThis["__vxrnMetroOptions__"];
18
26
  var config = await loadConfigFromFile({
19
27
  mode: command === "serve" ? "dev" : "prod",
20
28
  command
@@ -28,9 +36,20 @@ async function loadUserOneOptions(command) {
28
36
  }
29
37
  return {
30
38
  config,
31
- oneOptions
39
+ oneOptions,
40
+ metroOptions: globalThis["__vxrnMetroOptions__"]
32
41
  };
42
+ } catch (error) {
43
+ globalThis["__oneOptions"] = previousOneOptions;
44
+ globalThis["__vxrnPluginConfig__"] = previousVxrnPluginConfig;
45
+ globalThis["__vxrnMetroOptions__"] = previousVxrnMetroOptions;
46
+ throw error;
33
47
  } finally {
48
+ if (previousIsVxrnCli === void 0) {
49
+ delete process.env.IS_VXRN_CLI;
50
+ } else {
51
+ process.env.IS_VXRN_CLI = previousIsVxrnCli;
52
+ }
34
53
  if (silent) {
35
54
  console.error = originalConsoleError;
36
55
  }
@@ -1 +1 @@
1
- {"version":3,"names":["loadConfigFromFile","setOneOptions","next","globalThis","__oneOptions","getUserOneOptions","Error","loadUserOneOptions","command","silent","arguments","length","originalConsoleError","console","error","config","mode","process","cwd","oneOptions"],"sources":["../../../src/vite/loadConfig.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,kBAAA,QAA0B;AAM5B,SAASC,cAAcC,IAAA,EAAyB;EACrDC,UAAA,CAAWC,YAAA,GAAeF,IAAA;AAC5B;AAEA,SAASG,kBAAA,EAAoB;EAC3B,IAAI,CAACF,UAAA,CAAWC,YAAA,EAAc;IAC5B,MAAM,IAAIE,KAAA;EAAA;EACR,OACFH,UAAA,CAAAC,YAAA;AAAA;AAEF,eAAOG,kBAAWA,CAAAC,OAAA;EACpB,IAAAC,MAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;EAEA,IAAAE,oBAAsB,GAAAC,OAAmB,CAAAC,KAAA;EAEvC,IAAAL,MAAM;IACNI,OAAI,CAAAC,KAAQ,gBACV;EAAsB;EACxB;IAEA,IAAIC,MAAA,SAAAf,kBAAA;MACFgB,IAAM,EAAAR,OAAS,YAAM,iBAAmB;MACtCA;IAAoC,EACpC;IACF,IAAC,CAAAO,MAAA;MAED,MAAK,IAAAT,KAAQ,wBAAAW,OAAA,CAAAC,GAAA;IACX;IAAU,IACRC,UAAA,GAAAd,iBAAuB,CAAQ;IAAK,IACtC,CAAAc,UAAA;MACF,UAAAb,KAAA;IAEA;IAEA,OAAK;MACHS,MAAM;MACRI;IAEA;EAAO,UACL;IAAA,IACAV,MAAA;MACFI,OAAA,CAAAC,KAAA,GAAAF,oBAAA;IACF;EACE;AACE;AAAgB,SAEpBL,kBAAA,EACFN,aAAA","ignoreList":[]}
1
+ {"version":3,"names":["loadConfigFromFile","setOneOptions","next","globalThis","__oneOptions","getUserOneOptions","Error","loadUserOneOptions","command","silent","arguments","length","originalConsoleError","console","error","previousIsVxrnCli","process","env","IS_VXRN_CLI","previousOneOptions","previousVxrnPluginConfig","previousVxrnMetroOptions","config","mode","cwd","oneOptions","metroOptions"],"sources":["../../../src/vite/loadConfig.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,kBAAA,QAA0B;AAM5B,SAASC,cAAcC,IAAA,EAAyB;EACrDC,UAAA,CAAWC,YAAA,GAAeF,IAAA;AAC5B;AAEA,SAASG,kBAAA,EAAoB;EAC3B,IAAI,CAACF,UAAA,CAAWC,YAAA,EAAc;IAC5B,MAAM,IAAIE,KAAA;EAAA;EACR,OACFH,UAAA,CAAAC,YAAA;AAAA;AAEF,eAAOG,kBAAWA,CAAAC,OAAA;EACpB,IAAAC,MAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;EAEA,IAAAE,oBAAsB,GAAAC,OAAmB,CAAAC,KAAA;EAEvC,IAAAC,iBAAM,GAAAC,OAAuB,CAAAC,GAAA,CAAAC,WAAQ;EACrC,IAAAC,kBAAM,GAAAhB,UAA4B,eAAI;EACtC,IAAAiB,wBAA2B,GAAAjB,UAAW,uBAAc;EACpD,IAAAkB,wBAAM,GAAAlB,UAA2B,uBAAW;EAC5C,IAAAM,MAAM;IAENI,OAAI,CAAAC,KAAQ,gBACV;EAAsB;EACxB;IAEAE,OAAI,CAAAC,GAAA,CAAAC,WAAA;IACF,OAAAf,UAAY,eAAc;IAC1B,OAAOA,UAAA,CAAW,sBAAc;IAChC,OAAOA,UAAA,CAAW,sBAAsB;IACxC,IAAAmB,MAAO,SAAWtB,kBAAA;MAElBuB,IAAM,EAAAf,OAAS,YAAM,iBAAmB;MACtCA;IAAoC,EACpC;IACF,IAAC,CAAAc,MAAA;MAED,MAAK,IAAAhB,KAAQ,wBAAAU,OAAA,CAAAQ,GAAA;IACX;IAAU,IACRC,UAAA,GAAApB,iBAAuB,CAAQ;IAAK,IACtC,CAAAoB,UAAA;MACF,UAAAnB,KAAA;IAEA;IAEA,OAAK;MACHgB,MAAM;MACRG,UAAA;MAEAC,YAAO,EAAAvB,UAAA;IAAA;EACL,SACAW,KAAA;IAAAX,UACA,eAAc,IAAWgB,kBAAA;IAC3BhB,UAAA,2BAAAiB,wBAAA;IACFjB,UAAS,uBAAO,IAAAkB,wBAAA;IACd,MAAAP,KAAW;EACX;IACA,IAAAC,iBAAW,aAAsB;MACjC,OAAMC,OAAA,CAAAC,GAAA,CAAAC,WAAA;IACR;MACEF,OAAI,CAAAC,GAAA,CAAAC,WAAA,GAAsBH,iBAAW;IACnC;IACF,IAAAN,MAAO;MACLI,OAAA,CAAQC,KAAI,GAAAF,oBAAc;IAC5B;EAEA;AACE;AAAgB,SAEpBL,kBAAA,EACFN,aAAA","ignoreList":[]}
@@ -55,24 +55,30 @@ function autoWarmPlugin(persistPath) {
55
55
  lastDepsCount = currentDeps.length;
56
56
  const depsToCache = currentDeps.filter(d => !userInclude.has(d) && !excludeSet.has(d));
57
57
  const allDeps = new Set(depsToCache);
58
- try {
59
- if (existsSync(cacheFile)) {
60
- const existing = JSON.parse(readFileSync(cacheFile, "utf-8"));
58
+ let existingRaw;
59
+ if (existsSync(cacheFile)) {
60
+ try {
61
+ existingRaw = readFileSync(cacheFile, "utf-8");
62
+ const existing = JSON.parse(existingRaw);
61
63
  if (Array.isArray(existing.deps)) {
62
64
  for (const d of existing.deps) {
63
65
  if (!excludeSet.has(d)) allDeps.add(d);
64
66
  }
65
67
  }
68
+ } catch {
69
+ return;
66
70
  }
67
- } catch {}
71
+ }
68
72
  const sorted = [...allDeps].sort();
73
+ const nextRaw = JSON.stringify({
74
+ deps: sorted
75
+ }, null, 2);
76
+ if (existingRaw === nextRaw) return;
69
77
  const dir = dirname(cacheFile);
70
78
  if (!existsSync(dir)) mkdirSync(dir, {
71
79
  recursive: true
72
80
  });
73
- writeFileSync(cacheFile, JSON.stringify({
74
- deps: sorted
75
- }, null, 2));
81
+ writeFileSync(cacheFile, nextRaw);
76
82
  console.info(`[one] cached ${sorted.length} deps for next startup`);
77
83
  } catch {}
78
84
  }
@@ -1 +1 @@
1
- {"version":3,"names":["existsSync","readFileSync","writeFileSync","mkdirSync","join","dirname","WARM_DEPS_FILE","TRACKING_WINDOW","autoWarmPlugin","persistPath","cacheFile","cachedDeps","excludeSet","name","apply","config","volatileCache","process","cwd","cached","JSON","parse","Array","isArray","deps","length","console","info","optimizeDeps","include","configResolved","Set","exclude","size","conflicts","filter","d","has","configureServer","server","lastDepsCount","timer","userInclude","includes","snapshotDeps","optimizer","environments","client","depsOptimizer","_depsOptimizer","metadata","optimized","discovered","currentDeps","Object","keys","depsToCache","allDeps","existing","add","sorted","sort","dir","recursive","stringify","httpServer","once","setInterval","setTimeout","clearInterval","origClose","close","bind","warmRoutesPlugin"],"sources":["../../../../src/vite/plugins/warmRoutesPlugin.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,UAAA,EAAYC,YAAA,EAAcC,aAAA,EAAeC,SAAA,QAAiB;AACnE,SAASC,IAAA,EAAMC,OAAA,QAAe;AAG9B,MAAMC,cAAA,GAAiB;AAGvB,MAAMC,eAAA,GAAkB,IAAI,KAAK;AAe1B,SAASC,eAAeC,WAAA,EAA8B;EAC3D,IAAIC,SAAA;EACJ,IAAIC,UAAA,GAAuB,EAAC;EAC5B,IAAIC,UAAA;EAEJ,OAAO;IACLC,IAAA,EAAM;IACNC,KAAA,EAAO;IAEPC,OAAA,EAAS;MACP,MAAMC,aAAA,GAAgBZ,IAAA,CAAKa,OAAA,CAAQC,GAAA,CAAI,GAAG,gBAAgB,SAASZ,cAAc;MACjFI,SAAA,GACE,OAAOD,WAAA,KAAgB,WAAWL,IAAA,CAAKa,OAAA,CAAQC,GAAA,CAAI,GAAGT,WAAW,IAAIO,aAAA;MAEvE,IAAI;QACF,IAAIhB,UAAA,CAAWU,SAAS,GAAG;UACzB,MAAMS,MAAA,GAASC,IAAA,CAAKC,KAAA,CAAMpB,YAAA,CAAaS,SAAA,EAAW,OAAO,CAAC;UAC1D,IAAIY,KAAA,CAAMC,OAAA,CAAQJ,MAAA,CAAOK,IAAI,KAAKL,MAAA,CAAOK,IAAA,CAAKC,MAAA,GAAS,GAAG;YACxDd,UAAA,GAAaQ,MAAA,CAAOK,IAAA;YACpBE,OAAA,CAAQC,IAAA,CAAK,iBAAiBR,MAAA,CAAOK,IAAA,CAAKC,MAAM,mBAAmB;YAEnE,OAAO;cACLG,YAAA,EAAc;gBACZC,OAAA,EAASV,MAAA,CAAOK;cAClB;YACF;UACF;QACF;MACF,QAAQ,CAER;IACF;IAEAM,eAAef,MAAA,EAAwB;MAErCH,UAAA,GAAa,IAAImB,GAAA,CAAIhB,MAAA,CAAOa,YAAA,CAAaI,OAAA,IAAW,EAAE;MAEtD,IAAIrB,UAAA,CAAWc,MAAA,GAAS,KAAKb,UAAA,CAAWqB,IAAA,GAAO,GAAG;QAEhD,MAAMC,SAAA,GAAYvB,UAAA,CAAWwB,MAAA,CAAQC,CAAA,IAAMxB,UAAA,CAAWyB,GAAA,CAAID,CAAC,CAAC;QAC5D,IAAIF,SAAA,CAAUT,MAAA,GAAS,GAAG;UACxBC,OAAA,CAAQC,IAAA,CAAK,kBAAkBO,SAAA,CAAUT,MAAM,gCAAgC;UAG/E,IAAIV,MAAA,CAAOa,YAAA,CAAaC,OAAA,EAAS;YAC/B;YAAEd,MAAA,CAAOa,YAAA,CAAqBC,OAAA,GAAUd,MAAA,CAAOa,YAAA,CAAaC,OAAA,CAAQM,MAAA,CACjEC,CAAA,IAAc,CAACxB,UAAA,CAAWyB,GAAA,CAAID,CAAC,CAClC;UACF;QACF;MACF;IACF;IAEAE,gBAAgBC,MAAA,EAAQ;MACtB,IAAIC,aAAA,GAAgB;MACpB,IAAIC,KAAA;MAGJ,MAAMC,WAAA,GAAc,IAAIX,GAAA,EACrBQ,MAAA,CAAOxB,MAAA,CAAOa,YAAA,CAAaC,OAAA,IAAW,EAAC,EAAGM,MAAA,CAAQC,CAAA,IAAM,CAACzB,UAAA,CAAWgC,QAAA,CAASP,CAAC,CAAC,CAClF;MAEA,SAASQ,aAAA,EAAe;QACtB,IAAI;UACF,MAAMC,SAAA,GACHN,MAAA,CAAeO,YAAA,EAAcC,MAAA,EAAQC,aAAA,IACrCT,MAAA,CAAeU,cAAA;UAElB,IAAI,CAACJ,SAAA,EAAWK,QAAA,EAAU;UAE1B,MAAMC,SAAA,GAAYN,SAAA,CAAUK,QAAA,CAASC,SAAA;UACrC,MAAMC,UAAA,GAAaP,SAAA,CAAUK,QAAA,CAASE,UAAA;UAEtC,MAAMC,WAAA,GAAc,CAClB,GAAGC,MAAA,CAAOC,IAAA,CAAKJ,SAAA,IAAa,CAAC,CAAC,GAC9B,GAAGG,MAAA,CAAOC,IAAA,CAAKH,UAAA,IAAc,CAAC,CAAC,EACjC;UAEA,IAAIC,WAAA,CAAY5B,MAAA,KAAW,KAAK4B,WAAA,CAAY5B,MAAA,KAAWe,aAAA,EAAe;UACtEA,aAAA,GAAgBa,WAAA,CAAY5B,MAAA;UAK5B,MAAM+B,WAAA,GAAcH,WAAA,CAAYlB,MAAA,CAC7BC,CAAA,IAAM,CAACM,WAAA,CAAYL,GAAA,CAAID,CAAC,KAAK,CAACxB,UAAA,CAAWyB,GAAA,CAAID,CAAC,CACjD;UAGA,MAAMqB,OAAA,GAAU,IAAI1B,GAAA,CAAIyB,WAAW;UACnC,IAAI;YACF,IAAIxD,UAAA,CAAWU,SAAS,GAAG;cACzB,MAAMgD,QAAA,GAAWtC,IAAA,CAAKC,KAAA,CAAMpB,YAAA,CAAaS,SAAA,EAAW,OAAO,CAAC;cAC5D,IAAIY,KAAA,CAAMC,OAAA,CAAQmC,QAAA,CAASlC,IAAI,GAAG;gBAChC,WAAWY,CAAA,IAAKsB,QAAA,CAASlC,IAAA,EAAM;kBAC7B,IAAI,CAACZ,UAAA,CAAWyB,GAAA,CAAID,CAAC,GAAGqB,OAAA,CAAQE,GAAA,CAAIvB,CAAC;gBACvC;cACF;YACF;UACF,QAAQ,CAAC;UAET,MAAMwB,MAAA,GAAS,CAAC,GAAGH,OAAO,EAAEI,IAAA,CAAK;UACjC,MAAMC,GAAA,GAAMzD,OAAA,CAAQK,SAAS;UAC7B,IAAI,CAACV,UAAA,CAAW8D,GAAG,GAAG3D,SAAA,CAAU2D,GAAA,EAAK;YAAEC,SAAA,EAAW;UAAK,CAAC;UAExD7D,aAAA,CAAcQ,SAAA,EAAWU,IAAA,CAAK4C,SAAA,CAAU;YAAExC,IAAA,EAAMoC;UAAO,GAAG,MAAM,CAAC,CAAC;UAClElC,OAAA,CAAQC,IAAA,CAAK,gBAAgBiC,MAAA,CAAOnC,MAAM,wBAAwB;QACpE,QAAQ,CAER;MACF;MAEAc,MAAA,CAAO0B,UAAA,EAAYC,IAAA,CAAK,aAAa,MAAM;QACzCzB,KAAA,GAAQ0B,WAAA,CAAYvB,YAAA,EAAc,GAAI;QAEtCwB,UAAA,CAAW,MAAM;UACfC,aAAA,CAAc5B,KAAK;UACnBG,YAAA,CAAa;QACf,GAAGrC,eAAe;MACpB,CAAC;MAGD,MAAM+D,SAAA,GAAY/B,MAAA,CAAOgC,KAAA,CAAMC,IAAA,CAAKjC,MAAM;MAC1CA,MAAA,CAAOgC,KAAA,GAAQ,YAAY;QACzBF,aAAA,CAAc5B,KAAK;QACnBG,YAAA,CAAa;QACb,OAAO0B,SAAA,CAAU;MACnB;IACF;EACF;AACF;AAGO,MAAMG,gBAAA,GAAmBjE,cAAA","ignoreList":[]}
1
+ {"version":3,"names":["existsSync","readFileSync","writeFileSync","mkdirSync","join","dirname","WARM_DEPS_FILE","TRACKING_WINDOW","autoWarmPlugin","persistPath","cacheFile","cachedDeps","excludeSet","name","apply","config","volatileCache","process","cwd","cached","JSON","parse","Array","isArray","deps","length","console","info","optimizeDeps","include","configResolved","Set","exclude","size","conflicts","filter","d","has","configureServer","server","lastDepsCount","timer","userInclude","includes","snapshotDeps","optimizer","environments","client","depsOptimizer","_depsOptimizer","metadata","optimized","discovered","currentDeps","Object","keys","depsToCache","allDeps","existingRaw","existing","add","sorted","sort","nextRaw","stringify","dir","recursive","httpServer","once","setInterval","setTimeout","clearInterval","origClose","close","bind","warmRoutesPlugin"],"sources":["../../../../src/vite/plugins/warmRoutesPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -67,9 +67,11 @@ function autoWarmPlugin(persistPath) {
67
67
  return !userInclude.has(d2) && !excludeSet.has(d2);
68
68
  });
69
69
  var allDeps = new Set(depsToCache);
70
- try {
71
- if (existsSync(cacheFile)) {
72
- var existing = JSON.parse(readFileSync(cacheFile, "utf-8"));
70
+ var existingRaw;
71
+ if (existsSync(cacheFile)) {
72
+ try {
73
+ existingRaw = readFileSync(cacheFile, "utf-8");
74
+ var existing = JSON.parse(existingRaw);
73
75
  if (Array.isArray(existing.deps)) {
74
76
  var _iteratorNormalCompletion = true,
75
77
  _didIteratorError = false,
@@ -94,16 +96,20 @@ function autoWarmPlugin(persistPath) {
94
96
  }
95
97
  }
96
98
  }
99
+ } catch (unused) {
100
+ return;
97
101
  }
98
- } catch (unused) {}
102
+ }
99
103
  var sorted = [...allDeps].sort();
104
+ var nextRaw = JSON.stringify({
105
+ deps: sorted
106
+ }, null, 2);
107
+ if (existingRaw === nextRaw) return;
100
108
  var dir = dirname(cacheFile);
101
109
  if (!existsSync(dir)) mkdirSync(dir, {
102
110
  recursive: true
103
111
  });
104
- writeFileSync(cacheFile, JSON.stringify({
105
- deps: sorted
106
- }, null, 2));
112
+ writeFileSync(cacheFile, nextRaw);
107
113
  console.info(`[one] cached ${sorted.length} deps for next startup`);
108
114
  } catch (unused) {}
109
115
  }
@@ -1 +1 @@
1
- {"version":3,"names":["existsSync","readFileSync","writeFileSync","mkdirSync","join","dirname","WARM_DEPS_FILE","TRACKING_WINDOW","autoWarmPlugin","persistPath","cacheFile","cachedDeps","excludeSet","name","apply","config","volatileCache","process","cwd","cached","JSON","parse","Array","isArray","deps","length","console","info","optimizeDeps","include","unused","configResolved","Set","exclude","size","conflicts","filter","d","has","configureServer","server","_server_httpServer","lastDepsCount","timer","userInclude","includes","snapshotDeps","_ref","_server_environments_client","_server_environments","optimizer","environments","client","depsOptimizer","_depsOptimizer","metadata","optimized","discovered","currentDeps","Object","keys","depsToCache","d2","allDeps","existing","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","value","add","err","return","sorted"],"sources":["../../../../src/vite/plugins/warmRoutesPlugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["existsSync","readFileSync","writeFileSync","mkdirSync","join","dirname","WARM_DEPS_FILE","TRACKING_WINDOW","autoWarmPlugin","persistPath","cacheFile","cachedDeps","excludeSet","name","apply","config","volatileCache","process","cwd","cached","JSON","parse","Array","isArray","deps","length","console","info","optimizeDeps","include","unused","configResolved","Set","exclude","size","conflicts","filter","d","has","configureServer","server","_server_httpServer","lastDepsCount","timer","userInclude","includes","snapshotDeps","_ref","_server_environments_client","_server_environments","optimizer","environments","client","depsOptimizer","_depsOptimizer","metadata","optimized","discovered","currentDeps","Object","keys","depsToCache","d2","allDeps","existingRaw","existing","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","value","add","err","return","sorted","sort","nextRaw","stringify"],"sources":["../../../../src/vite/plugins/warmRoutesPlugin.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.16.12",
3
+ "version": "1.17.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "sideEffects": [
6
6
  "setup.mjs",
@@ -86,6 +86,16 @@
86
86
  "import": "./dist/esm/babel-plugins/inline-one-server-url.mjs",
87
87
  "require": "./dist/cjs/babel-plugins/inline-one-server-url.cjs"
88
88
  },
89
+ "./babel-preset": {
90
+ "types": "./types/babel-preset/index.d.ts",
91
+ "import": "./dist/esm/babel-preset/index.mjs",
92
+ "require": "./dist/cjs/babel-preset/index.cjs"
93
+ },
94
+ "./metro-config": {
95
+ "types": "./types/metro-config/withOne.d.ts",
96
+ "import": "./dist/esm/metro-config/withOne.mjs",
97
+ "require": "./dist/cjs/metro-config/withOne.cjs"
98
+ },
89
99
  "./getViteMetroPluginOptions": {
90
100
  "types": "./types/metro-config/getViteMetroPluginOptions.d.ts",
91
101
  "import": "./dist/esm/metro-config/getViteMetroPluginOptions.mjs",
@@ -170,17 +180,18 @@
170
180
  "@cloudflare/vite-plugin": "^1.33.1",
171
181
  "@swc/core": "^1.14.0",
172
182
  "@ungap/structured-clone": "^1.2.0",
173
- "@vxrn/color-scheme": "1.16.12",
174
- "@vxrn/compiler": "1.16.12",
175
- "@vxrn/resolve": "1.16.12",
176
- "@vxrn/tslib-lite": "1.16.12",
177
- "@vxrn/use-isomorphic-layout-effect": "1.16.12",
178
- "@vxrn/vite-plugin-metro": "1.16.12",
183
+ "@vxrn/color-scheme": "1.17.0",
184
+ "@vxrn/compiler": "1.17.0",
185
+ "@vxrn/resolve": "1.17.0",
186
+ "@vxrn/tslib-lite": "1.17.0",
187
+ "@vxrn/use-isomorphic-layout-effect": "1.17.0",
188
+ "@vxrn/vite-plugin-metro": "1.17.0",
179
189
  "babel-dead-code-elimination": "1.0.10",
180
190
  "babel-plugin-module-resolver": "^5.0.2",
191
+ "babel-preset-expo": "*",
181
192
  "citty": "^0.1.6",
182
193
  "core-js": "^3.38.1",
183
- "create-vxrn": "1.16.12",
194
+ "create-vxrn": "1.17.0",
184
195
  "escape-string-regexp": "^5.0.0",
185
196
  "expo-linking": "~55.0.7",
186
197
  "expo-modules-core": "~55.0.16",
@@ -200,7 +211,7 @@
200
211
  "tsconfig-paths": "^4",
201
212
  "use-latest-callback": "^0.2.3",
202
213
  "vite": "^8.0.0",
203
- "vxrn": "1.16.12",
214
+ "vxrn": "1.17.0",
204
215
  "ws": "^8.18.0",
205
216
  "xxhashjs": "^0.2.2"
206
217
  },
@@ -0,0 +1,148 @@
1
+ import path from 'node:path'
2
+ import { describe, expect, it } from 'vitest'
3
+ import oneBabelPreset, { buildOneBabelPlugins } from './index'
4
+
5
+ const projectRoot = path.resolve(__dirname, '../../')
6
+
7
+ const fakeApi = (cwd: string) => ({
8
+ cache: () => {},
9
+ cwd: () => cwd,
10
+ })
11
+
12
+ describe('one/babel-preset', () => {
13
+ it('returns presets and plugins', () => {
14
+ const result = oneBabelPreset(fakeApi(projectRoot), {
15
+ projectRoot,
16
+ // skip the babel-preset-expo lookup so this test runs without the
17
+ // expo SDK installed in the workspace root
18
+ includeExpoPreset: false,
19
+ })
20
+
21
+ expect(result).toHaveProperty('plugins')
22
+ expect(Array.isArray(result.plugins)).toBe(true)
23
+ // 5 One plugins + import-meta-env-plugin baked in for standalone Metro
24
+ expect(result.plugins).toHaveLength(6)
25
+ })
26
+
27
+ it('orders the plugin chain so server code is removed before router transforms', () => {
28
+ const { plugins } = oneBabelPreset(fakeApi(projectRoot), {
29
+ projectRoot,
30
+ includeExpoPreset: false,
31
+ })
32
+
33
+ const names = (plugins ?? []).map((p) => (Array.isArray(p) ? p[0] : p))
34
+ expect(names).toEqual([
35
+ '@vxrn/vite-plugin-metro/babel-plugins/import-meta-env-plugin',
36
+ 'one/babel-plugin-environment-guard',
37
+ 'one/babel-plugin-remove-server-code',
38
+ 'babel-plugin-module-resolver',
39
+ 'one/babel-plugin-one-router-metro',
40
+ 'one/babel-plugin-inline-one-server-url',
41
+ ])
42
+ })
43
+
44
+ it('defaults routerRoot to "app"', () => {
45
+ const { plugins } = oneBabelPreset(fakeApi(projectRoot), {
46
+ projectRoot,
47
+ includeExpoPreset: false,
48
+ })
49
+
50
+ const removeServer = (plugins ?? []).find(
51
+ (p): p is [string, Record<string, unknown>] =>
52
+ Array.isArray(p) && p[0] === 'one/babel-plugin-remove-server-code'
53
+ )
54
+
55
+ expect(removeServer?.[1].routerRoot).toBe('app')
56
+ })
57
+
58
+ it('threads custom routerRoot through', () => {
59
+ const { plugins } = oneBabelPreset(fakeApi(projectRoot), {
60
+ projectRoot,
61
+ routerRoot: 'src/routes',
62
+ includeExpoPreset: false,
63
+ })
64
+
65
+ const removeServer = (plugins ?? []).find(
66
+ (p): p is [string, Record<string, unknown>] =>
67
+ Array.isArray(p) && p[0] === 'one/babel-plugin-remove-server-code'
68
+ )
69
+
70
+ expect(removeServer?.[1].routerRoot).toBe('src/routes')
71
+ })
72
+
73
+ it('skips the One plugin chain when the Vite Metro caller already injected it', () => {
74
+ const result = oneBabelPreset(
75
+ {
76
+ cache: () => {},
77
+ cwd: () => projectRoot,
78
+ caller: <T>(cb: (caller: unknown) => T): T =>
79
+ cb({ oneViteMetroBabelConfig: true }),
80
+ },
81
+ {
82
+ projectRoot,
83
+ includeExpoPreset: false,
84
+ }
85
+ )
86
+
87
+ expect(result.plugins).toEqual([])
88
+ })
89
+ })
90
+
91
+ describe('buildOneBabelPlugins', () => {
92
+ it('produces the canonical One plugin chain (no env plugin)', () => {
93
+ const plugins = buildOneBabelPlugins({
94
+ projectRoot,
95
+ relativeRouterRoot: 'app',
96
+ ignoredRouteFiles: [],
97
+ linking: undefined,
98
+ setupFile: undefined,
99
+ // skip the import-meta-env plugin so the assertion covers the One-only chain
100
+ includeImportMetaEnv: false,
101
+ })
102
+
103
+ expect(plugins).toHaveLength(5)
104
+ expect(plugins[0]).toBe('one/babel-plugin-environment-guard')
105
+ expect(plugins[1]).toEqual([
106
+ 'one/babel-plugin-remove-server-code',
107
+ { routerRoot: 'app' },
108
+ ])
109
+ expect(plugins[2]).toMatchObject(['babel-plugin-module-resolver', { alias: {} }])
110
+
111
+ const oneRouterMetro = plugins[3] as [string, Record<string, unknown>]
112
+ expect(oneRouterMetro[0]).toBe('one/babel-plugin-one-router-metro')
113
+ expect(oneRouterMetro[1]).toMatchObject({
114
+ ONE_ROUTER_ROOT_FOLDER_NAME: 'app',
115
+ ONE_ROUTER_LINKING_CONFIG: undefined,
116
+ ONE_SETUP_FILE_NATIVE: undefined,
117
+ })
118
+ expect(typeof oneRouterMetro[1].ONE_ROUTER_APP_ROOT_RELATIVE_TO_ENTRY).toBe('string')
119
+ expect(typeof oneRouterMetro[1].ONE_ROUTER_REQUIRE_CONTEXT_REGEX_STRING).toBe('string')
120
+
121
+ expect(plugins[4]).toBe('one/babel-plugin-inline-one-server-url')
122
+ })
123
+
124
+ it('threads setupFile through as a path relative to the metro entry', () => {
125
+ const plugins = buildOneBabelPlugins({
126
+ projectRoot,
127
+ relativeRouterRoot: 'app',
128
+ setupFile: 'src/setup-native.ts',
129
+ includeImportMetaEnv: false,
130
+ })
131
+
132
+ const oneRouterMetro = plugins[3] as [string, Record<string, unknown>]
133
+ expect(oneRouterMetro[1].ONE_SETUP_FILE_NATIVE).toMatch(/setup-native\.ts$/)
134
+ })
135
+
136
+ it('passes the linking config through', () => {
137
+ const linking = { prefixes: ['myapp://'] }
138
+ const plugins = buildOneBabelPlugins({
139
+ projectRoot,
140
+ relativeRouterRoot: 'app',
141
+ linking,
142
+ includeImportMetaEnv: false,
143
+ })
144
+
145
+ const oneRouterMetro = plugins[3] as [string, Record<string, unknown>]
146
+ expect(oneRouterMetro[1].ONE_ROUTER_LINKING_CONFIG).toBe(linking)
147
+ })
148
+ })
@@ -0,0 +1,250 @@
1
+ import module from 'node:module'
2
+ import path from 'node:path'
3
+ import type { PluginItem, TransformOptions } from '@babel/core'
4
+ import mm from 'micromatch'
5
+ import tsconfigPaths from 'tsconfig-paths'
6
+ import {
7
+ API_ROUTE_GLOB_PATTERN,
8
+ ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS,
9
+ } from '../router/glob-patterns'
10
+
11
+ // Babel's `ConfigAPI` shape: cache mutator, env helper, and a cwd accessor.
12
+ // The public @babel/core typing omits `cwd()` so we describe it locally.
13
+ type BabelConfigAPI = {
14
+ cache?: ((forever?: boolean) => void) & {
15
+ forever?: () => void
16
+ never?: () => void
17
+ using?: (cb: () => unknown) => void
18
+ invalidate?: (cb: () => unknown) => void
19
+ }
20
+ cwd?: () => string
21
+ env?: (...args: unknown[]) => string | undefined
22
+ caller?: <T>(cb: (caller: unknown) => T) => T
23
+ }
24
+
25
+ export type OneBabelPresetOptions = {
26
+ /** Absolute path to the project root. Defaults to the babel `cwd`. */
27
+ projectRoot?: string
28
+ /** Router root folder relative to the project root. Defaults to `'app'`. */
29
+ routerRoot?: string
30
+ /** Route file patterns to exclude (same shape as `one({ router: { ignoredRouteFiles } })`). */
31
+ ignoredRouteFiles?: Array<`**/*${string}`>
32
+ /** Routing linking config, mirrors `one({ router: { linking } })`. */
33
+ linking?: unknown
34
+ /** Path to a native setup file, relative to the project root. */
35
+ setupFile?: string | { native?: string; ios?: string; android?: string }
36
+ /** Whether to include `babel-preset-expo` as the base preset. Defaults to true. */
37
+ includeExpoPreset?: boolean
38
+ /**
39
+ * Whether to include `@vxrn/vite-plugin-metro/babel-plugins/import-meta-env-plugin`.
40
+ * Defaults to true. The Vite-driven Metro server injects this separately via
41
+ * `patchMetroServerWithViteConfigAndMetroPluginOptions` using the user's Vite
42
+ * `define` config — so the Vite path passes `false`. Re-applying is idempotent.
43
+ */
44
+ includeImportMetaEnv?: boolean
45
+ }
46
+
47
+ /**
48
+ * Standalone babel preset that drops the same plugin chain that the
49
+ * Vite-driven Metro path applies into any `babel.config.{cjs,js,mjs}` file.
50
+ *
51
+ * @example
52
+ * ```js
53
+ * // babel.config.cjs
54
+ * module.exports = require('one/babel-preset')
55
+ * ```
56
+ */
57
+ export default function oneBabelPreset(
58
+ api: BabelConfigAPI,
59
+ options: OneBabelPresetOptions = {}
60
+ ): TransformOptions {
61
+ const hasViteInjectedOnePlugins =
62
+ typeof api?.caller === 'function'
63
+ ? api.caller((caller) => !!(caller as any)?.oneViteMetroBabelConfig)
64
+ : false
65
+
66
+ if (!api?.caller && typeof api?.cache === 'function') {
67
+ api.cache(true)
68
+ }
69
+
70
+ const projectRoot = path.resolve(
71
+ options.projectRoot ?? (typeof api?.cwd === 'function' ? api.cwd() : process.cwd())
72
+ )
73
+
74
+ const presets: PluginItem[] = []
75
+
76
+ if (options.includeExpoPreset !== false) {
77
+ const require = module.createRequire(projectRoot + '/')
78
+ try {
79
+ const expoPresetPath = require.resolve('babel-preset-expo')
80
+ presets.push(require(expoPresetPath))
81
+ } catch (e) {
82
+ throw new Error(
83
+ `[one/babel-preset] Could not resolve 'babel-preset-expo' from ${projectRoot}. ` +
84
+ `Install it as a project dependency (it ships with the Expo SDK). ` +
85
+ `If you don't want the Expo base preset, pass { includeExpoPreset: false }.`
86
+ )
87
+ }
88
+ }
89
+
90
+ return {
91
+ presets,
92
+ plugins: hasViteInjectedOnePlugins
93
+ ? []
94
+ : buildOneBabelPlugins({
95
+ projectRoot,
96
+ relativeRouterRoot: options.routerRoot ?? 'app',
97
+ ignoredRouteFiles: options.ignoredRouteFiles,
98
+ linking: options.linking,
99
+ setupFile: options.setupFile,
100
+ includeImportMetaEnv: options.includeImportMetaEnv,
101
+ }),
102
+ }
103
+ }
104
+
105
+ export type BuildOneBabelPluginsOptions = {
106
+ projectRoot: string
107
+ relativeRouterRoot: string
108
+ ignoredRouteFiles?: Array<`**/*${string}`>
109
+ linking?: unknown
110
+ setupFile?: string | { native?: string; ios?: string; android?: string }
111
+ includeImportMetaEnv?: boolean
112
+ }
113
+
114
+ /**
115
+ * The plugin chain shared between the Vite-driven Metro path
116
+ * (`getViteMetroPluginOptions`) and the standalone preset above.
117
+ */
118
+ export function buildOneBabelPlugins({
119
+ projectRoot,
120
+ relativeRouterRoot,
121
+ ignoredRouteFiles,
122
+ linking,
123
+ setupFile,
124
+ includeImportMetaEnv = true,
125
+ }: BuildOneBabelPluginsOptions): PluginItem[] {
126
+ const tsconfig = tsconfigPaths.loadConfig(projectRoot)
127
+ if (tsconfig.resultType === 'failed') {
128
+ throw new Error('[one/babel-preset] tsconfig.json paths could not be loaded')
129
+ }
130
+
131
+ const require = module.createRequire(projectRoot + '/')
132
+ const metroEntryPath = require.resolve('one/metro-entry', { paths: [projectRoot] })
133
+
134
+ const setupFileRelativeToMetroEntry = (() => {
135
+ if (!setupFile) return undefined
136
+ const file =
137
+ typeof setupFile === 'string'
138
+ ? setupFile
139
+ : setupFile.native || setupFile.ios || setupFile.android
140
+ if (!file) return undefined
141
+ return path.relative(path.dirname(metroEntryPath), path.join(projectRoot, file))
142
+ })()
143
+
144
+ return [
145
+ // standalone Metro CLI (expo export, eas update) needs `import.meta.env.*` /
146
+ // `process.env.*` baked in. The Vite path passes `false` here and injects
147
+ // its own version with the user's `define` env via the server hook.
148
+ ...(includeImportMetaEnv
149
+ ? [
150
+ [
151
+ '@vxrn/vite-plugin-metro/babel-plugins/import-meta-env-plugin',
152
+ { env: buildStandaloneImportMetaEnv() },
153
+ ] as PluginItem,
154
+ ]
155
+ : []),
156
+ 'one/babel-plugin-environment-guard',
157
+ ['one/babel-plugin-remove-server-code', { routerRoot: relativeRouterRoot }],
158
+ [
159
+ 'babel-plugin-module-resolver',
160
+ // "vite-tsconfig-paths" for Metro
161
+ {
162
+ alias: Object.fromEntries(
163
+ Object.entries(tsconfig.paths).map(([k, v]) => {
164
+ // exact-match aliases need a trailing `$`, prefix aliases drop `/*`
165
+ const key = k.endsWith('/*') ? k.replace(/\/\*$/, '') : `${k}$`
166
+ let value = v[0].replace(/\/\*$/, '')
167
+ if (!value.startsWith('./')) value = `./${value}`
168
+ return [key, value]
169
+ })
170
+ ),
171
+ },
172
+ ],
173
+ [
174
+ 'one/babel-plugin-one-router-metro',
175
+ {
176
+ ONE_ROUTER_APP_ROOT_RELATIVE_TO_ENTRY: path.relative(
177
+ path.dirname(metroEntryPath),
178
+ path.join(projectRoot, relativeRouterRoot)
179
+ ),
180
+ ONE_ROUTER_ROOT_FOLDER_NAME: relativeRouterRoot,
181
+ ONE_ROUTER_REQUIRE_CONTEXT_REGEX_STRING:
182
+ buildRouterRequireContextRegexString(ignoredRouteFiles),
183
+ ONE_ROUTER_LINKING_CONFIG: linking,
184
+ ONE_SETUP_FILE_NATIVE: setupFileRelativeToMetroEntry,
185
+ },
186
+ ],
187
+ 'one/babel-plugin-inline-one-server-url',
188
+ ]
189
+ }
190
+
191
+ /**
192
+ * Build the `import.meta.env` substitution map for standalone Metro use.
193
+ * Mirrors Vite's default `define`: MODE/BASE_URL/PROD/DEV/SSR plus any
194
+ * `EXPO_PUBLIC_*` / `ONE_*` / `VITE_*` env var from `process.env`.
195
+ */
196
+ function buildStandaloneImportMetaEnv(): Record<string, unknown> {
197
+ const isProduction = process.env.NODE_ENV !== 'development'
198
+ const env: Record<string, unknown> = {
199
+ MODE: isProduction ? 'production' : 'development',
200
+ BASE_URL: '/',
201
+ PROD: isProduction,
202
+ DEV: !isProduction,
203
+ SSR: false,
204
+ }
205
+ for (const [key, value] of Object.entries(process.env)) {
206
+ if (key.startsWith('EXPO_PUBLIC_') || key.startsWith('ONE_') || key.startsWith('VITE_')) {
207
+ env[key] = value
208
+ }
209
+ }
210
+ return env
211
+ }
212
+
213
+ /**
214
+ * On Windows, micromatch.makeRe() produces `[\\/]` / `[^\\/]` instead of `\/` / `[^/]`.
215
+ * Normalize so the prefix/suffix check below works cross-platform.
216
+ */
217
+ function normalizeReSource(source: string): string {
218
+ return source.replace(/\[\\\\\/\]/g, '\\/').replace(/\[\^\\\\\/\]/g, '[^/]')
219
+ }
220
+
221
+ export function buildRouterRequireContextRegexString(
222
+ ignoredRouteFiles?: Array<`**/*${string}`>
223
+ ): string {
224
+ const excludeRes = [
225
+ ...(ignoredRouteFiles || []).map((pattern) => mm.makeRe(pattern)),
226
+ ...ROUTE_NATIVE_EXCLUSION_GLOB_PATTERNS.map((pattern) => mm.makeRe(pattern)),
227
+ mm.makeRe(API_ROUTE_GLOB_PATTERN),
228
+ ]
229
+
230
+ const mustStartWith = String.raw`^(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?`
231
+ // biome-ignore lint/complexity/noUselessStringRaw: keep original code
232
+ const mustEndWith = String.raw`)$`
233
+
234
+ const negatives = excludeRes.map((re, i) => {
235
+ const reSource = normalizeReSource(re.source)
236
+ if (!(reSource.startsWith(mustStartWith) && reSource.endsWith(mustEndWith))) {
237
+ const pattern = ignoredRouteFiles?.[i]
238
+ throw new Error(
239
+ pattern
240
+ ? `[one/metro] ignoredRouteFile pattern "${pattern}" is not supported. We cannot process the corresponding regex "${reSource}" for now.`
241
+ : `Unsupported regex "${reSource}" in "ignoredRouteFiles".`
242
+ )
243
+ }
244
+ const inner = reSource.slice(mustStartWith.length, reSource.length - mustEndWith.length)
245
+ // biome-ignore lint/complexity/noUselessStringRaw: keep original code
246
+ return String.raw`(?:.*${inner})`
247
+ })
248
+
249
+ return String.raw`^(?:\.\/)(?!${negatives.join('|')}$).*\.tsx?$`
250
+ }