@vxrn/vite-plugin-metro 2.0.0-beta.51.1 → 2.0.0-beta.56.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/env/platformEnv.cjs +2 -0
- package/dist/cjs/env/platformEnv.native.cjs +2 -0
- package/dist/cjs/env/platformEnv.native.js +2 -0
- package/dist/cjs/env/platformEnv.native.js.map +1 -1
- package/dist/cjs/index.cjs +0 -2
- package/dist/cjs/index.native.cjs +0 -2
- package/dist/cjs/index.native.js +0 -2
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.cjs +10 -15
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.cjs +27 -48
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js +27 -48
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +71 -38
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +86 -42
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +86 -42
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
- package/dist/cjs/transformer/babel-transformer.cjs +53 -4
- package/dist/cjs/transformer/babel-transformer.native.cjs +65 -6
- package/dist/cjs/transformer/babel-transformer.native.js +65 -6
- package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
- package/dist/cjs/transformer/expoVirtualEnv.cjs +92 -0
- package/dist/cjs/transformer/expoVirtualEnv.native.cjs +113 -0
- package/dist/cjs/transformer/expoVirtualEnv.native.js +115 -0
- package/dist/cjs/transformer/expoVirtualEnv.native.js.map +1 -0
- package/dist/cjs/transformer/loadBabelConfig.cjs +1 -1
- package/dist/cjs/transformer/loadBabelConfig.native.cjs +1 -1
- package/dist/cjs/transformer/loadBabelConfig.native.js +1 -1
- package/dist/cjs/transformer/loadBabelConfig.native.js.map +1 -1
- package/dist/cjs/transformer/metroNativeWorker.cjs +20 -29
- package/dist/cjs/transformer/metroNativeWorker.native.cjs +24 -30
- package/dist/cjs/transformer/metroNativeWorker.native.js +24 -30
- package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
- package/dist/cjs/transformer/transformSync.cjs +3 -3
- package/dist/cjs/transformer/transformSync.native.cjs +3 -3
- package/dist/cjs/transformer/transformSync.native.js +3 -3
- package/dist/cjs/transformer/transformSync.native.js.map +1 -1
- package/dist/cjs/utils/exit.cjs +1 -1
- package/dist/cjs/utils/exit.native.cjs +1 -1
- package/dist/cjs/utils/exit.native.js +1 -1
- package/dist/cjs/utils/exit.native.js.map +1 -1
- package/dist/esm/env/platformEnv.mjs +2 -0
- package/dist/esm/env/platformEnv.mjs.map +1 -1
- package/dist/esm/env/platformEnv.native.js +2 -0
- package/dist/esm/env/platformEnv.native.js.map +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/index.mjs +1 -2
- package/dist/esm/index.native.js +1 -2
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs +11 -15
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs.map +1 -1
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js +28 -48
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +71 -38
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +86 -42
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
- package/dist/esm/transformer/babel-transformer.mjs +133 -96
- package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
- package/dist/esm/transformer/babel-transformer.native.js +147 -103
- package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
- package/dist/esm/transformer/expoVirtualEnv.mjs +67 -0
- package/dist/esm/transformer/expoVirtualEnv.mjs.map +1 -0
- package/dist/esm/transformer/expoVirtualEnv.native.js +86 -0
- package/dist/esm/transformer/expoVirtualEnv.native.js.map +1 -0
- package/dist/esm/transformer/loadBabelConfig.mjs +1 -1
- package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -1
- package/dist/esm/transformer/loadBabelConfig.native.js +1 -1
- package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -1
- package/dist/esm/transformer/metroNativeWorker.mjs +20 -29
- package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
- package/dist/esm/transformer/metroNativeWorker.native.js +24 -30
- package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
- package/dist/esm/transformer/transformSync.mjs +3 -3
- package/dist/esm/transformer/transformSync.mjs.map +1 -1
- package/dist/esm/transformer/transformSync.native.js +3 -3
- package/dist/esm/transformer/transformSync.native.js.map +1 -1
- package/dist/esm/utils/exit.mjs +1 -1
- package/dist/esm/utils/exit.mjs.map +1 -1
- package/dist/esm/utils/exit.native.js +1 -1
- package/dist/esm/utils/exit.native.js.map +1 -1
- package/package.json +7 -9
- package/src/babel-plugins/import-meta-env-plugin.ts +1 -1
- package/src/env/platformEnv.test.ts +12 -2
- package/src/env/platformEnv.ts +3 -0
- package/src/index.ts +0 -2
- package/src/metro-config/getMetroBabelConfigFromViteConfig.test.ts +19 -25
- package/src/metro-config/getMetroBabelConfigFromViteConfig.ts +8 -27
- package/src/metro-config/getMetroConfigFromViteConfig.test.ts +60 -0
- package/src/metro-config/getMetroConfigFromViteConfig.ts +119 -96
- package/src/plugins/metroPlugin.ts +3 -6
- package/src/transformer/babel-transformer.test.ts +118 -0
- package/src/transformer/babel-transformer.ts +82 -15
- package/src/transformer/expoVirtualEnv.integration.test.ts +106 -0
- package/src/transformer/expoVirtualEnv.test.ts +72 -0
- package/src/transformer/expoVirtualEnv.ts +115 -0
- package/src/transformer/loadBabelConfig.ts +1 -1
- package/src/transformer/metroNativeWorker.test.ts +134 -17
- package/src/transformer/metroNativeWorker.ts +43 -51
- package/src/transformer/transformSync.test.ts +22 -0
- package/src/transformer/transformSync.ts +4 -4
- package/src/utils/exit.ts +2 -2
- package/src/utils/getTerminalReporter.ts +1 -1
- package/src/utils/projectImport.ts +2 -2
- package/types/babel-plugins/import-meta-env-plugin.d.ts +1 -1
- package/types/env/platformEnv.d.ts +1 -0
- package/types/env/platformEnv.d.ts.map +1 -1
- package/types/index.d.ts +0 -2
- package/types/index.d.ts.map +1 -1
- package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts +1 -1
- package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts.map +1 -1
- package/types/metro-config/getMetroConfigFromViteConfig.d.ts +2 -2
- package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
- package/types/plugins/metroPlugin.d.ts +2 -4
- package/types/plugins/metroPlugin.d.ts.map +1 -1
- package/types/transformer/babel-transformer.d.ts +10 -1
- package/types/transformer/babel-transformer.d.ts.map +1 -1
- package/types/transformer/expoVirtualEnv.d.ts +8 -0
- package/types/transformer/expoVirtualEnv.d.ts.map +1 -0
- package/types/transformer/metroNativeWorker.d.ts +3 -5
- package/types/transformer/metroNativeWorker.d.ts.map +1 -1
- package/types/utils/projectImport.d.ts +2 -2
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +0 -59
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.cjs +0 -62
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +0 -64
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +0 -35
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.cjs +0 -37
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -39
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +0 -40
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +0 -1
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +0 -41
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +0 -15
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +0 -1
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -15
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +0 -1
- package/src/plugins/expoManifestRequestHandlerPlugin.ts +0 -88
- package/src/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.ts +0 -28
- package/types/plugins/expoManifestRequestHandlerPlugin.d.ts +0 -14
- package/types/plugins/expoManifestRequestHandlerPlugin.d.ts.map +0 -1
- package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts +0 -5
- package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts.map +0 -1
|
@@ -25,12 +25,12 @@ function transformSync(src, babelConfig, { hermesParser }) {
|
|
|
25
25
|
return parseWithBabel(src, loadedBabelConfig);
|
|
26
26
|
}
|
|
27
27
|
if (!isTypeScript && (hermesParser || src.includes(" @flow"))) {
|
|
28
|
-
return
|
|
28
|
+
return parseWithFlow(src, loadedBabelConfig);
|
|
29
29
|
}
|
|
30
30
|
return parseWithBabel(src, loadedBabelConfig);
|
|
31
31
|
}
|
|
32
|
-
function
|
|
33
|
-
const sourceAst = require("
|
|
32
|
+
function parseWithFlow(src, babelConfig) {
|
|
33
|
+
const sourceAst = require("flow-parser").parse(src, {
|
|
34
34
|
babel: true,
|
|
35
35
|
sourceType: babelConfig.sourceType
|
|
36
36
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformSync.js","names":[],"sources":["esm/transformer/transformSync.js"],"sourcesContent":["import * as babel from \"./babel-core\";\nfunction isTypeScriptSource(fileName) {\n return fileName?.endsWith(\".ts\");\n}\nfunction isTSXSource(fileName) {\n return fileName?.endsWith(\".tsx\");\n}\nfunction transformSync(src, babelConfig, { hermesParser }) {\n const loadedBabelConfig = babel.loadOptions(\n babelConfig\n );\n if (!loadedBabelConfig) return null;\n let hasWorkletsPlugin = false;\n loadedBabelConfig.plugins = loadedBabelConfig.plugins?.filter((plugin) => {\n const workletsPlugin = plugin;\n if (workletsPlugin.key !== \"worklets\") return true;\n if (workletsPlugin.options && \"workletizableModules\" in workletsPlugin.options) {\n throw new Error(\n \"[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.\"\n );\n }\n if (hasWorkletsPlugin) return false;\n hasWorkletsPlugin = true;\n return true;\n });\n const isTypeScript = isTypeScriptSource(loadedBabelConfig.filename ?? \"\") || isTSXSource(loadedBabelConfig.filename ?? \"\");\n if (isTypeScript) {\n return parseWithBabel(src, loadedBabelConfig);\n }\n if (!isTypeScript && // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts\n // of the ecosystem.\n // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.\n // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.\n (hermesParser || src.includes(\" @flow\"))) {\n return
|
|
1
|
+
{"version":3,"file":"transformSync.js","names":[],"sources":["esm/transformer/transformSync.js"],"sourcesContent":["import * as babel from \"./babel-core\";\nfunction isTypeScriptSource(fileName) {\n return fileName?.endsWith(\".ts\");\n}\nfunction isTSXSource(fileName) {\n return fileName?.endsWith(\".tsx\");\n}\nfunction transformSync(src, babelConfig, { hermesParser }) {\n const loadedBabelConfig = babel.loadOptions(\n babelConfig\n );\n if (!loadedBabelConfig) return null;\n let hasWorkletsPlugin = false;\n loadedBabelConfig.plugins = loadedBabelConfig.plugins?.filter((plugin) => {\n const workletsPlugin = plugin;\n if (workletsPlugin.key !== \"worklets\") return true;\n if (workletsPlugin.options && \"workletizableModules\" in workletsPlugin.options) {\n throw new Error(\n \"[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.\"\n );\n }\n if (hasWorkletsPlugin) return false;\n hasWorkletsPlugin = true;\n return true;\n });\n const isTypeScript = isTypeScriptSource(loadedBabelConfig.filename ?? \"\") || isTSXSource(loadedBabelConfig.filename ?? \"\");\n if (isTypeScript) {\n return parseWithBabel(src, loadedBabelConfig);\n }\n if (!isTypeScript && // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts\n // of the ecosystem.\n // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.\n // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.\n (hermesParser || src.includes(\" @flow\"))) {\n return parseWithFlow(src, loadedBabelConfig);\n }\n return parseWithBabel(src, loadedBabelConfig);\n}\nfunction parseWithFlow(src, babelConfig) {\n const sourceAst = require(\"flow-parser\").parse(src, {\n babel: true,\n sourceType: babelConfig.sourceType\n });\n return babel.transformFromAstSync(sourceAst, src, babelConfig);\n}\nfunction parseWithBabel(src, babelConfig) {\n return babel.transformSync(src, babelConfig);\n}\nexport {\n transformSync\n};\n//# sourceMappingURL=transformSync.js.map\n"],"mappings":";;;;;;;;;;AACA,SAAS,mBAAmB,UAAU;CACpC,OAAO,UAAU,SAAS,KAAK;AACjC;AACA,SAAS,YAAY,UAAU;CAC7B,OAAO,UAAU,SAAS,MAAM;AAClC;AACA,SAAS,cAAc,KAAK,aAAa,EAAE,gBAAgB;CACzD,MAAM,oBAAoB,MAAM,YAC9B,WACF;CACA,IAAI,CAAC,mBAAmB,OAAO;CAC/B,IAAI,oBAAoB;CACxB,kBAAkB,UAAU,kBAAkB,SAAS,QAAQ,WAAW;EACxE,MAAM,iBAAiB;EACvB,IAAI,eAAe,QAAQ,YAAY,OAAO;EAC9C,IAAI,eAAe,WAAW,0BAA0B,eAAe,SAAS;GAC9E,MAAM,IAAI,MACR,2GACF;EACF;EACA,IAAI,mBAAmB,OAAO;EAC9B,oBAAoB;EACpB,OAAO;CACT,CAAC;CACD,MAAM,eAAe,mBAAmB,kBAAkB,YAAY,EAAE,KAAK,YAAY,kBAAkB,YAAY,EAAE;CACzH,IAAI,cAAc;EAChB,OAAO,eAAe,KAAK,iBAAiB;CAC9C;CACA,IAAI,CAAC,iBAIJ,gBAAgB,IAAI,SAAS,QAAQ,IAAI;EACxC,OAAO,cAAc,KAAK,iBAAiB;CAC7C;CACA,OAAO,eAAe,KAAK,iBAAiB;AAC9C;AACA,SAAS,cAAc,KAAK,aAAa;CACvC,MAAM,sBAAoB,aAAa,CAAC,CAAC,MAAM,KAAK;EAClD,OAAO;EACP,YAAY,YAAY;CAC1B,CAAC;CACD,OAAO,MAAM,qBAAqB,WAAW,KAAK,WAAW;AAC/D;AACA,SAAS,eAAe,KAAK,aAAa;CACxC,OAAO,MAAM,cAAc,KAAK,WAAW;AAC7C"}
|
|
@@ -28,12 +28,12 @@ function transformSync(src, babelConfig, param) {
|
|
|
28
28
|
return parseWithBabel(src, loadedBabelConfig);
|
|
29
29
|
}
|
|
30
30
|
if (!isTypeScript && (hermesParser || src.includes(" @flow"))) {
|
|
31
|
-
return
|
|
31
|
+
return parseWithFlow(src, loadedBabelConfig);
|
|
32
32
|
}
|
|
33
33
|
return parseWithBabel(src, loadedBabelConfig);
|
|
34
34
|
}
|
|
35
|
-
function
|
|
36
|
-
var sourceAst = require("
|
|
35
|
+
function parseWithFlow(src, babelConfig) {
|
|
36
|
+
var sourceAst = require("flow-parser").parse(src, {
|
|
37
37
|
babel: true,
|
|
38
38
|
sourceType: babelConfig.sourceType
|
|
39
39
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformSync.native.js","names":[],"sources":["esm/transformer/transformSync.native.js"],"sourcesContent":["import * as babel from \"./babel-core\";\nfunction isTypeScriptSource(fileName) {\n return fileName === null || fileName === void 0 ? void 0 : fileName.endsWith(\".ts\");\n}\nfunction isTSXSource(fileName) {\n return fileName === null || fileName === void 0 ? void 0 : fileName.endsWith(\".tsx\");\n}\nfunction transformSync(src, babelConfig, param) {\n var { hermesParser } = param;\n var _loadedBabelConfig_filename, _loadedBabelConfig_filename1;\n var _loadedBabelConfig_plugins;\n var loadedBabelConfig = babel.loadOptions(babelConfig);\n if (!loadedBabelConfig) return null;\n var hasWorkletsPlugin = false;\n loadedBabelConfig.plugins = (_loadedBabelConfig_plugins = loadedBabelConfig.plugins) === null || _loadedBabelConfig_plugins === void 0 ? void 0 : _loadedBabelConfig_plugins.filter(function(plugin) {\n var workletsPlugin = plugin;\n if (workletsPlugin.key !== \"worklets\") return true;\n if (workletsPlugin.options && \"workletizableModules\" in workletsPlugin.options) {\n throw new Error(\"[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.\");\n }\n if (hasWorkletsPlugin) return false;\n hasWorkletsPlugin = true;\n return true;\n });\n var isTypeScript = isTypeScriptSource((_loadedBabelConfig_filename = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename !== void 0 ? _loadedBabelConfig_filename : \"\") || isTSXSource((_loadedBabelConfig_filename1 = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename1 !== void 0 ? _loadedBabelConfig_filename1 : \"\");\n if (isTypeScript) {\n return parseWithBabel(src, loadedBabelConfig);\n }\n if (!isTypeScript && // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts\n // of the ecosystem.\n // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.\n // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.\n (hermesParser || src.includes(\" @flow\"))) {\n return
|
|
1
|
+
{"version":3,"file":"transformSync.native.js","names":[],"sources":["esm/transformer/transformSync.native.js"],"sourcesContent":["import * as babel from \"./babel-core\";\nfunction isTypeScriptSource(fileName) {\n return fileName === null || fileName === void 0 ? void 0 : fileName.endsWith(\".ts\");\n}\nfunction isTSXSource(fileName) {\n return fileName === null || fileName === void 0 ? void 0 : fileName.endsWith(\".tsx\");\n}\nfunction transformSync(src, babelConfig, param) {\n var { hermesParser } = param;\n var _loadedBabelConfig_filename, _loadedBabelConfig_filename1;\n var _loadedBabelConfig_plugins;\n var loadedBabelConfig = babel.loadOptions(babelConfig);\n if (!loadedBabelConfig) return null;\n var hasWorkletsPlugin = false;\n loadedBabelConfig.plugins = (_loadedBabelConfig_plugins = loadedBabelConfig.plugins) === null || _loadedBabelConfig_plugins === void 0 ? void 0 : _loadedBabelConfig_plugins.filter(function(plugin) {\n var workletsPlugin = plugin;\n if (workletsPlugin.key !== \"worklets\") return true;\n if (workletsPlugin.options && \"workletizableModules\" in workletsPlugin.options) {\n throw new Error(\"[vxrn] `workletizableModules` was removed from react-native-worklets. use `importForwarding.moduleNames`.\");\n }\n if (hasWorkletsPlugin) return false;\n hasWorkletsPlugin = true;\n return true;\n });\n var isTypeScript = isTypeScriptSource((_loadedBabelConfig_filename = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename !== void 0 ? _loadedBabelConfig_filename : \"\") || isTSXSource((_loadedBabelConfig_filename1 = loadedBabelConfig.filename) !== null && _loadedBabelConfig_filename1 !== void 0 ? _loadedBabelConfig_filename1 : \"\");\n if (isTypeScript) {\n return parseWithBabel(src, loadedBabelConfig);\n }\n if (!isTypeScript && // The Hermes parser doesn't support comments or babel proposals such as export default from, meaning it has lower compatibility with larger parts\n // of the ecosystem.\n // However, React Native ships with flow syntax that isn't supported in Babel so we need to use Hermes for those files.\n // We can try to quickly detect if the file uses flow syntax by checking for the @flow pragma which is present in every React Native file.\n (hermesParser || src.includes(\" @flow\"))) {\n return parseWithFlow(src, loadedBabelConfig);\n }\n return parseWithBabel(src, loadedBabelConfig);\n}\nfunction parseWithFlow(src, babelConfig) {\n var sourceAst = require(\"flow-parser\").parse(src, {\n babel: true,\n sourceType: babelConfig.sourceType\n });\n return babel.transformFromAstSync(sourceAst, src, babelConfig);\n}\nfunction parseWithBabel(src, babelConfig) {\n return babel.transformSync(src, babelConfig);\n}\nexport {\n transformSync\n};\n//# sourceMappingURL=transformSync.js.map\n"],"mappings":";;;;;;;;;;AACA,SAAS,mBAAmB,UAAU;CACpC,OAAO,aAAa,QAAQ,aAAa,KAAK,IAAI,KAAK,IAAI,SAAS,SAAS,KAAK;AACpF;AACA,SAAS,YAAY,UAAU;CAC7B,OAAO,aAAa,QAAQ,aAAa,KAAK,IAAI,KAAK,IAAI,SAAS,SAAS,MAAM;AACrF;AACA,SAAS,cAAc,KAAK,aAAa,OAAO;CAC9C,IAAI,EAAE,iBAAiB;CACvB,IAAI,6BAA6B;CACjC,IAAI;CACJ,IAAI,oBAAoB,MAAM,YAAY,WAAW;CACrD,IAAI,CAAC,mBAAmB,OAAO;CAC/B,IAAI,oBAAoB;CACxB,kBAAkB,WAAW,6BAA6B,kBAAkB,aAAa,QAAQ,+BAA+B,KAAK,IAAI,KAAK,IAAI,2BAA2B,OAAO,SAAS,QAAQ;EACnM,IAAI,iBAAiB;EACrB,IAAI,eAAe,QAAQ,YAAY,OAAO;EAC9C,IAAI,eAAe,WAAW,0BAA0B,eAAe,SAAS;GAC9E,MAAM,IAAI,MAAM,2GAA2G;EAC7H;EACA,IAAI,mBAAmB,OAAO;EAC9B,oBAAoB;EACpB,OAAO;CACT,CAAC;CACD,IAAI,eAAe,oBAAoB,8BAA8B,kBAAkB,cAAc,QAAQ,gCAAgC,KAAK,IAAI,8BAA8B,EAAE,KAAK,aAAa,+BAA+B,kBAAkB,cAAc,QAAQ,iCAAiC,KAAK,IAAI,+BAA+B,EAAE;CAC1V,IAAI,cAAc;EAChB,OAAO,eAAe,KAAK,iBAAiB;CAC9C;CACA,IAAI,CAAC,iBAIJ,gBAAgB,IAAI,SAAS,QAAQ,IAAI;EACxC,OAAO,cAAc,KAAK,iBAAiB;CAC7C;CACA,OAAO,eAAe,KAAK,iBAAiB;AAC9C;AACA,SAAS,cAAc,KAAK,aAAa;CACvC,IAAI,sBAAoB,aAAa,CAAC,CAAC,MAAM,KAAK;EAChD,OAAO;EACP,YAAY,YAAY;CAC1B,CAAC;CACD,OAAO,MAAM,qBAAqB,WAAW,KAAK,WAAW;AAC/D;AACA,SAAS,eAAe,KAAK,aAAa;CACxC,OAAO,MAAM,cAAc,KAAK,WAAW;AAC7C"}
|
package/dist/esm/utils/exit.mjs
CHANGED
|
@@ -119,7 +119,7 @@ function tryWarnActiveProcesses() {
|
|
|
119
119
|
debug("failed to get active process information:", error);
|
|
120
120
|
}
|
|
121
121
|
if (!activeProcesses.length) {
|
|
122
|
-
warn("Something prevented
|
|
122
|
+
warn("Something prevented the command from exiting, forcefully exiting now.");
|
|
123
123
|
} else {
|
|
124
124
|
const singularOrPlural = activeProcesses.length === 1 ? "1 process" : `${activeProcesses.length} processes`;
|
|
125
125
|
warn(`Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit.js","names":[],"sources":["esm/utils/exit.js"],"sourcesContent":["import { ChildProcess } from \"node:child_process\";\nimport process from \"node:process\";\nimport colors from \"picocolors\";\nconst debug = ((..._) => {\n});\nconst PRE_EXIT_SIGNALS = [\"SIGHUP\", \"SIGINT\", \"SIGTERM\", \"SIGBREAK\"];\nconst queue = [];\nlet unsubscribe = null;\nfunction installExitHooks(asyncExitHook) {\n if (!queue.length) {\n unsubscribe = attachMasterListener();\n }\n queue.push(asyncExitHook);\n return () => {\n const index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (!queue.length) {\n unsubscribe?.();\n }\n };\n}\nfunction createExitHook(signal) {\n return guardAsync(async () => {\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n for (const [index, hookAsync] of Object.entries(queue)) {\n try {\n await hookAsync(signal);\n } catch (error) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\n }\n }\n debug(`post-exit (code: ${process.exitCode ?? 0})`);\n process.exit();\n });\n}\nfunction attachMasterListener() {\n const hooks = [];\n for (const signal of PRE_EXIT_SIGNALS) {\n const hook = createExitHook(signal);\n hooks.push([signal, hook]);\n process.on(signal, hook);\n }\n return () => {\n for (const [signal, hook] of hooks) {\n process.removeListener(signal, hook);\n }\n };\n}\nfunction ensureProcessExitsAfterDelay(waitUntilExitMs = 1e4, startedAtMs = Date.now()) {\n const expectedResources = [\n process.stdout.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stderr.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stdin.isTTY ? \"TTYWrap\" : \"PipeWrap\"\n ];\n const activeResources = process.getActiveResourcesInfo();\n const unexpectedActiveResources = activeResources.filter((activeResource) => {\n const index = expectedResources.indexOf(activeResource);\n if (index >= 0) {\n expectedResources.splice(index, 1);\n return false;\n }\n return true;\n });\n const canExitProcess = !unexpectedActiveResources.length;\n if (canExitProcess) {\n return debug(\"no active resources detected, process can safely exit\");\n }\n debug(\n `process is trying to exit, but is stuck on unexpected active resources:`,\n unexpectedActiveResources\n );\n const elapsedTime = Date.now() - startedAtMs;\n const killedChildren = killActiveChildProcesses(\n elapsedTime < 200 ? \"SIGTERM\" : \"SIGKILL\"\n );\n if (killedChildren > 0) {\n const recheck = setTimeout(() => {\n clearTimeout(recheck);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 50);\n return;\n }\n if (elapsedTime > waitUntilExitMs) {\n debug(\n \"active handles detected past the exit delay, forcefully exiting:\",\n activeResources\n );\n tryWarnActiveProcesses();\n return process.exit(0);\n }\n const timeoutId = setTimeout(() => {\n clearTimeout(timeoutId);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 100);\n}\nfunction killActiveChildProcesses(signal) {\n try {\n const children = process._getActiveHandles().filter((handle) => handle instanceof ChildProcess);\n for (const child of children) {\n try {\n child.kill(signal);\n } catch (err) {\n debug(\"failed to kill child process:\", err);\n }\n }\n return children.length;\n } catch (err) {\n debug(\"failed to enumerate active child processes:\", err);\n return 0;\n }\n}\nfunction tryWarnActiveProcesses() {\n let activeProcesses = [];\n try {\n const children = process._getActiveHandles().filter((handle) => handle instanceof ChildProcess);\n if (children.length) {\n activeProcesses = children.map((child) => child.spawnargs.join(\" \"));\n }\n } catch (error) {\n debug(\"failed to get active process information:\", error);\n }\n if (!activeProcesses.length) {\n warn(\"Something prevented
|
|
1
|
+
{"version":3,"file":"exit.js","names":[],"sources":["esm/utils/exit.js"],"sourcesContent":["import { ChildProcess } from \"node:child_process\";\nimport process from \"node:process\";\nimport colors from \"picocolors\";\nconst debug = ((..._) => {\n});\nconst PRE_EXIT_SIGNALS = [\"SIGHUP\", \"SIGINT\", \"SIGTERM\", \"SIGBREAK\"];\nconst queue = [];\nlet unsubscribe = null;\nfunction installExitHooks(asyncExitHook) {\n if (!queue.length) {\n unsubscribe = attachMasterListener();\n }\n queue.push(asyncExitHook);\n return () => {\n const index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (!queue.length) {\n unsubscribe?.();\n }\n };\n}\nfunction createExitHook(signal) {\n return guardAsync(async () => {\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n for (const [index, hookAsync] of Object.entries(queue)) {\n try {\n await hookAsync(signal);\n } catch (error) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\n }\n }\n debug(`post-exit (code: ${process.exitCode ?? 0})`);\n process.exit();\n });\n}\nfunction attachMasterListener() {\n const hooks = [];\n for (const signal of PRE_EXIT_SIGNALS) {\n const hook = createExitHook(signal);\n hooks.push([signal, hook]);\n process.on(signal, hook);\n }\n return () => {\n for (const [signal, hook] of hooks) {\n process.removeListener(signal, hook);\n }\n };\n}\nfunction ensureProcessExitsAfterDelay(waitUntilExitMs = 1e4, startedAtMs = Date.now()) {\n const expectedResources = [\n process.stdout.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stderr.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stdin.isTTY ? \"TTYWrap\" : \"PipeWrap\"\n ];\n const activeResources = process.getActiveResourcesInfo();\n const unexpectedActiveResources = activeResources.filter((activeResource) => {\n const index = expectedResources.indexOf(activeResource);\n if (index >= 0) {\n expectedResources.splice(index, 1);\n return false;\n }\n return true;\n });\n const canExitProcess = !unexpectedActiveResources.length;\n if (canExitProcess) {\n return debug(\"no active resources detected, process can safely exit\");\n }\n debug(\n `process is trying to exit, but is stuck on unexpected active resources:`,\n unexpectedActiveResources\n );\n const elapsedTime = Date.now() - startedAtMs;\n const killedChildren = killActiveChildProcesses(\n elapsedTime < 200 ? \"SIGTERM\" : \"SIGKILL\"\n );\n if (killedChildren > 0) {\n const recheck = setTimeout(() => {\n clearTimeout(recheck);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 50);\n return;\n }\n if (elapsedTime > waitUntilExitMs) {\n debug(\n \"active handles detected past the exit delay, forcefully exiting:\",\n activeResources\n );\n tryWarnActiveProcesses();\n return process.exit(0);\n }\n const timeoutId = setTimeout(() => {\n clearTimeout(timeoutId);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 100);\n}\nfunction killActiveChildProcesses(signal) {\n try {\n const children = process._getActiveHandles().filter((handle) => handle instanceof ChildProcess);\n for (const child of children) {\n try {\n child.kill(signal);\n } catch (err) {\n debug(\"failed to kill child process:\", err);\n }\n }\n return children.length;\n } catch (err) {\n debug(\"failed to enumerate active child processes:\", err);\n return 0;\n }\n}\nfunction tryWarnActiveProcesses() {\n let activeProcesses = [];\n try {\n const children = process._getActiveHandles().filter((handle) => handle instanceof ChildProcess);\n if (children.length) {\n activeProcesses = children.map((child) => child.spawnargs.join(\" \"));\n }\n } catch (error) {\n debug(\"failed to get active process information:\", error);\n }\n if (!activeProcesses.length) {\n warn(\"Something prevented the command from exiting, forcefully exiting now.\");\n } else {\n const singularOrPlural = activeProcesses.length === 1 ? \"1 process\" : `${activeProcesses.length} processes`;\n warn(\n `Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`\n );\n warn(\" - \" + activeProcesses.join(\"\\n - \"));\n }\n}\nfunction guardAsync(fn) {\n let invoked = false;\n let returnValue;\n const guard = async (...args) => {\n if (!invoked) {\n invoked = true;\n returnValue = await fn(...args);\n }\n return returnValue;\n };\n return guard;\n}\nfunction warn(...message) {\n console.warn(...message.map((value) => colors.yellow(value)));\n}\nexport {\n ensureProcessExitsAfterDelay,\n guardAsync,\n installExitHooks,\n warn\n};\n//# sourceMappingURL=exit.js.map\n"],"mappings":"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"}
|
|
@@ -199,7 +199,7 @@ function tryWarnActiveProcesses() {
|
|
|
199
199
|
debug("failed to get active process information:", error);
|
|
200
200
|
}
|
|
201
201
|
if (!activeProcesses.length) {
|
|
202
|
-
warn("Something prevented
|
|
202
|
+
warn("Something prevented the command from exiting, forcefully exiting now.");
|
|
203
203
|
} else {
|
|
204
204
|
var singularOrPlural = activeProcesses.length === 1 ? "1 process" : `${activeProcesses.length} processes`;
|
|
205
205
|
warn(`Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit.native.js","names":[],"sources":["esm/utils/exit.native.js"],"sourcesContent":["import { ChildProcess } from \"child_process\";\nimport process from \"process\";\nimport colors from \"picocolors\";\nvar debug = function() {\n for (var _len = arguments.length, _ = new Array(_len), _key = 0; _key < _len; _key++) {\n _[_key] = arguments[_key];\n }\n};\nvar PRE_EXIT_SIGNALS = [\n \"SIGHUP\",\n \"SIGINT\",\n \"SIGTERM\",\n \"SIGBREAK\"\n];\nvar queue = [];\nvar unsubscribe = null;\nfunction installExitHooks(asyncExitHook) {\n if (!queue.length) {\n unsubscribe = attachMasterListener();\n }\n queue.push(asyncExitHook);\n return function() {\n var index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (!queue.length) {\n unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe();\n }\n };\n}\nfunction createExitHook(signal) {\n return guardAsync(async function() {\n var _process_exitCode;\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = Object.entries(queue)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var [index, hookAsync] = _step.value;\n try {\n await hookAsync(signal);\n } catch (error) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\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 debug(`post-exit (code: ${(_process_exitCode = process.exitCode) !== null && _process_exitCode !== void 0 ? _process_exitCode : 0})`);\n process.exit();\n });\n}\nfunction attachMasterListener() {\n var hooks = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = PRE_EXIT_SIGNALS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var signal = _step.value;\n var hook = createExitHook(signal);\n hooks.push([\n signal,\n hook\n ]);\n process.on(signal, hook);\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 return function() {\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = hooks[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var [signal2, hook2] = _step2.value;\n process.removeListener(signal2, hook2);\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 };\n}\nfunction ensureProcessExitsAfterDelay() {\n var waitUntilExitMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1e4, startedAtMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Date.now();\n var expectedResources = [\n process.stdout.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stderr.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stdin.isTTY ? \"TTYWrap\" : \"PipeWrap\"\n ];\n var activeResources = process.getActiveResourcesInfo();\n var unexpectedActiveResources = activeResources.filter(function(activeResource) {\n var index = expectedResources.indexOf(activeResource);\n if (index >= 0) {\n expectedResources.splice(index, 1);\n return false;\n }\n return true;\n });\n var canExitProcess = !unexpectedActiveResources.length;\n if (canExitProcess) {\n return debug(\"no active resources detected, process can safely exit\");\n }\n debug(`process is trying to exit, but is stuck on unexpected active resources:`, unexpectedActiveResources);\n var elapsedTime = Date.now() - startedAtMs;\n var killedChildren = killActiveChildProcesses(elapsedTime < 200 ? \"SIGTERM\" : \"SIGKILL\");\n if (killedChildren > 0) {\n var recheck = setTimeout(function() {\n clearTimeout(recheck);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 50);\n return;\n }\n if (elapsedTime > waitUntilExitMs) {\n debug(\"active handles detected past the exit delay, forcefully exiting:\", activeResources);\n tryWarnActiveProcesses();\n return process.exit(0);\n }\n var timeoutId = setTimeout(function() {\n clearTimeout(timeoutId);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 100);\n}\nfunction killActiveChildProcesses(signal) {\n try {\n var children = process._getActiveHandles().filter(function(handle) {\n return handle instanceof ChildProcess;\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = children[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var child = _step.value;\n try {\n child.kill(signal);\n } catch (err) {\n debug(\"failed to kill child process:\", err);\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 return children.length;\n } catch (err) {\n debug(\"failed to enumerate active child processes:\", err);\n return 0;\n }\n}\nfunction tryWarnActiveProcesses() {\n var activeProcesses = [];\n try {\n var children = process._getActiveHandles().filter(function(handle) {\n return handle instanceof ChildProcess;\n });\n if (children.length) {\n activeProcesses = children.map(function(child) {\n return child.spawnargs.join(\" \");\n });\n }\n } catch (error) {\n debug(\"failed to get active process information:\", error);\n }\n if (!activeProcesses.length) {\n warn(\"Something prevented Expo from exiting, forcefully exiting now.\");\n } else {\n var singularOrPlural = activeProcesses.length === 1 ? \"1 process\" : `${activeProcesses.length} processes`;\n warn(`Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`);\n warn(\" - \" + activeProcesses.join(\"\\n - \"));\n }\n}\nfunction guardAsync(fn) {\n var invoked = false;\n var returnValue;\n var guard = async function() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (!invoked) {\n invoked = true;\n returnValue = await fn(...args);\n }\n return returnValue;\n };\n return guard;\n}\nfunction warn() {\n for (var _len = arguments.length, message = new Array(_len), _key = 0; _key < _len; _key++) {\n message[_key] = arguments[_key];\n }\n console.warn(...message.map(function(value) {\n return colors.yellow(value);\n }));\n}\nexport {\n ensureProcessExitsAfterDelay,\n guardAsync,\n installExitHooks,\n warn\n};\n//# sourceMappingURL=exit.js.map\n"],"mappings":";;;;;AAGA,IAAI,QAAQ,WAAW;CACrB,KAAK,IAAI,OAAO,UAAU,QAAQ,IAAI,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;EACpF,EAAE,QAAQ,UAAU;CACtB;AACF;AACA,IAAI,mBAAmB;CACrB;CACA;CACA;CACA;AACF;AACA,IAAI,QAAQ,CAAC;AACb,IAAI,cAAc;AAClB,SAAS,iBAAiB,eAAe;CACvC,IAAI,CAAC,MAAM,QAAQ;EACjB,cAAc,qBAAqB;CACrC;CACA,MAAM,KAAK,aAAa;CACxB,OAAO,WAAW;EAChB,IAAI,QAAQ,MAAM,QAAQ,aAAa;EACvC,IAAI,SAAS,GAAG;GACd,MAAM,OAAO,OAAO,CAAC;EACvB;EACA,IAAI,CAAC,MAAM,QAAQ;GACjB,gBAAgB,QAAQ,gBAAgB,KAAK,IAAI,KAAK,IAAI,YAAY;EACxE;CACF;AACF;AACA,SAAS,eAAe,QAAQ;CAC9B,OAAO,WAAW,iBAAiB;EACjC,IAAI;EACJ,MAAM,qBAAqB,OAAO,kBAAkB,MAAM,OAAO,EAAE;EACnE,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;EACvF,IAAI;GACF,KAAK,IAAI,YAAY,OAAO,QAAQ,KAAK,CAAC,CAAC,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;IACtK,IAAI,CAAC,OAAO,aAAa,MAAM;IAC/B,IAAI;KACF,MAAM,UAAU,MAAM;IACxB,SAAS,OAAO;KACd,MAAM,kCAAkC,MAAM,IAAI,KAAK;IACzD;GACF;EACF,SAAS,KAAK;GACZ,oBAAoB;GACpB,iBAAiB;EACnB,UAAU;GACR,IAAI;IACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;KAC1D,UAAU,OAAO;IACnB;GACF,UAAU;IACR,IAAI,mBAAmB;KACrB,MAAM;IACR;GACF;EACF;EACA,MAAM,qBAAqB,oBAAoB,QAAQ,cAAc,QAAQ,sBAAsB,KAAK,IAAI,oBAAoB,EAAE,EAAE;EACpI,QAAQ,KAAK;CACf,CAAC;AACH;AACA,SAAS,uBAAuB;CAC9B,IAAI,QAAQ,CAAC;CACb,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,iBAAiB,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACjK,IAAI,SAAS,MAAM;GACnB,IAAI,OAAO,eAAe,MAAM;GAChC,MAAM,KAAK,CACT,QACA,IACF,CAAC;GACD,QAAQ,GAAG,QAAQ,IAAI;EACzB;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,OAAO,WAAW;EAChB,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;EAC1F,IAAI;GACF,KAAK,IAAI,aAAa,MAAM,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;IAC5J,IAAI,CAAC,SAAS,SAAS,OAAO;IAC9B,QAAQ,eAAe,SAAS,KAAK;GACvC;EACF,SAAS,KAAK;GACZ,qBAAqB;GACrB,kBAAkB;EACpB,UAAU;GACR,IAAI;IACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;KAC5D,WAAW,OAAO;IACpB;GACF,UAAU;IACR,IAAI,oBAAoB;KACtB,MAAM;IACR;GACF;EACF;CACF;AACF;AACA,SAAS,+BAA+B;CACtC,IAAI,kBAAkB,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK,KAAK,cAAc,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK,KAAK,IAAI;CACpL,IAAI,oBAAoB;EACtB,QAAQ,OAAO,QAAQ,YAAY;EACnC,QAAQ,OAAO,QAAQ,YAAY;EACnC,QAAQ,MAAM,QAAQ,YAAY;CACpC;CACA,IAAI,kBAAkB,QAAQ,uBAAuB;CACrD,IAAI,4BAA4B,gBAAgB,OAAO,SAAS,gBAAgB;EAC9E,IAAI,QAAQ,kBAAkB,QAAQ,cAAc;EACpD,IAAI,SAAS,GAAG;GACd,kBAAkB,OAAO,OAAO,CAAC;GACjC,OAAO;EACT;EACA,OAAO;CACT,CAAC;CACD,IAAI,iBAAiB,CAAC,0BAA0B;CAChD,IAAI,gBAAgB;EAClB,OAAO,MAAM,uDAAuD;CACtE;CACA,MAAM,2EAA2E,yBAAyB;CAC1G,IAAI,cAAc,KAAK,IAAI,IAAI;CAC/B,IAAI,iBAAiB,yBAAyB,cAAc,MAAM,YAAY,SAAS;CACvF,IAAI,iBAAiB,GAAG;EACtB,IAAI,UAAU,WAAW,WAAW;GAClC,aAAa,OAAO;GACpB,6BAA6B,iBAAiB,WAAW;EAC3D,GAAG,EAAE;EACL;CACF;CACA,IAAI,cAAc,iBAAiB;EACjC,MAAM,oEAAoE,eAAe;EACzF,uBAAuB;EACvB,OAAO,QAAQ,KAAK,CAAC;CACvB;CACA,IAAI,YAAY,WAAW,WAAW;EACpC,aAAa,SAAS;EACtB,6BAA6B,iBAAiB,WAAW;CAC3D,GAAG,GAAG;AACR;AACA,SAAS,yBAAyB,QAAQ;CACxC,IAAI;EACF,IAAI,WAAW,QAAQ,kBAAkB,CAAC,CAAC,OAAO,SAAS,QAAQ;GACjE,OAAO,kBAAkB;EAC3B,CAAC;EACD,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;EACvF,IAAI;GACF,KAAK,IAAI,YAAY,SAAS,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;IACzJ,IAAI,QAAQ,MAAM;IAClB,IAAI;KACF,MAAM,KAAK,MAAM;IACnB,SAAS,KAAK;KACZ,MAAM,iCAAiC,GAAG;IAC5C;GACF;EACF,SAAS,KAAK;GACZ,oBAAoB;GACpB,iBAAiB;EACnB,UAAU;GACR,IAAI;IACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;KAC1D,UAAU,OAAO;IACnB;GACF,UAAU;IACR,IAAI,mBAAmB;KACrB,MAAM;IACR;GACF;EACF;EACA,OAAO,SAAS;CAClB,SAAS,KAAK;EACZ,MAAM,+CAA+C,GAAG;EACxD,OAAO;CACT;AACF;AACA,SAAS,yBAAyB;CAChC,IAAI,kBAAkB,CAAC;CACvB,IAAI;EACF,IAAI,WAAW,QAAQ,kBAAkB,CAAC,CAAC,OAAO,SAAS,QAAQ;GACjE,OAAO,kBAAkB;EAC3B,CAAC;EACD,IAAI,SAAS,QAAQ;GACnB,kBAAkB,SAAS,IAAI,SAAS,OAAO;IAC7C,OAAO,MAAM,UAAU,KAAK,GAAG;GACjC,CAAC;EACH;CACF,SAAS,OAAO;EACd,MAAM,6CAA6C,KAAK;CAC1D;CACA,IAAI,CAAC,gBAAgB,QAAQ;EAC3B,KAAK,gEAAgE;CACvE,OAAO;EACL,IAAI,mBAAmB,gBAAgB,WAAW,IAAI,cAAc,GAAG,gBAAgB,OAAO;EAC9F,KAAK,YAAY,iBAAiB,0DAA0D;EAC5F,KAAK,SAAS,gBAAgB,KAAK,QAAQ,CAAC;CAC9C;AACF;AACA,SAAS,WAAW,IAAI;CACtB,IAAI,UAAU;CACd,IAAI;CACJ,IAAI,QAAQ,iBAAiB;EAC3B,KAAK,IAAI,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;GACvF,KAAK,QAAQ,UAAU;EACzB;EACA,IAAI,CAAC,SAAS;GACZ,UAAU;GACV,cAAc,MAAM,GAAG,GAAG,IAAI;EAChC;EACA,OAAO;CACT;CACA,OAAO;AACT;AACA,SAAS,OAAO;CACd,KAAK,IAAI,OAAO,UAAU,QAAQ,UAAU,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;EAC1F,QAAQ,QAAQ,UAAU;CAC5B;CACA,QAAQ,KAAK,GAAG,QAAQ,IAAI,SAAS,OAAO;EAC1C,OAAO,OAAO,OAAO,KAAK;CAC5B,CAAC,CAAC;AACJ"}
|
|
1
|
+
{"version":3,"file":"exit.native.js","names":[],"sources":["esm/utils/exit.native.js"],"sourcesContent":["import { ChildProcess } from \"child_process\";\nimport process from \"process\";\nimport colors from \"picocolors\";\nvar debug = function() {\n for (var _len = arguments.length, _ = new Array(_len), _key = 0; _key < _len; _key++) {\n _[_key] = arguments[_key];\n }\n};\nvar PRE_EXIT_SIGNALS = [\n \"SIGHUP\",\n \"SIGINT\",\n \"SIGTERM\",\n \"SIGBREAK\"\n];\nvar queue = [];\nvar unsubscribe = null;\nfunction installExitHooks(asyncExitHook) {\n if (!queue.length) {\n unsubscribe = attachMasterListener();\n }\n queue.push(asyncExitHook);\n return function() {\n var index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (!queue.length) {\n unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe();\n }\n };\n}\nfunction createExitHook(signal) {\n return guardAsync(async function() {\n var _process_exitCode;\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = Object.entries(queue)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var [index, hookAsync] = _step.value;\n try {\n await hookAsync(signal);\n } catch (error) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\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 debug(`post-exit (code: ${(_process_exitCode = process.exitCode) !== null && _process_exitCode !== void 0 ? _process_exitCode : 0})`);\n process.exit();\n });\n}\nfunction attachMasterListener() {\n var hooks = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = PRE_EXIT_SIGNALS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var signal = _step.value;\n var hook = createExitHook(signal);\n hooks.push([\n signal,\n hook\n ]);\n process.on(signal, hook);\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 return function() {\n var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;\n try {\n for (var _iterator2 = hooks[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var [signal2, hook2] = _step2.value;\n process.removeListener(signal2, hook2);\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 };\n}\nfunction ensureProcessExitsAfterDelay() {\n var waitUntilExitMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1e4, startedAtMs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Date.now();\n var expectedResources = [\n process.stdout.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stderr.isTTY ? \"TTYWrap\" : \"PipeWrap\",\n process.stdin.isTTY ? \"TTYWrap\" : \"PipeWrap\"\n ];\n var activeResources = process.getActiveResourcesInfo();\n var unexpectedActiveResources = activeResources.filter(function(activeResource) {\n var index = expectedResources.indexOf(activeResource);\n if (index >= 0) {\n expectedResources.splice(index, 1);\n return false;\n }\n return true;\n });\n var canExitProcess = !unexpectedActiveResources.length;\n if (canExitProcess) {\n return debug(\"no active resources detected, process can safely exit\");\n }\n debug(`process is trying to exit, but is stuck on unexpected active resources:`, unexpectedActiveResources);\n var elapsedTime = Date.now() - startedAtMs;\n var killedChildren = killActiveChildProcesses(elapsedTime < 200 ? \"SIGTERM\" : \"SIGKILL\");\n if (killedChildren > 0) {\n var recheck = setTimeout(function() {\n clearTimeout(recheck);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 50);\n return;\n }\n if (elapsedTime > waitUntilExitMs) {\n debug(\"active handles detected past the exit delay, forcefully exiting:\", activeResources);\n tryWarnActiveProcesses();\n return process.exit(0);\n }\n var timeoutId = setTimeout(function() {\n clearTimeout(timeoutId);\n ensureProcessExitsAfterDelay(waitUntilExitMs, startedAtMs);\n }, 100);\n}\nfunction killActiveChildProcesses(signal) {\n try {\n var children = process._getActiveHandles().filter(function(handle) {\n return handle instanceof ChildProcess;\n });\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = children[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var child = _step.value;\n try {\n child.kill(signal);\n } catch (err) {\n debug(\"failed to kill child process:\", err);\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 return children.length;\n } catch (err) {\n debug(\"failed to enumerate active child processes:\", err);\n return 0;\n }\n}\nfunction tryWarnActiveProcesses() {\n var activeProcesses = [];\n try {\n var children = process._getActiveHandles().filter(function(handle) {\n return handle instanceof ChildProcess;\n });\n if (children.length) {\n activeProcesses = children.map(function(child) {\n return child.spawnargs.join(\" \");\n });\n }\n } catch (error) {\n debug(\"failed to get active process information:\", error);\n }\n if (!activeProcesses.length) {\n warn(\"Something prevented the command from exiting, forcefully exiting now.\");\n } else {\n var singularOrPlural = activeProcesses.length === 1 ? \"1 process\" : `${activeProcesses.length} processes`;\n warn(`Detected ${singularOrPlural} preventing process from exiting, forcefully exiting now.`);\n warn(\" - \" + activeProcesses.join(\"\\n - \"));\n }\n}\nfunction guardAsync(fn) {\n var invoked = false;\n var returnValue;\n var guard = async function() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (!invoked) {\n invoked = true;\n returnValue = await fn(...args);\n }\n return returnValue;\n };\n return guard;\n}\nfunction warn() {\n for (var _len = arguments.length, message = new Array(_len), _key = 0; _key < _len; _key++) {\n message[_key] = arguments[_key];\n }\n console.warn(...message.map(function(value) {\n return colors.yellow(value);\n }));\n}\nexport {\n ensureProcessExitsAfterDelay,\n guardAsync,\n installExitHooks,\n warn\n};\n//# sourceMappingURL=exit.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vxrn/vite-plugin-metro",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.56.1",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cjs",
|
|
@@ -61,8 +61,6 @@
|
|
|
61
61
|
"typecheck": "tsc --noEmit"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
|
-
"@expo/metro-config": "58.0.0-canary-20260909-ea7a89a",
|
|
65
|
-
"expo": "58.0.0-canary-20260909-ea7a89a",
|
|
66
64
|
"metro": "^0.87.0",
|
|
67
65
|
"metro-config": "^0.87.0",
|
|
68
66
|
"react-native": "0.87.1",
|
|
@@ -74,11 +72,13 @@
|
|
|
74
72
|
"@jridgewell/remapping": "^2.3.0",
|
|
75
73
|
"@jridgewell/trace-mapping": "^0.3.25",
|
|
76
74
|
"@oxc-project/runtime": "^0.112.0",
|
|
77
|
-
"@
|
|
78
|
-
"@
|
|
79
|
-
"@vxrn/
|
|
80
|
-
"
|
|
75
|
+
"@react-native/babel-preset": "^0.87.1",
|
|
76
|
+
"@react-native/metro-config": "^0.87.1",
|
|
77
|
+
"@vxrn/compiler": "2.0.0-beta.56.1",
|
|
78
|
+
"@vxrn/debug": "2.0.0-beta.56.1",
|
|
79
|
+
"@vxrn/utils": "2.0.0-beta.56.1",
|
|
81
80
|
"esbuild": "^0.25.12",
|
|
81
|
+
"flow-parser": "^0.331.0",
|
|
82
82
|
"launch-editor": "^2.10.0",
|
|
83
83
|
"magic-string": "^0.30.21",
|
|
84
84
|
"micromatch": "^4.0.8",
|
|
@@ -88,13 +88,11 @@
|
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
90
|
"@biomejs/biome": "2.3.3",
|
|
91
|
-
"@expo/metro-config": "58.0.0-canary-20260909-ea7a89a",
|
|
92
91
|
"@react-native/dev-middleware": "^0.87.1",
|
|
93
92
|
"@tamagui/build": "3.0.0-beta.1309.1",
|
|
94
93
|
"@types/babel__helper-plugin-utils": "^7",
|
|
95
94
|
"@types/node": "^24.10.0",
|
|
96
95
|
"depcheck": "^1.4.7",
|
|
97
|
-
"expo": "58.0.0-canary-20260909-ea7a89a",
|
|
98
96
|
"metro": "^0.87.0",
|
|
99
97
|
"metro-config": "^0.87.0",
|
|
100
98
|
"react-native": "0.87.1",
|
|
@@ -9,7 +9,7 @@ type PluginOptions = {
|
|
|
9
9
|
/**
|
|
10
10
|
* Babel plugin to replace `import.meta.env.*` and `process.env.*` with env values.
|
|
11
11
|
*
|
|
12
|
-
* Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, ONE_PLATFORM, TAMAGUI_ENVIRONMENT)
|
|
12
|
+
* Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, ONE_PLATFORM, EXPO_OS, TAMAGUI_ENVIRONMENT)
|
|
13
13
|
* are automatically injected based on the babel caller's platform.
|
|
14
14
|
*
|
|
15
15
|
* This plugin is referenced by name since Metro runs transformers in separate workers:
|
|
@@ -13,8 +13,18 @@ describe('one platform env contract', () => {
|
|
|
13
13
|
expect(getPlatformEnv('ssr').ONE_PLATFORM).toBe('web')
|
|
14
14
|
})
|
|
15
15
|
|
|
16
|
-
it('
|
|
17
|
-
for (const environment of ['
|
|
16
|
+
it('defines the Expo platform alias only on native', () => {
|
|
17
|
+
for (const environment of ['ios', 'android'] as const) {
|
|
18
|
+
expect(getPlatformEnv(environment).EXPO_OS).toBe(
|
|
19
|
+
getPlatformEnv(environment).ONE_PLATFORM
|
|
20
|
+
)
|
|
21
|
+
const define = getPlatformEnvDefine(environment)
|
|
22
|
+
expect(define['process.env.EXPO_OS']).toBe(define['process.env.ONE_PLATFORM'])
|
|
23
|
+
expect(define['import.meta.env.EXPO_OS']).toBe(
|
|
24
|
+
define['import.meta.env.ONE_PLATFORM']
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
for (const environment of ['client', 'ssr'] as const) {
|
|
18
28
|
expect(getPlatformEnv(environment)).not.toHaveProperty('EXPO_OS')
|
|
19
29
|
const define = getPlatformEnvDefine(environment)
|
|
20
30
|
expect(define).not.toHaveProperty('process.env.EXPO_OS')
|
package/src/env/platformEnv.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type PlatformEnv = {
|
|
|
5
5
|
VITE_ENVIRONMENT: ViteEnvironment
|
|
6
6
|
VITE_NATIVE: '' | '1'
|
|
7
7
|
ONE_PLATFORM: 'web' | 'ios' | 'android'
|
|
8
|
+
EXPO_OS?: 'ios' | 'android'
|
|
8
9
|
TAMAGUI_TARGET: 'web' | 'native'
|
|
9
10
|
TAMAGUI_ENVIRONMENT: ViteEnvironment
|
|
10
11
|
}
|
|
@@ -28,6 +29,7 @@ const platformEnvMap: Record<ViteEnvironment, PlatformEnv> = {
|
|
|
28
29
|
VITE_ENVIRONMENT: 'ios',
|
|
29
30
|
VITE_NATIVE: '1',
|
|
30
31
|
ONE_PLATFORM: 'ios',
|
|
32
|
+
EXPO_OS: 'ios',
|
|
31
33
|
TAMAGUI_TARGET: 'native',
|
|
32
34
|
TAMAGUI_ENVIRONMENT: 'ios',
|
|
33
35
|
},
|
|
@@ -35,6 +37,7 @@ const platformEnvMap: Record<ViteEnvironment, PlatformEnv> = {
|
|
|
35
37
|
VITE_ENVIRONMENT: 'android',
|
|
36
38
|
VITE_NATIVE: '1',
|
|
37
39
|
ONE_PLATFORM: 'android',
|
|
40
|
+
EXPO_OS: 'android',
|
|
38
41
|
TAMAGUI_TARGET: 'native',
|
|
39
42
|
TAMAGUI_ENVIRONMENT: 'android',
|
|
40
43
|
},
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
export { metroPlugin } from './plugins/metroPlugin'
|
|
2
2
|
export type { MetroPluginOptions } from './plugins/metroPlugin'
|
|
3
|
-
export { expoManifestRequestHandlerPlugin } from './plugins/expoManifestRequestHandlerPlugin'
|
|
4
|
-
export type { ExpoManifestRequestHandlerPluginPluginOptions } from './plugins/expoManifestRequestHandlerPlugin'
|
|
5
3
|
export {
|
|
6
4
|
getPlatformEnv,
|
|
7
5
|
getPlatformEnvDefine,
|
|
@@ -18,41 +18,35 @@ function pluginEnv(config: any): Record<string, any> {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
describe('metro babel env contract', () => {
|
|
21
|
-
it('picks up ONE_PUBLIC_ keys by default
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
viteConfig({ env: { ONE_PUBLIC_API: 'https://api.test' } })
|
|
26
|
-
)
|
|
27
|
-
expect(env.ONE_PUBLIC_API).toBe('https://api.test')
|
|
28
|
-
expect(env).not.toHaveProperty('EXPO_OS')
|
|
29
|
-
} finally {
|
|
30
|
-
delete process.env.ONE_PUBLIC_API
|
|
31
|
-
}
|
|
21
|
+
it('picks up ONE_PUBLIC_ keys by default with Expo aliases', () => {
|
|
22
|
+
const env = pluginEnv(viteConfig({ env: { ONE_PUBLIC_API: 'https://api.test' } }))
|
|
23
|
+
expect(env.ONE_PUBLIC_API).toBe('https://api.test')
|
|
24
|
+
expect(env.EXPO_PUBLIC_API).toBe('https://api.test')
|
|
32
25
|
})
|
|
33
26
|
|
|
34
27
|
it('harvests ONE_PLATFORM from defines for parity with rolldown', () => {
|
|
35
|
-
const env = pluginEnv(
|
|
36
|
-
viteConfig({ define: { 'process.env.ONE_PLATFORM': '"ios"' } })
|
|
37
|
-
)
|
|
28
|
+
const env = pluginEnv(viteConfig({ define: { 'process.env.ONE_PLATFORM': '"ios"' } }))
|
|
38
29
|
expect(env.ONE_PLATFORM).toBe('ios')
|
|
39
30
|
})
|
|
40
31
|
|
|
41
|
-
it('
|
|
42
|
-
expect(()
|
|
43
|
-
|
|
44
|
-
)
|
|
32
|
+
it('accepts an Expo env prefix', () => {
|
|
33
|
+
expect(pluginEnv(viteConfig({ envPrefix: ['VITE_', 'EXPO_PUBLIC_'] }))).toMatchObject(
|
|
34
|
+
{ MODE: 'development' }
|
|
35
|
+
)
|
|
45
36
|
})
|
|
46
37
|
|
|
47
|
-
it('
|
|
48
|
-
expect(()
|
|
38
|
+
it('accepts Expo keys without creating One names', () => {
|
|
39
|
+
expect(pluginEnv(viteConfig({ env: { EXPO_PUBLIC_API: 'x' } }))).toMatchObject({
|
|
40
|
+
EXPO_PUBLIC_API: 'x',
|
|
41
|
+
})
|
|
42
|
+
expect(
|
|
49
43
|
pluginEnv(viteConfig({ env: { EXPO_PUBLIC_API: 'x' } }))
|
|
50
|
-
).
|
|
44
|
+
).not.toHaveProperty('ONE_PUBLIC_API')
|
|
51
45
|
})
|
|
52
46
|
|
|
53
|
-
it('
|
|
54
|
-
expect(
|
|
55
|
-
pluginEnv(viteConfig({ define: { 'process.env.EXPO_OS': '"ios"' } }))
|
|
56
|
-
).
|
|
47
|
+
it('accepts Expo platform defines for the platform plugin to override', () => {
|
|
48
|
+
expect(
|
|
49
|
+
pluginEnv(viteConfig({ define: { 'process.env.EXPO_OS': '"ios"' } })).EXPO_OS
|
|
50
|
+
).toBe('ios')
|
|
57
51
|
})
|
|
58
52
|
})
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { ResolvedConfig } from 'vite'
|
|
2
2
|
import type { TransformOptions } from '@babel/core'
|
|
3
|
+
import { withExpoPublicEnvAliases } from '@vxrn/utils/publicEnv'
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Creates babel config for Metro transforms from Vite config.
|
|
6
7
|
*
|
|
7
|
-
* Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, ONE_PLATFORM, TAMAGUI_ENVIRONMENT)
|
|
8
|
+
* Platform-specific env vars (VITE_ENVIRONMENT, VITE_NATIVE, ONE_PLATFORM, EXPO_OS, TAMAGUI_ENVIRONMENT)
|
|
8
9
|
* are handled by the import-meta-env-plugin based on caller.platform and always take precedence.
|
|
9
10
|
*/
|
|
10
11
|
export function getMetroBabelConfigFromViteConfig(
|
|
@@ -18,48 +19,28 @@ export function getMetroBabelConfigFromViteConfig(
|
|
|
18
19
|
SSR: false,
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
const envPrefix = config.envPrefix || ['VITE_', 'ONE_PUBLIC_']
|
|
22
|
+
const envPrefix = config.envPrefix || ['VITE_', 'ONE_PUBLIC_', 'EXPO_PUBLIC_']
|
|
22
23
|
const prefixes = Array.isArray(envPrefix) ? envPrefix : [envPrefix]
|
|
23
24
|
|
|
24
|
-
// expo-prefixed public vars fail with a migration error instead of being
|
|
25
|
-
// copied, ignored, or aliased into the bundle.
|
|
26
|
-
for (const prefix of prefixes) {
|
|
27
|
-
if (prefix.startsWith('EXPO_')) {
|
|
28
|
-
throw new Error(
|
|
29
|
-
`[vxrn/metro] env prefix "${prefix}" is removed. rename it to ONE_PUBLIC_*`
|
|
30
|
-
)
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
25
|
for (const key of Object.keys(config.env)) {
|
|
35
|
-
if (key.startsWith('EXPO_PUBLIC_')) {
|
|
36
|
-
throw new Error(
|
|
37
|
-
`[vxrn/metro] ${key} uses the removed expo prefix. rename it to ONE_PUBLIC_*`
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
26
|
if (prefixes.some((p) => key.startsWith(p))) {
|
|
41
|
-
importMetaEnv[key] = process.env[key]
|
|
27
|
+
importMetaEnv[key] = process.env[key] ?? config.env[key]
|
|
42
28
|
}
|
|
43
29
|
}
|
|
44
30
|
|
|
45
31
|
// also harvest keys from config.define (populated by env-defining plugins like one's).
|
|
46
32
|
// we union the user's envPrefix with framework-level defaults so we still pick up
|
|
47
|
-
// VITE_/ONE_PUBLIC_/ONE_ even when another plugin replaces envPrefix wholesale
|
|
33
|
+
// VITE_/ONE_PUBLIC_/EXPO_PUBLIC_/ONE_ even when another plugin replaces envPrefix wholesale
|
|
48
34
|
// (e.g. some plugins set it to a single project-specific prefix).
|
|
49
35
|
const definePrefixes = Array.from(
|
|
50
|
-
new Set([...prefixes, 'VITE_', 'ONE_PUBLIC_', 'ONE_'])
|
|
36
|
+
new Set([...prefixes, 'VITE_', 'ONE_PUBLIC_', 'EXPO_PUBLIC_', 'ONE_'])
|
|
51
37
|
)
|
|
52
38
|
for (const defineKey of Object.keys(config.define || {})) {
|
|
53
39
|
const m = defineKey.match(/^process\.env\.([A-Z][A-Z0-9_]*)$/)
|
|
54
40
|
if (!m) continue
|
|
55
41
|
const key = m[1]
|
|
56
|
-
if (key.startsWith('EXPO_PUBLIC_') || key === 'EXPO_OS') {
|
|
57
|
-
throw new Error(
|
|
58
|
-
`[vxrn/metro] ${key} uses the removed expo contract. rename it to ONE_PUBLIC_* or ONE_PLATFORM`
|
|
59
|
-
)
|
|
60
|
-
}
|
|
61
42
|
if (key in importMetaEnv) continue
|
|
62
|
-
if (!definePrefixes.some((p) => key.startsWith(p))) continue
|
|
43
|
+
if (key !== 'EXPO_OS' && !definePrefixes.some((p) => key.startsWith(p))) continue
|
|
63
44
|
const raw = config.define![defineKey]
|
|
64
45
|
try {
|
|
65
46
|
importMetaEnv[key] = typeof raw === 'string' ? JSON.parse(raw) : raw
|
|
@@ -72,7 +53,7 @@ export function getMetroBabelConfigFromViteConfig(
|
|
|
72
53
|
plugins: [
|
|
73
54
|
[
|
|
74
55
|
'@vxrn/vite-plugin-metro/babel-plugins/import-meta-env-plugin',
|
|
75
|
-
{ env: importMetaEnv },
|
|
56
|
+
{ env: withExpoPublicEnvAliases(importMetaEnv) },
|
|
76
57
|
],
|
|
77
58
|
],
|
|
78
59
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import fs from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { afterAll, describe, expect, it } from 'vitest'
|
|
4
|
+
import { buildMetroConfigInputFromViteConfig } from './getMetroConfigFromViteConfig'
|
|
5
|
+
|
|
6
|
+
const tmpDirs: string[] = []
|
|
7
|
+
|
|
8
|
+
afterAll(() => {
|
|
9
|
+
for (const tmpDir of tmpDirs) {
|
|
10
|
+
fs.rmSync(tmpDir, { recursive: true, force: true })
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
describe('bare main module entry', () => {
|
|
15
|
+
it('survives a resolver-replacing defaultConfigOverrides', async () => {
|
|
16
|
+
const workspaceRoot = path.resolve(__dirname, '../../../../')
|
|
17
|
+
const fixtureRoot = fs.mkdtempSync(path.join(workspaceRoot, '.tmp-metro-entry-'))
|
|
18
|
+
tmpDirs.push(fixtureRoot)
|
|
19
|
+
fs.writeFileSync(
|
|
20
|
+
path.join(fixtureRoot, 'package.json'),
|
|
21
|
+
JSON.stringify({ name: 'tmp-metro-entry', private: true })
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
const seen: string[] = []
|
|
25
|
+
const { defaultConfig } = await buildMetroConfigInputFromViteConfig(
|
|
26
|
+
{ root: fixtureRoot } as any,
|
|
27
|
+
{
|
|
28
|
+
mainModuleName: 'one/metro-entry',
|
|
29
|
+
watchman: false,
|
|
30
|
+
defaultConfigOverrides: {
|
|
31
|
+
resolver: {
|
|
32
|
+
sourceExts: ['js'],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
} as any
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
expect((defaultConfig as any).watchFolders).toContain(workspaceRoot)
|
|
39
|
+
expect((defaultConfig as any).resolver.nodeModulesPaths).toContain(
|
|
40
|
+
path.join(workspaceRoot, 'node_modules')
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
const context = {
|
|
44
|
+
originModulePath: `${fixtureRoot}/.`,
|
|
45
|
+
resolveRequest: (_ctx: any, name: string) => {
|
|
46
|
+
seen.push(name)
|
|
47
|
+
return { type: 'sourceFile', filePath: name }
|
|
48
|
+
},
|
|
49
|
+
}
|
|
50
|
+
await (defaultConfig as any).resolver.resolveRequest(
|
|
51
|
+
context,
|
|
52
|
+
'./one/metro-entry',
|
|
53
|
+
'ios'
|
|
54
|
+
)
|
|
55
|
+
expect(seen).toEqual(['one/metro-entry'])
|
|
56
|
+
|
|
57
|
+
await (defaultConfig as any).resolver.resolveRequest(context, 'react-native', 'ios')
|
|
58
|
+
expect(seen).toEqual(['one/metro-entry', 'react-native'])
|
|
59
|
+
})
|
|
60
|
+
})
|