@vxrn/vite-plugin-metro 2.0.0-beta.33.1 → 2.0.0-beta.362.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 +303 -257
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.cjs +361 -0
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +327 -267
- 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 +155 -151
- package/dist/cjs/transformer/babel-transformer.native.cjs +197 -0
- package/dist/cjs/transformer/babel-transformer.native.js +171 -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 +1436 -1489
- package/dist/cjs/transformer/metroNativeWorker.native.cjs +2525 -0
- package/dist/cjs/transformer/metroNativeWorker.native.js +2414 -2561
- 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 +287 -232
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -1
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +311 -243
- 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 +139 -132
- package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
- package/dist/esm/transformer/babel-transformer.native.js +152 -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 +1399 -1443
- package/dist/esm/transformer/metroNativeWorker.mjs.map +1 -1
- package/dist/esm/transformer/metroNativeWorker.native.js +2377 -2516
- 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 +16 -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 +263 -0
- package/src/metro-config/getMetroConfigFromViteConfig.ts +226 -109
- package/src/metro-config/glbAssets.test.ts +57 -0
- package/src/plugins/metroPlugin.ts +3 -6
- package/src/transformer/babel-transformer.test.ts +118 -0
- package/src/transformer/babel-transformer.ts +102 -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 +3 -1
- package/src/transformer/metroNativeWorker.test.ts +425 -36
- package/src/transformer/metroNativeWorker.ts +72 -74
- package/src/transformer/swiftPackageTransform.test.ts +95 -0
- 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/loadBabelConfig.d.ts.map +1 -1
- 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 -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/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 -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/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,36 +1,85 @@
|
|
|
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
|
|
|
11
|
+
import { findUserBabelConfig } from '@vxrn/compiler'
|
|
12
12
|
import { projectImport, projectResolve } from '../utils/projectImport'
|
|
13
13
|
import { getTerminalReporter } from '../utils/getTerminalReporter'
|
|
14
|
-
import { patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName } from '../utils/patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName'
|
|
15
14
|
import type { MetroPluginOptions } from '../plugins/metroPlugin'
|
|
16
15
|
import type { ExtraConfig, MetroConfigExtended } from './types'
|
|
17
16
|
|
|
18
|
-
type MetroInputConfig = Parameters<typeof loadConfigT>[1]
|
|
17
|
+
type MetroInputConfig = NonNullable<Parameters<typeof loadConfigT>[1]>
|
|
19
18
|
|
|
20
19
|
const WATCHMAN_PROBE_TIMEOUT_MS = 2000
|
|
20
|
+
const expoEnvAdditionalExts = ['env', 'local', 'development']
|
|
21
|
+
// keep js before mjs so platform-aware .native.js wins for one dist.
|
|
22
|
+
const metroSourceExts = ['js', 'jsx', 'json', 'ts', 'tsx', 'mjs', 'cjs', 'swift', 'kt']
|
|
21
23
|
const watchmanResponsivePromises = new Map<string, Promise<boolean>>()
|
|
22
24
|
let didWarnAboutWatchmanFallback = false
|
|
23
25
|
const rootIndexBundleRequestPattern = /^(https?:\/\/[^/]+)?\/index\.bundle(?=$|[?#])/
|
|
26
|
+
// expo prebuild writes an AppDelegate (ios) and MainApplication (android) whose
|
|
27
|
+
// debug bundle url is `.expo/.virtual-metro-entry`. expo maps it to the main
|
|
28
|
+
// entry through server.rewriteRequestUrl (see @expo/metro-config
|
|
29
|
+
// src/rewriteRequestUrl.ts: `url.includes('/.expo/.virtual-metro-entry.bundle?')`
|
|
30
|
+
// rewrites to the resolved entry, preserving relative vs absolute shape and
|
|
31
|
+
// query). match that path to the same main entry as index.
|
|
32
|
+
const expoVirtualEntryBundleRequestPattern =
|
|
33
|
+
/^(https?:\/\/[^/]+)?\/\.expo\/\.virtual-metro-entry\.bundle(?=$|[?#])/
|
|
24
34
|
// keep app build output and volatile caches out of Metro's fallback watcher.
|
|
25
|
-
// package dist directories remain visible because Metro resolves modules from
|
|
35
|
+
// package dist directories remain visible because Metro resolves modules from
|
|
36
|
+
// them, including a dependency's own dist/server, so the app build output
|
|
37
|
+
// pattern never matches inside node_modules.
|
|
26
38
|
const metroWatchExclusions = [
|
|
27
|
-
|
|
39
|
+
/^(?!.*[/\\]node_modules[/\\]).*[/\\]dist[/\\](?:static|server)(?:[/\\]|$)/,
|
|
28
40
|
/[/\\]tests[/\\][^/\\]+[/\\]dist(?:[/\\]|$)/,
|
|
29
41
|
/[/\\]\.docker(?:[/\\]|$)/,
|
|
30
42
|
/[/\\]\.vite(?:[/\\]|$)/,
|
|
31
43
|
/[/\\]node_modules[/\\]\.vxrn(?:[/\\]|$)/,
|
|
32
44
|
]
|
|
33
45
|
|
|
46
|
+
function enforceWorkspaceVisibility(
|
|
47
|
+
config: MetroInputConfig,
|
|
48
|
+
projectRoot: string
|
|
49
|
+
): MetroInputConfig {
|
|
50
|
+
const workspaceRoot = searchForWorkspaceRoot(projectRoot)
|
|
51
|
+
if (workspaceRoot === projectRoot) return config
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
...config,
|
|
55
|
+
watchFolders: [...new Set([...(config.watchFolders ?? []), workspaceRoot])],
|
|
56
|
+
resolver: {
|
|
57
|
+
...config.resolver,
|
|
58
|
+
nodeModulesPaths: [
|
|
59
|
+
...new Set([
|
|
60
|
+
...(config.resolver?.nodeModulesPaths ?? []),
|
|
61
|
+
resolve(projectRoot, 'node_modules'),
|
|
62
|
+
resolve(workspaceRoot, 'node_modules'),
|
|
63
|
+
]),
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function getReactNativeDefaultConfig(projectRoot: string): MetroInputConfig {
|
|
70
|
+
const config = enforceWorkspaceVisibility(
|
|
71
|
+
getDefaultConfig(projectRoot) as MetroInputConfig,
|
|
72
|
+
projectRoot
|
|
73
|
+
)
|
|
74
|
+
return {
|
|
75
|
+
...config,
|
|
76
|
+
resolver: {
|
|
77
|
+
...config.resolver,
|
|
78
|
+
assetExts: [...new Set([...(config.resolver?.assetExts ?? []), 'glb'])],
|
|
79
|
+
},
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
34
83
|
function getPlatformFromBundleUrl(url: string): 'ios' | 'android' {
|
|
35
84
|
const platform = url.match(/[?&]platform=(ios|android)(?:&|$)/)?.[1]
|
|
36
85
|
return platform === 'android' ? 'android' : 'ios'
|
|
@@ -44,11 +93,76 @@ function rewriteMainModuleBundleUrl(
|
|
|
44
93
|
platform: getPlatformFromBundleUrl(url),
|
|
45
94
|
})
|
|
46
95
|
|
|
47
|
-
if (
|
|
48
|
-
return url.replace(
|
|
96
|
+
if (rootIndexBundleRequestPattern.test(url)) {
|
|
97
|
+
return url.replace(
|
|
98
|
+
rootIndexBundleRequestPattern,
|
|
99
|
+
`$1/${resolvedMainModulePath}.bundle`
|
|
100
|
+
)
|
|
49
101
|
}
|
|
102
|
+
return url.replace(
|
|
103
|
+
expoVirtualEntryBundleRequestPattern,
|
|
104
|
+
`$1/${resolvedMainModulePath}.bundle`
|
|
105
|
+
)
|
|
106
|
+
}
|
|
50
107
|
|
|
51
|
-
|
|
108
|
+
function isMainModuleBundleRequest(url: string) {
|
|
109
|
+
return (
|
|
110
|
+
rootIndexBundleRequestPattern.test(url) ||
|
|
111
|
+
expoVirtualEntryBundleRequestPattern.test(url)
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function isBareSpecifier(name: string) {
|
|
116
|
+
return name !== '' && !name.startsWith('.') && !name.startsWith('/')
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// metro parses `/one/metro-entry.bundle` to the entry `./one/metro-entry`
|
|
120
|
+
// relative to the server root, which misses node_modules package lookup.
|
|
121
|
+
function bareMainModuleForRequest(
|
|
122
|
+
moduleName: string,
|
|
123
|
+
mainModuleName: string | undefined
|
|
124
|
+
) {
|
|
125
|
+
if (!mainModuleName || !isBareSpecifier(mainModuleName)) return undefined
|
|
126
|
+
if (moduleName === `./${mainModuleName}`) return mainModuleName
|
|
127
|
+
return undefined
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// defaultConfigOverrides and Metro config loading can replace the resolver.
|
|
131
|
+
// enforce entry and vite dedupe semantics on the final resolver while
|
|
132
|
+
// preserving its platform, export conditions and custom resolution policy.
|
|
133
|
+
function enforcePackageResolution(
|
|
134
|
+
config: MetroInputConfig,
|
|
135
|
+
mainModuleName: string | undefined,
|
|
136
|
+
dedupe: readonly string[],
|
|
137
|
+
projectRoot: string
|
|
138
|
+
): MetroInputConfig {
|
|
139
|
+
const dedupedPackages = new Set(dedupe)
|
|
140
|
+
if ((!mainModuleName || !isBareSpecifier(mainModuleName)) && !dedupedPackages.size) {
|
|
141
|
+
return config
|
|
142
|
+
}
|
|
143
|
+
const rootOrigin = resolve(projectRoot, 'package.json')
|
|
144
|
+
const innerResolveRequest = config.resolver?.resolveRequest
|
|
145
|
+
return {
|
|
146
|
+
...config,
|
|
147
|
+
resolver: {
|
|
148
|
+
...config.resolver,
|
|
149
|
+
resolveRequest: (context, moduleName, platform) => {
|
|
150
|
+
const bareMain = bareMainModuleForRequest(moduleName, mainModuleName)
|
|
151
|
+
const request = bareMain ?? moduleName
|
|
152
|
+
const packageEnd = request.indexOf(
|
|
153
|
+
'/',
|
|
154
|
+
request.startsWith('@') ? request.indexOf('/') + 1 : 0
|
|
155
|
+
)
|
|
156
|
+
const packageName = packageEnd === -1 ? request : request.slice(0, packageEnd)
|
|
157
|
+
const resolutionContext =
|
|
158
|
+
isBareSpecifier(request) && dedupedPackages.has(packageName)
|
|
159
|
+
? { ...context, originModulePath: rootOrigin }
|
|
160
|
+
: context
|
|
161
|
+
const resolveRequest = innerResolveRequest || context.resolveRequest
|
|
162
|
+
return resolveRequest(resolutionContext, request, platform)
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
}
|
|
52
166
|
}
|
|
53
167
|
|
|
54
168
|
async function isWatchmanResponsive(projectRoot: string) {
|
|
@@ -89,11 +203,52 @@ async function isWatchmanResponsive(projectRoot: string) {
|
|
|
89
203
|
return probe
|
|
90
204
|
}
|
|
91
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Decides whether Metro runs the native worker or the babel transformer.
|
|
208
|
+
* No babel by default: the worker throws on a babel plugin it has no port
|
|
209
|
+
* for, so opting back in is explicit rather than something you drift into.
|
|
210
|
+
* When a user adds a custom babel config, respect it rather than forcing
|
|
211
|
+
* native transforms, unless explicitly overridden. Shared by both config
|
|
212
|
+
* builders so the two never drift apart.
|
|
213
|
+
*/
|
|
214
|
+
function resolveNativeTransforms(
|
|
215
|
+
projectRoot: string,
|
|
216
|
+
metroPluginOptions: MetroPluginOptions
|
|
217
|
+
): { isNativeTransforms: boolean; userBabelConfigPath: string | null } {
|
|
218
|
+
const userBabelConfigPath = projectRoot ? findUserBabelConfig(projectRoot) : null
|
|
219
|
+
const hasUserBabelConfig = Boolean(userBabelConfigPath)
|
|
220
|
+
|
|
221
|
+
const isNativeTransforms =
|
|
222
|
+
process.env.ONE_METRO_NATIVE_TRANSFORMS === '0'
|
|
223
|
+
? false
|
|
224
|
+
: process.env.ONE_METRO_NATIVE_TRANSFORMS === '1'
|
|
225
|
+
? true
|
|
226
|
+
: metroPluginOptions.nativeTransforms === false
|
|
227
|
+
? false
|
|
228
|
+
: metroPluginOptions.nativeTransforms === true
|
|
229
|
+
? true
|
|
230
|
+
: hasUserBabelConfig
|
|
231
|
+
? false
|
|
232
|
+
: true
|
|
233
|
+
|
|
234
|
+
// the native worker runs no babel at all, so reaching it here means an
|
|
235
|
+
// explicit override is about to silently drop the user's plugins. name the
|
|
236
|
+
// ignored file rather than swallowing it.
|
|
237
|
+
if (userBabelConfigPath && isNativeTransforms) {
|
|
238
|
+
console.warn(
|
|
239
|
+
`[vxrn/metro] Ignoring user babel config at ${userBabelConfigPath} because native transforms are explicitly enabled (nativeTransforms: true or ONE_METRO_NATIVE_TRANSFORMS=1). ` +
|
|
240
|
+
`Port its plugins to nativeTransformModules, or set nativeTransforms: false (or ONE_METRO_NATIVE_TRANSFORMS=0) to use the babel transformer.`
|
|
241
|
+
)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return { isNativeTransforms, userBabelConfigPath }
|
|
245
|
+
}
|
|
246
|
+
|
|
92
247
|
/**
|
|
93
248
|
* Build the Metro config input WITHOUT calling Metro's `loadConfig`. Returns
|
|
94
249
|
* the same shape Metro `loadConfig` expects as its second argument. Use this
|
|
95
250
|
* from a project's `metro.config.cjs` so the outer `loadConfig` (driven by
|
|
96
|
-
*
|
|
251
|
+
* the Metro CLI) is the only one that runs. this avoids infinite
|
|
97
252
|
* recursion that would happen if the inner pipeline also called `loadConfig`
|
|
98
253
|
* and re-read the same metro.config.cjs.
|
|
99
254
|
*/
|
|
@@ -114,53 +269,20 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
114
269
|
)
|
|
115
270
|
}
|
|
116
271
|
|
|
117
|
-
const
|
|
118
|
-
getDefaultConfig: typeof getDefaultConfigT
|
|
119
|
-
}>(projectRoot, '@expo/metro-config')
|
|
120
|
-
|
|
121
|
-
const _defaultConfig: MetroInputConfig = getDefaultConfig(projectRoot) as any
|
|
272
|
+
const _defaultConfig = getReactNativeDefaultConfig(projectRoot)
|
|
122
273
|
|
|
123
274
|
if (mainModuleName) {
|
|
124
|
-
const origRewriteRequestUrl = _defaultConfig!.server
|
|
125
|
-
|
|
126
|
-
const resolveMainModuleName: (p: { platform: 'ios' | 'android' }) => string =
|
|
127
|
-
await (async () => {
|
|
128
|
-
const ExpoGoManifestHandlerMiddleware = (
|
|
129
|
-
await projectImport(
|
|
130
|
-
projectRoot,
|
|
131
|
-
'@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js'
|
|
132
|
-
)
|
|
133
|
-
).default.ExpoGoManifestHandlerMiddleware
|
|
134
|
-
|
|
135
|
-
const manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(
|
|
136
|
-
projectRoot,
|
|
137
|
-
{}
|
|
138
|
-
)
|
|
139
|
-
|
|
140
|
-
patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(
|
|
141
|
-
manifestHandlerMiddleware,
|
|
142
|
-
mainModuleName
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
return (p) => {
|
|
146
|
-
return manifestHandlerMiddleware.resolveMainModuleName({
|
|
147
|
-
pkg: { main: mainModuleName },
|
|
148
|
-
platform: p.platform,
|
|
149
|
-
})
|
|
150
|
-
}
|
|
151
|
-
})()
|
|
275
|
+
const origRewriteRequestUrl = _defaultConfig!.server?.rewriteRequestUrl
|
|
276
|
+
const resolveMainModuleName = () => mainModuleName
|
|
152
277
|
|
|
153
278
|
extraConfig.getResolveMainModuleName = resolveMainModuleName
|
|
154
279
|
|
|
155
280
|
// @ts-expect-error Metro 0.83 made this read-only in types but we need to patch it
|
|
156
281
|
_defaultConfig!.server!.rewriteRequestUrl = (url) => {
|
|
157
|
-
if (
|
|
158
|
-
url.includes('/.expo/.virtual-metro-entry.bundle?') ||
|
|
159
|
-
rootIndexBundleRequestPattern.test(url)
|
|
160
|
-
) {
|
|
282
|
+
if (isMainModuleBundleRequest(url)) {
|
|
161
283
|
return rewriteMainModuleBundleUrl(url, resolveMainModuleName)
|
|
162
284
|
}
|
|
163
|
-
return origRewriteRequestUrl(url)
|
|
285
|
+
return origRewriteRequestUrl?.(url) ?? url
|
|
164
286
|
}
|
|
165
287
|
}
|
|
166
288
|
|
|
@@ -176,11 +298,8 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
176
298
|
|
|
177
299
|
// no babel by default. the worker throws on a babel plugin it has no port
|
|
178
300
|
// 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
|
|
301
|
+
// When a user adds a custom babel config, respect it rather than forcing native transforms.
|
|
302
|
+
const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions)
|
|
184
303
|
|
|
185
304
|
let nativeWorkerPath: string | undefined
|
|
186
305
|
if (isNativeTransforms) {
|
|
@@ -194,11 +313,20 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
194
313
|
|
|
195
314
|
const defaultConfig: MetroInputConfig = {
|
|
196
315
|
..._defaultConfig,
|
|
316
|
+
watcher: {
|
|
317
|
+
..._defaultConfig?.watcher,
|
|
318
|
+
additionalExts: [
|
|
319
|
+
...new Set([
|
|
320
|
+
...(_defaultConfig?.watcher?.additionalExts ?? []),
|
|
321
|
+
...expoEnvAdditionalExts,
|
|
322
|
+
]),
|
|
323
|
+
],
|
|
324
|
+
},
|
|
197
325
|
resolver: {
|
|
198
326
|
..._defaultConfig?.resolver,
|
|
199
327
|
useWatchman,
|
|
200
328
|
blockList,
|
|
201
|
-
sourceExts:
|
|
329
|
+
sourceExts: metroSourceExts,
|
|
202
330
|
resolveRequest: (context, moduleName, platform) => {
|
|
203
331
|
const origResolveRequestFn =
|
|
204
332
|
_defaultConfig?.resolver?.resolveRequest || context.resolveRequest
|
|
@@ -230,6 +358,10 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
230
358
|
},
|
|
231
359
|
transformer: {
|
|
232
360
|
..._defaultConfig?.transformer,
|
|
361
|
+
// one's router and Expo's optional development env module both use
|
|
362
|
+
// require.context. Metro installs a throwing runtime stub unless this
|
|
363
|
+
// graph feature is enabled.
|
|
364
|
+
unstable_allowRequireContext: true,
|
|
233
365
|
babelTransformerPath: projectResolve(
|
|
234
366
|
projectRoot,
|
|
235
367
|
'@vxrn/vite-plugin-metro/babel-transformer'
|
|
@@ -248,7 +380,16 @@ export async function buildMetroConfigInputFromViteConfig(
|
|
|
248
380
|
: defaultConfigOverrides),
|
|
249
381
|
}
|
|
250
382
|
|
|
251
|
-
return {
|
|
383
|
+
return {
|
|
384
|
+
defaultConfig: enforcePackageResolution(
|
|
385
|
+
enforceWorkspaceVisibility(merged, projectRoot),
|
|
386
|
+
mainModuleName,
|
|
387
|
+
config.resolve?.dedupe ?? [],
|
|
388
|
+
projectRoot
|
|
389
|
+
),
|
|
390
|
+
projectRoot,
|
|
391
|
+
extraConfig,
|
|
392
|
+
}
|
|
252
393
|
}
|
|
253
394
|
|
|
254
395
|
export async function getMetroConfigFromViteConfig(
|
|
@@ -274,60 +415,21 @@ export async function getMetroConfigFromViteConfig(
|
|
|
274
415
|
const { loadConfig } = await projectImport<{
|
|
275
416
|
loadConfig: typeof loadConfigT
|
|
276
417
|
}>(projectRoot, 'metro')
|
|
277
|
-
const
|
|
278
|
-
getDefaultConfig: typeof getDefaultConfigT
|
|
279
|
-
}>(projectRoot, '@expo/metro-config')
|
|
280
|
-
|
|
281
|
-
const _defaultConfig: MetroInputConfig = getDefaultConfig(projectRoot) as any
|
|
418
|
+
const _defaultConfig = getReactNativeDefaultConfig(projectRoot)
|
|
282
419
|
|
|
283
420
|
if (mainModuleName) {
|
|
284
|
-
const origRewriteRequestUrl = _defaultConfig!.server
|
|
285
|
-
|
|
286
|
-
// We need to patch Expo's default `config.server.rewriteRequestUrl`
|
|
287
|
-
// to change how URLs like '/.expo/.virtual-metro-entry.bundle?' are
|
|
288
|
-
// rewritten.
|
|
289
|
-
// But since that function is difficult to override, here we borrow
|
|
290
|
-
// the ExpoGoManifestHandlerMiddleware and use it to resolve the
|
|
291
|
-
// URL to the main module name.
|
|
292
|
-
const resolveMainModuleName: (p: { platform: 'ios' | 'android' }) => string =
|
|
293
|
-
await (async () => {
|
|
294
|
-
const ExpoGoManifestHandlerMiddleware = (
|
|
295
|
-
await projectImport(
|
|
296
|
-
projectRoot,
|
|
297
|
-
'@expo/cli/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js'
|
|
298
|
-
)
|
|
299
|
-
).default.ExpoGoManifestHandlerMiddleware
|
|
300
|
-
|
|
301
|
-
const manifestHandlerMiddleware = new ExpoGoManifestHandlerMiddleware(
|
|
302
|
-
projectRoot,
|
|
303
|
-
{}
|
|
304
|
-
)
|
|
305
|
-
|
|
306
|
-
patchExpoGoManifestHandlerMiddlewareWithCustomMainModuleName(
|
|
307
|
-
manifestHandlerMiddleware,
|
|
308
|
-
mainModuleName
|
|
309
|
-
)
|
|
310
|
-
|
|
311
|
-
return (p) => {
|
|
312
|
-
return manifestHandlerMiddleware.resolveMainModuleName({
|
|
313
|
-
pkg: { main: mainModuleName },
|
|
314
|
-
platform: p.platform,
|
|
315
|
-
})
|
|
316
|
-
}
|
|
317
|
-
})()
|
|
421
|
+
const origRewriteRequestUrl = _defaultConfig!.server?.rewriteRequestUrl
|
|
422
|
+
const resolveMainModuleName = () => mainModuleName
|
|
318
423
|
|
|
319
424
|
extraConfig.getResolveMainModuleName = resolveMainModuleName
|
|
320
425
|
|
|
321
426
|
// @ts-expect-error Metro 0.83 made this read-only in types but we need to patch it
|
|
322
427
|
_defaultConfig!.server!.rewriteRequestUrl = (url) => {
|
|
323
|
-
if (
|
|
324
|
-
url.includes('/.expo/.virtual-metro-entry.bundle?') ||
|
|
325
|
-
rootIndexBundleRequestPattern.test(url)
|
|
326
|
-
) {
|
|
428
|
+
if (isMainModuleBundleRequest(url)) {
|
|
327
429
|
return rewriteMainModuleBundleUrl(url, resolveMainModuleName)
|
|
328
430
|
}
|
|
329
431
|
|
|
330
|
-
return origRewriteRequestUrl(url)
|
|
432
|
+
return origRewriteRequestUrl?.(url) ?? url
|
|
331
433
|
}
|
|
332
434
|
}
|
|
333
435
|
|
|
@@ -343,11 +445,8 @@ export async function getMetroConfigFromViteConfig(
|
|
|
343
445
|
|
|
344
446
|
// no babel by default. the worker throws on a babel plugin it has no port
|
|
345
447
|
// 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
|
|
448
|
+
// When a user adds a custom babel config, respect it rather than forcing native transforms.
|
|
449
|
+
const { isNativeTransforms } = resolveNativeTransforms(projectRoot, metroPluginOptions)
|
|
351
450
|
|
|
352
451
|
let nativeWorkerPath: string | undefined
|
|
353
452
|
if (isNativeTransforms) {
|
|
@@ -361,11 +460,20 @@ export async function getMetroConfigFromViteConfig(
|
|
|
361
460
|
|
|
362
461
|
const defaultConfig: MetroInputConfig = {
|
|
363
462
|
..._defaultConfig,
|
|
463
|
+
watcher: {
|
|
464
|
+
..._defaultConfig?.watcher,
|
|
465
|
+
additionalExts: [
|
|
466
|
+
...new Set([
|
|
467
|
+
...(_defaultConfig?.watcher?.additionalExts ?? []),
|
|
468
|
+
...expoEnvAdditionalExts,
|
|
469
|
+
]),
|
|
470
|
+
],
|
|
471
|
+
},
|
|
364
472
|
resolver: {
|
|
365
473
|
..._defaultConfig?.resolver,
|
|
366
474
|
useWatchman,
|
|
367
475
|
blockList,
|
|
368
|
-
sourceExts:
|
|
476
|
+
sourceExts: metroSourceExts,
|
|
369
477
|
resolveRequest: (context, moduleName, platform) => {
|
|
370
478
|
const origResolveRequestFn =
|
|
371
479
|
_defaultConfig?.resolver?.resolveRequest || context.resolveRequest
|
|
@@ -405,6 +513,10 @@ export async function getMetroConfigFromViteConfig(
|
|
|
405
513
|
},
|
|
406
514
|
transformer: {
|
|
407
515
|
..._defaultConfig?.transformer,
|
|
516
|
+
// one's router and Expo's optional development env module both use
|
|
517
|
+
// require.context. Metro installs a throwing runtime stub unless this
|
|
518
|
+
// graph feature is enabled.
|
|
519
|
+
unstable_allowRequireContext: true,
|
|
408
520
|
babelTransformerPath: projectResolve(
|
|
409
521
|
projectRoot,
|
|
410
522
|
'@vxrn/vite-plugin-metro/babel-transformer'
|
|
@@ -432,7 +544,12 @@ export async function getMetroConfigFromViteConfig(
|
|
|
432
544
|
)
|
|
433
545
|
|
|
434
546
|
return {
|
|
435
|
-
...
|
|
547
|
+
...enforcePackageResolution(
|
|
548
|
+
enforceWorkspaceVisibility(metroConfig, projectRoot),
|
|
549
|
+
mainModuleName,
|
|
550
|
+
config.resolve?.dedupe ?? [],
|
|
551
|
+
projectRoot
|
|
552
|
+
),
|
|
436
553
|
...extraConfig,
|
|
437
554
|
} as MetroConfigExtended
|
|
438
555
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'
|
|
2
|
+
import { join } from 'node:path'
|
|
3
|
+
import { runInNewContext } from 'node:vm'
|
|
4
|
+
import type { ResolvedConfig } from 'vite'
|
|
5
|
+
import { expect, it } from 'vitest'
|
|
6
|
+
import { buildMetroConfigInputFromViteConfig } from './getMetroConfigFromViteConfig'
|
|
7
|
+
import { transform } from '../transformer/metroNativeWorker'
|
|
8
|
+
|
|
9
|
+
it('classifies a binary GLB with stock Metro config and registers its identity', async () => {
|
|
10
|
+
const root = await mkdtemp(join(import.meta.dirname, '.glb-metro-'))
|
|
11
|
+
const bytes = Buffer.from([0x67, 0x6c, 0x54, 0x46, 2, 0, 0, 0, 0xff, 0x80, 0, 1])
|
|
12
|
+
await writeFile(join(root, 'sofa.glb'), bytes)
|
|
13
|
+
try {
|
|
14
|
+
const { defaultConfig } = await buildMetroConfigInputFromViteConfig(
|
|
15
|
+
{ root } as ResolvedConfig,
|
|
16
|
+
{ watchman: false }
|
|
17
|
+
)
|
|
18
|
+
const type = defaultConfig.resolver.assetExts.includes('glb') ? 'asset' : 'module'
|
|
19
|
+
const result = await transform(
|
|
20
|
+
{ assetRegistryPath: 'react-native/asset-registry', publicPath: '/assets' },
|
|
21
|
+
root,
|
|
22
|
+
'sofa.glb',
|
|
23
|
+
bytes,
|
|
24
|
+
{ dev: true, platform: 'ios', type }
|
|
25
|
+
)
|
|
26
|
+
expect(result.output[0].type).toBe('js/module/asset')
|
|
27
|
+
let descriptor: any
|
|
28
|
+
runInNewContext(result.output[0].data.code, {
|
|
29
|
+
__d: (factory: Function) =>
|
|
30
|
+
factory(
|
|
31
|
+
{},
|
|
32
|
+
() => ({
|
|
33
|
+
registerAsset: (asset: any) => {
|
|
34
|
+
descriptor = asset
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
37
|
+
{},
|
|
38
|
+
{},
|
|
39
|
+
{ exports: {} },
|
|
40
|
+
{},
|
|
41
|
+
[0]
|
|
42
|
+
),
|
|
43
|
+
})
|
|
44
|
+
expect(descriptor).toMatchObject({
|
|
45
|
+
name: 'sofa',
|
|
46
|
+
type: 'glb',
|
|
47
|
+
scales: [1],
|
|
48
|
+
httpServerLocation: '/assets',
|
|
49
|
+
})
|
|
50
|
+
expect(descriptor.hash).not.toBe('')
|
|
51
|
+
expect(descriptor.width).toBeUndefined()
|
|
52
|
+
expect(descriptor.height).toBeUndefined()
|
|
53
|
+
expect(await readFile(join(root, 'sofa.glb'))).toEqual(bytes)
|
|
54
|
+
} finally {
|
|
55
|
+
await rm(root, { recursive: true, force: true })
|
|
56
|
+
}
|
|
57
|
+
})
|
|
@@ -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
|
+
})
|