UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

59 lines (53 loc) • 1.96 kB
import type { metroPlugin } from '@vxrn/vite-plugin-metro' import { createRequire } from 'node:module' import { buildOneBabelPlugins } from '../babel-preset' import { buildOneMetroResolverOverrides } from './buildOneMetroResolverOverrides' export function getViteMetroPluginOptions({ projectRoot, relativeRouterRoot, ignoredRouteFiles, linking, userDefaultConfigOverrides, setupFile, }: { projectRoot: string relativeRouterRoot: string ignoredRouteFiles?: Array<`**/*${string}`> linking?: unknown userDefaultConfigOverrides?: NonNullable< Parameters<typeof metroPlugin>[0] >['defaultConfigOverrides'] setupFile?: string | { native?: string; ios?: string; android?: string } }): Parameters<typeof metroPlugin>[0] { const require = createRequire(projectRoot + '/') try { require.resolve('babel-preset-expo') } catch { throw new Error( `[one] Metro requires babel-preset-expo in the app at ${projectRoot}. Install it with your package manager, or remove native.bundler: 'metro' to use One's default native bundler.` ) } const applyOneResolverOverrides = buildOneMetroResolverOverrides({ projectRoot }) return { oneViteMetroBabelConfig: true, defaultConfigOverrides: (defaultConfig) => { let config = applyOneResolverOverrides(defaultConfig) if (typeof userDefaultConfigOverrides === 'function') { config = userDefaultConfigOverrides(config) } // TODO: support if userDefaultConfigOverrides is an object, or do not let userDefaultConfigOverrides be an object at all? return config }, babelConfig: { plugins: buildOneBabelPlugins({ projectRoot, relativeRouterRoot, ignoredRouteFiles, linking, setupFile, // vite path injects import-meta-env-plugin separately via the // metro server transformFile hook using the user's vite `define`. includeImportMetaEnv: false, }), }, } }