@vxrn/vite-plugin-metro 1.27.1 → 2.0.0-beta.100.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 +57 -57
- package/dist/cjs/env/platformEnv.native.cjs +95 -0
- package/dist/cjs/env/platformEnv.native.js +74 -75
- package/dist/cjs/env/platformEnv.native.js.map +1 -1
- package/dist/cjs/index.cjs +21 -25
- package/dist/cjs/index.native.cjs +39 -0
- package/dist/cjs/index.native.js +21 -24
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.cjs +54 -51
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.cjs +108 -0
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js +95 -94
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +287 -272
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +346 -0
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +309 -282
- 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/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 +149 -151
- package/dist/cjs/transformer/babel-transformer.native.cjs +190 -0
- package/dist/cjs/transformer/babel-transformer.native.js +164 -158
- 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 +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 +1430 -1488
- package/dist/cjs/transformer/metroNativeWorker.native.cjs +2519 -0
- package/dist/cjs/transformer/metroNativeWorker.native.js +2407 -2560
- package/dist/cjs/transformer/metroNativeWorker.native.js.map +1 -1
- package/dist/cjs/transformer/transformSync.cjs +48 -64
- package/dist/cjs/transformer/transformSync.native.cjs +74 -0
- package/dist/cjs/transformer/transformSync.native.js +50 -65
- 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/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 +42 -39
- package/dist/esm/env/platformEnv.mjs.map +1 -1
- package/dist/esm/env/platformEnv.native.js +59 -58
- package/dist/esm/env/platformEnv.native.js.map +1 -1
- package/dist/esm/index.js +3 -4
- package/dist/esm/index.mjs +3 -4
- package/dist/esm/index.native.js +3 -4
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs +42 -33
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs.map +1 -1
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js +83 -77
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +271 -247
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +293 -258
- 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/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 +133 -132
- package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
- package/dist/esm/transformer/babel-transformer.native.js +145 -142
- 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 +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 +1393 -1442
- package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
- package/dist/esm/transformer/metroNativeWorker.native.js +2370 -2515
- package/dist/esm/transformer/metroNativeWorker.native.js.map +1 -1
- package/dist/esm/transformer/transformSync.mjs +33 -38
- package/dist/esm/transformer/transformSync.mjs.map +1 -1
- package/dist/esm/transformer/transformSync.native.js +35 -40
- 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/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 +15 -18
- package/src/babel-plugins/import-meta-env-plugin.ts +1 -1
- package/src/env/platformEnv.test.ts +44 -0
- package/src/env/platformEnv.ts +6 -3
- package/src/index.ts +0 -2
- package/src/metro-config/getMetroBabelConfigFromViteConfig.test.ts +52 -0
- package/src/metro-config/getMetroBabelConfigFromViteConfig.ts +8 -7
- package/src/metro-config/getMetroConfigFromViteConfig.test.ts +60 -0
- package/src/metro-config/getMetroConfigFromViteConfig.ts +150 -113
- 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 +268 -50
- package/src/transformer/metroNativeWorker.ts +53 -71
- 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/babel-plugins/import-meta-env-plugin.d.ts.map +1 -1
- package/types/env/platformEnv.d.ts +2 -1
- 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/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/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 +7 -8
- package/types/transformer/metroNativeWorker.d.ts.map +1 -1
- package/types/utils/projectImport.d.ts +2 -2
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.cjs +0 -71
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js +0 -82
- package/dist/cjs/plugins/expoManifestRequestHandlerPlugin.native.js.map +0 -1
- package/dist/cjs/transformer/metroNativeWorker.test.cjs +0 -1054
- package/dist/cjs/transformer/metroNativeWorker.test.native.js +0 -1170
- 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/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.cjs +0 -39
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -42
- package/dist/cjs/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.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/plugins/expoManifestRequestHandlerPlugin.mjs +0 -46
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.mjs.map +0 -1
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.native.js +0 -54
- package/dist/esm/plugins/expoManifestRequestHandlerPlugin.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 -1010
- package/dist/esm/transformer/metroNativeWorker.test.mjs.map +0 -1
- package/dist/esm/transformer/metroNativeWorker.test.native.js +0 -1124
- 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/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs +0 -14
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.mjs.map +0 -1
- package/dist/esm/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.native.js +0 -14
- 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/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
- package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts +0 -5
- package/types/utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName.d.ts.map +0 -1
|
@@ -1,27 +1,73 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { searchForWorkspaceRoot, type ResolvedConfig } from 'vite'
|
|
2
2
|
import { spawn } from 'node:child_process'
|
|
3
3
|
import { resolve } from 'node:path'
|
|
4
4
|
import micromatch from 'micromatch'
|
|
5
|
+
import { getDefaultConfig } from '@react-native/metro-config'
|
|
5
6
|
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// at runtime to ensure they are loaded from the user's project root.
|
|
7
|
+
// metro itself is loaded from the app so its cli and config stay aligned.
|
|
8
|
+
// the base config belongs to this package and matches its react-native peer.
|
|
9
9
|
import type { loadConfig as loadConfigT } from 'metro'
|
|
10
|
-
import type { getDefaultConfig as getDefaultConfigT } from '@expo/metro-config'
|
|
11
10
|
|
|
12
11
|
import { findUserBabelConfig } from '@vxrn/compiler'
|
|
13
12
|
import { projectImport, projectResolve } from '../utils/projectImport'
|
|
14
13
|
import { getTerminalReporter } from '../utils/getTerminalReporter'
|
|
15
|
-
import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from '../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName'
|
|
16
14
|
import type { MetroPluginOptions } from '../plugins/metroPlugin'
|
|
17
15
|
import type { ExtraConfig, MetroConfigExtended } from './types'
|
|
18
16
|
|
|
19
|
-
type MetroInputConfig = Parameters<typeof loadConfigT>[1]
|
|
17
|
+
type MetroInputConfig = NonNullable<Parameters<typeof loadConfigT>[1]>
|
|
20
18
|
|
|
21
19
|
const WATCHMAN_PROBE_TIMEOUT_MS = 2000
|
|
20
|
+
const expoEnvAdditionalExts = ['env', 'local', 'development']
|
|
22
21
|
const watchmanResponsivePromises = new Map<string, Promise<boolean>>()
|
|
23
22
|
let didWarnAboutWatchmanFallback = false
|
|
24
23
|
const rootIndexBundleRequestPattern = /^(https?:\/\/[^/]+)?\/index\.bundle(?=$|[?#])/
|
|
24
|
+
// expo prebuild writes an AppDelegate (ios) and MainApplication (android) whose
|
|
25
|
+
// debug bundle url is `.expo/.virtual-metro-entry`. expo maps it to the main
|
|
26
|
+
// entry through server.rewriteRequestUrl (see @expo/metro-config
|
|
27
|
+
// src/rewriteRequestUrl.ts: `url.includes('/.expo/.virtual-metro-entry.bundle?')`
|
|
28
|
+
// rewrites to the resolved entry, preserving relative vs absolute shape and
|
|
29
|
+
// query). match that path to the same main entry as index.
|
|
30
|
+
const expoVirtualEntryBundleRequestPattern =
|
|
31
|
+
/^(https?:\/\/[^/]+)?\/\.expo\/\.virtual-metro-entry\.bundle(?=$|[?#])/
|
|
32
|
+
// keep app build output and volatile caches out of Metro's fallback watcher.
|
|
33
|
+
// package dist directories remain visible because Metro resolves modules from them.
|
|
34
|
+
const metroWatchExclusions = [
|
|
35
|
+
/[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
|
|
36
|
+
/[/\\]tests[/\\][^/\\]+[/\\]dist(?:[/\\]|$)/,
|
|
37
|
+
/[/\\]\.docker(?:[/\\]|$)/,
|
|
38
|
+
/[/\\]\.vite(?:[/\\]|$)/,
|
|
39
|
+
/[/\\]node_modules[/\\]\.vxrn(?:[/\\]|$)/,
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
function enforceWorkspaceVisibility(
|
|
43
|
+
config: MetroInputConfig,
|
|
44
|
+
projectRoot: string
|
|
45
|
+
): MetroInputConfig {
|
|
46
|
+
const workspaceRoot = searchForWorkspaceRoot(projectRoot)
|
|
47
|
+
if (workspaceRoot === projectRoot) return config
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
...config,
|
|
51
|
+
watchFolders: [...new Set([...(config.watchFolders ?? []), workspaceRoot])],
|
|
52
|
+
resolver: {
|
|
53
|
+
...config.resolver,
|
|
54
|
+
nodeModulesPaths: [
|
|
55
|
+
...new Set([
|
|
56
|
+
...(config.resolver?.nodeModulesPaths ?? []),
|
|
57
|
+
resolve(projectRoot, 'node_modules'),
|
|
58
|
+
resolve(workspaceRoot, 'node_modules'),
|
|
59
|
+
]),
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function getReactNativeDefaultConfig(projectRoot: string): MetroInputConfig {
|
|
66
|
+
return enforceWorkspaceVisibility(
|
|
67
|
+
getDefaultConfig(projectRoot) as MetroInputConfig,
|
|
68
|
+
projectRoot
|
|
69
|
+
)
|
|
70
|
+
}
|
|
25
71
|
|
|
26
72
|
function getPlatformFromBundleUrl(url: string): 'ios' | 'android' {
|
|
27
73
|
const platform = url.match(/[?&]platform=(ios|android)(?:&|$)/)?.[1]
|
|
@@ -36,11 +82,54 @@ function rewriteMainModuleBundleUrl(
|
|
|
36
82
|
platform: getPlatformFromBundleUrl(url),
|
|
37
83
|
})
|
|
38
84
|
|
|
39
|
-
if (
|
|
40
|
-
return url.replace(
|
|
85
|
+
if (rootIndexBundleRequestPattern.test(url)) {
|
|
86
|
+
return url.replace(rootIndexBundleRequestPattern, `$1/${resolvedMainModulePath}.bundle`)
|
|
41
87
|
}
|
|
88
|
+
return url.replace(
|
|
89
|
+
expoVirtualEntryBundleRequestPattern,
|
|
90
|
+
`$1/${resolvedMainModulePath}.bundle`
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function isMainModuleBundleRequest(url: string) {
|
|
95
|
+
return (
|
|
96
|
+
rootIndexBundleRequestPattern.test(url) ||
|
|
97
|
+
expoVirtualEntryBundleRequestPattern.test(url)
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function isBareSpecifier(name: string) {
|
|
102
|
+
return name !== '' && !name.startsWith('.') && !name.startsWith('/')
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// metro parses `/one/metro-entry.bundle` to the entry `./one/metro-entry`
|
|
106
|
+
// relative to the server root, which misses node_modules package lookup.
|
|
107
|
+
function bareMainModuleForRequest(
|
|
108
|
+
moduleName: string,
|
|
109
|
+
mainModuleName: string | undefined
|
|
110
|
+
) {
|
|
111
|
+
if (!mainModuleName || !isBareSpecifier(mainModuleName)) return undefined
|
|
112
|
+
if (moduleName === `./${mainModuleName}`) return mainModuleName
|
|
113
|
+
return undefined
|
|
114
|
+
}
|
|
42
115
|
|
|
43
|
-
|
|
116
|
+
// defaultConfigOverrides and Metro config loading can replace the resolver.
|
|
117
|
+
// enforce package semantics on the final config while leaving every other
|
|
118
|
+
// request on the resolver selected by that composition.
|
|
119
|
+
function enforceBareMainModuleEntry(config: any, mainModuleName: string | undefined) {
|
|
120
|
+
if (!mainModuleName || !isBareSpecifier(mainModuleName)) return config
|
|
121
|
+
const innerResolveRequest = config?.resolver?.resolveRequest
|
|
122
|
+
return {
|
|
123
|
+
...config,
|
|
124
|
+
resolver: {
|
|
125
|
+
...config?.resolver,
|
|
126
|
+
resolveRequest: (context: any, moduleName: string, platform: string) => {
|
|
127
|
+
const bareMain = bareMainModuleForRequest(moduleName, mainModuleName)
|
|
128
|
+
const resolveRequest = innerResolveRequest || context.resolveRequest
|
|
129
|
+
return resolveRequest(context, bareMain ?? moduleName, platform)
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
}
|
|
44
133
|
}
|
|
45
134
|
|
|
46
135
|
async function isWatchmanResponsive(projectRoot: string) {
|
|
@@ -126,7 +215,7 @@ function resolveNativeTransforms(
|
|
|
126
215
|
* Build the Metro config input WITHOUT calling Metro's `loadConfig`. Returns
|
|
127
216
|
* the same shape Metro `loadConfig` expects as its second argument. Use this
|
|
128
217
|
* from a project's `metro.config.cjs` so the outer `loadConfig` (driven by
|
|
129
|
-
*
|
|
218
|
+
* the Metro CLI) is the only one that runs. this avoids infinite
|
|
130
219
|
* recursion that would happen if the inner pipeline also called `loadConfig`
|
|
131
220
|
* and re-read the same metro.config.cjs.
|
|
132
221
|
*/
|
|
@@ -147,70 +236,31 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
147
236
|
)
|
|
148
237
|
}
|
|
149
238
|
|
|
150
|
-
const
|
|
151
|
-
getDefaultConfig: typeof getDefaultConfigT
|
|
152
|
-
}>(projectRoot, '@expo/metro-config')
|
|
153
|
-
|
|
154
|
-
const _defaultConfig: MetroInputConfig = getDefaultConfig(projectRoot) as any
|
|
239
|
+
const _defaultConfig = getReactNativeDefaultConfig(projectRoot)
|
|
155
240
|
|
|
156
241
|
if (mainModuleName) {
|
|
157
|
-
const origRewriteRequestUrl = _defaultConfig!.server
|
|
158
|
-
|
|
159
|
-
const resolveMainModuleName: (p: { platform: 'ios' | 'android' }) => string =
|
|
160
|
-
await (async () => {
|
|
161
|
-
const ExpoGoManifestHandlerMiddleware = (
|
|
162
|
-
await projectImport(
|
|
163
|
-
projectRoot,
|
|
164
|
-
'@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js'
|
|
165
|
-
)
|
|
166
|
-
).default.ExpoGoManifestHandlerMiddleware
|
|
167
|
-
|
|
168
|
-
const manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(
|
|
169
|
-
projectRoot,
|
|
170
|
-
{}
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(
|
|
174
|
-
manifestHandlerMiddleware,
|
|
175
|
-
mainModuleName
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
return (p) => {
|
|
179
|
-
return manifestHandlerMiddleware.resolveMainModuleName({
|
|
180
|
-
pkg: { main: mainModuleName },
|
|
181
|
-
platform: p.platform,
|
|
182
|
-
})
|
|
183
|
-
}
|
|
184
|
-
})()
|
|
242
|
+
const origRewriteRequestUrl = _defaultConfig!.server?.rewriteRequestUrl
|
|
243
|
+
const resolveMainModuleName = () => mainModuleName
|
|
185
244
|
|
|
186
245
|
extraConfig.getResolveMainModuleName = resolveMainModuleName
|
|
187
246
|
|
|
188
247
|
// @ts-expect-error Metro 0.83 made this read-only in types but we need to patch it
|
|
189
248
|
_defaultConfig!.server!.rewriteRequestUrl = (url) => {
|
|
190
|
-
if (
|
|
191
|
-
url.includes('/.expo/.virtual-metro-entry.bundle?') ||
|
|
192
|
-
rootIndexBundleRequestPattern.test(url)
|
|
193
|
-
) {
|
|
249
|
+
if (isMainModuleBundleRequest(url)) {
|
|
194
250
|
return rewriteMainModuleBundleUrl(url, resolveMainModuleName)
|
|
195
251
|
}
|
|
196
|
-
return origRewriteRequestUrl(url)
|
|
252
|
+
return origRewriteRequestUrl?.(url) ?? url
|
|
197
253
|
}
|
|
198
254
|
}
|
|
199
255
|
|
|
200
256
|
const existingBlockList = _defaultConfig?.resolver?.blockList
|
|
201
|
-
const buildOutputExclusions = [
|
|
202
|
-
/[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
|
|
203
|
-
/[/\\]tests[/\\][^/\\]+[/\\]dist(?:[/\\]|$)/,
|
|
204
|
-
/[/\\]\.docker(?:[/\\]|$)/,
|
|
205
|
-
/[/\\]\.vite(?:[/\\]|$)/,
|
|
206
|
-
]
|
|
207
257
|
const blockList: RegExp[] = [
|
|
208
258
|
...(existingBlockList
|
|
209
259
|
? Array.isArray(existingBlockList)
|
|
210
260
|
? existingBlockList
|
|
211
261
|
: [existingBlockList]
|
|
212
262
|
: []),
|
|
213
|
-
...
|
|
263
|
+
...metroWatchExclusions,
|
|
214
264
|
]
|
|
215
265
|
|
|
216
266
|
// no babel by default. the worker throws on a babel plugin it has no port
|
|
@@ -230,6 +280,15 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
230
280
|
|
|
231
281
|
const defaultConfig: MetroInputConfig = {
|
|
232
282
|
..._defaultConfig,
|
|
283
|
+
watcher: {
|
|
284
|
+
..._defaultConfig?.watcher,
|
|
285
|
+
additionalExts: [
|
|
286
|
+
...new Set([
|
|
287
|
+
...(_defaultConfig?.watcher?.additionalExts ?? []),
|
|
288
|
+
...expoEnvAdditionalExts,
|
|
289
|
+
]),
|
|
290
|
+
],
|
|
291
|
+
},
|
|
233
292
|
resolver: {
|
|
234
293
|
..._defaultConfig?.resolver,
|
|
235
294
|
useWatchman,
|
|
@@ -266,6 +325,10 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
266
325
|
},
|
|
267
326
|
transformer: {
|
|
268
327
|
..._defaultConfig?.transformer,
|
|
328
|
+
// one's router and Expo's optional development env module both use
|
|
329
|
+
// require.context. Metro installs a throwing runtime stub unless this
|
|
330
|
+
// graph feature is enabled.
|
|
331
|
+
unstable_allowRequireContext: true,
|
|
269
332
|
babelTransformerPath: projectResolve(
|
|
270
333
|
projectRoot,
|
|
271
334
|
'@vxrn/vite-plugin-metro/babel-transformer'
|
|
@@ -284,7 +347,14 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
284
347
|
: defaultConfigOverrides),
|
|
285
348
|
}
|
|
286
349
|
|
|
287
|
-
return {
|
|
350
|
+
return {
|
|
351
|
+
defaultConfig: enforceBareMainModuleEntry(
|
|
352
|
+
enforceWorkspaceVisibility(merged, projectRoot),
|
|
353
|
+
mainModuleName
|
|
354
|
+
),
|
|
355
|
+
projectRoot,
|
|
356
|
+
extraConfig,
|
|
357
|
+
}
|
|
288
358
|
}
|
|
289
359
|
|
|
290
360
|
export async function getMetroConfigFromViteConfig(
|
|
@@ -310,81 +380,32 @@ export async function getMetroConfigFromViteConfig(
|
|
|
310
380
|
const { loadConfig } = await projectImport<{
|
|
311
381
|
loadConfig: typeof loadConfigT
|
|
312
382
|
}>(projectRoot, 'metro')
|
|
313
|
-
const
|
|
314
|
-
getDefaultConfig: typeof getDefaultConfigT
|
|
315
|
-
}>(projectRoot, '@expo/metro-config')
|
|
316
|
-
|
|
317
|
-
const _defaultConfig: MetroInputConfig = getDefaultConfig(projectRoot) as any
|
|
383
|
+
const _defaultConfig = getReactNativeDefaultConfig(projectRoot)
|
|
318
384
|
|
|
319
385
|
if (mainModuleName) {
|
|
320
|
-
const origRewriteRequestUrl = _defaultConfig!.server
|
|
321
|
-
|
|
322
|
-
// We need to patch Expo's default `config.server.rewriteRequestUrl`
|
|
323
|
-
// to change how URLs like '/.expo/.virtual-metro-entry.bundle?' are
|
|
324
|
-
// rewritten.
|
|
325
|
-
// But since that function is difficult to override, here we borrow
|
|
326
|
-
// the ExpoGoManifestHandlerMiddleware and use it to resolve the
|
|
327
|
-
// URL to the main module name.
|
|
328
|
-
const resolveMainModuleName: (p: { platform: 'ios' | 'android' }) => string =
|
|
329
|
-
await (async () => {
|
|
330
|
-
const ExpoGoManifestHandlerMiddleware = (
|
|
331
|
-
await projectImport(
|
|
332
|
-
projectRoot,
|
|
333
|
-
'@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js'
|
|
334
|
-
)
|
|
335
|
-
).default.ExpoGoManifestHandlerMiddleware
|
|
336
|
-
|
|
337
|
-
const manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(
|
|
338
|
-
projectRoot,
|
|
339
|
-
{}
|
|
340
|
-
)
|
|
341
|
-
|
|
342
|
-
patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(
|
|
343
|
-
manifestHandlerMiddleware,
|
|
344
|
-
mainModuleName
|
|
345
|
-
)
|
|
346
|
-
|
|
347
|
-
return (p) => {
|
|
348
|
-
return manifestHandlerMiddleware.resolveMainModuleName({
|
|
349
|
-
pkg: { main: mainModuleName },
|
|
350
|
-
platform: p.platform,
|
|
351
|
-
})
|
|
352
|
-
}
|
|
353
|
-
})()
|
|
386
|
+
const origRewriteRequestUrl = _defaultConfig!.server?.rewriteRequestUrl
|
|
387
|
+
const resolveMainModuleName = () => mainModuleName
|
|
354
388
|
|
|
355
389
|
extraConfig.getResolveMainModuleName = resolveMainModuleName
|
|
356
390
|
|
|
357
391
|
// @ts-expect-error Metro 0.83 made this read-only in types but we need to patch it
|
|
358
392
|
_defaultConfig!.server!.rewriteRequestUrl = (url) => {
|
|
359
|
-
if (
|
|
360
|
-
url.includes('/.expo/.virtual-metro-entry.bundle?') ||
|
|
361
|
-
rootIndexBundleRequestPattern.test(url)
|
|
362
|
-
) {
|
|
393
|
+
if (isMainModuleBundleRequest(url)) {
|
|
363
394
|
return rewriteMainModuleBundleUrl(url, resolveMainModuleName)
|
|
364
395
|
}
|
|
365
396
|
|
|
366
|
-
return origRewriteRequestUrl(url)
|
|
397
|
+
return origRewriteRequestUrl?.(url) ?? url
|
|
367
398
|
}
|
|
368
399
|
}
|
|
369
400
|
|
|
370
|
-
// exclude app-level build output directories from Metro's watcher to prevent
|
|
371
|
-
// FallbackWatcher from crashing on volatile dirs during parallel CI runs.
|
|
372
|
-
// block test app dist dirs and one's web build outputs, but not package
|
|
373
|
-
// dist/ dirs which Metro needs for module resolution.
|
|
374
401
|
const existingBlockList = _defaultConfig?.resolver?.blockList
|
|
375
|
-
const buildOutputExclusions = [
|
|
376
|
-
/[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
|
|
377
|
-
/[/\\]tests[/\\][^/\\]+[/\\]dist(?:[/\\]|$)/,
|
|
378
|
-
/[/\\]\.docker(?:[/\\]|$)/,
|
|
379
|
-
/[/\\]\.vite(?:[/\\]|$)/,
|
|
380
|
-
]
|
|
381
402
|
const blockList: RegExp[] = [
|
|
382
403
|
...(existingBlockList
|
|
383
404
|
? Array.isArray(existingBlockList)
|
|
384
405
|
? existingBlockList
|
|
385
406
|
: [existingBlockList]
|
|
386
407
|
: []),
|
|
387
|
-
...
|
|
408
|
+
...metroWatchExclusions,
|
|
388
409
|
]
|
|
389
410
|
|
|
390
411
|
// no babel by default. the worker throws on a babel plugin it has no port
|
|
@@ -404,6 +425,15 @@ export async function getMetroConfigFromViteConfig(
|
|
|
404
425
|
|
|
405
426
|
const defaultConfig: MetroInputConfig = {
|
|
406
427
|
..._defaultConfig,
|
|
428
|
+
watcher: {
|
|
429
|
+
..._defaultConfig?.watcher,
|
|
430
|
+
additionalExts: [
|
|
431
|
+
...new Set([
|
|
432
|
+
...(_defaultConfig?.watcher?.additionalExts ?? []),
|
|
433
|
+
...expoEnvAdditionalExts,
|
|
434
|
+
]),
|
|
435
|
+
],
|
|
436
|
+
},
|
|
407
437
|
resolver: {
|
|
408
438
|
..._defaultConfig?.resolver,
|
|
409
439
|
useWatchman,
|
|
@@ -448,6 +478,10 @@ export async function getMetroConfigFromViteConfig(
|
|
|
448
478
|
},
|
|
449
479
|
transformer: {
|
|
450
480
|
..._defaultConfig?.transformer,
|
|
481
|
+
// one's router and Expo's optional development env module both use
|
|
482
|
+
// require.context. Metro installs a throwing runtime stub unless this
|
|
483
|
+
// graph feature is enabled.
|
|
484
|
+
unstable_allowRequireContext: true,
|
|
451
485
|
babelTransformerPath: projectResolve(
|
|
452
486
|
projectRoot,
|
|
453
487
|
'@vxrn/vite-plugin-metro/babel-transformer'
|
|
@@ -475,7 +509,10 @@ export async function getMetroConfigFromViteConfig(
|
|
|
475
509
|
)
|
|
476
510
|
|
|
477
511
|
return {
|
|
478
|
-
...
|
|
512
|
+
...enforceBareMainModuleEntry(
|
|
513
|
+
enforceWorkspaceVisibility(metroConfig, projectRoot),
|
|
514
|
+
mainModuleName
|
|
515
|
+
),
|
|
479
516
|
...extraConfig,
|
|
480
517
|
} as MetroConfigExtended
|
|
481
518
|
}
|
|
@@ -9,8 +9,7 @@ import { checkAndClearMetroCacheFromVite } from '../utils/metroCacheManager'
|
|
|
9
9
|
|
|
10
10
|
const { debug } = createDebugger('vite-plugin-metro')
|
|
11
11
|
|
|
12
|
-
//
|
|
13
|
-
// We use `projectImport` to dynamically import the actual modules
|
|
12
|
+
// for Metro, we only import types here. `projectImport` loads the actual modules
|
|
14
13
|
// at runtime to ensure they are loaded from the user's project root.
|
|
15
14
|
import type MetroT from 'metro'
|
|
16
15
|
import type { loadConfig as loadConfigT } from 'metro'
|
|
@@ -72,10 +71,8 @@ export type MetroPluginOptions = {
|
|
|
72
71
|
/**
|
|
73
72
|
* Overrides the main module name which is normally defined as the `main` field in `package.json`.
|
|
74
73
|
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* It can be used to change the entry point of the React Native app without the need of using
|
|
78
|
-
* the `main` field in `package.json`.
|
|
74
|
+
* Changes the React Native entry point without requiring a `main` field in
|
|
75
|
+
* `package.json`.
|
|
79
76
|
*/
|
|
80
77
|
mainModuleName?: string
|
|
81
78
|
/**
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import vm from 'node:vm'
|
|
4
|
+
import { describe, expect, it } from 'vitest'
|
|
5
|
+
|
|
6
|
+
import { transformFromAstSync } from './babel-core'
|
|
7
|
+
// @ts-expect-error: module.exports = has no default export in types, runtime interop provides it
|
|
8
|
+
import babelTransformer from './babel-transformer'
|
|
9
|
+
|
|
10
|
+
const fixturesDir = path.join(
|
|
11
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
12
|
+
'__fixtures__'
|
|
13
|
+
)
|
|
14
|
+
const virtualFilename = '/proj/node_modules/expo/virtual/env.js'
|
|
15
|
+
const virtualSource = 'export const env = process.env;'
|
|
16
|
+
|
|
17
|
+
function runBabelTransform(src: string, filename: string, dev: boolean): any {
|
|
18
|
+
// the transformer leaks BABEL_ENV=development when it was previously
|
|
19
|
+
// unset; keep that pre-existing leak out of sibling tests.
|
|
20
|
+
const OLD_BABEL_ENV = process.env.BABEL_ENV
|
|
21
|
+
try {
|
|
22
|
+
return (babelTransformer as any).transform({
|
|
23
|
+
filename,
|
|
24
|
+
src,
|
|
25
|
+
options: {
|
|
26
|
+
projectRoot: fixturesDir,
|
|
27
|
+
dev,
|
|
28
|
+
platform: 'ios',
|
|
29
|
+
customTransformOptions: {
|
|
30
|
+
environment: 'client',
|
|
31
|
+
vite: {
|
|
32
|
+
oneViteMetroBabelConfig: true,
|
|
33
|
+
babelConfig: {
|
|
34
|
+
babelrc: false,
|
|
35
|
+
configFile: false,
|
|
36
|
+
presets: [],
|
|
37
|
+
plugins: [],
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
plugins: [],
|
|
43
|
+
})
|
|
44
|
+
} finally {
|
|
45
|
+
if (OLD_BABEL_ENV === undefined) {
|
|
46
|
+
delete process.env.BABEL_ENV
|
|
47
|
+
} else {
|
|
48
|
+
process.env.BABEL_ENV = OLD_BABEL_ENV
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function codegen(ast: any, filename: string): string {
|
|
54
|
+
const out = transformFromAstSync(ast, virtualSource, {
|
|
55
|
+
filename,
|
|
56
|
+
babelrc: false,
|
|
57
|
+
configFile: false,
|
|
58
|
+
code: true,
|
|
59
|
+
ast: false,
|
|
60
|
+
})
|
|
61
|
+
if (!out?.code) {
|
|
62
|
+
throw new Error('codegen produced no code')
|
|
63
|
+
}
|
|
64
|
+
return out.code
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function runCjs(
|
|
68
|
+
code: string,
|
|
69
|
+
opts: { requireImpl: (...args: any[]) => any; procEnv: Record<string, string> }
|
|
70
|
+
) {
|
|
71
|
+
const module = { exports: {} as any }
|
|
72
|
+
vm.runInNewContext(code, {
|
|
73
|
+
require: opts.requireImpl,
|
|
74
|
+
module,
|
|
75
|
+
exports: module.exports,
|
|
76
|
+
process: { env: opts.procEnv },
|
|
77
|
+
console,
|
|
78
|
+
})
|
|
79
|
+
return module.exports
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const noRequire = () => {
|
|
83
|
+
throw new Error('unexpected require call')
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
describe('babel-transformer optional expo virtual env', () => {
|
|
87
|
+
it('merges .env files over process.env in dev like upstream', () => {
|
|
88
|
+
const result = runBabelTransform(virtualSource, virtualFilename, true)
|
|
89
|
+
expect(result.ast).toBeTruthy()
|
|
90
|
+
const code = codegen(result.ast, virtualFilename)
|
|
91
|
+
expect(code).toContain('require.context')
|
|
92
|
+
expect(code).toContain('.env.development.local')
|
|
93
|
+
const contextModule: any = () => ({
|
|
94
|
+
default: { EXPO_PUBLIC_SENTINEL_DOTENV: 'dotenv-sentinel-value' },
|
|
95
|
+
})
|
|
96
|
+
contextModule.keys = () => ['./.env']
|
|
97
|
+
const requireImpl: any = noRequire
|
|
98
|
+
requireImpl.context = () => contextModule
|
|
99
|
+
const mod = runCjs(code, {
|
|
100
|
+
requireImpl,
|
|
101
|
+
procEnv: { EXPO_PUBLIC_SENTINEL_PROC: 'proc-sentinel-value' },
|
|
102
|
+
})
|
|
103
|
+
expect(mod.env.EXPO_PUBLIC_SENTINEL_DOTENV).toBe('dotenv-sentinel-value')
|
|
104
|
+
expect(mod.env.EXPO_PUBLIC_SENTINEL_PROC).toBe('proc-sentinel-value')
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it('throws a naming error in production like upstream', () => {
|
|
108
|
+
const result = runBabelTransform(virtualSource, virtualFilename, false)
|
|
109
|
+
expect(result.ast).toBeTruthy()
|
|
110
|
+
const mod = runCjs(codegen(result.ast, virtualFilename), {
|
|
111
|
+
requireImpl: noRequire,
|
|
112
|
+
procEnv: {},
|
|
113
|
+
})
|
|
114
|
+
expect(() => mod.env.EXPO_PUBLIC_ANYTHING).toThrow(
|
|
115
|
+
'not supported in production bundles'
|
|
116
|
+
)
|
|
117
|
+
})
|
|
118
|
+
})
|