vxrn 2.0.0-beta.98.1 → 2.6.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 (210) hide show
  1. package/dist/backgroundComputation.mjs +145 -0
  2. package/dist/backgroundComputation.mjs.map +1 -0
  3. package/dist/backgroundComputation.native.js +163 -0
  4. package/dist/backgroundComputation.native.js.map +1 -0
  5. package/dist/backgroundComputationNative.mjs +16 -0
  6. package/dist/backgroundComputationNative.mjs.map +1 -0
  7. package/dist/backgroundComputationNative.native.js +18 -0
  8. package/dist/backgroundComputationNative.native.js.map +1 -0
  9. package/dist/config/getBaseViteConfigOnly.mjs +6 -10
  10. package/dist/config/getBaseViteConfigOnly.mjs.map +1 -1
  11. package/dist/config/getBaseViteConfigOnly.native.js +6 -10
  12. package/dist/config/getBaseViteConfigOnly.native.js.map +1 -1
  13. package/dist/config/getOptimizeDeps.mjs +2 -1
  14. package/dist/config/getOptimizeDeps.mjs.map +1 -1
  15. package/dist/config/getOptimizeDeps.native.js +2 -1
  16. package/dist/config/getOptimizeDeps.native.js.map +1 -1
  17. package/dist/config/getViteServerConfig.mjs +13 -0
  18. package/dist/config/getViteServerConfig.mjs.map +1 -1
  19. package/dist/config/getViteServerConfig.native.js +15 -1
  20. package/dist/config/getViteServerConfig.native.js.map +1 -1
  21. package/dist/constants/defaults.mjs +4 -0
  22. package/dist/constants/defaults.mjs.map +1 -1
  23. package/dist/constants/defaults.native.js +4 -0
  24. package/dist/constants/defaults.native.js.map +1 -1
  25. package/dist/exports/build.native.js +1 -1
  26. package/dist/exports/build.native.js.map +1 -1
  27. package/dist/exports/clean.native.js +1 -1
  28. package/dist/exports/clean.native.js.map +1 -1
  29. package/dist/exports/createServer.native.js +2 -2
  30. package/dist/exports/createServer.native.js.map +1 -1
  31. package/dist/exports/dev.mjs +3 -0
  32. package/dist/exports/dev.mjs.map +1 -1
  33. package/dist/exports/dev.native.js +6 -3
  34. package/dist/exports/dev.native.js.map +1 -1
  35. package/dist/exports/loadEnv.native.js +1 -1
  36. package/dist/exports/loadEnv.native.js.map +1 -1
  37. package/dist/exports/patch.native.js +1 -1
  38. package/dist/exports/patch.native.js.map +1 -1
  39. package/dist/exports/prebuild.mjs +0 -22
  40. package/dist/exports/prebuild.mjs.map +1 -1
  41. package/dist/exports/prebuild.native.js +1 -23
  42. package/dist/exports/prebuild.native.js.map +1 -1
  43. package/dist/exports/prebuildWithoutExpo.mjs +1133 -182
  44. package/dist/exports/prebuildWithoutExpo.mjs.map +1 -1
  45. package/dist/exports/prebuildWithoutExpo.native.js +1606 -244
  46. package/dist/exports/prebuildWithoutExpo.native.js.map +1 -1
  47. package/dist/exports/runAndroid.native.js +1 -1
  48. package/dist/exports/runAndroid.native.js.map +1 -1
  49. package/dist/exports/runIos.native.js +1 -1
  50. package/dist/exports/runIos.native.js.map +1 -1
  51. package/dist/exports/serve.native.js +1 -1
  52. package/dist/exports/serve.native.js.map +1 -1
  53. package/dist/exports/serveStaticAssets.native.js +1 -1
  54. package/dist/exports/serveStaticAssets.native.js.map +1 -1
  55. package/dist/index.js +4 -1
  56. package/dist/index.mjs +4 -1
  57. package/dist/index.native.js +4 -1
  58. package/dist/native-source-contract.mjs +3 -0
  59. package/dist/native-source-contract.native.js +3 -0
  60. package/dist/patches/builtInDepPatches.mjs +0 -13
  61. package/dist/patches/builtInDepPatches.mjs.map +1 -1
  62. package/dist/patches/builtInDepPatches.native.js +0 -13
  63. package/dist/patches/builtInDepPatches.native.js.map +1 -1
  64. package/dist/plugins/autoDepOptimizePlugin.mjs +3 -2
  65. package/dist/plugins/autoDepOptimizePlugin.mjs.map +1 -1
  66. package/dist/plugins/autoDepOptimizePlugin.native.js +6 -3
  67. package/dist/plugins/autoDepOptimizePlugin.native.js.map +1 -1
  68. package/dist/plugins/backgroundComputationPlugin.mjs +27 -0
  69. package/dist/plugins/backgroundComputationPlugin.mjs.map +1 -0
  70. package/dist/plugins/backgroundComputationPlugin.native.js +32 -0
  71. package/dist/plugins/backgroundComputationPlugin.native.js.map +1 -0
  72. package/dist/plugins/reactNativeCommonJsPlugin.native.js +3 -3
  73. package/dist/plugins/reactNativeCommonJsPlugin.native.js.map +1 -1
  74. package/dist/plugins/reactNativeDevAssetPlugin.mjs +2 -1
  75. package/dist/plugins/reactNativeDevAssetPlugin.mjs.map +1 -1
  76. package/dist/plugins/reactNativeDevAssetPlugin.native.js +3 -2
  77. package/dist/plugins/reactNativeDevAssetPlugin.native.js.map +1 -1
  78. package/dist/plugins/reactNativeDevServer.mjs +87 -24
  79. package/dist/plugins/reactNativeDevServer.mjs.map +1 -1
  80. package/dist/plugins/reactNativeDevServer.native.js +162 -45
  81. package/dist/plugins/reactNativeDevServer.native.js.map +1 -1
  82. package/dist/plugins/workletImportsPlugin.mjs +9 -30
  83. package/dist/plugins/workletImportsPlugin.mjs.map +1 -1
  84. package/dist/plugins/workletImportsPlugin.native.js +10 -35
  85. package/dist/plugins/workletImportsPlugin.native.js.map +1 -1
  86. package/dist/rn-commands/bundle/buildBundle.mjs +3 -3
  87. package/dist/rn-commands/bundle/buildBundle.mjs.map +1 -1
  88. package/dist/rn-commands/bundle/buildBundle.native.js +3 -3
  89. package/dist/rn-commands/bundle/buildBundle.native.js.map +1 -1
  90. package/dist/runtime/hmr-client.native.js +3 -7
  91. package/dist/runtime/hmr-client.native.js.map +1 -1
  92. package/dist/runtime/hmr-runtime.native.js +32 -40
  93. package/dist/runtime/hmr-runtime.native.js.map +1 -1
  94. package/dist/serve/node.native.js +2 -2
  95. package/dist/serve/node.native.js.map +1 -1
  96. package/dist/swift-package-id.mjs +3 -0
  97. package/dist/swift-package-id.native.js +3 -0
  98. package/dist/user-interface/index.native.js +6 -6
  99. package/dist/user-interface/index.native.js.map +1 -1
  100. package/dist/utils/compileNativeDevBytecode.mjs +93 -0
  101. package/dist/utils/compileNativeDevBytecode.mjs.map +1 -0
  102. package/dist/utils/compileNativeDevBytecode.native.js +98 -0
  103. package/dist/utils/compileNativeDevBytecode.native.js.map +1 -0
  104. package/dist/utils/createNativeDevEngine.mjs +227 -20
  105. package/dist/utils/createNativeDevEngine.mjs.map +1 -1
  106. package/dist/utils/createNativeDevEngine.native.js +249 -37
  107. package/dist/utils/createNativeDevEngine.native.js.map +1 -1
  108. package/dist/utils/execSync.native.js +1 -1
  109. package/dist/utils/execSync.native.js.map +1 -1
  110. package/dist/utils/getServerEntry.native.js +2 -2
  111. package/dist/utils/getServerEntry.native.js.map +1 -1
  112. package/dist/utils/nativeRun.mjs +32 -16
  113. package/dist/utils/nativeRun.mjs.map +1 -1
  114. package/dist/utils/nativeRun.native.js +43 -18
  115. package/dist/utils/nativeRun.native.js.map +1 -1
  116. package/dist/utils/nativeSourceContract.mjs +1823 -0
  117. package/dist/utils/nativeSourceContract.mjs.map +1 -0
  118. package/dist/utils/nativeSourceContract.native.js +2425 -0
  119. package/dist/utils/nativeSourceContract.native.js.map +1 -0
  120. package/dist/utils/patches.native.js +15 -24
  121. package/dist/utils/patches.native.js.map +1 -1
  122. package/dist/utils/printServerUrls.native.js +1 -1
  123. package/dist/utils/printServerUrls.native.js.map +1 -1
  124. package/dist/utils/scanDepsToOptimize.mjs +7 -1
  125. package/dist/utils/scanDepsToOptimize.mjs.map +1 -1
  126. package/dist/utils/scanDepsToOptimize.native.js +27 -2
  127. package/dist/utils/scanDepsToOptimize.native.js.map +1 -1
  128. package/dist/utils/swiftPackageId.mjs +31 -2
  129. package/dist/utils/swiftPackageId.mjs.map +1 -1
  130. package/dist/utils/swiftPackageId.native.js +50 -2
  131. package/dist/utils/swiftPackageId.native.js.map +1 -1
  132. package/dist/vxrn-vite-plugin.native.js +1 -1
  133. package/dist/vxrn-vite-plugin.native.js.map +1 -1
  134. package/expo-plugin.cjs +792 -2
  135. package/native-project-patches.cjs +201 -10
  136. package/package.json +34 -15
  137. package/src/backgroundComputation.ts +220 -0
  138. package/src/backgroundComputationNative.ts +23 -0
  139. package/src/config/getBaseViteConfigOnly.ts +8 -9
  140. package/src/config/getOptimizeDeps.ts +3 -1
  141. package/src/config/getViteServerConfig.ts +16 -0
  142. package/src/config/glbAssets.test.ts +228 -0
  143. package/src/constants/defaults.ts +6 -0
  144. package/src/exports/dev.ts +5 -1
  145. package/src/exports/expoPlugin.test.mjs +337 -15
  146. package/src/exports/prebuild.ts +0 -31
  147. package/src/exports/prebuildWithoutExpo.test.ts +1623 -46
  148. package/src/exports/prebuildWithoutExpo.ts +1606 -216
  149. package/src/index.ts +8 -0
  150. package/src/native-source-contract.ts +16 -0
  151. package/src/patches/builtInDepPatches.ts +0 -21
  152. package/src/plugins/autoDepOptimizePlugin.ts +7 -2
  153. package/src/plugins/backgroundComputationPlugin.test.ts +77 -0
  154. package/src/plugins/backgroundComputationPlugin.ts +29 -0
  155. package/src/plugins/reactNativeDevAssetPlugin.ts +5 -1
  156. package/src/plugins/reactNativeDevServer.test.ts +74 -0
  157. package/src/plugins/reactNativeDevServer.ts +145 -28
  158. package/src/plugins/rnCodegenPlugin.test.ts +30 -0
  159. package/src/plugins/workletImportsPlugin.ts +19 -37
  160. package/src/rn-commands/bundle/buildBundle.ts +5 -3
  161. package/src/swift-package-id.ts +1 -0
  162. package/src/utils/compileNativeDevBytecode.test.ts +168 -0
  163. package/src/utils/compileNativeDevBytecode.ts +117 -0
  164. package/src/utils/createNativeDevEngine.test.ts +643 -18
  165. package/src/utils/createNativeDevEngine.ts +278 -48
  166. package/src/utils/nativeRun.test.ts +125 -23
  167. package/src/utils/nativeRun.ts +51 -23
  168. package/src/utils/nativeSourceArtifacts.test.ts +39 -0
  169. package/src/utils/nativeSourceContract.test.ts +600 -0
  170. package/src/utils/nativeSourceContract.ts +1897 -0
  171. package/src/utils/scanDepsToOptimize.test.ts +80 -0
  172. package/src/utils/scanDepsToOptimize.ts +18 -7
  173. package/src/utils/swiftPackageId.ts +25 -1
  174. package/types/backgroundComputation.d.ts +28 -0
  175. package/types/backgroundComputation.d.ts.map +1 -0
  176. package/types/backgroundComputationNative.d.ts +2 -0
  177. package/types/backgroundComputationNative.d.ts.map +1 -0
  178. package/types/config/getBaseViteConfigOnly.d.ts.map +1 -1
  179. package/types/config/getOptimizeDeps.d.ts.map +1 -1
  180. package/types/config/getViteServerConfig.d.ts.map +1 -1
  181. package/types/constants/defaults.d.ts.map +1 -1
  182. package/types/exports/dev.d.ts.map +1 -1
  183. package/types/exports/prebuild.d.ts.map +1 -1
  184. package/types/exports/prebuildWithoutExpo.d.ts +6 -0
  185. package/types/exports/prebuildWithoutExpo.d.ts.map +1 -1
  186. package/types/index.d.ts +2 -0
  187. package/types/index.d.ts.map +1 -1
  188. package/types/native-source-contract.d.ts +2 -0
  189. package/types/native-source-contract.d.ts.map +1 -0
  190. package/types/patches/builtInDepPatches.d.ts.map +1 -1
  191. package/types/plugins/autoDepOptimizePlugin.d.ts.map +1 -1
  192. package/types/plugins/backgroundComputationPlugin.d.ts +3 -0
  193. package/types/plugins/backgroundComputationPlugin.d.ts.map +1 -0
  194. package/types/plugins/reactNativeDevAssetPlugin.d.ts.map +1 -1
  195. package/types/plugins/reactNativeDevServer.d.ts.map +1 -1
  196. package/types/plugins/workletImportsPlugin.d.ts.map +1 -1
  197. package/types/rn-commands/bundle/buildBundle.d.ts.map +1 -1
  198. package/types/swift-package-id.d.ts +2 -0
  199. package/types/swift-package-id.d.ts.map +1 -0
  200. package/types/utils/compileNativeDevBytecode.d.ts +3 -0
  201. package/types/utils/compileNativeDevBytecode.d.ts.map +1 -0
  202. package/types/utils/createNativeDevEngine.d.ts +7 -22
  203. package/types/utils/createNativeDevEngine.d.ts.map +1 -1
  204. package/types/utils/nativeRun.d.ts.map +1 -1
  205. package/types/utils/nativeSourceContract.d.ts +121 -0
  206. package/types/utils/nativeSourceContract.d.ts.map +1 -0
  207. package/types/utils/scanDepsToOptimize.d.ts +1 -0
  208. package/types/utils/scanDepsToOptimize.d.ts.map +1 -1
  209. package/types/utils/swiftPackageId.d.ts +1 -0
  210. package/types/utils/swiftPackageId.d.ts.map +1 -1
