vxrn 2.7.7 → 2.8.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/config/getBaseViteConfigOnly.mjs +1 -1
- package/dist/config/getBaseViteConfigOnly.mjs.map +1 -1
- package/dist/config/getBaseViteConfigOnly.native.js +1 -1
- package/dist/config/getBaseViteConfigOnly.native.js.map +1 -1
- package/dist/config/getReactNativePlugins.mjs +1 -2
- package/dist/config/getReactNativePlugins.mjs.map +1 -1
- package/dist/config/getReactNativePlugins.native.js +4 -2
- package/dist/config/getReactNativePlugins.native.js.map +1 -1
- package/dist/exports/prebuildWithoutExpo.mjs +26 -97
- package/dist/exports/prebuildWithoutExpo.mjs.map +1 -1
- package/dist/exports/prebuildWithoutExpo.native.js +47 -133
- package/dist/exports/prebuildWithoutExpo.native.js.map +1 -1
- package/dist/plugins/autoDepOptimizePlugin.mjs +5 -2
- package/dist/plugins/autoDepOptimizePlugin.mjs.map +1 -1
- package/dist/plugins/autoDepOptimizePlugin.native.js +10 -7
- package/dist/plugins/autoDepOptimizePlugin.native.js.map +1 -1
- package/dist/rn-commands/bundle/buildBundle.mjs +5 -4
- package/dist/rn-commands/bundle/buildBundle.mjs.map +1 -1
- package/dist/rn-commands/bundle/buildBundle.native.js +5 -4
- package/dist/rn-commands/bundle/buildBundle.native.js.map +1 -1
- package/dist/utils/createNativeDevEngine.mjs +17 -5
- package/dist/utils/createNativeDevEngine.mjs.map +1 -1
- package/dist/utils/createNativeDevEngine.native.js +17 -5
- package/dist/utils/createNativeDevEngine.native.js.map +1 -1
- package/package.json +27 -20
- package/src/config/getBaseViteConfigOnly.ts +1 -1
- package/src/config/getReactNativePlugins.ts +8 -4
- package/src/exports/prebuildWithoutExpo.test.ts +62 -157
- package/src/exports/prebuildWithoutExpo.ts +31 -125
- package/src/plugins/autoDepOptimizeExternal.test.ts +101 -0
- package/src/plugins/autoDepOptimizePlugin.ts +12 -6
- package/src/plugins/rnCodegenPlugin.ts +1 -2
- package/src/rn-commands/bundle/buildBundle.ts +8 -7
- package/src/utils/createNativeDevEngine.test.ts +228 -5
- package/src/utils/createNativeDevEngine.ts +35 -22
- package/types/config/getReactNativePlugins.d.ts +3 -2
- package/types/config/getReactNativePlugins.d.ts.map +1 -1
- package/types/exports/prebuildWithoutExpo.d.ts.map +1 -1
- package/types/plugins/autoDepOptimizePlugin.d.ts +1 -0
- package/types/plugins/autoDepOptimizePlugin.d.ts.map +1 -1
- package/types/plugins/rnCodegenPlugin.d.ts.map +1 -1
- package/types/rn-commands/bundle/buildBundle.d.ts +1 -1
- package/types/rn-commands/bundle/buildBundle.d.ts.map +1 -1
- package/types/utils/createNativeDevEngine.d.ts +3 -4
- package/types/utils/createNativeDevEngine.d.ts.map +1 -1
- package/src/plugins/autoDepOptimizePlugin.test.ts +0 -42
|
@@ -23,6 +23,7 @@ function autoDepOptimizePlugin(props) {
|
|
|
23
23
|
const finalConfig = await getScannedOptimizeDepsConfig({
|
|
24
24
|
...props,
|
|
25
25
|
mode: env.mode,
|
|
26
|
+
external: cfg.ssr?.external,
|
|
26
27
|
exclude: [
|
|
27
28
|
...exclude,
|
|
28
29
|
...userExcludes,
|
|
@@ -45,13 +46,15 @@ async function getScannedOptimizeDepsConfig(props) {
|
|
|
45
46
|
const excludeArray = Array.isArray(props.exclude) ? props.exclude : [props.exclude];
|
|
46
47
|
const excludeStrings = excludeArray.filter((e) => typeof e === "string");
|
|
47
48
|
const excludeSet = new Set(excludeStrings);
|
|
48
|
-
const
|
|
49
|
+
const external = props.external;
|
|
50
|
+
const shouldOptimize = (dep) => !excludeSet.has(dep) && external !== true && !external?.some((name2) => dep === name2 || dep.startsWith(`${name2}/`));
|
|
51
|
+
const filteredDeps = result.prebundleDeps.filter(shouldOptimize);
|
|
49
52
|
return { ssr: {
|
|
50
53
|
optimizeDeps: {
|
|
51
54
|
include: filteredDeps,
|
|
52
55
|
exclude: EXCLUDE_LIST
|
|
53
56
|
},
|
|
54
|
-
noExternal: [...filteredDeps, ...result.noExternalDeps.filter(
|
|
57
|
+
noExternal: [...filteredDeps, ...result.noExternalDeps.filter(shouldOptimize)]
|
|
55
58
|
} };
|
|
56
59
|
}
|
|
57
60
|
let sessionCacheVal = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoDepOptimizePlugin.js","names":[],"sources":["plugins/autoDepOptimizePlugin.js"],"sourcesContent":["import { createDebugger } from \"@vxrn/debug\";\nimport FSExtra from \"fs-extra\";\nimport path from \"node:path\";\nimport { createFilter } from \"vite\";\nimport {\n EXCLUDE_LIST,\n scanDepsToOptimize\n} from \"../utils/scanDepsToOptimize\";\nimport { getFileHash, lookupFile } from \"../utils/utils\";\nimport { getCacheDir } from \"../utils/getCacheDir\";\nconst name = \"vxrn:auto-dep-optimize\";\nconst { debug, debugDetails } = createDebugger(name);\nfunction autoDepOptimizePlugin(props) {\n return {\n name,\n enforce: \"pre\",\n async config(cfg, env) {\n debug?.(\"Config hook called\");\n const userOptions = globalThis.__oneOptions;\n const depsConfig = userOptions?.deps;\n const exclude = depsConfig ? Object.entries(depsConfig).filter(([_, value]) => value === false).map(([k]) => k) : [];\n const userExcludes = Array.isArray(props.exclude) ? props.exclude : [props.exclude];\n const userViteExcludes = cfg.optimizeDeps?.exclude || [];\n const userSsrExcludes = cfg.ssr?.optimizeDeps?.exclude || [];\n const finalConfig = await getScannedOptimizeDepsConfig({\n ...props,\n mode: env.mode,\n exclude: [\n ...exclude,\n ...userExcludes,\n ...userViteExcludes,\n ...userSsrExcludes\n ].filter(Boolean)\n });\n debugDetails?.(\n `Final auto-dep-optimize config: ${JSON.stringify(finalConfig, null, 2)}\nfrom props: ${JSON.stringify(props)}`\n );\n return finalConfig;\n }\n };\n}\nconst getSSRExternalsCachePath = (root) => {\n return path.join(getCacheDir(root), \"deps-to-pre-bundle-for-ssr-cache.json\");\n};\nasync function getScannedOptimizeDepsConfig(props) {\n const result = await findDepsToOptimize(props);\n props.onScannedDeps?.(result);\n const excludeArray = Array.isArray(props.exclude) ? props.exclude : [props.exclude];\n const excludeStrings = excludeArray.filter((e) => typeof e === \"string\");\n const excludeSet = new Set(excludeStrings);\n const
|
|
1
|
+
{"version":3,"file":"autoDepOptimizePlugin.js","names":[],"sources":["plugins/autoDepOptimizePlugin.js"],"sourcesContent":["import { createDebugger } from \"@vxrn/debug\";\nimport FSExtra from \"fs-extra\";\nimport path from \"node:path\";\nimport { createFilter } from \"vite\";\nimport {\n EXCLUDE_LIST,\n scanDepsToOptimize\n} from \"../utils/scanDepsToOptimize\";\nimport { getFileHash, lookupFile } from \"../utils/utils\";\nimport { getCacheDir } from \"../utils/getCacheDir\";\nconst name = \"vxrn:auto-dep-optimize\";\nconst { debug, debugDetails } = createDebugger(name);\nfunction autoDepOptimizePlugin(props) {\n return {\n name,\n enforce: \"pre\",\n async config(cfg, env) {\n debug?.(\"Config hook called\");\n const userOptions = globalThis.__oneOptions;\n const depsConfig = userOptions?.deps;\n const exclude = depsConfig ? Object.entries(depsConfig).filter(([_, value]) => value === false).map(([k]) => k) : [];\n const userExcludes = Array.isArray(props.exclude) ? props.exclude : [props.exclude];\n const userViteExcludes = cfg.optimizeDeps?.exclude || [];\n const userSsrExcludes = cfg.ssr?.optimizeDeps?.exclude || [];\n const finalConfig = await getScannedOptimizeDepsConfig({\n ...props,\n mode: env.mode,\n external: cfg.ssr?.external,\n exclude: [\n ...exclude,\n ...userExcludes,\n ...userViteExcludes,\n ...userSsrExcludes\n ].filter(Boolean)\n });\n debugDetails?.(\n `Final auto-dep-optimize config: ${JSON.stringify(finalConfig, null, 2)}\nfrom props: ${JSON.stringify(props)}`\n );\n return finalConfig;\n }\n };\n}\nconst getSSRExternalsCachePath = (root) => {\n return path.join(getCacheDir(root), \"deps-to-pre-bundle-for-ssr-cache.json\");\n};\nasync function getScannedOptimizeDepsConfig(props) {\n const result = await findDepsToOptimize(props);\n props.onScannedDeps?.(result);\n const excludeArray = Array.isArray(props.exclude) ? props.exclude : [props.exclude];\n const excludeStrings = excludeArray.filter((e) => typeof e === \"string\");\n const excludeSet = new Set(excludeStrings);\n const external = props.external;\n const shouldOptimize = (dep) => !excludeSet.has(dep) && external !== true && !external?.some((name2) => dep === name2 || dep.startsWith(`${name2}/`));\n const filteredDeps = result.prebundleDeps.filter(shouldOptimize);\n return {\n ssr: {\n optimizeDeps: {\n include: filteredDeps,\n exclude: EXCLUDE_LIST\n },\n noExternal: [...filteredDeps, ...result.noExternalDeps.filter(shouldOptimize)]\n }\n };\n}\nlet sessionCacheVal = null;\nasync function findDepsToOptimize({\n root,\n mode,\n exclude,\n include\n}) {\n const cacheFilePath = getSSRExternalsCachePath(root);\n const startedAt = debug ? Date.now() : 0;\n const noCache = mode === \"production\";\n const sessionCache = mode === \"production\";\n if (sessionCache && sessionCacheVal) {\n return sessionCacheVal;\n }\n const lockFile = await lookupFile(root, [\n \"yarn.lock\",\n \"package-lock.json\",\n \"pnpm-lock.yaml\",\n \"bun.lock\",\n \"bun.lockb\"\n ]);\n const lockFileHash = lockFile ? await getFileHash(lockFile) : void 0;\n let value;\n if (lockFileHash && !noCache) {\n try {\n const {\n lockFileHash: cachedLockFileHash,\n depsToPreBundleForSsr: cachedDepsToPreBundle\n } = await FSExtra.readJSON(cacheFilePath);\n if (lockFileHash === cachedLockFileHash && !!cachedDepsToPreBundle && \"prebundleDeps\" in cachedDepsToPreBundle && Array.isArray(cachedDepsToPreBundle.noExternalDeps)) {\n value = cachedDepsToPreBundle;\n debug?.(`Using cached scan results from ${cacheFilePath}`);\n }\n } catch (err) {\n debug?.(`${err}`);\n }\n }\n const filter = createFilter(include, exclude);\n if (!value) {\n value = await scanDepsToOptimize(`${root}/package.json`, { filter });\n if (sessionCache) {\n sessionCacheVal = value;\n }\n if (!noCache) {\n void FSExtra.outputJSON(cacheFilePath, {\n lockFileHash,\n depsToPreBundleForSsr: value\n });\n }\n }\n debug?.(`Scanning completed in ${Date.now() - startedAt}ms`);\n debug?.(\n `${value.prebundleDeps.length} deps are discovered and will be pre-bundled for SSR.` + (debugDetails ? \"\" : ` (Focus on this debug scope, \"DEBUG=${debug.namespace}\", to see more details.)`)\n );\n debugDetails?.(\n `Deps discovered to be pre-bundled for SSR: ${value.prebundleDeps.join(\", \")}`\n );\n return value;\n}\nexport {\n autoDepOptimizePlugin,\n findDepsToOptimize,\n getSSRExternalsCachePath,\n getScannedOptimizeDepsConfig\n};\n//# sourceMappingURL=autoDepOptimizePlugin.js.map\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ function autoDepOptimizePlugin(props) {
|
|
|
13
13
|
name,
|
|
14
14
|
enforce: "pre",
|
|
15
15
|
async config(cfg, env) {
|
|
16
|
-
var _cfg_optimizeDeps, _cfg_ssr_optimizeDeps, _cfg_ssr;
|
|
16
|
+
var _cfg_optimizeDeps, _cfg_ssr_optimizeDeps, _cfg_ssr, _cfg_ssr1;
|
|
17
17
|
debug === null || debug === void 0 ? void 0 : debug("Config hook called");
|
|
18
18
|
var userOptions = globalThis.__oneOptions;
|
|
19
19
|
var depsConfig = userOptions === null || userOptions === void 0 ? void 0 : userOptions.deps;
|
|
@@ -30,6 +30,7 @@ function autoDepOptimizePlugin(props) {
|
|
|
30
30
|
var finalConfig = await getScannedOptimizeDepsConfig({
|
|
31
31
|
...props,
|
|
32
32
|
mode: env.mode,
|
|
33
|
+
external: (_cfg_ssr1 = cfg.ssr) === null || _cfg_ssr1 === void 0 ? void 0 : _cfg_ssr1.external,
|
|
33
34
|
exclude: [
|
|
34
35
|
...exclude,
|
|
35
36
|
...userExcludes,
|
|
@@ -55,17 +56,19 @@ async function getScannedOptimizeDepsConfig(props) {
|
|
|
55
56
|
return typeof e === "string";
|
|
56
57
|
});
|
|
57
58
|
var excludeSet = new Set(excludeStrings);
|
|
58
|
-
var
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
var external = props.external;
|
|
60
|
+
var shouldOptimize = function shouldOptimize2(dep) {
|
|
61
|
+
return !excludeSet.has(dep) && external !== true && !(external === null || external === void 0 ? void 0 : external.some(function(name2) {
|
|
62
|
+
return dep === name2 || dep.startsWith(`${name2}/`);
|
|
63
|
+
}));
|
|
64
|
+
};
|
|
65
|
+
var filteredDeps = result.prebundleDeps.filter(shouldOptimize);
|
|
61
66
|
return { ssr: {
|
|
62
67
|
optimizeDeps: {
|
|
63
68
|
include: filteredDeps,
|
|
64
69
|
exclude: EXCLUDE_LIST
|
|
65
70
|
},
|
|
66
|
-
noExternal: [...filteredDeps, ...result.noExternalDeps.filter(
|
|
67
|
-
return !excludeSet.has(dep);
|
|
68
|
-
})]
|
|
71
|
+
noExternal: [...filteredDeps, ...result.noExternalDeps.filter(shouldOptimize)]
|
|
69
72
|
} };
|
|
70
73
|
}
|
|
71
74
|
var sessionCacheVal = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoDepOptimizePlugin.native.js","names":[],"sources":["plugins/autoDepOptimizePlugin.native.js"],"sourcesContent":["import { createDebugger } from \"@vxrn/debug\";\nimport FSExtra from \"fs-extra\";\nimport path from \"path\";\nimport { createFilter } from \"vite\";\nimport { EXCLUDE_LIST, scanDepsToOptimize } from \"../utils/scanDepsToOptimize\";\nimport { getFileHash, lookupFile } from \"../utils/utils\";\nimport { getCacheDir } from \"../utils/getCacheDir\";\nvar name = \"vxrn:auto-dep-optimize\";\nvar { debug, debugDetails } = createDebugger(name);\nfunction autoDepOptimizePlugin(props) {\n return {\n name,\n enforce: \"pre\",\n async config(cfg, env) {\n var _cfg_optimizeDeps, _cfg_ssr_optimizeDeps, _cfg_ssr;\n debug === null || debug === void 0 ? void 0 : debug(\"Config hook called\");\n var userOptions = globalThis.__oneOptions;\n var depsConfig = userOptions === null || userOptions === void 0 ? void 0 : userOptions.deps;\n var exclude = depsConfig ? Object.entries(depsConfig).filter(function(param) {\n var [_, value] = param;\n return value === false;\n }).map(function(param) {\n var [k] = param;\n return k;\n }) : [];\n var userExcludes = Array.isArray(props.exclude) ? props.exclude : [\n props.exclude\n ];\n var userViteExcludes = ((_cfg_optimizeDeps = cfg.optimizeDeps) === null || _cfg_optimizeDeps === void 0 ? void 0 : _cfg_optimizeDeps.exclude) || [];\n var userSsrExcludes = ((_cfg_ssr = cfg.ssr) === null || _cfg_ssr === void 0 ? void 0 : (_cfg_ssr_optimizeDeps = _cfg_ssr.optimizeDeps) === null || _cfg_ssr_optimizeDeps === void 0 ? void 0 : _cfg_ssr_optimizeDeps.exclude) || [];\n var finalConfig = await getScannedOptimizeDepsConfig({\n ...props,\n mode: env.mode,\n exclude: [\n ...exclude,\n ...userExcludes,\n ...userViteExcludes,\n ...userSsrExcludes\n ].filter(Boolean)\n });\n debugDetails === null || debugDetails === void 0 ? void 0 : debugDetails(`Final auto-dep-optimize config: ${JSON.stringify(finalConfig, null, 2)}\nfrom props: ${JSON.stringify(props)}`);\n return finalConfig;\n }\n };\n}\nvar getSSRExternalsCachePath = function getSSRExternalsCachePath2(root) {\n return path.join(getCacheDir(root), \"deps-to-pre-bundle-for-ssr-cache.json\");\n};\nasync function getScannedOptimizeDepsConfig(props) {\n var _props_onScannedDeps;\n var result = await findDepsToOptimize(props);\n (_props_onScannedDeps = props.onScannedDeps) === null || _props_onScannedDeps === void 0 ? void 0 : _props_onScannedDeps.call(props, result);\n var excludeArray = Array.isArray(props.exclude) ? props.exclude : [\n props.exclude\n ];\n var excludeStrings = excludeArray.filter(function(e) {\n return typeof e === \"string\";\n });\n var excludeSet = new Set(excludeStrings);\n var
|
|
1
|
+
{"version":3,"file":"autoDepOptimizePlugin.native.js","names":[],"sources":["plugins/autoDepOptimizePlugin.native.js"],"sourcesContent":["import { createDebugger } from \"@vxrn/debug\";\nimport FSExtra from \"fs-extra\";\nimport path from \"path\";\nimport { createFilter } from \"vite\";\nimport { EXCLUDE_LIST, scanDepsToOptimize } from \"../utils/scanDepsToOptimize\";\nimport { getFileHash, lookupFile } from \"../utils/utils\";\nimport { getCacheDir } from \"../utils/getCacheDir\";\nvar name = \"vxrn:auto-dep-optimize\";\nvar { debug, debugDetails } = createDebugger(name);\nfunction autoDepOptimizePlugin(props) {\n return {\n name,\n enforce: \"pre\",\n async config(cfg, env) {\n var _cfg_optimizeDeps, _cfg_ssr_optimizeDeps, _cfg_ssr, _cfg_ssr1;\n debug === null || debug === void 0 ? void 0 : debug(\"Config hook called\");\n var userOptions = globalThis.__oneOptions;\n var depsConfig = userOptions === null || userOptions === void 0 ? void 0 : userOptions.deps;\n var exclude = depsConfig ? Object.entries(depsConfig).filter(function(param) {\n var [_, value] = param;\n return value === false;\n }).map(function(param) {\n var [k] = param;\n return k;\n }) : [];\n var userExcludes = Array.isArray(props.exclude) ? props.exclude : [\n props.exclude\n ];\n var userViteExcludes = ((_cfg_optimizeDeps = cfg.optimizeDeps) === null || _cfg_optimizeDeps === void 0 ? void 0 : _cfg_optimizeDeps.exclude) || [];\n var userSsrExcludes = ((_cfg_ssr = cfg.ssr) === null || _cfg_ssr === void 0 ? void 0 : (_cfg_ssr_optimizeDeps = _cfg_ssr.optimizeDeps) === null || _cfg_ssr_optimizeDeps === void 0 ? void 0 : _cfg_ssr_optimizeDeps.exclude) || [];\n var finalConfig = await getScannedOptimizeDepsConfig({\n ...props,\n mode: env.mode,\n external: (_cfg_ssr1 = cfg.ssr) === null || _cfg_ssr1 === void 0 ? void 0 : _cfg_ssr1.external,\n exclude: [\n ...exclude,\n ...userExcludes,\n ...userViteExcludes,\n ...userSsrExcludes\n ].filter(Boolean)\n });\n debugDetails === null || debugDetails === void 0 ? void 0 : debugDetails(`Final auto-dep-optimize config: ${JSON.stringify(finalConfig, null, 2)}\nfrom props: ${JSON.stringify(props)}`);\n return finalConfig;\n }\n };\n}\nvar getSSRExternalsCachePath = function getSSRExternalsCachePath2(root) {\n return path.join(getCacheDir(root), \"deps-to-pre-bundle-for-ssr-cache.json\");\n};\nasync function getScannedOptimizeDepsConfig(props) {\n var _props_onScannedDeps;\n var result = await findDepsToOptimize(props);\n (_props_onScannedDeps = props.onScannedDeps) === null || _props_onScannedDeps === void 0 ? void 0 : _props_onScannedDeps.call(props, result);\n var excludeArray = Array.isArray(props.exclude) ? props.exclude : [\n props.exclude\n ];\n var excludeStrings = excludeArray.filter(function(e) {\n return typeof e === \"string\";\n });\n var excludeSet = new Set(excludeStrings);\n var external = props.external;\n var shouldOptimize = function shouldOptimize2(dep) {\n return !excludeSet.has(dep) && external !== true && !(external === null || external === void 0 ? void 0 : external.some(function(name2) {\n return dep === name2 || dep.startsWith(`${name2}/`);\n }));\n };\n var filteredDeps = result.prebundleDeps.filter(shouldOptimize);\n return {\n ssr: {\n optimizeDeps: {\n include: filteredDeps,\n exclude: EXCLUDE_LIST\n },\n noExternal: [\n ...filteredDeps,\n ...result.noExternalDeps.filter(shouldOptimize)\n ]\n }\n };\n}\nvar sessionCacheVal = null;\nasync function findDepsToOptimize(param) {\n var { root, mode, exclude, include } = param;\n var cacheFilePath = getSSRExternalsCachePath(root);\n var startedAt = debug ? Date.now() : 0;\n var noCache = mode === \"production\";\n var sessionCache = mode === \"production\";\n if (sessionCache && sessionCacheVal) {\n return sessionCacheVal;\n }\n var lockFile = await lookupFile(root, [\n \"yarn.lock\",\n \"package-lock.json\",\n \"pnpm-lock.yaml\",\n \"bun.lock\",\n \"bun.lockb\"\n ]);\n var lockFileHash = lockFile ? await getFileHash(lockFile) : void 0;\n var value;\n if (lockFileHash && !noCache) {\n try {\n var { lockFileHash: cachedLockFileHash, depsToPreBundleForSsr: cachedDepsToPreBundle } = await FSExtra.readJSON(cacheFilePath);\n if (lockFileHash === cachedLockFileHash && !!cachedDepsToPreBundle && \"prebundleDeps\" in cachedDepsToPreBundle && Array.isArray(cachedDepsToPreBundle.noExternalDeps)) {\n value = cachedDepsToPreBundle;\n debug === null || debug === void 0 ? void 0 : debug(`Using cached scan results from ${cacheFilePath}`);\n }\n } catch (err) {\n debug === null || debug === void 0 ? void 0 : debug(`${err}`);\n }\n }\n var filter = createFilter(include, exclude);\n if (!value) {\n value = await scanDepsToOptimize(`${root}/package.json`, {\n filter\n });\n if (sessionCache) {\n sessionCacheVal = value;\n }\n if (!noCache) {\n void FSExtra.outputJSON(cacheFilePath, {\n lockFileHash,\n depsToPreBundleForSsr: value\n });\n }\n }\n debug === null || debug === void 0 ? void 0 : debug(`Scanning completed in ${Date.now() - startedAt}ms`);\n debug === null || debug === void 0 ? void 0 : debug(`${value.prebundleDeps.length} deps are discovered and will be pre-bundled for SSR.` + (debugDetails ? \"\" : ` (Focus on this debug scope, \"DEBUG=${debug.namespace}\", to see more details.)`));\n debugDetails === null || debugDetails === void 0 ? void 0 : debugDetails(`Deps discovered to be pre-bundled for SSR: ${value.prebundleDeps.join(\", \")}`);\n return value;\n}\nexport {\n autoDepOptimizePlugin,\n findDepsToOptimize,\n getSSRExternalsCachePath,\n getScannedOptimizeDepsConfig\n};\n//# sourceMappingURL=autoDepOptimizePlugin.js.map\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import FSExtra from "fs-extra";
|
|
2
2
|
import { clearTransformCache } from "@vxrn/compiler";
|
|
3
|
-
import {
|
|
3
|
+
import { resolveConfig } from "vite";
|
|
4
4
|
import { loadEnv } from "../../exports/loadEnv.mjs";
|
|
5
5
|
import { buildNativeBundle } from "../../utils/createNativeDevEngine.mjs";
|
|
6
6
|
|
|
@@ -10,10 +10,11 @@ async function buildBundle(_argv, ctx, args, bundleImpl = null) {
|
|
|
10
10
|
if (typeof root !== "string") {
|
|
11
11
|
throw new Error(`Expected ctx.root to be a string, but got ${typeof root}`);
|
|
12
12
|
}
|
|
13
|
-
const
|
|
14
|
-
if (
|
|
13
|
+
const viteConfig = await resolveConfig({}, "build", "production");
|
|
14
|
+
if (globalThis["__viteMetroPluginOptions__"]) {
|
|
15
15
|
console.info("Using @vxrn/vite-plugin-metro to build the bundle.");
|
|
16
|
-
|
|
16
|
+
const { bundle } = await import("@vxrn/vite-plugin-metro/rn-commands");
|
|
17
|
+
await bundle.getBuildBundleFn(viteConfig)(_argv, ctx, args, bundleImpl);
|
|
17
18
|
return;
|
|
18
19
|
}
|
|
19
20
|
process.env.IS_VXRN_CLI = "true";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildBundle.js","names":[
|
|
1
|
+
{"version":3,"file":"buildBundle.js","names":[],"sources":["rn-commands/bundle/buildBundle.js"],"sourcesContent":["import FSExtra from \"fs-extra\";\nimport { clearTransformCache } from \"@vxrn/compiler\";\nimport { resolveConfig } from \"vite\";\nimport { loadEnv } from \"../../exports/loadEnv\";\nimport { buildNativeBundle } from \"../../utils/createNativeDevEngine\";\nasync function buildBundle(_argv, ctx, args, bundleImpl = null) {\n const {\n platform,\n // Android is not supported yet.\n dev,\n bundleOutput,\n // React Native's `--bundle-encoding` names a Node Buffer encoding.\n bundleEncoding = \"utf8\",\n assetsDest,\n // `--minify` overrides React Native's default of \"minify unless this is a\n // dev bundle\". undefined means the flag was not passed.\n minify,\n // `--reset-cache` drops the compiler's transform cache, the only cache a\n // rolldown production build reads.\n resetCache\n // `--entry-file` is a placeholder in generated native projects. VxRN apps\n // configure entries.native through vxrn/react-native-commands, while One\n // generates its native entry from the route tree.\n // `--read-global-cache` / `--max-workers` / `--config` / `--transformer` /\n // `--resolver-option` configure Metro's global cache, worker pool and\n // resolver. A rolldown production build has none of them: it transforms\n // from source in-process. React Native's own bundle command ignores\n // `--read-global-cache` too.\n // `--unstable-transform-profile` picks a JS engine to target. This pipeline\n // always downlevels for Hermes, which is what every profile it accepts\n // ('default', 'hermes', 'hermes-canary') can run.\n // `--sourcemap-use-absolute-path`, `--sourcemap-sources-root`,\n // `--asset-catalog-dest` and `--indexed-ram-bundle` are not implemented.\n } = args;\n const { root } = ctx;\n if (typeof root !== \"string\") {\n throw new Error(`Expected ctx.root to be a string, but got ${typeof root}`);\n }\n const viteConfig = await resolveConfig({}, \"build\", \"production\");\n if (globalThis[\"__viteMetroPluginOptions__\"]) {\n console.info(\"Using @vxrn/vite-plugin-metro to build the bundle.\");\n const { bundle } = await import(\"@vxrn/vite-plugin-metro/rn-commands\");\n await bundle.getBuildBundleFn(viteConfig)(_argv, ctx, args, bundleImpl);\n return;\n }\n process.env.IS_VXRN_CLI = \"true\";\n loadEnv(dev ? \"development\" : \"production\", root);\n if (!dev) {\n process.env.NODE_ENV = \"production\";\n }\n if (resetCache) {\n clearTransformCache();\n }\n console.info(`[vxrn] building native bundle for ${platform}...`);\n const nativeEntryFile = ctx.vxrnEntries?.native;\n if (nativeEntryFile !== void 0 && typeof nativeEntryFile !== \"string\") {\n throw new Error(\"Expected entries.native to be a string\");\n }\n const result = await buildNativeBundle({\n root,\n platform,\n dev,\n entryFile: nativeEntryFile,\n // pass through ONE_SERVER_URL so the native prelude can inject it into\n // process.env. without this, getURL.native falls back to the dummy\n // 'http://one-server.example.com' and runtime loader fetches fail in prod.\n serverUrl: process.env.ONE_SERVER_URL,\n assetsDest,\n sourcemap: !!args.sourcemapOutput,\n minify\n });\n const builtBundle = result.code;\n if (result.map && args.sourcemapOutput) {\n FSExtra.outputFileSync(args.sourcemapOutput, result.map, { encoding: \"utf8\" });\n }\n console.info(`Writing bundle to ${bundleOutput}...`);\n FSExtra.outputFileSync(bundleOutput, builtBundle, { encoding: bundleEncoding });\n console.info(\"Done.\");\n setTimeout(() => {\n console.info(\"Exiting process to prevent hanging.\");\n process.exit();\n }, 3e4).unref();\n}\nexport {\n buildBundle\n};\n//# sourceMappingURL=buildBundle.js.map\n"],"mappings":";;;;;;;AAKA,eAAe,YAAY,OAAO,KAAK,MAAM,aAAa,MAAM;CAC9D,MAAM,EACJ,UAEA,KACA,cAEA,iBAAiB,QACjB,YAGA,QAGA,eAcE;CACJ,MAAM,EAAE,SAAS;CACjB,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,IAAI,MAAM,6CAA6C,OAAO,MAAM;CAC5E;CACA,MAAM,aAAa,MAAM,cAAc,CAAC,GAAG,SAAS,YAAY;CAChE,IAAI,WAAW,+BAA+B;EAC5C,QAAQ,KAAK,oDAAoD;EACjE,MAAM,EAAE,WAAW,MAAM,OAAO;EAChC,MAAM,OAAO,iBAAiB,UAAU,CAAC,CAAC,OAAO,KAAK,MAAM,UAAU;EACtE;CACF;CACA,QAAQ,IAAI,cAAc;CAC1B,QAAQ,MAAM,gBAAgB,cAAc,IAAI;CAChD,IAAI,CAAC,KAAK;EACR,QAAQ,IAAI,WAAW;CACzB;CACA,IAAI,YAAY;EACd,oBAAoB;CACtB;CACA,QAAQ,KAAK,qCAAqC,SAAS,IAAI;CAC/D,MAAM,kBAAkB,IAAI,aAAa;CACzC,IAAI,oBAAoB,KAAK,KAAK,OAAO,oBAAoB,UAAU;EACrE,MAAM,IAAI,MAAM,wCAAwC;CAC1D;CACA,MAAM,SAAS,MAAM,kBAAkB;EACrC;EACA;EACA;EACA,WAAW;EAIX,WAAW,QAAQ,IAAI;EACvB;EACA,WAAW,CAAC,CAAC,KAAK;EAClB;CACF,CAAC;CACD,MAAM,cAAc,OAAO;CAC3B,IAAI,OAAO,OAAO,KAAK,iBAAiB;EACtC,QAAQ,eAAe,KAAK,iBAAiB,OAAO,KAAK,EAAE,UAAU,OAAO,CAAC;CAC/E;CACA,QAAQ,KAAK,qBAAqB,aAAa,IAAI;CACnD,QAAQ,eAAe,cAAc,aAAa,EAAE,UAAU,eAAe,CAAC;CAC9E,QAAQ,KAAK,OAAO;CACpB,iBAAiB;EACf,QAAQ,KAAK,qCAAqC;EAClD,QAAQ,KAAK;CACf,GAAG,GAAG,CAAC,CAAC,MAAM;AAChB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import FSExtra from "fs-extra";
|
|
2
2
|
import { clearTransformCache } from "@vxrn/compiler";
|
|
3
|
-
import {
|
|
3
|
+
import { resolveConfig } from "vite";
|
|
4
4
|
import { loadEnv } from "../../exports/loadEnv.native.js";
|
|
5
5
|
import { buildNativeBundle } from "../../utils/createNativeDevEngine.native.js";
|
|
6
6
|
|
|
@@ -12,10 +12,11 @@ async function buildBundle(_argv, ctx, args) {
|
|
|
12
12
|
if (typeof root !== "string") {
|
|
13
13
|
throw new Error(`Expected ctx.root to be a string, but got ${typeof root}`);
|
|
14
14
|
}
|
|
15
|
-
var
|
|
16
|
-
if (
|
|
15
|
+
var viteConfig = await resolveConfig({}, "build", "production");
|
|
16
|
+
if (globalThis["__viteMetroPluginOptions__"]) {
|
|
17
17
|
console.info("Using @vxrn/vite-plugin-metro to build the bundle.");
|
|
18
|
-
|
|
18
|
+
var { bundle } = await import("@vxrn/vite-plugin-metro/rn-commands");
|
|
19
|
+
await bundle.getBuildBundleFn(viteConfig)(_argv, ctx, args, bundleImpl);
|
|
19
20
|
return;
|
|
20
21
|
}
|
|
21
22
|
process.env.IS_VXRN_CLI = "true";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildBundle.native.js","names":[
|
|
1
|
+
{"version":3,"file":"buildBundle.native.js","names":[],"sources":["rn-commands/bundle/buildBundle.native.js"],"sourcesContent":["import FSExtra from \"fs-extra\";\nimport { clearTransformCache } from \"@vxrn/compiler\";\nimport { resolveConfig } from \"vite\";\nimport { loadEnv } from \"../../exports/loadEnv\";\nimport { buildNativeBundle } from \"../../utils/createNativeDevEngine\";\nasync function buildBundle(_argv, ctx, args) {\n var bundleImpl = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null;\n var _ctx_vxrnEntries;\n var {\n platform,\n // Android is not supported yet.\n dev,\n bundleOutput,\n // React Native's `--bundle-encoding` names a Node Buffer encoding.\n bundleEncoding = \"utf8\",\n assetsDest,\n // `--minify` overrides React Native's default of \"minify unless this is a\n // dev bundle\". undefined means the flag was not passed.\n minify,\n // `--reset-cache` drops the compiler's transform cache, the only cache a\n // rolldown production build reads.\n resetCache\n } = (\n // `--entry-file` is a placeholder in generated native projects. VxRN apps\n // configure entries.native through vxrn/react-native-commands, while One\n // generates its native entry from the route tree.\n // `--read-global-cache` / `--max-workers` / `--config` / `--transformer` /\n // `--resolver-option` configure Metro's global cache, worker pool and\n // resolver. A rolldown production build has none of them: it transforms\n // from source in-process. React Native's own bundle command ignores\n // `--read-global-cache` too.\n // `--unstable-transform-profile` picks a JS engine to target. This pipeline\n // always downlevels for Hermes, which is what every profile it accepts\n // ('default', 'hermes', 'hermes-canary') can run.\n // `--sourcemap-use-absolute-path`, `--sourcemap-sources-root`,\n // `--asset-catalog-dest` and `--indexed-ram-bundle` are not implemented.\n args\n );\n var { root } = ctx;\n if (typeof root !== \"string\") {\n throw new Error(`Expected ctx.root to be a string, but got ${typeof root}`);\n }\n var viteConfig = await resolveConfig({}, \"build\", \"production\");\n if (globalThis[\"__viteMetroPluginOptions__\"]) {\n console.info(\"Using @vxrn/vite-plugin-metro to build the bundle.\");\n var { bundle } = await import(\"@vxrn/vite-plugin-metro/rn-commands\");\n await bundle.getBuildBundleFn(viteConfig)(_argv, ctx, args, bundleImpl);\n return;\n }\n process.env.IS_VXRN_CLI = \"true\";\n loadEnv(dev ? \"development\" : \"production\", root);\n if (!dev) {\n process.env.NODE_ENV = \"production\";\n }\n if (resetCache) {\n clearTransformCache();\n }\n console.info(`[vxrn] building native bundle for ${platform}...`);\n var nativeEntryFile = (_ctx_vxrnEntries = ctx.vxrnEntries) === null || _ctx_vxrnEntries === void 0 ? void 0 : _ctx_vxrnEntries.native;\n if (nativeEntryFile !== void 0 && typeof nativeEntryFile !== \"string\") {\n throw new Error(\"Expected entries.native to be a string\");\n }\n var result = await buildNativeBundle({\n root,\n platform,\n dev,\n entryFile: nativeEntryFile,\n // pass through ONE_SERVER_URL so the native prelude can inject it into\n // process.env. without this, getURL.native falls back to the dummy\n // 'http://one-server.example.com' and runtime loader fetches fail in prod.\n serverUrl: process.env.ONE_SERVER_URL,\n assetsDest,\n sourcemap: !!args.sourcemapOutput,\n minify\n });\n var builtBundle = result.code;\n if (result.map && args.sourcemapOutput) {\n FSExtra.outputFileSync(args.sourcemapOutput, result.map, {\n encoding: \"utf8\"\n });\n }\n console.info(`Writing bundle to ${bundleOutput}...`);\n FSExtra.outputFileSync(bundleOutput, builtBundle, {\n encoding: bundleEncoding\n });\n console.info(\"Done.\");\n setTimeout(function() {\n console.info(\"Exiting process to prevent hanging.\");\n process.exit();\n }, 3e4).unref();\n}\nexport {\n buildBundle\n};\n//# sourceMappingURL=buildBundle.js.map\n"],"mappings":";;;;;;;AAKA,eAAe,YAAY,OAAO,KAAK,MAAM;CAC3C,IAAI,aAAa,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK;CAClF,IAAI;CACJ,IAAI,EACF,UAEA,KACA,cAEA,iBAAiB,QACjB,YAGA,QAGA,eAeA;CAEF,IAAI,EAAE,SAAS;CACf,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,IAAI,MAAM,6CAA6C,OAAO,MAAM;CAC5E;CACA,IAAI,aAAa,MAAM,cAAc,CAAC,GAAG,SAAS,YAAY;CAC9D,IAAI,WAAW,+BAA+B;EAC5C,QAAQ,KAAK,oDAAoD;EACjE,IAAI,EAAE,WAAW,MAAM,OAAO;EAC9B,MAAM,OAAO,iBAAiB,UAAU,CAAC,CAAC,OAAO,KAAK,MAAM,UAAU;EACtE;CACF;CACA,QAAQ,IAAI,cAAc;CAC1B,QAAQ,MAAM,gBAAgB,cAAc,IAAI;CAChD,IAAI,CAAC,KAAK;EACR,QAAQ,IAAI,WAAW;CACzB;CACA,IAAI,YAAY;EACd,oBAAoB;CACtB;CACA,QAAQ,KAAK,qCAAqC,SAAS,IAAI;CAC/D,IAAI,mBAAmB,mBAAmB,IAAI,iBAAiB,QAAQ,qBAAqB,KAAK,IAAI,KAAK,IAAI,iBAAiB;CAC/H,IAAI,oBAAoB,KAAK,KAAK,OAAO,oBAAoB,UAAU;EACrE,MAAM,IAAI,MAAM,wCAAwC;CAC1D;CACA,IAAI,SAAS,MAAM,kBAAkB;EACnC;EACA;EACA;EACA,WAAW;EAIX,WAAW,QAAQ,IAAI;EACvB;EACA,WAAW,CAAC,CAAC,KAAK;EAClB;CACF,CAAC;CACD,IAAI,cAAc,OAAO;CACzB,IAAI,OAAO,OAAO,KAAK,iBAAiB;EACtC,QAAQ,eAAe,KAAK,iBAAiB,OAAO,KAAK,EACvD,UAAU,OACZ,CAAC;CACH;CACA,QAAQ,KAAK,qBAAqB,aAAa,IAAI;CACnD,QAAQ,eAAe,cAAc,aAAa,EAChD,UAAU,eACZ,CAAC;CACD,QAAQ,KAAK,OAAO;CACpB,WAAW,WAAW;EACpB,QAAQ,KAAK,qCAAqC;EAClD,QAAQ,KAAK;CACf,GAAG,GAAG,CAAC,CAAC,MAAM;AAChB"}
|
|
@@ -168,9 +168,9 @@ function getNativePlugins(root, platform, viteImportGlobPlugin, dev, assetsDest,
|
|
|
168
168
|
nativePackageDedupePlugin(root),
|
|
169
169
|
cssStubPlugin(),
|
|
170
170
|
viteImportGlobPlugin({ root }),
|
|
171
|
-
vxrnCompilerPlugin(platform, dev, root, sourceMaps),
|
|
172
171
|
rnCodegenPlugin({ projectRoot: root }),
|
|
173
172
|
flowStripPlugin(),
|
|
173
|
+
vxrnCompilerPlugin(platform, dev, root, sourceMaps),
|
|
174
174
|
nativeAnimatedGuardPlugin(),
|
|
175
175
|
assetPlugin({
|
|
176
176
|
root,
|
|
@@ -574,14 +574,16 @@ globalThis.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
|
|
|
574
574
|
` : "";
|
|
575
575
|
const entryCode = () => `
|
|
576
576
|
${refreshSetup}
|
|
577
|
-
|
|
577
|
+
// retain the namespace so rolldown dev eagerly initializes the RN environment
|
|
578
|
+
// before app modules, even when the renderer also requires this entry.
|
|
579
|
+
import * as ReactNativeEnvironment from 'react-native/setup-env';
|
|
578
580
|
import NativeWebSocket from 'react-native/Libraries/WebSocket/WebSocket';
|
|
579
581
|
import DevSettings from 'react-native/Libraries/Utilities/DevSettings';
|
|
580
582
|
${setupFileImport}
|
|
581
583
|
${routeImports}
|
|
582
584
|
import { createApp } from 'one';
|
|
583
585
|
|
|
584
|
-
void
|
|
586
|
+
void ReactNativeEnvironment;
|
|
585
587
|
globalThis.WebSocket = NativeWebSocket;
|
|
586
588
|
globalThis.__VXRN_RELOAD_NATIVE_DEV_BUNDLE__ = function(reason) {
|
|
587
589
|
DevSettings.reload(reason);
|
|
@@ -955,7 +957,7 @@ function reactNativeDedupePlugin(root) {
|
|
|
955
957
|
let reactNativeRoot;
|
|
956
958
|
return {
|
|
957
959
|
name: "vxrn:react-native-dedupe",
|
|
958
|
-
async resolveId(source, importer) {
|
|
960
|
+
async resolveId(source, importer, options) {
|
|
959
961
|
if (source !== "react-native" && !source.startsWith("react-native/")) return;
|
|
960
962
|
if (reactNativeRoot === void 0) try {
|
|
961
963
|
reactNativeRoot = realpathSync(dirname(resolvePath("react-native/package.json", root)));
|
|
@@ -963,8 +965,18 @@ function reactNativeDedupePlugin(root) {
|
|
|
963
965
|
reactNativeRoot = null;
|
|
964
966
|
}
|
|
965
967
|
if (!reactNativeRoot) return;
|
|
968
|
+
const exported = await this.resolve(source, join(root, "package.json"), {
|
|
969
|
+
skipSelf: true,
|
|
970
|
+
kind: options.kind
|
|
971
|
+
});
|
|
972
|
+
if (exported) return exported;
|
|
966
973
|
const subpath = source === "react-native" ? "index.js" : source.slice(13);
|
|
967
|
-
|
|
974
|
+
const unified = await this.resolve(normalizePath(resolve(reactNativeRoot, subpath)), importer, {
|
|
975
|
+
skipSelf: true,
|
|
976
|
+
kind: options.kind
|
|
977
|
+
});
|
|
978
|
+
if (unified) return unified;
|
|
979
|
+
this.error(`[vxrn] '${source}' is missing from the app's react-native (${reactNativeRoot}), imported by '${importer}'. refusing the nested copy so the native runtime stays a singleton.`);
|
|
968
980
|
}
|
|
969
981
|
};
|
|
970
982
|
}
|