@expo/cli 0.18.19 → 0.18.21

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.
Files changed (49) hide show
  1. package/build/bin/cli +1 -1
  2. package/build/src/export/createMetadataJson.js.map +1 -1
  3. package/build/src/export/embed/exportEmbedAsync.js +110 -41
  4. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  5. package/build/src/export/embed/resolveOptions.js +0 -1
  6. package/build/src/export/embed/resolveOptions.js.map +1 -1
  7. package/build/src/export/exportApp.js +133 -92
  8. package/build/src/export/exportApp.js.map +1 -1
  9. package/build/src/export/exportAssets.js.map +1 -1
  10. package/build/src/export/exportHermes.js +15 -0
  11. package/build/src/export/exportHermes.js.map +1 -1
  12. package/build/src/export/exportStaticAsync.js +5 -49
  13. package/build/src/export/exportStaticAsync.js.map +1 -1
  14. package/build/src/export/favicon.js +5 -4
  15. package/build/src/export/favicon.js.map +1 -1
  16. package/build/src/export/saveAssets.js.map +1 -1
  17. package/build/src/run/startBundler.js +1 -8
  18. package/build/src/run/startBundler.js.map +1 -1
  19. package/build/src/start/server/BundlerDevServer.js +10 -3
  20. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  21. package/build/src/start/server/DevServerManager.js +19 -4
  22. package/build/src/start/server/DevServerManager.js.map +1 -1
  23. package/build/src/start/server/DevelopmentSession.js +21 -11
  24. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  25. package/build/src/start/server/getStaticRenderFunctions.js +9 -123
  26. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  27. package/build/src/start/server/metro/MetroBundlerDevServer.js +469 -177
  28. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  29. package/build/src/start/server/metro/createServerRouteMiddleware.js +0 -9
  30. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  31. package/build/src/start/server/metro/instantiateMetro.js +44 -37
  32. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  33. package/build/src/start/server/metro/metroErrorInterface.js +49 -2
  34. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  35. package/build/src/start/server/metro/metroPrivateServer.js +26 -0
  36. package/build/src/start/server/metro/metroPrivateServer.js.map +1 -0
  37. package/build/src/start/server/metro/runServer-fork.js +44 -21
  38. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  39. package/build/src/start/server/metro/withMetroMultiPlatform.js +9 -1
  40. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  41. package/build/src/start/server/middleware/ManifestMiddleware.js +7 -4
  42. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  43. package/build/src/start/server/middleware/metroOptions.js +16 -4
  44. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  45. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  46. package/build/src/utils/telemetry/getContext.js +1 -1
  47. package/package.json +3 -3
  48. package/build/src/export/fork-bundleAsync.js +0 -284
  49. package/build/src/export/fork-bundleAsync.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/withMetroMultiPlatform.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { ExpoConfig, Platform } from '@expo/config';\nimport fs from 'fs';\nimport Bundler from 'metro/src/Bundler';\nimport { ConfigT } from 'metro-config';\nimport { Resolution, ResolutionContext, CustomResolutionContext } from 'metro-resolver';\nimport * as metroResolver from 'metro-resolver';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { createFastResolver } from './createExpoMetroResolver';\nimport { isNodeExternal, shouldCreateVirtualCanary, shouldCreateVirtualShim } from './externals';\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { getMetroBundlerWithVirtualModules } from './metroVirtualModules';\nimport {\n withMetroErrorReportingResolver,\n withMetroMutatedResolverContext,\n withMetroResolvers,\n} from './withMetroResolvers';\nimport { Log } from '../../../log';\nimport { FileNotifier } from '../../../utils/FileNotifier';\nimport { env } from '../../../utils/env';\nimport { installExitHooks } from '../../../utils/exit';\nimport { isInteractive } from '../../../utils/interactive';\nimport { loadTsConfigPathsAsync, TsConfigPaths } from '../../../utils/tsconfig/loadTsConfigPaths';\nimport { resolveWithTsConfigPaths } from '../../../utils/tsconfig/resolveWithTsConfigPaths';\nimport { isServerEnvironment } from '../middleware/metroOptions';\nimport { PlatformBundlers } from '../platformBundlers';\n\ntype Mutable<T> = { -readonly [K in keyof T]: T[K] };\n\nconst debug = require('debug')('expo:start:server:metro:multi-platform') as typeof console.log;\n\nfunction withWebPolyfills(\n config: ConfigT,\n {\n getMetroBundler,\n }: {\n getMetroBundler: () => Bundler;\n }\n): ConfigT {\n const originalGetPolyfills = config.serializer.getPolyfills\n ? config.serializer.getPolyfills.bind(config.serializer)\n : () => [];\n\n const getPolyfills = (ctx: { platform: string | null }): readonly string[] => {\n const virtualEnvVarId = `\\0polyfill:environment-variables`;\n\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualEnvVarId,\n (() => {\n return `//`;\n })()\n );\n\n const virtualModuleId = `\\0polyfill:external-require`;\n\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n (() => {\n if (ctx.platform === 'web') {\n return `global.$$require_external = typeof window === \"undefined\" ? require : () => null;`;\n } else {\n // Wrap in try/catch to support Android.\n return 'try { global.$$require_external = typeof expo === \"undefined\" ? eval(\"require\") : (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} } catch { global.$$require_external = (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} }';\n }\n })()\n );\n\n if (ctx.platform === 'web') {\n return [virtualModuleId, virtualEnvVarId];\n }\n\n // Generally uses `rn-get-polyfills`\n const polyfills = originalGetPolyfills(ctx);\n return [...polyfills, virtualModuleId, virtualEnvVarId];\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n getPolyfills,\n },\n };\n}\n\nfunction normalizeSlashes(p: string) {\n return p.replace(/\\\\/g, '/');\n}\n\nexport function getNodejsExtensions(srcExts: readonly string[]): string[] {\n const mjsExts = srcExts.filter((ext) => /mjs$/.test(ext));\n const nodejsSourceExtensions = srcExts.filter((ext) => !/mjs$/.test(ext));\n // find index of last `*.js` extension\n const jsIndex = nodejsSourceExtensions.reduce((index, ext, i) => {\n return /jsx?$/.test(ext) ? i : index;\n }, -1);\n\n // insert `*.mjs` extensions after `*.js` extensions\n nodejsSourceExtensions.splice(jsIndex + 1, 0, ...mjsExts);\n\n return nodejsSourceExtensions;\n}\n\n/**\n * Apply custom resolvers to do the following:\n * - Disable `.native.js` extensions on web.\n * - Alias `react-native` to `react-native-web` on web.\n * - Redirect `react-native-web/dist/modules/AssetRegistry/index.js` to `@react-native/assets/registry.js` on web.\n * - Add support for `tsconfig.json`/`jsconfig.json` aliases via `compilerOptions.paths`.\n * - Alias react-native renderer code to a vendored React canary build on native.\n */\nexport function withExtendedResolver(\n config: ConfigT,\n {\n tsconfig,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n getMetroBundler,\n }: {\n tsconfig: TsConfigPaths | null;\n isTsconfigPathsEnabled?: boolean;\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled?: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (isFastResolverEnabled) {\n Log.warn(`Experimental bundling features are enabled.`);\n }\n if (isReactCanaryEnabled) {\n Log.warn(`Experimental React Canary version is enabled.`);\n }\n\n // Get the `transformer.assetRegistryPath`\n // this needs to be unified since you can't dynamically\n // swap out the transformer based on platform.\n const assetRegistryPath = fs.realpathSync(\n path.resolve(resolveFrom(config.projectRoot, '@react-native/assets-registry/registry.js'))\n );\n\n const defaultResolver = metroResolver.resolve;\n const resolver = isFastResolverEnabled\n ? createFastResolver({\n preserveSymlinks: config.resolver?.unstable_enableSymlinks ?? true,\n blockList: Array.isArray(config.resolver?.blockList)\n ? config.resolver?.blockList\n : [config.resolver?.blockList],\n })\n : defaultResolver;\n\n const aliases: { [key: string]: Record<string, string> } = {\n web: {\n 'react-native': 'react-native-web',\n 'react-native/index': 'react-native-web',\n },\n };\n\n const universalAliases: [RegExp, string][] = [];\n\n // This package is currently always installed as it is included in the `expo` package.\n if (resolveFrom.silent(config.projectRoot, '@expo/vector-icons')) {\n debug('Enabling alias: react-native-vector-icons -> @expo/vector-icons');\n universalAliases.push([/^react-native-vector-icons(\\/.*)?/, '@expo/vector-icons$1']);\n }\n\n const preferredMainFields: { [key: string]: string[] } = {\n // Defaults from Expo Webpack. Most packages using `react-native` don't support web\n // in the `react-native` field, so we should prefer the `browser` field.\n // https://github.com/expo/router/issues/37\n web: ['browser', 'module', 'main'],\n };\n\n let tsConfigResolve =\n isTsconfigPathsEnabled && (tsconfig?.paths || tsconfig?.baseUrl != null)\n ? resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsconfig.paths ?? {},\n baseUrl: tsconfig.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsconfig.baseUrl,\n })\n : null;\n\n // TODO: Move this to be a transform key for invalidation.\n if (!isExporting && isInteractive()) {\n if (isTsconfigPathsEnabled) {\n // TODO: We should track all the files that used imports and invalidate them\n // currently the user will need to save all the files that use imports to\n // use the new aliases.\n const configWatcher = new FileNotifier(config.projectRoot, [\n './tsconfig.json',\n './jsconfig.json',\n ]);\n configWatcher.startObserving(() => {\n debug('Reloading tsconfig.json');\n loadTsConfigPathsAsync(config.projectRoot).then((tsConfigPaths) => {\n if (tsConfigPaths?.paths && !!Object.keys(tsConfigPaths.paths).length) {\n debug('Enabling tsconfig.json paths support');\n tsConfigResolve = resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsConfigPaths.paths ?? {},\n baseUrl: tsConfigPaths.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsConfigPaths.baseUrl,\n });\n } else {\n debug('Disabling tsconfig.json paths support');\n tsConfigResolve = null;\n }\n });\n });\n\n // TODO: This probably prevents the process from exiting.\n installExitHooks(() => {\n configWatcher.stopObserving();\n });\n } else {\n debug('Skipping tsconfig.json paths support');\n }\n }\n\n let nodejsSourceExtensions: string[] | null = null;\n\n function getStrictResolver(\n { resolveRequest, ...context }: ResolutionContext,\n platform: string | null\n ) {\n return function doResolve(moduleName: string): Resolution {\n return resolver(context, moduleName, platform);\n };\n }\n\n function getOptionalResolver(context: ResolutionContext, platform: string | null) {\n const doResolve = getStrictResolver(context, platform);\n return function optionalResolve(moduleName: string): Resolution | null {\n try {\n return doResolve(moduleName);\n } catch (error) {\n // If the error is directly related to a resolver not being able to resolve a module, then\n // we can ignore the error and try the next resolver. Otherwise, we should throw the error.\n const isResolutionError =\n isFailedToResolveNameError(error) || isFailedToResolvePathError(error);\n if (!isResolutionError) {\n throw error;\n }\n }\n return null;\n };\n }\n\n const metroConfigWithCustomResolver = withMetroResolvers(config, [\n // Mock out production react imports in development.\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n // This resolution is dev-only to prevent bundling the production React packages in development.\n // @ts-expect-error: dev is not on type.\n if (!context.dev) return null;\n\n if (\n // Match react-native renderers.\n (platform !== 'web' &&\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/]react-native[\\\\/]/) &&\n moduleName.match(/([\\\\/]ReactFabric|ReactNativeRenderer)-prod/)) ||\n // Match react production imports.\n (moduleName.match(/\\.production(\\.min)?\\.js$/) &&\n // Match if the import originated from a react package.\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/](react[-\\\\/]|scheduler[\\\\/])/))\n ) {\n debug(`Skipping production module: ${moduleName}`);\n // /Users/path/to/expo/node_modules/react/index.js ./cjs/react.production.min.js\n // /Users/path/to/expo/node_modules/react/jsx-dev-runtime.js ./cjs/react-jsx-dev-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n // /Users/path/to/expo/node_modules/react-refresh/runtime.js ./cjs/react-refresh-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/scheduler/index.native.js ./cjs/scheduler.native.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n return {\n type: 'empty',\n };\n }\n return null;\n },\n // tsconfig paths\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n return (\n tsConfigResolve?.(\n {\n originModulePath: context.originModulePath,\n moduleName,\n },\n getOptionalResolver(context, platform)\n ) ?? null\n );\n },\n\n // Node.js externals support\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n const isServer =\n context.customResolverOptions?.environment === 'node' ||\n context.customResolverOptions?.environment === 'react-server';\n\n if (platform !== 'web' && !isServer) {\n // This is a web/server-only feature, we may extend the shimming to native platforms in the future.\n return null;\n }\n\n const moduleId = isNodeExternal(moduleName);\n if (!moduleId) {\n return null;\n }\n\n if (\n // In browser runtimes, we want to either resolve a local node module by the same name, or shim the module to\n // prevent crashing when Node.js built-ins are imported.\n !isServer\n ) {\n // Perform optional resolve first. If the module doesn't exist (no module in the node_modules)\n // then we can mock the file to use an empty module.\n const result = getOptionalResolver(context, platform)(moduleName);\n return (\n result ?? {\n // In this case, mock the file to use an empty module.\n type: 'empty',\n }\n );\n }\n\n const contents = `module.exports=$$require_external('node:${moduleId}');`;\n debug(`Virtualizing Node.js \"${moduleId}\"`);\n const virtualModuleId = `\\0node:${moduleId}`;\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n },\n\n // Basic moduleId aliases\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n // Conditionally remap `react-native` to `react-native-web` on web in\n // a way that doesn't require Babel to resolve the alias.\n if (platform && platform in aliases && aliases[platform][moduleName]) {\n const redirectedModuleName = aliases[platform][moduleName];\n return getStrictResolver(context, platform)(redirectedModuleName);\n }\n\n for (const [matcher, alias] of universalAliases) {\n const match = moduleName.match(matcher);\n if (match) {\n const aliasedModule = alias.replace(\n /\\$(\\d+)/g,\n (_, index) => match[parseInt(index, 10)] ?? ''\n );\n const doResolve = getStrictResolver(context, platform);\n debug(`Alias \"${moduleName}\" to \"${aliasedModule}\"`);\n return doResolve(aliasedModule);\n }\n }\n\n return null;\n },\n\n // TODO: Reduce these as much as possible in the future.\n // Complex post-resolution rewrites.\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n const doResolve = getStrictResolver(context, platform);\n\n const result = doResolve(moduleName);\n\n if (result.type !== 'sourceFile') {\n return result;\n }\n\n if (platform === 'web') {\n // Replace the web resolver with the original one.\n // This is basically an alias for web-only.\n // TODO: Drop this in favor of the standalone asset registry module.\n if (shouldAliasAssetRegistryForWeb(platform, result)) {\n // @ts-expect-error: `readonly` for some reason.\n result.filePath = assetRegistryPath;\n }\n\n if (platform === 'web' && result.filePath.includes('node_modules')) {\n // Replace with static shims\n\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const shimFile = shouldCreateVirtualShim(normalName);\n if (shimFile) {\n const virtualId = `\\0shim:${normalName}`;\n const bundler = getMetroBundlerWithVirtualModules(getMetroBundler());\n if (!bundler.hasVirtualModule(virtualId)) {\n bundler.setVirtualModule(virtualId, fs.readFileSync(shimFile, 'utf8'));\n }\n debug(`Redirecting module \"${result.filePath}\" to shim`);\n\n return {\n ...result,\n filePath: virtualId,\n };\n }\n }\n } else {\n // When server components are enabled, redirect React Native's renderer to the canary build\n // this will enable the use hook and other requisite features from React 19.\n if (isReactCanaryEnabled && result.filePath.includes('node_modules')) {\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const canaryFile = shouldCreateVirtualCanary(normalName);\n if (canaryFile) {\n debug(`Redirecting React Native module \"${result.filePath}\" to canary build`);\n return {\n ...result,\n filePath: canaryFile,\n };\n }\n }\n }\n\n return result;\n },\n ]);\n\n // Ensure we mutate the resolution context to include the custom resolver options for server and web.\n const metroConfigWithCustomContext = withMetroMutatedResolverContext(\n metroConfigWithCustomResolver,\n (\n immutableContext: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ): CustomResolutionContext => {\n const context: Mutable<CustomResolutionContext> = {\n ...immutableContext,\n preferNativePlatform: platform !== 'web',\n };\n\n if (isServerEnvironment(context.customResolverOptions?.environment)) {\n // Adjust nodejs source extensions to sort mjs after js, including platform variants.\n if (nodejsSourceExtensions === null) {\n nodejsSourceExtensions = getNodejsExtensions(context.sourceExts);\n }\n context.sourceExts = nodejsSourceExtensions;\n\n context.unstable_enablePackageExports = true;\n context.unstable_conditionsByPlatform = {};\n // Node.js runtimes should only be importing main at the moment.\n // This is a temporary fix until we can support the package.json exports.\n context.mainFields = ['main', 'module'];\n\n // Enable react-server import conditions.\n if (context.customResolverOptions?.environment === 'react-server') {\n context.unstable_conditionNames = ['node', 'require', 'react-server', 'workerd'];\n } else {\n context.unstable_conditionNames = ['node', 'require'];\n }\n } else {\n // Non-server changes\n\n if (!env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE && platform && platform in preferredMainFields) {\n context.mainFields = preferredMainFields[platform];\n }\n }\n\n return context;\n }\n );\n\n return withMetroErrorReportingResolver(metroConfigWithCustomContext);\n}\n\n/** @returns `true` if the incoming resolution should be swapped on web. */\nexport function shouldAliasAssetRegistryForWeb(\n platform: string | null,\n result: Resolution\n): boolean {\n return (\n platform === 'web' &&\n result?.type === 'sourceFile' &&\n typeof result?.filePath === 'string' &&\n normalizeSlashes(result.filePath).endsWith(\n 'react-native-web/dist/modules/AssetRegistry/index.js'\n )\n );\n}\n/** @returns `true` if the incoming resolution should be swapped. */\nexport function shouldAliasModule(\n input: {\n platform: string | null;\n result: Resolution;\n },\n alias: { platform: string; output: string }\n): boolean {\n return (\n input.platform === alias.platform &&\n input.result?.type === 'sourceFile' &&\n typeof input.result?.filePath === 'string' &&\n normalizeSlashes(input.result.filePath).endsWith(alias.output)\n );\n}\n\n/** Add support for `react-native-web` and the Web platform. */\nexport async function withMetroMultiPlatformAsync(\n projectRoot: string,\n {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled,\n webOutput,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n getMetroBundler,\n }: {\n config: ConfigT;\n exp: ExpoConfig;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n webOutput?: 'single' | 'static' | 'server';\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (!config.projectRoot) {\n // @ts-expect-error: read-only types\n config.projectRoot = projectRoot;\n }\n\n // Required for @expo/metro-runtime to format paths in the web LogBox.\n process.env.EXPO_PUBLIC_PROJECT_ROOT = process.env.EXPO_PUBLIC_PROJECT_ROOT ?? projectRoot;\n\n if (['static', 'server'].includes(webOutput ?? '')) {\n // Enable static rendering in runtime space.\n process.env.EXPO_PUBLIC_USE_STATIC = '1';\n }\n\n // This is used for running Expo CLI in development against projects outside the monorepo.\n if (!isDirectoryIn(__dirname, projectRoot)) {\n if (!config.watchFolders) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders = [];\n }\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('metro-runtime/package.json'), '../..'));\n }\n\n // @ts-expect-error\n config.transformer._expoRouterWebRendering = webOutput;\n // @ts-expect-error: Invalidate the cache when the location of expo-router changes on-disk.\n config.transformer._expoRouterPath = resolveFrom.silent(projectRoot, 'expo-router');\n\n let tsconfig: null | TsConfigPaths = null;\n\n if (isTsconfigPathsEnabled) {\n tsconfig = await loadTsConfigPathsAsync(projectRoot);\n }\n\n let expoConfigPlatforms = Object.entries(platformBundlers)\n .filter(\n ([platform, bundler]) => bundler === 'metro' && exp.platforms?.includes(platform as Platform)\n )\n .map(([platform]) => platform);\n\n if (Array.isArray(config.resolver.platforms)) {\n expoConfigPlatforms = [...new Set(expoConfigPlatforms.concat(config.resolver.platforms))];\n }\n\n // @ts-expect-error: typed as `readonly`.\n config.resolver.platforms = expoConfigPlatforms;\n\n config = withWebPolyfills(config, { getMetroBundler });\n\n return withExtendedResolver(config, {\n tsconfig,\n isExporting,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isReactCanaryEnabled,\n getMetroBundler,\n });\n}\n\nfunction isDirectoryIn(targetPath: string, rootPath: string) {\n return targetPath.startsWith(rootPath) && targetPath.length >= rootPath.length;\n}\n"],"names":["getNodejsExtensions","withExtendedResolver","shouldAliasAssetRegistryForWeb","shouldAliasModule","withMetroMultiPlatformAsync","debug","require","withWebPolyfills","config","getMetroBundler","originalGetPolyfills","serializer","getPolyfills","bind","ctx","virtualEnvVarId","getMetroBundlerWithVirtualModules","setVirtualModule","virtualModuleId","platform","polyfills","normalizeSlashes","p","replace","srcExts","mjsExts","filter","ext","test","nodejsSourceExtensions","jsIndex","reduce","index","i","splice","tsconfig","isTsconfigPathsEnabled","isFastResolverEnabled","isExporting","isReactCanaryEnabled","Log","warn","assetRegistryPath","fs","realpathSync","path","resolve","resolveFrom","projectRoot","defaultResolver","metroResolver","resolver","createFastResolver","preserveSymlinks","unstable_enableSymlinks","blockList","Array","isArray","aliases","web","universalAliases","silent","push","preferredMainFields","tsConfigResolve","paths","baseUrl","resolveWithTsConfigPaths","hasBaseUrl","isInteractive","configWatcher","FileNotifier","startObserving","loadTsConfigPathsAsync","then","tsConfigPaths","Object","keys","length","installExitHooks","stopObserving","getStrictResolver","resolveRequest","context","doResolve","moduleName","getOptionalResolver","optionalResolve","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","metroConfigWithCustomResolver","withMetroResolvers","dev","originModulePath","match","type","isServer","customResolverOptions","environment","moduleId","isNodeExternal","result","contents","filePath","redirectedModuleName","matcher","alias","aliasedModule","_","parseInt","includes","normalName","shimFile","shouldCreateVirtualShim","virtualId","bundler","hasVirtualModule","readFileSync","canaryFile","shouldCreateVirtualCanary","metroConfigWithCustomContext","withMetroMutatedResolverContext","immutableContext","preferNativePlatform","isServerEnvironment","sourceExts","unstable_enablePackageExports","unstable_conditionsByPlatform","mainFields","unstable_conditionNames","env","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","withMetroErrorReportingResolver","endsWith","input","output","exp","platformBundlers","webOutput","process","EXPO_PUBLIC_PROJECT_ROOT","EXPO_PUBLIC_USE_STATIC","isDirectoryIn","__dirname","watchFolders","join","transformer","_expoRouterWebRendering","_expoRouterPath","expoConfigPlatforms","entries","platforms","map","Set","concat","targetPath","rootPath","startsWith"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/withMetroMultiPlatform.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { ExpoConfig, Platform } from '@expo/config';\nimport fs from 'fs';\nimport Bundler from 'metro/src/Bundler';\nimport { ConfigT } from 'metro-config';\nimport { Resolution, ResolutionContext, CustomResolutionContext } from 'metro-resolver';\nimport * as metroResolver from 'metro-resolver';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { createFastResolver } from './createExpoMetroResolver';\nimport { isNodeExternal, shouldCreateVirtualCanary, shouldCreateVirtualShim } from './externals';\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { getMetroBundlerWithVirtualModules } from './metroVirtualModules';\nimport {\n withMetroErrorReportingResolver,\n withMetroMutatedResolverContext,\n withMetroResolvers,\n} from './withMetroResolvers';\nimport { Log } from '../../../log';\nimport { FileNotifier } from '../../../utils/FileNotifier';\nimport { env } from '../../../utils/env';\nimport { installExitHooks } from '../../../utils/exit';\nimport { isInteractive } from '../../../utils/interactive';\nimport { loadTsConfigPathsAsync, TsConfigPaths } from '../../../utils/tsconfig/loadTsConfigPaths';\nimport { resolveWithTsConfigPaths } from '../../../utils/tsconfig/resolveWithTsConfigPaths';\nimport { isServerEnvironment } from '../middleware/metroOptions';\nimport { PlatformBundlers } from '../platformBundlers';\n\ntype Mutable<T> = { -readonly [K in keyof T]: T[K] };\n\nconst debug = require('debug')('expo:start:server:metro:multi-platform') as typeof console.log;\n\nfunction withWebPolyfills(\n config: ConfigT,\n {\n getMetroBundler,\n }: {\n getMetroBundler: () => Bundler;\n }\n): ConfigT {\n const originalGetPolyfills = config.serializer.getPolyfills\n ? config.serializer.getPolyfills.bind(config.serializer)\n : () => [];\n\n const getPolyfills = (ctx: { platform: string | null }): readonly string[] => {\n const virtualEnvVarId = `\\0polyfill:environment-variables`;\n\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualEnvVarId,\n (() => {\n return `//`;\n })()\n );\n\n const virtualModuleId = `\\0polyfill:external-require`;\n\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n (() => {\n if (ctx.platform === 'web') {\n return `global.$$require_external = typeof window === \"undefined\" ? require : () => null;`;\n } else {\n // Wrap in try/catch to support Android.\n return 'try { global.$$require_external = typeof expo === \"undefined\" ? eval(\"require\") : (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} } catch { global.$$require_external = (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} }';\n }\n })()\n );\n\n if (ctx.platform === 'web') {\n return [\n virtualModuleId,\n virtualEnvVarId,\n // Ensure that the error-guard polyfill is included in the web polyfills to\n // make metro-runtime work correctly.\n // TODO: This module is pretty big for a function that simply re-throws an error that doesn't need to be caught.\n require.resolve('@react-native/js-polyfills/error-guard'),\n ];\n }\n\n // Generally uses `rn-get-polyfills`\n const polyfills = originalGetPolyfills(ctx);\n return [...polyfills, virtualModuleId, virtualEnvVarId];\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n getPolyfills,\n },\n };\n}\n\nfunction normalizeSlashes(p: string) {\n return p.replace(/\\\\/g, '/');\n}\n\nexport function getNodejsExtensions(srcExts: readonly string[]): string[] {\n const mjsExts = srcExts.filter((ext) => /mjs$/.test(ext));\n const nodejsSourceExtensions = srcExts.filter((ext) => !/mjs$/.test(ext));\n // find index of last `*.js` extension\n const jsIndex = nodejsSourceExtensions.reduce((index, ext, i) => {\n return /jsx?$/.test(ext) ? i : index;\n }, -1);\n\n // insert `*.mjs` extensions after `*.js` extensions\n nodejsSourceExtensions.splice(jsIndex + 1, 0, ...mjsExts);\n\n return nodejsSourceExtensions;\n}\n\n/**\n * Apply custom resolvers to do the following:\n * - Disable `.native.js` extensions on web.\n * - Alias `react-native` to `react-native-web` on web.\n * - Redirect `react-native-web/dist/modules/AssetRegistry/index.js` to `@react-native/assets/registry.js` on web.\n * - Add support for `tsconfig.json`/`jsconfig.json` aliases via `compilerOptions.paths`.\n * - Alias react-native renderer code to a vendored React canary build on native.\n */\nexport function withExtendedResolver(\n config: ConfigT,\n {\n tsconfig,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n getMetroBundler,\n }: {\n tsconfig: TsConfigPaths | null;\n isTsconfigPathsEnabled?: boolean;\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled?: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (isFastResolverEnabled) {\n Log.warn(`Experimental bundling features are enabled.`);\n }\n if (isReactCanaryEnabled) {\n Log.warn(`Experimental React Canary version is enabled.`);\n }\n\n // Get the `transformer.assetRegistryPath`\n // this needs to be unified since you can't dynamically\n // swap out the transformer based on platform.\n const assetRegistryPath = fs.realpathSync(\n path.resolve(resolveFrom(config.projectRoot, '@react-native/assets-registry/registry.js'))\n );\n\n const defaultResolver = metroResolver.resolve;\n const resolver = isFastResolverEnabled\n ? createFastResolver({\n preserveSymlinks: config.resolver?.unstable_enableSymlinks ?? true,\n blockList: Array.isArray(config.resolver?.blockList)\n ? config.resolver?.blockList\n : [config.resolver?.blockList],\n })\n : defaultResolver;\n\n const aliases: { [key: string]: Record<string, string> } = {\n web: {\n 'react-native': 'react-native-web',\n 'react-native/index': 'react-native-web',\n },\n };\n\n const universalAliases: [RegExp, string][] = [];\n\n // This package is currently always installed as it is included in the `expo` package.\n if (resolveFrom.silent(config.projectRoot, '@expo/vector-icons')) {\n debug('Enabling alias: react-native-vector-icons -> @expo/vector-icons');\n universalAliases.push([/^react-native-vector-icons(\\/.*)?/, '@expo/vector-icons$1']);\n }\n\n const preferredMainFields: { [key: string]: string[] } = {\n // Defaults from Expo Webpack. Most packages using `react-native` don't support web\n // in the `react-native` field, so we should prefer the `browser` field.\n // https://github.com/expo/router/issues/37\n web: ['browser', 'module', 'main'],\n };\n\n let tsConfigResolve =\n isTsconfigPathsEnabled && (tsconfig?.paths || tsconfig?.baseUrl != null)\n ? resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsconfig.paths ?? {},\n baseUrl: tsconfig.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsconfig.baseUrl,\n })\n : null;\n\n // TODO: Move this to be a transform key for invalidation.\n if (!isExporting && isInteractive()) {\n if (isTsconfigPathsEnabled) {\n // TODO: We should track all the files that used imports and invalidate them\n // currently the user will need to save all the files that use imports to\n // use the new aliases.\n const configWatcher = new FileNotifier(config.projectRoot, [\n './tsconfig.json',\n './jsconfig.json',\n ]);\n configWatcher.startObserving(() => {\n debug('Reloading tsconfig.json');\n loadTsConfigPathsAsync(config.projectRoot).then((tsConfigPaths) => {\n if (tsConfigPaths?.paths && !!Object.keys(tsConfigPaths.paths).length) {\n debug('Enabling tsconfig.json paths support');\n tsConfigResolve = resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsConfigPaths.paths ?? {},\n baseUrl: tsConfigPaths.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsConfigPaths.baseUrl,\n });\n } else {\n debug('Disabling tsconfig.json paths support');\n tsConfigResolve = null;\n }\n });\n });\n\n // TODO: This probably prevents the process from exiting.\n installExitHooks(() => {\n configWatcher.stopObserving();\n });\n } else {\n debug('Skipping tsconfig.json paths support');\n }\n }\n\n let nodejsSourceExtensions: string[] | null = null;\n\n function getStrictResolver(\n { resolveRequest, ...context }: ResolutionContext,\n platform: string | null\n ) {\n return function doResolve(moduleName: string): Resolution {\n return resolver(context, moduleName, platform);\n };\n }\n\n function getOptionalResolver(context: ResolutionContext, platform: string | null) {\n const doResolve = getStrictResolver(context, platform);\n return function optionalResolve(moduleName: string): Resolution | null {\n try {\n return doResolve(moduleName);\n } catch (error) {\n // If the error is directly related to a resolver not being able to resolve a module, then\n // we can ignore the error and try the next resolver. Otherwise, we should throw the error.\n const isResolutionError =\n isFailedToResolveNameError(error) || isFailedToResolvePathError(error);\n if (!isResolutionError) {\n throw error;\n }\n }\n return null;\n };\n }\n\n const metroConfigWithCustomResolver = withMetroResolvers(config, [\n // Mock out production react imports in development.\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n // This resolution is dev-only to prevent bundling the production React packages in development.\n // @ts-expect-error: dev is not on type.\n if (!context.dev) return null;\n\n if (\n // Match react-native renderers.\n (platform !== 'web' &&\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/]react-native[\\\\/]/) &&\n moduleName.match(/([\\\\/]ReactFabric|ReactNativeRenderer)-prod/)) ||\n // Match react production imports.\n (moduleName.match(/\\.production(\\.min)?\\.js$/) &&\n // Match if the import originated from a react package.\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/](react[-\\\\/]|scheduler[\\\\/])/))\n ) {\n debug(`Skipping production module: ${moduleName}`);\n // /Users/path/to/expo/node_modules/react/index.js ./cjs/react.production.min.js\n // /Users/path/to/expo/node_modules/react/jsx-dev-runtime.js ./cjs/react-jsx-dev-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n // /Users/path/to/expo/node_modules/react-refresh/runtime.js ./cjs/react-refresh-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/scheduler/index.native.js ./cjs/scheduler.native.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n return {\n type: 'empty',\n };\n }\n return null;\n },\n // tsconfig paths\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n return (\n tsConfigResolve?.(\n {\n originModulePath: context.originModulePath,\n moduleName,\n },\n getOptionalResolver(context, platform)\n ) ?? null\n );\n },\n\n // Node.js externals support\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n const isServer =\n context.customResolverOptions?.environment === 'node' ||\n context.customResolverOptions?.environment === 'react-server';\n\n if (platform !== 'web' && !isServer) {\n // This is a web/server-only feature, we may extend the shimming to native platforms in the future.\n return null;\n }\n\n const moduleId = isNodeExternal(moduleName);\n if (!moduleId) {\n return null;\n }\n\n if (\n // In browser runtimes, we want to either resolve a local node module by the same name, or shim the module to\n // prevent crashing when Node.js built-ins are imported.\n !isServer\n ) {\n // Perform optional resolve first. If the module doesn't exist (no module in the node_modules)\n // then we can mock the file to use an empty module.\n const result = getOptionalResolver(context, platform)(moduleName);\n return (\n result ?? {\n // In this case, mock the file to use an empty module.\n type: 'empty',\n }\n );\n }\n\n const contents = `module.exports=$$require_external('node:${moduleId}');`;\n debug(`Virtualizing Node.js \"${moduleId}\"`);\n const virtualModuleId = `\\0node:${moduleId}`;\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n },\n\n // Basic moduleId aliases\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n // Conditionally remap `react-native` to `react-native-web` on web in\n // a way that doesn't require Babel to resolve the alias.\n if (platform && platform in aliases && aliases[platform][moduleName]) {\n const redirectedModuleName = aliases[platform][moduleName];\n return getStrictResolver(context, platform)(redirectedModuleName);\n }\n\n for (const [matcher, alias] of universalAliases) {\n const match = moduleName.match(matcher);\n if (match) {\n const aliasedModule = alias.replace(\n /\\$(\\d+)/g,\n (_, index) => match[parseInt(index, 10)] ?? ''\n );\n const doResolve = getStrictResolver(context, platform);\n debug(`Alias \"${moduleName}\" to \"${aliasedModule}\"`);\n return doResolve(aliasedModule);\n }\n }\n\n return null;\n },\n\n // TODO: Reduce these as much as possible in the future.\n // Complex post-resolution rewrites.\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n const doResolve = getStrictResolver(context, platform);\n\n const result = doResolve(moduleName);\n\n if (result.type !== 'sourceFile') {\n return result;\n }\n\n if (platform === 'web') {\n // Replace the web resolver with the original one.\n // This is basically an alias for web-only.\n // TODO: Drop this in favor of the standalone asset registry module.\n if (shouldAliasAssetRegistryForWeb(platform, result)) {\n // @ts-expect-error: `readonly` for some reason.\n result.filePath = assetRegistryPath;\n }\n\n if (platform === 'web' && result.filePath.includes('node_modules')) {\n // Replace with static shims\n\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const shimFile = shouldCreateVirtualShim(normalName);\n if (shimFile) {\n const virtualId = `\\0shim:${normalName}`;\n const bundler = getMetroBundlerWithVirtualModules(getMetroBundler());\n if (!bundler.hasVirtualModule(virtualId)) {\n bundler.setVirtualModule(virtualId, fs.readFileSync(shimFile, 'utf8'));\n }\n debug(`Redirecting module \"${result.filePath}\" to shim`);\n\n return {\n ...result,\n filePath: virtualId,\n };\n }\n }\n } else {\n // When server components are enabled, redirect React Native's renderer to the canary build\n // this will enable the use hook and other requisite features from React 19.\n if (isReactCanaryEnabled && result.filePath.includes('node_modules')) {\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const canaryFile = shouldCreateVirtualCanary(normalName);\n if (canaryFile) {\n debug(`Redirecting React Native module \"${result.filePath}\" to canary build`);\n return {\n ...result,\n filePath: canaryFile,\n };\n }\n }\n }\n\n return result;\n },\n ]);\n\n // Ensure we mutate the resolution context to include the custom resolver options for server and web.\n const metroConfigWithCustomContext = withMetroMutatedResolverContext(\n metroConfigWithCustomResolver,\n (\n immutableContext: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ): CustomResolutionContext => {\n const context: Mutable<CustomResolutionContext> = {\n ...immutableContext,\n preferNativePlatform: platform !== 'web',\n };\n\n if (isServerEnvironment(context.customResolverOptions?.environment)) {\n // Adjust nodejs source extensions to sort mjs after js, including platform variants.\n if (nodejsSourceExtensions === null) {\n nodejsSourceExtensions = getNodejsExtensions(context.sourceExts);\n }\n context.sourceExts = nodejsSourceExtensions;\n\n context.unstable_enablePackageExports = true;\n context.unstable_conditionsByPlatform = {};\n // Node.js runtimes should only be importing main at the moment.\n // This is a temporary fix until we can support the package.json exports.\n context.mainFields = ['main', 'module'];\n\n // Enable react-server import conditions.\n if (context.customResolverOptions?.environment === 'react-server') {\n context.unstable_conditionNames = ['node', 'require', 'react-server', 'workerd'];\n } else {\n context.unstable_conditionNames = ['node', 'require'];\n }\n } else {\n // Non-server changes\n\n if (!env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE && platform && platform in preferredMainFields) {\n context.mainFields = preferredMainFields[platform];\n }\n }\n\n return context;\n }\n );\n\n return withMetroErrorReportingResolver(metroConfigWithCustomContext);\n}\n\n/** @returns `true` if the incoming resolution should be swapped on web. */\nexport function shouldAliasAssetRegistryForWeb(\n platform: string | null,\n result: Resolution\n): boolean {\n return (\n platform === 'web' &&\n result?.type === 'sourceFile' &&\n typeof result?.filePath === 'string' &&\n normalizeSlashes(result.filePath).endsWith(\n 'react-native-web/dist/modules/AssetRegistry/index.js'\n )\n );\n}\n/** @returns `true` if the incoming resolution should be swapped. */\nexport function shouldAliasModule(\n input: {\n platform: string | null;\n result: Resolution;\n },\n alias: { platform: string; output: string }\n): boolean {\n return (\n input.platform === alias.platform &&\n input.result?.type === 'sourceFile' &&\n typeof input.result?.filePath === 'string' &&\n normalizeSlashes(input.result.filePath).endsWith(alias.output)\n );\n}\n\n/** Add support for `react-native-web` and the Web platform. */\nexport async function withMetroMultiPlatformAsync(\n projectRoot: string,\n {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled,\n webOutput,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n getMetroBundler,\n }: {\n config: ConfigT;\n exp: ExpoConfig;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n webOutput?: 'single' | 'static' | 'server';\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (!config.projectRoot) {\n // @ts-expect-error: read-only types\n config.projectRoot = projectRoot;\n }\n\n // Required for @expo/metro-runtime to format paths in the web LogBox.\n process.env.EXPO_PUBLIC_PROJECT_ROOT = process.env.EXPO_PUBLIC_PROJECT_ROOT ?? projectRoot;\n\n if (['static', 'server'].includes(webOutput ?? '')) {\n // Enable static rendering in runtime space.\n process.env.EXPO_PUBLIC_USE_STATIC = '1';\n }\n\n // This is used for running Expo CLI in development against projects outside the monorepo.\n if (!isDirectoryIn(__dirname, projectRoot)) {\n if (!config.watchFolders) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders = [];\n }\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('metro-runtime/package.json'), '../..'));\n if (isReactCanaryEnabled) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('@expo/cli/package.json'), '..'));\n }\n }\n\n // @ts-expect-error\n config.transformer._expoRouterWebRendering = webOutput;\n // @ts-expect-error: Invalidate the cache when the location of expo-router changes on-disk.\n config.transformer._expoRouterPath = resolveFrom.silent(projectRoot, 'expo-router');\n\n let tsconfig: null | TsConfigPaths = null;\n\n if (isTsconfigPathsEnabled) {\n tsconfig = await loadTsConfigPathsAsync(projectRoot);\n }\n\n let expoConfigPlatforms = Object.entries(platformBundlers)\n .filter(\n ([platform, bundler]) => bundler === 'metro' && exp.platforms?.includes(platform as Platform)\n )\n .map(([platform]) => platform);\n\n if (Array.isArray(config.resolver.platforms)) {\n expoConfigPlatforms = [...new Set(expoConfigPlatforms.concat(config.resolver.platforms))];\n }\n\n // @ts-expect-error: typed as `readonly`.\n config.resolver.platforms = expoConfigPlatforms;\n\n config = withWebPolyfills(config, { getMetroBundler });\n\n return withExtendedResolver(config, {\n tsconfig,\n isExporting,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isReactCanaryEnabled,\n getMetroBundler,\n });\n}\n\nfunction isDirectoryIn(targetPath: string, rootPath: string) {\n return targetPath.startsWith(rootPath) && targetPath.length >= rootPath.length;\n}\n"],"names":["getNodejsExtensions","withExtendedResolver","shouldAliasAssetRegistryForWeb","shouldAliasModule","withMetroMultiPlatformAsync","debug","require","withWebPolyfills","config","getMetroBundler","originalGetPolyfills","serializer","getPolyfills","bind","ctx","virtualEnvVarId","getMetroBundlerWithVirtualModules","setVirtualModule","virtualModuleId","platform","resolve","polyfills","normalizeSlashes","p","replace","srcExts","mjsExts","filter","ext","test","nodejsSourceExtensions","jsIndex","reduce","index","i","splice","tsconfig","isTsconfigPathsEnabled","isFastResolverEnabled","isExporting","isReactCanaryEnabled","Log","warn","assetRegistryPath","fs","realpathSync","path","resolveFrom","projectRoot","defaultResolver","metroResolver","resolver","createFastResolver","preserveSymlinks","unstable_enableSymlinks","blockList","Array","isArray","aliases","web","universalAliases","silent","push","preferredMainFields","tsConfigResolve","paths","baseUrl","resolveWithTsConfigPaths","hasBaseUrl","isInteractive","configWatcher","FileNotifier","startObserving","loadTsConfigPathsAsync","then","tsConfigPaths","Object","keys","length","installExitHooks","stopObserving","getStrictResolver","resolveRequest","context","doResolve","moduleName","getOptionalResolver","optionalResolve","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","metroConfigWithCustomResolver","withMetroResolvers","dev","originModulePath","match","type","isServer","customResolverOptions","environment","moduleId","isNodeExternal","result","contents","filePath","redirectedModuleName","matcher","alias","aliasedModule","_","parseInt","includes","normalName","shimFile","shouldCreateVirtualShim","virtualId","bundler","hasVirtualModule","readFileSync","canaryFile","shouldCreateVirtualCanary","metroConfigWithCustomContext","withMetroMutatedResolverContext","immutableContext","preferNativePlatform","isServerEnvironment","sourceExts","unstable_enablePackageExports","unstable_conditionsByPlatform","mainFields","unstable_conditionNames","env","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","withMetroErrorReportingResolver","endsWith","input","output","exp","platformBundlers","webOutput","process","EXPO_PUBLIC_PROJECT_ROOT","EXPO_PUBLIC_USE_STATIC","isDirectoryIn","__dirname","watchFolders","join","transformer","_expoRouterWebRendering","_expoRouterPath","expoConfigPlatforms","entries","platforms","map","Set","concat","targetPath","rootPath","startsWith"],"mappings":"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"}
@@ -141,7 +141,7 @@ function getMetroServerRoot(projectRoot) {
141
141
  function resolveMainModuleName(projectRoot, props) {
142
142
  const entryPoint = getEntryWithServerRoot(projectRoot, props);
143
143
  debug(`Resolved entry point: ${entryPoint} (project root: ${projectRoot})`);
144
- return (0, _url1.stripExtension)(entryPoint, "js");
144
+ return (0, _metroOptions.convertPathToModuleSpecifier)((0, _url1.stripExtension)(entryPoint, "js"));
145
145
  }
146
146
  const DEVELOPER_TOOL = "expo-cli";
147
147
  class ManifestMiddleware extends _expoMiddleware.ExpoMiddleware {
@@ -159,6 +159,7 @@ class ManifestMiddleware extends _expoMiddleware.ExpoMiddleware {
159
159
  this.platformBundlers = (0, _platformBundlers.getPlatformBundlers)(projectRoot, this.initialProjectConfig.exp);
160
160
  }
161
161
  /** Exposed for testing. */ async _resolveProjectSettingsAsync({ platform , hostname , protocol }) {
162
+ var ref;
162
163
  // Read the config
163
164
  const projectConfig = (0, _config().getConfig)(this.projectRoot);
164
165
  // Read from headers
@@ -185,7 +186,8 @@ class ManifestMiddleware extends _expoMiddleware.ExpoMiddleware {
185
186
  baseUrl: (0, _metroOptions.getBaseUrlFromExpoConfig)(projectConfig.exp),
186
187
  asyncRoutes: (0, _metroOptions.getAsyncRoutesFromExpoConfig)(projectConfig.exp, (_mode = this.options.mode) != null ? _mode : "development", platform),
187
188
  routerRoot: (0, _router.getRouterDirectoryModuleIdWithManifest)(this.projectRoot, projectConfig.exp),
188
- protocol
189
+ protocol,
190
+ reactCompiler: !!((ref = projectConfig.exp.experiments) == null ? void 0 : ref.reactCompiler)
189
191
  });
190
192
  // Resolve all assets and set them on the manifest as URLs
191
193
  await this.mutateManifestWithAssetsAsync(projectConfig.exp, bundleUrl);
@@ -217,7 +219,7 @@ class ManifestMiddleware extends _expoMiddleware.ExpoMiddleware {
217
219
  await _devices.saveDevicesAsync(this.projectRoot, deviceIds).catch((e)=>_log.exception(e));
218
220
  }
219
221
  }
220
- /** Create the bundle URL (points to the single JS entry file). Exposed for testing. */ _getBundleUrl({ platform , mainModuleName , hostname , engine , baseUrl , isExporting , asyncRoutes , routerRoot , protocol }) {
222
+ /** Create the bundle URL (points to the single JS entry file). Exposed for testing. */ _getBundleUrl({ platform , mainModuleName , hostname , engine , baseUrl , isExporting , asyncRoutes , routerRoot , protocol , reactCompiler }) {
221
223
  var _mode;
222
224
  const path = (0, _metroOptions.createBundleUrlPath)({
223
225
  mode: (_mode = this.options.mode) != null ? _mode : "development",
@@ -230,7 +232,8 @@ class ManifestMiddleware extends _expoMiddleware.ExpoMiddleware {
230
232
  baseUrl,
231
233
  isExporting: !!isExporting,
232
234
  asyncRoutes,
233
- routerRoot
235
+ routerRoot,
236
+ reactCompiler
234
237
  });
235
238
  return this.options.constructUrl({
236
239
  scheme: protocol != null ? protocol : "http",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/middleware/ManifestMiddleware.ts"],"sourcesContent":["import {\n ExpoConfig,\n ExpoGoConfig,\n getConfig,\n PackageJSONConfig,\n ProjectConfig,\n} from '@expo/config';\nimport { resolveEntryPoint } from '@expo/config/paths';\nimport findWorkspaceRoot from 'find-yarn-workspace-root';\nimport path from 'path';\nimport { resolve } from 'url';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport {\n shouldEnableAsyncImports,\n createBundleUrlPath,\n getBaseUrlFromExpoConfig,\n getAsyncRoutesFromExpoConfig,\n createBundleUrlPathFromExpoConfig,\n} from './metroOptions';\nimport { resolveGoogleServicesFile, resolveManifestAssets } from './resolveAssets';\nimport { parsePlatformHeader, RuntimePlatform } from './resolvePlatform';\nimport { ServerHeaders, ServerNext, ServerRequest, ServerResponse } from './server.types';\nimport { isEnableHermesManaged } from '../../../export/exportHermes';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { stripExtension } from '../../../utils/url';\nimport * as ProjectDevices from '../../project/devices';\nimport { UrlCreator } from '../UrlCreator';\nimport { getRouterDirectoryModuleIdWithManifest } from '../metro/router';\nimport { getPlatformBundlers, PlatformBundlers } from '../platformBundlers';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../webTemplate';\n\nconst debug = require('debug')('expo:start:server:middleware:manifest') as typeof console.log;\n\n/** Wraps `findWorkspaceRoot` and guards against having an empty `package.json` file in an upper directory. */\nexport function getWorkspaceRoot(projectRoot: string): string | null {\n try {\n return findWorkspaceRoot(projectRoot);\n } catch (error: any) {\n if (error.message.includes('Unexpected end of JSON input')) {\n return null;\n }\n throw error;\n }\n}\n\nconst supportedPlatforms = ['ios', 'android', 'web', 'none'];\n\nexport function getEntryWithServerRoot(\n projectRoot: string,\n props: { platform: string; pkg?: PackageJSONConfig }\n) {\n if (!supportedPlatforms.includes(props.platform)) {\n throw new CommandError(\n `Failed to resolve the project's entry file: The platform \"${props.platform}\" is not supported.`\n );\n }\n return path.relative(getMetroServerRoot(projectRoot), resolveEntryPoint(projectRoot, props));\n}\n\nexport function getMetroServerRoot(projectRoot: string) {\n if (env.EXPO_USE_METRO_WORKSPACE_ROOT) {\n return getWorkspaceRoot(projectRoot) ?? projectRoot;\n }\n\n return projectRoot;\n}\n\n/** Get the main entry module ID (file) relative to the project root. */\nexport function resolveMainModuleName(\n projectRoot: string,\n props: { platform: string; pkg?: PackageJSONConfig }\n): string {\n const entryPoint = getEntryWithServerRoot(projectRoot, props);\n\n debug(`Resolved entry point: ${entryPoint} (project root: ${projectRoot})`);\n\n return stripExtension(entryPoint, 'js');\n}\n\n/** Info about the computer hosting the dev server. */\nexport interface HostInfo {\n host: string;\n server: 'expo';\n serverVersion: string;\n serverDriver: string | null;\n serverOS: NodeJS.Platform;\n serverOSVersion: string;\n}\n\n/** Parsed values from the supported request headers. */\nexport interface ManifestRequestInfo {\n /** Platform to serve. */\n platform: RuntimePlatform;\n /** Requested host name. */\n hostname?: string | null;\n /** The protocol used to request the manifest */\n protocol?: 'http' | 'https';\n}\n\n/** Project related info. */\nexport type ResponseProjectSettings = {\n expoGoConfig: ExpoGoConfig;\n hostUri: string;\n bundleUrl: string;\n exp: ExpoConfig;\n};\n\nexport const DEVELOPER_TOOL = 'expo-cli';\n\nexport type ManifestMiddlewareOptions = {\n /** Should start the dev servers in development mode (minify). */\n mode?: 'development' | 'production';\n /** Should instruct the bundler to create minified bundles. */\n minify?: boolean;\n constructUrl: UrlCreator['constructUrl'];\n isNativeWebpack?: boolean;\n privateKeyPath?: string;\n};\n\n/** Base middleware creator for serving the Expo manifest (like the index.html but for native runtimes). */\nexport abstract class ManifestMiddleware<\n TManifestRequestInfo extends ManifestRequestInfo,\n> extends ExpoMiddleware {\n private initialProjectConfig: ProjectConfig;\n private platformBundlers: PlatformBundlers;\n\n constructor(\n protected projectRoot: string,\n protected options: ManifestMiddlewareOptions\n ) {\n super(\n projectRoot,\n /**\n * Only support `/`, `/manifest`, `/index.exp` for the manifest middleware.\n */\n ['/', '/manifest', '/index.exp']\n );\n this.initialProjectConfig = getConfig(projectRoot);\n this.platformBundlers = getPlatformBundlers(projectRoot, this.initialProjectConfig.exp);\n }\n\n /** Exposed for testing. */\n public async _resolveProjectSettingsAsync({\n platform,\n hostname,\n protocol,\n }: Pick<\n TManifestRequestInfo,\n 'hostname' | 'platform' | 'protocol'\n >): Promise<ResponseProjectSettings> {\n // Read the config\n const projectConfig = getConfig(this.projectRoot);\n\n // Read from headers\n const mainModuleName = this.resolveMainModuleName({\n pkg: projectConfig.pkg,\n platform,\n });\n\n const isHermesEnabled = isEnableHermesManaged(projectConfig.exp, platform);\n\n // Create the manifest and set fields within it\n const expoGoConfig = this.getExpoGoConfig({\n mainModuleName,\n hostname,\n });\n\n const hostUri = this.options.constructUrl({ scheme: '', hostname });\n\n const bundleUrl = this._getBundleUrl({\n platform,\n mainModuleName,\n hostname,\n engine: isHermesEnabled ? 'hermes' : undefined,\n baseUrl: getBaseUrlFromExpoConfig(projectConfig.exp),\n asyncRoutes: getAsyncRoutesFromExpoConfig(\n projectConfig.exp,\n this.options.mode ?? 'development',\n platform\n ),\n routerRoot: getRouterDirectoryModuleIdWithManifest(this.projectRoot, projectConfig.exp),\n protocol,\n });\n\n // Resolve all assets and set them on the manifest as URLs\n await this.mutateManifestWithAssetsAsync(projectConfig.exp, bundleUrl);\n\n return {\n expoGoConfig,\n hostUri,\n bundleUrl,\n exp: projectConfig.exp,\n };\n }\n\n /** Get the main entry module ID (file) relative to the project root. */\n private resolveMainModuleName(props: { pkg: PackageJSONConfig; platform: string }): string {\n let entryPoint = getEntryWithServerRoot(this.projectRoot, props);\n\n debug(`Resolved entry point: ${entryPoint} (project root: ${this.projectRoot})`);\n\n // NOTE(Bacon): Webpack is currently hardcoded to index.bundle on native\n // in the future (TODO) we should move this logic into a Webpack plugin and use\n // a generated file name like we do on web.\n // const server = getDefaultDevServer();\n // // TODO: Move this into BundlerDevServer and read this info from self.\n // const isNativeWebpack = server instanceof WebpackBundlerDevServer && server.isTargetingNative();\n if (this.options.isNativeWebpack) {\n entryPoint = 'index.js';\n }\n\n return stripExtension(entryPoint, 'js');\n }\n\n /** Parse request headers into options. */\n public abstract getParsedHeaders(req: ServerRequest): TManifestRequestInfo;\n\n /** Store device IDs that were sent in the request headers. */\n private async saveDevicesAsync(req: ServerRequest) {\n const deviceIds = req.headers?.['expo-dev-client-id'];\n if (deviceIds) {\n await ProjectDevices.saveDevicesAsync(this.projectRoot, deviceIds).catch((e) =>\n Log.exception(e)\n );\n }\n }\n\n /** Create the bundle URL (points to the single JS entry file). Exposed for testing. */\n public _getBundleUrl({\n platform,\n mainModuleName,\n hostname,\n engine,\n baseUrl,\n isExporting,\n asyncRoutes,\n routerRoot,\n protocol,\n }: {\n platform: string;\n hostname?: string | null;\n mainModuleName: string;\n engine?: 'hermes';\n baseUrl?: string;\n asyncRoutes: boolean;\n isExporting?: boolean;\n routerRoot: string;\n protocol?: 'http' | 'https';\n }): string {\n const path = createBundleUrlPath({\n mode: this.options.mode ?? 'development',\n minify: this.options.minify,\n platform,\n mainModuleName,\n lazy: shouldEnableAsyncImports(this.projectRoot),\n engine,\n bytecode: engine === 'hermes',\n baseUrl,\n isExporting: !!isExporting,\n asyncRoutes,\n routerRoot,\n });\n\n return (\n this.options.constructUrl({\n scheme: protocol ?? 'http',\n // hostType: this.options.location.hostType,\n hostname,\n }) + path\n );\n }\n\n /** Log telemetry. */\n protected abstract trackManifest(version?: string): void;\n\n /** Get the manifest response to return to the runtime. This file contains info regarding where the assets can be loaded from. Exposed for testing. */\n public abstract _getManifestResponseAsync(options: TManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }>;\n\n private getExpoGoConfig({\n mainModuleName,\n hostname,\n }: {\n mainModuleName: string;\n hostname?: string | null;\n }): ExpoGoConfig {\n return {\n // localhost:8081\n debuggerHost: this.options.constructUrl({ scheme: '', hostname }),\n // Required for Expo Go to function.\n developer: {\n tool: DEVELOPER_TOOL,\n projectRoot: this.projectRoot,\n },\n packagerOpts: {\n // Required for dev client.\n dev: this.options.mode !== 'production',\n },\n // Indicates the name of the main bundle.\n mainModuleName,\n // Add this string to make Flipper register React Native / Metro as \"running\".\n // Can be tested by running:\n // `METRO_SERVER_PORT=8081 open -a flipper.app`\n // Where 8081 is the port where the Expo project is being hosted.\n __flipperHack: 'React Native packager is running',\n };\n }\n\n /** Resolve all assets and set them on the manifest as URLs */\n private async mutateManifestWithAssetsAsync(manifest: ExpoConfig, bundleUrl: string) {\n await resolveManifestAssets(this.projectRoot, {\n manifest,\n resolver: async (path) => {\n if (this.options.isNativeWebpack) {\n // When using our custom dev server, just do assets normally\n // without the `assets/` subpath redirect.\n return resolve(bundleUrl!.match(/^https?:\\/\\/.*?\\//)![0], path);\n }\n return bundleUrl!.match(/^https?:\\/\\/.*?\\//)![0] + 'assets/' + path;\n },\n });\n // The server normally inserts this but if we're offline we'll do it here\n await resolveGoogleServicesFile(this.projectRoot, manifest);\n }\n\n public getWebBundleUrl() {\n const platform = 'web';\n // Read from headers\n const mainModuleName = this.resolveMainModuleName({\n pkg: this.initialProjectConfig.pkg,\n platform,\n });\n\n return createBundleUrlPathFromExpoConfig(this.projectRoot, this.initialProjectConfig.exp, {\n platform,\n mainModuleName,\n minify: this.options.minify,\n lazy: shouldEnableAsyncImports(this.projectRoot),\n mode: this.options.mode ?? 'development',\n // Hermes doesn't support more modern JS features than most, if not all, modern browser.\n engine: 'hermes',\n isExporting: false,\n bytecode: false,\n });\n }\n\n /**\n * Web platforms should create an index.html response using the same script resolution as native.\n *\n * Instead of adding a `bundleUrl` to a `manifest.json` (native) we'll add a `<script src=\"\">`\n * to an `index.html`, this enables the web platform to load JavaScript from the server.\n */\n private async handleWebRequestAsync(req: ServerRequest, res: ServerResponse) {\n // Read from headers\n const bundleUrl = this.getWebBundleUrl();\n\n res.setHeader('Content-Type', 'text/html');\n\n res.end(\n await createTemplateHtmlFromExpoConfigAsync(this.projectRoot, {\n exp: this.initialProjectConfig.exp,\n scripts: [bundleUrl],\n })\n );\n }\n\n /** Exposed for testing. */\n async checkBrowserRequestAsync(req: ServerRequest, res: ServerResponse, next: ServerNext) {\n if (\n this.platformBundlers.web === 'metro' &&\n this.initialProjectConfig.exp.platforms?.includes('web')\n ) {\n // NOTE(EvanBacon): This effectively disables the safety check we do on custom runtimes to ensure\n // the `expo-platform` header is included. When `web.bundler=web`, if the user has non-standard Expo\n // code loading then they'll get a web bundle without a clear assertion of platform support.\n const platform = parsePlatformHeader(req);\n // On web, serve the public folder\n if (!platform || platform === 'web') {\n if (['static', 'server'].includes(this.initialProjectConfig.exp.web?.output ?? '')) {\n // Skip the spa-styled index.html when static generation is enabled.\n next();\n return true;\n } else {\n await this.handleWebRequestAsync(req, res);\n return true;\n }\n }\n }\n return false;\n }\n\n async handleRequestAsync(\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ): Promise<void> {\n // First check for standard JavaScript runtimes (aka legacy browsers like Chrome).\n if (await this.checkBrowserRequestAsync(req, res, next)) {\n return;\n }\n\n // Save device IDs for dev client.\n await this.saveDevicesAsync(req);\n\n // Read from headers\n const options = this.getParsedHeaders(req);\n const { body, version, headers } = await this._getManifestResponseAsync(options);\n for (const [headerName, headerValue] of headers) {\n res.setHeader(headerName, headerValue);\n }\n res.end(body);\n\n // Log analytics\n this.trackManifest(version ?? null);\n }\n}\n"],"names":["getWorkspaceRoot","getEntryWithServerRoot","getMetroServerRoot","resolveMainModuleName","DEVELOPER_TOOL","ManifestMiddleware","debug","require","projectRoot","findWorkspaceRoot","error","message","includes","supportedPlatforms","props","platform","CommandError","path","relative","resolveEntryPoint","env","EXPO_USE_METRO_WORKSPACE_ROOT","entryPoint","stripExtension","ExpoMiddleware","constructor","options","initialProjectConfig","getConfig","platformBundlers","getPlatformBundlers","exp","_resolveProjectSettingsAsync","hostname","protocol","projectConfig","mainModuleName","pkg","isHermesEnabled","isEnableHermesManaged","expoGoConfig","getExpoGoConfig","hostUri","constructUrl","scheme","bundleUrl","_getBundleUrl","engine","undefined","baseUrl","getBaseUrlFromExpoConfig","asyncRoutes","getAsyncRoutesFromExpoConfig","mode","routerRoot","getRouterDirectoryModuleIdWithManifest","mutateManifestWithAssetsAsync","isNativeWebpack","saveDevicesAsync","req","deviceIds","headers","ProjectDevices","catch","e","Log","exception","isExporting","createBundleUrlPath","minify","lazy","shouldEnableAsyncImports","bytecode","debuggerHost","developer","tool","packagerOpts","dev","__flipperHack","manifest","resolveManifestAssets","resolver","resolve","match","resolveGoogleServicesFile","getWebBundleUrl","createBundleUrlPathFromExpoConfig","handleWebRequestAsync","res","setHeader","end","createTemplateHtmlFromExpoConfigAsync","scripts","checkBrowserRequestAsync","next","web","platforms","parsePlatformHeader","output","handleRequestAsync","getParsedHeaders","body","version","_getManifestResponseAsync","headerName","headerValue","trackManifest"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/ManifestMiddleware.ts"],"sourcesContent":["import {\n ExpoConfig,\n ExpoGoConfig,\n getConfig,\n PackageJSONConfig,\n ProjectConfig,\n} from '@expo/config';\nimport { resolveEntryPoint } from '@expo/config/paths';\nimport findWorkspaceRoot from 'find-yarn-workspace-root';\nimport path from 'path';\nimport { resolve } from 'url';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport {\n shouldEnableAsyncImports,\n createBundleUrlPath,\n getBaseUrlFromExpoConfig,\n getAsyncRoutesFromExpoConfig,\n createBundleUrlPathFromExpoConfig,\n convertPathToModuleSpecifier,\n} from './metroOptions';\nimport { resolveGoogleServicesFile, resolveManifestAssets } from './resolveAssets';\nimport { parsePlatformHeader, RuntimePlatform } from './resolvePlatform';\nimport { ServerHeaders, ServerNext, ServerRequest, ServerResponse } from './server.types';\nimport { isEnableHermesManaged } from '../../../export/exportHermes';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { stripExtension } from '../../../utils/url';\nimport * as ProjectDevices from '../../project/devices';\nimport { UrlCreator } from '../UrlCreator';\nimport { getRouterDirectoryModuleIdWithManifest } from '../metro/router';\nimport { getPlatformBundlers, PlatformBundlers } from '../platformBundlers';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../webTemplate';\n\nconst debug = require('debug')('expo:start:server:middleware:manifest') as typeof console.log;\n\n/** Wraps `findWorkspaceRoot` and guards against having an empty `package.json` file in an upper directory. */\nexport function getWorkspaceRoot(projectRoot: string): string | null {\n try {\n return findWorkspaceRoot(projectRoot);\n } catch (error: any) {\n if (error.message.includes('Unexpected end of JSON input')) {\n return null;\n }\n throw error;\n }\n}\n\nconst supportedPlatforms = ['ios', 'android', 'web', 'none'];\n\nexport function getEntryWithServerRoot(\n projectRoot: string,\n props: { platform: string; pkg?: PackageJSONConfig }\n) {\n if (!supportedPlatforms.includes(props.platform)) {\n throw new CommandError(\n `Failed to resolve the project's entry file: The platform \"${props.platform}\" is not supported.`\n );\n }\n return path.relative(getMetroServerRoot(projectRoot), resolveEntryPoint(projectRoot, props));\n}\n\nexport function getMetroServerRoot(projectRoot: string) {\n if (env.EXPO_USE_METRO_WORKSPACE_ROOT) {\n return getWorkspaceRoot(projectRoot) ?? projectRoot;\n }\n\n return projectRoot;\n}\n\n/** Get the main entry module ID (file) relative to the project root. */\nexport function resolveMainModuleName(\n projectRoot: string,\n props: { platform: string; pkg?: PackageJSONConfig }\n): string {\n const entryPoint = getEntryWithServerRoot(projectRoot, props);\n\n debug(`Resolved entry point: ${entryPoint} (project root: ${projectRoot})`);\n\n return convertPathToModuleSpecifier(stripExtension(entryPoint, 'js'));\n}\n\n/** Info about the computer hosting the dev server. */\nexport interface HostInfo {\n host: string;\n server: 'expo';\n serverVersion: string;\n serverDriver: string | null;\n serverOS: NodeJS.Platform;\n serverOSVersion: string;\n}\n\n/** Parsed values from the supported request headers. */\nexport interface ManifestRequestInfo {\n /** Platform to serve. */\n platform: RuntimePlatform;\n /** Requested host name. */\n hostname?: string | null;\n /** The protocol used to request the manifest */\n protocol?: 'http' | 'https';\n}\n\n/** Project related info. */\nexport type ResponseProjectSettings = {\n expoGoConfig: ExpoGoConfig;\n hostUri: string;\n bundleUrl: string;\n exp: ExpoConfig;\n};\n\nexport const DEVELOPER_TOOL = 'expo-cli';\n\nexport type ManifestMiddlewareOptions = {\n /** Should start the dev servers in development mode (minify). */\n mode?: 'development' | 'production';\n /** Should instruct the bundler to create minified bundles. */\n minify?: boolean;\n constructUrl: UrlCreator['constructUrl'];\n isNativeWebpack?: boolean;\n privateKeyPath?: string;\n};\n\n/** Base middleware creator for serving the Expo manifest (like the index.html but for native runtimes). */\nexport abstract class ManifestMiddleware<\n TManifestRequestInfo extends ManifestRequestInfo,\n> extends ExpoMiddleware {\n private initialProjectConfig: ProjectConfig;\n private platformBundlers: PlatformBundlers;\n\n constructor(\n protected projectRoot: string,\n protected options: ManifestMiddlewareOptions\n ) {\n super(\n projectRoot,\n /**\n * Only support `/`, `/manifest`, `/index.exp` for the manifest middleware.\n */\n ['/', '/manifest', '/index.exp']\n );\n this.initialProjectConfig = getConfig(projectRoot);\n this.platformBundlers = getPlatformBundlers(projectRoot, this.initialProjectConfig.exp);\n }\n\n /** Exposed for testing. */\n public async _resolveProjectSettingsAsync({\n platform,\n hostname,\n protocol,\n }: Pick<\n TManifestRequestInfo,\n 'hostname' | 'platform' | 'protocol'\n >): Promise<ResponseProjectSettings> {\n // Read the config\n const projectConfig = getConfig(this.projectRoot);\n\n // Read from headers\n const mainModuleName = this.resolveMainModuleName({\n pkg: projectConfig.pkg,\n platform,\n });\n\n const isHermesEnabled = isEnableHermesManaged(projectConfig.exp, platform);\n\n // Create the manifest and set fields within it\n const expoGoConfig = this.getExpoGoConfig({\n mainModuleName,\n hostname,\n });\n\n const hostUri = this.options.constructUrl({ scheme: '', hostname });\n\n const bundleUrl = this._getBundleUrl({\n platform,\n mainModuleName,\n hostname,\n engine: isHermesEnabled ? 'hermes' : undefined,\n baseUrl: getBaseUrlFromExpoConfig(projectConfig.exp),\n asyncRoutes: getAsyncRoutesFromExpoConfig(\n projectConfig.exp,\n this.options.mode ?? 'development',\n platform\n ),\n routerRoot: getRouterDirectoryModuleIdWithManifest(this.projectRoot, projectConfig.exp),\n protocol,\n reactCompiler: !!projectConfig.exp.experiments?.reactCompiler,\n });\n\n // Resolve all assets and set them on the manifest as URLs\n await this.mutateManifestWithAssetsAsync(projectConfig.exp, bundleUrl);\n\n return {\n expoGoConfig,\n hostUri,\n bundleUrl,\n exp: projectConfig.exp,\n };\n }\n\n /** Get the main entry module ID (file) relative to the project root. */\n private resolveMainModuleName(props: { pkg: PackageJSONConfig; platform: string }): string {\n let entryPoint = getEntryWithServerRoot(this.projectRoot, props);\n\n debug(`Resolved entry point: ${entryPoint} (project root: ${this.projectRoot})`);\n\n // NOTE(Bacon): Webpack is currently hardcoded to index.bundle on native\n // in the future (TODO) we should move this logic into a Webpack plugin and use\n // a generated file name like we do on web.\n // const server = getDefaultDevServer();\n // // TODO: Move this into BundlerDevServer and read this info from self.\n // const isNativeWebpack = server instanceof WebpackBundlerDevServer && server.isTargetingNative();\n if (this.options.isNativeWebpack) {\n entryPoint = 'index.js';\n }\n\n return stripExtension(entryPoint, 'js');\n }\n\n /** Parse request headers into options. */\n public abstract getParsedHeaders(req: ServerRequest): TManifestRequestInfo;\n\n /** Store device IDs that were sent in the request headers. */\n private async saveDevicesAsync(req: ServerRequest) {\n const deviceIds = req.headers?.['expo-dev-client-id'];\n if (deviceIds) {\n await ProjectDevices.saveDevicesAsync(this.projectRoot, deviceIds).catch((e) =>\n Log.exception(e)\n );\n }\n }\n\n /** Create the bundle URL (points to the single JS entry file). Exposed for testing. */\n public _getBundleUrl({\n platform,\n mainModuleName,\n hostname,\n engine,\n baseUrl,\n isExporting,\n asyncRoutes,\n routerRoot,\n protocol,\n reactCompiler,\n }: {\n platform: string;\n hostname?: string | null;\n mainModuleName: string;\n engine?: 'hermes';\n baseUrl?: string;\n asyncRoutes: boolean;\n isExporting?: boolean;\n routerRoot: string;\n protocol?: 'http' | 'https';\n reactCompiler: boolean;\n }): string {\n const path = createBundleUrlPath({\n mode: this.options.mode ?? 'development',\n minify: this.options.minify,\n platform,\n mainModuleName,\n lazy: shouldEnableAsyncImports(this.projectRoot),\n engine,\n bytecode: engine === 'hermes',\n baseUrl,\n isExporting: !!isExporting,\n asyncRoutes,\n routerRoot,\n reactCompiler,\n });\n\n return (\n this.options.constructUrl({\n scheme: protocol ?? 'http',\n // hostType: this.options.location.hostType,\n hostname,\n }) + path\n );\n }\n\n /** Log telemetry. */\n protected abstract trackManifest(version?: string): void;\n\n /** Get the manifest response to return to the runtime. This file contains info regarding where the assets can be loaded from. Exposed for testing. */\n public abstract _getManifestResponseAsync(options: TManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }>;\n\n private getExpoGoConfig({\n mainModuleName,\n hostname,\n }: {\n mainModuleName: string;\n hostname?: string | null;\n }): ExpoGoConfig {\n return {\n // localhost:8081\n debuggerHost: this.options.constructUrl({ scheme: '', hostname }),\n // Required for Expo Go to function.\n developer: {\n tool: DEVELOPER_TOOL,\n projectRoot: this.projectRoot,\n },\n packagerOpts: {\n // Required for dev client.\n dev: this.options.mode !== 'production',\n },\n // Indicates the name of the main bundle.\n mainModuleName,\n // Add this string to make Flipper register React Native / Metro as \"running\".\n // Can be tested by running:\n // `METRO_SERVER_PORT=8081 open -a flipper.app`\n // Where 8081 is the port where the Expo project is being hosted.\n __flipperHack: 'React Native packager is running',\n };\n }\n\n /** Resolve all assets and set them on the manifest as URLs */\n private async mutateManifestWithAssetsAsync(manifest: ExpoConfig, bundleUrl: string) {\n await resolveManifestAssets(this.projectRoot, {\n manifest,\n resolver: async (path) => {\n if (this.options.isNativeWebpack) {\n // When using our custom dev server, just do assets normally\n // without the `assets/` subpath redirect.\n return resolve(bundleUrl!.match(/^https?:\\/\\/.*?\\//)![0], path);\n }\n return bundleUrl!.match(/^https?:\\/\\/.*?\\//)![0] + 'assets/' + path;\n },\n });\n // The server normally inserts this but if we're offline we'll do it here\n await resolveGoogleServicesFile(this.projectRoot, manifest);\n }\n\n public getWebBundleUrl() {\n const platform = 'web';\n // Read from headers\n const mainModuleName = this.resolveMainModuleName({\n pkg: this.initialProjectConfig.pkg,\n platform,\n });\n\n return createBundleUrlPathFromExpoConfig(this.projectRoot, this.initialProjectConfig.exp, {\n platform,\n mainModuleName,\n minify: this.options.minify,\n lazy: shouldEnableAsyncImports(this.projectRoot),\n mode: this.options.mode ?? 'development',\n // Hermes doesn't support more modern JS features than most, if not all, modern browser.\n engine: 'hermes',\n isExporting: false,\n bytecode: false,\n });\n }\n\n /**\n * Web platforms should create an index.html response using the same script resolution as native.\n *\n * Instead of adding a `bundleUrl` to a `manifest.json` (native) we'll add a `<script src=\"\">`\n * to an `index.html`, this enables the web platform to load JavaScript from the server.\n */\n private async handleWebRequestAsync(req: ServerRequest, res: ServerResponse) {\n // Read from headers\n const bundleUrl = this.getWebBundleUrl();\n\n res.setHeader('Content-Type', 'text/html');\n\n res.end(\n await createTemplateHtmlFromExpoConfigAsync(this.projectRoot, {\n exp: this.initialProjectConfig.exp,\n scripts: [bundleUrl],\n })\n );\n }\n\n /** Exposed for testing. */\n async checkBrowserRequestAsync(req: ServerRequest, res: ServerResponse, next: ServerNext) {\n if (\n this.platformBundlers.web === 'metro' &&\n this.initialProjectConfig.exp.platforms?.includes('web')\n ) {\n // NOTE(EvanBacon): This effectively disables the safety check we do on custom runtimes to ensure\n // the `expo-platform` header is included. When `web.bundler=web`, if the user has non-standard Expo\n // code loading then they'll get a web bundle without a clear assertion of platform support.\n const platform = parsePlatformHeader(req);\n // On web, serve the public folder\n if (!platform || platform === 'web') {\n if (['static', 'server'].includes(this.initialProjectConfig.exp.web?.output ?? '')) {\n // Skip the spa-styled index.html when static generation is enabled.\n next();\n return true;\n } else {\n await this.handleWebRequestAsync(req, res);\n return true;\n }\n }\n }\n return false;\n }\n\n async handleRequestAsync(\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ): Promise<void> {\n // First check for standard JavaScript runtimes (aka legacy browsers like Chrome).\n if (await this.checkBrowserRequestAsync(req, res, next)) {\n return;\n }\n\n // Save device IDs for dev client.\n await this.saveDevicesAsync(req);\n\n // Read from headers\n const options = this.getParsedHeaders(req);\n const { body, version, headers } = await this._getManifestResponseAsync(options);\n for (const [headerName, headerValue] of headers) {\n res.setHeader(headerName, headerValue);\n }\n res.end(body);\n\n // Log analytics\n this.trackManifest(version ?? null);\n }\n}\n"],"names":["getWorkspaceRoot","getEntryWithServerRoot","getMetroServerRoot","resolveMainModuleName","DEVELOPER_TOOL","ManifestMiddleware","debug","require","projectRoot","findWorkspaceRoot","error","message","includes","supportedPlatforms","props","platform","CommandError","path","relative","resolveEntryPoint","env","EXPO_USE_METRO_WORKSPACE_ROOT","entryPoint","convertPathToModuleSpecifier","stripExtension","ExpoMiddleware","constructor","options","initialProjectConfig","getConfig","platformBundlers","getPlatformBundlers","exp","_resolveProjectSettingsAsync","hostname","protocol","projectConfig","mainModuleName","pkg","isHermesEnabled","isEnableHermesManaged","expoGoConfig","getExpoGoConfig","hostUri","constructUrl","scheme","bundleUrl","_getBundleUrl","engine","undefined","baseUrl","getBaseUrlFromExpoConfig","asyncRoutes","getAsyncRoutesFromExpoConfig","mode","routerRoot","getRouterDirectoryModuleIdWithManifest","reactCompiler","experiments","mutateManifestWithAssetsAsync","isNativeWebpack","saveDevicesAsync","req","deviceIds","headers","ProjectDevices","catch","e","Log","exception","isExporting","createBundleUrlPath","minify","lazy","shouldEnableAsyncImports","bytecode","debuggerHost","developer","tool","packagerOpts","dev","__flipperHack","manifest","resolveManifestAssets","resolver","resolve","match","resolveGoogleServicesFile","getWebBundleUrl","createBundleUrlPathFromExpoConfig","handleWebRequestAsync","res","setHeader","end","createTemplateHtmlFromExpoConfigAsync","scripts","checkBrowserRequestAsync","next","web","platforms","parsePlatformHeader","output","handleRequestAsync","getParsedHeaders","body","version","_getManifestResponseAsync","headerName","headerValue","trackManifest"],"mappings":"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"}
@@ -16,7 +16,8 @@ _export(exports, {
16
16
  getMetroDirectBundleOptionsForExpoConfig: ()=>getMetroDirectBundleOptionsForExpoConfig,
17
17
  getMetroDirectBundleOptions: ()=>getMetroDirectBundleOptions,
18
18
  createBundleUrlPathFromExpoConfig: ()=>createBundleUrlPathFromExpoConfig,
19
- createBundleUrlPath: ()=>createBundleUrlPath
19
+ createBundleUrlPath: ()=>createBundleUrlPath,
20
+ convertPathToModuleSpecifier: ()=>convertPathToModuleSpecifier
20
21
  });
21
22
  function _resolveFrom() {
22
23
  const data = /*#__PURE__*/ _interopRequireDefault(require("resolve-from"));
@@ -91,15 +92,17 @@ function getAsyncRoutesFromExpoConfig(exp, mode, platform) {
91
92
  ].includes(asyncRoutesSetting);
92
93
  }
93
94
  function getMetroDirectBundleOptionsForExpoConfig(projectRoot, exp, options) {
95
+ var ref;
94
96
  return getMetroDirectBundleOptions({
95
97
  ...options,
98
+ reactCompiler: !!((ref = exp.experiments) == null ? void 0 : ref.reactCompiler),
96
99
  baseUrl: getBaseUrlFromExpoConfig(exp),
97
100
  routerRoot: (0, _router.getRouterDirectoryModuleIdWithManifest)(projectRoot, exp),
98
101
  asyncRoutes: getAsyncRoutesFromExpoConfig(exp, options.mode, options.platform)
99
102
  });
100
103
  }
101
104
  function getMetroDirectBundleOptions(options) {
102
- const { mainModuleName , platform , mode , minify , environment , serializerOutput , serializerIncludeMaps , bytecode , lazy , engine , preserveEnvVars , asyncRoutes , baseUrl , routerRoot , isExporting , inlineSourceMap , splitChunks , } = withDefaults(options);
105
+ const { mainModuleName , platform , mode , minify , environment , serializerOutput , serializerIncludeMaps , bytecode , lazy , engine , preserveEnvVars , asyncRoutes , baseUrl , routerRoot , isExporting , inlineSourceMap , splitChunks , reactCompiler , } = withDefaults(options);
103
106
  const dev = mode !== "production";
104
107
  const isHermes = engine === "hermes";
105
108
  if (isExporting) {
@@ -131,7 +134,8 @@ function getMetroDirectBundleOptions(options) {
131
134
  environment,
132
135
  baseUrl,
133
136
  routerRoot,
134
- bytecode
137
+ bytecode,
138
+ reactCompiler
135
139
  },
136
140
  customResolverOptions: {
137
141
  __proto__: null,
@@ -148,14 +152,16 @@ function getMetroDirectBundleOptions(options) {
148
152
  return bundleOptions;
149
153
  }
150
154
  function createBundleUrlPathFromExpoConfig(projectRoot, exp, options) {
155
+ var ref;
151
156
  return createBundleUrlPath({
152
157
  ...options,
158
+ reactCompiler: !!((ref = exp.experiments) == null ? void 0 : ref.reactCompiler),
153
159
  baseUrl: getBaseUrlFromExpoConfig(exp),
154
160
  routerRoot: (0, _router.getRouterDirectoryModuleIdWithManifest)(projectRoot, exp)
155
161
  });
156
162
  }
157
163
  function createBundleUrlPath(options) {
158
- const { platform , mainModuleName , mode , minify , environment , serializerOutput , serializerIncludeMaps , lazy , bytecode , engine , preserveEnvVars , asyncRoutes , baseUrl , routerRoot , inlineSourceMap , isExporting , splitChunks , } = withDefaults(options);
164
+ const { platform , mainModuleName , mode , minify , environment , serializerOutput , serializerIncludeMaps , lazy , bytecode , engine , preserveEnvVars , asyncRoutes , baseUrl , routerRoot , reactCompiler , inlineSourceMap , isExporting , splitChunks , } = withDefaults(options);
159
165
  const dev = String(mode !== "production");
160
166
  const queryParams = new URLSearchParams({
161
167
  platform: encodeURIComponent(platform),
@@ -194,6 +200,9 @@ function createBundleUrlPath(options) {
194
200
  if (routerRoot != null) {
195
201
  queryParams.append("transform.routerRoot", routerRoot);
196
202
  }
203
+ if (reactCompiler) {
204
+ queryParams.append("transform.reactCompiler", String(reactCompiler));
205
+ }
197
206
  if (environment) {
198
207
  queryParams.append("resolver.environment", environment);
199
208
  queryParams.append("transform.environment", environment);
@@ -209,5 +218,8 @@ function createBundleUrlPath(options) {
209
218
  }
210
219
  return `/${encodeURI(mainModuleName)}.bundle?${queryParams.toString()}`;
211
220
  }
221
+ function convertPathToModuleSpecifier(pathLike) {
222
+ return pathLike.replaceAll("\\", "/");
223
+ }
212
224
 
213
225
  //# sourceMappingURL=metroOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/middleware/metroOptions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport type { BundleOptions as MetroBundleOptions } from 'metro/src/shared/types';\nimport resolveFrom from 'resolve-from';\n\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { getRouterDirectoryModuleIdWithManifest } from '../metro/router';\n\nconst debug = require('debug')('expo:metro:options') as typeof console.log;\n\nexport type MetroEnvironment = 'node' | 'react-server' | 'client';\n\nexport type ExpoMetroOptions = {\n platform: string;\n mainModuleName: string;\n mode: string;\n minify?: boolean;\n environment?: MetroEnvironment;\n serializerOutput?: 'static';\n serializerIncludeMaps?: boolean;\n lazy?: boolean;\n engine?: 'hermes';\n preserveEnvVars?: boolean;\n bytecode: boolean;\n /** Enable async routes (route-based bundle splitting) in Expo Router. */\n asyncRoutes?: boolean;\n /** Module ID relative to the projectRoot for the Expo Router app directory. */\n routerRoot: string;\n baseUrl?: string;\n isExporting: boolean;\n inlineSourceMap?: boolean;\n splitChunks?: boolean;\n};\n\nexport type SerializerOptions = {\n includeSourceMaps?: boolean;\n output?: 'static';\n splitChunks?: boolean;\n};\n\nexport type ExpoMetroBundleOptions = MetroBundleOptions & {\n serializerOptions?: SerializerOptions;\n};\n\nexport function shouldEnableAsyncImports(projectRoot: string): boolean {\n if (env.EXPO_NO_METRO_LAZY) {\n return false;\n }\n\n // `@expo/metro-runtime` includes support for the fetch + eval runtime code required\n // to support async imports. If it's not installed, we can't support async imports.\n // If it is installed, the user MUST import it somewhere in their project.\n // Expo Router automatically pulls this in, so we can check for it.\n return resolveFrom.silent(projectRoot, '@expo/metro-runtime') != null;\n}\n\nexport function isServerEnvironment(environment?: any): boolean {\n return environment === 'node' || environment === 'react-server';\n}\n\nfunction withDefaults({\n mode = 'development',\n minify = mode === 'production',\n preserveEnvVars = env.EXPO_NO_CLIENT_ENV_VARS,\n lazy,\n ...props\n}: ExpoMetroOptions): ExpoMetroOptions {\n if (props.bytecode) {\n if (props.platform === 'web') {\n throw new CommandError('Cannot use bytecode with the web platform');\n }\n if (props.engine !== 'hermes') {\n throw new CommandError('Bytecode is only supported with the Hermes engine');\n }\n }\n\n return {\n mode,\n minify,\n preserveEnvVars,\n lazy: !props.isExporting && lazy,\n ...props,\n };\n}\n\nexport function getBaseUrlFromExpoConfig(exp: ExpoConfig) {\n return exp.experiments?.baseUrl?.trim().replace(/\\/+$/, '') ?? '';\n}\nexport function getAsyncRoutesFromExpoConfig(exp: ExpoConfig, mode: string, platform: string) {\n let asyncRoutesSetting;\n\n if (exp.extra?.router?.asyncRoutes) {\n const asyncRoutes = exp.extra?.router?.asyncRoutes;\n if (['boolean', 'string'].includes(typeof asyncRoutes)) {\n asyncRoutesSetting = asyncRoutes;\n } else if (typeof asyncRoutes === 'object') {\n asyncRoutesSetting = asyncRoutes[platform] ?? asyncRoutes.default;\n }\n }\n\n return [mode, true].includes(asyncRoutesSetting);\n}\n\nexport function getMetroDirectBundleOptionsForExpoConfig(\n projectRoot: string,\n exp: ExpoConfig,\n options: Omit<ExpoMetroOptions, 'baseUrl' | 'routerRoot' | 'asyncRoutes'>\n): Partial<ExpoMetroBundleOptions> {\n return getMetroDirectBundleOptions({\n ...options,\n baseUrl: getBaseUrlFromExpoConfig(exp),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n asyncRoutes: getAsyncRoutesFromExpoConfig(exp, options.mode, options.platform),\n });\n}\n\nexport function getMetroDirectBundleOptions(\n options: ExpoMetroOptions\n): Partial<ExpoMetroBundleOptions> {\n const {\n mainModuleName,\n platform,\n mode,\n minify,\n environment,\n serializerOutput,\n serializerIncludeMaps,\n bytecode,\n lazy,\n engine,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n isExporting,\n inlineSourceMap,\n splitChunks,\n } = withDefaults(options);\n\n const dev = mode !== 'production';\n const isHermes = engine === 'hermes';\n\n if (isExporting) {\n debug('Disabling lazy bundling for export build');\n options.lazy = false;\n }\n\n let fakeSourceUrl: string | undefined;\n let fakeSourceMapUrl: string | undefined;\n\n // TODO: Upstream support to Metro for passing custom serializer options.\n if (serializerIncludeMaps != null || serializerOutput != null) {\n fakeSourceUrl = new URL(\n createBundleUrlPath(options).replace(/^\\//, ''),\n 'http://localhost:8081'\n ).toString();\n if (serializerIncludeMaps) {\n fakeSourceMapUrl = fakeSourceUrl.replace('.bundle?', '.map?');\n }\n }\n\n const bundleOptions: Partial<ExpoMetroBundleOptions> = {\n platform,\n entryFile: mainModuleName,\n dev,\n minify: minify ?? !dev,\n inlineSourceMap: inlineSourceMap ?? false,\n lazy,\n unstable_transformProfile: isHermes ? 'hermes-stable' : 'default',\n customTransformOptions: {\n __proto__: null,\n engine,\n preserveEnvVars,\n asyncRoutes,\n environment,\n baseUrl,\n routerRoot,\n bytecode,\n },\n customResolverOptions: {\n __proto__: null,\n environment,\n },\n sourceMapUrl: fakeSourceMapUrl,\n sourceUrl: fakeSourceUrl,\n serializerOptions: {\n splitChunks,\n output: serializerOutput,\n includeSourceMaps: serializerIncludeMaps,\n },\n };\n\n return bundleOptions;\n}\n\nexport function createBundleUrlPathFromExpoConfig(\n projectRoot: string,\n exp: ExpoConfig,\n options: Omit<ExpoMetroOptions, 'baseUrl' | 'routerRoot'>\n): string {\n return createBundleUrlPath({\n ...options,\n baseUrl: getBaseUrlFromExpoConfig(exp),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n });\n}\n\nexport function createBundleUrlPath(options: ExpoMetroOptions): string {\n const {\n platform,\n mainModuleName,\n mode,\n minify,\n environment,\n serializerOutput,\n serializerIncludeMaps,\n lazy,\n bytecode,\n engine,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n inlineSourceMap,\n isExporting,\n splitChunks,\n } = withDefaults(options);\n\n const dev = String(mode !== 'production');\n const queryParams = new URLSearchParams({\n platform: encodeURIComponent(platform),\n dev,\n // TODO: Is this still needed?\n hot: String(false),\n });\n\n // Lazy bundling must be disabled for bundle splitting to work.\n if (!isExporting && lazy) {\n queryParams.append('lazy', String(lazy));\n }\n\n if (inlineSourceMap) {\n queryParams.append('inlineSourceMap', String(inlineSourceMap));\n }\n\n if (minify) {\n queryParams.append('minify', String(minify));\n }\n\n // We split bytecode from the engine since you could technically use Hermes without bytecode.\n // Hermes indicates the type of language features you want to transform out of the JS, whereas bytecode\n // indicates whether you want to use the Hermes bytecode format.\n if (engine) {\n queryParams.append('transform.engine', engine);\n }\n if (bytecode) {\n queryParams.append('transform.bytecode', String(bytecode));\n }\n\n if (asyncRoutes) {\n queryParams.append('transform.asyncRoutes', String(asyncRoutes));\n }\n if (preserveEnvVars) {\n queryParams.append('transform.preserveEnvVars', String(preserveEnvVars));\n }\n if (baseUrl) {\n queryParams.append('transform.baseUrl', baseUrl);\n }\n if (routerRoot != null) {\n queryParams.append('transform.routerRoot', routerRoot);\n }\n\n if (environment) {\n queryParams.append('resolver.environment', environment);\n queryParams.append('transform.environment', environment);\n }\n\n if (splitChunks) {\n queryParams.append('serializer.splitChunks', String(splitChunks));\n }\n if (serializerOutput) {\n queryParams.append('serializer.output', serializerOutput);\n }\n if (serializerIncludeMaps) {\n queryParams.append('serializer.map', String(serializerIncludeMaps));\n }\n\n return `/${encodeURI(mainModuleName)}.bundle?${queryParams.toString()}`;\n}\n"],"names":["shouldEnableAsyncImports","isServerEnvironment","getBaseUrlFromExpoConfig","getAsyncRoutesFromExpoConfig","getMetroDirectBundleOptionsForExpoConfig","getMetroDirectBundleOptions","createBundleUrlPathFromExpoConfig","createBundleUrlPath","debug","require","projectRoot","env","EXPO_NO_METRO_LAZY","resolveFrom","silent","environment","withDefaults","mode","minify","preserveEnvVars","EXPO_NO_CLIENT_ENV_VARS","lazy","props","bytecode","platform","CommandError","engine","isExporting","exp","experiments","baseUrl","trim","replace","asyncRoutesSetting","extra","router","asyncRoutes","includes","default","options","routerRoot","getRouterDirectoryModuleIdWithManifest","mainModuleName","serializerOutput","serializerIncludeMaps","inlineSourceMap","splitChunks","dev","isHermes","fakeSourceUrl","fakeSourceMapUrl","URL","toString","bundleOptions","entryFile","unstable_transformProfile","customTransformOptions","__proto__","customResolverOptions","sourceMapUrl","sourceUrl","serializerOptions","output","includeSourceMaps","String","queryParams","URLSearchParams","encodeURIComponent","hot","append","encodeURI"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/metroOptions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport type { BundleOptions as MetroBundleOptions } from 'metro/src/shared/types';\nimport resolveFrom from 'resolve-from';\n\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { getRouterDirectoryModuleIdWithManifest } from '../metro/router';\n\nconst debug = require('debug')('expo:metro:options') as typeof console.log;\n\nexport type MetroEnvironment = 'node' | 'react-server' | 'client';\n\nexport type ExpoMetroOptions = {\n platform: string;\n mainModuleName: string;\n mode: string;\n minify?: boolean;\n environment?: MetroEnvironment;\n serializerOutput?: 'static';\n serializerIncludeMaps?: boolean;\n lazy?: boolean;\n engine?: 'hermes';\n preserveEnvVars?: boolean;\n bytecode: boolean;\n /** Enable async routes (route-based bundle splitting) in Expo Router. */\n asyncRoutes?: boolean;\n /** Module ID relative to the projectRoot for the Expo Router app directory. */\n routerRoot: string;\n /** Enable React compiler support in Babel. */\n reactCompiler: boolean;\n baseUrl?: string;\n isExporting: boolean;\n inlineSourceMap?: boolean;\n splitChunks?: boolean;\n};\n\nexport type SerializerOptions = {\n includeSourceMaps?: boolean;\n output?: 'static';\n splitChunks?: boolean;\n};\n\nexport type ExpoMetroBundleOptions = MetroBundleOptions & {\n serializerOptions?: SerializerOptions;\n};\n\nexport function shouldEnableAsyncImports(projectRoot: string): boolean {\n if (env.EXPO_NO_METRO_LAZY) {\n return false;\n }\n\n // `@expo/metro-runtime` includes support for the fetch + eval runtime code required\n // to support async imports. If it's not installed, we can't support async imports.\n // If it is installed, the user MUST import it somewhere in their project.\n // Expo Router automatically pulls this in, so we can check for it.\n return resolveFrom.silent(projectRoot, '@expo/metro-runtime') != null;\n}\n\nexport function isServerEnvironment(environment?: any): boolean {\n return environment === 'node' || environment === 'react-server';\n}\n\nfunction withDefaults({\n mode = 'development',\n minify = mode === 'production',\n preserveEnvVars = env.EXPO_NO_CLIENT_ENV_VARS,\n lazy,\n ...props\n}: ExpoMetroOptions): ExpoMetroOptions {\n if (props.bytecode) {\n if (props.platform === 'web') {\n throw new CommandError('Cannot use bytecode with the web platform');\n }\n if (props.engine !== 'hermes') {\n throw new CommandError('Bytecode is only supported with the Hermes engine');\n }\n }\n\n return {\n mode,\n minify,\n preserveEnvVars,\n lazy: !props.isExporting && lazy,\n ...props,\n };\n}\n\nexport function getBaseUrlFromExpoConfig(exp: ExpoConfig) {\n return exp.experiments?.baseUrl?.trim().replace(/\\/+$/, '') ?? '';\n}\n\nexport function getAsyncRoutesFromExpoConfig(exp: ExpoConfig, mode: string, platform: string) {\n let asyncRoutesSetting;\n\n if (exp.extra?.router?.asyncRoutes) {\n const asyncRoutes = exp.extra?.router?.asyncRoutes;\n if (['boolean', 'string'].includes(typeof asyncRoutes)) {\n asyncRoutesSetting = asyncRoutes;\n } else if (typeof asyncRoutes === 'object') {\n asyncRoutesSetting = asyncRoutes[platform] ?? asyncRoutes.default;\n }\n }\n\n return [mode, true].includes(asyncRoutesSetting);\n}\n\nexport function getMetroDirectBundleOptionsForExpoConfig(\n projectRoot: string,\n exp: ExpoConfig,\n options: Omit<ExpoMetroOptions, 'baseUrl' | 'reactCompiler' | 'routerRoot' | 'asyncRoutes'>\n): Partial<ExpoMetroBundleOptions> {\n return getMetroDirectBundleOptions({\n ...options,\n reactCompiler: !!exp.experiments?.reactCompiler,\n baseUrl: getBaseUrlFromExpoConfig(exp),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n asyncRoutes: getAsyncRoutesFromExpoConfig(exp, options.mode, options.platform),\n });\n}\n\nexport function getMetroDirectBundleOptions(\n options: ExpoMetroOptions\n): Partial<ExpoMetroBundleOptions> {\n const {\n mainModuleName,\n platform,\n mode,\n minify,\n environment,\n serializerOutput,\n serializerIncludeMaps,\n bytecode,\n lazy,\n engine,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n isExporting,\n inlineSourceMap,\n splitChunks,\n reactCompiler,\n } = withDefaults(options);\n\n const dev = mode !== 'production';\n const isHermes = engine === 'hermes';\n\n if (isExporting) {\n debug('Disabling lazy bundling for export build');\n options.lazy = false;\n }\n\n let fakeSourceUrl: string | undefined;\n let fakeSourceMapUrl: string | undefined;\n\n // TODO: Upstream support to Metro for passing custom serializer options.\n if (serializerIncludeMaps != null || serializerOutput != null) {\n fakeSourceUrl = new URL(\n createBundleUrlPath(options).replace(/^\\//, ''),\n 'http://localhost:8081'\n ).toString();\n if (serializerIncludeMaps) {\n fakeSourceMapUrl = fakeSourceUrl.replace('.bundle?', '.map?');\n }\n }\n\n const bundleOptions: Partial<ExpoMetroBundleOptions> = {\n platform,\n entryFile: mainModuleName,\n dev,\n minify: minify ?? !dev,\n inlineSourceMap: inlineSourceMap ?? false,\n lazy,\n unstable_transformProfile: isHermes ? 'hermes-stable' : 'default',\n customTransformOptions: {\n __proto__: null,\n engine,\n preserveEnvVars,\n asyncRoutes,\n environment,\n baseUrl,\n routerRoot,\n bytecode,\n reactCompiler,\n },\n customResolverOptions: {\n __proto__: null,\n environment,\n },\n sourceMapUrl: fakeSourceMapUrl,\n sourceUrl: fakeSourceUrl,\n serializerOptions: {\n splitChunks,\n output: serializerOutput,\n includeSourceMaps: serializerIncludeMaps,\n },\n };\n\n return bundleOptions;\n}\n\nexport function createBundleUrlPathFromExpoConfig(\n projectRoot: string,\n exp: ExpoConfig,\n options: Omit<ExpoMetroOptions, 'reactCompiler' | 'baseUrl' | 'routerRoot'>\n): string {\n return createBundleUrlPath({\n ...options,\n reactCompiler: !!exp.experiments?.reactCompiler,\n baseUrl: getBaseUrlFromExpoConfig(exp),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n });\n}\n\nexport function createBundleUrlPath(options: ExpoMetroOptions): string {\n const {\n platform,\n mainModuleName,\n mode,\n minify,\n environment,\n serializerOutput,\n serializerIncludeMaps,\n lazy,\n bytecode,\n engine,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n reactCompiler,\n inlineSourceMap,\n isExporting,\n splitChunks,\n } = withDefaults(options);\n\n const dev = String(mode !== 'production');\n const queryParams = new URLSearchParams({\n platform: encodeURIComponent(platform),\n dev,\n // TODO: Is this still needed?\n hot: String(false),\n });\n\n // Lazy bundling must be disabled for bundle splitting to work.\n if (!isExporting && lazy) {\n queryParams.append('lazy', String(lazy));\n }\n\n if (inlineSourceMap) {\n queryParams.append('inlineSourceMap', String(inlineSourceMap));\n }\n\n if (minify) {\n queryParams.append('minify', String(minify));\n }\n\n // We split bytecode from the engine since you could technically use Hermes without bytecode.\n // Hermes indicates the type of language features you want to transform out of the JS, whereas bytecode\n // indicates whether you want to use the Hermes bytecode format.\n if (engine) {\n queryParams.append('transform.engine', engine);\n }\n if (bytecode) {\n queryParams.append('transform.bytecode', String(bytecode));\n }\n\n if (asyncRoutes) {\n queryParams.append('transform.asyncRoutes', String(asyncRoutes));\n }\n if (preserveEnvVars) {\n queryParams.append('transform.preserveEnvVars', String(preserveEnvVars));\n }\n if (baseUrl) {\n queryParams.append('transform.baseUrl', baseUrl);\n }\n if (routerRoot != null) {\n queryParams.append('transform.routerRoot', routerRoot);\n }\n if (reactCompiler) {\n queryParams.append('transform.reactCompiler', String(reactCompiler));\n }\n\n if (environment) {\n queryParams.append('resolver.environment', environment);\n queryParams.append('transform.environment', environment);\n }\n\n if (splitChunks) {\n queryParams.append('serializer.splitChunks', String(splitChunks));\n }\n if (serializerOutput) {\n queryParams.append('serializer.output', serializerOutput);\n }\n if (serializerIncludeMaps) {\n queryParams.append('serializer.map', String(serializerIncludeMaps));\n }\n\n return `/${encodeURI(mainModuleName)}.bundle?${queryParams.toString()}`;\n}\n\n/**\n * Convert all path separators to `/`, including on Windows.\n * Metro asumes that all module specifiers are posix paths.\n * References to directories can still be Windows-style paths in Metro.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#importing_features_into_your_script\n * @see https://github.com/facebook/metro/pull/1286\n */\nexport function convertPathToModuleSpecifier(pathLike: string) {\n return pathLike.replaceAll('\\\\', '/');\n}\n"],"names":["shouldEnableAsyncImports","isServerEnvironment","getBaseUrlFromExpoConfig","getAsyncRoutesFromExpoConfig","getMetroDirectBundleOptionsForExpoConfig","getMetroDirectBundleOptions","createBundleUrlPathFromExpoConfig","createBundleUrlPath","convertPathToModuleSpecifier","debug","require","projectRoot","env","EXPO_NO_METRO_LAZY","resolveFrom","silent","environment","withDefaults","mode","minify","preserveEnvVars","EXPO_NO_CLIENT_ENV_VARS","lazy","props","bytecode","platform","CommandError","engine","isExporting","exp","experiments","baseUrl","trim","replace","asyncRoutesSetting","extra","router","asyncRoutes","includes","default","options","reactCompiler","routerRoot","getRouterDirectoryModuleIdWithManifest","mainModuleName","serializerOutput","serializerIncludeMaps","inlineSourceMap","splitChunks","dev","isHermes","fakeSourceUrl","fakeSourceMapUrl","URL","toString","bundleOptions","entryFile","unstable_transformProfile","customTransformOptions","__proto__","customResolverOptions","sourceMapUrl","sourceUrl","serializerOptions","output","includeSourceMaps","String","queryParams","URLSearchParams","encodeURIComponent","hot","append","encodeURI","pathLike","replaceAll"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/middleware/resolveAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { getAssetSchemasAsync } from '../../../api/getExpoSchema';\nimport { BundleAssetWithFileHashes } from '../../../export/fork-bundleAsync';\nimport * as Log from '../../../log';\nimport { fileExistsAsync } from '../../../utils/dir';\nimport { CommandError } from '../../../utils/errors';\nimport { get, set } from '../../../utils/obj';\nimport { validateUrl } from '../../../utils/url';\n\ntype ManifestAsset = { fileHashes: string[]; files: string[]; hash: string };\n\nexport type Asset = ManifestAsset | BundleAssetWithFileHashes;\n\ntype ManifestResolutionError = Error & {\n localAssetPath?: string;\n manifestField?: string;\n};\n\n/** Inline the contents of each platform's `googleServicesFile` so runtimes can access them. */\nexport async function resolveGoogleServicesFile(\n projectRoot: string,\n manifest: Partial<Pick<ExpoConfig, 'android' | 'ios'>>\n) {\n if (manifest.android?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.android.googleServicesFile),\n 'utf8'\n );\n manifest.android.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: android.googleServicesFile: \"${manifest.android.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.android.googleServicesFile;\n }\n }\n if (manifest.ios?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.ios.googleServicesFile),\n 'base64'\n );\n manifest.ios.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: ios.googleServicesFile: \"${manifest.ios.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.ios.googleServicesFile;\n }\n }\n return manifest;\n}\n\n/**\n * Get all fields in the manifest that match assets, then filter the ones that aren't set.\n *\n * @param manifest\n * @returns Asset fields that the user has set like [\"icon\", \"splash.image\", ...]\n */\nexport async function getAssetFieldPathsForManifestAsync(manifest: ExpoConfig): Promise<string[]> {\n // String array like [\"icon\", \"notification.icon\", \"loading.icon\", \"loading.backgroundImage\", \"ios.icon\", ...]\n const sdkAssetFieldPaths = await getAssetSchemasAsync(manifest.sdkVersion);\n return sdkAssetFieldPaths.filter((assetSchema) => get(manifest, assetSchema));\n}\n\n/** Resolve all assets in the app.json inline. */\nexport async function resolveManifestAssets(\n projectRoot: string,\n {\n manifest,\n resolver,\n strict,\n }: {\n manifest: ExpoConfig;\n resolver: (assetPath: string) => Promise<string>;\n strict?: boolean;\n }\n) {\n try {\n // Asset fields that the user has set like [\"icon\", \"splash.image\"]\n const assetSchemas = await getAssetFieldPathsForManifestAsync(manifest);\n // Get the URLs\n const urls = await Promise.all(\n assetSchemas.map(async (manifestField) => {\n const pathOrURL = get(manifest, manifestField);\n // URL\n if (validateUrl(pathOrURL, { requireProtocol: true })) {\n return pathOrURL;\n }\n\n // File path\n if (await fileExistsAsync(path.resolve(projectRoot, pathOrURL))) {\n return await resolver(pathOrURL);\n }\n\n // Unknown\n const err: ManifestResolutionError = new CommandError(\n 'MANIFEST_ASSET',\n 'Could not resolve local asset: ' + pathOrURL\n );\n err.localAssetPath = pathOrURL;\n err.manifestField = manifestField;\n throw err;\n })\n );\n\n // Set the corresponding URL fields\n assetSchemas.forEach((manifestField, index: number) =>\n set(manifest, `${manifestField}Url`, urls[index])\n );\n } catch (error: any) {\n if (error.localAssetPath) {\n Log.warn(\n `Unable to resolve asset \"${error.localAssetPath}\" from \"${error.manifestField}\" in your app.json or app.config.js`\n );\n } else {\n Log.warn(\n `Warning: Unable to resolve manifest assets. Icons and fonts might not work. ${error.message}.`\n );\n }\n\n if (strict) {\n throw new CommandError(\n 'MANIFEST_ASSET',\n 'Failed to export manifest assets: ' + error.message\n );\n }\n }\n}\n"],"names":["resolveGoogleServicesFile","getAssetFieldPathsForManifestAsync","resolveManifestAssets","projectRoot","manifest","android","googleServicesFile","contents","fs","readFile","path","resolve","Log","warn","ios","sdkAssetFieldPaths","getAssetSchemasAsync","sdkVersion","filter","assetSchema","get","resolver","strict","assetSchemas","urls","Promise","all","map","manifestField","pathOrURL","validateUrl","requireProtocol","fileExistsAsync","err","CommandError","localAssetPath","forEach","index","set","error","message"],"mappings":"AAAA;;;;;;;;;;;IAsBsBA,yBAAyB,MAAzBA,yBAAyB;IA2CzBC,kCAAkC,MAAlCA,kCAAkC;IAOlCC,qBAAqB,MAArBA,qBAAqB;;;8DAvE5B,aAAa;;;;;;;8DACX,MAAM;;;;;;+BAEc,4BAA4B;2DAE5C,cAAc;qBACH,oBAAoB;wBACvB,uBAAuB;qBAC3B,oBAAoB;qBACjB,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYzC,eAAeF,yBAAyB,CAC7CG,WAAmB,EACnBC,QAAsD,EACtD;QACIA,GAAgB,EAehBA,IAAY;IAfhB,IAAIA,CAAAA,GAAgB,GAAhBA,QAAQ,CAACC,OAAO,SAAoB,GAApCD,KAAAA,CAAoC,GAApCA,GAAgB,CAAEE,kBAAkB,EAAE;QACxC,IAAI;YACF,MAAMC,QAAQ,GAAG,MAAMC,SAAE,EAAA,QAAA,CAACC,QAAQ,CAChCC,KAAI,EAAA,QAAA,CAACC,OAAO,CAACR,WAAW,EAAEC,QAAQ,CAACC,OAAO,CAACC,kBAAkB,CAAC,EAC9D,MAAM,CACP,AAAC;YACFF,QAAQ,CAACC,OAAO,CAACC,kBAAkB,GAAGC,QAAQ,CAAC;QACjD,EAAE,OAAM;YACNK,IAAG,CAACC,IAAI,CACN,CAAC,0DAA0D,EAAET,QAAQ,CAACC,OAAO,CAACC,kBAAkB,CAAC,CAAC,CAAC,CACpG,CAAC;YACF,0DAA0D;YAC1D,OAAOF,QAAQ,CAACC,OAAO,CAACC,kBAAkB,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,IAAIF,CAAAA,IAAY,GAAZA,QAAQ,CAACU,GAAG,SAAoB,GAAhCV,KAAAA,CAAgC,GAAhCA,IAAY,CAAEE,kBAAkB,EAAE;QACpC,IAAI;YACF,MAAMC,SAAQ,GAAG,MAAMC,SAAE,EAAA,QAAA,CAACC,QAAQ,CAChCC,KAAI,EAAA,QAAA,CAACC,OAAO,CAACR,WAAW,EAAEC,QAAQ,CAACU,GAAG,CAACR,kBAAkB,CAAC,EAC1D,QAAQ,CACT,AAAC;YACFF,QAAQ,CAACU,GAAG,CAACR,kBAAkB,GAAGC,SAAQ,CAAC;QAC7C,EAAE,OAAM;YACNK,IAAG,CAACC,IAAI,CACN,CAAC,sDAAsD,EAAET,QAAQ,CAACU,GAAG,CAACR,kBAAkB,CAAC,CAAC,CAAC,CAC5F,CAAC;YACF,0DAA0D;YAC1D,OAAOF,QAAQ,CAACU,GAAG,CAACR,kBAAkB,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAOF,QAAQ,CAAC;AAClB,CAAC;AAQM,eAAeH,kCAAkC,CAACG,QAAoB,EAAqB;IAChG,8GAA8G;IAC9G,MAAMW,kBAAkB,GAAG,MAAMC,IAAAA,cAAoB,qBAAA,EAACZ,QAAQ,CAACa,UAAU,CAAC,AAAC;IAC3E,OAAOF,kBAAkB,CAACG,MAAM,CAAC,CAACC,WAAW,GAAKC,IAAAA,IAAG,IAAA,EAAChB,QAAQ,EAAEe,WAAW,CAAC,CAAC,CAAC;AAChF,CAAC;AAGM,eAAejB,qBAAqB,CACzCC,WAAmB,EACnB,EACEC,QAAQ,CAAA,EACRiB,QAAQ,CAAA,EACRC,MAAM,CAAA,EAKP,EACD;IACA,IAAI;QACF,mEAAmE;QACnE,MAAMC,YAAY,GAAG,MAAMtB,kCAAkC,CAACG,QAAQ,CAAC,AAAC;QACxE,eAAe;QACf,MAAMoB,IAAI,GAAG,MAAMC,OAAO,CAACC,GAAG,CAC5BH,YAAY,CAACI,GAAG,CAAC,OAAOC,aAAa,GAAK;YACxC,MAAMC,SAAS,GAAGT,IAAAA,IAAG,IAAA,EAAChB,QAAQ,EAAEwB,aAAa,CAAC,AAAC;YAC/C,MAAM;YACN,IAAIE,IAAAA,IAAW,YAAA,EAACD,SAAS,EAAE;gBAAEE,eAAe,EAAE,IAAI;aAAE,CAAC,EAAE;gBACrD,OAAOF,SAAS,CAAC;YACnB,CAAC;YAED,YAAY;YACZ,IAAI,MAAMG,IAAAA,IAAe,gBAAA,EAACtB,KAAI,EAAA,QAAA,CAACC,OAAO,CAACR,WAAW,EAAE0B,SAAS,CAAC,CAAC,EAAE;gBAC/D,OAAO,MAAMR,QAAQ,CAACQ,SAAS,CAAC,CAAC;YACnC,CAAC;YAED,UAAU;YACV,MAAMI,GAAG,GAA4B,IAAIC,OAAY,aAAA,CACnD,gBAAgB,EAChB,iCAAiC,GAAGL,SAAS,CAC9C,AAAC;YACFI,GAAG,CAACE,cAAc,GAAGN,SAAS,CAAC;YAC/BI,GAAG,CAACL,aAAa,GAAGA,aAAa,CAAC;YAClC,MAAMK,GAAG,CAAC;QACZ,CAAC,CAAC,CACH,AAAC;QAEF,mCAAmC;QACnCV,YAAY,CAACa,OAAO,CAAC,CAACR,aAAa,EAAES,KAAa,GAChDC,IAAAA,IAAG,IAAA,EAAClC,QAAQ,EAAE,CAAC,EAAEwB,aAAa,CAAC,GAAG,CAAC,EAAEJ,IAAI,CAACa,KAAK,CAAC,CAAC,CAClD,CAAC;IACJ,EAAE,OAAOE,KAAK,EAAO;QACnB,IAAIA,KAAK,CAACJ,cAAc,EAAE;YACxBvB,IAAG,CAACC,IAAI,CACN,CAAC,yBAAyB,EAAE0B,KAAK,CAACJ,cAAc,CAAC,QAAQ,EAAEI,KAAK,CAACX,aAAa,CAAC,mCAAmC,CAAC,CACpH,CAAC;QACJ,OAAO;YACLhB,IAAG,CAACC,IAAI,CACN,CAAC,4EAA4E,EAAE0B,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAChG,CAAC;QACJ,CAAC;QAED,IAAIlB,MAAM,EAAE;YACV,MAAM,IAAIY,OAAY,aAAA,CACpB,gBAAgB,EAChB,oCAAoC,GAAGK,KAAK,CAACC,OAAO,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/resolveAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { getAssetSchemasAsync } from '../../../api/getExpoSchema';\nimport { BundleAssetWithFileHashes } from '../../../export/saveAssets';\nimport * as Log from '../../../log';\nimport { fileExistsAsync } from '../../../utils/dir';\nimport { CommandError } from '../../../utils/errors';\nimport { get, set } from '../../../utils/obj';\nimport { validateUrl } from '../../../utils/url';\n\ntype ManifestAsset = { fileHashes: string[]; files: string[]; hash: string };\n\nexport type Asset = ManifestAsset | BundleAssetWithFileHashes;\n\ntype ManifestResolutionError = Error & {\n localAssetPath?: string;\n manifestField?: string;\n};\n\n/** Inline the contents of each platform's `googleServicesFile` so runtimes can access them. */\nexport async function resolveGoogleServicesFile(\n projectRoot: string,\n manifest: Partial<Pick<ExpoConfig, 'android' | 'ios'>>\n) {\n if (manifest.android?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.android.googleServicesFile),\n 'utf8'\n );\n manifest.android.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: android.googleServicesFile: \"${manifest.android.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.android.googleServicesFile;\n }\n }\n if (manifest.ios?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.ios.googleServicesFile),\n 'base64'\n );\n manifest.ios.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: ios.googleServicesFile: \"${manifest.ios.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.ios.googleServicesFile;\n }\n }\n return manifest;\n}\n\n/**\n * Get all fields in the manifest that match assets, then filter the ones that aren't set.\n *\n * @param manifest\n * @returns Asset fields that the user has set like [\"icon\", \"splash.image\", ...]\n */\nexport async function getAssetFieldPathsForManifestAsync(manifest: ExpoConfig): Promise<string[]> {\n // String array like [\"icon\", \"notification.icon\", \"loading.icon\", \"loading.backgroundImage\", \"ios.icon\", ...]\n const sdkAssetFieldPaths = await getAssetSchemasAsync(manifest.sdkVersion);\n return sdkAssetFieldPaths.filter((assetSchema) => get(manifest, assetSchema));\n}\n\n/** Resolve all assets in the app.json inline. */\nexport async function resolveManifestAssets(\n projectRoot: string,\n {\n manifest,\n resolver,\n strict,\n }: {\n manifest: ExpoConfig;\n resolver: (assetPath: string) => Promise<string>;\n strict?: boolean;\n }\n) {\n try {\n // Asset fields that the user has set like [\"icon\", \"splash.image\"]\n const assetSchemas = await getAssetFieldPathsForManifestAsync(manifest);\n // Get the URLs\n const urls = await Promise.all(\n assetSchemas.map(async (manifestField) => {\n const pathOrURL = get(manifest, manifestField);\n // URL\n if (validateUrl(pathOrURL, { requireProtocol: true })) {\n return pathOrURL;\n }\n\n // File path\n if (await fileExistsAsync(path.resolve(projectRoot, pathOrURL))) {\n return await resolver(pathOrURL);\n }\n\n // Unknown\n const err: ManifestResolutionError = new CommandError(\n 'MANIFEST_ASSET',\n 'Could not resolve local asset: ' + pathOrURL\n );\n err.localAssetPath = pathOrURL;\n err.manifestField = manifestField;\n throw err;\n })\n );\n\n // Set the corresponding URL fields\n assetSchemas.forEach((manifestField, index: number) =>\n set(manifest, `${manifestField}Url`, urls[index])\n );\n } catch (error: any) {\n if (error.localAssetPath) {\n Log.warn(\n `Unable to resolve asset \"${error.localAssetPath}\" from \"${error.manifestField}\" in your app.json or app.config.js`\n );\n } else {\n Log.warn(\n `Warning: Unable to resolve manifest assets. Icons and fonts might not work. ${error.message}.`\n );\n }\n\n if (strict) {\n throw new CommandError(\n 'MANIFEST_ASSET',\n 'Failed to export manifest assets: ' + error.message\n );\n }\n }\n}\n"],"names":["resolveGoogleServicesFile","getAssetFieldPathsForManifestAsync","resolveManifestAssets","projectRoot","manifest","android","googleServicesFile","contents","fs","readFile","path","resolve","Log","warn","ios","sdkAssetFieldPaths","getAssetSchemasAsync","sdkVersion","filter","assetSchema","get","resolver","strict","assetSchemas","urls","Promise","all","map","manifestField","pathOrURL","validateUrl","requireProtocol","fileExistsAsync","err","CommandError","localAssetPath","forEach","index","set","error","message"],"mappings":"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"}