@@ -0,0 +1,27 @@
1
+ import { dirname, relative, resolve } from "node:path";
2
+ import { loadBackgroundComputationModule, transformBackgroundComputations } from "../backgroundComputation.mjs";
3
+
4
+ function backgroundComputationPlugin(platform) {
5
+ return {
6
+ name: `one:background-computation:${platform}`,
7
+ transform: {
8
+ order: "pre",
9
+ handler(code, id) {
10
+ return transformBackgroundComputations(code, id, {
11
+ platform,
12
+ resolve: (source, importer) => resolve(dirname(importer), source),
13
+ workerFactory: (module) => `() => new Worker(new URL(${JSON.stringify(`./${relative(dirname(id), module.id).replaceAll("\\", "/")}`)}, import.meta.url), { type: 'module' })`
14
+ });
15
+ }
16
+ },
17
+ resolveId(source) {
18
+ if (platform === "web" && loadBackgroundComputationModule(source)) return source;
19
+ },
20
+ load(id) {
21
+ if (platform === "web") return loadBackgroundComputationModule(id)?.source;
22
+ }
23
+ };
24
+ }
25
+
26
+ export { backgroundComputationPlugin };
27
+ //# sourceMappingURL=backgroundComputationPlugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgroundComputationPlugin.js","names":[],"sources":["plugins/backgroundComputationPlugin.js"],"sourcesContent":["import { dirname, resolve, relative } from \"node:path\";\nimport {\n transformBackgroundComputations,\n loadBackgroundComputationModule\n} from \"../backgroundComputation\";\nfunction backgroundComputationPlugin(platform) {\n return {\n name: `one:background-computation:${platform}`,\n transform: {\n order: \"pre\",\n handler(code, id) {\n return transformBackgroundComputations(code, id, {\n platform,\n resolve: (source, importer) => resolve(dirname(importer), source),\n workerFactory: (module) => `() => new Worker(new URL(${JSON.stringify(`./${relative(dirname(id), module.id).replaceAll(\"\\\\\", \"/\")}`)}, import.meta.url), { type: 'module' })`\n });\n }\n },\n resolveId(source) {\n if (platform === \"web\" && loadBackgroundComputationModule(source)) return source;\n },\n load(id) {\n if (platform === \"web\") return loadBackgroundComputationModule(id)?.source;\n }\n };\n}\nexport {\n backgroundComputationPlugin\n};\n//# sourceMappingURL=backgroundComputationPlugin.js.map\n"],"mappings":";;;;AAKA,SAAS,4BAA4B,UAAU;CAC7C,OAAO;EACL,MAAM,8BAA8B;EACpC,WAAW;GACT,OAAO;GACP,QAAQ,MAAM,IAAI;IAChB,OAAO,gCAAgC,MAAM,IAAI;KAC/C;KACA,UAAU,QAAQ,aAAa,QAAQ,QAAQ,QAAQ,GAAG,MAAM;KAChE,gBAAgB,WAAW,4BAA4B,KAAK,UAAU,KAAK,SAAS,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,WAAW,MAAM,GAAG,GAAG,EAAE;IACvI,CAAC;GACH;EACF;EACA,UAAU,QAAQ;GAChB,IAAI,aAAa,SAAS,gCAAgC,MAAM,GAAG,OAAO;EAC5E;EACA,KAAK,IAAI;GACP,IAAI,aAAa,OAAO,OAAO,gCAAgC,EAAE,CAAC,EAAE;EACtE;CACF;AACF"}
@@ -0,0 +1,32 @@
1
+ import { dirname, relative, resolve } from "path";
2
+ import { loadBackgroundComputationModule, transformBackgroundComputations } from "../backgroundComputation.native.js";
3
+
4
+ function backgroundComputationPlugin(platform) {
5
+ return {
6
+ name: `one:background-computation:${platform}`,
7
+ transform: {
8
+ order: "pre",
9
+ handler(code, id) {
10
+ return transformBackgroundComputations(code, id, {
11
+ platform,
12
+ resolve: function resolve1(source, importer) {
13
+ return resolve(dirname(importer), source);
14
+ },
15
+ workerFactory: function workerFactory(module) {
16
+ return `() => new Worker(new URL(${JSON.stringify(`./${relative(dirname(id), module.id).replaceAll("\\", "/")}`)}, import.meta.url), { type: 'module' })`;
17
+ }
18
+ });
19
+ }
20
+ },
21
+ resolveId(source) {
22
+ if (platform === "web" && loadBackgroundComputationModule(source)) return source;
23
+ },
24
+ load(id) {
25
+ var _loadBackgroundComputationModule;
26
+ if (platform === "web") return (_loadBackgroundComputationModule = loadBackgroundComputationModule(id)) === null || _loadBackgroundComputationModule === void 0 ? void 0 : _loadBackgroundComputationModule.source;
27
+ }
28
+ };
29
+ }
30
+
31
+ export { backgroundComputationPlugin };
32
+ //# sourceMappingURL=backgroundComputationPlugin.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgroundComputationPlugin.native.js","names":[],"sources":["plugins/backgroundComputationPlugin.native.js"],"sourcesContent":["import { dirname, resolve, relative } from \"path\";\nimport { transformBackgroundComputations, loadBackgroundComputationModule } from \"../backgroundComputation\";\nfunction backgroundComputationPlugin(platform) {\n return {\n name: `one:background-computation:${platform}`,\n transform: {\n order: \"pre\",\n handler(code, id) {\n return transformBackgroundComputations(code, id, {\n platform,\n resolve: function resolve1(source, importer) {\n return resolve(dirname(importer), source);\n },\n workerFactory: function workerFactory(module) {\n return `() => new Worker(new URL(${JSON.stringify(`./${relative(dirname(id), module.id).replaceAll(\"\\\\\", \"/\")}`)}, import.meta.url), { type: 'module' })`;\n }\n });\n }\n },\n resolveId(source) {\n if (platform === \"web\" && loadBackgroundComputationModule(source)) return source;\n },\n load(id) {\n var _loadBackgroundComputationModule;\n if (platform === \"web\") return (_loadBackgroundComputationModule = loadBackgroundComputationModule(id)) === null || _loadBackgroundComputationModule === void 0 ? void 0 : _loadBackgroundComputationModule.source;\n }\n };\n}\nexport {\n backgroundComputationPlugin\n};\n//# sourceMappingURL=backgroundComputationPlugin.js.map\n"],"mappings":";;;;AAEA,SAAS,4BAA4B,UAAU;CAC7C,OAAO;EACL,MAAM,8BAA8B;EACpC,WAAW;GACT,OAAO;GACP,QAAQ,MAAM,IAAI;IAChB,OAAO,gCAAgC,MAAM,IAAI;KAC/C;KACA,SAAS,SAAS,SAAS,QAAQ,UAAU;MAC3C,OAAO,QAAQ,QAAQ,QAAQ,GAAG,MAAM;KAC1C;KACA,eAAe,SAAS,cAAc,QAAQ;MAC5C,OAAO,4BAA4B,KAAK,UAAU,KAAK,SAAS,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,WAAW,MAAM,GAAG,GAAG,EAAE;KACnH;IACF,CAAC;GACH;EACF;EACA,UAAU,QAAQ;GAChB,IAAI,aAAa,SAAS,gCAAgC,MAAM,GAAG,OAAO;EAC5E;EACA,KAAK,IAAI;GACP,IAAI;GACJ,IAAI,aAAa,OAAO,QAAQ,mCAAmC,gCAAgC,EAAE,OAAO,QAAQ,qCAAqC,KAAK,IAAI,KAAK,IAAI,iCAAiC;EAC9M;CACF;AACF"}
@@ -2,7 +2,7 @@ import { parse } from "es-module-lexer";
2
2
  import { mergeConfig } from "vite";
3
3
  import { isNativeEnvironment } from "../utils/environmentUtils.native.js";
4
4
 
