@vxrn/vite-plugin-metro 1.1.504 → 1.1.505
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 +65 -0
- package/dist/cjs/babel-plugins/import-meta-env-plugin.js +52 -0
- package/dist/cjs/babel-plugins/import-meta-env-plugin.js.map +6 -0
- package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js +62 -0
- package/dist/cjs/babel-plugins/import-meta-env-plugin.native.js.map +6 -0
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.cjs +47 -0
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.js +40 -0
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.js.map +6 -0
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js +53 -0
- package/dist/cjs/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +6 -0
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.cjs +110 -0
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.js +96 -0
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.js.map +6 -0
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js +102 -0
- package/dist/cjs/metro-config/getMetroConfigFromViteConfig.native.js.map +6 -0
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.cjs +48 -0
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.js +46 -0
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.js.map +6 -0
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +50 -0
- package/dist/cjs/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +6 -0
- package/dist/cjs/metro-config/types.cjs +16 -0
- package/dist/cjs/metro-config/types.js +14 -0
- package/dist/cjs/metro-config/types.js.map +6 -0
- package/dist/cjs/metro-config/types.native.js +15 -0
- package/dist/cjs/metro-config/types.native.js.map +6 -0
- package/dist/cjs/plugins/metroPlugin.cjs +8 -84
- package/dist/cjs/plugins/metroPlugin.js +6 -90
- package/dist/cjs/plugins/metroPlugin.js.map +1 -1
- package/dist/cjs/plugins/metroPlugin.native.js +6 -82
- package/dist/cjs/plugins/metroPlugin.native.js.map +2 -2
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.cjs +86 -0
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.js +75 -0
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.js +114 -0
- package/dist/cjs/rn-commands/bundle/assetCatalogIOS.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/assetPathUtils.cjs +63 -0
- package/dist/cjs/rn-commands/bundle/assetPathUtils.js +62 -0
- package/dist/cjs/rn-commands/bundle/assetPathUtils.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/assetPathUtils.native.js +70 -0
- package/dist/cjs/rn-commands/bundle/assetPathUtils.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/buildBundle.cjs +50 -0
- package/dist/cjs/rn-commands/bundle/buildBundle.js +47 -0
- package/dist/cjs/rn-commands/bundle/buildBundle.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/buildBundle.native.js +46 -0
- package/dist/cjs/rn-commands/bundle/buildBundle.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.cjs +76 -0
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.js +66 -0
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.js +69 -0
- package/dist/cjs/rn-commands/bundle/buildBundleWithConfig.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.cjs +43 -0
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.js +40 -0
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.js +60 -0
- package/dist/cjs/rn-commands/bundle/filterPlatformAssetScales.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.cjs +44 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.js +34 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.js +35 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathAndroid.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.cjs +47 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.js +40 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.js +41 -0
- package/dist/cjs/rn-commands/bundle/getAssetDestPathIOS.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.cjs +39 -0
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.js +37 -0
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.js +45 -0
- package/dist/cjs/rn-commands/bundle/getBuildBundleFn.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/index.cjs +28 -0
- package/dist/cjs/rn-commands/bundle/index.js +22 -0
- package/dist/cjs/rn-commands/bundle/index.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/index.native.js +28 -0
- package/dist/cjs/rn-commands/bundle/index.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/saveAssets.cjs +103 -0
- package/dist/cjs/rn-commands/bundle/saveAssets.js +96 -0
- package/dist/cjs/rn-commands/bundle/saveAssets.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/saveAssets.native.js +107 -0
- package/dist/cjs/rn-commands/bundle/saveAssets.native.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/types.cjs +16 -0
- package/dist/cjs/rn-commands/bundle/types.js +14 -0
- package/dist/cjs/rn-commands/bundle/types.js.map +6 -0
- package/dist/cjs/rn-commands/bundle/types.native.js +15 -0
- package/dist/cjs/rn-commands/bundle/types.native.js.map +6 -0
- package/dist/cjs/rn-commands/index.cjs +37 -0
- package/dist/cjs/rn-commands/index.js +29 -0
- package/dist/cjs/rn-commands/index.js.map +6 -0
- package/dist/cjs/rn-commands/index.native.js +34 -0
- package/dist/cjs/rn-commands/index.native.js.map +6 -0
- package/dist/cjs/transformer/babel-transformer.cjs +5 -1
- package/dist/cjs/transformer/babel-transformer.js +8 -1
- package/dist/cjs/transformer/babel-transformer.js.map +1 -1
- package/dist/cjs/transformer/babel-transformer.native.js +6 -1
- package/dist/cjs/transformer/babel-transformer.native.js.map +2 -2
- package/dist/cjs/transformer/types.cjs +16 -0
- package/dist/cjs/transformer/types.js +14 -0
- package/dist/cjs/transformer/types.js.map +6 -0
- package/dist/cjs/transformer/types.native.js +15 -0
- package/dist/cjs/transformer/types.native.js.map +6 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.js +29 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.js.map +6 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.mjs +30 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.mjs.map +1 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.native.js +38 -0
- package/dist/esm/babel-plugins/import-meta-env-plugin.native.js.map +1 -0
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.js +24 -0
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.js.map +6 -0
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs +24 -0
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.mjs.map +1 -0
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js +27 -0
- package/dist/esm/metro-config/getMetroBabelConfigFromViteConfig.native.js.map +1 -0
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.js +82 -0
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.js.map +6 -0
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs +87 -0
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.mjs.map +1 -0
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js +92 -0
- package/dist/esm/metro-config/getMetroConfigFromViteConfig.native.js.map +1 -0
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.js +30 -0
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.js.map +6 -0
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs +25 -0
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.mjs.map +1 -0
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js +26 -0
- package/dist/esm/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.native.js.map +1 -0
- package/dist/esm/metro-config/types.js +1 -0
- package/dist/esm/metro-config/types.js.map +6 -0
- package/dist/esm/metro-config/types.mjs +2 -0
- package/dist/esm/metro-config/types.mjs.map +1 -0
- package/dist/esm/metro-config/types.native.js +2 -0
- package/dist/esm/metro-config/types.native.js.map +1 -0
- package/dist/esm/plugins/metroPlugin.js +8 -92
- package/dist/esm/plugins/metroPlugin.js.map +1 -1
- package/dist/esm/plugins/metroPlugin.mjs +9 -85
- package/dist/esm/plugins/metroPlugin.mjs.map +1 -1
- package/dist/esm/plugins/metroPlugin.native.js +9 -91
- package/dist/esm/plugins/metroPlugin.native.js.map +1 -1
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.js +53 -0
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.js.map +6 -0
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.mjs +49 -0
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.native.js +83 -0
- package/dist/esm/rn-commands/bundle/assetCatalogIOS.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/assetPathUtils.js +46 -0
- package/dist/esm/rn-commands/bundle/assetPathUtils.js.map +6 -0
- package/dist/esm/rn-commands/bundle/assetPathUtils.mjs +40 -0
- package/dist/esm/rn-commands/bundle/assetPathUtils.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/assetPathUtils.native.js +42 -0
- package/dist/esm/rn-commands/bundle/assetPathUtils.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/buildBundle.js +34 -0
- package/dist/esm/rn-commands/bundle/buildBundle.js.map +6 -0
- package/dist/esm/rn-commands/bundle/buildBundle.mjs +27 -0
- package/dist/esm/rn-commands/bundle/buildBundle.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/buildBundle.native.js +28 -0
- package/dist/esm/rn-commands/bundle/buildBundle.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.js +46 -0
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.js.map +6 -0
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.mjs +42 -0
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.native.js +46 -0
- package/dist/esm/rn-commands/bundle/buildBundleWithConfig.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.js +24 -0
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.js.map +6 -0
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.mjs +20 -0
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.native.js +38 -0
- package/dist/esm/rn-commands/bundle/filterPlatformAssetScales.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.js +11 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.js.map +6 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.mjs +10 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.native.js +10 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathAndroid.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.js +16 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.js.map +6 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.mjs +13 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.native.js +13 -0
- package/dist/esm/rn-commands/bundle/getAssetDestPathIOS.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.js +22 -0
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.js.map +6 -0
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.mjs +16 -0
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.native.js +20 -0
- package/dist/esm/rn-commands/bundle/getBuildBundleFn.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/index.js +7 -0
- package/dist/esm/rn-commands/bundle/index.js.map +6 -0
- package/dist/esm/rn-commands/bundle/index.mjs +4 -0
- package/dist/esm/rn-commands/bundle/index.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/index.native.js +4 -0
- package/dist/esm/rn-commands/bundle/index.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/saveAssets.js +77 -0
- package/dist/esm/rn-commands/bundle/saveAssets.js.map +6 -0
- package/dist/esm/rn-commands/bundle/saveAssets.mjs +69 -0
- package/dist/esm/rn-commands/bundle/saveAssets.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/saveAssets.native.js +86 -0
- package/dist/esm/rn-commands/bundle/saveAssets.native.js.map +1 -0
- package/dist/esm/rn-commands/bundle/types.js +1 -0
- package/dist/esm/rn-commands/bundle/types.js.map +6 -0
- package/dist/esm/rn-commands/bundle/types.mjs +2 -0
- package/dist/esm/rn-commands/bundle/types.mjs.map +1 -0
- package/dist/esm/rn-commands/bundle/types.native.js +2 -0
- package/dist/esm/rn-commands/bundle/types.native.js.map +1 -0
- package/dist/esm/rn-commands/index.js +5 -0
- package/dist/esm/rn-commands/index.js.map +6 -0
- package/dist/esm/rn-commands/index.mjs +3 -0
- package/dist/esm/rn-commands/index.mjs.map +1 -0
- package/dist/esm/rn-commands/index.native.js +3 -0
- package/dist/esm/rn-commands/index.native.js.map +1 -0
- package/dist/esm/transformer/babel-transformer.js +8 -1
- package/dist/esm/transformer/babel-transformer.js.map +1 -1
- package/dist/esm/transformer/babel-transformer.mjs +5 -1
- package/dist/esm/transformer/babel-transformer.mjs.map +1 -1
- package/dist/esm/transformer/babel-transformer.native.js +6 -2
- package/dist/esm/transformer/babel-transformer.native.js.map +1 -1
- package/dist/esm/transformer/types.js +1 -0
- package/dist/esm/transformer/types.js.map +6 -0
- package/dist/esm/transformer/types.mjs +2 -0
- package/dist/esm/transformer/types.mjs.map +1 -0
- package/dist/esm/transformer/types.native.js +2 -0
- package/dist/esm/transformer/types.native.js.map +1 -0
- package/package.json +19 -4
- package/src/babel-plugins/import-meta-env-plugin.ts +56 -0
- package/src/metro-config/getMetroBabelConfigFromViteConfig.ts +50 -0
- package/src/metro-config/getMetroConfigFromViteConfig.ts +144 -0
- package/src/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.ts +44 -0
- package/src/metro-config/types.ts +9 -0
- package/src/plugins/metroPlugin.ts +13 -144
- package/src/rn-commands/bundle/README.md +2 -0
- package/src/rn-commands/bundle/assetCatalogIOS.ts +73 -0
- package/src/rn-commands/bundle/assetPathUtils.ts +76 -0
- package/src/rn-commands/bundle/buildBundle.ts +57 -0
- package/src/rn-commands/bundle/buildBundleWithConfig.ts +82 -0
- package/src/rn-commands/bundle/filterPlatformAssetScales.ts +41 -0
- package/src/rn-commands/bundle/getAssetDestPathAndroid.ts +19 -0
- package/src/rn-commands/bundle/getAssetDestPathIOS.ts +24 -0
- package/src/rn-commands/bundle/getBuildBundleFn.ts +31 -0
- package/src/rn-commands/bundle/index.ts +2 -0
- package/src/rn-commands/bundle/saveAssets.ts +114 -0
- package/src/rn-commands/bundle/types.ts +22 -0
- package/src/rn-commands/index.ts +1 -0
- package/src/transformer/babel-transformer.ts +18 -3
- package/src/transformer/types.ts +18 -0
- package/types/babel-plugins/import-meta-env-plugin.d.ts +7 -0
- package/types/babel-plugins/import-meta-env-plugin.d.ts.map +1 -0
- package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts +4 -0
- package/types/metro-config/getMetroBabelConfigFromViteConfig.d.ts.map +1 -0
- package/types/metro-config/getMetroConfigFromViteConfig.d.ts +5 -0
- package/types/metro-config/getMetroConfigFromViteConfig.d.ts.map +1 -0
- package/types/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.d.ts +5 -0
- package/types/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.d.ts.map +1 -0
- package/types/metro-config/types.d.ts +9 -0
- package/types/metro-config/types.d.ts.map +1 -0
- package/types/plugins/metroPlugin.d.ts +1 -1
- package/types/plugins/metroPlugin.d.ts.map +1 -1
- package/types/rn-commands/bundle/assetCatalogIOS.d.ts +21 -0
- package/types/rn-commands/bundle/assetCatalogIOS.d.ts.map +1 -0
- package/types/rn-commands/bundle/assetPathUtils.d.ts +27 -0
- package/types/rn-commands/bundle/assetPathUtils.d.ts.map +1 -0
- package/types/rn-commands/bundle/buildBundle.d.ts +8 -0
- package/types/rn-commands/bundle/buildBundle.d.ts.map +1 -0
- package/types/rn-commands/bundle/buildBundleWithConfig.d.ts +9 -0
- package/types/rn-commands/bundle/buildBundleWithConfig.d.ts.map +1 -0
- package/types/rn-commands/bundle/filterPlatformAssetScales.d.ts +9 -0
- package/types/rn-commands/bundle/filterPlatformAssetScales.d.ts.map +1 -0
- package/types/rn-commands/bundle/getAssetDestPathAndroid.d.ts +10 -0
- package/types/rn-commands/bundle/getAssetDestPathAndroid.d.ts.map +1 -0
- package/types/rn-commands/bundle/getAssetDestPathIOS.d.ts +10 -0
- package/types/rn-commands/bundle/getAssetDestPathIOS.d.ts.map +1 -0
- package/types/rn-commands/bundle/getBuildBundleFn.d.ts +7 -0
- package/types/rn-commands/bundle/getBuildBundleFn.d.ts.map +1 -0
- package/types/rn-commands/bundle/index.d.ts +3 -0
- package/types/rn-commands/bundle/index.d.ts.map +1 -0
- package/types/rn-commands/bundle/saveAssets.d.ts +4 -0
- package/types/rn-commands/bundle/saveAssets.d.ts.map +1 -0
- package/types/rn-commands/bundle/types.d.ts +23 -0
- package/types/rn-commands/bundle/types.d.ts.map +1 -0
- package/types/rn-commands/index.d.ts +2 -0
- package/types/rn-commands/index.d.ts.map +1 -0
- package/types/transformer/babel-transformer.d.ts.map +1 -1
- package/types/transformer/types.d.ts +16 -0
- package/types/transformer/types.d.ts.map +1 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of https://github.com/facebook/react-native.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type {AssetData} from 'metro/src/Assets';
|
|
9
|
+
|
|
10
|
+
import assetPathUtils from './assetPathUtils';
|
|
11
|
+
import fs from 'node:fs';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
|
|
14
|
+
export function cleanAssetCatalog(catalogDir: string): void {
|
|
15
|
+
const files = fs
|
|
16
|
+
.readdirSync(catalogDir)
|
|
17
|
+
.filter(file => file.endsWith('.imageset'));
|
|
18
|
+
for (const file of files) {
|
|
19
|
+
fs.rmSync(path.join(catalogDir, file), {recursive: true, force: true});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type ImageSet = {
|
|
24
|
+
basePath: string,
|
|
25
|
+
files: {name: string, src: string, scale: number}[],
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export function getImageSet(
|
|
29
|
+
catalogDir: string,
|
|
30
|
+
asset: AssetData,
|
|
31
|
+
scales: ReadonlyArray<number>,
|
|
32
|
+
): ImageSet {
|
|
33
|
+
const fileName = assetPathUtils.getResourceIdentifier(asset);
|
|
34
|
+
return {
|
|
35
|
+
basePath: path.join(catalogDir, `${fileName}.imageset`),
|
|
36
|
+
files: scales.map((scale, idx) => {
|
|
37
|
+
const suffix = scale === 1 ? '' : `@${scale}x`;
|
|
38
|
+
return {
|
|
39
|
+
name: `${fileName + suffix}.${asset.type}`,
|
|
40
|
+
scale,
|
|
41
|
+
src: asset.files[idx],
|
|
42
|
+
};
|
|
43
|
+
}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function isCatalogAsset(asset: AssetData): boolean {
|
|
48
|
+
return asset.type === 'png' || asset.type === 'jpg' || asset.type === 'jpeg';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function writeImageSet(imageSet: ImageSet): void {
|
|
52
|
+
fs.mkdirSync(imageSet.basePath, {recursive: true});
|
|
53
|
+
|
|
54
|
+
for (const file of imageSet.files) {
|
|
55
|
+
const dest = path.join(imageSet.basePath, file.name);
|
|
56
|
+
fs.copyFileSync(file.src, dest);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
fs.writeFileSync(
|
|
60
|
+
path.join(imageSet.basePath, 'Contents.json'),
|
|
61
|
+
JSON.stringify({
|
|
62
|
+
images: imageSet.files.map(file => ({
|
|
63
|
+
filename: file.name,
|
|
64
|
+
idiom: 'universal',
|
|
65
|
+
scale: `${file.scale}x`,
|
|
66
|
+
})),
|
|
67
|
+
info: {
|
|
68
|
+
author: 'xcode',
|
|
69
|
+
version: 1,
|
|
70
|
+
},
|
|
71
|
+
}),
|
|
72
|
+
);
|
|
73
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of https://github.com/facebook/react-native.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export type PackagerAsset = Readonly<{
|
|
9
|
+
httpServerLocation: string
|
|
10
|
+
name: string
|
|
11
|
+
type: string
|
|
12
|
+
}>
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* FIXME: using number to represent discrete scale numbers is fragile in essence because of
|
|
16
|
+
* floating point numbers imprecision.
|
|
17
|
+
*/
|
|
18
|
+
function getAndroidAssetSuffix(scale: number): string {
|
|
19
|
+
switch (scale) {
|
|
20
|
+
case 0.75:
|
|
21
|
+
return 'ldpi'
|
|
22
|
+
case 1:
|
|
23
|
+
return 'mdpi'
|
|
24
|
+
case 1.5:
|
|
25
|
+
return 'hdpi'
|
|
26
|
+
case 2:
|
|
27
|
+
return 'xhdpi'
|
|
28
|
+
case 3:
|
|
29
|
+
return 'xxhdpi'
|
|
30
|
+
case 4:
|
|
31
|
+
return 'xxxhdpi'
|
|
32
|
+
default:
|
|
33
|
+
return ''
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// See https://developer.android.com/guide/topics/resources/drawable-resource.html
|
|
38
|
+
const drawableFileTypes = new Set<string>(['gif', 'jpeg', 'jpg', 'png', 'webp', 'xml'])
|
|
39
|
+
|
|
40
|
+
function getAndroidResourceFolderName(asset: PackagerAsset, scale: number): string {
|
|
41
|
+
if (!drawableFileTypes.has(asset.type)) {
|
|
42
|
+
return 'raw'
|
|
43
|
+
}
|
|
44
|
+
const suffix = getAndroidAssetSuffix(scale)
|
|
45
|
+
if (!suffix) {
|
|
46
|
+
throw new Error(
|
|
47
|
+
`Don't know which android drawable suffix to use for asset: ${JSON.stringify(asset)}`
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
const androidFolder = `drawable-${suffix}`
|
|
51
|
+
return androidFolder
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function getResourceIdentifier(asset: PackagerAsset): string {
|
|
55
|
+
const folderPath = getBasePath(asset)
|
|
56
|
+
return `${folderPath}/${asset.name}`
|
|
57
|
+
.toLowerCase()
|
|
58
|
+
.replace(/\//g, '_') // Encode folder structure in file name
|
|
59
|
+
.replace(/([^a-z0-9_])/g, '') // Remove illegal chars
|
|
60
|
+
.replace(/^assets_/, '') // Remove "assets_" prefix
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function getBasePath(asset: PackagerAsset): string {
|
|
64
|
+
let basePath = asset.httpServerLocation
|
|
65
|
+
if (basePath[0] === '/') {
|
|
66
|
+
basePath = basePath.substr(1)
|
|
67
|
+
}
|
|
68
|
+
return basePath
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export default {
|
|
72
|
+
getAndroidAssetSuffix,
|
|
73
|
+
getAndroidResourceFolderName,
|
|
74
|
+
getResourceIdentifier,
|
|
75
|
+
getBasePath,
|
|
76
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { ResolvedConfig } from 'vite'
|
|
2
|
+
import type { MetroPluginOptions } from '../../plugins/metroPlugin'
|
|
3
|
+
import { getMetroConfigFromViteConfig } from '../../metro-config/getMetroConfigFromViteConfig'
|
|
4
|
+
import { buildBundleWithConfig } from './buildBundleWithConfig'
|
|
5
|
+
import { patchMetroServerWithViteConfigAndMetroPluginOptions } from '../../metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions'
|
|
6
|
+
import { projectResolve } from '../../utils/projectImport'
|
|
7
|
+
import type { BundleCommandArgs } from './types'
|
|
8
|
+
|
|
9
|
+
export async function buildBundle(
|
|
10
|
+
this: { viteConfig: ResolvedConfig; metroPluginOptions: MetroPluginOptions },
|
|
11
|
+
_argv: Array<string>,
|
|
12
|
+
ctx: any,
|
|
13
|
+
argsIn: BundleCommandArgs,
|
|
14
|
+
bundleImpl: any = null
|
|
15
|
+
): Promise<void> {
|
|
16
|
+
const { viteConfig, metroPluginOptions } = this || {}
|
|
17
|
+
if (!viteConfig) {
|
|
18
|
+
throw new Error(
|
|
19
|
+
'[vxrn/buildBundle.metro] Expect the buildBundle function to be bind with an object that has viteConfig property.'
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
if (!metroPluginOptions) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
'[vxrn/buildBundle.metro] Expect the buildBundle function to be bind with an object that has metroPluginOptions property.'
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (process.env.IS_VXRN_CLI) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
'IS_VXRN_CLI should not be set while using @vxrn/vite-plugin-metro buildBundle, it is not supported'
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const metroConfig = await getMetroConfigFromViteConfig(viteConfig, metroPluginOptions)
|
|
35
|
+
|
|
36
|
+
const args = {
|
|
37
|
+
...argsIn,
|
|
38
|
+
entryFile: metroPluginOptions.mainModuleName
|
|
39
|
+
? projectResolve(viteConfig.root, metroPluginOptions.mainModuleName)
|
|
40
|
+
: argsIn.entryFile,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
await buildBundleWithConfig(args, metroConfig, undefined, {
|
|
44
|
+
patchServer: (server) => {
|
|
45
|
+
patchMetroServerWithViteConfigAndMetroPluginOptions(server, viteConfig, metroPluginOptions)
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
console.info('Done.')
|
|
50
|
+
|
|
51
|
+
// Prevent the process not getting exited for some unknown reason.
|
|
52
|
+
// If the process is not exited, it might hang the native build process.
|
|
53
|
+
setTimeout(() => {
|
|
54
|
+
console.info('Exiting process to prevent hanging.')
|
|
55
|
+
process.exit()
|
|
56
|
+
}, 3000)
|
|
57
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import { promises as fs } from 'node:fs'
|
|
3
|
+
import type { ConfigT } from 'metro-config'
|
|
4
|
+
import Server from 'metro/src/Server'
|
|
5
|
+
import metroBundle from 'metro/src/shared/output/bundle'
|
|
6
|
+
import type metroRamBundle from 'metro/src/shared/output/RamBundle'
|
|
7
|
+
import type { RequestOptions } from 'metro/src/shared/types.flow'
|
|
8
|
+
import type { BundleCommandArgs } from './types'
|
|
9
|
+
import saveAssets from './saveAssets'
|
|
10
|
+
|
|
11
|
+
export async function buildBundleWithConfig(
|
|
12
|
+
args: BundleCommandArgs,
|
|
13
|
+
config: ConfigT,
|
|
14
|
+
bundleImpl: typeof metroBundle | typeof metroRamBundle = metroBundle,
|
|
15
|
+
{ patchServer }: { patchServer?: (server: Server) => void } = {}
|
|
16
|
+
): Promise<void> {
|
|
17
|
+
// const customResolverOptions = parseKeyValueParamArray(args.resolverOption ?? [])
|
|
18
|
+
const customResolverOptions = []
|
|
19
|
+
|
|
20
|
+
if (config.resolver.platforms.indexOf(args.platform) === -1) {
|
|
21
|
+
console.error(`Invalid platform ${args.platform ? `"${args.platform}" ` : ''}selected.`)
|
|
22
|
+
|
|
23
|
+
console.info(
|
|
24
|
+
`Available platforms are: ${config.resolver.platforms
|
|
25
|
+
.map((x) => `"${x}"`)
|
|
26
|
+
.join(
|
|
27
|
+
', '
|
|
28
|
+
)}. If you are trying to bundle for an out-of-tree platform, it may not be installed.`
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
throw new Error('Bundling failed')
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// This is used by a bazillion of npm modules we don't control so we don't
|
|
35
|
+
// have other choice than defining it as an env variable here.
|
|
36
|
+
process.env.NODE_ENV = args.dev ? 'development' : 'production'
|
|
37
|
+
|
|
38
|
+
let sourceMapUrl = args.sourcemapOutput
|
|
39
|
+
if (sourceMapUrl != null && !args.sourcemapUseAbsolutePath) {
|
|
40
|
+
sourceMapUrl = path.basename(sourceMapUrl)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// $FlowIgnore[prop-missing]
|
|
44
|
+
const requestOpts: RequestOptions = {
|
|
45
|
+
entryFile: args.entryFile,
|
|
46
|
+
sourceMapUrl,
|
|
47
|
+
dev: args.dev,
|
|
48
|
+
minify: args.minify !== undefined ? args.minify : !args.dev,
|
|
49
|
+
platform: args.platform,
|
|
50
|
+
unstable_transformProfile: args.unstableTransformProfile,
|
|
51
|
+
customResolverOptions,
|
|
52
|
+
}
|
|
53
|
+
const server = new Server(config)
|
|
54
|
+
|
|
55
|
+
if (patchServer) {
|
|
56
|
+
patchServer(server)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
const bundle = await bundleImpl.build(server, requestOpts)
|
|
61
|
+
|
|
62
|
+
// Ensure destination directory exists before saving the bundle
|
|
63
|
+
await fs.mkdir(path.dirname(args.bundleOutput), {
|
|
64
|
+
recursive: true,
|
|
65
|
+
mode: 0o755,
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
await bundleImpl.save(bundle, args, console.info)
|
|
69
|
+
|
|
70
|
+
// Save the assets of the bundle
|
|
71
|
+
const outputAssets = await server.getAssets({
|
|
72
|
+
...Server.DEFAULT_BUNDLE_OPTIONS,
|
|
73
|
+
...requestOpts,
|
|
74
|
+
bundleType: 'todo',
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
// When we're done saving bundle output and the assets, we're done.
|
|
78
|
+
return await saveAssets(outputAssets, args.platform, args.assetsDest, args.assetCatalogDest)
|
|
79
|
+
} finally {
|
|
80
|
+
await server.end()
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of https://github.com/facebook/react-native.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const ALLOWED_SCALES: { [key: string]: number[] } = {
|
|
9
|
+
ios: [1, 2, 3],
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function filterPlatformAssetScales(
|
|
13
|
+
platform: string,
|
|
14
|
+
scales: ReadonlyArray<number>
|
|
15
|
+
): ReadonlyArray<number> {
|
|
16
|
+
const whitelist: number[] = ALLOWED_SCALES[platform]
|
|
17
|
+
if (!whitelist) {
|
|
18
|
+
return scales
|
|
19
|
+
}
|
|
20
|
+
const result = scales.filter((scale) => whitelist.indexOf(scale) > -1)
|
|
21
|
+
if (result.length === 0 && scales.length > 0) {
|
|
22
|
+
// No matching scale found, but there are some available. Ideally we don't
|
|
23
|
+
// want to be in this situation and should throw, but for now as a fallback
|
|
24
|
+
// let's just use the closest larger image
|
|
25
|
+
const maxScale = whitelist[whitelist.length - 1]
|
|
26
|
+
for (const scale of scales) {
|
|
27
|
+
if (scale > maxScale) {
|
|
28
|
+
result.push(scale)
|
|
29
|
+
break
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// There is no larger scales available, use the largest we have
|
|
34
|
+
if (result.length === 0) {
|
|
35
|
+
result.push(scales[scales.length - 1])
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export default filterPlatformAssetScales
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of https://github.com/facebook/react-native.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { PackagerAsset } from './assetPathUtils'
|
|
9
|
+
|
|
10
|
+
import assetPathUtils from './assetPathUtils'
|
|
11
|
+
import path from 'node:path'
|
|
12
|
+
|
|
13
|
+
function getAssetDestPathAndroid(asset: PackagerAsset, scale: number): string {
|
|
14
|
+
const androidFolder = assetPathUtils.getAndroidResourceFolderName(asset, scale)
|
|
15
|
+
const fileName = assetPathUtils.getResourceIdentifier(asset)
|
|
16
|
+
return path.join(androidFolder, `${fileName}.${asset.type}`)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export default getAssetDestPathAndroid
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of https://github.com/facebook/react-native.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type {PackagerAsset} from './assetPathUtils';
|
|
9
|
+
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
|
|
12
|
+
function getAssetDestPathIOS(asset: PackagerAsset, scale: number): string {
|
|
13
|
+
const suffix = scale === 1 ? '' : `@${scale}x`;
|
|
14
|
+
const fileName = `${asset.name + suffix}.${asset.type}`;
|
|
15
|
+
return path.join(
|
|
16
|
+
// Assets can have relative paths outside of the project root.
|
|
17
|
+
// Replace `../` with `_` to make sure they don't end up outside of
|
|
18
|
+
// the expected assets directory.
|
|
19
|
+
asset.httpServerLocation.substr(1).replace(/\.\.\//g, '_'),
|
|
20
|
+
fileName,
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default getAssetDestPathIOS;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { resolveConfig } from 'vite'
|
|
2
|
+
import { buildBundle } from './buildBundle'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Returns the build bundle function.
|
|
6
|
+
*
|
|
7
|
+
* Returns null if the project is not using @vxrn/vite-plugin-metro.
|
|
8
|
+
*/
|
|
9
|
+
export async function getBuildBundleFn() {
|
|
10
|
+
const viteConfig = await resolveConfig(
|
|
11
|
+
{
|
|
12
|
+
// configFile,
|
|
13
|
+
// configLoader,
|
|
14
|
+
// envFile,
|
|
15
|
+
// forceOptimizeDeps,
|
|
16
|
+
},
|
|
17
|
+
'build',
|
|
18
|
+
'production'
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
// Should call `resolveConfig` before checking for `globalThis['__viteMetroPluginOptions__']`
|
|
22
|
+
if (globalThis['__viteMetroPluginOptions__']) {
|
|
23
|
+
const metroBuildBundle = buildBundle.bind({
|
|
24
|
+
viteConfig,
|
|
25
|
+
metroPluginOptions: globalThis['__viteMetroPluginOptions__'],
|
|
26
|
+
})
|
|
27
|
+
return metroBuildBundle
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { AssetData } from 'metro/src/Assets'
|
|
2
|
+
import { cleanAssetCatalog, getImageSet, isCatalogAsset, writeImageSet } from './assetCatalogIOS'
|
|
3
|
+
import filterPlatformAssetScales from './filterPlatformAssetScales'
|
|
4
|
+
import getAssetDestPathAndroid from './getAssetDestPathAndroid'
|
|
5
|
+
import getAssetDestPathIOS from './getAssetDestPathIOS'
|
|
6
|
+
import fs from 'node:fs'
|
|
7
|
+
import path from 'node:path'
|
|
8
|
+
|
|
9
|
+
type CopiedFiles = {
|
|
10
|
+
[src: string]: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async function saveAssets(
|
|
14
|
+
assets: ReadonlyArray<AssetData>,
|
|
15
|
+
platform: string,
|
|
16
|
+
assetsDest?: string,
|
|
17
|
+
assetCatalogDest?: string
|
|
18
|
+
): Promise<void> {
|
|
19
|
+
if (assetsDest == null) {
|
|
20
|
+
console.warn('Assets destination folder is not set, skipping...')
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const filesToCopy: CopiedFiles = {}
|
|
25
|
+
|
|
26
|
+
const getAssetDestPath = platform === 'android' ? getAssetDestPathAndroid : getAssetDestPathIOS
|
|
27
|
+
|
|
28
|
+
const addAssetToCopy = (asset: AssetData) => {
|
|
29
|
+
const validScales = new Set(filterPlatformAssetScales(platform, asset.scales))
|
|
30
|
+
|
|
31
|
+
asset.scales.forEach((scale, idx) => {
|
|
32
|
+
if (!validScales.has(scale)) {
|
|
33
|
+
return
|
|
34
|
+
}
|
|
35
|
+
const src = asset.files[idx]
|
|
36
|
+
const dest = path.join(assetsDest, getAssetDestPath(asset, scale))
|
|
37
|
+
filesToCopy[src] = dest
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (platform === 'ios' && assetCatalogDest != null) {
|
|
42
|
+
// Use iOS Asset Catalog for images. This will allow Apple app thinning to
|
|
43
|
+
// remove unused scales from the optimized bundle.
|
|
44
|
+
const catalogDir = path.join(assetCatalogDest, 'RNAssets.xcassets')
|
|
45
|
+
if (!fs.existsSync(catalogDir)) {
|
|
46
|
+
console.error(
|
|
47
|
+
`Could not find asset catalog 'RNAssets.xcassets' in ${assetCatalogDest}. Make sure to create it if it does not exist.`
|
|
48
|
+
)
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
console.info('Adding images to asset catalog', catalogDir)
|
|
53
|
+
cleanAssetCatalog(catalogDir)
|
|
54
|
+
for (const asset of assets) {
|
|
55
|
+
if (isCatalogAsset(asset)) {
|
|
56
|
+
const imageSet = getImageSet(
|
|
57
|
+
catalogDir,
|
|
58
|
+
asset,
|
|
59
|
+
filterPlatformAssetScales(platform, asset.scales)
|
|
60
|
+
)
|
|
61
|
+
writeImageSet(imageSet)
|
|
62
|
+
} else {
|
|
63
|
+
addAssetToCopy(asset)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
console.info('Done adding images to asset catalog')
|
|
67
|
+
} else {
|
|
68
|
+
assets.forEach(addAssetToCopy)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return copyAll(filesToCopy)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function copyAll(filesToCopy: CopiedFiles) {
|
|
75
|
+
const queue = Object.keys(filesToCopy)
|
|
76
|
+
if (queue.length === 0) {
|
|
77
|
+
return Promise.resolve()
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
console.info(`Copying ${queue.length} asset files`)
|
|
81
|
+
return new Promise<void>((resolve, reject) => {
|
|
82
|
+
const copyNext = (error?: Error) => {
|
|
83
|
+
if (error) {
|
|
84
|
+
reject(error)
|
|
85
|
+
return
|
|
86
|
+
}
|
|
87
|
+
if (queue.length === 0) {
|
|
88
|
+
console.info('Done copying assets')
|
|
89
|
+
resolve()
|
|
90
|
+
} else {
|
|
91
|
+
// queue.length === 0 is checked in previous branch, so this is string
|
|
92
|
+
const src = queue.shift()!
|
|
93
|
+
// $FlowFixMe[incompatible-type]
|
|
94
|
+
const dest = filesToCopy[src]
|
|
95
|
+
// $FlowFixMe[incompatible-call]
|
|
96
|
+
copy(src, dest, copyNext)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
copyNext()
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function copy(src: string, dest: string, callback: (error: Error) => void): void {
|
|
104
|
+
const destDir = path.dirname(dest)
|
|
105
|
+
fs.mkdir(destDir, { recursive: true }, (err?) => {
|
|
106
|
+
if (err) {
|
|
107
|
+
callback(err)
|
|
108
|
+
return
|
|
109
|
+
}
|
|
110
|
+
fs.createReadStream(src).pipe(fs.createWriteStream(dest)).on('finish', callback)
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export default saveAssets
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type BundleCommandArgs = {
|
|
2
|
+
assetsDest?: string
|
|
3
|
+
assetCatalogDest?: string
|
|
4
|
+
entryFile: string
|
|
5
|
+
resetCache: boolean
|
|
6
|
+
resetGlobalCache: boolean
|
|
7
|
+
transformer?: string
|
|
8
|
+
minify?: boolean
|
|
9
|
+
config?: string
|
|
10
|
+
platform: 'ios' | 'android'
|
|
11
|
+
dev: boolean
|
|
12
|
+
bundleOutput: string
|
|
13
|
+
bundleEncoding?: 'utf8' | 'utf16le' | 'ascii'
|
|
14
|
+
maxWorkers?: number
|
|
15
|
+
sourcemapOutput?: string
|
|
16
|
+
sourcemapSourcesRoot?: string
|
|
17
|
+
sourcemapUseAbsolutePath: boolean
|
|
18
|
+
verbose: boolean
|
|
19
|
+
unstableTransformProfile: string
|
|
20
|
+
indexedRamBundle?: boolean
|
|
21
|
+
resolverOption?: Array<string>
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as bundle from './bundle/index'
|
|
@@ -16,6 +16,7 @@ import assert from 'node:assert'
|
|
|
16
16
|
import type { TransformOptions } from './babel-core'
|
|
17
17
|
import { loadBabelConfig } from './loadBabelConfig'
|
|
18
18
|
import { transformSync } from './transformSync'
|
|
19
|
+
import type { ViteCustomTransformOptions } from './types'
|
|
19
20
|
|
|
20
21
|
export type ExpoBabelCaller = TransformOptions['caller'] & {
|
|
21
22
|
supportsReactCompiler?: boolean
|
|
@@ -140,9 +141,23 @@ const transform: BabelTransformer['transform'] = ({
|
|
|
140
141
|
// `plugins` is used for `functionMapBabelPlugin` from `metro-source-map`. Could make sense to move this to `babel-preset-expo` too.
|
|
141
142
|
plugins,
|
|
142
143
|
}: BabelTransformerArgs): ReturnType<BabelTransformer['transform']> => {
|
|
143
|
-
const customOptionsFromVite: {
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
const customOptionsFromVite: ViteCustomTransformOptions = (() => {
|
|
145
|
+
const c: any = options.customTransformOptions?.vite
|
|
146
|
+
if (!c || typeof c !== 'object') {
|
|
147
|
+
throw new Error(
|
|
148
|
+
`[vite-plugin-metro/babel-transformer]: Expect options.customTransformOptions.vite to be an object, but got ${typeof c}.`
|
|
149
|
+
)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// if (!c.config) {
|
|
153
|
+
// throw new Error(
|
|
154
|
+
// `[vite-plugin-metro/babel-transformer]: Expect options.customTransformOptions.vite to be an ViteCustomTransformOptions type, but the config property is missing.`
|
|
155
|
+
// )
|
|
156
|
+
// }
|
|
157
|
+
|
|
158
|
+
return c
|
|
159
|
+
})()
|
|
160
|
+
|
|
146
161
|
const babelConfigFromVitePlugin: TransformOptions = customOptionsFromVite.babelConfig || {}
|
|
147
162
|
|
|
148
163
|
const OLD_BABEL_ENV = process.env.BABEL_ENV
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ResolvedConfig } from 'vite'
|
|
2
|
+
import type { TransformOptions } from '@babel/core'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A bag of stuff we will pass into Metro's transformFile function under the
|
|
6
|
+
* `vite` key of `customTransformOptions`.
|
|
7
|
+
*/
|
|
8
|
+
export type ViteCustomTransformOptions = {
|
|
9
|
+
/**
|
|
10
|
+
* The Vite config object.
|
|
11
|
+
*/
|
|
12
|
+
// config: ResolvedConfig
|
|
13
|
+
/**
|
|
14
|
+
* Additional Babel config to use, specified directly by user of the
|
|
15
|
+
* Vite Metro plugin as the `babelConfig` option.
|
|
16
|
+
*/
|
|
17
|
+
babelConfig?: TransformOptions
|
|
18
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PluginObj } from '@babel/core';
|
|
2
|
+
type PluginOptions = {
|
|
3
|
+
env?: Record<string, string | undefined>;
|
|
4
|
+
};
|
|
5
|
+
export declare const importMetaEnvPlugin: (api: object, options: PluginOptions | null | undefined, dirname: string) => PluginObj<import("@babel/core").PluginPass>;
|
|
6
|
+
export default importMetaEnvPlugin;
|
|
7
|
+
//# sourceMappingURL=import-meta-env-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-meta-env-plugin.d.ts","sourceRoot":"","sources":["../../src/babel-plugins/import-meta-env-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CACzC,CAAA;AAED,eAAO,MAAM,mBAAmB,0HA6C9B,CAAA;AAEF,eAAe,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMetroBabelConfigFromViteConfig.d.ts","sourceRoot":"","sources":["../../src/metro-config/getMetroBabelConfigFromViteConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAa1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAInD,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAgC1F"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ResolvedConfig } from 'vite';
|
|
2
|
+
import type { MetroPluginOptions } from '../plugins/metroPlugin';
|
|
3
|
+
import type { MetroConfigExtended } from './types';
|
|
4
|
+
export declare function getMetroConfigFromViteConfig(config: ResolvedConfig, metroPluginOptions: MetroPluginOptions): Promise<MetroConfigExtended>;
|
|
5
|
+
//# sourceMappingURL=getMetroConfigFromViteConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMetroConfigFromViteConfig.d.ts","sourceRoot":"","sources":["../../src/metro-config/getMetroConfigFromViteConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAW1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAI/D,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,cAAc,EACtB,kBAAkB,EAAE,kBAAkB,GACrC,OAAO,CAAC,mBAAmB,CAAC,CA4H9B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type Server from 'metro/src/Server';
|
|
2
|
+
import type { ResolvedConfig } from 'vite';
|
|
3
|
+
import type { MetroPluginOptions } from '../plugins/metroPlugin';
|
|
4
|
+
export declare function patchMetroServerWithViteConfigAndMetroPluginOptions(metroServer: Server, config: ResolvedConfig, options: MetroPluginOptions): void;
|
|
5
|
+
//# sourceMappingURL=patchMetroServerWithViteConfigAndMetroPluginOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchMetroServerWithViteConfigAndMetroPluginOptions.d.ts","sourceRoot":"","sources":["../../src/metro-config/patchMetroServerWithViteConfigAndMetroPluginOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAIhE,wBAAgB,mDAAmD,CACjE,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,kBAAkB,QAkC5B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ConfigT } from 'metro-config';
|
|
2
|
+
export type MetroConfig = ConfigT;
|
|
3
|
+
export type ExtraConfig = {
|
|
4
|
+
getResolveMainModuleName?: (p: {
|
|
5
|
+
platform: 'ios' | 'android';
|
|
6
|
+
}) => string;
|
|
7
|
+
};
|
|
8
|
+
export type MetroConfigExtended = MetroConfig & ExtraConfig;
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/metro-config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,MAAM,WAAW,GAAG,OAAO,CAAA;AAEjC,MAAM,MAAM,WAAW,GAAG;IACxB,wBAAwB,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;KAAE,KAAK,MAAM,CAAA;CAC1E,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAA"}
|