@vxrn/vite-plugin-metro 1.27.1 → 2.0.0-beta.101.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
|
@@ -35,33 +35,25 @@ const babelCalls = {
|
|
|
35
35
|
|
|
36
36
|
vi.mock('@babel/core', async (importOriginal) => {
|
|
37
37
|
const actual = await importOriginal<typeof import('@babel/core')>()
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
babelCalls.parse++
|
|
58
|
-
return (actual.parse as any)(...args)
|
|
59
|
-
}),
|
|
60
|
-
parseSync: vi.fn((...args: any[]) => {
|
|
61
|
-
babelCalls.parseSync++
|
|
62
|
-
return (actual.parseSync as any)(...args)
|
|
63
|
-
}),
|
|
64
|
-
}
|
|
38
|
+
const names = [
|
|
39
|
+
'transform',
|
|
40
|
+
'transformSync',
|
|
41
|
+
'transformAsync',
|
|
42
|
+
'transformFromAstSync',
|
|
43
|
+
'parse',
|
|
44
|
+
'parseSync',
|
|
45
|
+
] as const
|
|
46
|
+
const counted = Object.fromEntries(
|
|
47
|
+
names.map((name) => [
|
|
48
|
+
name,
|
|
49
|
+
vi.fn((...args: any[]) => {
|
|
50
|
+
babelCalls[name]++
|
|
51
|
+
return (actual[name] as any)(...args)
|
|
52
|
+
}),
|
|
53
|
+
])
|
|
54
|
+
)
|
|
55
|
+
// @vxrn/compiler reaches babel through the default export, so count that too
|
|
56
|
+
return { ...actual, ...counted, default: { ...actual, ...counted } }
|
|
65
57
|
})
|
|
66
58
|
|
|
67
59
|
// module scope so every describe in this file can assert it, not just the first
|
|
@@ -74,6 +66,20 @@ beforeEach(() => {
|
|
|
74
66
|
babelCalls.parseSync = 0
|
|
75
67
|
})
|
|
76
68
|
|
|
69
|
+
// flow stripping is the one place the worker runs babel: react-native's flow
|
|
70
|
+
// syntax (readonly properties, enums) is beyond fast-flow-transform, so the
|
|
71
|
+
// hermes-parser pass in @vxrn/compiler strips it in a single transform call
|
|
72
|
+
function assertOnlyFlowStripBabelCall() {
|
|
73
|
+
expect(babelCalls).toEqual({
|
|
74
|
+
transform: 1,
|
|
75
|
+
transformSync: 0,
|
|
76
|
+
transformAsync: 0,
|
|
77
|
+
transformFromAstSync: 0,
|
|
78
|
+
parse: 0,
|
|
79
|
+
parseSync: 0,
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
|
|
77
83
|
function assertZeroBabelCalls() {
|
|
78
84
|
expect(babelCalls.transform).toBe(0)
|
|
79
85
|
expect(babelCalls.transformSync).toBe(0)
|
|
@@ -240,7 +246,9 @@ describe('metroNativeWorker', () => {
|
|
|
240
246
|
off.find((d) => d.name === 'react-native-worklets-core')!.data.isOptional
|
|
241
247
|
).toBeUndefined()
|
|
242
248
|
|
|
243
|
-
const on = extractDependencies(code, 'setup.js', {
|
|
249
|
+
const on = extractDependencies(code, 'setup.js', {
|
|
250
|
+
allowOptionalDependencies: true,
|
|
251
|
+
})
|
|
244
252
|
expect(on.find((d) => d.name === 'react-native-worklets-core')!.data.isOptional).toBe(
|
|
245
253
|
true
|
|
246
254
|
)
|
|
@@ -403,7 +411,7 @@ describe('metroNativeWorker', () => {
|
|
|
403
411
|
it('handles Asset files without Babel', async () => {
|
|
404
412
|
const result = await transform(
|
|
405
413
|
{
|
|
406
|
-
assetRegistryPath: 'react-native/
|
|
414
|
+
assetRegistryPath: 'react-native/asset-registry',
|
|
407
415
|
publicPath: '/assets',
|
|
408
416
|
},
|
|
409
417
|
'/project',
|
|
@@ -418,10 +426,10 @@ describe('metroNativeWorker', () => {
|
|
|
418
426
|
expect(result.output[0].data.code).toContain('__d(function')
|
|
419
427
|
|
|
420
428
|
const depNames = result.dependencies.map((d) => d.name)
|
|
421
|
-
expect(depNames).toContain('react-native/
|
|
429
|
+
expect(depNames).toContain('react-native/asset-registry')
|
|
422
430
|
})
|
|
423
431
|
|
|
424
|
-
it('
|
|
432
|
+
it('strips Flow types with a single hermes-parser Babel pass', async () => {
|
|
425
433
|
const flowSource = `
|
|
426
434
|
// @flow
|
|
427
435
|
function add(a: number, b: number): number {
|
|
@@ -438,11 +446,41 @@ describe('metroNativeWorker', () => {
|
|
|
438
446
|
{ dev: false, platform: 'ios', type: 'module' }
|
|
439
447
|
)
|
|
440
448
|
|
|
441
|
-
|
|
449
|
+
assertOnlyFlowStripBabelCall()
|
|
442
450
|
expect(result.output[0].data.code).not.toContain(': number')
|
|
443
451
|
expect(result.output[0].data.code).toContain('function add(a, b)')
|
|
444
452
|
})
|
|
445
453
|
|
|
454
|
+
it('lowers React Native Flow enums and readonly properties', async () => {
|
|
455
|
+
// react-native 0.87 ships VirtualView.js with exported Flow enums, and
|
|
456
|
+
// readonly object properties throughout its type declarations
|
|
457
|
+
const flowSource = `
|
|
458
|
+
// @flow strict-local
|
|
459
|
+
type Props = { readonly state: VirtualViewRenderState };
|
|
460
|
+
export enum VirtualViewRenderState {
|
|
461
|
+
Unknown = 0,
|
|
462
|
+
Rendered = 1,
|
|
463
|
+
None = 2,
|
|
464
|
+
}
|
|
465
|
+
export function isRendered(state: VirtualViewRenderState): boolean {
|
|
466
|
+
return state === VirtualViewRenderState.Rendered;
|
|
467
|
+
}
|
|
468
|
+
`
|
|
469
|
+
|
|
470
|
+
const result = await transform(
|
|
471
|
+
{},
|
|
472
|
+
'/project',
|
|
473
|
+
'node_modules/react-native/src/private/components/virtualview/VirtualView.js',
|
|
474
|
+
Buffer.from(flowSource, 'utf8'),
|
|
475
|
+
{ dev: false, platform: 'ios', type: 'module' }
|
|
476
|
+
)
|
|
477
|
+
|
|
478
|
+
assertOnlyFlowStripBabelCall()
|
|
479
|
+
expect(result.output[0].data.code).not.toContain('enum VirtualViewRenderState')
|
|
480
|
+
expect(result.output[0].data.code).not.toContain('readonly')
|
|
481
|
+
expect(result.dependencies.map((d) => d.name)).toContain('flow-enums-runtime')
|
|
482
|
+
})
|
|
483
|
+
|
|
446
484
|
it('generates a deterministic cache key without Babel', () => {
|
|
447
485
|
const key1 = getCacheKey(
|
|
448
486
|
{ globalPrefix: '__one_', minifierPath: 'terser' },
|
|
@@ -474,7 +512,7 @@ describe('metroNativeWorker', () => {
|
|
|
474
512
|
expect(configDefault.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
475
513
|
expect(configDefault.defaultConfig.transformer.transformerPath).toBeUndefined()
|
|
476
514
|
|
|
477
|
-
// Opting back into babel via metroPluginOptions leaves
|
|
515
|
+
// Opting back into babel via metroPluginOptions leaves Metro's default
|
|
478
516
|
// worker in the key, which is itself proof that top level is where metro
|
|
479
517
|
// reads it from.
|
|
480
518
|
const configOptOff = await buildMetroConfigInputFromViteConfig(mockViteConfig, {
|
|
@@ -496,6 +534,29 @@ describe('metroNativeWorker', () => {
|
|
|
496
534
|
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
497
535
|
})
|
|
498
536
|
|
|
537
|
+
it('excludes volatile compiler caches from Metro without hiding package output', async () => {
|
|
538
|
+
const config = await buildMetroConfigInputFromViteConfig(
|
|
539
|
+
{ root: process.cwd() } as any,
|
|
540
|
+
{ watchman: false }
|
|
541
|
+
)
|
|
542
|
+
const blockList = config.defaultConfig.resolver.blockList as RegExp[]
|
|
543
|
+
const isBlocked = (file: string) => blockList.some((pattern) => pattern.test(file))
|
|
544
|
+
|
|
545
|
+
expect(
|
|
546
|
+
isBlocked(
|
|
547
|
+
'/home/runner/work/one/one/tests/test-app-cases/node_modules/.vxrn/compiler-cache'
|
|
548
|
+
)
|
|
549
|
+
).toBe(true)
|
|
550
|
+
expect(
|
|
551
|
+
isBlocked(
|
|
552
|
+
'C:\\workspace\\tests\\test-app-cases\\node_modules\\.vxrn\\compiler-cache'
|
|
553
|
+
)
|
|
554
|
+
).toBe(true)
|
|
555
|
+
expect(isBlocked('/home/runner/work/one/one/packages/one/dist/esm/index.mjs')).toBe(
|
|
556
|
+
false
|
|
557
|
+
)
|
|
558
|
+
})
|
|
559
|
+
|
|
499
560
|
it('falls back to default Metro babel transformer when a user babel config exists', async () => {
|
|
500
561
|
const tempDir = path.join(process.cwd(), `.tmp-metro-test-${Date.now()}`)
|
|
501
562
|
fs.mkdirSync(tempDir, { recursive: true })
|
|
@@ -508,9 +569,12 @@ describe('metroNativeWorker', () => {
|
|
|
508
569
|
const config1 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
509
570
|
expect(config1.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
510
571
|
|
|
511
|
-
//
|
|
572
|
+
// a config written by `one patch` is ignored, still uses metroNativeWorker
|
|
512
573
|
const babelConfigPath = path.join(tempDir, 'babel.config.js')
|
|
513
|
-
fs.writeFileSync(
|
|
574
|
+
fs.writeFileSync(
|
|
575
|
+
babelConfigPath,
|
|
576
|
+
'// @one/generated bundler-config\nmodule.exports = {}'
|
|
577
|
+
)
|
|
514
578
|
const config2 = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
515
579
|
expect(config2.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
516
580
|
|
|
@@ -547,9 +611,7 @@ describe('metroNativeWorker', () => {
|
|
|
547
611
|
delete process.env.ONE_METRO_NATIVE_TRANSFORMS
|
|
548
612
|
const mockViteConfig = { root: tempDir } as any
|
|
549
613
|
const warnsWithConfig = (spy: any) =>
|
|
550
|
-
spy.mock.calls.some((args: any[]) =>
|
|
551
|
-
args.join(' ').includes(babelConfigPath)
|
|
552
|
-
)
|
|
614
|
+
spy.mock.calls.some((args: any[]) => args.join(' ').includes(babelConfigPath))
|
|
553
615
|
|
|
554
616
|
// explicit option force still uses the worker, but names the dropped config
|
|
555
617
|
const optionWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
@@ -579,9 +641,7 @@ describe('metroNativeWorker', () => {
|
|
|
579
641
|
const respectedWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
580
642
|
try {
|
|
581
643
|
const respected = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
582
|
-
expect(respected.defaultConfig.transformerPath).not.toContain(
|
|
583
|
-
'metroNativeWorker'
|
|
584
|
-
)
|
|
644
|
+
expect(respected.defaultConfig.transformerPath).not.toContain('metroNativeWorker')
|
|
585
645
|
expect(warnsWithConfig(respectedWarn)).toBe(false)
|
|
586
646
|
} finally {
|
|
587
647
|
respectedWarn.mockRestore()
|
|
@@ -610,10 +670,7 @@ describe('metroNativeWorker', () => {
|
|
|
610
670
|
// user config: both builders fall back to the babel transformer
|
|
611
671
|
const babelConfigPath = path.join(tempDir, 'babel.config.js')
|
|
612
672
|
fs.writeFileSync(babelConfigPath, 'module.exports = { plugins: [] }')
|
|
613
|
-
const fallbackInput = await buildMetroConfigInputFromViteConfig(
|
|
614
|
-
mockViteConfig,
|
|
615
|
-
{}
|
|
616
|
-
)
|
|
673
|
+
const fallbackInput = await buildMetroConfigInputFromViteConfig(mockViteConfig, {})
|
|
617
674
|
const fallbackFull = await getMetroConfigFromViteConfig(mockViteConfig, {})
|
|
618
675
|
expect(fallbackInput.defaultConfig.transformerPath).not.toContain(
|
|
619
676
|
'metroNativeWorker'
|
|
@@ -629,9 +686,7 @@ describe('metroNativeWorker', () => {
|
|
|
629
686
|
const forcedFull = await getMetroConfigFromViteConfig(mockViteConfig, {
|
|
630
687
|
nativeTransforms: true,
|
|
631
688
|
})
|
|
632
|
-
expect(forcedInput.defaultConfig.transformerPath).toContain(
|
|
633
|
-
'metroNativeWorker'
|
|
634
|
-
)
|
|
689
|
+
expect(forcedInput.defaultConfig.transformerPath).toContain('metroNativeWorker')
|
|
635
690
|
expect((forcedFull as any).transformerPath).toContain('metroNativeWorker')
|
|
636
691
|
expect(
|
|
637
692
|
forcedWarn.mock.calls.some((args: any[]) =>
|
|
@@ -1262,7 +1317,11 @@ describe('one native transform ports', () => {
|
|
|
1262
1317
|
it('inlines import.meta.env reads, which oxc otherwise lowers to an empty object', () => {
|
|
1263
1318
|
// oxc's CJS lowering emits `var import_meta = {}`, so an untouched
|
|
1264
1319
|
// `import.meta.env.X` silently reads undefined in every native bundle.
|
|
1265
|
-
const env = {
|
|
1320
|
+
const env = {
|
|
1321
|
+
DEV: false,
|
|
1322
|
+
VITE_POSTHOG_API_KEY: 'pk_live',
|
|
1323
|
+
TAMAGUI_TARGET: 'native',
|
|
1324
|
+
}
|
|
1266
1325
|
const out = applyInlineEnvVars(
|
|
1267
1326
|
`export const key = import.meta.env.VITE_POSTHOG_API_KEY;
|
|
1268
1327
|
export const target = import.meta.env?.TAMAGUI_TARGET;
|
|
@@ -1357,7 +1416,9 @@ export const all = { ...import.meta.env };`,
|
|
|
1357
1416
|
// takeout adds `hot-updater/babel-plugin` for OTA; dropping it silently
|
|
1358
1417
|
// would ship a build whose updates never apply.
|
|
1359
1418
|
const withPlugins = (plugins: any[]) =>
|
|
1360
|
-
({
|
|
1419
|
+
({
|
|
1420
|
+
customTransformOptions: { vite: { babelConfig: { plugins } } },
|
|
1421
|
+
}) as any
|
|
1361
1422
|
|
|
1362
1423
|
expect(() =>
|
|
1363
1424
|
assertNoUnportedBabelPlugins(
|
|
@@ -1455,3 +1516,160 @@ describe('metro babel fallback config names', () => {
|
|
|
1455
1516
|
}
|
|
1456
1517
|
})
|
|
1457
1518
|
})
|
|
1519
|
+
|
|
1520
|
+
describe('one public env contract in the metro worker', () => {
|
|
1521
|
+
it('inlines One and Expo public reads in dev and prod with no virtual module', () => {
|
|
1522
|
+
for (const isProduction of [false, true]) {
|
|
1523
|
+
const out = applyInlineEnvVars(
|
|
1524
|
+
`export const values = [process.env.ONE_PUBLIC_API, process.env.EXPO_PUBLIC_API, import.meta.env.EXPO_PUBLIC_API];
|
|
1525
|
+
export const all = { ...import.meta.env };`,
|
|
1526
|
+
'env.ts',
|
|
1527
|
+
isProduction,
|
|
1528
|
+
{ ONE_PUBLIC_API: 'https://api.test' }
|
|
1529
|
+
)
|
|
1530
|
+
expect(out).toContain(
|
|
1531
|
+
'export const values = ["https://api.test", "https://api.test", "https://api.test"];'
|
|
1532
|
+
)
|
|
1533
|
+
expect(out).toContain('"EXPO_PUBLIC_API":"https://api.test"')
|
|
1534
|
+
expect(out).not.toContain('expo/virtual/env')
|
|
1535
|
+
expect(out).not.toContain('_$$_EXPO_ENV')
|
|
1536
|
+
}
|
|
1537
|
+
})
|
|
1538
|
+
|
|
1539
|
+
it('preserves explicit conflicting values', () => {
|
|
1540
|
+
for (const isProduction of [false, true]) {
|
|
1541
|
+
const out = applyInlineEnvVars(
|
|
1542
|
+
'export const values = [process.env.ONE_PUBLIC_API, process.env.EXPO_PUBLIC_API];',
|
|
1543
|
+
'env.ts',
|
|
1544
|
+
isProduction,
|
|
1545
|
+
{ ONE_PUBLIC_API: 'one', EXPO_PUBLIC_API: 'expo' }
|
|
1546
|
+
)
|
|
1547
|
+
expect(out).toBe('export const values = ["one", "expo"];')
|
|
1548
|
+
}
|
|
1549
|
+
})
|
|
1550
|
+
|
|
1551
|
+
it('accepts Expo runtime feature flags that are not configured', () => {
|
|
1552
|
+
const out = applyInlineEnvVars(
|
|
1553
|
+
'export const useRnFetch = process.env.EXPO_PUBLIC_USE_RN_FETCH;',
|
|
1554
|
+
'/app/node_modules/expo/build/winter/runtime.native.js',
|
|
1555
|
+
false,
|
|
1556
|
+
{ EXPO_PUBLIC_USE_RN_FETCH: undefined }
|
|
1557
|
+
)
|
|
1558
|
+
expect(out).toBe('export const useRnFetch = undefined;')
|
|
1559
|
+
})
|
|
1560
|
+
|
|
1561
|
+
it('carries public aliases through the whole import.meta.env object', () => {
|
|
1562
|
+
const out = applyInlineEnvVars(
|
|
1563
|
+
'export const all = { ...import.meta.env };',
|
|
1564
|
+
'env.ts',
|
|
1565
|
+
true,
|
|
1566
|
+
{ ONE_PUBLIC_API: 'one' }
|
|
1567
|
+
)
|
|
1568
|
+
expect(out).toContain('"ONE_PUBLIC_API":"one"')
|
|
1569
|
+
expect(out).toContain('"EXPO_PUBLIC_API":"one"')
|
|
1570
|
+
})
|
|
1571
|
+
})
|
|
1572
|
+
|
|
1573
|
+
describe('optional expo virtual env', () => {
|
|
1574
|
+
const virtualFilename = '/proj/node_modules/expo/virtual/env.js'
|
|
1575
|
+
const virtualSource = 'export const env = process.env;'
|
|
1576
|
+
|
|
1577
|
+
function runFactory(
|
|
1578
|
+
code: string,
|
|
1579
|
+
opts: { requireImpl: (...args: any[]) => any; procEnv: Record<string, string> }
|
|
1580
|
+
) {
|
|
1581
|
+
const module = { exports: {} as any }
|
|
1582
|
+
vm.runInNewContext(code, {
|
|
1583
|
+
__d(factory: any) {
|
|
1584
|
+
factory(
|
|
1585
|
+
{},
|
|
1586
|
+
opts.requireImpl,
|
|
1587
|
+
(v: any) => v,
|
|
1588
|
+
(v: any) => v,
|
|
1589
|
+
module,
|
|
1590
|
+
module.exports,
|
|
1591
|
+
[]
|
|
1592
|
+
)
|
|
1593
|
+
},
|
|
1594
|
+
process: { env: opts.procEnv },
|
|
1595
|
+
console,
|
|
1596
|
+
})
|
|
1597
|
+
return module.exports
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
const noRequire = () => {
|
|
1601
|
+
throw new Error('unexpected require call')
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
it('merges .env files over process.env in dev like upstream', async () => {
|
|
1605
|
+
const result = await transform({}, '/proj', virtualFilename, Buffer.from(virtualSource), {
|
|
1606
|
+
dev: true,
|
|
1607
|
+
minify: false,
|
|
1608
|
+
platform: 'ios',
|
|
1609
|
+
type: 'module',
|
|
1610
|
+
customTransformOptions: { environment: 'client' },
|
|
1611
|
+
})
|
|
1612
|
+
const code = result.output[0].data.code
|
|
1613
|
+
expect(code).toContain('dotEnvModules')
|
|
1614
|
+
expect(code).toContain('.env.development.local')
|
|
1615
|
+
const contextModule: any = () => ({
|
|
1616
|
+
default: { EXPO_PUBLIC_SENTINEL_DOTENV: 'dotenv-sentinel-value' },
|
|
1617
|
+
})
|
|
1618
|
+
contextModule.keys = () => ['./.env']
|
|
1619
|
+
// metro lowers require.context(rel) to require(contextId, rel)
|
|
1620
|
+
const requireImpl: any = (_id: unknown, _rel?: unknown) => contextModule
|
|
1621
|
+
const mod = runFactory(code, {
|
|
1622
|
+
requireImpl,
|
|
1623
|
+
procEnv: { EXPO_PUBLIC_SENTINEL_PROC: 'proc-sentinel-value' },
|
|
1624
|
+
})
|
|
1625
|
+
expect(mod.env.EXPO_PUBLIC_SENTINEL_DOTENV).toBe('dotenv-sentinel-value')
|
|
1626
|
+
expect(mod.env.EXPO_PUBLIC_SENTINEL_PROC).toBe('proc-sentinel-value')
|
|
1627
|
+
})
|
|
1628
|
+
|
|
1629
|
+
it('throws a naming error in production like upstream', async () => {
|
|
1630
|
+
const result = await transform({}, '/proj', virtualFilename, Buffer.from(virtualSource), {
|
|
1631
|
+
dev: false,
|
|
1632
|
+
minify: false,
|
|
1633
|
+
platform: 'ios',
|
|
1634
|
+
type: 'module',
|
|
1635
|
+
customTransformOptions: { environment: 'client' },
|
|
1636
|
+
})
|
|
1637
|
+
const mod = runFactory(result.output[0].data.code, {
|
|
1638
|
+
requireImpl: noRequire,
|
|
1639
|
+
procEnv: {},
|
|
1640
|
+
})
|
|
1641
|
+
expect(() => mod.env.EXPO_PUBLIC_ANYTHING).toThrow(
|
|
1642
|
+
'not supported in production bundles'
|
|
1643
|
+
)
|
|
1644
|
+
})
|
|
1645
|
+
|
|
1646
|
+
it('leaves .env files alone without Expo installed', async () => {
|
|
1647
|
+
const result = await transform(
|
|
1648
|
+
{},
|
|
1649
|
+
'/proj-no-expo',
|
|
1650
|
+
'/proj-no-expo/.env',
|
|
1651
|
+
Buffer.from('EXPO_PUBLIC_A=1\nSECRET=2\n'),
|
|
1652
|
+
{
|
|
1653
|
+
dev: true,
|
|
1654
|
+
minify: false,
|
|
1655
|
+
platform: 'ios',
|
|
1656
|
+
type: 'module',
|
|
1657
|
+
customTransformOptions: { environment: 'client' },
|
|
1658
|
+
}
|
|
1659
|
+
)
|
|
1660
|
+
const code = result.output[0].data.code
|
|
1661
|
+
expect(code).toContain('EXPO_PUBLIC_A')
|
|
1662
|
+
expect(code).not.toContain('EXPO_PUBLIC_A":"1')
|
|
1663
|
+
})
|
|
1664
|
+
|
|
1665
|
+
it('leaves the virtual module alone outside client environments', async () => {
|
|
1666
|
+
const result = await transform({}, '/proj', virtualFilename, Buffer.from(virtualSource), {
|
|
1667
|
+
dev: true,
|
|
1668
|
+
minify: false,
|
|
1669
|
+
platform: 'ios',
|
|
1670
|
+
type: 'module',
|
|
1671
|
+
customTransformOptions: { environment: 'react-server' },
|
|
1672
|
+
})
|
|
1673
|
+
expect(result.output[0].data.code).not.toContain('require.context')
|
|
1674
|
+
})
|
|
1675
|
+
})
|
|
@@ -8,10 +8,14 @@ import remapping from '@jridgewell/remapping'
|
|
|
8
8
|
import { TraceMap, eachMapping } from '@jridgewell/trace-mapping'
|
|
9
9
|
import {
|
|
10
10
|
shouldStripFlow,
|
|
11
|
+
stripFlowTypes,
|
|
11
12
|
transformHermesAsync,
|
|
12
13
|
transformHermesLoops,
|
|
13
14
|
transformReactNativeCodegen,
|
|
14
15
|
} from '@vxrn/compiler'
|
|
16
|
+
import { withExpoPublicEnvAliases } from '@vxrn/utils/publicEnv'
|
|
17
|
+
|
|
18
|
+
import { substituteExpoVirtualEnvSource } from './expoVirtualEnv'
|
|
15
19
|
import { getPlatformEnv, metroPlatformToViteEnvironment } from '../env/platformEnv'
|
|
16
20
|
|
|
17
21
|
/**
|
|
@@ -514,16 +518,15 @@ export function applyModuleResolverAliases(
|
|
|
514
518
|
}
|
|
515
519
|
|
|
516
520
|
/**
|
|
517
|
-
* Native port of
|
|
518
|
-
*
|
|
519
|
-
*
|
|
520
|
-
*
|
|
521
|
-
*
|
|
522
|
-
* and every
|
|
521
|
+
* Native port of one's `babel-plugin-inline-one-server-url` for public env.
|
|
522
|
+
* Every `process.env.ONE_PUBLIC_*` or `process.env.EXPO_PUBLIC_*` read is
|
|
523
|
+
* inlined as a literal in both modes,
|
|
524
|
+
* matching the rolldown native defines: a native runtime has no `process.env`
|
|
525
|
+
* to read it back out of, and without this the reads survive into the bundle
|
|
526
|
+
* and every public value is undefined at runtime.
|
|
523
527
|
*
|
|
524
528
|
* `process.env.ONE_SERVER_URL` is inlined in both modes, matching one's plugin:
|
|
525
|
-
* it is how a native bundle knows where to fetch loader data from
|
|
526
|
-
* runtime has no `process.env` to read it back out of.
|
|
529
|
+
* it is how a native bundle knows where to fetch loader data from.
|
|
527
530
|
*
|
|
528
531
|
* Both live in one pass because they are the same rewrite over the same walk,
|
|
529
532
|
* and a second parse of every file is the cost this transformer exists to avoid.
|
|
@@ -542,8 +545,14 @@ export function applyInlineEnvVars(
|
|
|
542
545
|
}
|
|
543
546
|
if (!parsed?.program) return code
|
|
544
547
|
|
|
548
|
+
const processPublicEnv = Object.fromEntries(
|
|
549
|
+
Object.entries(process.env).filter(
|
|
550
|
+
([key]) => key.startsWith('ONE_PUBLIC_') || key.startsWith('EXPO_PUBLIC_')
|
|
551
|
+
)
|
|
552
|
+
)
|
|
553
|
+
const effectiveEnv = withExpoPublicEnvAliases({ ...processPublicEnv, ...env })
|
|
554
|
+
|
|
545
555
|
const ms = new MagicString(code)
|
|
546
|
-
let needsEnvImport = false
|
|
547
556
|
|
|
548
557
|
// edits are collected rather than written straight through, because a folded
|
|
549
558
|
// dead branch swallows the range an inner edit sits in and MagicString throws
|
|
@@ -596,13 +605,12 @@ export function applyInlineEnvVars(
|
|
|
596
605
|
return
|
|
597
606
|
}
|
|
598
607
|
|
|
599
|
-
if (
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
}
|
|
608
|
+
if (
|
|
609
|
+
isProcessEnv &&
|
|
610
|
+
!isAssignmentTarget &&
|
|
611
|
+
(key?.startsWith('ONE_PUBLIC_') || key?.startsWith('EXPO_PUBLIC_'))
|
|
612
|
+
) {
|
|
613
|
+
replace(node, effectiveEnv[key] ?? undefined)
|
|
606
614
|
return
|
|
607
615
|
}
|
|
608
616
|
|
|
@@ -615,21 +623,30 @@ export function applyInlineEnvVars(
|
|
|
615
623
|
keyOf(obj.property, obj.computed) === 'env' &&
|
|
616
624
|
key !== undefined
|
|
617
625
|
) {
|
|
618
|
-
replace(node,
|
|
626
|
+
replace(node, effectiveEnv[key])
|
|
619
627
|
return
|
|
620
628
|
}
|
|
621
629
|
|
|
622
630
|
// bare `import.meta.env`, spread or passed around whole.
|
|
623
631
|
if (!isAssignmentTarget && isImportMeta(obj) && key === 'env') {
|
|
624
|
-
edits.push({
|
|
632
|
+
edits.push({
|
|
633
|
+
start: node.start,
|
|
634
|
+
end: node.end,
|
|
635
|
+
text: JSON.stringify(effectiveEnv),
|
|
636
|
+
})
|
|
625
637
|
return
|
|
626
638
|
}
|
|
627
639
|
|
|
628
640
|
// `process.env.X` for anything the vite env map defines. runs after the
|
|
629
|
-
//
|
|
641
|
+
// branches above so ONE_SERVER_URL and public env keep their own
|
|
630
642
|
// handling.
|
|
631
|
-
if (
|
|
632
|
-
|
|
643
|
+
if (
|
|
644
|
+
isProcessEnv &&
|
|
645
|
+
!isAssignmentTarget &&
|
|
646
|
+
key !== undefined &&
|
|
647
|
+
key in effectiveEnv
|
|
648
|
+
) {
|
|
649
|
+
replace(node, effectiveEnv[key])
|
|
633
650
|
return
|
|
634
651
|
}
|
|
635
652
|
}
|
|
@@ -725,9 +742,6 @@ export function applyInlineEnvVars(
|
|
|
725
742
|
ms.overwrite(edit.start, edit.end, edit.text)
|
|
726
743
|
}
|
|
727
744
|
|
|
728
|
-
if (needsEnvImport) {
|
|
729
|
-
ms.prepend(`import { env as _$$_EXPO_ENV } from "expo/virtual/env";\n`)
|
|
730
|
-
}
|
|
731
745
|
return ms.hasChanged() ? ms.toString() : code
|
|
732
746
|
}
|
|
733
747
|
|
|
@@ -1884,39 +1898,16 @@ export async function transform(
|
|
|
1884
1898
|
|
|
1885
1899
|
let sourceCode = typeof data === 'string' ? data : data.toString('utf8')
|
|
1886
1900
|
|
|
1887
|
-
//
|
|
1888
|
-
//
|
|
1889
|
-
// without
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
.relative(path.dirname(filename), projectRoot)
|
|
1898
|
-
.split(path.sep)
|
|
1899
|
-
.join('/')
|
|
1900
|
-
sourceCode = `const dotEnvModules = require.context(${JSON.stringify(rel)},false,/^\\.\\/\\.env/);
|
|
1901
|
-
export const env = !dotEnvModules.keys().length ? process.env : { ...process.env, ...['.env', '.env.development', '.env.local', '.env.development.local'].reduce((acc, file) => {
|
|
1902
|
-
return { ...acc, ...(dotEnvModules(file)?.default ?? {}) };
|
|
1903
|
-
}, {}) };`
|
|
1904
|
-
} else {
|
|
1905
|
-
// production inlines every value at its use site, so reaching this module
|
|
1906
|
-
// at all is a bug worth naming rather than silently returning undefined.
|
|
1907
|
-
sourceCode = `export const env = new Proxy({}, {
|
|
1908
|
-
get(target, key) {
|
|
1909
|
-
throw new Error(\`Attempting to access internal environment variable "\${String(key)}" is not supported in production bundles.\`);
|
|
1910
|
-
},
|
|
1911
|
-
});`
|
|
1912
|
-
}
|
|
1913
|
-
} else if (
|
|
1914
|
-
/(^|[\\/])\.env(\.(local|(development|production)(\.local)?))?$/.test(filename)
|
|
1915
|
-
) {
|
|
1916
|
-
const { parseEnvFile } =
|
|
1917
|
-
await import('@expo/metro-config/build/transform-worker/dot-env-development')
|
|
1918
|
-
sourceCode = `export default ${JSON.stringify(parseEnvFile(sourceCode, isClientEnvironment))};`
|
|
1919
|
-
}
|
|
1901
|
+
// narrow optional Expo compatibility, shared with the babel
|
|
1902
|
+
// transformer: only expo/virtual/env.js and .env files are special, and
|
|
1903
|
+
// apps without Expo installed never resolve or load any Expo module.
|
|
1904
|
+
sourceCode = substituteExpoVirtualEnvSource({
|
|
1905
|
+
filename,
|
|
1906
|
+
src: sourceCode,
|
|
1907
|
+
projectRoot,
|
|
1908
|
+
dev: options.dev,
|
|
1909
|
+
environment: options.customTransformOptions?.environment,
|
|
1910
|
+
})
|
|
1920
1911
|
|
|
1921
1912
|
checkReservedStrings(sourceCode, config, options)
|
|
1922
1913
|
|
|
@@ -1986,8 +1977,7 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
|
|
|
1986
1977
|
|
|
1987
1978
|
// 2. Asset files
|
|
1988
1979
|
if (options.type === 'asset') {
|
|
1989
|
-
const assetRegistryPath =
|
|
1990
|
-
config.assetRegistryPath || 'react-native/Libraries/Image/AssetRegistry'
|
|
1980
|
+
const assetRegistryPath = config.assetRegistryPath || 'react-native/asset-registry'
|
|
1991
1981
|
let properDescriptor: any = null
|
|
1992
1982
|
|
|
1993
1983
|
const absolutePath = path.resolve(projectRoot, filename)
|
|
@@ -2144,15 +2134,7 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
|
|
|
2144
2134
|
// Step A: Flow stripping
|
|
2145
2135
|
if (shouldStripFlow(filename, code)) {
|
|
2146
2136
|
try {
|
|
2147
|
-
const
|
|
2148
|
-
const flowTransform = fft.default || fft
|
|
2149
|
-
const flowResult = await flowTransform({
|
|
2150
|
-
filename,
|
|
2151
|
-
source: code,
|
|
2152
|
-
sourcemap: true,
|
|
2153
|
-
dialect: 'flow',
|
|
2154
|
-
format: 'pretty',
|
|
2155
|
-
})
|
|
2137
|
+
const flowResult = await stripFlowTypes(filename, code)
|
|
2156
2138
|
if (flowResult?.code) {
|
|
2157
2139
|
code = flowResult.code
|
|
2158
2140
|
if (flowResult.map) {
|
|
@@ -2185,9 +2167,9 @@ export const env = !dotEnvModules.keys().length ? process.env : { ...process.env
|
|
|
2185
2167
|
}
|
|
2186
2168
|
}
|
|
2187
2169
|
|
|
2188
|
-
// Step A2:
|
|
2189
|
-
// after flow stripping so the parse succeeds, before extraction so
|
|
2190
|
-
//
|
|
2170
|
+
// Step A2: one public env vars, one's server url, and `import.meta.env`.
|
|
2171
|
+
// after flow stripping so the parse succeeds, before extraction so any
|
|
2172
|
+
// folded-away dead branch is seen.
|
|
2191
2173
|
// the substring guards keep the extra parse off files with no such read at all.
|
|
2192
2174
|
if (code.includes('process.env') || code.includes('import.meta')) {
|
|
2193
2175
|
code = applyInlineEnvVars(code, filename, !options.dev, getImportMetaEnv(options))
|
|
@@ -47,4 +47,26 @@ describe('transformSync', () => {
|
|
|
47
47
|
)
|
|
48
48
|
).toThrow('use `importForwarding.moduleNames`')
|
|
49
49
|
})
|
|
50
|
+
|
|
51
|
+
it('parses the readonly Flow interfaces shipped by React Native 0.87', () => {
|
|
52
|
+
const result = transformSync(
|
|
53
|
+
`// @flow strict
|
|
54
|
+
interface Registration<TArgs> {
|
|
55
|
+
readonly context: unknown;
|
|
56
|
+
readonly listener: (...args: TArgs) => unknown;
|
|
57
|
+
}
|
|
58
|
+
export function readContext(registration: Registration<[]>): unknown {
|
|
59
|
+
return registration.context;
|
|
60
|
+
}`,
|
|
61
|
+
{
|
|
62
|
+
filename: '/project/node_modules/react-native/EventEmitter.js',
|
|
63
|
+
babelrc: false,
|
|
64
|
+
configFile: false,
|
|
65
|
+
presets: [require('@react-native/babel-preset')],
|
|
66
|
+
},
|
|
67
|
+
{ hermesParser: true }
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
expect(result?.code).toContain('function readContext(registration)')
|
|
71
|
+
})
|
|
50
72
|
})
|