5
- var getNativeExtensions = function(platform) {
5
+ var getNativeExtensions = function getNativeExtensions2(platform) {
6
6
  return [
7
7
  `.${platform}.tsx`,
8
8
  `.${platform}.ts`,
@@ -33,7 +33,7 @@ function reactNativeCommonJsPlugin(options) {
33
33
  return {
34
34
  name: "native",
35
35
  enforce: "pre",
36
- config: async function() {
36
+ config: async function config() {
37
37
  var sharedNativeConfig = {
38
38
  base: void 0,
39
39
  define: { "process.env.REACT_NATIVE_SERVER_PUBLIC_PORT": JSON.stringify(`${options.port}`) },
@@ -49,7 +49,7 @@ function reactNativeCommonJsPlugin(options) {
49
49
  preserveModules: true,
50
50
  manualChunks: void 0,
51
51
  exports: "named",
52
- entryFileNames: function() {
52
+ entryFileNames: function entryFileNames() {
53
53
  return `[name].js`;
54
54
  }
55
55
  },
@@ -1 +1 @@
1
- {"version":3,"file":"reactNativeCommonJsPlugin.native.js","names":[],"sources":["plugins/reactNativeCommonJsPlugin.native.js"],"sourcesContent":["import { parse } from \"es-module-lexer\";\nimport { mergeConfig } from \"vite\";\nimport { isNativeEnvironment } from \"../utils/environmentUtils\";\nvar getNativeExtensions = function(platform) {\n return [\n `.${platform}.tsx`,\n `.${platform}.ts`,\n `.${platform}.jsx`,\n `.${platform}.js`,\n \".native.js\",\n \".native.ts\",\n \".native.tsx\",\n \".tsx\",\n \".ts\",\n \".js\",\n \".jsx\",\n \".json\"\n ];\n};\nvar conditions = [\n \"react-native\",\n \"import\",\n \"require\"\n];\nvar mainFields = [\n \"react-native\",\n \"module\",\n \"jsnext:main\",\n \"jsnext\"\n];\nfunction reactNativeCommonJsPlugin(options) {\n return {\n name: \"native\",\n enforce: \"pre\",\n config: async function() {\n var sharedNativeConfig = {\n // Subfolder bases are not supported, and shouldn't be needed because we're embedding everything\n base: void 0,\n define: {\n \"process.env.REACT_NATIVE_SERVER_PUBLIC_PORT\": JSON.stringify(`${options.port}`)\n },\n build: {\n modulePreload: {\n polyfill: false\n },\n // Ensures that even very large assets are inlined in your JavaScript.\n assetsInlineLimit: 1e8,\n // Avoid warnings about large chunks\n chunkSizeWarningLimit: 1e8,\n // Emit all CSS as a single file, which `vite-plugin-singlefile` can then inline\n cssCodeSplit: false,\n // Avoids the extra step of testing Brotli compression, which isn't really pertinent to a file served locally\n reportCompressedSize: false,\n rolldownOptions: {\n treeshake: false,\n output: {\n preserveModules: true,\n manualChunks: void 0,\n // Ensure that as many resources as possible are inlined.\n // inlineDynamicImports: true,\n // this fixes some warnings but breaks import { default as config }\n exports: \"named\",\n // ensures we have clean names for our require paths\n entryFileNames: function() {\n return `[name].js`;\n }\n },\n plugins: [\n {\n name: `force-export-all`,\n async transform(code, id) {\n if (!isNativeEnvironment(this.environment)) {\n return;\n }\n if (id.includes(\"?commonjs\")) {\n return;\n }\n try {\n var [foundImports, foundExports] = parse(code);\n var idToModule = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = foundImports[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var imp = _step.value;\n if (imp.n) {\n var line = code.slice(imp.ss, imp.se);\n var imports = getAllImportedIdentifiers(line);\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = imports[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var _$id = _step1.value;\n idToModule[_$id] = imp.n;\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n var toReExport = {};\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = foundExports[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var exp = _step2.value;\n var expName = exp.ln || exp.n;\n if (RESERVED_WORDS.has(expName)) {\n continue;\n }\n var moduleName = idToModule[expName];\n if (moduleName) {\n var _toReExport, _moduleName;\n (_toReExport = toReExport)[_moduleName = moduleName] || (_toReExport[_moduleName] = []);\n toReExport[moduleName].push(expName);\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n var forceExports = ``;\n var found = 0;\n var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;\n try {\n for (var _iterator3 = code.split(\"\\n\")[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var line1 = _step3.value;\n if (line1.startsWith(\"export * from\")) {\n var [_, exportedName] = line1.match(/export \\* from ['\"]([^'\"]+)['\"]/) || [];\n if (exportedName) {\n found++;\n var name = `__vxrnExp${found}`;\n forceExports += `\n import * as ${name} from '${exportedName}';\n globalThis.__forceExport${name} = ${name}\n Object.assign(exports, globalThis.__forceExport${name});\n `;\n continue;\n }\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return != null) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n forceExports += Object.keys(toReExport).map(function(path) {\n var exportedNames = toReExport[path];\n found++;\n var name2 = `__vxrnExp${found}`;\n return `\n import * as ${name2} from '${path}';\n globalThis.__forceExport${name2} = [${exportedNames.map(function(n) {\n return n === \"default\" ? name2 : `${name2}.${n}`;\n }).join(\",\")}]\n `;\n }).join(\";\");\n return {\n code: code + \"\\n\" + forceExports,\n moduleSideEffects: \"no-treeshake\"\n };\n } catch (err) {\n console.warn(`Error forcing exports, probably ok`, id);\n }\n }\n }\n ]\n }\n },\n optimizeDeps: {\n noDiscovery: true,\n include: void 0,\n rolldownOptions: {\n // same extractExportsData fallback as the web optimizer config in\n // getOptimizeDeps.ts — an undeclared .ts dep entry is retried as JSX\n moduleTypes: {\n \".js\": \"jsx\",\n \".ts\": \"ts\",\n \".tsx\": \"tsx\"\n }\n }\n }\n };\n return {\n environments: {\n ios: mergeConfig(sharedNativeConfig, {\n define: {\n \"process.env.REACT_NATIVE_PLATFORM\": JSON.stringify(`ios`)\n },\n resolve: {\n extensions: getNativeExtensions(\"ios\"),\n conditions,\n mainFields\n },\n optimizeDeps: {\n rolldownOptions: {\n resolve: {\n extensions: getNativeExtensions(\"ios\")\n },\n plugins: [\n {\n name: \"react-native-assets\",\n resolveId(source) {\n if (/\\.(png|jpg|gif|webp)$/.test(source)) {\n return {\n id: \"\",\n external: true\n };\n }\n }\n }\n ]\n }\n }\n }),\n android: mergeConfig(sharedNativeConfig, {\n define: {\n \"process.env.REACT_NATIVE_PLATFORM\": JSON.stringify(`android`)\n },\n resolve: {\n extensions: getNativeExtensions(\"android\"),\n conditions,\n mainFields\n },\n optimizeDeps: {\n rolldownOptions: {\n resolve: {\n extensions: getNativeExtensions(\"android\")\n }\n }\n }\n })\n }\n };\n }\n };\n}\nfunction getAllImportedIdentifiers(importStatement) {\n var importRegex = /{([^}]+)}/;\n var match = importStatement.match(importRegex);\n if (!match) {\n return [];\n }\n var imports = match[1];\n return imports.split(\",\").map(function(name) {\n var parts = name.split(/\\s+as\\s+/);\n return parts[parts.length - 1].trim();\n }).filter(Boolean);\n}\nvar RESERVED_WORDS = /* @__PURE__ */ new Set([\n \"toString\",\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"export\",\n \"extends\",\n \"false\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"null\",\n \"return\",\n \"super\",\n \"switch\",\n \"this\",\n \"throw\",\n \"true\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n \"let\",\n \"static\",\n \"yield\",\n \"enum\"\n]);\nexport {\n conditions,\n mainFields,\n reactNativeCommonJsPlugin\n};\n//# sourceMappingURL=reactNativeCommonJsPlugin.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"reactNativeCommonJsPlugin.native.js","names":[],"sources":["plugins/reactNativeCommonJsPlugin.native.js"],"sourcesContent":["import { parse } from \"es-module-lexer\";\nimport { mergeConfig } from \"vite\";\nimport { isNativeEnvironment } from \"../utils/environmentUtils\";\nvar getNativeExtensions = function getNativeExtensions2(platform) {\n return [\n `.${platform}.tsx`,\n `.${platform}.ts`,\n `.${platform}.jsx`,\n `.${platform}.js`,\n \".native.js\",\n \".native.ts\",\n \".native.tsx\",\n \".tsx\",\n \".ts\",\n \".js\",\n \".jsx\",\n \".json\"\n ];\n};\nvar conditions = [\n \"react-native\",\n \"import\",\n \"require\"\n];\nvar mainFields = [\n \"react-native\",\n \"module\",\n \"jsnext:main\",\n \"jsnext\"\n];\nfunction reactNativeCommonJsPlugin(options) {\n return {\n name: \"native\",\n enforce: \"pre\",\n config: async function config() {\n var sharedNativeConfig = {\n // Subfolder bases are not supported, and shouldn't be needed because we're embedding everything\n base: void 0,\n define: {\n \"process.env.REACT_NATIVE_SERVER_PUBLIC_PORT\": JSON.stringify(`${options.port}`)\n },\n build: {\n modulePreload: {\n polyfill: false\n },\n // Ensures that even very large assets are inlined in your JavaScript.\n assetsInlineLimit: 1e8,\n // Avoid warnings about large chunks\n chunkSizeWarningLimit: 1e8,\n // Emit all CSS as a single file, which `vite-plugin-singlefile` can then inline\n cssCodeSplit: false,\n // Avoids the extra step of testing Brotli compression, which isn't really pertinent to a file served locally\n reportCompressedSize: false,\n rolldownOptions: {\n treeshake: false,\n output: {\n preserveModules: true,\n manualChunks: void 0,\n // Ensure that as many resources as possible are inlined.\n // inlineDynamicImports: true,\n // this fixes some warnings but breaks import { default as config }\n exports: \"named\",\n // ensures we have clean names for our require paths\n entryFileNames: function entryFileNames() {\n return `[name].js`;\n }\n },\n plugins: [\n {\n name: `force-export-all`,\n async transform(code, id) {\n if (!isNativeEnvironment(this.environment)) {\n return;\n }\n if (id.includes(\"?commonjs\")) {\n return;\n }\n try {\n var [foundImports, foundExports] = parse(code);\n var idToModule = {};\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = foundImports[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var imp = _step.value;\n if (imp.n) {\n var line = code.slice(imp.ss, imp.se);\n var imports = getAllImportedIdentifiers(line);\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = imports[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var _$id = _step1.value;\n idToModule[_$id] = imp.n;\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n var toReExport = {};\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = foundExports[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var exp = _step2.value;\n var expName = exp.ln || exp.n;\n if (RESERVED_WORDS.has(expName)) {\n continue;\n }\n var moduleName = idToModule[expName];\n if (moduleName) {\n var _toReExport, _moduleName;\n (_toReExport = toReExport)[_moduleName = moduleName] || (_toReExport[_moduleName] = []);\n toReExport[moduleName].push(expName);\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return != null) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n var forceExports = ``;\n var found = 0;\n var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;\n try {\n for (var _iterator3 = code.split(\"\\n\")[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var line1 = _step3.value;\n if (line1.startsWith(\"export * from\")) {\n var [_, exportedName] = line1.match(/export \\* from ['\"]([^'\"]+)['\"]/) || [];\n if (exportedName) {\n found++;\n var name = `__vxrnExp${found}`;\n forceExports += `\n import * as ${name} from '${exportedName}';\n globalThis.__forceExport${name} = ${name}\n Object.assign(exports, globalThis.__forceExport${name});\n `;\n continue;\n }\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return != null) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n forceExports += Object.keys(toReExport).map(function(path) {\n var exportedNames = toReExport[path];\n found++;\n var name2 = `__vxrnExp${found}`;\n return `\n import * as ${name2} from '${path}';\n globalThis.__forceExport${name2} = [${exportedNames.map(function(n) {\n return n === \"default\" ? name2 : `${name2}.${n}`;\n }).join(\",\")}]\n `;\n }).join(\";\");\n return {\n code: code + \"\\n\" + forceExports,\n moduleSideEffects: \"no-treeshake\"\n };\n } catch (err) {\n console.warn(`Error forcing exports, probably ok`, id);\n }\n }\n }\n ]\n }\n },\n optimizeDeps: {\n noDiscovery: true,\n include: void 0,\n rolldownOptions: {\n // same extractExportsData fallback as the web optimizer config in\n // getOptimizeDeps.ts — an undeclared .ts dep entry is retried as JSX\n moduleTypes: {\n \".js\": \"jsx\",\n \".ts\": \"ts\",\n \".tsx\": \"tsx\"\n }\n }\n }\n };\n return {\n environments: {\n ios: mergeConfig(sharedNativeConfig, {\n define: {\n \"process.env.REACT_NATIVE_PLATFORM\": JSON.stringify(`ios`)\n },\n resolve: {\n extensions: getNativeExtensions(\"ios\"),\n conditions,\n mainFields\n },\n optimizeDeps: {\n rolldownOptions: {\n resolve: {\n extensions: getNativeExtensions(\"ios\")\n },\n plugins: [\n {\n name: \"react-native-assets\",\n resolveId(source) {\n if (/\\.(png|jpg|gif|webp)$/.test(source)) {\n return {\n id: \"\",\n external: true\n };\n }\n }\n }\n ]\n }\n }\n }),\n android: mergeConfig(sharedNativeConfig, {\n define: {\n \"process.env.REACT_NATIVE_PLATFORM\": JSON.stringify(`android`)\n },\n resolve: {\n extensions: getNativeExtensions(\"android\"),\n conditions,\n mainFields\n },\n optimizeDeps: {\n rolldownOptions: {\n resolve: {\n extensions: getNativeExtensions(\"android\")\n }\n }\n }\n })\n }\n };\n }\n };\n}\nfunction getAllImportedIdentifiers(importStatement) {\n var importRegex = /{([^}]+)}/;\n var match = importStatement.match(importRegex);\n if (!match) {\n return [];\n }\n var imports = match[1];\n return imports.split(\",\").map(function(name) {\n var parts = name.split(/\\s+as\\s+/);\n return parts[parts.length - 1].trim();\n }).filter(Boolean);\n}\nvar RESERVED_WORDS = /* @__PURE__ */ new Set([\n \"toString\",\n \"break\",\n \"case\",\n \"catch\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"export\",\n \"extends\",\n \"false\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"null\",\n \"return\",\n \"super\",\n \"switch\",\n \"this\",\n \"throw\",\n \"true\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\",\n \"let\",\n \"static\",\n \"yield\",\n \"enum\"\n]);\nexport {\n conditions,\n mainFields,\n reactNativeCommonJsPlugin\n};\n//# sourceMappingURL=reactNativeCommonJsPlugin.js.map\n"],"mappings":";;;;;AAGA,IAAI,sBAAsB,SAAS,qBAAqB,UAAU;CAChE,OAAO;EACL,IAAI,SAAS;EACb,IAAI,SAAS;EACb,IAAI,SAAS;EACb,IAAI,SAAS;EACb;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AACA,IAAI,aAAa;CACf;CACA;CACA;AACF;AACA,IAAI,aAAa;CACf;CACA;CACA;CACA;AACF;AACA,SAAS,0BAA0B,SAAS;CAC1C,OAAO;EACL,MAAM;EACN,SAAS;EACT,QAAQ,eAAe,SAAS;GAC9B,IAAI,qBAAqB;IAEvB,MAAM,KAAK;IACX,QAAQ,EACN,+CAA+C,KAAK,UAAU,GAAG,QAAQ,MAAM,EACjF;IACA,OAAO;KACL,eAAe,EACb,UAAU,MACZ;KAEA,mBAAmB;KAEnB,uBAAuB;KAEvB,cAAc;KAEd,sBAAsB;KACtB,iBAAiB;MACf,WAAW;MACX,QAAQ;OACN,iBAAiB;OACjB,cAAc,KAAK;OAInB,SAAS;OAET,gBAAgB,SAAS,iBAAiB;QACxC,OAAO;OACT;MACF;MACA,SAAS,CACP;OACE,MAAM;OACN,MAAM,UAAU,MAAM,IAAI;QACxB,IAAI,CAAC,oBAAoB,KAAK,WAAW,GAAG;SAC1C;QACF;QACA,IAAI,GAAG,SAAS,WAAW,GAAG;SAC5B;QACF;QACA,IAAI;SACF,IAAI,CAAC,cAAc,gBAAgB,MAAM,IAAI;SAC7C,IAAI,aAAa,CAAC;SAClB,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;SACvF,IAAI;UACF,KAAK,IAAI,YAAY,aAAa,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;WAC7J,IAAI,MAAM,MAAM;WAChB,IAAI,IAAI,GAAG;YACT,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACpC,IAAI,UAAU,0BAA0B,IAAI;YAC5C,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;YAC1F,IAAI;aACF,KAAK,IAAI,aAAa,QAAQ,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;cAC9J,IAAI,OAAO,OAAO;cAClB,WAAW,QAAQ,IAAI;aACzB;YACF,SAAS,KAAK;aACZ,qBAAqB;aACrB,kBAAkB;YACpB,UAAU;aACR,IAAI;cACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;eAC5D,WAAW,OAAO;cACpB;aACF,UAAU;cACR,IAAI,oBAAoB;eACtB,MAAM;cACR;aACF;YACF;WACF;UACF;SACF,SAAS,KAAK;UACZ,oBAAoB;UACpB,iBAAiB;SACnB,UAAU;UACR,IAAI;WACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;YAC1D,UAAU,OAAO;WACnB;UACF,UAAU;WACR,IAAI,mBAAmB;YACrB,MAAM;WACR;UACF;SACF;SACA,IAAI,aAAa,CAAC;SAClB,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;SAC1F,IAAI;UACF,KAAK,IAAI,aAAa,aAAa,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;WACnK,IAAI,MAAM,OAAO;WACjB,IAAI,UAAU,IAAI,MAAM,IAAI;WAC5B,IAAI,eAAe,IAAI,OAAO,GAAG;YAC/B;WACF;WACA,IAAI,aAAa,WAAW;WAC5B,IAAI,YAAY;YACd,IAAI,aAAa;YACjB,CAAC,cAAc,WAAU,CAAE,cAAc,gBAAgB,YAAY,eAAe,CAAC;YACrF,WAAW,WAAW,CAAC,KAAK,OAAO;WACrC;UACF;SACF,SAAS,KAAK;UACZ,qBAAqB;UACrB,kBAAkB;SACpB,UAAU;UACR,IAAI;WACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;YAC5D,WAAW,OAAO;WACpB;UACF,UAAU;WACR,IAAI,oBAAoB;YACtB,MAAM;WACR;UACF;SACF;SACA,IAAI,eAAe;SACnB,IAAI,QAAQ;SACZ,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;SAC1F,IAAI;UACF,KAAK,IAAI,aAAa,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;WACvK,IAAI,QAAQ,OAAO;WACnB,IAAI,MAAM,WAAW,eAAe,GAAG;YACrC,IAAI,CAAC,GAAG,gBAAgB,MAAM,MAAM,iCAAiC,KAAK,CAAC;YAC3E,IAAI,cAAc;aAChB;aACA,IAAI,OAAO,YAAY;aACvB,gBAAgB;0CACF,KAAK,SAAS,aAAa;sDACf,KAAK,KAAK,KAAK;6EACQ,KAAK;;aAEtD;YACF;WACF;UACF;SACF,SAAS,KAAK;UACZ,qBAAqB;UACrB,kBAAkB;SACpB,UAAU;UACR,IAAI;WACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;YAC5D,WAAW,OAAO;WACpB;UACF,UAAU;WACR,IAAI,oBAAoB;YACtB,MAAM;WACR;UACF;SACF;SACA,gBAAgB,OAAO,KAAK,UAAU,CAAC,CAAC,IAAI,SAAS,MAAM;UACzD,IAAI,gBAAgB,WAAW;UAC/B;UACA,IAAI,QAAQ,YAAY;UACxB,OAAO;wCACW,MAAM,SAAS,KAAK;oDACR,MAAM,MAAM,cAAc,IAAI,SAAS,GAAG;WACtE,OAAO,MAAM,YAAY,QAAQ,GAAG,MAAM,GAAG;UAC/C,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;;SAEf,CAAC,CAAC,CAAC,KAAK,GAAG;SACX,OAAO;UACL,MAAM,OAAO,OAAO;UACpB,mBAAmB;SACrB;QACF,SAAS,KAAK;SACZ,QAAQ,KAAK,sCAAsC,EAAE;QACvD;OACF;MACF,CACF;KACF;IACF;IACA,cAAc;KACZ,aAAa;KACb,SAAS,KAAK;KACd,iBAAiB,EAGf,aAAa;MACX,OAAO;MACP,OAAO;MACP,QAAQ;KACV,EACF;IACF;GACF;GACA,OAAO,EACL,cAAc;IACZ,KAAK,YAAY,oBAAoB;KACnC,QAAQ,EACN,qCAAqC,KAAK,UAAU,KAAK,EAC3D;KACA,SAAS;MACP,YAAY,oBAAoB,KAAK;MACrC;MACA;KACF;KACA,cAAc,EACZ,iBAAiB;MACf,SAAS,EACP,YAAY,oBAAoB,KAAK,EACvC;MACA,SAAS,CACP;OACE,MAAM;OACN,UAAU,QAAQ;QAChB,IAAI,wBAAwB,KAAK,MAAM,GAAG;SACxC,OAAO;UACL,IAAI;UACJ,UAAU;SACZ;QACF;OACF;MACF,CACF;KACF,EACF;IACF,CAAC;IACD,SAAS,YAAY,oBAAoB;KACvC,QAAQ,EACN,qCAAqC,KAAK,UAAU,SAAS,EAC/D;KACA,SAAS;MACP,YAAY,oBAAoB,SAAS;MACzC;MACA;KACF;KACA,cAAc,EACZ,iBAAiB,EACf,SAAS,EACP,YAAY,oBAAoB,SAAS,EAC3C,EACF,EACF;IACF,CAAC;GACH,EACF;EACF;CACF;AACF;AACA,SAAS,0BAA0B,iBAAiB;CAClD,IAAI,cAAc;CAClB,IAAI,QAAQ,gBAAgB,MAAM,WAAW;CAC7C,IAAI,CAAC,OAAO;EACV,OAAO,CAAC;CACV;CACA,IAAI,UAAU,MAAM;CACpB,OAAO,QAAQ,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,MAAM;EAC3C,IAAI,QAAQ,KAAK,MAAM,UAAU;EACjC,OAAO,MAAM,MAAM,SAAS,EAAE,CAAC,KAAK;CACtC,CAAC,CAAC,CAAC,OAAO,OAAO;AACnB;AACA,IAAI,iCAAiC,IAAI,IAAI;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import path from "node:path";
2
2
  import FSExtra from "fs-extra";
3
+ import { getMimeType } from "hono/utils/mime";
3
4
  import colors from "picocolors";
4
5
  import { isNativeEnvironment } from "../utils/environmentUtils.mjs";
5
6
 
@@ -71,7 +72,7 @@ export default asset;
71
72
  const assetPath = "./" + pathname.slice(`/${DEV_ASSET_DEST_PATH}/`.length).replace(/\.*$/, "");
72
73
  try {
73
74
  const asset = await FSExtra.readFile(assetPath);
74
- res.setHeader("content-type", "image/png");
75
+ res.setHeader("content-type", getMimeType(assetPath) || "application/octet-stream");
75
76
  res.write(asset);
76
77
  res.end();
77
78
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"reactNativeDevAssetPlugin.js","names":[],"sources":["plugins/reactNativeDevAssetPlugin.js"],"sourcesContent":["import path from \"node:path\";\nimport FSExtra from \"fs-extra\";\nimport colors from \"picocolors\";\nimport { isNativeEnvironment } from \"../utils/environmentUtils\";\nconst ASSET_DEST_DIR = \"assets\";\nconst DEV_ASSET_DEST_PATH = \"__vxrn_dev_native_assets\";\nfunction reactNativeDevAssetPlugin(options) {\n const { assetExts } = options;\n const assetExtsRegExp = new RegExp(`\\\\.(${assetExts.join(\"|\")})$`);\n const isAssetFile = (id) => assetExtsRegExp.test(id);\n let config;\n async function getAssetData(id) {\n const projectRoot = config.root;\n const relativeAssetPath = path.relative(projectRoot, id);\n let assetUrlPath = relativeAssetPath;\n if (path.sep === \"\\\\\") {\n assetUrlPath = assetUrlPath.replaceAll(\"\\\\\", \"/\");\n }\n const relativeAssetDir = path.dirname(relativeAssetPath);\n const assetBasename = path.basename(relativeAssetPath);\n const assetExt = path.extname(assetBasename).slice(1);\n const assetName = assetBasename.slice(\n 0,\n -(assetExt.length + 1)\n );\n const assetData = {\n __packager_asset: true,\n fileSystemLocation: path.dirname(id),\n relativeFileSystemLocation: relativeAssetDir,\n httpServerLocation: `/${options.mode === \"dev\" ? DEV_ASSET_DEST_PATH : ASSET_DEST_DIR}/${assetUrlPath.slice(\n 0,\n -(assetBasename.length + 1)\n /* removing the `/filename.ext` at the end */\n )}`,\n scales: [1],\n // TODO\n name: assetName,\n type: assetExt\n };\n return assetData;\n }\n return {\n name: \"vxrn:react-native-dev-asset\",\n enforce: \"pre\",\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n // resolveId(source, importer, options) {\n // if (!isNativeEnvironment(this.environment)) return\n // if (!isAssetFile(source)) return\n // // TODO: May need to handle platform specific extensions here.\n // },\n async load(id, _options) {\n if (!isNativeEnvironment(this.environment)) return;\n if (!isAssetFile(id)) return;\n const assetData = await getAssetData(id);\n if (options.mode === \"prod\" && options.assetsDest) {\n const assetsDestDir = path.join(\n options.assetsDest,\n ASSET_DEST_DIR,\n assetData.relativeFileSystemLocation\n );\n await FSExtra.ensureDir(assetsDestDir);\n await FSExtra.copyFile(\n id,\n path.join(assetsDestDir, `${assetData.name}.${assetData.type}`)\n );\n }\n const assetModuleCode = `\nimport { AssetRegistry } from 'react-native';\n\nexport const asset = AssetRegistry.registerAsset(${JSON.stringify(assetData, null, 2)});\n\nexport default asset;\n `;\n return assetModuleCode;\n },\n /**\n * Extend the dev server to serve assets during development.\n */\n configureServer(server) {\n const { logger } = server.config;\n const defaultLogOptions = { timestamp: true };\n server.middlewares.use(async (req, res, next) => {\n if (!req.url?.startsWith(`/${DEV_ASSET_DEST_PATH}/`)) {\n return next();\n }\n const url = new URL(\"http://example.com\" + req.url);\n const pathname = url.pathname;\n const assetPath = \"./\" + pathname.slice(`/${DEV_ASSET_DEST_PATH}/`.length).replace(/\\.*$/, \"\");\n try {\n const asset = await FSExtra.readFile(assetPath);\n res.setHeader(\"content-type\", \"image/png\");\n res.write(asset);\n res.end();\n } catch (e) {\n logger.error(\n colors.red(\n `[vxrn] Failed to serve asset: ${assetPath}: ${e instanceof Error ? e.message : \"unknown error\"}`\n ),\n defaultLogOptions\n );\n res.statusCode = e instanceof Error && e.code === \"ENOENT\" ? 404 : 500;\n res.end();\n }\n });\n }\n };\n}\nexport {\n reactNativeDevAssetPlugin\n};\n//# sourceMappingURL=reactNativeDevAssetPlugin.js.map\n"],"mappings":";;;;;;AAIA,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,SAAS,0BAA0B,SAAS;CAC1C,MAAM,EAAE,cAAc;CACtB,MAAM,kBAAkB,IAAI,OAAO,OAAO,UAAU,KAAK,GAAG,EAAE,GAAG;CACjE,MAAM,eAAe,OAAO,gBAAgB,KAAK,EAAE;CACnD,IAAI;CACJ,eAAe,aAAa,IAAI;EAC9B,MAAM,cAAc,OAAO;EAC3B,MAAM,oBAAoB,KAAK,SAAS,aAAa,EAAE;EACvD,IAAI,eAAe;EACnB,IAAI,KAAK,QAAQ,MAAM;GACrB,eAAe,aAAa,WAAW,MAAM,GAAG;EAClD;EACA,MAAM,mBAAmB,KAAK,QAAQ,iBAAiB;EACvD,MAAM,gBAAgB,KAAK,SAAS,iBAAiB;EACrD,MAAM,WAAW,KAAK,QAAQ,aAAa,CAAC,CAAC,MAAM,CAAC;EACpD,MAAM,YAAY,cAAc,MAC9B,GACA,EAAE,SAAS,SAAS,EACtB;EACA,MAAM,YAAY;GAChB,kBAAkB;GAClB,oBAAoB,KAAK,QAAQ,EAAE;GACnC,4BAA4B;GAC5B,oBAAoB,IAAI,QAAQ,SAAS,QAAQ,sBAAsB,eAAe,GAAG,aAAa,MACpG,GACA,EAAE,cAAc,SAAS,EAE3B;GACA,QAAQ,CAAC,CAAC;GAEV,MAAM;GACN,MAAM;EACR;EACA,OAAO;CACT;CACA,OAAO;EACL,MAAM;EACN,SAAS;EACT,eAAe,gBAAgB;GAC7B,SAAS;EACX;EAMA,MAAM,KAAK,IAAI,UAAU;GACvB,IAAI,CAAC,oBAAoB,KAAK,WAAW,GAAG;GAC5C,IAAI,CAAC,YAAY,EAAE,GAAG;GACtB,MAAM,YAAY,MAAM,aAAa,EAAE;GACvC,IAAI,QAAQ,SAAS,UAAU,QAAQ,YAAY;IACjD,MAAM,gBAAgB,KAAK,KACzB,QAAQ,YACR,gBACA,UAAU,0BACZ;IACA,MAAM,QAAQ,UAAU,aAAa;IACrC,MAAM,QAAQ,SACZ,IACA,KAAK,KAAK,eAAe,GAAG,UAAU,KAAK,GAAG,UAAU,MAAM,CAChE;GACF;GACA,MAAM,kBAAkB;;;mDAGqB,KAAK,UAAU,WAAW,MAAM,CAAC,EAAE;;;;GAIhF,OAAO;EACT;;;;EAIA,gBAAgB,QAAQ;GACtB,MAAM,EAAE,WAAW,OAAO;GAC1B,MAAM,oBAAoB,EAAE,WAAW,KAAK;GAC5C,OAAO,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;IAC/C,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,oBAAoB,EAAE,GAAG;KACpD,OAAO,KAAK;IACd;IACA,MAAM,MAAM,IAAI,IAAI,uBAAuB,IAAI,GAAG;IAClD,MAAM,WAAW,IAAI;IACrB,MAAM,YAAY,OAAO,SAAS,MAAM,IAAI,oBAAoB,GAAG,MAAM,CAAC,CAAC,QAAQ,QAAQ,EAAE;IAC7F,IAAI;KACF,MAAM,QAAQ,MAAM,QAAQ,SAAS,SAAS;KAC9C,IAAI,UAAU,gBAAgB,WAAW;KACzC,IAAI,MAAM,KAAK;KACf,IAAI,IAAI;IACV,SAAS,GAAG;KACV,OAAO,MACL,OAAO,IACL,iCAAiC,UAAU,IAAI,aAAa,QAAQ,EAAE,UAAU,iBAClF,GACA,iBACF;KACA,IAAI,aAAa,aAAa,SAAS,EAAE,SAAS,WAAW,MAAM;KACnE,IAAI,IAAI;IACV;GACF,CAAC;EACH;CACF;AACF"}
1
+ {"version":3,"file":"reactNativeDevAssetPlugin.js","names":[],"sources":["plugins/reactNativeDevAssetPlugin.js"],"sourcesContent":["import path from \"node:path\";\nimport FSExtra from \"fs-extra\";\nimport { getMimeType } from \"hono/utils/mime\";\nimport colors from \"picocolors\";\nimport { isNativeEnvironment } from \"../utils/environmentUtils\";\nconst ASSET_DEST_DIR = \"assets\";\nconst DEV_ASSET_DEST_PATH = \"__vxrn_dev_native_assets\";\nfunction reactNativeDevAssetPlugin(options) {\n const { assetExts } = options;\n const assetExtsRegExp = new RegExp(`\\\\.(${assetExts.join(\"|\")})$`);\n const isAssetFile = (id) => assetExtsRegExp.test(id);\n let config;\n async function getAssetData(id) {\n const projectRoot = config.root;\n const relativeAssetPath = path.relative(projectRoot, id);\n let assetUrlPath = relativeAssetPath;\n if (path.sep === \"\\\\\") {\n assetUrlPath = assetUrlPath.replaceAll(\"\\\\\", \"/\");\n }\n const relativeAssetDir = path.dirname(relativeAssetPath);\n const assetBasename = path.basename(relativeAssetPath);\n const assetExt = path.extname(assetBasename).slice(1);\n const assetName = assetBasename.slice(\n 0,\n -(assetExt.length + 1)\n );\n const assetData = {\n __packager_asset: true,\n fileSystemLocation: path.dirname(id),\n relativeFileSystemLocation: relativeAssetDir,\n httpServerLocation: `/${options.mode === \"dev\" ? DEV_ASSET_DEST_PATH : ASSET_DEST_DIR}/${assetUrlPath.slice(\n 0,\n -(assetBasename.length + 1)\n /* removing the `/filename.ext` at the end */\n )}`,\n scales: [1],\n // TODO\n name: assetName,\n type: assetExt\n };\n return assetData;\n }\n return {\n name: \"vxrn:react-native-dev-asset\",\n enforce: \"pre\",\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n // resolveId(source, importer, options) {\n // if (!isNativeEnvironment(this.environment)) return\n // if (!isAssetFile(source)) return\n // // TODO: May need to handle platform specific extensions here.\n // },\n async load(id, _options) {\n if (!isNativeEnvironment(this.environment)) return;\n if (!isAssetFile(id)) return;\n const assetData = await getAssetData(id);\n if (options.mode === \"prod\" && options.assetsDest) {\n const assetsDestDir = path.join(\n options.assetsDest,\n ASSET_DEST_DIR,\n assetData.relativeFileSystemLocation\n );\n await FSExtra.ensureDir(assetsDestDir);\n await FSExtra.copyFile(\n id,\n path.join(assetsDestDir, `${assetData.name}.${assetData.type}`)\n );\n }\n const assetModuleCode = `\nimport { AssetRegistry } from 'react-native';\n\nexport const asset = AssetRegistry.registerAsset(${JSON.stringify(assetData, null, 2)});\n\nexport default asset;\n `;\n return assetModuleCode;\n },\n /**\n * Extend the dev server to serve assets during development.\n */\n configureServer(server) {\n const { logger } = server.config;\n const defaultLogOptions = { timestamp: true };\n server.middlewares.use(async (req, res, next) => {\n if (!req.url?.startsWith(`/${DEV_ASSET_DEST_PATH}/`)) {\n return next();\n }\n const url = new URL(\"http://example.com\" + req.url);\n const pathname = url.pathname;\n const assetPath = \"./\" + pathname.slice(`/${DEV_ASSET_DEST_PATH}/`.length).replace(/\\.*$/, \"\");\n try {\n const asset = await FSExtra.readFile(assetPath);\n res.setHeader(\n \"content-type\",\n getMimeType(assetPath) || \"application/octet-stream\"\n );\n res.write(asset);\n res.end();\n } catch (e) {\n logger.error(\n colors.red(\n `[vxrn] Failed to serve asset: ${assetPath}: ${e instanceof Error ? e.message : \"unknown error\"}`\n ),\n defaultLogOptions\n );\n res.statusCode = e instanceof Error && e.code === \"ENOENT\" ? 404 : 500;\n res.end();\n }\n });\n }\n };\n}\nexport {\n reactNativeDevAssetPlugin\n};\n//# sourceMappingURL=reactNativeDevAssetPlugin.js.map\n"],"mappings":";;;;;;;AAKA,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,SAAS,0BAA0B,SAAS;CAC1C,MAAM,EAAE,cAAc;CACtB,MAAM,kBAAkB,IAAI,OAAO,OAAO,UAAU,KAAK,GAAG,EAAE,GAAG;CACjE,MAAM,eAAe,OAAO,gBAAgB,KAAK,EAAE;CACnD,IAAI;CACJ,eAAe,aAAa,IAAI;EAC9B,MAAM,cAAc,OAAO;EAC3B,MAAM,oBAAoB,KAAK,SAAS,aAAa,EAAE;EACvD,IAAI,eAAe;EACnB,IAAI,KAAK,QAAQ,MAAM;GACrB,eAAe,aAAa,WAAW,MAAM,GAAG;EAClD;EACA,MAAM,mBAAmB,KAAK,QAAQ,iBAAiB;EACvD,MAAM,gBAAgB,KAAK,SAAS,iBAAiB;EACrD,MAAM,WAAW,KAAK,QAAQ,aAAa,CAAC,CAAC,MAAM,CAAC;EACpD,MAAM,YAAY,cAAc,MAC9B,GACA,EAAE,SAAS,SAAS,EACtB;EACA,MAAM,YAAY;GAChB,kBAAkB;GAClB,oBAAoB,KAAK,QAAQ,EAAE;GACnC,4BAA4B;GAC5B,oBAAoB,IAAI,QAAQ,SAAS,QAAQ,sBAAsB,eAAe,GAAG,aAAa,MACpG,GACA,EAAE,cAAc,SAAS,EAE3B;GACA,QAAQ,CAAC,CAAC;GAEV,MAAM;GACN,MAAM;EACR;EACA,OAAO;CACT;CACA,OAAO;EACL,MAAM;EACN,SAAS;EACT,eAAe,gBAAgB;GAC7B,SAAS;EACX;EAMA,MAAM,KAAK,IAAI,UAAU;GACvB,IAAI,CAAC,oBAAoB,KAAK,WAAW,GAAG;GAC5C,IAAI,CAAC,YAAY,EAAE,GAAG;GACtB,MAAM,YAAY,MAAM,aAAa,EAAE;GACvC,IAAI,QAAQ,SAAS,UAAU,QAAQ,YAAY;IACjD,MAAM,gBAAgB,KAAK,KACzB,QAAQ,YACR,gBACA,UAAU,0BACZ;IACA,MAAM,QAAQ,UAAU,aAAa;IACrC,MAAM,QAAQ,SACZ,IACA,KAAK,KAAK,eAAe,GAAG,UAAU,KAAK,GAAG,UAAU,MAAM,CAChE;GACF;GACA,MAAM,kBAAkB;;;mDAGqB,KAAK,UAAU,WAAW,MAAM,CAAC,EAAE;;;;GAIhF,OAAO;EACT;;;;EAIA,gBAAgB,QAAQ;GACtB,MAAM,EAAE,WAAW,OAAO;GAC1B,MAAM,oBAAoB,EAAE,WAAW,KAAK;GAC5C,OAAO,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;IAC/C,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,oBAAoB,EAAE,GAAG;KACpD,OAAO,KAAK;IACd;IACA,MAAM,MAAM,IAAI,IAAI,uBAAuB,IAAI,GAAG;IAClD,MAAM,WAAW,IAAI;IACrB,MAAM,YAAY,OAAO,SAAS,MAAM,IAAI,oBAAoB,GAAG,MAAM,CAAC,CAAC,QAAQ,QAAQ,EAAE;IAC7F,IAAI;KACF,MAAM,QAAQ,MAAM,QAAQ,SAAS,SAAS;KAC9C,IAAI,UACF,gBACA,YAAY,SAAS,KAAK,0BAC5B;KACA,IAAI,MAAM,KAAK;KACf,IAAI,IAAI;IACV,SAAS,GAAG;KACV,OAAO,MACL,OAAO,IACL,iCAAiC,UAAU,IAAI,aAAa,QAAQ,EAAE,UAAU,iBAClF,GACA,iBACF;KACA,IAAI,aAAa,aAAa,SAAS,EAAE,SAAS,WAAW,MAAM;KACnE,IAAI,IAAI;IACV;GACF,CAAC;EACH;CACF;AACF"}
@@ -1,5 +1,6 @@
1
1
  import path from "path";
2
2
  import FSExtra from "fs-extra";
3
+ import { getMimeType } from "hono/utils/mime";
3
4
  import colors from "picocolors";
4
5
  import { isNativeEnvironment } from "../utils/environmentUtils.native.js";
5
6
 
@@ -8,7 +9,7 @@ var DEV_ASSET_DEST_PATH = "__vxrn_dev_native_assets";
8
9
  function reactNativeDevAssetPlugin(options) {
9
10
  var { assetExts } = options;
10
11
  var assetExtsRegExp = new RegExp(`\\.(${assetExts.join("|")})$`);
11
- var isAssetFile = function(id) {
12
+ var isAssetFile = function isAssetFile2(id) {
12
13
  return assetExtsRegExp.test(id);
13
14
  };
14
15
  var config;
@@ -74,7 +75,7 @@ export default asset;
74
75
  var assetPath = "./" + pathname.slice(`/${DEV_ASSET_DEST_PATH}/`.length).replace(/\.*$/, "");
75
76
  try {
76
77
  var asset = await FSExtra.readFile(assetPath);
77
- res.setHeader("content-type", "image/png");
78
+ res.setHeader("content-type", getMimeType(assetPath) || "application/octet-stream");
78
79
  res.write(asset);
79
80
  res.end();
80
81
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"reactNativeDevAssetPlugin.native.js","names":[],"sources":["plugins/reactNativeDevAssetPlugin.native.js"],"sourcesContent":["import path from \"path\";\nimport FSExtra from \"fs-extra\";\nimport colors from \"picocolors\";\nimport { isNativeEnvironment } from \"../utils/environmentUtils\";\nvar ASSET_DEST_DIR = \"assets\";\nvar DEV_ASSET_DEST_PATH = \"__vxrn_dev_native_assets\";\nfunction reactNativeDevAssetPlugin(options) {\n var { assetExts } = options;\n var assetExtsRegExp = new RegExp(`\\\\.(${assetExts.join(\"|\")})$`);\n var isAssetFile = function(id) {\n return assetExtsRegExp.test(id);\n };\n var config;\n async function getAssetData(id) {\n var projectRoot = config.root;\n var relativeAssetPath = path.relative(projectRoot, id);\n var assetUrlPath = relativeAssetPath;\n if (path.sep === \"\\\\\") {\n assetUrlPath = assetUrlPath.replaceAll(\"\\\\\", \"/\");\n }\n var relativeAssetDir = path.dirname(relativeAssetPath);\n var assetBasename = path.basename(relativeAssetPath);\n var assetExt = path.extname(assetBasename).slice(1);\n var assetName = assetBasename.slice(0, -(assetExt.length + 1));\n var assetData = {\n __packager_asset: true,\n fileSystemLocation: path.dirname(id),\n relativeFileSystemLocation: relativeAssetDir,\n httpServerLocation: `/${options.mode === \"dev\" ? DEV_ASSET_DEST_PATH : ASSET_DEST_DIR}/${assetUrlPath.slice(0, -(assetBasename.length + 1))}`,\n scales: [\n 1\n ],\n // TODO\n name: assetName,\n type: assetExt\n };\n return assetData;\n }\n return {\n name: \"vxrn:react-native-dev-asset\",\n enforce: \"pre\",\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n // resolveId(source, importer, options) {\n // if (!isNativeEnvironment(this.environment)) return\n // if (!isAssetFile(source)) return\n // // TODO: May need to handle platform specific extensions here.\n // },\n async load(id, _options) {\n if (!isNativeEnvironment(this.environment)) return;\n if (!isAssetFile(id)) return;\n var assetData = await getAssetData(id);\n if (options.mode === \"prod\" && options.assetsDest) {\n var assetsDestDir = path.join(options.assetsDest, ASSET_DEST_DIR, assetData.relativeFileSystemLocation);\n await FSExtra.ensureDir(assetsDestDir);\n await FSExtra.copyFile(id, path.join(assetsDestDir, `${assetData.name}.${assetData.type}`));\n }\n var assetModuleCode = `\nimport { AssetRegistry } from 'react-native';\n\nexport const asset = AssetRegistry.registerAsset(${JSON.stringify(assetData, null, 2)});\n\nexport default asset;\n `;\n return assetModuleCode;\n },\n /**\n * Extend the dev server to serve assets during development.\n */\n configureServer(server) {\n var { logger } = server.config;\n var defaultLogOptions = {\n timestamp: true\n };\n server.middlewares.use(async function(req, res, next) {\n var _req_url;\n if (!((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.startsWith(`/${DEV_ASSET_DEST_PATH}/`))) {\n return next();\n }\n var url = new URL(\"http://example.com\" + req.url);\n var pathname = url.pathname;\n var assetPath = \"./\" + pathname.slice(`/${DEV_ASSET_DEST_PATH}/`.length).replace(/\\.*$/, \"\");\n try {\n var asset = await FSExtra.readFile(assetPath);\n res.setHeader(\"content-type\", \"image/png\");\n res.write(asset);\n res.end();\n } catch (e) {\n logger.error(colors.red(`[vxrn] Failed to serve asset: ${assetPath}: ${e instanceof Error ? e.message : \"unknown error\"}`), defaultLogOptions);\n res.statusCode = e instanceof Error && e.code === \"ENOENT\" ? 404 : 500;\n res.end();\n }\n });\n }\n };\n}\nexport {\n reactNativeDevAssetPlugin\n};\n//# sourceMappingURL=reactNativeDevAssetPlugin.js.map\n"],"mappings":";;;;;;AAIA,IAAI,iBAAiB;AACrB,IAAI,sBAAsB;AAC1B,SAAS,0BAA0B,SAAS;CAC1C,IAAI,EAAE,cAAc;CACpB,IAAI,kBAAkB,IAAI,OAAO,OAAO,UAAU,KAAK,GAAG,EAAE,GAAG;CAC/D,IAAI,cAAc,SAAS,IAAI;EAC7B,OAAO,gBAAgB,KAAK,EAAE;CAChC;CACA,IAAI;CACJ,eAAe,aAAa,IAAI;EAC9B,IAAI,cAAc,OAAO;EACzB,IAAI,oBAAoB,KAAK,SAAS,aAAa,EAAE;EACrD,IAAI,eAAe;EACnB,IAAI,KAAK,QAAQ,MAAM;GACrB,eAAe,aAAa,WAAW,MAAM,GAAG;EAClD;EACA,IAAI,mBAAmB,KAAK,QAAQ,iBAAiB;EACrD,IAAI,gBAAgB,KAAK,SAAS,iBAAiB;EACnD,IAAI,WAAW,KAAK,QAAQ,aAAa,CAAC,CAAC,MAAM,CAAC;EAClD,IAAI,YAAY,cAAc,MAAM,GAAG,EAAE,SAAS,SAAS,EAAE;EAC7D,IAAI,YAAY;GACd,kBAAkB;GAClB,oBAAoB,KAAK,QAAQ,EAAE;GACnC,4BAA4B;GAC5B,oBAAoB,IAAI,QAAQ,SAAS,QAAQ,sBAAsB,eAAe,GAAG,aAAa,MAAM,GAAG,EAAE,cAAc,SAAS,EAAE;GAC1I,QAAQ,CACN,CACF;GAEA,MAAM;GACN,MAAM;EACR;EACA,OAAO;CACT;CACA,OAAO;EACL,MAAM;EACN,SAAS;EACT,eAAe,gBAAgB;GAC7B,SAAS;EACX;EAMA,MAAM,KAAK,IAAI,UAAU;GACvB,IAAI,CAAC,oBAAoB,KAAK,WAAW,GAAG;GAC5C,IAAI,CAAC,YAAY,EAAE,GAAG;GACtB,IAAI,YAAY,MAAM,aAAa,EAAE;GACrC,IAAI,QAAQ,SAAS,UAAU,QAAQ,YAAY;IACjD,IAAI,gBAAgB,KAAK,KAAK,QAAQ,YAAY,gBAAgB,UAAU,0BAA0B;IACtG,MAAM,QAAQ,UAAU,aAAa;IACrC,MAAM,QAAQ,SAAS,IAAI,KAAK,KAAK,eAAe,GAAG,UAAU,KAAK,GAAG,UAAU,MAAM,CAAC;GAC5F;GACA,IAAI,kBAAkB;;;mDAGuB,KAAK,UAAU,WAAW,MAAM,CAAC,EAAE;;;;GAIhF,OAAO;EACT;;;;EAIA,gBAAgB,QAAQ;GACtB,IAAI,EAAE,WAAW,OAAO;GACxB,IAAI,oBAAoB,EACtB,WAAW,KACb;GACA,OAAO,YAAY,IAAI,eAAe,KAAK,KAAK,MAAM;IACpD,IAAI;IACJ,IAAI,GAAG,WAAW,IAAI,SAAS,QAAQ,aAAa,KAAK,IAAI,KAAK,IAAI,SAAS,WAAW,IAAI,oBAAoB,EAAE,IAAI;KACtH,OAAO,KAAK;IACd;IACA,IAAI,MAAM,IAAI,IAAI,uBAAuB,IAAI,GAAG;IAChD,IAAI,WAAW,IAAI;IACnB,IAAI,YAAY,OAAO,SAAS,MAAM,IAAI,oBAAoB,GAAG,MAAM,CAAC,CAAC,QAAQ,QAAQ,EAAE;IAC3F,IAAI;KACF,IAAI,QAAQ,MAAM,QAAQ,SAAS,SAAS;KAC5C,IAAI,UAAU,gBAAgB,WAAW;KACzC,IAAI,MAAM,KAAK;KACf,IAAI,IAAI;IACV,SAAS,GAAG;KACV,OAAO,MAAM,OAAO,IAAI,iCAAiC,UAAU,IAAI,aAAa,QAAQ,EAAE,UAAU,iBAAiB,GAAG,iBAAiB;KAC7I,IAAI,aAAa,aAAa,SAAS,EAAE,SAAS,WAAW,MAAM;KACnE,IAAI,IAAI;IACV;GACF,CAAC;EACH;CACF;AACF"}
1
+ {"version":3,"file":"reactNativeDevAssetPlugin.native.js","names":[],"sources":["plugins/reactNativeDevAssetPlugin.native.js"],"sourcesContent":["import path from \"path\";\nimport FSExtra from \"fs-extra\";\nimport { getMimeType } from \"hono/utils/mime\";\nimport colors from \"picocolors\";\nimport { isNativeEnvironment } from \"../utils/environmentUtils\";\nvar ASSET_DEST_DIR = \"assets\";\nvar DEV_ASSET_DEST_PATH = \"__vxrn_dev_native_assets\";\nfunction reactNativeDevAssetPlugin(options) {\n var { assetExts } = options;\n var assetExtsRegExp = new RegExp(`\\\\.(${assetExts.join(\"|\")})$`);\n var isAssetFile = function isAssetFile2(id) {\n return assetExtsRegExp.test(id);\n };\n var config;\n async function getAssetData(id) {\n var projectRoot = config.root;\n var relativeAssetPath = path.relative(projectRoot, id);\n var assetUrlPath = relativeAssetPath;\n if (path.sep === \"\\\\\") {\n assetUrlPath = assetUrlPath.replaceAll(\"\\\\\", \"/\");\n }\n var relativeAssetDir = path.dirname(relativeAssetPath);\n var assetBasename = path.basename(relativeAssetPath);\n var assetExt = path.extname(assetBasename).slice(1);\n var assetName = assetBasename.slice(0, -(assetExt.length + 1));\n var assetData = {\n __packager_asset: true,\n fileSystemLocation: path.dirname(id),\n relativeFileSystemLocation: relativeAssetDir,\n httpServerLocation: `/${options.mode === \"dev\" ? DEV_ASSET_DEST_PATH : ASSET_DEST_DIR}/${assetUrlPath.slice(0, -(assetBasename.length + 1))}`,\n scales: [\n 1\n ],\n // TODO\n name: assetName,\n type: assetExt\n };\n return assetData;\n }\n return {\n name: \"vxrn:react-native-dev-asset\",\n enforce: \"pre\",\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n // resolveId(source, importer, options) {\n // if (!isNativeEnvironment(this.environment)) return\n // if (!isAssetFile(source)) return\n // // TODO: May need to handle platform specific extensions here.\n // },\n async load(id, _options) {\n if (!isNativeEnvironment(this.environment)) return;\n if (!isAssetFile(id)) return;\n var assetData = await getAssetData(id);\n if (options.mode === \"prod\" && options.assetsDest) {\n var assetsDestDir = path.join(options.assetsDest, ASSET_DEST_DIR, assetData.relativeFileSystemLocation);\n await FSExtra.ensureDir(assetsDestDir);\n await FSExtra.copyFile(id, path.join(assetsDestDir, `${assetData.name}.${assetData.type}`));\n }\n var assetModuleCode = `\nimport { AssetRegistry } from 'react-native';\n\nexport const asset = AssetRegistry.registerAsset(${JSON.stringify(assetData, null, 2)});\n\nexport default asset;\n `;\n return assetModuleCode;\n },\n /**\n * Extend the dev server to serve assets during development.\n */\n configureServer(server) {\n var { logger } = server.config;\n var defaultLogOptions = {\n timestamp: true\n };\n server.middlewares.use(async function(req, res, next) {\n var _req_url;\n if (!((_req_url = req.url) === null || _req_url === void 0 ? void 0 : _req_url.startsWith(`/${DEV_ASSET_DEST_PATH}/`))) {\n return next();\n }\n var url = new URL(\"http://example.com\" + req.url);\n var pathname = url.pathname;\n var assetPath = \"./\" + pathname.slice(`/${DEV_ASSET_DEST_PATH}/`.length).replace(/\\.*$/, \"\");\n try {\n var asset = await FSExtra.readFile(assetPath);\n res.setHeader(\"content-type\", getMimeType(assetPath) || \"application/octet-stream\");\n res.write(asset);\n res.end();\n } catch (e) {\n logger.error(colors.red(`[vxrn] Failed to serve asset: ${assetPath}: ${e instanceof Error ? e.message : \"unknown error\"}`), defaultLogOptions);\n res.statusCode = e instanceof Error && e.code === \"ENOENT\" ? 404 : 500;\n res.end();\n }\n });\n }\n };\n}\nexport {\n reactNativeDevAssetPlugin\n};\n//# sourceMappingURL=reactNativeDevAssetPlugin.js.map\n"],"mappings":";;;;;;;AAKA,IAAI,iBAAiB;AACrB,IAAI,sBAAsB;AAC1B,SAAS,0BAA0B,SAAS;CAC1C,IAAI,EAAE,cAAc;CACpB,IAAI,kBAAkB,IAAI,OAAO,OAAO,UAAU,KAAK,GAAG,EAAE,GAAG;CAC/D,IAAI,cAAc,SAAS,aAAa,IAAI;EAC1C,OAAO,gBAAgB,KAAK,EAAE;CAChC;CACA,IAAI;CACJ,eAAe,aAAa,IAAI;EAC9B,IAAI,cAAc,OAAO;EACzB,IAAI,oBAAoB,KAAK,SAAS,aAAa,EAAE;EACrD,IAAI,eAAe;EACnB,IAAI,KAAK,QAAQ,MAAM;GACrB,eAAe,aAAa,WAAW,MAAM,GAAG;EAClD;EACA,IAAI,mBAAmB,KAAK,QAAQ,iBAAiB;EACrD,IAAI,gBAAgB,KAAK,SAAS,iBAAiB;EACnD,IAAI,WAAW,KAAK,QAAQ,aAAa,CAAC,CAAC,MAAM,CAAC;EAClD,IAAI,YAAY,cAAc,MAAM,GAAG,EAAE,SAAS,SAAS,EAAE;EAC7D,IAAI,YAAY;GACd,kBAAkB;GAClB,oBAAoB,KAAK,QAAQ,EAAE;GACnC,4BAA4B;GAC5B,oBAAoB,IAAI,QAAQ,SAAS,QAAQ,sBAAsB,eAAe,GAAG,aAAa,MAAM,GAAG,EAAE,cAAc,SAAS,EAAE;GAC1I,QAAQ,CACN,CACF;GAEA,MAAM;GACN,MAAM;EACR;EACA,OAAO;CACT;CACA,OAAO;EACL,MAAM;EACN,SAAS;EACT,eAAe,gBAAgB;GAC7B,SAAS;EACX;EAMA,MAAM,KAAK,IAAI,UAAU;GACvB,IAAI,CAAC,oBAAoB,KAAK,WAAW,GAAG;GAC5C,IAAI,CAAC,YAAY,EAAE,GAAG;GACtB,IAAI,YAAY,MAAM,aAAa,EAAE;GACrC,IAAI,QAAQ,SAAS,UAAU,QAAQ,YAAY;IACjD,IAAI,gBAAgB,KAAK,KAAK,QAAQ,YAAY,gBAAgB,UAAU,0BAA0B;IACtG,MAAM,QAAQ,UAAU,aAAa;IACrC,MAAM,QAAQ,SAAS,IAAI,KAAK,KAAK,eAAe,GAAG,UAAU,KAAK,GAAG,UAAU,MAAM,CAAC;GAC5F;GACA,IAAI,kBAAkB;;;mDAGuB,KAAK,UAAU,WAAW,MAAM,CAAC,EAAE;;;;GAIhF,OAAO;EACT;;;;EAIA,gBAAgB,QAAQ;GACtB,IAAI,EAAE,WAAW,OAAO;GACxB,IAAI,oBAAoB,EACtB,WAAW,KACb;GACA,OAAO,YAAY,IAAI,eAAe,KAAK,KAAK,MAAM;IACpD,IAAI;IACJ,IAAI,GAAG,WAAW,IAAI,SAAS,QAAQ,aAAa,KAAK,IAAI,KAAK,IAAI,SAAS,WAAW,IAAI,oBAAoB,EAAE,IAAI;KACtH,OAAO,KAAK;IACd;IACA,IAAI,MAAM,IAAI,IAAI,uBAAuB,IAAI,GAAG;IAChD,IAAI,WAAW,IAAI;IACnB,IAAI,YAAY,OAAO,SAAS,MAAM,IAAI,oBAAoB,GAAG,MAAM,CAAC,CAAC,QAAQ,QAAQ,EAAE;IAC3F,IAAI;KACF,IAAI,QAAQ,MAAM,QAAQ,SAAS,SAAS;KAC5C,IAAI,UAAU,gBAAgB,YAAY,SAAS,KAAK,0BAA0B;KAClF,IAAI,MAAM,KAAK;KACf,IAAI,IAAI;IACV,SAAS,GAAG;KACV,OAAO,MAAM,OAAO,IAAI,iCAAiC,UAAU,IAAI,aAAa,QAAQ,EAAE,UAAU,iBAAiB,GAAG,iBAAiB;KAC7I,IAAI,aAAa,aAAa,SAAS,EAAE,SAAS,WAAW,MAAM;KACnE,IAAI,IAAI;IACV;GACF,CAAC;EACH;CACF;AACF"}
@@ -1,27 +1,44 @@
1
1
  import { WebSocketServer } from "ws";
2
2
  import { createMessageSocket } from "@vxrn/utils";
3
+ import { expoClientFromNativeApp } from "@vxrn/utils/nativeAppManifest";
3
4
  import { addConnectedNativeClient, removeConnectedNativeClient } from "../utils/connectedNativeClients.mjs";
4
5
  import { URL } from "node:url";
5
6
  import { createRequire } from "node:module";
6
- import { join } from "node:path";
7
+ import { extname, join, resolve, sep } from "node:path";
7
8
  import { randomUUID } from "node:crypto";
9
+ import { existsSync, readFileSync, statSync } from "node:fs";
8
10
  import { readFile } from "node:fs/promises";
9
11
  import { createDevMiddleware } from "@react-native/dev-middleware";
10
12
  import { createNativeDevEngine } from "../utils/createNativeDevEngine.mjs";
13
+ import { nativeDevBytecodeCompiler } from "../utils/compileNativeDevBytecode.mjs";
11
14
  import { getBoundPort } from "../utils/getBoundPort.mjs";
12
15
  import { getNativeFramePlatform, isNativeBundleFrame, symbolicateNativeStack } from "../utils/symbolicateNativeStack.mjs";
13
16
 
17
+ function getProjectAssetFile(root, pathname) {
18
+ const filePath = resolve(root, pathname.slice("/assets/".length));
19
+ if (!filePath.startsWith(resolve(root) + sep)) return;
20
+ const type = extname(filePath).slice(1);
21
+ if (getNativeAssetContentType(type) === "application/octet-stream") return;
22
+ if (!existsSync(filePath) || !statSync(filePath).isFile()) return;
23
+ return {
24
+ filePath,
25
+ type
26
+ };
27
+ }
14
28
  function getNativeAssetContentType(type) {
15
29
  switch (type.toLowerCase()) {
16
30
  case "bmp": return "image/bmp";
17
31
  case "gif": return "image/gif";
32
+ case "glb": return "model/gltf-binary";
18
33
  case "jpeg":
19
34
  case "jpg": return "image/jpeg";
20
35
  case "json": return "application/json";
36
+ case "mp4": return "video/mp4";
21
37
  case "otf": return "font/otf";
22
38
  case "png": return "image/png";
23
39
  case "svg": return "image/svg+xml";
24
40
  case "ttf": return "font/ttf";
41
+ case "txt": return "text/plain";
25
42
  case "webp": return "image/webp";
26
43
  case "woff": return "font/woff";
27
44
  case "woff2": return "font/woff2";
@@ -45,6 +62,7 @@ function createReactNativeDevServerPlugin(options) {
45
62
  const devEngineCreating = {};
46
63
  const warnedProdBundleRequest = /* @__PURE__ */ new Set();
47
64
  const pendingReloadPlatforms = /* @__PURE__ */ new Set();
65
+ let compileBytecode;
48
66
  const devToolsSocketEndpoints = ["/inspector/device", "/inspector/debug"];
49
67
  const reactNativeDevToolsUrl = `http://${host}:${getBoundPort(server)}`;
50
68
  const { middleware, websocketEndpoints } = createDevMiddleware({
@@ -53,8 +71,13 @@ function createReactNativeDevServerPlugin(options) {
53
71
  unstable_experiments: { enableStandaloneFuseboxShell: false }
54
72
  });
55
73
  const projectRequire = createRequire(join(root, "package.json"));
74
+ const packageJsonPath = join(root, "package.json");
75
+ const packageJson = existsSync(packageJsonPath) ? JSON.parse(readFileSync(packageJsonPath, "utf8")) : {};
76
+ const hasExpo = Object.hasOwn(packageJson.dependencies ?? {}, "expo") || Object.hasOwn(packageJson.devDependencies ?? {}, "expo");
77
+ const nativeApp = hasExpo ? void 0 : globalThis.__vxrnNativeEntryConfig?.app;
56
78
  const anonymousScopeId = randomUUID();
57
79
  server.middlewares.use(async (req, res, next) => {
80
+ if (!hasExpo && !nativeApp) return next();
58
81
  if (req.method !== "GET" && req.method !== "HEAD") return next();
59
82
  const url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`);
60
83
  if (url.pathname !== "/" && url.pathname !== "/manifest" && url.pathname !== "/index.exp") {
@@ -64,26 +87,37 @@ function createReactNativeDevServerPlugin(options) {
64
87
  const platform = validPlatforms[url.searchParams.get("platform") || String(header || "")];
65
88
  if (!platform) return next();
66
89
  let expoConfigPath;
67
- try {
68
- expoConfigPath = projectRequire.resolve("@expo/config");
69
- } catch {
70
- return next();
90
+ if (!nativeApp) {
91
+ try {
92
+ expoConfigPath = projectRequire.resolve("@expo/config");
93
+ } catch {
94
+ return next();
95
+ }
71
96
  }
72
- const expoRequire = createRequire(expoConfigPath);
73
- const { getConfig } = expoRequire("@expo/config");
74
- const { resolveRelativeEntryPoint } = expoRequire("@expo/config/paths");
75
- const { Updates } = expoRequire("@expo/config-plugins");
76
97
  try {
77
- const { exp, pkg } = getConfig(root);
78
98
  const hostUri = req.headers.host || `localhost:${getBoundPort(server)}`;
79
- const mainModuleName = resolveRelativeEntryPoint(root, {
80
- platform,
81
- pkg
82
- });
83
- const runtimeVersion = await Updates.getRuntimeVersionAsync(root, {
84
- ...exp,
85
- runtimeVersion: exp.runtimeVersion ?? { policy: "sdkVersion" }
86
- }, platform);
99
+ const { exp, mainModuleName, runtimeVersion } = nativeApp ? {
100
+ exp: expoClientFromNativeApp(nativeApp),
101
+ mainModuleName: "index",
102
+ runtimeVersion: nativeApp.updates?.runtimeVersion ?? null
103
+ } : await (async () => {
104
+ const expoRequire = createRequire(expoConfigPath);
105
+ const { getConfig } = expoRequire("@expo/config");
106
+ const { resolveRelativeEntryPoint } = expoRequire("@expo/config/paths");
107
+ const { Updates } = expoRequire("@expo/config-plugins");
108
+ const { exp: exp2, pkg } = getConfig(root);
109
+ return {
110
+ exp: exp2,
111
+ mainModuleName: resolveRelativeEntryPoint(root, {
112
+ platform,
113
+ pkg
114
+ }),
115
+ runtimeVersion: await Updates.getRuntimeVersionAsync(root, {
116
+ ...exp2,
117
+ runtimeVersion: exp2.runtimeVersion ?? { policy: "sdkVersion" }
118
+ }, platform)
119
+ };
120
+ })();
87
121
  const manifest = JSON.stringify({
88
122
  id: randomUUID(),
89
123
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -94,7 +128,7 @@ function createReactNativeDevServerPlugin(options) {
94
128
  url: `http://${hostUri}/${encodeURI(mainModuleName.replace(/^\/+/, ""))}.bundle?platform=${platform}&dev=true&hot=false`
95
129
  },
96
130
  assets: [],
97
- metadata: {},
131
+ metadata: nativeApp ? { oneNativeApp: true } : {},
98
132
  extra: {
99
133
  eas: { projectId: exp.extra?.eas?.projectId ?? void 0 },
100
134
  expoClient: {
@@ -153,7 +187,6 @@ ${manifest}\r
153
187
  const url = new URL(rawUrl, `http://${req.headers.host || "localhost"}`);
154
188
  const platform = validPlatforms[url.searchParams.get("platform") || ""];
155
189
  const engine = platform ? devEngines[platform] : void 0;
156
- if (!engine) return next();
157
190
  let pathname;
158
191
  try {
159
192
  pathname = decodeURIComponent(rawPathname);
@@ -162,19 +195,44 @@ ${manifest}\r
162
195
  res.end("Invalid native asset path");
163
196
  return;
164
197
  }
165
- const asset = engine.getAsset(pathname, url.searchParams.get("hash") || void 0);
198
+ const asset = engine?.getAsset(pathname, url.searchParams.get("hash") || void 0) ?? getProjectAssetFile(root, pathname);
166
199
  if (!asset) {
200
+ if (!engine) return next();
167
201
  res.writeHead(404, { "Content-Type": "text/plain" });
168
202
  res.end("Native asset not found");
169
203
  return;
170
204
  }
171
205
  try {
172
206
  const contents = await readFile(asset.filePath);
173
- res.writeHead(200, {
207
+ const headers = {
174
208
  "Cache-Control": "no-cache",
209
+ "Accept-Ranges": "bytes",
175
210
  "Content-Length": String(contents.byteLength),
176
211
  "Content-Type": getNativeAssetContentType(asset.type)
177
- });
212
+ };
213
+ const range = req.method === "GET" && !req.headers["if-range"] && /^bytes=(\d*)-(\d*)$/.exec(req.headers.range || "");
214
+ if (range && (range[1] || range[2])) {
215
+ const size = contents.byteLength;
216
+ const start = range[1] ? Number(range[1]) : Math.max(0, size - Number(range[2]));
217
+ const end = range[1] && range[2] ? Math.min(Number(range[2]), size - 1) : size - 1;
218
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start > end || start >= size) {
219
+ res.writeHead(416, {
220
+ ...headers,
221
+ "Content-Length": "0",
222
+ "Content-Range": `bytes */${size}`
223
+ });
224
+ res.end();
225
+ return;
226
+ }
227
+ res.writeHead(206, {
228
+ ...headers,
229
+ "Content-Length": String(end - start + 1),
230
+ "Content-Range": `bytes ${start}-${end}/${size}`
231
+ });
232
+ res.end(contents.subarray(start, end + 1));
233
+ return;
234
+ }
235
+ res.writeHead(200, headers);
178
236
  res.end(req.method === "HEAD" ? void 0 : contents);
179
237
  } catch (error) {
180
238
  console.error(`[vxrn] failed to serve native asset ${pathname}: ${error instanceof Error ? error.message : String(error)}`);
@@ -333,12 +391,17 @@ ${manifest}\r
333
391
  }
334
392
  try {
335
393
  const bundle = await (await getDevEngine(platform)).getBundle();
394
+ let body = bundle.code;
395
+ if (platform === "ios" && url.searchParams.get("bytecode") === "hermes") {
396
+ compileBytecode ||= nativeDevBytecodeCompiler(root);
397
+ body = await compileBytecode(bundle, `${url.origin}/index.bundle?platform=${platform}`);
398
+ }
336
399
  res.once("finish", () => pendingReloadPlatforms.delete(platform));
337
400
  res.writeHead(200, {
338
401
  "Cache-Control": "no-store",
339
402
  "Content-Type": "text/javascript"
340
403
  });
341
- res.end(bundle.code);
404
+ res.end(body);
342
405
  } catch (err) {
343
406
  console.error(` Error building React Native bundle`);
344
407
  console.error(err);