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.
- package/dist/backgroundComputation.mjs +145 -0
- package/dist/backgroundComputation.mjs.map +1 -0
- package/dist/backgroundComputation.native.js +163 -0
- package/dist/backgroundComputation.native.js.map +1 -0
- package/dist/backgroundComputationNative.mjs +16 -0
- package/dist/backgroundComputationNative.mjs.map +1 -0
- package/dist/backgroundComputationNative.native.js +18 -0
- package/dist/backgroundComputationNative.native.js.map +1 -0
- package/dist/config/getBaseViteConfigOnly.mjs +6 -10
- package/dist/config/getBaseViteConfigOnly.mjs.map +1 -1
- package/dist/config/getBaseViteConfigOnly.native.js +6 -10
- package/dist/config/getBaseViteConfigOnly.native.js.map +1 -1
- package/dist/config/getOptimizeDeps.mjs +2 -1
- package/dist/config/getOptimizeDeps.mjs.map +1 -1
- package/dist/config/getOptimizeDeps.native.js +2 -1
- package/dist/config/getOptimizeDeps.native.js.map +1 -1
- package/dist/config/getViteServerConfig.mjs +13 -0
- package/dist/config/getViteServerConfig.mjs.map +1 -1
- package/dist/config/getViteServerConfig.native.js +15 -1
- package/dist/config/getViteServerConfig.native.js.map +1 -1
- package/dist/constants/defaults.mjs +4 -0
- package/dist/constants/defaults.mjs.map +1 -1
- package/dist/constants/defaults.native.js +4 -0
- package/dist/constants/defaults.native.js.map +1 -1
- package/dist/exports/build.native.js +1 -1
- package/dist/exports/build.native.js.map +1 -1
- package/dist/exports/clean.native.js +1 -1
- package/dist/exports/clean.native.js.map +1 -1
- package/dist/exports/createServer.native.js +2 -2
- package/dist/exports/createServer.native.js.map +1 -1
- package/dist/exports/dev.mjs +3 -0
- package/dist/exports/dev.mjs.map +1 -1
- package/dist/exports/dev.native.js +6 -3
- package/dist/exports/dev.native.js.map +1 -1
- package/dist/exports/loadEnv.native.js +1 -1
- package/dist/exports/loadEnv.native.js.map +1 -1
- package/dist/exports/patch.native.js +1 -1
- package/dist/exports/patch.native.js.map +1 -1
- package/dist/exports/prebuild.mjs +0 -22
- package/dist/exports/prebuild.mjs.map +1 -1
- package/dist/exports/prebuild.native.js +1 -23
- package/dist/exports/prebuild.native.js.map +1 -1
- package/dist/exports/prebuildWithoutExpo.mjs +1133 -182
- package/dist/exports/prebuildWithoutExpo.mjs.map +1 -1
- package/dist/exports/prebuildWithoutExpo.native.js +1606 -244
- package/dist/exports/prebuildWithoutExpo.native.js.map +1 -1
- package/dist/exports/runAndroid.native.js +1 -1
- package/dist/exports/runAndroid.native.js.map +1 -1
- package/dist/exports/runIos.native.js +1 -1
- package/dist/exports/runIos.native.js.map +1 -1
- package/dist/exports/serve.native.js +1 -1
- package/dist/exports/serve.native.js.map +1 -1
- package/dist/exports/serveStaticAssets.native.js +1 -1
- package/dist/exports/serveStaticAssets.native.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.mjs +4 -1
- package/dist/index.native.js +4 -1
- package/dist/native-source-contract.mjs +3 -0
- package/dist/native-source-contract.native.js +3 -0
- package/dist/patches/builtInDepPatches.mjs +0 -13
- package/dist/patches/builtInDepPatches.mjs.map +1 -1
- package/dist/patches/builtInDepPatches.native.js +0 -13
- package/dist/patches/builtInDepPatches.native.js.map +1 -1
- package/dist/plugins/autoDepOptimizePlugin.mjs +3 -2
- package/dist/plugins/autoDepOptimizePlugin.mjs.map +1 -1
- package/dist/plugins/autoDepOptimizePlugin.native.js +6 -3
- package/dist/plugins/autoDepOptimizePlugin.native.js.map +1 -1
- package/dist/plugins/backgroundComputationPlugin.mjs +27 -0
- package/dist/plugins/backgroundComputationPlugin.mjs.map +1 -0
- package/dist/plugins/backgroundComputationPlugin.native.js +32 -0
- package/dist/plugins/backgroundComputationPlugin.native.js.map +1 -0
- package/dist/plugins/reactNativeCommonJsPlugin.native.js +3 -3
- package/dist/plugins/reactNativeCommonJsPlugin.native.js.map +1 -1
- package/dist/plugins/reactNativeDevAssetPlugin.mjs +2 -1
- package/dist/plugins/reactNativeDevAssetPlugin.mjs.map +1 -1
- package/dist/plugins/reactNativeDevAssetPlugin.native.js +3 -2
- package/dist/plugins/reactNativeDevAssetPlugin.native.js.map +1 -1
- package/dist/plugins/reactNativeDevServer.mjs +87 -24
- package/dist/plugins/reactNativeDevServer.mjs.map +1 -1
- package/dist/plugins/reactNativeDevServer.native.js +162 -45
- package/dist/plugins/reactNativeDevServer.native.js.map +1 -1
- package/dist/plugins/workletImportsPlugin.mjs +9 -30
- package/dist/plugins/workletImportsPlugin.mjs.map +1 -1
- package/dist/plugins/workletImportsPlugin.native.js +10 -35
- package/dist/plugins/workletImportsPlugin.native.js.map +1 -1
- package/dist/rn-commands/bundle/buildBundle.mjs +3 -3
- package/dist/rn-commands/bundle/buildBundle.mjs.map +1 -1
- package/dist/rn-commands/bundle/buildBundle.native.js +3 -3
- package/dist/rn-commands/bundle/buildBundle.native.js.map +1 -1
- package/dist/runtime/hmr-client.native.js +3 -7
- package/dist/runtime/hmr-client.native.js.map +1 -1
- package/dist/runtime/hmr-runtime.native.js +32 -40
- package/dist/runtime/hmr-runtime.native.js.map +1 -1
- package/dist/serve/node.native.js +2 -2
- package/dist/serve/node.native.js.map +1 -1
- package/dist/swift-package-id.mjs +3 -0
- package/dist/swift-package-id.native.js +3 -0
- package/dist/user-interface/index.native.js +6 -6
- package/dist/user-interface/index.native.js.map +1 -1
- package/dist/utils/compileNativeDevBytecode.mjs +93 -0
- package/dist/utils/compileNativeDevBytecode.mjs.map +1 -0
- package/dist/utils/compileNativeDevBytecode.native.js +98 -0
- package/dist/utils/compileNativeDevBytecode.native.js.map +1 -0
- package/dist/utils/createNativeDevEngine.mjs +227 -20
- package/dist/utils/createNativeDevEngine.mjs.map +1 -1
- package/dist/utils/createNativeDevEngine.native.js +249 -37
- package/dist/utils/createNativeDevEngine.native.js.map +1 -1
- package/dist/utils/execSync.native.js +1 -1
- package/dist/utils/execSync.native.js.map +1 -1
- package/dist/utils/getServerEntry.native.js +2 -2
- package/dist/utils/getServerEntry.native.js.map +1 -1
- package/dist/utils/nativeRun.mjs +32 -16
- package/dist/utils/nativeRun.mjs.map +1 -1
- package/dist/utils/nativeRun.native.js +43 -18
- package/dist/utils/nativeRun.native.js.map +1 -1
- package/dist/utils/nativeSourceContract.mjs +1823 -0
- package/dist/utils/nativeSourceContract.mjs.map +1 -0
- package/dist/utils/nativeSourceContract.native.js +2425 -0
- package/dist/utils/nativeSourceContract.native.js.map +1 -0
- package/dist/utils/patches.native.js +15 -24
- package/dist/utils/patches.native.js.map +1 -1
- package/dist/utils/printServerUrls.native.js +1 -1
- package/dist/utils/printServerUrls.native.js.map +1 -1
- package/dist/utils/scanDepsToOptimize.mjs +7 -1
- package/dist/utils/scanDepsToOptimize.mjs.map +1 -1
- package/dist/utils/scanDepsToOptimize.native.js +27 -2
- package/dist/utils/scanDepsToOptimize.native.js.map +1 -1
- package/dist/utils/swiftPackageId.mjs +31 -2
- package/dist/utils/swiftPackageId.mjs.map +1 -1
- package/dist/utils/swiftPackageId.native.js +50 -2
- package/dist/utils/swiftPackageId.native.js.map +1 -1
- package/dist/vxrn-vite-plugin.native.js +1 -1
- package/dist/vxrn-vite-plugin.native.js.map +1 -1
- package/expo-plugin.cjs +792 -2
- package/native-project-patches.cjs +201 -10
- package/package.json +34 -15
- package/src/backgroundComputation.ts +220 -0
- package/src/backgroundComputationNative.ts +23 -0
- package/src/config/getBaseViteConfigOnly.ts +8 -9
- package/src/config/getOptimizeDeps.ts +3 -1
- package/src/config/getViteServerConfig.ts +16 -0
- package/src/config/glbAssets.test.ts +228 -0
- package/src/constants/defaults.ts +6 -0
- package/src/exports/dev.ts +5 -1
- package/src/exports/expoPlugin.test.mjs +337 -15
- package/src/exports/prebuild.ts +0 -31
- package/src/exports/prebuildWithoutExpo.test.ts +1623 -46
- package/src/exports/prebuildWithoutExpo.ts +1606 -216
- package/src/index.ts +8 -0
- package/src/native-source-contract.ts +16 -0
- package/src/patches/builtInDepPatches.ts +0 -21
- package/src/plugins/autoDepOptimizePlugin.ts +7 -2
- package/src/plugins/backgroundComputationPlugin.test.ts +77 -0
- package/src/plugins/backgroundComputationPlugin.ts +29 -0
- package/src/plugins/reactNativeDevAssetPlugin.ts +5 -1
- package/src/plugins/reactNativeDevServer.test.ts +74 -0
- package/src/plugins/reactNativeDevServer.ts +145 -28
- package/src/plugins/rnCodegenPlugin.test.ts +30 -0
- package/src/plugins/workletImportsPlugin.ts +19 -37
- package/src/rn-commands/bundle/buildBundle.ts +5 -3
- package/src/swift-package-id.ts +1 -0
- package/src/utils/compileNativeDevBytecode.test.ts +168 -0
- package/src/utils/compileNativeDevBytecode.ts +117 -0
- package/src/utils/createNativeDevEngine.test.ts +643 -18
- package/src/utils/createNativeDevEngine.ts +278 -48
- package/src/utils/nativeRun.test.ts +125 -23
- package/src/utils/nativeRun.ts +51 -23
- package/src/utils/nativeSourceArtifacts.test.ts +39 -0
- package/src/utils/nativeSourceContract.test.ts +600 -0
- package/src/utils/nativeSourceContract.ts +1897 -0
- package/src/utils/scanDepsToOptimize.test.ts +80 -0
- package/src/utils/scanDepsToOptimize.ts +18 -7
- package/src/utils/swiftPackageId.ts +25 -1
- package/types/backgroundComputation.d.ts +28 -0
- package/types/backgroundComputation.d.ts.map +1 -0
- package/types/backgroundComputationNative.d.ts +2 -0
- package/types/backgroundComputationNative.d.ts.map +1 -0
- package/types/config/getBaseViteConfigOnly.d.ts.map +1 -1
- package/types/config/getOptimizeDeps.d.ts.map +1 -1
- package/types/config/getViteServerConfig.d.ts.map +1 -1
- package/types/constants/defaults.d.ts.map +1 -1
- package/types/exports/dev.d.ts.map +1 -1
- package/types/exports/prebuild.d.ts.map +1 -1
- package/types/exports/prebuildWithoutExpo.d.ts +6 -0
- package/types/exports/prebuildWithoutExpo.d.ts.map +1 -1
- package/types/index.d.ts +2 -0
- package/types/index.d.ts.map +1 -1
- package/types/native-source-contract.d.ts +2 -0
- package/types/native-source-contract.d.ts.map +1 -0
- package/types/patches/builtInDepPatches.d.ts.map +1 -1
- package/types/plugins/autoDepOptimizePlugin.d.ts.map +1 -1
- package/types/plugins/backgroundComputationPlugin.d.ts +3 -0
- package/types/plugins/backgroundComputationPlugin.d.ts.map +1 -0
- package/types/plugins/reactNativeDevAssetPlugin.d.ts.map +1 -1
- package/types/plugins/reactNativeDevServer.d.ts.map +1 -1
- package/types/plugins/workletImportsPlugin.d.ts.map +1 -1
- package/types/rn-commands/bundle/buildBundle.d.ts.map +1 -1
- package/types/swift-package-id.d.ts +2 -0
- package/types/swift-package-id.d.ts.map +1 -0
- package/types/utils/compileNativeDevBytecode.d.ts +3 -0
- package/types/utils/compileNativeDevBytecode.d.ts.map +1 -0
- package/types/utils/createNativeDevEngine.d.ts +7 -22
- package/types/utils/createNativeDevEngine.d.ts.map +1 -1
- package/types/utils/nativeRun.d.ts.map +1 -1
- package/types/utils/nativeSourceContract.d.ts +121 -0
- package/types/utils/nativeSourceContract.d.ts.map +1 -0
- package/types/utils/scanDepsToOptimize.d.ts +1 -0
- package/types/utils/scanDepsToOptimize.d.ts.map +1 -1
- package/types/utils/swiftPackageId.d.ts +1 -0
- 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":"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"}
|
|
@@ -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", "
|
|
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\"
|
|
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", "
|
|
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\", \"
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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 =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
404
|
+
res.end(body);
|
|
342
405
|
} catch (err) {
|
|
343
406
|
console.error(` Error building React Native bundle`);
|
|
344
407
|
console.error(err);
|