const fs = require("node:fs"); const path = require("node:path"); const { getDefaultConfig } = require("expo/metro-config"); const { withUniwindConfig } = require("uniwind/metro"); /** @type {import("expo/metro-config").MetroConfig} */ const config = getDefaultConfig(__dirname); const workspaceRoot = path.resolve(__dirname, "../.."); const escapedWorkspaceRoot = workspaceRoot.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); const mobileShikiRoot = path.dirname(require.resolve("shiki/package.json", { paths: [__dirname] })); const resolveShikiDependencyRoot = (packageName) => { const entryPath = require.resolve(packageName, { paths: [mobileShikiRoot] }); let currentDir = path.dirname(entryPath); while (!fs.existsSync(path.join(currentDir, "package.json"))) { const parentDir = path.dirname(currentDir); if (parentDir === currentDir) { throw new Error(`Could not resolve package root for ${packageName}`); } currentDir = parentDir; } return currentDir; }; config.watchFolders = [...new Set([...(config.watchFolders ?? []), workspaceRoot])]; config.resolver = { ...config.resolver, blockList: [ ...(Array.isArray(config.resolver?.blockList) ? config.resolver.blockList : config.resolver?.blockList ? [config.resolver.blockList] : []), new RegExp(`${escapedWorkspaceRoot}[/\\\\]\\.t3[/\\\\].*`), ], extraNodeModules: { // oxlint-disable-next-line unicorn/no-useless-fallback-in-spread ...(config.resolver?.extraNodeModules ?? {}), shiki: mobileShikiRoot, "@shikijs/core": resolveShikiDependencyRoot("@shikijs/core"), "@shikijs/engine-javascript": resolveShikiDependencyRoot("@shikijs/engine-javascript"), "@shikijs/engine-oniguruma": resolveShikiDependencyRoot("@shikijs/engine-oniguruma"), "@shikijs/langs": resolveShikiDependencyRoot("@shikijs/langs"), "@shikijs/themes": resolveShikiDependencyRoot("@shikijs/themes"), "@shikijs/types": resolveShikiDependencyRoot("@shikijs/types"), "@shikijs/vscode-textmate": resolveShikiDependencyRoot("@shikijs/vscode-textmate"), }, }; module.exports = withUniwindConfig(config, { cssEntryFile: "./global.css", polyfills: { rem: 14 }, });