@expo/cli 0.10.10 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +2 -2
- package/build/src/api/endpoint.js +10 -0
- package/build/src/api/endpoint.js.map +1 -1
- package/build/src/api/graphql/queries/UserQuery.js +2 -1
- package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
- package/build/src/api/user/UserSettings.js.map +1 -1
- package/build/src/api/user/actions.js +6 -1
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/expoSsoLauncher.js +127 -0
- package/build/src/api/user/expoSsoLauncher.js.map +1 -0
- package/build/src/api/user/user.js +46 -18
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/export/index.js +3 -1
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/resolveOptions.js +28 -29
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/graphql/generated.js +25 -1
- package/build/src/graphql/generated.js.map +1 -1
- package/build/src/login/index.js +7 -2
- package/build/src/login/index.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +35 -3
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +9 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +1 -1
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +2 -2
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +166 -16
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +23 -6
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
- package/build/src/start/server/type-generation/__typetests__/route.test.js +20 -9
- package/build/src/start/server/type-generation/__typetests__/route.test.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +120 -50
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js +9 -4
- package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/env.js +3 -0
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/port.js +2 -0
- package/build/src/utils/port.js.map +1 -1
- package/package.json +8 -8
- package/static/react-devtools-page/index.html +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/MetroBundlerDevServer.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 { getConfig } from '@expo/config';\nimport { prependMiddleware } from '@expo/dev-server';\nimport * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { getFreePortAsync } from '../../../utils/port';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { getStaticRenderFunctions } from '../getStaticRenderFunctions';\nimport { ContextModuleSourceMapsMiddleware } from '../middleware/ContextModuleSourceMapsMiddleware';\nimport { CreateFileMiddleware } from '../middleware/CreateFileMiddleware';\nimport { FaviconMiddleware } from '../middleware/FaviconMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport { createBundleUrlPath, resolveMainModuleName } from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { startTypescriptTypeGenerationAsync } from '../type-generation/startTypescriptTypeGeneration';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { getErrorOverlayHtmlAsync } from './metroErrorInterface';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\n/** Default port to use for apps running in Expo Go. */\nconst EXPO_GO_METRO_PORT = 8081;\n\n/** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */\nconst DEV_CLIENT_METRO_PORT = 8081;\n\nexport class MetroBundlerDevServer extends BundlerDevServer {\n private metro: import('metro').Server | null = null;\n\n get name(): string {\n return 'metro';\n }\n\n async resolvePortAsync(options: Partial<BundlerStartOptions> = {}): Promise<number> {\n const port =\n // If the manually defined port is busy then an error should be thrown...\n options.port ??\n // Otherwise use the default port based on the runtime target.\n (options.devClient\n ? // Don't check if the port is busy if we're using the dev client since most clients are hardcoded to 8081.\n Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT\n : // Otherwise (running in Expo Go) use a free port that falls back on the classic 8081 port.\n await getFreePortAsync(EXPO_GO_METRO_PORT));\n\n return port;\n }\n\n /** Get routes from Expo Router. */\n async getRoutesAsync() {\n const url = this.getDevServerUrl();\n assert(url, 'Dev server must be started');\n const { getManifest } = await getStaticRenderFunctions(this.projectRoot, url, {\n // Ensure the API Routes are included\n environment: 'node',\n });\n\n return getManifest({ fetchData: true });\n }\n\n async composeResourcesWithHtml({\n mode,\n resources,\n template,\n devBundleUrl,\n }: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n devBundleUrl?: string;\n }) {\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }) {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent } = await getStaticRenderFunctions(this.projectRoot, url, {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n });\n return async (path: string) => {\n return await getStaticContent(new URL(path, url));\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: string;\n minify?: boolean;\n }): Promise<SerialAsset[]> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n try {\n return JSON.parse(txt);\n } catch (error: any) {\n Log.error(\n 'Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.'\n );\n debug(txt);\n throw error;\n }\n }\n\n private async renderStaticErrorAsync(error: Error) {\n return getErrorOverlayHtmlAsync({\n error,\n projectRoot: this.projectRoot,\n });\n }\n\n async getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n });\n\n const bundleStaticHtml = async (): Promise<string> => {\n const { getStaticContent } = await getStaticRenderFunctions(\n this.projectRoot,\n this.getDevServerUrl()!,\n {\n minify: false,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [resources, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ mode, minify }),\n bundleStaticHtml(),\n ]);\n const content = await this.composeResourcesWithHtml({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n });\n return {\n content,\n resources,\n };\n }\n\n async watchEnvironmentVariables() {\n if (!this.instance) {\n throw new Error(\n 'Cannot observe environment variable changes without a running Metro instance.'\n );\n }\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process.\n debug('Skipping Environment Variable observation because Metro is not running (headless).');\n return;\n }\n\n const envFiles = runtimeEnv\n .getFiles(process.env.NODE_ENV)\n .map((fileName) => path.join(this.projectRoot, fileName));\n\n observeFileChanges(\n {\n metro: this.metro,\n server: this.instance.server,\n },\n envFiles,\n () => {\n debug('Reloading environment variables...');\n // Force reload the environment variables.\n runtimeEnv.load(this.projectRoot, { force: true });\n }\n );\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n options.port = await this.resolvePortAsync(options);\n this.urlCreator = this.getUrlCreator(options);\n\n const parsedOptions = {\n port: options.port,\n maxWorkers: options.maxWorkers,\n resetCache: options.resetDevServer,\n\n // Use the unversioned metro config.\n // TODO: Deprecate this property when expo-cli goes away.\n unversioned: false,\n };\n\n // Required for symbolication:\n process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;\n\n const { metro, server, middleware, messageSocket } = await instantiateMetroAsync(\n this,\n parsedOptions\n );\n\n const manifestMiddleware = await this.getManifestMiddlewareAsync(options);\n\n // Important that we noop source maps for context modules as soon as possible.\n prependMiddleware(middleware, new ContextModuleSourceMapsMiddleware().getHandler());\n\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n prependMiddleware(middleware, manifestMiddleware.getHandler());\n\n middleware.use(\n new InterstitialPageMiddleware(this.projectRoot, {\n // TODO: Prevent this from becoming stale.\n scheme: options.location.scheme ?? null,\n }).getHandler()\n );\n middleware.use(new ReactDevToolsPageMiddleware(this.projectRoot).getHandler());\n\n const deepLinkMiddleware = new RuntimeRedirectMiddleware(this.projectRoot, {\n onDeepLink: getDeepLinkHandler(this.projectRoot),\n getLocation: ({ runtime }) => {\n if (runtime === 'custom') {\n return this.urlCreator?.constructDevClientUrl();\n } else {\n return this.urlCreator?.constructUrl({\n scheme: 'exp',\n });\n }\n },\n });\n middleware.use(deepLinkMiddleware.getHandler());\n\n middleware.use(new CreateFileMiddleware(this.projectRoot).getHandler());\n\n // Append support for redirecting unhandled requests to the index.html page on web.\n if (this.isTargetingWeb()) {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n const useWebSSG = exp.web?.output === 'static';\n\n // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.\n middleware.use(new ServeStaticMiddleware(this.projectRoot).getHandler());\n\n // This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.\n middleware.use(new FaviconMiddleware(this.projectRoot).getHandler());\n\n if (useWebSSG) {\n middleware.use(async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!req?.url) {\n return next();\n }\n\n // TODO: Formal manifest for allowed paths\n if (req.url.endsWith('.ico')) {\n return next();\n }\n if (req.url.includes('serializer.output=static')) {\n return next();\n }\n\n try {\n const { content } = await this.getStaticPageAsync(req.url, {\n mode: options.mode ?? 'development',\n });\n\n res.setHeader('Content-Type', 'text/html');\n res.end(content);\n return;\n } catch (error: any) {\n res.setHeader('Content-Type', 'text/html');\n try {\n res.end(await this.renderStaticErrorAsync(error));\n } catch (staticError: any) {\n // Fallback error for when Expo Router is misconfigured in the project.\n res.end(\n '<span><h3>Internal Error:</h3><b>Project is not setup correctly for static rendering (check terminal for more info):</b><br/>' +\n error.message +\n '<br/><br/>' +\n staticError.message +\n '</span>'\n );\n }\n }\n });\n }\n\n // This MUST run last since it's the fallback.\n if (!useWebSSG) {\n middleware.use(\n new HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler()\n );\n }\n }\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n this.metro = null;\n callback?.(err);\n });\n };\n\n this.metro = metro;\n return {\n server,\n location: {\n // The port is the main thing we want to send back.\n port: options.port,\n // localhost isn't always correct.\n host: 'localhost',\n // http is the only supported protocol on native.\n url: `http://localhost:${options.port}`,\n protocol: 'http',\n },\n middleware,\n messageSocket,\n };\n }\n\n public async waitForTypeScriptAsync(): Promise<boolean> {\n if (!this.instance) {\n throw new Error('Cannot wait for TypeScript without a running server.');\n }\n\n return new Promise<boolean>((resolve) => {\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process. In this case we can't wait for the TypeScript check to complete because we don't\n // have access to the Metro server.\n debug('Skipping TypeScript check because Metro is not running (headless).');\n return resolve(false);\n }\n\n const off = metroWatchTypeScriptFiles({\n projectRoot: this.projectRoot,\n server: this.instance!.server,\n metro: this.metro,\n tsconfig: true,\n throttle: true,\n eventTypes: ['change', 'add'],\n callback: async () => {\n // Run once, this prevents the TypeScript project prerequisite from running on every file change.\n off();\n const { TypeScriptProjectPrerequisite } = await import(\n '../../doctor/typescript/TypeScriptProjectPrerequisite'\n );\n\n try {\n const req = new TypeScriptProjectPrerequisite(this.projectRoot);\n await req.bootstrapAsync();\n resolve(true);\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.error(\n chalk.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`\n );\n Log.exception(error);\n resolve(false);\n }\n },\n });\n });\n }\n\n public async startTypeScriptServices() {\n startTypescriptTypeGenerationAsync({\n server: this.instance!.server,\n metro: this.metro,\n projectRoot: this.projectRoot,\n });\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./metro.config.js', './metro.config.json', './rn-cli.config.js'];\n }\n}\n\nexport function getDeepLinkHandler(projectRoot: string): DeepLinkHandler {\n return async ({ runtime }) => {\n if (runtime === 'expo') return;\n const { exp } = getConfig(projectRoot);\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n };\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n { dev, template, bundleUrl }: { dev: boolean; template: string; bundleUrl?: string }\n) {\n // Combine the CSS modules into tags that have hot refresh data attributes.\n const styleString = assets\n .filter((asset) => asset.type === 'css')\n .map(({ metadata, filename, source }) => {\n if (dev) {\n return `<style data-expo-css-hmr=\"${metadata.hmrId}\">` + source + '\\n</style>';\n } else {\n return [\n `<link rel=\"preload\" href=\"/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"/${filename}\">`,\n ].join('');\n }\n })\n .join('');\n\n const jsAssets = assets.filter((asset) => asset.type === 'js');\n\n const scripts = bundleUrl\n ? `<script src=\"${bundleUrl}\" defer></script>`\n : jsAssets\n .map(({ filename }) => {\n return `<script src=\"/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["getDeepLinkHandler","runtimeEnv","debug","require","EXPO_GO_METRO_PORT","DEV_CLIENT_METRO_PORT","MetroBundlerDevServer","BundlerDevServer","metro","name","resolvePortAsync","options","port","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","getRoutesAsync","url","getDevServerUrl","assert","getManifest","getStaticRenderFunctions","projectRoot","environment","fetchData","composeResourcesWithHtml","mode","resources","template","devBundleUrl","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","getStaticRenderFunctionAsync","minify","getStaticContent","path","URL","getStaticResourcesAsync","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","mainModuleName","resolveMainModuleName","getConfig","results","fetch","toString","txt","text","JSON","parse","error","Log","renderStaticErrorAsync","getErrorOverlayHtmlAsync","getStaticPageAsync","pathname","bundleStaticHtml","location","staticHtml","Promise","all","content","watchEnvironmentVariables","instance","Error","envFiles","getFiles","NODE_ENV","map","fileName","join","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","unversioned","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","ContextModuleSourceMapsMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","skipSDKVersionRequirement","useWebSSG","web","output","ServeStaticMiddleware","FaviconMiddleware","req","res","next","endsWith","includes","setHeader","end","staticError","message","HistoryFallbackMiddleware","internal","originalClose","close","bind","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","startTypescriptTypeGenerationAsync","getConfigModuleIds","logEventAsync","status","getDevClientProperties","assets","styleString","filter","asset","type","metadata","filename","source","hmrId","jsAssets","scripts","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/MetroBundlerDevServer.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 { getConfig } from '@expo/config';\nimport { prependMiddleware } from '@expo/dev-server';\nimport * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { getFreePortAsync } from '../../../utils/port';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { getStaticRenderFunctions } from '../getStaticRenderFunctions';\nimport { ContextModuleSourceMapsMiddleware } from '../middleware/ContextModuleSourceMapsMiddleware';\nimport { CreateFileMiddleware } from '../middleware/CreateFileMiddleware';\nimport { FaviconMiddleware } from '../middleware/FaviconMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport {\n createBundleUrlPath,\n resolveMainModuleName,\n shouldEnableAsyncImports,\n} from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { startTypescriptTypeGenerationAsync } from '../type-generation/startTypescriptTypeGeneration';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { getErrorOverlayHtmlAsync } from './metroErrorInterface';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\n\nconst debug = require('debug')('expo:start:server:metro') as typeof console.log;\n\n/** Default port to use for apps running in Expo Go. */\nconst EXPO_GO_METRO_PORT = 8081;\n\n/** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */\nconst DEV_CLIENT_METRO_PORT = 8081;\n\nexport class MetroBundlerDevServer extends BundlerDevServer {\n private metro: import('metro').Server | null = null;\n\n get name(): string {\n return 'metro';\n }\n\n async resolvePortAsync(options: Partial<BundlerStartOptions> = {}): Promise<number> {\n const port =\n // If the manually defined port is busy then an error should be thrown...\n options.port ??\n // Otherwise use the default port based on the runtime target.\n (options.devClient\n ? // Don't check if the port is busy if we're using the dev client since most clients are hardcoded to 8081.\n Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT\n : // Otherwise (running in Expo Go) use a free port that falls back on the classic 8081 port.\n await getFreePortAsync(EXPO_GO_METRO_PORT));\n\n return port;\n }\n\n /** Get routes from Expo Router. */\n async getRoutesAsync() {\n const url = this.getDevServerUrl();\n assert(url, 'Dev server must be started');\n const { getManifest } = await getStaticRenderFunctions(this.projectRoot, url, {\n // Ensure the API Routes are included\n environment: 'node',\n });\n\n return getManifest({ fetchData: true });\n }\n\n async composeResourcesWithHtml({\n mode,\n resources,\n template,\n devBundleUrl,\n }: {\n mode: 'development' | 'production';\n resources: SerialAsset[];\n template: string;\n devBundleUrl?: string;\n }): Promise<string> {\n if (!resources) {\n return '';\n }\n const isDev = mode === 'development';\n return htmlFromSerialAssets(resources, {\n dev: isDev,\n template,\n bundleUrl: isDev ? devBundleUrl : undefined,\n });\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }) {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent } = await getStaticRenderFunctions(this.projectRoot, url, {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n });\n return async (path: string) => {\n return await getStaticContent(new URL(path, url));\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n }: {\n mode: string;\n minify?: boolean;\n }): Promise<SerialAsset[]> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n });\n\n const bundleUrl = new URL(devBundleUrlPathname, this.getDevServerUrl()!);\n\n // Fetch the generated HTML from our custom Metro serializer\n const results = await fetch(bundleUrl.toString());\n\n const txt = await results.text();\n\n let data: any;\n try {\n data = JSON.parse(txt);\n } catch (error: any) {\n Log.error(\n 'Failed to generate resources with Metro, the Metro config may not be using the correct serializer. Ensure the metro.config.js is extending the expo/metro-config and is not overriding the serializer.'\n );\n debug(txt);\n throw error;\n }\n\n // NOTE: This could potentially need more validation in the future.\n if (Array.isArray(data)) {\n return data;\n }\n\n if (data != null && (data.errors || data.type?.match(/.*Error$/))) {\n // {\n // type: 'InternalError',\n // errors: [],\n // message: 'Metro has encountered an error: While trying to resolve module `stylis` from file `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js`, the package `/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs`. Indeed, none of these files exist:\\n' +\n // '\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css)\\n' +\n // ' * /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/stylis/dist/stylis.mjs/index(.web.ts|.ts|.web.tsx|.tsx|.web.js|.js|.web.jsx|.jsx|.web.json|.json|.web.cjs|.cjs|.web.scss|.scss|.web.sass|.sass|.web.css|.css): /Users/evanbacon/Documents/GitHub/lab/emotion-error-test/node_modules/metro/src/node-haste/DependencyGraph.js (289:17)\\n' +\n // '\\n' +\n // '\\x1B[0m \\x1B[90m 287 |\\x1B[39m }\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 288 |\\x1B[39m \\x1B[36mif\\x1B[39m (error \\x1B[36minstanceof\\x1B[39m \\x1B[33mInvalidPackageError\\x1B[39m) {\\x1B[0m\\n' +\n // '\\x1B[0m\\x1B[31m\\x1B[1m>\\x1B[22m\\x1B[39m\\x1B[90m 289 |\\x1B[39m \\x1B[36mthrow\\x1B[39m \\x1B[36mnew\\x1B[39m \\x1B[33mPackageResolutionError\\x1B[39m({\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m |\\x1B[39m \\x1B[31m\\x1B[1m^\\x1B[22m\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 290 |\\x1B[39m packageError\\x1B[33m:\\x1B[39m error\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 291 |\\x1B[39m originModulePath\\x1B[33m:\\x1B[39m \\x1B[36mfrom\\x1B[39m\\x1B[33m,\\x1B[39m\\x1B[0m\\n' +\n // '\\x1B[0m \\x1B[90m 292 |\\x1B[39m targetModuleName\\x1B[33m:\\x1B[39m to\\x1B[33m,\\x1B[39m\\x1B[0m'\n // }\n // The Metro logger already showed this error.\n throw new Error(data.message);\n }\n\n throw new Error(\n 'Invalid resources returned from the Metro serializer. Expected array, found: ' + data\n );\n }\n\n private async renderStaticErrorAsync(error: Error) {\n return getErrorOverlayHtmlAsync({\n error,\n projectRoot: this.projectRoot,\n });\n }\n\n async getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, getConfig(this.projectRoot), 'web'),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n });\n\n const bundleStaticHtml = async (): Promise<string> => {\n const { getStaticContent } = await getStaticRenderFunctions(\n this.projectRoot,\n this.getDevServerUrl()!,\n {\n minify: false,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [resources, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ mode, minify }),\n bundleStaticHtml(),\n ]);\n const content = await this.composeResourcesWithHtml({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n });\n return {\n content,\n resources,\n };\n }\n\n async watchEnvironmentVariables() {\n if (!this.instance) {\n throw new Error(\n 'Cannot observe environment variable changes without a running Metro instance.'\n );\n }\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process.\n debug('Skipping Environment Variable observation because Metro is not running (headless).');\n return;\n }\n\n const envFiles = runtimeEnv\n .getFiles(process.env.NODE_ENV)\n .map((fileName) => path.join(this.projectRoot, fileName));\n\n observeFileChanges(\n {\n metro: this.metro,\n server: this.instance.server,\n },\n envFiles,\n () => {\n debug('Reloading environment variables...');\n // Force reload the environment variables.\n runtimeEnv.load(this.projectRoot, { force: true });\n }\n );\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n options.port = await this.resolvePortAsync(options);\n this.urlCreator = this.getUrlCreator(options);\n\n const parsedOptions = {\n port: options.port,\n maxWorkers: options.maxWorkers,\n resetCache: options.resetDevServer,\n\n // Use the unversioned metro config.\n // TODO: Deprecate this property when expo-cli goes away.\n unversioned: false,\n };\n\n // Required for symbolication:\n process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;\n\n const { metro, server, middleware, messageSocket } = await instantiateMetroAsync(\n this,\n parsedOptions\n );\n\n const manifestMiddleware = await this.getManifestMiddlewareAsync(options);\n\n // Important that we noop source maps for context modules as soon as possible.\n prependMiddleware(middleware, new ContextModuleSourceMapsMiddleware().getHandler());\n\n // We need the manifest handler to be the first middleware to run so our\n // routes take precedence over static files. For example, the manifest is\n // served from '/' and if the user has an index.html file in their project\n // then the manifest handler will never run, the static middleware will run\n // and serve index.html instead of the manifest.\n // https://github.com/expo/expo/issues/13114\n prependMiddleware(middleware, manifestMiddleware.getHandler());\n\n middleware.use(\n new InterstitialPageMiddleware(this.projectRoot, {\n // TODO: Prevent this from becoming stale.\n scheme: options.location.scheme ?? null,\n }).getHandler()\n );\n middleware.use(new ReactDevToolsPageMiddleware(this.projectRoot).getHandler());\n\n const deepLinkMiddleware = new RuntimeRedirectMiddleware(this.projectRoot, {\n onDeepLink: getDeepLinkHandler(this.projectRoot),\n getLocation: ({ runtime }) => {\n if (runtime === 'custom') {\n return this.urlCreator?.constructDevClientUrl();\n } else {\n return this.urlCreator?.constructUrl({\n scheme: 'exp',\n });\n }\n },\n });\n middleware.use(deepLinkMiddleware.getHandler());\n\n middleware.use(new CreateFileMiddleware(this.projectRoot).getHandler());\n\n // Append support for redirecting unhandled requests to the index.html page on web.\n if (this.isTargetingWeb()) {\n const { exp } = getConfig(this.projectRoot, { skipSDKVersionRequirement: true });\n const useWebSSG = exp.web?.output === 'static';\n\n // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.\n middleware.use(new ServeStaticMiddleware(this.projectRoot).getHandler());\n\n // This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.\n middleware.use(new FaviconMiddleware(this.projectRoot).getHandler());\n\n if (useWebSSG) {\n middleware.use(async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!req?.url) {\n return next();\n }\n\n // TODO: Formal manifest for allowed paths\n if (req.url.endsWith('.ico')) {\n return next();\n }\n if (req.url.includes('serializer.output=static')) {\n return next();\n }\n\n try {\n const { content } = await this.getStaticPageAsync(req.url, {\n mode: options.mode ?? 'development',\n });\n\n res.setHeader('Content-Type', 'text/html');\n res.end(content);\n return;\n } catch (error: any) {\n res.setHeader('Content-Type', 'text/html');\n try {\n res.end(await this.renderStaticErrorAsync(error));\n } catch (staticError: any) {\n // Fallback error for when Expo Router is misconfigured in the project.\n res.end(\n '<span><h3>Internal Error:</h3><b>Project is not setup correctly for static rendering (check terminal for more info):</b><br/>' +\n error.message +\n '<br/><br/>' +\n staticError.message +\n '</span>'\n );\n }\n }\n });\n }\n\n // This MUST run last since it's the fallback.\n if (!useWebSSG) {\n middleware.use(\n new HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler()\n );\n }\n }\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n this.metro = null;\n callback?.(err);\n });\n };\n\n this.metro = metro;\n return {\n server,\n location: {\n // The port is the main thing we want to send back.\n port: options.port,\n // localhost isn't always correct.\n host: 'localhost',\n // http is the only supported protocol on native.\n url: `http://localhost:${options.port}`,\n protocol: 'http',\n },\n middleware,\n messageSocket,\n };\n }\n\n public async waitForTypeScriptAsync(): Promise<boolean> {\n if (!this.instance) {\n throw new Error('Cannot wait for TypeScript without a running server.');\n }\n\n return new Promise<boolean>((resolve) => {\n if (!this.metro) {\n // This can happen when the run command is used and the server is already running in another\n // process. In this case we can't wait for the TypeScript check to complete because we don't\n // have access to the Metro server.\n debug('Skipping TypeScript check because Metro is not running (headless).');\n return resolve(false);\n }\n\n const off = metroWatchTypeScriptFiles({\n projectRoot: this.projectRoot,\n server: this.instance!.server,\n metro: this.metro,\n tsconfig: true,\n throttle: true,\n eventTypes: ['change', 'add'],\n callback: async () => {\n // Run once, this prevents the TypeScript project prerequisite from running on every file change.\n off();\n const { TypeScriptProjectPrerequisite } = await import(\n '../../doctor/typescript/TypeScriptProjectPrerequisite'\n );\n\n try {\n const req = new TypeScriptProjectPrerequisite(this.projectRoot);\n await req.bootstrapAsync();\n resolve(true);\n } catch (error: any) {\n // Ensure the process doesn't fail if the TypeScript check fails.\n // This could happen during the install.\n Log.log();\n Log.error(\n chalk.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`\n );\n Log.exception(error);\n resolve(false);\n }\n },\n });\n });\n }\n\n public async startTypeScriptServices() {\n startTypescriptTypeGenerationAsync({\n server: this.instance!.server,\n metro: this.metro,\n projectRoot: this.projectRoot,\n });\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./metro.config.js', './metro.config.json', './rn-cli.config.js'];\n }\n}\n\nexport function getDeepLinkHandler(projectRoot: string): DeepLinkHandler {\n return async ({ runtime }) => {\n if (runtime === 'expo') return;\n const { exp } = getConfig(projectRoot);\n await logEventAsync('dev client start command', {\n status: 'started',\n ...getDevClientProperties(projectRoot, exp),\n });\n };\n}\n\nfunction htmlFromSerialAssets(\n assets: SerialAsset[],\n { dev, template, bundleUrl }: { dev: boolean; template: string; bundleUrl?: string }\n) {\n // Combine the CSS modules into tags that have hot refresh data attributes.\n const styleString = assets\n .filter((asset) => asset.type === 'css')\n .map(({ metadata, filename, source }) => {\n if (dev) {\n return `<style data-expo-css-hmr=\"${metadata.hmrId}\">` + source + '\\n</style>';\n } else {\n return [\n `<link rel=\"preload\" href=\"/${filename}\" as=\"style\">`,\n `<link rel=\"stylesheet\" href=\"/${filename}\">`,\n ].join('');\n }\n })\n .join('');\n\n const jsAssets = assets.filter((asset) => asset.type === 'js');\n\n const scripts = bundleUrl\n ? `<script src=\"${bundleUrl}\" defer></script>`\n : jsAssets\n .map(({ filename }) => {\n return `<script src=\"/${filename}\" defer></script>`;\n })\n .join('');\n\n return template\n .replace('</head>', `${styleString}</head>`)\n .replace('</body>', `${scripts}\\n</body>`);\n}\n"],"names":["getDeepLinkHandler","runtimeEnv","debug","require","EXPO_GO_METRO_PORT","DEV_CLIENT_METRO_PORT","MetroBundlerDevServer","BundlerDevServer","metro","name","resolvePortAsync","options","port","devClient","Number","process","env","RCT_METRO_PORT","getFreePortAsync","getRoutesAsync","url","getDevServerUrl","assert","getManifest","getStaticRenderFunctions","projectRoot","environment","fetchData","composeResourcesWithHtml","mode","resources","template","devBundleUrl","isDev","htmlFromSerialAssets","dev","bundleUrl","undefined","getStaticRenderFunctionAsync","minify","getStaticContent","path","URL","getStaticResourcesAsync","data","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","mainModuleName","resolveMainModuleName","getConfig","lazy","shouldEnableAsyncImports","results","fetch","toString","txt","text","JSON","parse","error","Log","Array","isArray","errors","type","match","Error","message","renderStaticErrorAsync","getErrorOverlayHtmlAsync","getStaticPageAsync","pathname","bundleStaticHtml","location","staticHtml","Promise","all","content","watchEnvironmentVariables","instance","envFiles","getFiles","NODE_ENV","map","fileName","join","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","unversioned","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","ContextModuleSourceMapsMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","skipSDKVersionRequirement","useWebSSG","web","output","ServeStaticMiddleware","FaviconMiddleware","req","res","next","endsWith","includes","setHeader","end","staticError","HistoryFallbackMiddleware","internal","originalClose","close","bind","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","startTypescriptTypeGenerationAsync","getConfigModuleIds","logEventAsync","status","getDevClientProperties","assets","styleString","filter","asset","metadata","filename","source","hmrId","jsAssets","scripts","replace"],"mappings":"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"}
|
|
@@ -69,8 +69,16 @@ class MetroTerminalReporter extends _terminalReporter.TerminalReporter {
|
|
|
69
69
|
}
|
|
70
70
|
_logBundlingError(error) {
|
|
71
71
|
const moduleResolutionError = formatUsingNodeStandardLibraryError(this.projectRoot, error);
|
|
72
|
+
const cause = error.cause;
|
|
72
73
|
if (moduleResolutionError) {
|
|
73
|
-
|
|
74
|
+
let message = maybeAppendCodeFrame(moduleResolutionError, error.message);
|
|
75
|
+
if (cause == null ? void 0 : cause._expoImportStack) {
|
|
76
|
+
message += `\n\n${cause == null ? void 0 : cause._expoImportStack}`;
|
|
77
|
+
}
|
|
78
|
+
return this.terminal.log(message);
|
|
79
|
+
}
|
|
80
|
+
if (cause == null ? void 0 : cause._expoImportStack) {
|
|
81
|
+
error.message += `\n\n${cause._expoImportStack}`;
|
|
74
82
|
}
|
|
75
83
|
return super._logBundlingError(error);
|
|
76
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/MetroTerminalReporter.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { Terminal } from 'metro-core';\nimport path from 'path';\n\nimport { learnMore } from '../../../utils/link';\nimport { logWarning, TerminalReporter } from './TerminalReporter';\nimport { BuildPhase, BundleDetails, BundleProgress, SnippetError } from './TerminalReporter.types';\nimport { NODE_STDLIB_MODULES } from './externals';\n\nconst MAX_PROGRESS_BAR_CHAR_WIDTH = 16;\nconst DARK_BLOCK_CHAR = '\\u2593';\nconst LIGHT_BLOCK_CHAR = '\\u2591';\n/**\n * Extends the default Metro logger and adds some additional features.\n * Also removes the giant Metro logo from the output.\n */\nexport class MetroTerminalReporter extends TerminalReporter {\n constructor(public projectRoot: string, terminal: Terminal) {\n super(terminal);\n }\n\n // Used for testing\n _getElapsedTime(startTime: number): number {\n return Date.now() - startTime;\n }\n /**\n * Extends the bundle progress to include the current platform that we're bundling.\n *\n * @returns `iOS path/to/bundle.js ▓▓▓▓▓░░░░░░░░░░░ 36.6% (4790/7922)`\n */\n _getBundleStatusMessage(progress: BundleProgress, phase: BuildPhase): string {\n const platform = getPlatformTagForBuildDetails(progress.bundleDetails);\n const inProgress = phase === 'in_progress';\n\n if (!inProgress) {\n const status = phase === 'done' ? `Bundling complete ` : `Bundling failed `;\n const color = phase === 'done' ? chalk.green : chalk.red;\n\n const startTime = this._bundleTimers.get(progress.bundleDetails.buildID!);\n const time = startTime != null ? chalk.dim(this._getElapsedTime(startTime) + 'ms') : '';\n // iOS Bundling complete 150ms\n return color(platform + status) + time;\n }\n\n const localPath = path.relative('.', progress.bundleDetails.entryFile);\n const filledBar = Math.floor(progress.ratio * MAX_PROGRESS_BAR_CHAR_WIDTH);\n\n const _progress = inProgress\n ? chalk.green.bgGreen(DARK_BLOCK_CHAR.repeat(filledBar)) +\n chalk.bgWhite.white(LIGHT_BLOCK_CHAR.repeat(MAX_PROGRESS_BAR_CHAR_WIDTH - filledBar)) +\n chalk.bold(` ${(100 * progress.ratio).toFixed(1).padStart(4)}% `) +\n chalk.dim(\n `(${progress.transformedFileCount\n .toString()\n .padStart(progress.totalFileCount.toString().length)}/${progress.totalFileCount})`\n )\n : '';\n\n return (\n platform +\n chalk.reset.dim(`${path.dirname(localPath)}/`) +\n chalk.bold(path.basename(localPath)) +\n ' ' +\n _progress\n );\n }\n\n _logInitializing(port: number, hasReducedPerformance: boolean): void {\n // Don't print a giant logo...\n this.terminal.log('Starting Metro Bundler');\n }\n\n shouldFilterClientLog(event: {\n type: 'client_log';\n level: 'trace' | 'info' | 'warn' | 'log' | 'group' | 'groupCollapsed' | 'groupEnd' | 'debug';\n data: unknown[];\n }): boolean {\n return isAppRegistryStartupMessage(event.data);\n }\n\n /** Print the cache clear message. */\n transformCacheReset(): void {\n logWarning(\n this.terminal,\n chalk`Bundler cache is empty, rebuilding {dim (this may take a minute)}`\n );\n }\n\n /** One of the first logs that will be printed */\n dependencyGraphLoading(hasReducedPerformance: boolean): void {\n // this.terminal.log('Dependency graph is loading...');\n if (hasReducedPerformance) {\n // Extends https://github.com/facebook/metro/blob/347b1d7ed87995d7951aaa9fd597c04b06013dac/packages/metro/src/lib/TerminalReporter.js#L283-L290\n this.terminal.log(\n chalk.red(\n [\n 'Metro is operating with reduced performance.',\n 'Please fix the problem above and restart Metro.',\n ].join('\\n')\n )\n );\n }\n }\n\n _logBundlingError(error: SnippetError): void {\n const moduleResolutionError = formatUsingNodeStandardLibraryError(this.projectRoot, error);\n if (moduleResolutionError) {\n return this.terminal.log(maybeAppendCodeFrame(moduleResolutionError, error.message));\n }\n return super._logBundlingError(error);\n }\n}\n\n/**\n * Formats an error where the user is attempting to import a module from the Node.js standard library.\n * Exposed for testing.\n *\n * @param error\n * @returns error message or null if not a module resolution error\n */\nexport function formatUsingNodeStandardLibraryError(\n projectRoot: string,\n error: SnippetError\n): string | null {\n if (!error.message) {\n return null;\n }\n const { targetModuleName, originModulePath } = error;\n if (!targetModuleName || !originModulePath) {\n return null;\n }\n const relativePath = path.relative(projectRoot, originModulePath);\n\n const DOCS_PAGE_URL =\n 'https://docs.expo.dev/workflow/using-libraries/#using-third-party-libraries';\n\n if (isNodeStdLibraryModule(targetModuleName)) {\n if (originModulePath.includes('node_modules')) {\n return [\n `The package at \"${chalk.bold(\n relativePath\n )}\" attempted to import the Node standard library module \"${chalk.bold(\n targetModuleName\n )}\".`,\n `It failed because the native React runtime does not include the Node standard library.`,\n learnMore(DOCS_PAGE_URL),\n ].join('\\n');\n } else {\n return [\n `You attempted attempted to import the Node standard library module \"${chalk.bold(\n targetModuleName\n )}\" from \"${chalk.bold(relativePath)}\".`,\n `It failed because the native React runtime does not include the Node standard library.`,\n learnMore(DOCS_PAGE_URL),\n ].join('\\n');\n }\n }\n return `Unable to resolve \"${targetModuleName}\" from \"${relativePath}\"`;\n}\n\nexport function isNodeStdLibraryModule(moduleName: string): boolean {\n return /^node:/.test(moduleName) || NODE_STDLIB_MODULES.includes(moduleName);\n}\n\n/** If the code frame can be found then append it to the existing message. */\nfunction maybeAppendCodeFrame(message: string, rawMessage: string): string {\n const codeFrame = stripMetroInfo(rawMessage);\n if (codeFrame) {\n message += '\\n' + codeFrame;\n }\n return message;\n}\n\n/**\n * Remove the Metro cache clearing steps if they exist.\n * In future versions we won't need this.\n * Returns the remaining code frame logs.\n */\nexport function stripMetroInfo(errorMessage: string): string | null {\n // Newer versions of Metro don't include the list.\n if (!errorMessage.includes('4. Remove the cache')) {\n return null;\n }\n const lines = errorMessage.split('\\n');\n const index = lines.findIndex((line) => line.includes('4. Remove the cache'));\n if (index === -1) {\n return null;\n }\n return lines.slice(index + 1).join('\\n');\n}\n\n/** @returns if the message matches the initial startup log */\nfunction isAppRegistryStartupMessage(body: any[]): boolean {\n return (\n body.length === 1 &&\n (/^Running application \"main\" with appParams:/.test(body[0]) ||\n /^Running \"main\" with \\{/.test(body[0]))\n );\n}\n\n/** @returns platform specific tag for a `BundleDetails` object */\nfunction getPlatformTagForBuildDetails(bundleDetails?: BundleDetails | null): string {\n const platform = bundleDetails?.platform ?? null;\n if (platform) {\n const formatted = { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform;\n return `${chalk.bold(formatted)} `;\n }\n\n return '';\n}\n"],"names":["formatUsingNodeStandardLibraryError","isNodeStdLibraryModule","stripMetroInfo","MAX_PROGRESS_BAR_CHAR_WIDTH","DARK_BLOCK_CHAR","LIGHT_BLOCK_CHAR","MetroTerminalReporter","TerminalReporter","constructor","projectRoot","terminal","_getElapsedTime","startTime","Date","now","_getBundleStatusMessage","progress","phase","platform","getPlatformTagForBuildDetails","bundleDetails","inProgress","status","color","chalk","green","red","_bundleTimers","get","buildID","time","dim","localPath","path","relative","entryFile","filledBar","Math","floor","ratio","_progress","bgGreen","repeat","bgWhite","white","bold","toFixed","padStart","transformedFileCount","toString","totalFileCount","length","reset","dirname","basename","_logInitializing","port","hasReducedPerformance","log","shouldFilterClientLog","event","isAppRegistryStartupMessage","data","transformCacheReset","logWarning","dependencyGraphLoading","join","_logBundlingError","error","moduleResolutionError","maybeAppendCodeFrame","message","targetModuleName","originModulePath","relativePath","DOCS_PAGE_URL","includes","learnMore","moduleName","test","NODE_STDLIB_MODULES","rawMessage","codeFrame","errorMessage","lines","split","index","findIndex","line","slice","body","formatted","ios","android","web"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/MetroTerminalReporter.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { Terminal } from 'metro-core';\nimport path from 'path';\n\nimport { learnMore } from '../../../utils/link';\nimport { logWarning, TerminalReporter } from './TerminalReporter';\nimport { BuildPhase, BundleDetails, BundleProgress, SnippetError } from './TerminalReporter.types';\nimport { NODE_STDLIB_MODULES } from './externals';\n\nconst MAX_PROGRESS_BAR_CHAR_WIDTH = 16;\nconst DARK_BLOCK_CHAR = '\\u2593';\nconst LIGHT_BLOCK_CHAR = '\\u2591';\n/**\n * Extends the default Metro logger and adds some additional features.\n * Also removes the giant Metro logo from the output.\n */\nexport class MetroTerminalReporter extends TerminalReporter {\n constructor(public projectRoot: string, terminal: Terminal) {\n super(terminal);\n }\n\n // Used for testing\n _getElapsedTime(startTime: number): number {\n return Date.now() - startTime;\n }\n /**\n * Extends the bundle progress to include the current platform that we're bundling.\n *\n * @returns `iOS path/to/bundle.js ▓▓▓▓▓░░░░░░░░░░░ 36.6% (4790/7922)`\n */\n _getBundleStatusMessage(progress: BundleProgress, phase: BuildPhase): string {\n const platform = getPlatformTagForBuildDetails(progress.bundleDetails);\n const inProgress = phase === 'in_progress';\n\n if (!inProgress) {\n const status = phase === 'done' ? `Bundling complete ` : `Bundling failed `;\n const color = phase === 'done' ? chalk.green : chalk.red;\n\n const startTime = this._bundleTimers.get(progress.bundleDetails.buildID!);\n const time = startTime != null ? chalk.dim(this._getElapsedTime(startTime) + 'ms') : '';\n // iOS Bundling complete 150ms\n return color(platform + status) + time;\n }\n\n const localPath = path.relative('.', progress.bundleDetails.entryFile);\n const filledBar = Math.floor(progress.ratio * MAX_PROGRESS_BAR_CHAR_WIDTH);\n\n const _progress = inProgress\n ? chalk.green.bgGreen(DARK_BLOCK_CHAR.repeat(filledBar)) +\n chalk.bgWhite.white(LIGHT_BLOCK_CHAR.repeat(MAX_PROGRESS_BAR_CHAR_WIDTH - filledBar)) +\n chalk.bold(` ${(100 * progress.ratio).toFixed(1).padStart(4)}% `) +\n chalk.dim(\n `(${progress.transformedFileCount\n .toString()\n .padStart(progress.totalFileCount.toString().length)}/${progress.totalFileCount})`\n )\n : '';\n\n return (\n platform +\n chalk.reset.dim(`${path.dirname(localPath)}/`) +\n chalk.bold(path.basename(localPath)) +\n ' ' +\n _progress\n );\n }\n\n _logInitializing(port: number, hasReducedPerformance: boolean): void {\n // Don't print a giant logo...\n this.terminal.log('Starting Metro Bundler');\n }\n\n shouldFilterClientLog(event: {\n type: 'client_log';\n level: 'trace' | 'info' | 'warn' | 'log' | 'group' | 'groupCollapsed' | 'groupEnd' | 'debug';\n data: unknown[];\n }): boolean {\n return isAppRegistryStartupMessage(event.data);\n }\n\n /** Print the cache clear message. */\n transformCacheReset(): void {\n logWarning(\n this.terminal,\n chalk`Bundler cache is empty, rebuilding {dim (this may take a minute)}`\n );\n }\n\n /** One of the first logs that will be printed */\n dependencyGraphLoading(hasReducedPerformance: boolean): void {\n // this.terminal.log('Dependency graph is loading...');\n if (hasReducedPerformance) {\n // Extends https://github.com/facebook/metro/blob/347b1d7ed87995d7951aaa9fd597c04b06013dac/packages/metro/src/lib/TerminalReporter.js#L283-L290\n this.terminal.log(\n chalk.red(\n [\n 'Metro is operating with reduced performance.',\n 'Please fix the problem above and restart Metro.',\n ].join('\\n')\n )\n );\n }\n }\n\n _logBundlingError(error: SnippetError): void {\n const moduleResolutionError = formatUsingNodeStandardLibraryError(this.projectRoot, error);\n const cause = error.cause as undefined | { _expoImportStack?: string };\n if (moduleResolutionError) {\n let message = maybeAppendCodeFrame(moduleResolutionError, error.message);\n if (cause?._expoImportStack) {\n message += `\\n\\n${cause?._expoImportStack}`;\n }\n return this.terminal.log(message);\n }\n if (cause?._expoImportStack) {\n error.message += `\\n\\n${cause._expoImportStack}`;\n }\n return super._logBundlingError(error);\n }\n}\n\n/**\n * Formats an error where the user is attempting to import a module from the Node.js standard library.\n * Exposed for testing.\n *\n * @param error\n * @returns error message or null if not a module resolution error\n */\nexport function formatUsingNodeStandardLibraryError(\n projectRoot: string,\n error: SnippetError\n): string | null {\n if (!error.message) {\n return null;\n }\n const { targetModuleName, originModulePath } = error;\n if (!targetModuleName || !originModulePath) {\n return null;\n }\n const relativePath = path.relative(projectRoot, originModulePath);\n\n const DOCS_PAGE_URL =\n 'https://docs.expo.dev/workflow/using-libraries/#using-third-party-libraries';\n\n if (isNodeStdLibraryModule(targetModuleName)) {\n if (originModulePath.includes('node_modules')) {\n return [\n `The package at \"${chalk.bold(\n relativePath\n )}\" attempted to import the Node standard library module \"${chalk.bold(\n targetModuleName\n )}\".`,\n `It failed because the native React runtime does not include the Node standard library.`,\n learnMore(DOCS_PAGE_URL),\n ].join('\\n');\n } else {\n return [\n `You attempted attempted to import the Node standard library module \"${chalk.bold(\n targetModuleName\n )}\" from \"${chalk.bold(relativePath)}\".`,\n `It failed because the native React runtime does not include the Node standard library.`,\n learnMore(DOCS_PAGE_URL),\n ].join('\\n');\n }\n }\n return `Unable to resolve \"${targetModuleName}\" from \"${relativePath}\"`;\n}\n\nexport function isNodeStdLibraryModule(moduleName: string): boolean {\n return /^node:/.test(moduleName) || NODE_STDLIB_MODULES.includes(moduleName);\n}\n\n/** If the code frame can be found then append it to the existing message. */\nfunction maybeAppendCodeFrame(message: string, rawMessage: string): string {\n const codeFrame = stripMetroInfo(rawMessage);\n if (codeFrame) {\n message += '\\n' + codeFrame;\n }\n return message;\n}\n\n/**\n * Remove the Metro cache clearing steps if they exist.\n * In future versions we won't need this.\n * Returns the remaining code frame logs.\n */\nexport function stripMetroInfo(errorMessage: string): string | null {\n // Newer versions of Metro don't include the list.\n if (!errorMessage.includes('4. Remove the cache')) {\n return null;\n }\n const lines = errorMessage.split('\\n');\n const index = lines.findIndex((line) => line.includes('4. Remove the cache'));\n if (index === -1) {\n return null;\n }\n return lines.slice(index + 1).join('\\n');\n}\n\n/** @returns if the message matches the initial startup log */\nfunction isAppRegistryStartupMessage(body: any[]): boolean {\n return (\n body.length === 1 &&\n (/^Running application \"main\" with appParams:/.test(body[0]) ||\n /^Running \"main\" with \\{/.test(body[0]))\n );\n}\n\n/** @returns platform specific tag for a `BundleDetails` object */\nfunction getPlatformTagForBuildDetails(bundleDetails?: BundleDetails | null): string {\n const platform = bundleDetails?.platform ?? null;\n if (platform) {\n const formatted = { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform;\n return `${chalk.bold(formatted)} `;\n }\n\n return '';\n}\n"],"names":["formatUsingNodeStandardLibraryError","isNodeStdLibraryModule","stripMetroInfo","MAX_PROGRESS_BAR_CHAR_WIDTH","DARK_BLOCK_CHAR","LIGHT_BLOCK_CHAR","MetroTerminalReporter","TerminalReporter","constructor","projectRoot","terminal","_getElapsedTime","startTime","Date","now","_getBundleStatusMessage","progress","phase","platform","getPlatformTagForBuildDetails","bundleDetails","inProgress","status","color","chalk","green","red","_bundleTimers","get","buildID","time","dim","localPath","path","relative","entryFile","filledBar","Math","floor","ratio","_progress","bgGreen","repeat","bgWhite","white","bold","toFixed","padStart","transformedFileCount","toString","totalFileCount","length","reset","dirname","basename","_logInitializing","port","hasReducedPerformance","log","shouldFilterClientLog","event","isAppRegistryStartupMessage","data","transformCacheReset","logWarning","dependencyGraphLoading","join","_logBundlingError","error","moduleResolutionError","cause","message","maybeAppendCodeFrame","_expoImportStack","targetModuleName","originModulePath","relativePath","DOCS_PAGE_URL","includes","learnMore","moduleName","test","NODE_STDLIB_MODULES","rawMessage","codeFrame","errorMessage","lines","split","index","findIndex","line","slice","body","formatted","ios","android","web"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ function _interopRequireDefault(obj) {
|
|
|
9
9
|
default: obj
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
|
-
const debug = require("debug")("expo:start:server:metro:
|
|
12
|
+
const debug = require("debug")("expo:start:server:metro:metroWatchTypeScriptFiles");
|
|
13
13
|
function metroWatchTypeScriptFiles({ metro , server , projectRoot , callback , tsconfig =false , throttle =false , eventTypes =[
|
|
14
14
|
"add",
|
|
15
15
|
"change",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/metroWatchTypeScriptFiles.ts"],"sourcesContent":["import path from 'path';\n\nimport type { ServerLike } from '../BundlerDevServer';\n\nconst debug = require('debug')('expo:start:server:metro:
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/metroWatchTypeScriptFiles.ts"],"sourcesContent":["import path from 'path';\n\nimport type { ServerLike } from '../BundlerDevServer';\n\nconst debug = require('debug')(\n 'expo:start:server:metro:metroWatchTypeScriptFiles'\n) as typeof console.log;\n\nexport interface MetroWatchTypeScriptFilesOptions {\n projectRoot: string;\n metro: import('metro').Server;\n server: ServerLike;\n /* Include tsconfig.json in the watcher */\n tsconfig?: boolean;\n callback: (event: WatchEvent) => void;\n /* Array of eventTypes to watch. Defaults to all events */\n eventTypes?: string[];\n /* Throlle the callback. When true and a group of events are recieved, callback it will only be called with the\n * first event */\n throttle?: boolean;\n}\n\ninterface WatchEvent {\n filePath: string;\n metadata?: {\n type: 'f' | 'd' | 'l'; // Regular file / Directory / Symlink\n } | null;\n type: string;\n}\n\n/**\n * Use the native file watcher / Metro ruleset to detect if a\n * TypeScript file is added to the project during development.\n */\nexport function metroWatchTypeScriptFiles({\n metro,\n server,\n projectRoot,\n callback,\n tsconfig = false,\n throttle = false,\n eventTypes = ['add', 'change', 'delete'],\n}: MetroWatchTypeScriptFilesOptions): () => void {\n const watcher = metro.getBundler().getBundler().getWatcher();\n\n const tsconfigPath = path.join(projectRoot, 'tsconfig.json');\n\n const listener = ({ eventsQueue }: { eventsQueue: WatchEvent[] }) => {\n for (const event of eventsQueue) {\n if (\n eventTypes.includes(event.type) &&\n event.metadata?.type !== 'd' &&\n // We need to ignore node_modules because Metro will add all of the files in node_modules to the watcher.\n !/node_modules/.test(event.filePath) &&\n // Ignore declaration files\n !/\\.d\\.ts$/.test(event.filePath)\n ) {\n const { filePath } = event;\n // Is TypeScript?\n if (\n // If the user adds a TypeScript file to the observable files in their project.\n /\\.tsx?$/.test(filePath) ||\n // Or if the user adds a tsconfig.json file to the project root.\n (tsconfig && filePath === tsconfigPath)\n ) {\n debug('Detected TypeScript file changed in the project: ', filePath);\n callback(event);\n\n if (throttle) {\n return;\n }\n }\n }\n }\n };\n\n debug('Waiting for TypeScript files to be added to the project...');\n watcher.addListener('change', listener);\n watcher.addListener('add', listener);\n\n const off = () => {\n watcher.removeListener('change', listener);\n watcher.removeListener('add', listener);\n };\n\n server.addListener?.('close', off);\n return off;\n}\n"],"names":["metroWatchTypeScriptFiles","debug","require","metro","server","projectRoot","callback","tsconfig","throttle","eventTypes","watcher","getBundler","getWatcher","tsconfigPath","path","join","listener","eventsQueue","event","includes","type","metadata","test","filePath","addListener","off","removeListener"],"mappings":"AAAA;;;;QAkCgBA,yBAAyB,GAAzBA,yBAAyB;AAlCxB,IAAA,KAAM,kCAAN,MAAM,EAAA;;;;;;AAIvB,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAC5B,mDAAmD,CACpD,AAAsB,AAAC;AA4BjB,SAASF,yBAAyB,CAAC,EACxCG,KAAK,CAAA,EACLC,MAAM,CAAA,EACNC,WAAW,CAAA,EACXC,QAAQ,CAAA,EACRC,QAAQ,EAAG,KAAK,CAAA,EAChBC,QAAQ,EAAG,KAAK,CAAA,EAChBC,UAAU,EAAG;IAAC,KAAK;IAAE,QAAQ;IAAE,QAAQ;CAAC,CAAA,EACP,EAAc;IAC/C,MAAMC,OAAO,GAAGP,KAAK,CAACQ,UAAU,EAAE,CAACA,UAAU,EAAE,CAACC,UAAU,EAAE,AAAC;IAE7D,MAAMC,YAAY,GAAGC,KAAI,QAAA,CAACC,IAAI,CAACV,WAAW,EAAE,eAAe,CAAC,AAAC;IAE7D,MAAMW,QAAQ,GAAG,CAAC,EAAEC,WAAW,CAAA,EAAiC,GAAK;QACnE,KAAK,MAAMC,KAAK,IAAID,WAAW,CAAE;gBAG7BC,GAAc;YAFhB,IACET,UAAU,CAACU,QAAQ,CAACD,KAAK,CAACE,IAAI,CAAC,IAC/BF,CAAAA,CAAAA,GAAc,GAAdA,KAAK,CAACG,QAAQ,SAAM,GAApBH,KAAAA,CAAoB,GAApBA,GAAc,CAAEE,IAAI,CAAA,KAAK,GAAG,IAC5B,yGAAyG;YACzG,CAAC,eAAeE,IAAI,CAACJ,KAAK,CAACK,QAAQ,CAAC,IACpC,2BAA2B;YAC3B,CAAC,WAAWD,IAAI,CAACJ,KAAK,CAACK,QAAQ,CAAC,EAChC;gBACA,MAAM,EAAEA,QAAQ,CAAA,EAAE,GAAGL,KAAK,AAAC;gBAC3B,iBAAiB;gBACjB,IACE,+EAA+E;gBAC/E,UAAUI,IAAI,CAACC,QAAQ,CAAC,IACxB,gEAAgE;gBAChE,CAAChB,QAAQ,IAAIgB,QAAQ,KAAKV,YAAY,CAAC,EACvC;oBACAZ,KAAK,CAAC,mDAAmD,EAAEsB,QAAQ,CAAC,CAAC;oBACrEjB,QAAQ,CAACY,KAAK,CAAC,CAAC;oBAEhB,IAAIV,QAAQ,EAAE;wBACZ,OAAO;qBACR;iBACF;aACF;SACF;KACF,AAAC;IAEFP,KAAK,CAAC,4DAA4D,CAAC,CAAC;IACpES,OAAO,CAACc,WAAW,CAAC,QAAQ,EAAER,QAAQ,CAAC,CAAC;IACxCN,OAAO,CAACc,WAAW,CAAC,KAAK,EAAER,QAAQ,CAAC,CAAC;IAErC,MAAMS,GAAG,GAAG,IAAM;QAChBf,OAAO,CAACgB,cAAc,CAAC,QAAQ,EAAEV,QAAQ,CAAC,CAAC;QAC3CN,OAAO,CAACgB,cAAc,CAAC,KAAK,EAAEV,QAAQ,CAAC,CAAC;KACzC,AAAC;IAEFZ,MAAM,CAACoB,WAAW,QAAgB,GAAlCpB,KAAAA,CAAkC,GAAlCA,MAAM,CAACoB,WAAW,CAAG,OAAO,EAAEC,GAAG,CAAC,AArFpC,CAqFqC;IACnC,OAAOA,GAAG,CAAC;CACZ"}
|
|
@@ -68,7 +68,8 @@ function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isT
|
|
|
68
68
|
const extraNodeModules = {};
|
|
69
69
|
const aliases = {
|
|
70
70
|
web: {
|
|
71
|
-
"react-native": "react-native-web"
|
|
71
|
+
"react-native": "react-native-web",
|
|
72
|
+
"react-native/index": "react-native-web"
|
|
72
73
|
}
|
|
73
74
|
};
|
|
74
75
|
if (isWebEnabled) {
|
|
@@ -180,7 +181,6 @@ function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isT
|
|
|
180
181
|
function doResolve(moduleName) {
|
|
181
182
|
return resolve({
|
|
182
183
|
...context,
|
|
183
|
-
preferNativePlatform: platform !== "web",
|
|
184
184
|
resolveRequest: undefined,
|
|
185
185
|
mainFields,
|
|
186
186
|
// Passing `mainFields` directly won't be considered (in certain version of Metro)
|
|
@@ -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 chalk from 'chalk';\nimport fs from 'fs';\nimport { ConfigT } from 'metro-config';\nimport { Resolution, ResolutionContext } from 'metro-resolver';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\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 { learnMore } from '../../../utils/link';\nimport { loadTsConfigPathsAsync, TsConfigPaths } from '../../../utils/tsconfig/loadTsConfigPaths';\nimport { resolveWithTsConfigPaths } from '../../../utils/tsconfig/resolveWithTsConfigPaths';\nimport { WebSupportProjectPrerequisite } from '../../doctor/web/WebSupportProjectPrerequisite';\nimport { PlatformBundlers } from '../platformBundlers';\nimport {\n EXTERNAL_REQUIRE_NATIVE_POLYFILL,\n EXTERNAL_REQUIRE_POLYFILL,\n getNodeExternalModuleId,\n isNodeExternal,\n setupNodeExternals,\n} from './externals';\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { importMetroResolverFromProject } from './resolveFromProject';\nimport { getAppRouterRelativeEntryPath } from './router';\nimport { withMetroResolvers } from './withMetroResolvers';\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(config: ConfigT, projectRoot: string): 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 if (ctx.platform === 'web') {\n return [\n // NOTE: We might need this for all platforms\n path.join(projectRoot, EXTERNAL_REQUIRE_POLYFILL),\n // TODO: runtime polyfills, i.e. Fast Refresh, error overlay, React Dev Tools...\n ];\n }\n // Generally uses `rn-get-polyfills`\n const polyfills = originalGetPolyfills(ctx);\n\n return [...polyfills, EXTERNAL_REQUIRE_NATIVE_POLYFILL];\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\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 */\nexport function withExtendedResolver(\n config: ConfigT,\n {\n projectRoot,\n tsconfig,\n platforms,\n isTsconfigPathsEnabled,\n }: {\n projectRoot: string;\n tsconfig: TsConfigPaths | null;\n platforms: string[];\n isTsconfigPathsEnabled?: boolean;\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 // This is the native asset registry alias for native.\n path.resolve(resolveFrom(projectRoot, 'react-native/Libraries/Image/AssetRegistry'))\n // NOTE(EvanBacon): This is the newer import but it doesn't work in the expo/expo monorepo.\n // path.resolve(resolveFrom(projectRoot, '@react-native/assets/registry.js'))\n );\n\n const isWebEnabled = platforms.includes('web');\n\n const { resolve } = importMetroResolverFromProject(projectRoot);\n\n const extraNodeModules: { [key: string]: Record<string, string> } = {};\n\n const aliases: { [key: string]: Record<string, string> } = {\n web: {\n 'react-native': 'react-native-web',\n },\n };\n\n if (isWebEnabled) {\n // Allow `react-native-web` to be optional when web is not enabled but path aliases is.\n extraNodeModules['web'] = {\n 'react-native': path.resolve(require.resolve('react-native-web/package.json'), '..'),\n };\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 = tsconfig?.paths\n ? resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsconfig.paths ?? {},\n baseUrl: tsconfig.baseUrl,\n })\n : null;\n\n if (isTsconfigPathsEnabled && isInteractive()) {\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(projectRoot, ['./tsconfig.json', './jsconfig.json']);\n configWatcher.startObserving(() => {\n debug('Reloading tsconfig.json');\n loadTsConfigPathsAsync(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,\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 return withMetroResolvers(config, projectRoot, [\n // Add a resolver to alias the web asset resolver.\n (immutableContext: ResolutionContext, moduleName: string, platform: string | null) => {\n let context = {\n ...immutableContext,\n } as Mutable<ResolutionContext> & {\n mainFields: string[];\n customResolverOptions?: Record<string, string>;\n };\n\n const environment = context.customResolverOptions?.environment;\n const isNode = environment === 'node';\n\n // TODO: We need to prevent the require.context from including API routes as these use externals.\n // Should be fine after async routes lands.\n if (isNode) {\n const moduleId = isNodeExternal(moduleName);\n if (moduleId) {\n moduleName = getNodeExternalModuleId(context.originModulePath, moduleId);\n debug(`Redirecting Node.js external \"${moduleId}\" to \"${moduleName}\"`);\n }\n }\n\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 moduleName = aliases[platform][moduleName];\n }\n\n // TODO: We may be able to remove this in the future, it's doing no harm\n // by staying here.\n // Conditionally remap `react-native` to `react-native-web`\n if (platform && platform in extraNodeModules) {\n context.extraNodeModules = {\n ...extraNodeModules[platform],\n ...context.extraNodeModules,\n };\n }\n\n if (tsconfig?.baseUrl && isTsconfigPathsEnabled) {\n context = {\n ...context,\n nodeModulesPaths: [\n ...immutableContext.nodeModulesPaths,\n // add last to ensure node modules are resolved first\n tsconfig.baseUrl,\n ],\n };\n }\n\n let mainFields: string[] = context.mainFields;\n\n if (isNode) {\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 mainFields = ['main'];\n } else if (env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE) {\n mainFields = context.mainFields;\n } else if (platform && platform in preferredMainFields) {\n mainFields = preferredMainFields[platform];\n }\n function doResolve(moduleName: string): Resolution | null {\n return resolve(\n {\n ...context,\n preferNativePlatform: platform !== 'web',\n resolveRequest: undefined,\n\n mainFields,\n\n // Passing `mainFields` directly won't be considered (in certain version of Metro)\n // we need to extend the `getPackageMainPath` directly to\n // use platform specific `mainFields`.\n // @ts-ignore\n getPackageMainPath(packageJsonPath) {\n // @ts-expect-error: mainFields is not on type\n const package_ = context.moduleCache.getPackage(packageJsonPath);\n return package_.getMain(mainFields);\n },\n },\n moduleName,\n platform\n );\n }\n\n 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 let result: Resolution | null = null;\n\n if (tsConfigResolve) {\n result = tsConfigResolve(\n {\n originModulePath: context.originModulePath,\n moduleName,\n },\n optionalResolve\n );\n }\n\n result ??= doResolve(moduleName);\n\n if (result) {\n // Replace the web resolver with the original one.\n // This is basically an alias for web-only.\n if (shouldAliasAssetRegistryForWeb(platform, result)) {\n // @ts-expect-error: `readonly` for some reason.\n result.filePath = assetRegistryPath;\n }\n }\n return result;\n },\n ]);\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\n/** Add support for `react-native-web` and the Web platform. */\nexport async function withMetroMultiPlatformAsync(\n projectRoot: string,\n {\n config,\n platformBundlers,\n isTsconfigPathsEnabled,\n webOutput,\n routerDirectory,\n }: {\n config: ConfigT;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n webOutput?: 'single' | 'static';\n routerDirectory: string;\n }\n) {\n // Auto pick app entry for router.\n process.env.EXPO_ROUTER_APP_ROOT = getAppRouterRelativeEntryPath(projectRoot, routerDirectory);\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 (webOutput === 'static') {\n // Enable static rendering in runtime space.\n process.env.EXPO_PUBLIC_USE_STATIC = '1';\n }\n\n // Ensure the cache is invalidated if these values change.\n // @ts-expect-error\n config.transformer._expoRouterRootDirectory = process.env.EXPO_ROUTER_APP_ROOT;\n // @ts-expect-error\n config.transformer._expoRouterWebRendering = webOutput;\n // TODO: import mode\n\n if (platformBundlers.web === 'metro') {\n await new WebSupportProjectPrerequisite(projectRoot).assertAsync();\n } else if (!isTsconfigPathsEnabled) {\n // Bail out early for performance enhancements if no special features are enabled.\n return config;\n }\n\n let tsconfig: null | TsConfigPaths = null;\n\n if (isTsconfigPathsEnabled) {\n Log.warn(\n chalk.yellow`Experimental path aliases feature is enabled. ` +\n learnMore('https://docs.expo.dev/guides/typescript/#path-aliases')\n );\n tsconfig = await loadTsConfigPathsAsync(projectRoot);\n }\n\n await setupNodeExternals(projectRoot);\n\n return withMetroMultiPlatform(projectRoot, {\n config,\n platformBundlers,\n tsconfig,\n isTsconfigPathsEnabled,\n });\n}\n\nfunction withMetroMultiPlatform(\n projectRoot: string,\n {\n config,\n platformBundlers,\n isTsconfigPathsEnabled,\n tsconfig,\n }: {\n config: ConfigT;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n tsconfig: TsConfigPaths | null;\n }\n) {\n let expoConfigPlatforms = Object.entries(platformBundlers)\n .filter(([, bundler]) => bundler === 'metro')\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 if (expoConfigPlatforms.includes('web')) {\n config = withWebPolyfills(config, projectRoot);\n }\n\n return withExtendedResolver(config, {\n projectRoot,\n tsconfig,\n isTsconfigPathsEnabled,\n platforms: expoConfigPlatforms,\n });\n}\n"],"names":["withExtendedResolver","shouldAliasAssetRegistryForWeb","withMetroMultiPlatformAsync","debug","require","withWebPolyfills","config","projectRoot","originalGetPolyfills","serializer","getPolyfills","bind","ctx","platform","path","join","EXTERNAL_REQUIRE_POLYFILL","polyfills","EXTERNAL_REQUIRE_NATIVE_POLYFILL","normalizeSlashes","p","replace","tsconfig","platforms","isTsconfigPathsEnabled","assetRegistryPath","fs","realpathSync","resolve","resolveFrom","isWebEnabled","includes","importMetroResolverFromProject","extraNodeModules","aliases","web","preferredMainFields","tsConfigResolve","paths","resolveWithTsConfigPaths","baseUrl","isInteractive","configWatcher","FileNotifier","startObserving","loadTsConfigPathsAsync","then","tsConfigPaths","Object","keys","length","installExitHooks","stopObserving","withMetroResolvers","immutableContext","moduleName","context","environment","customResolverOptions","isNode","moduleId","isNodeExternal","getNodeExternalModuleId","originModulePath","nodeModulesPaths","mainFields","env","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","doResolve","preferNativePlatform","resolveRequest","undefined","getPackageMainPath","packageJsonPath","package_","moduleCache","getPackage","getMain","optionalResolve","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","result","filePath","type","endsWith","platformBundlers","webOutput","routerDirectory","process","EXPO_ROUTER_APP_ROOT","getAppRouterRelativeEntryPath","EXPO_PUBLIC_PROJECT_ROOT","EXPO_PUBLIC_USE_STATIC","transformer","_expoRouterRootDirectory","_expoRouterWebRendering","WebSupportProjectPrerequisite","assertAsync","Log","warn","chalk","yellow","learnMore","setupNodeExternals","withMetroMultiPlatform","expoConfigPlatforms","entries","filter","bundler","map","Array","isArray","resolver","Set","concat"],"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 chalk from 'chalk';\nimport fs from 'fs';\nimport { ConfigT } from 'metro-config';\nimport { Resolution, ResolutionContext } from 'metro-resolver';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\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 { learnMore } from '../../../utils/link';\nimport { loadTsConfigPathsAsync, TsConfigPaths } from '../../../utils/tsconfig/loadTsConfigPaths';\nimport { resolveWithTsConfigPaths } from '../../../utils/tsconfig/resolveWithTsConfigPaths';\nimport { WebSupportProjectPrerequisite } from '../../doctor/web/WebSupportProjectPrerequisite';\nimport { PlatformBundlers } from '../platformBundlers';\nimport {\n EXTERNAL_REQUIRE_NATIVE_POLYFILL,\n EXTERNAL_REQUIRE_POLYFILL,\n getNodeExternalModuleId,\n isNodeExternal,\n setupNodeExternals,\n} from './externals';\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { importMetroResolverFromProject } from './resolveFromProject';\nimport { getAppRouterRelativeEntryPath } from './router';\nimport { withMetroResolvers } from './withMetroResolvers';\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(config: ConfigT, projectRoot: string): 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 if (ctx.platform === 'web') {\n return [\n // NOTE: We might need this for all platforms\n path.join(projectRoot, EXTERNAL_REQUIRE_POLYFILL),\n // TODO: runtime polyfills, i.e. Fast Refresh, error overlay, React Dev Tools...\n ];\n }\n // Generally uses `rn-get-polyfills`\n const polyfills = originalGetPolyfills(ctx);\n\n return [...polyfills, EXTERNAL_REQUIRE_NATIVE_POLYFILL];\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\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 */\nexport function withExtendedResolver(\n config: ConfigT,\n {\n projectRoot,\n tsconfig,\n platforms,\n isTsconfigPathsEnabled,\n }: {\n projectRoot: string;\n tsconfig: TsConfigPaths | null;\n platforms: string[];\n isTsconfigPathsEnabled?: boolean;\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 // This is the native asset registry alias for native.\n path.resolve(resolveFrom(projectRoot, 'react-native/Libraries/Image/AssetRegistry'))\n // NOTE(EvanBacon): This is the newer import but it doesn't work in the expo/expo monorepo.\n // path.resolve(resolveFrom(projectRoot, '@react-native/assets/registry.js'))\n );\n\n const isWebEnabled = platforms.includes('web');\n\n const { resolve } = importMetroResolverFromProject(projectRoot);\n\n const extraNodeModules: { [key: string]: Record<string, string> } = {};\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 if (isWebEnabled) {\n // Allow `react-native-web` to be optional when web is not enabled but path aliases is.\n extraNodeModules['web'] = {\n 'react-native': path.resolve(require.resolve('react-native-web/package.json'), '..'),\n };\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 = tsconfig?.paths\n ? resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsconfig.paths ?? {},\n baseUrl: tsconfig.baseUrl,\n })\n : null;\n\n if (isTsconfigPathsEnabled && isInteractive()) {\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(projectRoot, ['./tsconfig.json', './jsconfig.json']);\n configWatcher.startObserving(() => {\n debug('Reloading tsconfig.json');\n loadTsConfigPathsAsync(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,\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 return withMetroResolvers(config, projectRoot, [\n // Add a resolver to alias the web asset resolver.\n (immutableContext: ResolutionContext, moduleName: string, platform: string | null) => {\n let context = {\n ...immutableContext,\n } as Mutable<ResolutionContext> & {\n mainFields: string[];\n customResolverOptions?: Record<string, string>;\n };\n\n const environment = context.customResolverOptions?.environment;\n const isNode = environment === 'node';\n\n // TODO: We need to prevent the require.context from including API routes as these use externals.\n // Should be fine after async routes lands.\n if (isNode) {\n const moduleId = isNodeExternal(moduleName);\n if (moduleId) {\n moduleName = getNodeExternalModuleId(context.originModulePath, moduleId);\n debug(`Redirecting Node.js external \"${moduleId}\" to \"${moduleName}\"`);\n }\n }\n\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 moduleName = aliases[platform][moduleName];\n }\n\n // TODO: We may be able to remove this in the future, it's doing no harm\n // by staying here.\n // Conditionally remap `react-native` to `react-native-web`\n if (platform && platform in extraNodeModules) {\n context.extraNodeModules = {\n ...extraNodeModules[platform],\n ...context.extraNodeModules,\n };\n }\n\n if (tsconfig?.baseUrl && isTsconfigPathsEnabled) {\n context = {\n ...context,\n nodeModulesPaths: [\n ...immutableContext.nodeModulesPaths,\n // add last to ensure node modules are resolved first\n tsconfig.baseUrl,\n ],\n };\n }\n\n let mainFields: string[] = context.mainFields;\n\n if (isNode) {\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 mainFields = ['main'];\n } else if (env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE) {\n mainFields = context.mainFields;\n } else if (platform && platform in preferredMainFields) {\n mainFields = preferredMainFields[platform];\n }\n function doResolve(moduleName: string): Resolution | null {\n return resolve(\n {\n ...context,\n resolveRequest: undefined,\n mainFields,\n\n // Passing `mainFields` directly won't be considered (in certain version of Metro)\n // we need to extend the `getPackageMainPath` directly to\n // use platform specific `mainFields`.\n // @ts-ignore\n getPackageMainPath(packageJsonPath) {\n // @ts-expect-error: mainFields is not on type\n const package_ = context.moduleCache.getPackage(packageJsonPath);\n return package_.getMain(mainFields);\n },\n },\n moduleName,\n platform\n );\n }\n\n 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 let result: Resolution | null = null;\n\n if (tsConfigResolve) {\n result = tsConfigResolve(\n {\n originModulePath: context.originModulePath,\n moduleName,\n },\n optionalResolve\n );\n }\n\n result ??= doResolve(moduleName);\n\n if (result) {\n // Replace the web resolver with the original one.\n // This is basically an alias for web-only.\n if (shouldAliasAssetRegistryForWeb(platform, result)) {\n // @ts-expect-error: `readonly` for some reason.\n result.filePath = assetRegistryPath;\n }\n }\n return result;\n },\n ]);\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\n/** Add support for `react-native-web` and the Web platform. */\nexport async function withMetroMultiPlatformAsync(\n projectRoot: string,\n {\n config,\n platformBundlers,\n isTsconfigPathsEnabled,\n webOutput,\n routerDirectory,\n }: {\n config: ConfigT;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n webOutput?: 'single' | 'static';\n routerDirectory: string;\n }\n) {\n // Auto pick app entry for router.\n process.env.EXPO_ROUTER_APP_ROOT = getAppRouterRelativeEntryPath(projectRoot, routerDirectory);\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 (webOutput === 'static') {\n // Enable static rendering in runtime space.\n process.env.EXPO_PUBLIC_USE_STATIC = '1';\n }\n\n // Ensure the cache is invalidated if these values change.\n // @ts-expect-error\n config.transformer._expoRouterRootDirectory = process.env.EXPO_ROUTER_APP_ROOT;\n // @ts-expect-error\n config.transformer._expoRouterWebRendering = webOutput;\n // TODO: import mode\n\n if (platformBundlers.web === 'metro') {\n await new WebSupportProjectPrerequisite(projectRoot).assertAsync();\n } else if (!isTsconfigPathsEnabled) {\n // Bail out early for performance enhancements if no special features are enabled.\n return config;\n }\n\n let tsconfig: null | TsConfigPaths = null;\n\n if (isTsconfigPathsEnabled) {\n Log.warn(\n chalk.yellow`Experimental path aliases feature is enabled. ` +\n learnMore('https://docs.expo.dev/guides/typescript/#path-aliases')\n );\n tsconfig = await loadTsConfigPathsAsync(projectRoot);\n }\n\n await setupNodeExternals(projectRoot);\n\n return withMetroMultiPlatform(projectRoot, {\n config,\n platformBundlers,\n tsconfig,\n isTsconfigPathsEnabled,\n });\n}\n\nfunction withMetroMultiPlatform(\n projectRoot: string,\n {\n config,\n platformBundlers,\n isTsconfigPathsEnabled,\n tsconfig,\n }: {\n config: ConfigT;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n tsconfig: TsConfigPaths | null;\n }\n) {\n let expoConfigPlatforms = Object.entries(platformBundlers)\n .filter(([, bundler]) => bundler === 'metro')\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 if (expoConfigPlatforms.includes('web')) {\n config = withWebPolyfills(config, projectRoot);\n }\n\n return withExtendedResolver(config, {\n projectRoot,\n tsconfig,\n isTsconfigPathsEnabled,\n platforms: expoConfigPlatforms,\n });\n}\n"],"names":["withExtendedResolver","shouldAliasAssetRegistryForWeb","withMetroMultiPlatformAsync","debug","require","withWebPolyfills","config","projectRoot","originalGetPolyfills","serializer","getPolyfills","bind","ctx","platform","path","join","EXTERNAL_REQUIRE_POLYFILL","polyfills","EXTERNAL_REQUIRE_NATIVE_POLYFILL","normalizeSlashes","p","replace","tsconfig","platforms","isTsconfigPathsEnabled","assetRegistryPath","fs","realpathSync","resolve","resolveFrom","isWebEnabled","includes","importMetroResolverFromProject","extraNodeModules","aliases","web","preferredMainFields","tsConfigResolve","paths","resolveWithTsConfigPaths","baseUrl","isInteractive","configWatcher","FileNotifier","startObserving","loadTsConfigPathsAsync","then","tsConfigPaths","Object","keys","length","installExitHooks","stopObserving","withMetroResolvers","immutableContext","moduleName","context","environment","customResolverOptions","isNode","moduleId","isNodeExternal","getNodeExternalModuleId","originModulePath","nodeModulesPaths","mainFields","env","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","doResolve","resolveRequest","undefined","getPackageMainPath","packageJsonPath","package_","moduleCache","getPackage","getMain","optionalResolve","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","result","filePath","type","endsWith","platformBundlers","webOutput","routerDirectory","process","EXPO_ROUTER_APP_ROOT","getAppRouterRelativeEntryPath","EXPO_PUBLIC_PROJECT_ROOT","EXPO_PUBLIC_USE_STATIC","transformer","_expoRouterRootDirectory","_expoRouterWebRendering","WebSupportProjectPrerequisite","assertAsync","Log","warn","chalk","yellow","learnMore","setupNodeExternals","withMetroMultiPlatform","expoConfigPlatforms","entries","filter","bundler","map","Array","isArray","resolver","Set","concat"],"mappings":"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"}
|