From 17b59084c4a3345f127f45d3083254e060360bba Mon Sep 17 00:00:00 2001 From: xuatz Date: Sat, 16 Aug 2025 23:28:00 +0900 Subject: fix(mobile): change to metro.config.cjs since migrating to type: module (#1845) --- apps/mobile/app.json | 4 +- apps/mobile/metro.config.cjs | 57 +++++++++++++++++++++++++++++ apps/mobile/metro.config.js | 57 ----------------------------- apps/mobile/plugins/camera-not-required.cjs | 23 ++++++++++++ apps/mobile/plugins/camera-not-required.js | 23 ------------ apps/mobile/plugins/trust-local-certs.cjs | 43 ++++++++++++++++++++++ apps/mobile/plugins/trust-local-certs.js | 43 ---------------------- 7 files changed, 125 insertions(+), 125 deletions(-) create mode 100644 apps/mobile/metro.config.cjs delete mode 100644 apps/mobile/metro.config.js create mode 100644 apps/mobile/plugins/camera-not-required.cjs delete mode 100644 apps/mobile/plugins/camera-not-required.js create mode 100644 apps/mobile/plugins/trust-local-certs.cjs delete mode 100644 apps/mobile/plugins/trust-local-certs.js diff --git a/apps/mobile/app.json b/apps/mobile/app.json index 6b02683b..908f6d97 100644 --- a/apps/mobile/app.json +++ b/apps/mobile/app.json @@ -54,8 +54,8 @@ "versionCode": 24 }, "plugins": [ - "./plugins/trust-local-certs.js", - "./plugins/camera-not-required.js", + "./plugins/trust-local-certs.cjs", + "./plugins/camera-not-required.cjs", "expo-router", [ "expo-share-intent", diff --git a/apps/mobile/metro.config.cjs b/apps/mobile/metro.config.cjs new file mode 100644 index 00000000..f9679cb2 --- /dev/null +++ b/apps/mobile/metro.config.cjs @@ -0,0 +1,57 @@ +// Learn more: https://docs.expo.dev/guides/monorepos/ +const { getDefaultConfig } = require("expo/metro-config"); +const { FileStore } = require("metro-cache"); +const { withNativeWind } = require("nativewind/metro"); +const path = require("path"); + +module.exports = withTurborepoManagedCache( + withMonorepoPaths( + // eslint-disable-next-line no-undef + withNativeWind(getDefaultConfig(__dirname), { + input: "./globals.css", + configPath: "./tailwind.config.ts", + }), + ), +); + +/** + * Add the monorepo paths to the Metro config. + * This allows Metro to resolve modules from the monorepo. + * + * @see https://docs.expo.dev/guides/monorepos/#modify-the-metro-config + * @param {import('expo/metro-config').MetroConfig} config + * @returns {import('expo/metro-config').MetroConfig} + */ +function withMonorepoPaths(config) { + // eslint-disable-next-line no-undef + const projectRoot = __dirname; + const workspaceRoot = path.resolve(projectRoot, "../.."); + + // #1 - Watch all files in the monorepo + config.watchFolders = [workspaceRoot]; + + // #2 - Resolve modules within the project's `node_modules` first, then all monorepo modules + config.resolver.nodeModulesPaths = [ + path.resolve(projectRoot, "node_modules"), + path.resolve(workspaceRoot, "node_modules"), + ]; + + return config; +} + +/** + * Move the Metro cache to the `node_modules/.cache/metro` folder. + * This repository configured Turborepo to use this cache location as well. + * If you have any environment variables, you can configure Turborepo to invalidate it when needed. + * + * @see https://turbo.build/repo/docs/reference/configuration#env + * @param {import('expo/metro-config').MetroConfig} config + * @returns {import('expo/metro-config').MetroConfig} + */ +function withTurborepoManagedCache(config) { + config.cacheStores = [ + // eslint-disable-next-line no-undef + new FileStore({ root: path.join(__dirname, "node_modules/.cache/metro") }), + ]; + return config; +} diff --git a/apps/mobile/metro.config.js b/apps/mobile/metro.config.js deleted file mode 100644 index f9679cb2..00000000 --- a/apps/mobile/metro.config.js +++ /dev/null @@ -1,57 +0,0 @@ -// Learn more: https://docs.expo.dev/guides/monorepos/ -const { getDefaultConfig } = require("expo/metro-config"); -const { FileStore } = require("metro-cache"); -const { withNativeWind } = require("nativewind/metro"); -const path = require("path"); - -module.exports = withTurborepoManagedCache( - withMonorepoPaths( - // eslint-disable-next-line no-undef - withNativeWind(getDefaultConfig(__dirname), { - input: "./globals.css", - configPath: "./tailwind.config.ts", - }), - ), -); - -/** - * Add the monorepo paths to the Metro config. - * This allows Metro to resolve modules from the monorepo. - * - * @see https://docs.expo.dev/guides/monorepos/#modify-the-metro-config - * @param {import('expo/metro-config').MetroConfig} config - * @returns {import('expo/metro-config').MetroConfig} - */ -function withMonorepoPaths(config) { - // eslint-disable-next-line no-undef - const projectRoot = __dirname; - const workspaceRoot = path.resolve(projectRoot, "../.."); - - // #1 - Watch all files in the monorepo - config.watchFolders = [workspaceRoot]; - - // #2 - Resolve modules within the project's `node_modules` first, then all monorepo modules - config.resolver.nodeModulesPaths = [ - path.resolve(projectRoot, "node_modules"), - path.resolve(workspaceRoot, "node_modules"), - ]; - - return config; -} - -/** - * Move the Metro cache to the `node_modules/.cache/metro` folder. - * This repository configured Turborepo to use this cache location as well. - * If you have any environment variables, you can configure Turborepo to invalidate it when needed. - * - * @see https://turbo.build/repo/docs/reference/configuration#env - * @param {import('expo/metro-config').MetroConfig} config - * @returns {import('expo/metro-config').MetroConfig} - */ -function withTurborepoManagedCache(config) { - config.cacheStores = [ - // eslint-disable-next-line no-undef - new FileStore({ root: path.join(__dirname, "node_modules/.cache/metro") }), - ]; - return config; -} diff --git a/apps/mobile/plugins/camera-not-required.cjs b/apps/mobile/plugins/camera-not-required.cjs new file mode 100644 index 00000000..75116604 --- /dev/null +++ b/apps/mobile/plugins/camera-not-required.cjs @@ -0,0 +1,23 @@ +const { withAndroidManifest } = require("@expo/config-plugins"); + +const withCameraNotRequired = (config) => { + return withAndroidManifest(config, async (config) => { + config.modResults = await setCustomConfigAsync(config, config.modResults); + return config; + }); +}; + +async function setCustomConfigAsync(_config, androidManifest) { + const usesFeature = androidManifest.manifest["uses-feature"] ?? []; + usesFeature.push({ + $: { + "android:name": "android.hardware.camera", + "android:required": "false", + }, + }); + androidManifest.manifest["uses-feature"] = usesFeature; + + return androidManifest; +} + +module.exports = withCameraNotRequired; diff --git a/apps/mobile/plugins/camera-not-required.js b/apps/mobile/plugins/camera-not-required.js deleted file mode 100644 index 75116604..00000000 --- a/apps/mobile/plugins/camera-not-required.js +++ /dev/null @@ -1,23 +0,0 @@ -const { withAndroidManifest } = require("@expo/config-plugins"); - -const withCameraNotRequired = (config) => { - return withAndroidManifest(config, async (config) => { - config.modResults = await setCustomConfigAsync(config, config.modResults); - return config; - }); -}; - -async function setCustomConfigAsync(_config, androidManifest) { - const usesFeature = androidManifest.manifest["uses-feature"] ?? []; - usesFeature.push({ - $: { - "android:name": "android.hardware.camera", - "android:required": "false", - }, - }); - androidManifest.manifest["uses-feature"] = usesFeature; - - return androidManifest; -} - -module.exports = withCameraNotRequired; diff --git a/apps/mobile/plugins/trust-local-certs.cjs b/apps/mobile/plugins/trust-local-certs.cjs new file mode 100644 index 00000000..40275034 --- /dev/null +++ b/apps/mobile/plugins/trust-local-certs.cjs @@ -0,0 +1,43 @@ +const { AndroidConfig, withAndroidManifest } = require("@expo/config-plugins"); +const { Paths } = require("@expo/config-plugins/build/android"); +const path = require("path"); +const fs = require("fs"); +const fsPromises = fs.promises; + +const { getMainApplicationOrThrow } = AndroidConfig.Manifest; + +const withTrustLocalCerts = (config) => { + return withAndroidManifest(config, async (config) => { + config.modResults = await setCustomConfigAsync(config, config.modResults); + return config; + }); +}; + +async function setCustomConfigAsync(config, androidManifest) { + const src_file_pat = path.join(__dirname, "network_security_config.xml"); + const res_file_path = path.join( + await Paths.getResourceFolderAsync(config.modRequest.projectRoot), + "xml", + "network_security_config.xml", + ); + + const res_dir = path.resolve(res_file_path, ".."); + + if (!fs.existsSync(res_dir)) { + await fsPromises.mkdir(res_dir); + } + + try { + await fsPromises.copyFile(src_file_pat, res_file_path); + } catch (e) { + throw e; + } + + const mainApplication = getMainApplicationOrThrow(androidManifest); + mainApplication.$["android:networkSecurityConfig"] = + "@xml/network_security_config"; + + return androidManifest; +} + +module.exports = withTrustLocalCerts; diff --git a/apps/mobile/plugins/trust-local-certs.js b/apps/mobile/plugins/trust-local-certs.js deleted file mode 100644 index 40275034..00000000 --- a/apps/mobile/plugins/trust-local-certs.js +++ /dev/null @@ -1,43 +0,0 @@ -const { AndroidConfig, withAndroidManifest } = require("@expo/config-plugins"); -const { Paths } = require("@expo/config-plugins/build/android"); -const path = require("path"); -const fs = require("fs"); -const fsPromises = fs.promises; - -const { getMainApplicationOrThrow } = AndroidConfig.Manifest; - -const withTrustLocalCerts = (config) => { - return withAndroidManifest(config, async (config) => { - config.modResults = await setCustomConfigAsync(config, config.modResults); - return config; - }); -}; - -async function setCustomConfigAsync(config, androidManifest) { - const src_file_pat = path.join(__dirname, "network_security_config.xml"); - const res_file_path = path.join( - await Paths.getResourceFolderAsync(config.modRequest.projectRoot), - "xml", - "network_security_config.xml", - ); - - const res_dir = path.resolve(res_file_path, ".."); - - if (!fs.existsSync(res_dir)) { - await fsPromises.mkdir(res_dir); - } - - try { - await fsPromises.copyFile(src_file_pat, res_file_path); - } catch (e) { - throw e; - } - - const mainApplication = getMainApplicationOrThrow(androidManifest); - mainApplication.$["android:networkSecurityConfig"] = - "@xml/network_security_config"; - - return androidManifest; -} - -module.exports = withTrustLocalCerts; -- cgit v1.2.3-70-g09d2