vxrn 1.26.1 → 2.0.0-beta.33.1

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.
@@ -16,6 +16,9 @@ import {
16
16
  readdirSync,
17
17
  statSync,
18
18
  readFileSync,
19
+ writeFileSync,
20
+ watch,
21
+ type FSWatcher,
19
22
  } from 'node:fs'
20
23
  import { pathToFileURL } from 'node:url'
21
24
  import micromatch from 'micromatch'
@@ -98,7 +101,6 @@ interface NativeDevEngineResult {
98
101
  getBundle: () => Promise<NativeDevBundle>
99
102
  getAsset: (pathname: string, hash?: string) => NativeDevAsset | undefined
100
103
  close: () => Promise<void>
101
- handleAddedFile: (file: string) => Promise<void>
102
104
  }
103
105
 
104
106
  // shared resolve extensions for native builds
@@ -556,7 +558,11 @@ export async function createNativeDevEngine(
556
558
  let bundlePromise: Promise<NativeDevBundle> | null = null
557
559
 
558
560
  const resolvedHost = host === '0.0.0.0' ? 'localhost' : host
559
- const virtualEntry = nativeVirtualEntryPlugin(root, { dev: true })
561
+ const virtualEntry = nativeVirtualEntryPlugin(root, {
562
+ dev: true,
563
+ platform,
564
+ dynamicRoutes: true,
565
+ })
560
566
 
561
567
  // one build at a time: a bundle request and a full rebuild can arrive
562
568
  // together (a reload lands on the bundle route while a new route file is
@@ -645,27 +651,26 @@ try {
645
651
  let outputProcessed: Promise<void> = Promise.resolve()
646
652
 
647
653
  let engine: Awaited<ReturnType<typeof dev>>
648
-
649
- const rebuildIfNewRoute = async (files: string[]): Promise<boolean> => {
650
- const { routeRoot, files: knownRoutes, isRouteFile } = virtualEntry.routes
651
- const routeRootPrefix = `${normalizePath(routeRoot)}/`
652
- const routeAdded = files.some((file) => {
653
- const normalized = normalizePath(file)
654
- if (isRouteFile(normalized)) return !knownRoutes.has(normalized)
655
- return (
656
- normalized.startsWith(routeRootPrefix) &&
657
- statSync(file, { throwIfNoEntry: false })?.isDirectory() === true
658
- )
659
- })
660
- if (!routeAdded) return false
661
- await queueEngineWork(async () => {
662
- engine.triggerFullBuild()
663
- await engine.ensureLatestBuildOutput()
664
- await outputProcessed
654
+ let routeWatcher: FSWatcher | undefined
655
+
656
+ const rebuildIfRouteGraphChanged = (): Promise<boolean> =>
657
+ queueEngineWork(async () => {
658
+ // decide from the complete route set after all earlier engine work. a
659
+ // watcher can report a directory, a rename, or several events for one
660
+ // write, and none of those event shapes are the source of truth.
661
+ const { files: knownRoutes, scanFiles, updateFiles } = virtualEntry.routes
662
+ const currentRoutes = scanFiles()
663
+ const routeSetChanged =
664
+ currentRoutes.size !== knownRoutes.size ||
665
+ [...currentRoutes].some((route) => !knownRoutes.has(route))
666
+ if (!routeSetChanged) return false
667
+
668
+ // changing this small imported module lets Rolldown compile only the new
669
+ // route and the registry delta. rebuilding a multi-megabyte native bundle
670
+ // makes route creation scale with the entire app.
671
+ updateFiles(currentRoutes)
672
+ return true
665
673
  })
666
- onHmrUpdate?.({ type: 'hmr:reload' })
667
- return true
668
- }
669
674
 
670
675
  engine = await dev(inputOptions, outputOptions, {
671
676
  onOutput: async (result) => {
@@ -687,12 +692,10 @@ try {
687
692
  return
688
693
  }
689
694
 
690
- // a route file that was just created has no module, so rolldown reports
691
- // the change and stops: in devMode it never re-scans, and the entry's
692
- // `import.meta.glob` was expanded back when it transformed the entry.
693
- // only a full build re-expands it, and rolldown tells no client that
694
- // happened, so the reload is sent from here.
695
- if (await rebuildIfNewRoute(result.changedFiles)) return
695
+ // adding or deleting a route changes a route map that was expanded when
696
+ // the entry transformed. only a full build re-expands it, and rolldown
697
+ // tells no client that happened, so the reload is sent from here.
698
+ if (await rebuildIfRouteGraphChanged()) return
696
699
 
697
700
  for (const { clientId, update } of result.updates) {
698
701
  if (update.type === 'Patch' && update.code) {
@@ -778,6 +781,35 @@ try {
778
781
 
779
782
  await engine.run()
780
783
 
784
+ // import.meta.glob records the files it matched, not the directory whose
785
+ // membership defines the route map. own that directory watch next to the
786
+ // engine and compare complete route sets on every event. this also covers a
787
+ // router root created after the dev server starts.
788
+ let routeWatchTarget = virtualEntry.routes.routeRoot
789
+ while (!statSync(routeWatchTarget, { throwIfNoEntry: false })?.isDirectory()) {
790
+ const parent = dirname(routeWatchTarget)
791
+ if (parent === routeWatchTarget) break
792
+ routeWatchTarget = parent
793
+ }
794
+ const normalizedRouteRoot = normalizePath(virtualEntry.routes.routeRoot)
795
+ routeWatcher = watch(routeWatchTarget, { recursive: true }, (_eventType, file) => {
796
+ if (file === null) return
797
+ const changed = normalizePath(resolve(routeWatchTarget, file.toString()))
798
+ if (
799
+ changed !== normalizedRouteRoot &&
800
+ !changed.startsWith(`${normalizedRouteRoot}/`)
801
+ ) {
802
+ return
803
+ }
804
+ rebuildIfRouteGraphChanged().catch((error) => {
805
+ console.error(`[vxrn] rebuilding the native route map failed`, error)
806
+ })
807
+ })
808
+ routeWatcher.on('error', (error) => {
809
+ console.error(`[vxrn] watching the native route map failed`, error)
810
+ })
811
+ await rebuildIfRouteGraphChanged()
812
+
781
813
  return {
782
814
  engine,
783
815
 
@@ -817,16 +849,9 @@ try {
817
849
  },
818
850
 
819
851
  async close() {
852
+ routeWatcher?.close()
820
853
  await engine.close()
821
854
  },
822
-
823
- // vite's watcher sees a created file even when rolldown's addWatchFile
824
- // directory watches do not, which is what happens on github's macos
825
- // runners. scoped to route files so a random write in the project is not
826
- // a full rebuild.
827
- async handleAddedFile(file: string) {
828
- await rebuildIfNewRoute([file])
829
- },
830
855
  }
831
856
  }
832
857
 
@@ -894,7 +919,7 @@ export async function buildNativeBundle(
894
919
  shimMissingExports: true,
895
920
  moduleTypes: { '.js': 'jsx' },
896
921
  plugins: [
897
- ...(entryFile ? [] : [nativeVirtualEntryPlugin(root, { dev }).plugin]),
922
+ ...(entryFile ? [] : [nativeVirtualEntryPlugin(root, { dev, platform }).plugin]),
898
923
  ...getNativePlugins(
899
924
  root,
900
925
  platform,
@@ -942,13 +967,20 @@ interface NativeRouteRegistry {
942
967
  routeRoot: string
943
968
  files: Set<string>
944
969
  isRouteFile: (file: string) => boolean
970
+ scanFiles: () => Set<string>
971
+ updateFiles: (files: Set<string>) => void
945
972
  }
946
973
 
947
974
  function nativeVirtualEntryPlugin(
948
975
  root: string,
949
- opts?: { dev?: boolean }
976
+ opts: {
977
+ dev?: boolean
978
+ platform: 'ios' | 'android'
979
+ dynamicRoutes?: boolean
980
+ }
950
981
  ): { plugin: Plugin; routes: NativeRouteRegistry } {
951
982
  const isDev = opts?.dev !== false
983
+ const useDynamicRouteRegistry = opts.dynamicRoutes === true
952
984
  // absolute for import.meta.glob resolution; forward-slash for module-graph convention
953
985
  const resolvedId = normalizePath(resolve(root, '__virtual-native-entry.tsx'))
954
986
 
@@ -1001,23 +1033,24 @@ globalThis.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
1001
1033
  `
1002
1034
  : ''
1003
1035
 
1004
- const entryCode = `
1036
+ const entryCode = () => `
1005
1037
  ${refreshSetup}
1006
1038
  import * as ReactNativeInitializeCore from 'react-native/Libraries/Core/InitializeCore';
1007
1039
  import NativeWebSocket from 'react-native/Libraries/WebSocket/WebSocket';
1040
+ import DevSettings from 'react-native/Libraries/Utilities/DevSettings';
1008
1041
  ${setupFileImport}
1042
+ ${routeImports}
1009
1043
  import { createApp } from 'one';
1010
1044
 
1011
1045
  void ReactNativeInitializeCore;
1012
1046
  globalThis.WebSocket = NativeWebSocket;
1047
+ globalThis.__VXRN_RELOAD_NATIVE_DEV_BUNDLE__ = function(reason) {
1048
+ DevSettings.reload(reason);
1049
+ };
1013
1050
 
1014
- var _routes = import.meta.glob(${JSON.stringify(routeGlobs)}, { exhaustive: true });
1015
- // fix route keys: One expects '/${routerRoot}/...' prefix but import.meta.glob returns './${routerRoot}/...'
1016
- var routes = {};
1017
- Object.keys(_routes).forEach(function(key) {
1018
- var normalizedKey = key.replace(/^\\.\\//, '');
1019
- routes['/' + normalizedKey] = _routes[key];
1020
- });
1051
+ // React Native reloads a dev bundle in the existing JS runtime. Advance One's
1052
+ // route-cache version so a full reload cannot reuse the previous context.
1053
+ globalThis.__vxrnVersion = (globalThis.__vxrnVersion || 0) + 1;
1021
1054
 
1022
1055
  createApp({
1023
1056
  routes: routes,
@@ -1025,6 +1058,8 @@ createApp({
1025
1058
  flags: ${JSON.stringify(flags)},
1026
1059
  linking: ${JSON.stringify(linking)},
1027
1060
  });
1061
+
1062
+ ${routeHmr}
1028
1063
  `
1029
1064
 
1030
1065
  const routeRoot = resolve(root, routerRoot)
@@ -1045,11 +1080,66 @@ createApp({
1045
1080
  !micromatch.isMatch(relativeToRoot, excludeGlobs)
1046
1081
  )
1047
1082
  }
1083
+ const scanFiles = () => {
1084
+ const files = new Set<string>()
1085
+ const walkRouteRoot = (dir: string) => {
1086
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
1087
+ const child = resolve(dir, entry.name)
1088
+ if (entry.isDirectory()) walkRouteRoot(child)
1089
+ else if (isRouteFile(child)) files.add(normalizePath(child))
1090
+ }
1091
+ }
1092
+ if (statSync(routeRoot, { throwIfNoEntry: false })?.isDirectory()) {
1093
+ walkRouteRoot(routeRoot)
1094
+ }
1095
+ return files
1096
+ }
1097
+ const registrySpecifier = `./node_modules/.vxrn/native-routes-${opts.platform}.mjs`
1098
+ const registryPath = resolve(root, registrySpecifier)
1048
1099
  const routes: NativeRouteRegistry = {
1049
1100
  routeRoot,
1050
1101
  files: new Set(),
1051
1102
  isRouteFile,
1103
+ scanFiles,
1104
+ updateFiles(files) {
1105
+ routes.files = files
1106
+ if (!useDynamicRouteRegistry) return
1107
+
1108
+ const source = `export const routes = {\n${[...files]
1109
+ .sort()
1110
+ .map((file) => {
1111
+ const routeKey = `/${normalizePath(relative(root, file))}`
1112
+ let importPath = normalizePath(relative(dirname(registryPath), file))
1113
+ if (!importPath.startsWith('.')) importPath = `./${importPath}`
1114
+ return ` ${JSON.stringify(routeKey)}: () => import(${JSON.stringify(importPath)})`
1115
+ })
1116
+ .join(',\n')}\n}\n`
1117
+ mkdirSync(dirname(registryPath), { recursive: true })
1118
+ if (!existsSync(registryPath) || readFileSync(registryPath, 'utf8') !== source) {
1119
+ writeFileSync(registryPath, source)
1120
+ }
1121
+ },
1052
1122
  }
1123
+ routes.updateFiles(routes.scanFiles())
1124
+
1125
+ const routeImports = useDynamicRouteRegistry
1126
+ ? `import { routes } from ${JSON.stringify(registrySpecifier)};`
1127
+ : `var _routes = import.meta.glob(${JSON.stringify(routeGlobs)}, { exhaustive: true });
1128
+ // fix route keys: One expects '/${routerRoot}/...' prefix but import.meta.glob returns './${routerRoot}/...'
1129
+ var routes = {};
1130
+ Object.keys(_routes).forEach(function(key) {
1131
+ var normalizedKey = key.replace(/^\\.\\//, '');
1132
+ routes['/' + normalizedKey] = _routes[key];
1133
+ });`
1134
+ const routeHmr = useDynamicRouteRegistry
1135
+ ? `if (import.meta.hot) {
1136
+ import.meta.hot.accept(${JSON.stringify(registrySpecifier)}, function(next) {
1137
+ if (globalThis.__VXRN_UPDATE_NATIVE_ROUTES__) {
1138
+ globalThis.__VXRN_UPDATE_NATIVE_ROUTES__(next.routes);
1139
+ }
1140
+ });
1141
+ }`
1142
+ : ''
1053
1143
 
1054
1144
  return {
1055
1145
  routes,
@@ -1062,35 +1152,7 @@ createApp({
1062
1152
  },
1063
1153
  load(id) {
1064
1154
  if (id !== resolvedId) return
1065
- // rolldown expands `import.meta.glob` during transform and records a
1066
- // dependency on the files it matched, never on the directories it
1067
- // searched. registering those directories is what makes its own watcher
1068
- // report a route file appearing, and walking them is what lets the
1069
- // engine tell that report apart from an edit.
1070
- //
1071
- // watching a directory is not recursive, so every directory under the
1072
- // route root is registered. a new subdirectory is itself a change to
1073
- // its watched parent, and the full build that follows re-runs this
1074
- // hook, so the build that picks up `app/foo/index.tsx` is also what
1075
- // starts watching `app/foo`.
1076
- routes.files.clear()
1077
- const walkRouteRoot = (dir: string) => {
1078
- this.addWatchFile(dir)
1079
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
1080
- const child = resolve(dir, entry.name)
1081
- if (entry.isDirectory()) walkRouteRoot(child)
1082
- else if (isRouteFile(child)) routes.files.add(normalizePath(child))
1083
- }
1084
- }
1085
- // a project can have no route root at all: `import.meta.glob` then
1086
- // expands to nothing and the app builds fine. watch the directory that
1087
- // would hold it, so creating it is the change that starts the walk.
1088
- if (statSync(routeRoot, { throwIfNoEntry: false })?.isDirectory()) {
1089
- walkRouteRoot(routeRoot)
1090
- } else {
1091
- this.addWatchFile(dirname(routeRoot))
1092
- }
1093
- return entryCode
1155
+ return entryCode()
1094
1156
  },
1095
1157
  },
1096
1158
  }
@@ -2069,11 +2131,13 @@ class ReactNativeDevRuntime extends BaseDevRuntime {
2069
2131
  }
2070
2132
  }
2071
2133
 
2072
- reload() {
2073
- var proxy = globalThis.__turboModuleProxy
2074
- ? globalThis.__turboModuleProxy('DevSettings')
2075
- : globalThis.nativeModuleProxy && globalThis.nativeModuleProxy.DevSettings;
2076
- if (proxy && proxy.reload) proxy.reload();
2134
+ reload(reason) {
2135
+ var reloadNativeBundle = globalThis.__VXRN_RELOAD_NATIVE_DEV_BUNDLE__;
2136
+ if (typeof reloadNativeBundle === 'function') {
2137
+ reloadNativeBundle(reason);
2138
+ return;
2139
+ }
2140
+ console.error('[vxrn HMR]: DevSettings.reload is unavailable');
2077
2141
  }
2078
2142
 
2079
2143
  setup(socket) {
@@ -2095,10 +2159,10 @@ class ReactNativeDevRuntime extends BaseDevRuntime {
2095
2159
  if (message.type === 'hmr:update') {
2096
2160
  // a patch that cannot be applied in place is the reload signal
2097
2161
  if (!runtime.applyHmrUpdate(message.code, message.changedIds, message.seq)) {
2098
- runtime.reload();
2162
+ runtime.reload('native HMR update could not be applied');
2099
2163
  }
2100
2164
  } else if (message.type === 'hmr:reload') {
2101
- runtime.reload();
2165
+ runtime.reload('native route map changed');
2102
2166
  }
2103
2167
  } catch (error) {
2104
2168
  console.error('[vxrn HMR]: failed to apply update', error);
@@ -45,9 +45,6 @@ export const EXCLUDE_LIST = [
45
45
  // /lib/module/Platform/Platform.web.js:132:20
46
46
  '@shopify/react-native-skia',
47
47
 
48
- // web breaks trying to scan deps
49
- 'react-native-bottom-tabs',
50
-
51
48
  '@react-native/virtualized-lists', // Unexpected "typeof" in `node_modules/@react-native/virtualized-lists/index.js`
52
49
 
53
50
  // Native only, we don't expect SSR to use these packages.
@@ -1 +1 @@
1
- {"version":3,"file":"builtInDepPatches.d.ts","sourceRoot":"","sources":["../../src/patches/builtInDepPatches.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAiC,MAAM,kBAAkB,CAAA;AAE/E,eAAO,MAAM,iBAAiB,EAAE,QAAQ,EA8pBvC,CAAA"}
1
+ {"version":3,"file":"builtInDepPatches.d.ts","sourceRoot":"","sources":["../../src/patches/builtInDepPatches.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAiC,MAAM,kBAAkB,CAAA;AAE/E,eAAO,MAAM,iBAAiB,EAAE,QAAQ,EAsoBvC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"reactNativeDevServer.d.ts","sourceRoot":"","sources":["../../src/plugins/reactNativeDevServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,MAAM,EAAiB,MAAM,MAAM,CAAA;AAO1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAwBnE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B9D;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,aAAa,GAAG,kBAAkB,GAAG,SAAS,CAAC,CACrF,GACA,MAAM,CAyZR"}
1
+ {"version":3,"file":"reactNativeDevServer.d.ts","sourceRoot":"","sources":["../../src/plugins/reactNativeDevServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,MAAM,EAAiB,MAAM,MAAM,CAAA;AAO1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAwBnE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B9D;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,aAAa,GAAG,kBAAkB,GAAG,SAAS,CAAC,CACrF,GACA,MAAM,CAiXR"}
@@ -49,7 +49,6 @@ interface NativeDevEngineResult {
49
49
  getBundle: () => Promise<NativeDevBundle>;
50
50
  getAsset: (pathname: string, hash?: string) => NativeDevAsset | undefined;
51
51
  close: () => Promise<void>;
52
- handleAddedFile: (file: string) => Promise<void>;
53
52
  }
54
53
  export declare function getNativeTransformConfig(platform: 'ios' | 'android', dev: boolean, root: string): {
55
54
  jsx: {
@@ -1 +1 @@
1
- {"version":3,"file":"createNativeDevEngine.d.ts","sourceRoot":"","sources":["../../src/utils/createNativeDevEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createNativeDevEngine.d.ts","sourceRoot":"","sources":["../../src/utils/createNativeDevEngine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanDepsToOptimize.d.ts","sourceRoot":"","sources":["../../src/utils/scanDepsToOptimize.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,YAAY,UA2FxB,CAAA;AAED,eAAO,MAAM,gBAAgB,aAAwB,CAAA;AAErD,eAAO,MAAM,YAAY,UAKxB,CAAA;AAED,eAAO,MAAM,gBAAgB,aAAwB,CAAA;AA8BrD,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,KAAK,OAAO,CAAA;IAC1C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACrC,8HAA8H;IAC9H,cAAc,CAAC,EAAE,GAAG,CAAA;CACP,GACd,OAAO,CAAC,cAAc,CAAC,CAmLzB;AA6BD,wBAAsB,kBAAkB,CAAC,GAAG,KAAA,EAAE,SAAS,KAAA,+BAmBtD"}
1
+ {"version":3,"file":"scanDepsToOptimize.d.ts","sourceRoot":"","sources":["../../src/utils/scanDepsToOptimize.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,YAAY,UAwFxB,CAAA;AAED,eAAO,MAAM,gBAAgB,aAAwB,CAAA;AAErD,eAAO,MAAM,YAAY,UAKxB,CAAA;AAED,eAAO,MAAM,gBAAgB,aAAwB,CAAA;AA8BrD,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,KAAK,OAAO,CAAA;IAC1C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACrC,8HAA8H;IAC9H,cAAc,CAAC,EAAE,GAAG,CAAA;CACP,GACd,OAAO,CAAC,cAAc,CAAC,CAmLzB;AA6BD,wBAAsB,kBAAkB,CAAC,GAAG,KAAA,EAAE,SAAS,KAAA,+BAmBtD"}