@vxrn/vite-plugin-metro 2.0.0-beta.33.1 → 2.0.0-beta.46.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/babel-plugins/import-meta-env-plugin.cjs +84 -102
- package/dist/cjs/babel-plugins/import-meta-env-plugin.native.cjs +108 -0
- package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js +90 -107
- package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
- package/dist/cjs/env/platformEnv.cjs +55 -57
- package/dist/cjs/env/platformEnv.native.cjs +93 -0
- package/dist/cjs/env/platformEnv.native.js +72 -75
- package/dist/cjs/env/platformEnv.native.js.map +1 -1
- package/dist/cjs/index.cjs +22 -24
- package/dist/cjs/index.native.cjs +41 -0
- package/dist/cjs/index.native.js +22 -23
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.cjs +48 -51
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.cjs +101 -0
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js +88 -94
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +249 -256
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +295 -0
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +260 -266
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.cjs +38 -44
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.cjs +53 -0
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +39 -44
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +1 -1
- package/dist/cjs/metro-config/types.cjs +9 -11
- package/dist/cjs/metro-config/types.native.cjs +18 -0
- package/dist/cjs/metro-config/types.native.js +9 -10
- package/dist/cjs/metro-config/types.native.js.map +1 -1
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +44 -56
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.cjs +62 -0
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +45 -63
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +1 -1
- package/dist/cjs/plugins/metroPlugin.cjs +210 -248
- package/dist/cjs/plugins/metroPlugin.native.cjs +242 -0
- package/dist/cjs/plugins/metroPlugin.native.js +216 -253
- package/dist/cjs/plugins/metroPlugin.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.cjs +56 -65
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.cjs +121 -0
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.js +94 -106
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/assetPathUtils.cjs +51 -55
- package/dist/cjs/rn-commands/bundle/assetPathUtils.native.cjs +72 -0
- package/dist/cjs/rn-commands/bundle/assetPathUtils.native.js +51 -54
- package/dist/cjs/rn-commands/bundle/assetPathUtils.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/buildBundle.cjs +37 -46
- package/dist/cjs/rn-commands/bundle/buildBundle.native.cjs +57 -0
- package/dist/cjs/rn-commands/bundle/buildBundle.native.js +39 -47
- package/dist/cjs/rn-commands/bundle/buildBundle.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.cjs +57 -68
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.cjs +81 -0
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.js +59 -70
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.cjs +37 -39
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.cjs +70 -0
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.js +56 -59
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.cjs +20 -29
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.cjs +39 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.js +20 -28
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.cjs +20 -33
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.cjs +38 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.js +20 -32
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.cjs +23 -32
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.cjs +38 -0
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.js +23 -31
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/index.cjs +15 -17
- package/dist/cjs/rn-commands/bundle/index.native.cjs +30 -0
- package/dist/cjs/rn-commands/bundle/index.native.js +15 -16
- package/dist/cjs/rn-commands/bundle/index.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/saveAssets.cjs +85 -96
- package/dist/cjs/rn-commands/bundle/saveAssets.native.cjs +129 -0
- package/dist/cjs/rn-commands/bundle/saveAssets.native.js +102 -114
- package/dist/cjs/rn-commands/bundle/saveAssets.native.js.map +1 -1
- package/dist/cjs/rn-commands/bundle/types.cjs +9 -11
- package/dist/cjs/rn-commands/bundle/types.native.cjs +18 -0
- package/dist/cjs/rn-commands/bundle/types.native.js +9 -10
- package/dist/cjs/rn-commands/bundle/types.native.js.map +1 -1
- package/dist/cjs/rn-commands/index.cjs +17 -26
- package/dist/cjs/rn-commands/index.native.cjs +32 -0
- package/dist/cjs/rn-commands/index.native.js +17 -25
- package/dist/cjs/rn-commands/index.native.js.map +1 -1
- package/dist/cjs/transformer/babel-core.cjs +16 -18
- package/dist/cjs/transformer/babel-core.native.cjs +30 -0
- package/dist/cjs/transformer/babel-core.native.js +16 -17
- package/dist/cjs/transformer/babel-core.native.js.map +1 -1
- package/dist/cjs/transformer/babel-transformer.cjs +101 -152
- package/dist/cjs/transformer/babel-transformer.native.cjs +131 -0
- package/dist/cjs/transformer/babel-transformer.native.js +106 -159
- package/dist/cjs/transformer/babel-transformer.native.js.map +1 -1
- package/dist/cjs/transformer/loadBabelConfig.cjs +44 -49
- package/dist/cjs/transformer/loadBabelConfig.native.cjs +64 -0
- package/dist/cjs/transformer/loadBabelConfig.native.js +48 -52
- package/dist/cjs/transformer/loadBabelConfig.native.js.map +1 -1
- package/dist/cjs/transformer/metroNativeWorker.cjs +1442 -1480
- package/dist/cjs/transformer/metroNativeWorker.native.cjs +2536 -0
- package/dist/cjs/transformer/metroNativeWorker.native.js +2416 -2552
- package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
- package/dist/cjs/transformer/transformSync.cjs +47 -63
- package/dist/cjs/transformer/transformSync.native.cjs +74 -0
- package/dist/cjs/transformer/transformSync.native.js +49 -64
- package/dist/cjs/transformer/transformSync.native.js.map +1 -1
- package/dist/cjs/transformer/types.cjs +9 -11
- package/dist/cjs/transformer/types.native.cjs +18 -0
- package/dist/cjs/transformer/types.native.js +9 -10
- package/dist/cjs/transformer/types.native.js.map +1 -1
- package/dist/cjs/utils/exit.cjs +141 -139
- package/dist/cjs/utils/exit.native.cjs +266 -0
- package/dist/cjs/utils/exit.native.js +228 -241
- package/dist/cjs/utils/exit.native.js.map +1 -1
- package/dist/cjs/utils/getTerminalReporter.cjs +35 -47
- package/dist/cjs/utils/getTerminalReporter.native.cjs +57 -0
- package/dist/cjs/utils/getTerminalReporter.native.js +38 -49
- package/dist/cjs/utils/getTerminalReporter.native.js.map +1 -1
- package/dist/cjs/utils/metroCacheManager.cjs +84 -99
- package/dist/cjs/utils/metroCacheManager.native.cjs +130 -0
- package/dist/cjs/utils/metroCacheManager.native.js +102 -118
- package/dist/cjs/utils/metroCacheManager.native.js.map +1 -1
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +24 -28
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.cjs +37 -0
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +24 -27
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +1 -1
- package/dist/cjs/utils/projectImport.cjs +40 -51
- package/dist/cjs/utils/projectImport.native.cjs +64 -0
- package/dist/cjs/utils/projectImport.native.js +41 -58
- package/dist/cjs/utils/projectImport.native.js.map +1 -1
- package/dist/esm/babel-plugins/import-meta-env-plugin.mjs +72 -86
- package/dist/esm/babel-plugins/import-meta-env-plugin.mjs.map +1 -1
- package/dist/esm/babel-plugins/import-meta-env-plugin.native.js +78 -92
- package/dist/esm/babel-plugins/import-meta-env-plugin.native.js.map +1 -1
- package/dist/esm/env/platformEnv.mjs +40 -39
- package/dist/esm/env/platformEnv.mjs.map +1 -1
- package/dist/esm/env/platformEnv.native.js +57 -58
- package/dist/esm/env/platformEnv.native.js.map +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.mjs +3 -3
- package/dist/esm/index.native.js +3 -3
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs +35 -33
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs.map +1 -1
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js +75 -77
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +233 -231
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +244 -242
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -1
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs +26 -26
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs.map +1 -1
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +27 -27
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +1 -1
- package/dist/esm/metro-config/types.mjs +0 -2
- package/dist/esm/metro-config/types.native.js +0 -2
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs +32 -38
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +1 -1
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +33 -46
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js.map +1 -1
- package/dist/esm/plugins/metroPlugin.mjs +195 -222
- package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
- package/dist/esm/plugins/metroPlugin.native.js +201 -228
- package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.mjs +38 -38
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.native.js +76 -80
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/assetPathUtils.mjs +38 -37
- package/dist/esm/rn-commands/bundle/assetPathUtils.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/assetPathUtils.native.js +38 -37
- package/dist/esm/rn-commands/bundle/assetPathUtils.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/buildBundle.mjs +25 -28
- package/dist/esm/rn-commands/bundle/buildBundle.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/buildBundle.native.js +27 -30
- package/dist/esm/rn-commands/bundle/buildBundle.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.mjs +43 -43
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.native.js +45 -46
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.mjs +24 -21
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.native.js +43 -42
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.mjs +5 -3
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.native.js +5 -3
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.mjs +5 -7
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.native.js +5 -7
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.mjs +11 -14
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.native.js +11 -14
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/index.mjs +2 -2
- package/dist/esm/rn-commands/bundle/index.native.js +2 -2
- package/dist/esm/rn-commands/bundle/saveAssets.mjs +70 -70
- package/dist/esm/rn-commands/bundle/saveAssets.mjs.map +1 -1
- package/dist/esm/rn-commands/bundle/saveAssets.native.js +87 -89
- package/dist/esm/rn-commands/bundle/saveAssets.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/types.mjs +0 -2
- package/dist/esm/rn-commands/bundle/types.native.js +0 -2
- package/dist/esm/rn-commands/index.mjs +2 -2
- package/dist/esm/rn-commands/index.native.js +2 -2
- package/dist/esm/transformer/babel-core.mjs +2 -2
- package/dist/esm/transformer/babel-core.native.js +2 -2
- package/dist/esm/transformer/babel-transformer.mjs +108 -144
- package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
- package/dist/esm/transformer/babel-transformer.native.js +114 -155
- package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
- package/dist/esm/transformer/loadBabelConfig.mjs +29 -23
- package/dist/esm/transformer/loadBabelConfig.mjs.map +1 -1
- package/dist/esm/transformer/loadBabelConfig.native.js +33 -27
- package/dist/esm/transformer/loadBabelConfig.native.js.map +1 -1
- package/dist/esm/transformer/metroNativeWorker.mjs +1405 -1434
- package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
- package/dist/esm/transformer/metroNativeWorker.native.js +2379 -2507
- package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
- package/dist/esm/transformer/transformSync.mjs +32 -37
- package/dist/esm/transformer/transformSync.mjs.map +1 -1
- package/dist/esm/transformer/transformSync.native.js +34 -39
- package/dist/esm/transformer/transformSync.native.js.map +1 -1
- package/dist/esm/transformer/types.mjs +0 -2
- package/dist/esm/transformer/types.native.js +0 -2
- package/dist/esm/utils/exit.mjs +123 -112
- package/dist/esm/utils/exit.mjs.map +1 -1
- package/dist/esm/utils/exit.native.js +210 -215
- package/dist/esm/utils/exit.native.js.map +1 -1
- package/dist/esm/utils/getTerminalReporter.mjs +20 -21
- package/dist/esm/utils/getTerminalReporter.mjs.map +1 -1
- package/dist/esm/utils/getTerminalReporter.native.js +23 -24
- package/dist/esm/utils/getTerminalReporter.native.js.map +1 -1
- package/dist/esm/utils/metroCacheManager.mjs +73 -82
- package/dist/esm/utils/metroCacheManager.mjs.map +1 -1
- package/dist/esm/utils/metroCacheManager.native.js +91 -102
- package/dist/esm/utils/metroCacheManager.native.js.map +1 -1
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +11 -10
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +1 -1
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +11 -10
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js.map +1 -1
- package/dist/esm/utils/projectImport.mjs +23 -25
- package/dist/esm/utils/projectImport.mjs.map +1 -1
- package/dist/esm/utils/projectImport.native.js +24 -33
- package/dist/esm/utils/projectImport.native.js.map +1 -1
- package/package.json +17 -18
- package/src/metro-config/getMetroConfigFromViteConfig.ts +46 -10
- package/src/transformer/loadBabelConfig.ts +2 -0
- package/src/transformer/metroNativeWorker.test.ts +267 -35
- package/src/transformer/metroNativeWorker.ts +3 -11
- package/types/babel-plugins/import-meta-env-plugin.d.ts.map +1 -1
- package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -1
- package/types/rn-commands/bundle/assetPathUtils.d.ts.map +1 -1
- package/types/rn-commands/bundle/filterPlatformAssetScales.d.ts.map +1 -1
- package/types/rn-commands/bundle/getAssetDestPathAndroid.d.ts.map +1 -1
- package/types/rn-commands/bundle/getAssetDestPathIOS.d.ts.map +1 -1
- package/types/rn-commands/bundle/saveAssets.d.ts.map +1 -1
- package/types/transformer/loadBabelConfig.d.ts.map +1 -1
- package/types/transformer/metroNativeWorker.d.ts.map +1 -1
- package/dist/cjs/transformer/metroNativeWorker.test.cjs +0 -897
- package/dist/cjs/transformer/metroNativeWorker.test.native.js +0 -1010
- package/dist/cjs/transformer/metroNativeWorker.test.native.js.map +0 -1
- package/dist/cjs/transformer/transformSync.test.cjs +0 -36
- package/dist/cjs/transformer/transformSync.test.native.js +0 -49
- package/dist/cjs/transformer/transformSync.test.native.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/index.native.js.map +0 -1
- package/dist/esm/metro-config/types.mjs.map +0 -1
- package/dist/esm/metro-config/types.native.js.map +0 -1
- package/dist/esm/rn-commands/bundle/index.mjs.map +0 -1
- package/dist/esm/rn-commands/bundle/index.native.js.map +0 -1
- package/dist/esm/rn-commands/bundle/types.mjs.map +0 -1
- package/dist/esm/rn-commands/bundle/types.native.js.map +0 -1
- package/dist/esm/rn-commands/index.mjs.map +0 -1
- package/dist/esm/rn-commands/index.native.js.map +0 -1
- package/dist/esm/transformer/babel-core.mjs.map +0 -1
- package/dist/esm/transformer/babel-core.native.js.map +0 -1
- package/dist/esm/transformer/metroNativeWorker.test.mjs +0 -861
- package/dist/esm/transformer/metroNativeWorker.test.mjs.map +0 -1
- package/dist/esm/transformer/metroNativeWorker.test.native.js +0 -972
- package/dist/esm/transformer/metroNativeWorker.test.native.js.map +0 -1
- package/dist/esm/transformer/transformSync.test.mjs +0 -37
- package/dist/esm/transformer/transformSync.test.mjs.map +0 -1
- package/dist/esm/transformer/transformSync.test.native.js +0 -47
- package/dist/esm/transformer/transformSync.test.native.js.map +0 -1
- package/dist/esm/transformer/types.mjs.map +0 -1
- package/dist/esm/transformer/types.native.js.map +0 -1
- package/types/transformer/metroNativeWorker.test.d.ts +0 -2
- package/types/transformer/metroNativeWorker.test.d.ts.map +0 -1
- package/types/transformer/transformSync.test.d.ts +0 -2
- package/types/transformer/transformSync.test.d.ts.map +0 -1
|
@@ -1,42 +1,33 @@
|
|
|
1
1
|
import { createDebugger } from "@vxrn/debug";
|
|
2
2
|
import module from "module";
|
|
3
3
|
import { pathToFileURL } from "url";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return !!right[Symbol.hasInstance](left);
|
|
7
|
-
} else {
|
|
8
|
-
return left instanceof right;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
var {
|
|
12
|
-
debug
|
|
13
|
-
} = createDebugger("vite-metro:projectImport");
|
|
4
|
+
|
|
5
|
+
var { debug } = createDebugger("vite-metro:projectImport");
|
|
14
6
|
async function projectImport(projectRoot, path) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
7
|
+
try {
|
|
8
|
+
var _out_default;
|
|
9
|
+
var importPath = projectResolve(projectRoot, path);
|
|
10
|
+
debug === null || debug === void 0 ? void 0 : debug(`Importing "${path}" from project root: "${projectRoot}" at "${importPath}"`);
|
|
11
|
+
var out = await import(pathToFileURL(importPath).href);
|
|
12
|
+
if (out === null || out === void 0 ? void 0 : (_out_default = out.default) === null || _out_default === void 0 ? void 0 : _out_default.default) {
|
|
13
|
+
return {
|
|
14
|
+
...out,
|
|
15
|
+
default: out.default.default
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return out;
|
|
19
|
+
} catch (e) {
|
|
20
|
+
if (e instanceof Error) {
|
|
21
|
+
e.message = `[vite-plugin-metro] Failed to import ${path} from your project (${projectRoot}): ${e.message}`;
|
|
22
|
+
}
|
|
23
|
+
throw e;
|
|
24
|
+
}
|
|
33
25
|
}
|
|
34
26
|
function projectResolve(projectRoot, path) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
return importPath;
|
|
27
|
+
var require2 = module.createRequire(projectRoot);
|
|
28
|
+
var importPath = require2.resolve(path, { paths: [projectRoot] });
|
|
29
|
+
return importPath;
|
|
40
30
|
}
|
|
31
|
+
|
|
41
32
|
export { debug, projectImport, projectResolve };
|
|
42
33
|
//# sourceMappingURL=projectImport.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"projectImport.native.js","names":[],"sources":["esm/utils/projectImport.native.js"],"sourcesContent":["import { createDebugger } from \"@vxrn/debug\";\nimport module from \"module\";\nimport { pathToFileURL } from \"url\";\nvar { debug } = createDebugger(\"vite-metro:projectImport\");\nasync function projectImport(projectRoot, path) {\n try {\n var _out_default;\n var importPath = projectResolve(projectRoot, path);\n debug === null || debug === void 0 ? void 0 : debug(`Importing \"${path}\" from project root: \"${projectRoot}\" at \"${importPath}\"`);\n var out = await import(pathToFileURL(importPath).href);\n if (out === null || out === void 0 ? void 0 : (_out_default = out.default) === null || _out_default === void 0 ? void 0 : _out_default.default) {\n return {\n ...out,\n default: out.default.default\n };\n }\n return out;\n } catch (e) {\n if (e instanceof Error) {\n e.message = `[vite-plugin-metro] Failed to import ${path} from your project (${projectRoot}): ${e.message}`;\n }\n throw e;\n }\n}\nfunction projectResolve(projectRoot, path) {\n var require2 = module.createRequire(projectRoot);\n var importPath = require2.resolve(path, {\n paths: [\n projectRoot\n ]\n });\n return importPath;\n}\nexport {\n debug,\n projectImport,\n projectResolve\n};\n//# sourceMappingURL=projectImport.js.map\n"],"mappings":";;;;;AAGA,IAAI,EAAE,UAAU,eAAe,0BAA0B;AACzD,eAAe,cAAc,aAAa,MAAM;CAC9C,IAAI;EACF,IAAI;EACJ,IAAI,aAAa,eAAe,aAAa,IAAI;EACjD,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK,IAAI,MAAM,cAAc,KAAK,wBAAwB,YAAY,QAAQ,WAAW,EAAE;EAChI,IAAI,MAAM,MAAM,OAAO,cAAc,UAAU,CAAC,CAAC;EACjD,IAAI,QAAQ,QAAQ,QAAQ,KAAK,IAAI,KAAK,KAAK,eAAe,IAAI,aAAa,QAAQ,iBAAiB,KAAK,IAAI,KAAK,IAAI,aAAa,SAAS;GAC9I,OAAO;IACL,GAAG;IACH,SAAS,IAAI,QAAQ;GACvB;EACF;EACA,OAAO;CACT,SAAS,GAAG;EACV,IAAI,aAAa,OAAO;GACtB,EAAE,UAAU,wCAAwC,KAAK,sBAAsB,YAAY,KAAK,EAAE;EACpG;EACA,MAAM;CACR;AACF;AACA,SAAS,eAAe,aAAa,MAAM;CACzC,IAAI,WAAW,OAAO,cAAc,WAAW;CAC/C,IAAI,aAAa,SAAS,QAAQ,MAAM,EACtC,OAAO,CACL,WACF,EACF,CAAC;CACD,OAAO;AACT"}
|
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.46.1",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cjs",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
"typecheck": "tsc --noEmit"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
|
-
"@expo/metro-config": "
|
|
65
|
-
"expo": "
|
|
66
|
-
"metro": "^0.
|
|
67
|
-
"metro-config": "^0.
|
|
68
|
-
"react-native": "0.
|
|
64
|
+
"@expo/metro-config": "58.0.0-canary-20260909-ea7a89a",
|
|
65
|
+
"expo": "58.0.0-canary-20260909-ea7a89a",
|
|
66
|
+
"metro": "^0.87.0",
|
|
67
|
+
"metro-config": "^0.87.0",
|
|
68
|
+
"react-native": "0.87.1",
|
|
69
69
|
"vite": "^8.2.2"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
@@ -74,12 +74,11 @@
|
|
|
74
74
|
"@jridgewell/remapping": "^2.3.0",
|
|
75
75
|
"@jridgewell/trace-mapping": "^0.3.25",
|
|
76
76
|
"@oxc-project/runtime": "^0.112.0",
|
|
77
|
-
"@vxrn/compiler": "2.0.0-beta.
|
|
78
|
-
"@vxrn/debug": "2.0.0-beta.
|
|
79
|
-
"@vxrn/utils": "2.0.0-beta.
|
|
80
|
-
"babel-preset-expo": "
|
|
77
|
+
"@vxrn/compiler": "2.0.0-beta.46.1",
|
|
78
|
+
"@vxrn/debug": "2.0.0-beta.46.1",
|
|
79
|
+
"@vxrn/utils": "2.0.0-beta.46.1",
|
|
80
|
+
"babel-preset-expo": "58.0.0-canary-20260909-ea7a89a",
|
|
81
81
|
"esbuild": "^0.25.12",
|
|
82
|
-
"fast-flow-transform": "^0.0.3",
|
|
83
82
|
"launch-editor": "^2.10.0",
|
|
84
83
|
"magic-string": "^0.30.21",
|
|
85
84
|
"micromatch": "^4.0.8",
|
|
@@ -89,16 +88,16 @@
|
|
|
89
88
|
},
|
|
90
89
|
"devDependencies": {
|
|
91
90
|
"@biomejs/biome": "2.3.3",
|
|
92
|
-
"@expo/metro-config": "
|
|
93
|
-
"@react-native/dev-middleware": "^0.
|
|
94
|
-
"@tamagui/build": "
|
|
91
|
+
"@expo/metro-config": "58.0.0-canary-20260909-ea7a89a",
|
|
92
|
+
"@react-native/dev-middleware": "^0.87.1",
|
|
93
|
+
"@tamagui/build": "3.0.0-beta.1309.1",
|
|
95
94
|
"@types/babel__helper-plugin-utils": "^7",
|
|
96
95
|
"@types/node": "^24.10.0",
|
|
97
96
|
"depcheck": "^1.4.7",
|
|
98
|
-
"expo": "
|
|
99
|
-
"metro": "^0.
|
|
100
|
-
"metro-config": "^0.
|
|
101
|
-
"react-native": "0.
|
|
97
|
+
"expo": "58.0.0-canary-20260909-ea7a89a",
|
|
98
|
+
"metro": "^0.87.0",
|
|
99
|
+
"metro-config": "^0.87.0",
|
|
100
|
+
"react-native": "0.87.1",
|
|
102
101
|
"vite": "^8.2.2",
|
|
103
102
|
"vitest": "^4.1.0"
|
|
104
103
|
},
|
|
@@ -9,6 +9,7 @@ import micromatch from 'micromatch'
|
|
|
9
9
|
import type { loadConfig as loadConfigT } from 'metro'
|
|
10
10
|
import type { getDefaultConfig as getDefaultConfigT } from '@expo/metro-config'
|
|
11
11
|
|
|
12
|
+
import { findUserBabelConfig } from '@vxrn/compiler'
|
|
12
13
|
import { projectImport, projectResolve } from '../utils/projectImport'
|
|
13
14
|
import { getTerminalReporter } from '../utils/getTerminalReporter'
|
|
14
15
|
import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from '../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName'
|
|
@@ -89,6 +90,47 @@ async function isWatchmanResponsive(projectRoot: string) {
|
|
|
89
90
|
return probe
|
|
90
91
|
}
|
|
91
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Decides whether Metro runs the native worker or the babel transformer.
|
|
95
|
+
* No babel by default: the worker throws on a babel plugin it has no port
|
|
96
|
+
* for, so opting back in is explicit rather than something you drift into.
|
|
97
|
+
* When a user adds a custom babel config, respect it rather than forcing
|
|
98
|
+
* native transforms, unless explicitly overridden. Shared by both config
|
|
99
|
+
* builders so the two never drift apart.
|
|
100
|
+
*/
|
|
101
|
+
function resolveNativeTransforms(
|
|
102
|
+
projectRoot: string,
|
|
103
|
+
metroPluginOptions: MetroPluginOptions
|
|
104
|
+
): { isNativeTransforms: boolean; userBabelConfigPath: string | null } {
|
|
105
|
+
const userBabelConfigPath = projectRoot ? findUserBabelConfig(projectRoot) : null
|
|
106
|
+
const hasUserBabelConfig = Boolean(userBabelConfigPath)
|
|
107
|
+
|
|
108
|
+
const isNativeTransforms =
|
|
109
|
+
process.env.ONE_METRO_NATIVE_TRANSFORMS === '0'
|
|
110
|
+
? false
|
|
111
|
+
: process.env.ONE_METRO_NATIVE_TRANSFORMS === '1'
|
|
112
|
+
? true
|
|
113
|
+
: metroPluginOptions.nativeTransforms === false
|
|
114
|
+
? false
|
|
115
|
+
: metroPluginOptions.nativeTransforms === true
|
|
116
|
+
? true
|
|
117
|
+
: hasUserBabelConfig
|
|
118
|
+
? false
|
|
119
|
+
: true
|
|
120
|
+
|
|
121
|
+
// the native worker runs no babel at all, so reaching it here means an
|
|
122
|
+
// explicit override is about to silently drop the user's plugins. name the
|
|
123
|
+
// ignored file rather than swallowing it.
|
|
124
|
+
if (userBabelConfigPath && isNativeTransforms) {
|
|
125
|
+
console.warn(
|
|
126
|
+
`[vxrn/metro] Ignoring user babel config at ${userBabelConfigPath} because native transforms are explicitly enabled (nativeTransforms: true or ONE_METRO_NATIVE_TRANSFORMS=1). ` +
|
|
127
|
+
`Port its plugins to nativeTransformModules, or set nativeTransforms: false (or ONE_METRO_NATIVE_TRANSFORMS=0) to use the babel transformer.`
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return { isNativeTransforms, userBabelConfigPath }
|
|
132
|
+
}
|
|
133
|
+
|
|
92
134
|
/**
|
|
93
135
|
* Build the Metro config input WITHOUT calling Metro's `loadConfig`. Returns
|
|
94
136
|
* the same shape Metro `loadConfig` expects as its second argument. Use this
|
|
@@ -176,11 +218,8 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
176
218
|
|
|
177
219
|
// no babel by default. the worker throws on a babel plugin it has no port
|
|
178
220
|
// for, so opting back in is explicit rather than something you drift into.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
? false
|
|
182
|
-
: process.env.ONE_METRO_NATIVE_TRANSFORMS === '1' ||
|
|
183
|
-
metroPluginOptions.nativeTransforms !== false
|
|
221
|
+
// When a user adds a custom babel config, respect it rather than forcing native transforms.
|
|
222
|
+
const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions)
|
|
184
223
|
|
|
185
224
|
let nativeWorkerPath: string | undefined
|
|
186
225
|
if (isNativeTransforms) {
|
|
@@ -343,11 +382,8 @@ export async function getMetroConfigFromViteConfig(
|
|
|
343
382
|
|
|
344
383
|
// no babel by default. the worker throws on a babel plugin it has no port
|
|
345
384
|
// for, so opting back in is explicit rather than something you drift into.
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
? false
|
|
349
|
-
: process.env.ONE_METRO_NATIVE_TRANSFORMS === '1' ||
|
|
350
|
-
metroPluginOptions.nativeTransforms !== false
|
|
385
|
+
// When a user adds a custom babel config, respect it rather than forcing native transforms.
|
|
386
|
+
const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions)
|
|
351
387
|
|
|
352
388
|
let nativeWorkerPath: string | undefined
|
|
353
389
|
if (isNativeTransforms) {
|
|
@@ -31,9 +31,11 @@ export const loadBabelConfig = (() => {
|
|
|
31
31
|
const possibleBabelRCPaths = [
|
|
32
32
|
'.babelrc',
|
|
33
33
|
'.babelrc.js',
|
|
34
|
+
'.babelrc.json',
|
|
34
35
|
'babel.config.js',
|
|
35
36
|
'babel.config.cjs',
|
|
36
37
|
'babel.config.mjs',
|
|
38
|
+
'babel.config.json',
|
|
37
39
|
]
|
|
38
40
|
|
|
39
41
|
const foundBabelRCPath = possibleBabelRCPaths.find((configFileName) =>
|
|
@@ -3,6 +3,7 @@ import * as babel from '@babel/core'
|
|
|
3
3
|
import * as vm from 'node:vm'
|
|
4
4
|
import { parseSync } from 'oxc-parser'
|
|
5
5
|
import * as fs from 'node:fs'
|
|
6
|
+
import * as os from 'node:os'
|
|
6
7
|
import * as path from 'node:path'
|
|
7
8
|
import { createRequire } from 'node:module'
|
|
8
9
|
import {
|
|
@@ -18,7 +19,10 @@ import {
|
|
|
18
19
|
applyEnvironmentGuard,
|
|
19
20
|
getRemoveServerCodeRouterRoot,
|
|
20
21
|
} from './metroNativeWorker'
|
|
21
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
buildMetroConfigInputFromViteConfig,
|
|
24
|
+
getMetroConfigFromViteConfig,
|
|
25
|
+
} from '../metro-config/getMetroConfigFromViteConfig'
|
|
22
26
|
|
|
23
27
|
const babelCalls = {
|
|
24
28
|
transform: 0,
|
|
@@ -31,33 +35,25 @@ const babelCalls = {
|
|
|
31
35
|
|
|
32
36
|
vi.mock('@babel/core', async (importOriginal) => {
|
|
33
37
|
const actual = await importOriginal<typeof import('@babel/core')>()
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
babelCalls.parse++
|
|
54
|
-
return (actual.parse as any)(...args)
|
|
55
|
-
}),
|
|
56
|
-
parseSync: vi.fn((...args: any[]) => {
|
|
57
|
-
babelCalls.parseSync++
|
|
58
|
-
return (actual.parseSync as any)(...args)
|
|
59
|
-
}),
|
|
60
|
-
}
|
|
38
|
+
const names = [
|
|
39
|
+
'transform',
|
|
40
|
+
'transformSync',
|
|
41
|
+
'transformAsync',
|
|
42
|
+
'transformFromAstSync',
|
|
43
|
+
'parse',
|
|
44
|
+
'parseSync',
|
|
45
|
+
] as const
|
|
46
|
+
const counted = Object.fromEntries(
|
|
47
|
+
names.map((name) => [
|
|
48
|
+
name,
|
|
49
|
+
vi.fn((...args: any[]) => {
|
|
50
|
+
babelCalls[name]++
|
|
51
|
+
return (actual[name] as any)(...args)
|
|
52
|
+
}),
|
|
53
|
+
])
|
|
54
|
+
)
|
|
55
|
+
// @vxrn/compiler reaches babel through the default export, so count that too
|
|
56
|
+
return { ...actual, ...counted, default: { ...actual, ...counted } }
|
|
61
57
|
})
|
|
62
58
|
|
|
63
59
|
// module scope so every describe in this file can assert it, not just the first
|
|
@@ -70,6 +66,20 @@ beforeEach(() => {
|
|
|
70
66
|
babelCalls.parseSync = 0
|
|
71
67
|
})
|
|
72
68
|
|
|
69
|
+
// flow stripping is the one place the worker runs babel: react-native's flow
|
|
70
|
+
// syntax (readonly properties, enums) is beyond fast-flow-transform, so the
|
|
71
|
+
// hermes-parser pass in @vxrn/compiler strips it in a single transform call
|
|
72
|
+
function assertOnlyFlowStripBabelCall() {
|
|
73
|
+
expect(babelCalls).toEqual({
|
|
74
|
+
transform: 1,
|
|
75
|
+
transformSync: 0,
|
|
76
|
+
transformAsync: 0,
|
|
77
|
+
transformFromAstSync: 0,
|
|
78
|
+
parse: 0,
|
|
79
|
+
parseSync: 0,
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
|
|
73
83
|
function assertZeroBabelCalls() {
|
|
74
84
|
expect(babelCalls.transform).toBe(0)
|
|
75
85
|
expect(babelCalls.transformSync).toBe(0)
|
|
@@ -236,7 +246,9 @@ describe('metroNativeWorker', () => {
|
|
|
236
246
|
off.find((d) => d.name === 'react-native-worklets-core')!.data.isOptional
|
|
237
247
|
).toBeUndefined()
|
|
238
248
|
|
|
239
|
-
const on = extractDependencies(code, 'setup.js', {
|
|
249
|
+
const on = extractDependencies(code, 'setup.js', {
|
|
250
|
+
allowOptionalDependencies: true,
|
|
251
|
+
})
|
|
240
252
|
expect(on.find((d) => d.name === 'react-native-worklets-core')!.data.isOptional).toBe(
|
|
241
253
|
true
|
|
242
254
|
)
|
|
@@ -399,7 +411,7 @@ describe('metroNativeWorker', () => {
|
|
|
399
411
|
it('handles Asset files without Babel', async () => {
|
|
400
412
|
const result = await transform(
|
|
401
413
|
{
|
|
402
|
-
assetRegistryPath: 'react-native/
|
|
414
|
+
assetRegistryPath: 'react-native/asset-registry',
|
|
403
415
|
publicPath: '/assets',
|
|
404
416
|
},
|
|
405
417
|
'/project',
|
|
@@ -414,10 +426,10 @@ describe('metroNativeWorker', () => {
|
|
|
414
426
|
expect(result.output[0].data.code).toContain('__d(function')
|
|
415
427
|
|
|
416
428
|
const depNames = result.dependencies.map((d) => d.name)
|
|
417
|
-
expect(depNames).toContain('react-native/
|
|
429
|
+
expect(depNames).toContain('react-native/asset-registry')
|
|
418
430
|
})
|
|
419
431
|
|
|
420
|
-
it('
|
|
432
|
+
it('strips Flow types with a single hermes-parser Babel pass', async () => {
|
|
421
433
|
const flowSource = `
|
|
422
434
|
// @flow
|
|
423
435
|
function add(a: number, b: number): number {
|
|
@@ -434,11 +446,41 @@ describe('metroNativeWorker', () => {
|
|
|
434
446
|
{ dev: false, platform: 'ios', type: 'module' }
|
|
435
447
|
)
|
|
436
448
|
|
|
437
|
-
|
|
449
|
+
assertOnlyFlowStripBabelCall()
|
|
438
450
|
expect(result.output[0].data.code).not.toContain(': number')
|
|
439
451
|
expect(result.output[0].data.code).toContain('function add(a, b)')
|
|
440
452
|
})
|
|
441
453
|
|
|
454
|
+
it('lowers React Native Flow enums and readonly properties', async () => {
|
|
455
|
+
// react-native 0.87 ships VirtualView.js with exported Flow enums, and
|
|
456
|
+
// readonly object properties throughout its type declarations
|
|
457
|
+
const flowSource = `
|
|
458
|
+
// @flow strict-local
|
|
459
|
+
type Props = { readonly state: VirtualViewRenderState };
|
|
460
|
+
export enum VirtualViewRenderState {
|
|
461
|
+
Unknown = 0,
|
|
462
|
+
Rendered = 1,
|
|
463
|
+
None = 2,
|
|
464
|
+
}
|
|
465
|
+
export function isRendered(state: VirtualViewRenderState): boolean {
|
|
466
|
+
return state === VirtualViewRenderState.Rendered;
|
|
467
|
+
}
|
|
468
|
+
`
|
|
469
|
+
|
|
470
|
+
const result = await transform(
|
|
471
|
+
{},
|
|
472
|
+
'/project',
|
|
473
|
+
'node_modules/react-native/src/private/components/virtualview/VirtualView.js',
|
|
474
|
+
Buffer.from(flowSource, 'utf8'),
|
|
475
|
+
{ dev: false, platform: 'ios', type: 'module' }
|
|
476
|
+
)
|
|
477
|
+
|
|
478
|
+
assertOnlyFlowStripBabelCall()
|
|
479
|
+
expect(result.output[0].data.code).not.toContain('enum VirtualViewRenderState')
|
|
480
|
+
expect(result.output[0].data.code).not.toContain('readonly')
|
|
481
|
+
expect(result.dependencies.map((d) => d.name)).toContain('flow-enums-runtime')
|
|
482
|
+
})
|
|
483
|
+
|
|
442
484
|
it('generates a deterministic cache key without Babel', () => {
|
|
443
485
|
const key1 = getCacheKey(
|
|
444
486
|
{ globalPrefix: '__one_', minifierPath: 'terser' },
|
|
@@ -515,6 +557,151 @@ describe('metroNativeWorker', () => {
|
|
|
515
557
|
)
|
|
516
558
|
})
|
|
517
559
|
|
|
560
|
+
it('falls back to default Metro babel transformer when a user babel config exists', async () => {
|
|
561
|
+
const tempDir = path.join(process.cwd(), `.tmp-metro-test-${Date.now()}`)
|
|
562
|
+
fs.mkdirSync(tempDir, { recursive: true })
|
|
563
|
+
fs.writeFileSync(path.join(tempDir, 'package.json'), '{}')
|
|
564
|
+
try {
|
|
565
|
+
const mockViteConfig = { root: tempDir } as any
|
|
566
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
567
|
+
|
|
568
|
+
// With no config, defaults to metroNativeWorker
|
|
569
|
+
const config1 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
570
|
+
expect(config1.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
571
|
+
|
|
572
|
+
// a config written by `one patch` is ignored, still uses metroNativeWorker
|
|
573
|
+
const babelConfigPath = path.join(tempDir, 'babel.config.js')
|
|
574
|
+
fs.writeFileSync(
|
|
575
|
+
babelConfigPath,
|
|
576
|
+
'// @one/generated bundler-config\nmodule.exports = {}'
|
|
577
|
+
)
|
|
578
|
+
const config2 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
579
|
+
expect(config2.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
580
|
+
|
|
581
|
+
// User config: falls back to metro default transformer (not metroNativeWorker)
|
|
582
|
+
fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: ["my-plugin"] }')
|
|
583
|
+
const config3 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
584
|
+
expect(config3.defaultConfig.transformerPath).not.toContain('metroNativeWorker')
|
|
585
|
+
|
|
586
|
+
// Explicit env var ONE_METRO_NATIVE_TRANSFORMS=1 forces native worker even with user babel config
|
|
587
|
+
process.env.ONE_METRO_NATIVE_TRANSFORMS = '1'
|
|
588
|
+
const config4 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
589
|
+
expect(config4.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
590
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
591
|
+
|
|
592
|
+
// Explicit nativeTransforms: true also forces native worker
|
|
593
|
+
const config5 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
|
|
594
|
+
nativeTransforms: true,
|
|
595
|
+
})
|
|
596
|
+
expect(config5.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
597
|
+
} finally {
|
|
598
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
599
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
600
|
+
}
|
|
601
|
+
})
|
|
602
|
+
|
|
603
|
+
it('warns naming the ignored user babel config when native transforms are forced', async () => {
|
|
604
|
+
const tempDir = fs.realpathSync(
|
|
605
|
+
fs.mkdtempSync(path.join(process.cwd(), '.tmp-metro-test-'))
|
|
606
|
+
)
|
|
607
|
+
fs.writeFileSync(path.join(tempDir, 'package.json'), '{}')
|
|
608
|
+
const babelConfigPath = path.join(tempDir, 'babel.config.js')
|
|
609
|
+
fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: [] }')
|
|
610
|
+
try {
|
|
611
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
612
|
+
const mockViteConfig = { root: tempDir } as any
|
|
613
|
+
const warnsWithConfig = (spy: any) =>
|
|
614
|
+
spy.mock.calls.some((args: any[]) => args.join(' ').includes(babelConfigPath))
|
|
615
|
+
|
|
616
|
+
// explicit option force still uses the worker, but names the dropped config
|
|
617
|
+
const optionWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
618
|
+
try {
|
|
619
|
+
const forced = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
|
|
620
|
+
nativeTransforms: true,
|
|
621
|
+
})
|
|
622
|
+
expect(forced.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
623
|
+
expect(warnsWithConfig(optionWarn)).toBe(true)
|
|
624
|
+
} finally {
|
|
625
|
+
optionWarn.mockRestore()
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
// env var force warns the same way
|
|
629
|
+
const envWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
630
|
+
try {
|
|
631
|
+
process.env.ONE_METRO_NATIVE_TRANSFORMS = '1'
|
|
632
|
+
const envForced = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
633
|
+
expect(envForced.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
634
|
+
expect(warnsWithConfig(envWarn)).toBe(true)
|
|
635
|
+
} finally {
|
|
636
|
+
envWarn.mockRestore()
|
|
637
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// default (no force) respects the config silently: babel fallback, no warning
|
|
641
|
+
const respectedWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
642
|
+
try {
|
|
643
|
+
const respected = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
644
|
+
expect(respected.defaultConfig.transformerPath).not.toContain('metroNativeWorker')
|
|
645
|
+
expect(warnsWithConfig(respectedWarn)).toBe(false)
|
|
646
|
+
} finally {
|
|
647
|
+
respectedWarn.mockRestore()
|
|
648
|
+
}
|
|
649
|
+
} finally {
|
|
650
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
651
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
652
|
+
}
|
|
653
|
+
})
|
|
654
|
+
|
|
655
|
+
it('selects the same transformer in both metro config builders', async () => {
|
|
656
|
+
const tempDir = fs.realpathSync(
|
|
657
|
+
fs.mkdtempSync(path.join(process.cwd(), '.tmp-metro-test-'))
|
|
658
|
+
)
|
|
659
|
+
fs.writeFileSync(path.join(tempDir, 'package.json'), '{}')
|
|
660
|
+
try {
|
|
661
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
662
|
+
const mockViteConfig = { root: tempDir } as any
|
|
663
|
+
|
|
664
|
+
// no user config: both builders default to the native worker
|
|
665
|
+
const nativeInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
666
|
+
const nativeFull = await getMetroConfigFromViteConfig(mockViteConfig, {})
|
|
667
|
+
expect(nativeInput.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
668
|
+
expect((nativeFull as any).transformerPath).toContain('metroNativeWorker')
|
|
669
|
+
|
|
670
|
+
// user config: both builders fall back to the babel transformer
|
|
671
|
+
const babelConfigPath = path.join(tempDir, 'babel.config.js')
|
|
672
|
+
fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: [] }')
|
|
673
|
+
const fallbackInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
674
|
+
const fallbackFull = await getMetroConfigFromViteConfig(mockViteConfig, {})
|
|
675
|
+
expect(fallbackInput.defaultConfig.transformerPath).not.toContain(
|
|
676
|
+
'metroNativeWorker'
|
|
677
|
+
)
|
|
678
|
+
expect((fallbackFull as any).transformerPath).not.toContain('metroNativeWorker')
|
|
679
|
+
|
|
680
|
+
// forced with a user config: both builders warn naming the ignored file
|
|
681
|
+
const forcedWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
682
|
+
try {
|
|
683
|
+
const forcedInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
|
|
684
|
+
nativeTransforms: true,
|
|
685
|
+
})
|
|
686
|
+
const forcedFull = await getMetroConfigFromViteConfig(mockViteConfig, {
|
|
687
|
+
nativeTransforms: true,
|
|
688
|
+
})
|
|
689
|
+
expect(forcedInput.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
690
|
+
expect((forcedFull as any).transformerPath).toContain('metroNativeWorker')
|
|
691
|
+
expect(
|
|
692
|
+
forcedWarn.mock.calls.some((args: any[]) =>
|
|
693
|
+
args.join(' ').includes(babelConfigPath)
|
|
694
|
+
)
|
|
695
|
+
).toBe(true)
|
|
696
|
+
} finally {
|
|
697
|
+
forcedWarn.mockRestore()
|
|
698
|
+
}
|
|
699
|
+
} finally {
|
|
700
|
+
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
701
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
702
|
+
}
|
|
703
|
+
})
|
|
704
|
+
|
|
518
705
|
it('transforms and executes a real 2-module Metro bundle through metro-runtime require polyfill', async () => {
|
|
519
706
|
// Probe 1 verification:
|
|
520
707
|
// Module 2 (dep.js): exports a value
|
|
@@ -1130,7 +1317,11 @@ describe('one native transform ports', () => {
|
|
|
1130
1317
|
it('inlines import.meta.env reads, which oxc otherwise lowers to an empty object', () => {
|
|
1131
1318
|
// oxc's CJS lowering emits `var import_meta = {}`, so an untouched
|
|
1132
1319
|
// `import.meta.env.X` silently reads undefined in every native bundle.
|
|
1133
|
-
const env = {
|
|
1320
|
+
const env = {
|
|
1321
|
+
DEV: false,
|
|
1322
|
+
VITE_POSTHOG_API_KEY: 'pk_live',
|
|
1323
|
+
TAMAGUI_TARGET: 'native',
|
|
1324
|
+
}
|
|
1134
1325
|
const out = applyInlineEnvVars(
|
|
1135
1326
|
`export const key = import.meta.env.VITE_POSTHOG_API_KEY;
|
|
1136
1327
|
export const target = import.meta.env?.TAMAGUI_TARGET;
|
|
@@ -1225,7 +1416,9 @@ export const all = { ...import.meta.env };`,
|
|
|
1225
1416
|
// takeout adds `hot-updater/babel-plugin` for OTA; dropping it silently
|
|
1226
1417
|
// would ship a build whose updates never apply.
|
|
1227
1418
|
const withPlugins = (plugins: any[]) =>
|
|
1228
|
-
({
|
|
1419
|
+
({
|
|
1420
|
+
customTransformOptions: { vite: { babelConfig: { plugins } } },
|
|
1421
|
+
}) as any
|
|
1229
1422
|
|
|
1230
1423
|
expect(() =>
|
|
1231
1424
|
assertNoUnportedBabelPlugins(
|
|
@@ -1284,3 +1477,42 @@ export const all = { ...import.meta.env };`,
|
|
|
1284
1477
|
)
|
|
1285
1478
|
})
|
|
1286
1479
|
})
|
|
1480
|
+
|
|
1481
|
+
describe('metro babel fallback config names', () => {
|
|
1482
|
+
it('extends json babel configs just like the compiler detection does', async () => {
|
|
1483
|
+
// loadBabelConfig memoizes a singleton, so each case gets a fresh module
|
|
1484
|
+
for (const name of ['babel.config.json', '.babelrc.json']) {
|
|
1485
|
+
vi.resetModules()
|
|
1486
|
+
const { loadBabelConfig } = await import('./loadBabelConfig')
|
|
1487
|
+
const tempDir = fs.realpathSync(
|
|
1488
|
+
fs.mkdtempSync(path.join(os.tmpdir(), 'vxrn-babel-json-'))
|
|
1489
|
+
)
|
|
1490
|
+
try {
|
|
1491
|
+
fs.writeFileSync(path.join(tempDir, name), JSON.stringify({ plugins: [] }))
|
|
1492
|
+
expect(loadBabelConfig({ projectRoot: tempDir })).toEqual({
|
|
1493
|
+
extends: path.join(tempDir, name),
|
|
1494
|
+
})
|
|
1495
|
+
} finally {
|
|
1496
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1500
|
+
// control: js configs keep loading
|
|
1501
|
+
vi.resetModules()
|
|
1502
|
+
const { loadBabelConfig } = await import('./loadBabelConfig')
|
|
1503
|
+
const tempDir = fs.realpathSync(
|
|
1504
|
+
fs.mkdtempSync(path.join(os.tmpdir(), 'vxrn-babel-json-'))
|
|
1505
|
+
)
|
|
1506
|
+
try {
|
|
1507
|
+
fs.writeFileSync(
|
|
1508
|
+
path.join(tempDir, 'babel.config.js'),
|
|
1509
|
+
'module.exports = { plugins: [] }'
|
|
1510
|
+
)
|
|
1511
|
+
expect(loadBabelConfig({ projectRoot: tempDir })).toEqual({
|
|
1512
|
+
extends: path.join(tempDir, 'babel.config.js'),
|
|
1513
|
+
})
|
|
1514
|
+
} finally {
|
|
1515
|
+
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
1516
|
+
}
|
|
1517
|
+
})
|
|
1518
|
+
})
|
|
@@ -8,6 +8,7 @@ import remapping from '@jridgewell/remapping'
|
|
|
8
8
|
import { TraceMap, eachMapping } from '@jridgewell/trace-mapping'
|
|
9
9
|
import {
|
|
10
10
|
shouldStripFlow,
|
|
11
|
+
stripFlowTypes,
|
|
11
12
|
transformHermesAsync,
|
|
12
13
|
transformHermesLoops,
|
|
13
14
|
transformReactNativeCodegen,
|
|
@@ -1986,8 +1987,7 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
|
|
|
1986
1987
|
|
|
1987
1988
|
// 2. Asset files
|
|
1988
1989
|
if (options.type === 'asset') {
|
|
1989
|
-
const assetRegistryPath =
|
|
1990
|
-
config.assetRegistryPath || 'react-native/Libraries/Image/AssetRegistry'
|
|
1990
|
+
const assetRegistryPath = config.assetRegistryPath || 'react-native/asset-registry'
|
|
1991
1991
|
let properDescriptor: any = null
|
|
1992
1992
|
|
|
1993
1993
|
const absolutePath = path.resolve(projectRoot, filename)
|
|
@@ -2144,15 +2144,7 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
|
|
|
2144
2144
|
// Step A: Flow stripping
|
|
2145
2145
|
if (shouldStripFlow(filename, code)) {
|
|
2146
2146
|
try {
|
|
2147
|
-
const
|
|
2148
|
-
const flowTransform = fft.default || fft
|
|
2149
|
-
const flowResult = await flowTransform({
|
|
2150
|
-
filename,
|
|
2151
|
-
source: code,
|
|
2152
|
-
sourcemap: true,
|
|
2153
|
-
dialect: 'flow',
|
|
2154
|
-
format: 'pretty',
|
|
2155
|
-
})
|
|
2147
|
+
const flowResult = await stripFlowTypes(filename, code)
|
|
2156
2148
|
if (flowResult?.code) {
|
|
2157
2149
|
code = flowResult.code
|
|
2158
2150
|
if (flowResult.map) {
|