@expo/cli 0.16.0 → 0.16.2
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/start/interface/interactiveActions.js +2 -2
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +1 -4
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +18 -31
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +64 -0
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -0
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/package.json +3 -3
package/build/bin/cli
CHANGED
|
@@ -137,7 +137,7 @@ const args = (0, _arg).default({
|
|
|
137
137
|
});
|
|
138
138
|
if (args["--version"]) {
|
|
139
139
|
// Version is added in the build script.
|
|
140
|
-
console.log("0.16.
|
|
140
|
+
console.log("0.16.2");
|
|
141
141
|
process.exit(0);
|
|
142
142
|
}
|
|
143
143
|
if (args["--non-interactive"]) {
|
|
@@ -271,7 +271,7 @@ commands[command]().then((exec)=>{
|
|
|
271
271
|
logEventAsync("action", {
|
|
272
272
|
action: `expo ${command}`,
|
|
273
273
|
source: "expo/cli",
|
|
274
|
-
source_version: "0.16.
|
|
274
|
+
source_version: "0.16.2"
|
|
275
275
|
});
|
|
276
276
|
}
|
|
277
277
|
});
|
|
@@ -98,8 +98,8 @@ class DevServerManagerActions {
|
|
|
98
98
|
} else {
|
|
99
99
|
var _deviceName;
|
|
100
100
|
const choices = apps.map((app)=>({
|
|
101
|
-
title: app.
|
|
102
|
-
value:
|
|
101
|
+
title: (_deviceName = app.deviceName) != null ? _deviceName : "Unknown device",
|
|
102
|
+
value: app.id,
|
|
103
103
|
app
|
|
104
104
|
})
|
|
105
105
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/interface/interactiveActions.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { BLT, printHelp, printItem, printQRCode, printUsage, StartOptions } from './commandsTable';\nimport * as Log from '../../log';\nimport { delayAsync } from '../../utils/delay';\nimport { learnMore } from '../../utils/link';\nimport { openBrowserAsync } from '../../utils/open';\nimport { ExpoChoice, selectAsync } from '../../utils/prompts';\nimport { DevServerManager } from '../server/DevServerManager';\nimport {\n addReactDevToolsReloadListener,\n startReactDevToolsProxyAsync,\n} from '../server/ReactDevToolsProxy';\nimport {\n MetroInspectorProxyApp,\n openJsInspector,\n queryAllInspectorAppsAsync,\n} from '../server/middleware/inspector/JsInspector';\n\nconst debug = require('debug')('expo:start:interface:interactiveActions') as typeof console.log;\n\ninterface MoreToolMenuItem extends ExpoChoice<string> {\n action?: () => unknown;\n}\n\n/** Wraps the DevServerManager and adds an interface for user actions. */\nexport class DevServerManagerActions {\n constructor(private devServerManager: DevServerManager) {}\n\n printDevServerInfo(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>\n ) {\n // If native dev server is running, print its URL.\n if (this.devServerManager.getNativeDevServerPort()) {\n const devServer = this.devServerManager.getDefaultDevServer();\n try {\n const nativeRuntimeUrl = devServer.getNativeRuntimeUrl()!;\n const interstitialPageUrl = devServer.getRedirectUrl();\n\n printQRCode(interstitialPageUrl ?? nativeRuntimeUrl);\n\n if (interstitialPageUrl) {\n Log.log(\n printItem(\n chalk`Choose an app to open your project at {underline ${interstitialPageUrl}}`\n )\n );\n }\n Log.log(printItem(chalk`Metro waiting on {underline ${nativeRuntimeUrl}}`));\n if (options.devClient === false) {\n // TODO: if development build, change this message!\n Log.log(\n printItem('Scan the QR code above with Expo Go (Android) or the Camera app (iOS)')\n );\n } else {\n Log.log(\n printItem(\n 'Scan the QR code above to open the project in a development build. ' +\n learnMore('https://expo.fyi/start')\n )\n );\n }\n } catch (error) {\n console.log('err', error);\n // @ts-ignore: If there is no development build scheme, then skip the QR code.\n if (error.code !== 'NO_DEV_CLIENT_SCHEME') {\n throw error;\n } else {\n const serverUrl = devServer.getDevServerUrl();\n Log.log(printItem(chalk`Metro waiting on {underline ${serverUrl}}`));\n Log.log(printItem(`Linking is disabled because the client scheme cannot be resolved.`));\n }\n }\n }\n\n const webDevServer = this.devServerManager.getWebDevServer();\n const webUrl = webDevServer?.getDevServerUrl({ hostType: 'localhost' });\n if (webUrl) {\n Log.log();\n Log.log(printItem(chalk`Web is waiting on {underline ${webUrl}}`));\n }\n\n printUsage(options, { verbose: false });\n printHelp();\n Log.log();\n }\n\n async openJsInspectorAsync() {\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n let app: MetroInspectorProxyApp | null = null;\n\n if (!apps.length) {\n return Log.warn(\n chalk`{bold Debug:} No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine. ${learnMore(\n 'https://docs.expo.dev/guides/using-hermes/'\n )}`\n );\n }\n\n if (apps.length === 1) {\n app = apps[0];\n } else {\n const choices = apps.map((app) => ({\n title: app.title,\n value: app.deviceName ?? 'Unknown device',\n app,\n }));\n\n const value = await selectAsync(chalk`Debug target {dim (Hermes only)}`, choices);\n const menuItem = choices.find((item) => item.value === value);\n if (!menuItem) {\n return Log.error(chalk`{bold Debug:} No device available for \"${value}\"`);\n }\n\n app = menuItem.app;\n }\n\n if (!app) {\n return Log.error(chalk`{bold Debug:} No device selected`);\n }\n\n try {\n await openJsInspector(metroServerOrigin, app);\n } catch (error: any) {\n Log.error('Failed to open JavaScript inspector. This is often an issue with Google Chrome.');\n Log.exception(error);\n }\n }\n\n reloadApp() {\n Log.log(`${BLT} Reloading apps`);\n // Send reload requests over the dev servers\n this.devServerManager.broadcastMessage('reload');\n }\n\n async openMoreToolsAsync() {\n // Options match: Chrome > View > Developer\n try {\n const defaultMenuItems: MoreToolMenuItem[] = [\n { title: 'Inspect elements', value: 'toggleElementInspector' },\n { title: 'Toggle performance monitor', value: 'togglePerformanceMonitor' },\n { title: 'Toggle developer menu', value: 'toggleDevMenu' },\n { title: 'Reload app', value: 'reload' },\n {\n title: 'Open React devtools',\n value: 'openReactDevTools',\n action: this.openReactDevToolsAsync,\n },\n // TODO: Maybe a \"View Source\" option to open code.\n ];\n const pluginMenuItems = (\n await this.devServerManager.devtoolsPluginManager.queryPluginsAsync()\n ).map((plugin) => ({\n title: chalk`Open devtools plugin - {bold ${plugin.packageName}}`,\n value: `devtoolsPlugin:${plugin.packageName}`,\n action: async () => {\n const url = new URL(\n plugin.webpageEndpoint,\n this.devServerManager\n .getDefaultDevServer()\n .getUrlCreator()\n .constructUrl({ scheme: 'http' })\n );\n await openBrowserAsync(url.toString());\n },\n }));\n const menuItems = [...defaultMenuItems, ...pluginMenuItems];\n const value = await selectAsync(chalk`Dev tools {dim (native only)}`, menuItems);\n const menuItem = menuItems.find((item) => item.value === value);\n if (menuItem?.action) {\n menuItem.action();\n } else if (menuItem?.value) {\n this.devServerManager.broadcastMessage('sendDevCommand', { name: menuItem.value });\n }\n } catch (error: any) {\n debug(error);\n // do nothing\n } finally {\n printHelp();\n }\n }\n\n async openReactDevToolsAsync() {\n await startReactDevToolsProxyAsync();\n const url = this.devServerManager.getDefaultDevServer().getReactDevToolsUrl();\n await openBrowserAsync(url);\n addReactDevToolsReloadListener(() => {\n this.reconnectReactDevTools();\n });\n this.reconnectReactDevTools();\n }\n\n async reconnectReactDevTools() {\n // Wait a little time for react-devtools to be initialized in browser\n await delayAsync(3000);\n this.devServerManager.broadcastMessage('sendDevCommand', { name: 'reconnectReactDevTools' });\n }\n\n toggleDevMenu() {\n Log.log(`${BLT} Toggling dev menu`);\n this.devServerManager.broadcastMessage('devMenu');\n }\n}\n"],"names":["Log","debug","require","DevServerManagerActions","constructor","devServerManager","printDevServerInfo","options","getNativeDevServerPort","devServer","getDefaultDevServer","nativeRuntimeUrl","getNativeRuntimeUrl","interstitialPageUrl","getRedirectUrl","printQRCode","log","printItem","chalk","devClient","learnMore","error","console","code","serverUrl","getDevServerUrl","webDevServer","getWebDevServer","webUrl","hostType","printUsage","verbose","printHelp","openJsInspectorAsync","metroServerOrigin","getJsInspectorBaseUrl","apps","queryAllInspectorAppsAsync","app","length","warn","choices","map","title","value","deviceName","selectAsync","menuItem","find","item","openJsInspector","exception","reloadApp","BLT","broadcastMessage","openMoreToolsAsync","defaultMenuItems","action","openReactDevToolsAsync","pluginMenuItems","devtoolsPluginManager","queryPluginsAsync","plugin","packageName","url","URL","webpageEndpoint","getUrlCreator","constructUrl","scheme","openBrowserAsync","toString","menuItems","name","startReactDevToolsProxyAsync","getReactDevToolsUrl","addReactDevToolsReloadListener","reconnectReactDevTools","delayAsync","toggleDevMenu"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/interface/interactiveActions.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { BLT, printHelp, printItem, printQRCode, printUsage, StartOptions } from './commandsTable';\nimport * as Log from '../../log';\nimport { delayAsync } from '../../utils/delay';\nimport { learnMore } from '../../utils/link';\nimport { openBrowserAsync } from '../../utils/open';\nimport { ExpoChoice, selectAsync } from '../../utils/prompts';\nimport { DevServerManager } from '../server/DevServerManager';\nimport {\n addReactDevToolsReloadListener,\n startReactDevToolsProxyAsync,\n} from '../server/ReactDevToolsProxy';\nimport {\n MetroInspectorProxyApp,\n openJsInspector,\n queryAllInspectorAppsAsync,\n} from '../server/middleware/inspector/JsInspector';\n\nconst debug = require('debug')('expo:start:interface:interactiveActions') as typeof console.log;\n\ninterface MoreToolMenuItem extends ExpoChoice<string> {\n action?: () => unknown;\n}\n\n/** Wraps the DevServerManager and adds an interface for user actions. */\nexport class DevServerManagerActions {\n constructor(private devServerManager: DevServerManager) {}\n\n printDevServerInfo(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>\n ) {\n // If native dev server is running, print its URL.\n if (this.devServerManager.getNativeDevServerPort()) {\n const devServer = this.devServerManager.getDefaultDevServer();\n try {\n const nativeRuntimeUrl = devServer.getNativeRuntimeUrl()!;\n const interstitialPageUrl = devServer.getRedirectUrl();\n\n printQRCode(interstitialPageUrl ?? nativeRuntimeUrl);\n\n if (interstitialPageUrl) {\n Log.log(\n printItem(\n chalk`Choose an app to open your project at {underline ${interstitialPageUrl}}`\n )\n );\n }\n Log.log(printItem(chalk`Metro waiting on {underline ${nativeRuntimeUrl}}`));\n if (options.devClient === false) {\n // TODO: if development build, change this message!\n Log.log(\n printItem('Scan the QR code above with Expo Go (Android) or the Camera app (iOS)')\n );\n } else {\n Log.log(\n printItem(\n 'Scan the QR code above to open the project in a development build. ' +\n learnMore('https://expo.fyi/start')\n )\n );\n }\n } catch (error) {\n console.log('err', error);\n // @ts-ignore: If there is no development build scheme, then skip the QR code.\n if (error.code !== 'NO_DEV_CLIENT_SCHEME') {\n throw error;\n } else {\n const serverUrl = devServer.getDevServerUrl();\n Log.log(printItem(chalk`Metro waiting on {underline ${serverUrl}}`));\n Log.log(printItem(`Linking is disabled because the client scheme cannot be resolved.`));\n }\n }\n }\n\n const webDevServer = this.devServerManager.getWebDevServer();\n const webUrl = webDevServer?.getDevServerUrl({ hostType: 'localhost' });\n if (webUrl) {\n Log.log();\n Log.log(printItem(chalk`Web is waiting on {underline ${webUrl}}`));\n }\n\n printUsage(options, { verbose: false });\n printHelp();\n Log.log();\n }\n\n async openJsInspectorAsync() {\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n let app: MetroInspectorProxyApp | null = null;\n\n if (!apps.length) {\n return Log.warn(\n chalk`{bold Debug:} No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine. ${learnMore(\n 'https://docs.expo.dev/guides/using-hermes/'\n )}`\n );\n }\n\n if (apps.length === 1) {\n app = apps[0];\n } else {\n const choices = apps.map((app) => ({\n title: app.deviceName ?? 'Unknown device',\n value: app.id,\n app,\n }));\n\n const value = await selectAsync(chalk`Debug target {dim (Hermes only)}`, choices);\n const menuItem = choices.find((item) => item.value === value);\n if (!menuItem) {\n return Log.error(chalk`{bold Debug:} No device available for \"${value}\"`);\n }\n\n app = menuItem.app;\n }\n\n if (!app) {\n return Log.error(chalk`{bold Debug:} No device selected`);\n }\n\n try {\n await openJsInspector(metroServerOrigin, app);\n } catch (error: any) {\n Log.error('Failed to open JavaScript inspector. This is often an issue with Google Chrome.');\n Log.exception(error);\n }\n }\n\n reloadApp() {\n Log.log(`${BLT} Reloading apps`);\n // Send reload requests over the dev servers\n this.devServerManager.broadcastMessage('reload');\n }\n\n async openMoreToolsAsync() {\n // Options match: Chrome > View > Developer\n try {\n const defaultMenuItems: MoreToolMenuItem[] = [\n { title: 'Inspect elements', value: 'toggleElementInspector' },\n { title: 'Toggle performance monitor', value: 'togglePerformanceMonitor' },\n { title: 'Toggle developer menu', value: 'toggleDevMenu' },\n { title: 'Reload app', value: 'reload' },\n {\n title: 'Open React devtools',\n value: 'openReactDevTools',\n action: this.openReactDevToolsAsync,\n },\n // TODO: Maybe a \"View Source\" option to open code.\n ];\n const pluginMenuItems = (\n await this.devServerManager.devtoolsPluginManager.queryPluginsAsync()\n ).map((plugin) => ({\n title: chalk`Open devtools plugin - {bold ${plugin.packageName}}`,\n value: `devtoolsPlugin:${plugin.packageName}`,\n action: async () => {\n const url = new URL(\n plugin.webpageEndpoint,\n this.devServerManager\n .getDefaultDevServer()\n .getUrlCreator()\n .constructUrl({ scheme: 'http' })\n );\n await openBrowserAsync(url.toString());\n },\n }));\n const menuItems = [...defaultMenuItems, ...pluginMenuItems];\n const value = await selectAsync(chalk`Dev tools {dim (native only)}`, menuItems);\n const menuItem = menuItems.find((item) => item.value === value);\n if (menuItem?.action) {\n menuItem.action();\n } else if (menuItem?.value) {\n this.devServerManager.broadcastMessage('sendDevCommand', { name: menuItem.value });\n }\n } catch (error: any) {\n debug(error);\n // do nothing\n } finally {\n printHelp();\n }\n }\n\n async openReactDevToolsAsync() {\n await startReactDevToolsProxyAsync();\n const url = this.devServerManager.getDefaultDevServer().getReactDevToolsUrl();\n await openBrowserAsync(url);\n addReactDevToolsReloadListener(() => {\n this.reconnectReactDevTools();\n });\n this.reconnectReactDevTools();\n }\n\n async reconnectReactDevTools() {\n // Wait a little time for react-devtools to be initialized in browser\n await delayAsync(3000);\n this.devServerManager.broadcastMessage('sendDevCommand', { name: 'reconnectReactDevTools' });\n }\n\n toggleDevMenu() {\n Log.log(`${BLT} Toggling dev menu`);\n this.devServerManager.broadcastMessage('devMenu');\n }\n}\n"],"names":["Log","debug","require","DevServerManagerActions","constructor","devServerManager","printDevServerInfo","options","getNativeDevServerPort","devServer","getDefaultDevServer","nativeRuntimeUrl","getNativeRuntimeUrl","interstitialPageUrl","getRedirectUrl","printQRCode","log","printItem","chalk","devClient","learnMore","error","console","code","serverUrl","getDevServerUrl","webDevServer","getWebDevServer","webUrl","hostType","printUsage","verbose","printHelp","openJsInspectorAsync","metroServerOrigin","getJsInspectorBaseUrl","apps","queryAllInspectorAppsAsync","app","length","warn","choices","map","title","deviceName","value","id","selectAsync","menuItem","find","item","openJsInspector","exception","reloadApp","BLT","broadcastMessage","openMoreToolsAsync","defaultMenuItems","action","openReactDevToolsAsync","pluginMenuItems","devtoolsPluginManager","queryPluginsAsync","plugin","packageName","url","URL","webpageEndpoint","getUrlCreator","constructUrl","scheme","openBrowserAsync","toString","menuItems","name","startReactDevToolsProxyAsync","getReactDevToolsUrl","addReactDevToolsReloadListener","reconnectReactDevTools","delayAsync","toggleDevMenu"],"mappings":"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"}
|
|
@@ -291,10 +291,7 @@ class MetroBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
|
|
|
291
291
|
const parsedOptions = {
|
|
292
292
|
port: options.port,
|
|
293
293
|
maxWorkers: options.maxWorkers,
|
|
294
|
-
resetCache: options.resetDevServer
|
|
295
|
-
// Use the unversioned metro config.
|
|
296
|
-
// TODO: Deprecate this property when expo-cli goes away.
|
|
297
|
-
unversioned: false
|
|
294
|
+
resetCache: options.resetDevServer
|
|
298
295
|
};
|
|
299
296
|
// Required for symbolication:
|
|
300
297
|
process.env.EXPO_DEV_SERVER_ORIGIN = `http://localhost:${options.port}`;
|
|
@@ -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 * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport chalk from 'chalk';\nimport { AssetData } from 'metro';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { bundleApiRoute, rebundleApiRoute } from './bundleApiRoutes';\nimport { createRouteHandlerMiddleware } from './createServerRouteMiddleware';\nimport { ExpoRouterServerManifestV1, fetchManifest } from './fetchRouterManifest';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { getRouterDirectoryModuleIdWithManifest, isApiRouteConvention } from './router';\nimport { serializeHtmlWithAssets } from './serializeHtml';\nimport { observeApiRouteChanges, observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\nimport { ExportAssetMap } from '../../../export/saveAssets';\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { CommandError } from '../../../utils/errors';\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 { DevToolsPluginMiddleware } from '../middleware/DevToolsPluginMiddleware';\nimport { FaviconMiddleware } from '../middleware/FaviconMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport { resolveMainModuleName } from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport {\n shouldEnableAsyncImports,\n createBundleUrlPath,\n getBaseUrlFromExpoConfig,\n getAsyncRoutesFromExpoConfig,\n} from '../middleware/metroOptions';\nimport { prependMiddleware } from '../middleware/mutations';\nimport { startTypescriptTypeGenerationAsync } from '../type-generation/startTypescriptTypeGeneration';\n\nexport type ExpoRouterRuntimeManifest = Awaited<\n ReturnType<typeof import('expo-router/build/static/renderStaticContent').getManifest>\n>;\n\nexport class ForwardHtmlError extends CommandError {\n constructor(\n message: string,\n public html: string,\n public statusCode: number\n ) {\n super(message);\n }\n}\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 async exportExpoRouterApiRoutesAsync({\n mode,\n outputDir,\n prerenderManifest,\n baseUrl,\n routerRoot,\n }: {\n mode: 'development' | 'production';\n outputDir: string;\n // This does not contain the API routes info.\n prerenderManifest: ExpoRouterServerManifestV1;\n baseUrl: string;\n routerRoot: string;\n }): Promise<{ files: ExportAssetMap; manifest: ExpoRouterServerManifestV1<string> }> {\n const appDir = path.join(this.projectRoot, routerRoot);\n const manifest = await this.getExpoRouterRoutesManifestAsync({ appDir });\n\n const files: ExportAssetMap = new Map();\n\n for (const route of manifest.apiRoutes) {\n const filepath = path.join(appDir, route.file);\n const contents = await bundleApiRoute(this.projectRoot, filepath, {\n mode,\n routerRoot,\n port: this.getInstance()?.location.port,\n shouldThrow: true,\n baseUrl,\n });\n const artifactFilename = path.join(\n outputDir,\n path.relative(appDir, filepath.replace(/\\.[tj]sx?$/, '.js'))\n );\n if (contents) {\n files.set(artifactFilename, {\n contents,\n targetDomain: 'server',\n });\n }\n // Remap the manifest files to represent the output files.\n route.file = artifactFilename;\n }\n\n return {\n manifest: {\n ...manifest,\n htmlRoutes: prerenderManifest.htmlRoutes,\n },\n files,\n };\n }\n\n async getExpoRouterRoutesManifestAsync({ appDir }: { appDir: string }) {\n // getBuiltTimeServerManifest\n const manifest = await fetchManifest(this.projectRoot, {\n asJson: true,\n appDir,\n });\n\n if (!manifest) {\n throw new CommandError(\n 'EXPO_ROUTER_SERVER_MANIFEST',\n 'Unexpected error: server manifest could not be fetched.'\n );\n }\n\n return manifest;\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n baseUrl,\n routerRoot,\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n baseUrl: string;\n routerRoot: string;\n }): Promise<{\n serverManifest: ExpoRouterServerManifestV1;\n manifest: ExpoRouterRuntimeManifest;\n renderAsync: (path: string) => Promise<string>;\n }> {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent, getManifest, getBuildTimeServerManifestAsync } =\n await getStaticRenderFunctions(this.projectRoot, url, {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n baseUrl,\n routerRoot,\n });\n\n return {\n serverManifest: await getBuildTimeServerManifestAsync(),\n // Get routes from Expo Router.\n manifest: await getManifest({ fetchData: true, preserveApiRoutes: false }),\n // Get route generating function\n async renderAsync(path: string) {\n return await getStaticContent(new URL(path, url));\n },\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n includeSourceMaps,\n baseUrl,\n mainModuleName,\n isExporting,\n asyncRoutes,\n routerRoot,\n }: {\n isExporting: boolean;\n mode: string;\n minify?: boolean;\n includeSourceMaps?: boolean;\n baseUrl?: string;\n mainModuleName?: string;\n asyncRoutes: boolean;\n routerRoot: string;\n }): Promise<{ artifacts: SerialAsset[]; assets?: AssetData[] }> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n serializerIncludeMaps: includeSourceMaps,\n mainModuleName:\n mainModuleName ?? resolveMainModuleName(this.projectRoot, { platform: 'web' }),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n asyncRoutes,\n baseUrl,\n isExporting,\n routerRoot,\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 debug(txt);\n\n // Metro can throw this error when the initial module id cannot be resolved.\n if (!results.ok && txt.startsWith('<!DOCTYPE html>')) {\n throw new ForwardHtmlError(\n `Metro failed to bundle the project. Check the console for more information.`,\n txt,\n results.status\n );\n }\n\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 throw error;\n }\n\n // NOTE: This could potentially need more validation in the future.\n if ('artifacts' in data && Array.isArray(data.artifacts)) {\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 getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n baseUrl,\n routerRoot,\n isExporting,\n asyncRoutes,\n }: {\n isExporting: boolean;\n mode: 'development' | 'production';\n minify?: boolean;\n baseUrl: string;\n asyncRoutes: boolean;\n routerRoot: string;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, { platform: 'web' }),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n baseUrl,\n isExporting,\n asyncRoutes,\n routerRoot,\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 baseUrl,\n routerRoot,\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [{ artifacts: resources }, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ isExporting, mode, minify, baseUrl, asyncRoutes, routerRoot }),\n bundleStaticHtml(),\n ]);\n const content = serializeHtmlWithAssets({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n baseUrl,\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 isExporting: !!options.isExporting,\n }\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 middleware.use(\n new DevToolsPluginMiddleware(this.projectRoot, this.devToolsPluginManager).getHandler()\n );\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 useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\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 (useServerRendering) {\n const baseUrl = getBaseUrlFromExpoConfig(exp);\n const asyncRoutes = getAsyncRoutesFromExpoConfig(exp, options.mode ?? 'development', 'web');\n const routerRoot = getRouterDirectoryModuleIdWithManifest(this.projectRoot, exp);\n const appDir = path.join(this.projectRoot, routerRoot);\n middleware.use(\n createRouteHandlerMiddleware(this.projectRoot, {\n ...options,\n appDir,\n baseUrl,\n routerRoot,\n getWebBundleUrl: manifestMiddleware.getWebBundleUrl.bind(manifestMiddleware),\n getStaticPageAsync: (pathname) => {\n return this.getStaticPageAsync(pathname, {\n isExporting: !!options.isExporting,\n mode: options.mode ?? 'development',\n minify: options.minify,\n baseUrl,\n asyncRoutes,\n routerRoot,\n });\n },\n })\n );\n\n if (exp.web?.output === 'server') {\n // Cache observation for API Routes...\n observeApiRouteChanges(\n appDir,\n {\n metro,\n server,\n },\n async (filepath, op) => {\n if (isApiRouteConvention(filepath)) {\n debug(`[expo-cli] ${op} ${filepath}`);\n if (op === 'change' || op === 'add') {\n rebundleApiRoute(this.projectRoot, filepath, {\n ...options,\n routerRoot,\n baseUrl,\n });\n }\n\n if (op === 'delete') {\n // TODO: Cancel the bundling of the deleted route.\n }\n }\n }\n );\n }\n } else {\n // This MUST run last since it's the fallback.\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.js'\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 return 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"],"names":["getDeepLinkHandler","runtimeEnv","ForwardHtmlError","CommandError","constructor","message","html","statusCode","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","exportExpoRouterApiRoutesAsync","mode","outputDir","prerenderManifest","baseUrl","routerRoot","appDir","path","join","projectRoot","manifest","getExpoRouterRoutesManifestAsync","files","Map","route","apiRoutes","filepath","file","contents","bundleApiRoute","getInstance","location","shouldThrow","artifactFilename","relative","replace","set","targetDomain","htmlRoutes","fetchManifest","asJson","getStaticRenderFunctionAsync","minify","url","getDevServerUrl","getStaticContent","getManifest","getBuildTimeServerManifestAsync","getStaticRenderFunctions","dev","environment","serverManifest","fetchData","preserveApiRoutes","renderAsync","URL","getStaticResourcesAsync","includeSourceMaps","mainModuleName","isExporting","asyncRoutes","data","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","serializerIncludeMaps","resolveMainModuleName","lazy","shouldEnableAsyncImports","bundleUrl","results","fetch","toString","txt","text","JSON","parse","error","ok","startsWith","status","Log","Array","isArray","artifacts","errors","type","match","Error","getStaticPageAsync","pathname","bundleStaticHtml","resources","staticHtml","Promise","all","content","serializeHtmlWithAssets","template","devBundleUrl","watchEnvironmentVariables","instance","envFiles","getFiles","NODE_ENV","map","fileName","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","DevToolsPluginMiddleware","devToolsPluginManager","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","getConfig","skipSDKVersionRequirement","useServerRendering","includes","web","output","ServeStaticMiddleware","FaviconMiddleware","getBaseUrlFromExpoConfig","getAsyncRoutesFromExpoConfig","getRouterDirectoryModuleIdWithManifest","createRouteHandlerMiddleware","getWebBundleUrl","bind","observeApiRouteChanges","op","isApiRouteConvention","rebundleApiRoute","HistoryFallbackMiddleware","internal","originalClose","close","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","req","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","startTypescriptTypeGenerationAsync","getConfigModuleIds","logEventAsync","getDevClientProperties"],"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 * as runtimeEnv from '@expo/env';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport chalk from 'chalk';\nimport { AssetData } from 'metro';\nimport fetch from 'node-fetch';\nimport path from 'path';\n\nimport { bundleApiRoute, rebundleApiRoute } from './bundleApiRoutes';\nimport { createRouteHandlerMiddleware } from './createServerRouteMiddleware';\nimport { ExpoRouterServerManifestV1, fetchManifest } from './fetchRouterManifest';\nimport { instantiateMetroAsync } from './instantiateMetro';\nimport { metroWatchTypeScriptFiles } from './metroWatchTypeScriptFiles';\nimport { getRouterDirectoryModuleIdWithManifest, isApiRouteConvention } from './router';\nimport { serializeHtmlWithAssets } from './serializeHtml';\nimport { observeApiRouteChanges, observeFileChanges } from './waitForMetroToObserveTypeScriptFile';\nimport { ExportAssetMap } from '../../../export/saveAssets';\nimport { Log } from '../../../log';\nimport getDevClientProperties from '../../../utils/analytics/getDevClientProperties';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { CommandError } from '../../../utils/errors';\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 { DevToolsPluginMiddleware } from '../middleware/DevToolsPluginMiddleware';\nimport { FaviconMiddleware } from '../middleware/FaviconMiddleware';\nimport { HistoryFallbackMiddleware } from '../middleware/HistoryFallbackMiddleware';\nimport { InterstitialPageMiddleware } from '../middleware/InterstitialPageMiddleware';\nimport { resolveMainModuleName } from '../middleware/ManifestMiddleware';\nimport { ReactDevToolsPageMiddleware } from '../middleware/ReactDevToolsPageMiddleware';\nimport {\n DeepLinkHandler,\n RuntimeRedirectMiddleware,\n} from '../middleware/RuntimeRedirectMiddleware';\nimport { ServeStaticMiddleware } from '../middleware/ServeStaticMiddleware';\nimport {\n shouldEnableAsyncImports,\n createBundleUrlPath,\n getBaseUrlFromExpoConfig,\n getAsyncRoutesFromExpoConfig,\n} from '../middleware/metroOptions';\nimport { prependMiddleware } from '../middleware/mutations';\nimport { startTypescriptTypeGenerationAsync } from '../type-generation/startTypescriptTypeGeneration';\n\nexport type ExpoRouterRuntimeManifest = Awaited<\n ReturnType<typeof import('expo-router/build/static/renderStaticContent').getManifest>\n>;\n\nexport class ForwardHtmlError extends CommandError {\n constructor(\n message: string,\n public html: string,\n public statusCode: number\n ) {\n super(message);\n }\n}\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 async exportExpoRouterApiRoutesAsync({\n mode,\n outputDir,\n prerenderManifest,\n baseUrl,\n routerRoot,\n }: {\n mode: 'development' | 'production';\n outputDir: string;\n // This does not contain the API routes info.\n prerenderManifest: ExpoRouterServerManifestV1;\n baseUrl: string;\n routerRoot: string;\n }): Promise<{ files: ExportAssetMap; manifest: ExpoRouterServerManifestV1<string> }> {\n const appDir = path.join(this.projectRoot, routerRoot);\n const manifest = await this.getExpoRouterRoutesManifestAsync({ appDir });\n\n const files: ExportAssetMap = new Map();\n\n for (const route of manifest.apiRoutes) {\n const filepath = path.join(appDir, route.file);\n const contents = await bundleApiRoute(this.projectRoot, filepath, {\n mode,\n routerRoot,\n port: this.getInstance()?.location.port,\n shouldThrow: true,\n baseUrl,\n });\n const artifactFilename = path.join(\n outputDir,\n path.relative(appDir, filepath.replace(/\\.[tj]sx?$/, '.js'))\n );\n if (contents) {\n files.set(artifactFilename, {\n contents,\n targetDomain: 'server',\n });\n }\n // Remap the manifest files to represent the output files.\n route.file = artifactFilename;\n }\n\n return {\n manifest: {\n ...manifest,\n htmlRoutes: prerenderManifest.htmlRoutes,\n },\n files,\n };\n }\n\n async getExpoRouterRoutesManifestAsync({ appDir }: { appDir: string }) {\n // getBuiltTimeServerManifest\n const manifest = await fetchManifest(this.projectRoot, {\n asJson: true,\n appDir,\n });\n\n if (!manifest) {\n throw new CommandError(\n 'EXPO_ROUTER_SERVER_MANIFEST',\n 'Unexpected error: server manifest could not be fetched.'\n );\n }\n\n return manifest;\n }\n\n async getStaticRenderFunctionAsync({\n mode,\n minify = mode !== 'development',\n baseUrl,\n routerRoot,\n }: {\n mode: 'development' | 'production';\n minify?: boolean;\n baseUrl: string;\n routerRoot: string;\n }): Promise<{\n serverManifest: ExpoRouterServerManifestV1;\n manifest: ExpoRouterRuntimeManifest;\n renderAsync: (path: string) => Promise<string>;\n }> {\n const url = this.getDevServerUrl()!;\n\n const { getStaticContent, getManifest, getBuildTimeServerManifestAsync } =\n await getStaticRenderFunctions(this.projectRoot, url, {\n minify,\n dev: mode !== 'production',\n // Ensure the API Routes are included\n environment: 'node',\n baseUrl,\n routerRoot,\n });\n\n return {\n serverManifest: await getBuildTimeServerManifestAsync(),\n // Get routes from Expo Router.\n manifest: await getManifest({ fetchData: true, preserveApiRoutes: false }),\n // Get route generating function\n async renderAsync(path: string) {\n return await getStaticContent(new URL(path, url));\n },\n };\n }\n\n async getStaticResourcesAsync({\n mode,\n minify = mode !== 'development',\n includeSourceMaps,\n baseUrl,\n mainModuleName,\n isExporting,\n asyncRoutes,\n routerRoot,\n }: {\n isExporting: boolean;\n mode: string;\n minify?: boolean;\n includeSourceMaps?: boolean;\n baseUrl?: string;\n mainModuleName?: string;\n asyncRoutes: boolean;\n routerRoot: string;\n }): Promise<{ artifacts: SerialAsset[]; assets?: AssetData[] }> {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n minify,\n environment: 'client',\n serializerOutput: 'static',\n serializerIncludeMaps: includeSourceMaps,\n mainModuleName:\n mainModuleName ?? resolveMainModuleName(this.projectRoot, { platform: 'web' }),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n asyncRoutes,\n baseUrl,\n isExporting,\n routerRoot,\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 debug(txt);\n\n // Metro can throw this error when the initial module id cannot be resolved.\n if (!results.ok && txt.startsWith('<!DOCTYPE html>')) {\n throw new ForwardHtmlError(\n `Metro failed to bundle the project. Check the console for more information.`,\n txt,\n results.status\n );\n }\n\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 throw error;\n }\n\n // NOTE: This could potentially need more validation in the future.\n if ('artifacts' in data && Array.isArray(data.artifacts)) {\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 getStaticPageAsync(\n pathname: string,\n {\n mode,\n minify = mode !== 'development',\n baseUrl,\n routerRoot,\n isExporting,\n asyncRoutes,\n }: {\n isExporting: boolean;\n mode: 'development' | 'production';\n minify?: boolean;\n baseUrl: string;\n asyncRoutes: boolean;\n routerRoot: string;\n }\n ) {\n const devBundleUrlPathname = createBundleUrlPath({\n platform: 'web',\n mode,\n environment: 'client',\n mainModuleName: resolveMainModuleName(this.projectRoot, { platform: 'web' }),\n lazy: shouldEnableAsyncImports(this.projectRoot),\n baseUrl,\n isExporting,\n asyncRoutes,\n routerRoot,\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 baseUrl,\n routerRoot,\n }\n );\n\n const location = new URL(pathname, this.getDevServerUrl()!);\n return await getStaticContent(location);\n };\n\n const [{ artifacts: resources }, staticHtml] = await Promise.all([\n this.getStaticResourcesAsync({ isExporting, mode, minify, baseUrl, asyncRoutes, routerRoot }),\n bundleStaticHtml(),\n ]);\n const content = serializeHtmlWithAssets({\n mode,\n resources,\n template: staticHtml,\n devBundleUrl: devBundleUrlPathname,\n baseUrl,\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\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 isExporting: !!options.isExporting,\n }\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 middleware.use(\n new DevToolsPluginMiddleware(this.projectRoot, this.devToolsPluginManager).getHandler()\n );\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 useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\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 (useServerRendering) {\n const baseUrl = getBaseUrlFromExpoConfig(exp);\n const asyncRoutes = getAsyncRoutesFromExpoConfig(exp, options.mode ?? 'development', 'web');\n const routerRoot = getRouterDirectoryModuleIdWithManifest(this.projectRoot, exp);\n const appDir = path.join(this.projectRoot, routerRoot);\n middleware.use(\n createRouteHandlerMiddleware(this.projectRoot, {\n ...options,\n appDir,\n baseUrl,\n routerRoot,\n getWebBundleUrl: manifestMiddleware.getWebBundleUrl.bind(manifestMiddleware),\n getStaticPageAsync: (pathname) => {\n return this.getStaticPageAsync(pathname, {\n isExporting: !!options.isExporting,\n mode: options.mode ?? 'development',\n minify: options.minify,\n baseUrl,\n asyncRoutes,\n routerRoot,\n });\n },\n })\n );\n\n if (exp.web?.output === 'server') {\n // Cache observation for API Routes...\n observeApiRouteChanges(\n appDir,\n {\n metro,\n server,\n },\n async (filepath, op) => {\n if (isApiRouteConvention(filepath)) {\n debug(`[expo-cli] ${op} ${filepath}`);\n if (op === 'change' || op === 'add') {\n rebundleApiRoute(this.projectRoot, filepath, {\n ...options,\n routerRoot,\n baseUrl,\n });\n }\n\n if (op === 'delete') {\n // TODO: Cancel the bundling of the deleted route.\n }\n }\n }\n );\n }\n } else {\n // This MUST run last since it's the fallback.\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.js'\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 return 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"],"names":["getDeepLinkHandler","runtimeEnv","ForwardHtmlError","CommandError","constructor","message","html","statusCode","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","exportExpoRouterApiRoutesAsync","mode","outputDir","prerenderManifest","baseUrl","routerRoot","appDir","path","join","projectRoot","manifest","getExpoRouterRoutesManifestAsync","files","Map","route","apiRoutes","filepath","file","contents","bundleApiRoute","getInstance","location","shouldThrow","artifactFilename","relative","replace","set","targetDomain","htmlRoutes","fetchManifest","asJson","getStaticRenderFunctionAsync","minify","url","getDevServerUrl","getStaticContent","getManifest","getBuildTimeServerManifestAsync","getStaticRenderFunctions","dev","environment","serverManifest","fetchData","preserveApiRoutes","renderAsync","URL","getStaticResourcesAsync","includeSourceMaps","mainModuleName","isExporting","asyncRoutes","data","devBundleUrlPathname","createBundleUrlPath","platform","serializerOutput","serializerIncludeMaps","resolveMainModuleName","lazy","shouldEnableAsyncImports","bundleUrl","results","fetch","toString","txt","text","JSON","parse","error","ok","startsWith","status","Log","Array","isArray","artifacts","errors","type","match","Error","getStaticPageAsync","pathname","bundleStaticHtml","resources","staticHtml","Promise","all","content","serializeHtmlWithAssets","template","devBundleUrl","watchEnvironmentVariables","instance","envFiles","getFiles","NODE_ENV","map","fileName","observeFileChanges","server","load","force","startImplementationAsync","urlCreator","getUrlCreator","parsedOptions","maxWorkers","resetCache","resetDevServer","EXPO_DEV_SERVER_ORIGIN","middleware","messageSocket","instantiateMetroAsync","manifestMiddleware","getManifestMiddlewareAsync","prependMiddleware","ContextModuleSourceMapsMiddleware","getHandler","use","InterstitialPageMiddleware","scheme","ReactDevToolsPageMiddleware","DevToolsPluginMiddleware","devToolsPluginManager","deepLinkMiddleware","RuntimeRedirectMiddleware","onDeepLink","getLocation","runtime","constructDevClientUrl","constructUrl","CreateFileMiddleware","isTargetingWeb","exp","getConfig","skipSDKVersionRequirement","useServerRendering","includes","web","output","ServeStaticMiddleware","FaviconMiddleware","getBaseUrlFromExpoConfig","getAsyncRoutesFromExpoConfig","getRouterDirectoryModuleIdWithManifest","createRouteHandlerMiddleware","getWebBundleUrl","bind","observeApiRouteChanges","op","isApiRouteConvention","rebundleApiRoute","HistoryFallbackMiddleware","internal","originalClose","close","callback","err","host","protocol","waitForTypeScriptAsync","resolve","off","metroWatchTypeScriptFiles","tsconfig","throttle","eventTypes","TypeScriptProjectPrerequisite","req","bootstrapAsync","log","chalk","red","exception","startTypeScriptServices","startTypescriptTypeGenerationAsync","getConfigModuleIds","logEventAsync","getDevClientProperties"],"mappings":"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"}
|
|
@@ -6,8 +6,9 @@ exports.loadMetroConfigAsync = loadMetroConfigAsync;
|
|
|
6
6
|
exports.instantiateMetroAsync = instantiateMetroAsync;
|
|
7
7
|
exports.isWatchEnabled = isWatchEnabled;
|
|
8
8
|
var _config = require("@expo/config");
|
|
9
|
-
var
|
|
9
|
+
var _metroConfig = require("@expo/metro-config");
|
|
10
10
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
11
|
+
var _metroConfig1 = require("metro-config");
|
|
11
12
|
var _metroCore = require("metro-core");
|
|
12
13
|
var _semver = _interopRequireDefault(require("semver"));
|
|
13
14
|
var _url = require("url");
|
|
@@ -21,6 +22,7 @@ var _metroDebuggerMiddleware = require("../../../utils/analytics/metroDebuggerMi
|
|
|
21
22
|
var _rudderstackClient = require("../../../utils/analytics/rudderstackClient");
|
|
22
23
|
var _env = require("../../../utils/env");
|
|
23
24
|
var _manifestMiddleware = require("../middleware/ManifestMiddleware");
|
|
25
|
+
var _createJsInspectorMiddleware = require("../middleware/inspector/createJsInspectorMiddleware");
|
|
24
26
|
var _mutations = require("../middleware/mutations");
|
|
25
27
|
var _remoteDevtoolsCorsMiddleware = require("../middleware/remoteDevtoolsCorsMiddleware");
|
|
26
28
|
var _remoteDevtoolsSecurityHeadersMiddleware = require("../middleware/remoteDevtoolsSecurityHeadersMiddleware");
|
|
@@ -31,27 +33,6 @@ function _interopRequireDefault(obj) {
|
|
|
31
33
|
default: obj
|
|
32
34
|
};
|
|
33
35
|
}
|
|
34
|
-
function _interopRequireWildcard(obj) {
|
|
35
|
-
if (obj && obj.__esModule) {
|
|
36
|
-
return obj;
|
|
37
|
-
} else {
|
|
38
|
-
var newObj = {};
|
|
39
|
-
if (obj != null) {
|
|
40
|
-
for(var key in obj){
|
|
41
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
42
|
-
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
43
|
-
if (desc.get || desc.set) {
|
|
44
|
-
Object.defineProperty(newObj, key, desc);
|
|
45
|
-
} else {
|
|
46
|
-
newObj[key] = obj[key];
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
newObj.default = obj;
|
|
52
|
-
return newObj;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
36
|
function gteSdkVersion(exp, sdkVersion) {
|
|
56
37
|
if (!exp.sdkVersion) {
|
|
57
38
|
return false;
|
|
@@ -73,18 +54,23 @@ async function loadMetroConfigAsync(projectRoot, options, { exp =(0, _config).ge
|
|
|
73
54
|
const serverRoot = (0, _manifestMiddleware).getMetroServerRoot(projectRoot);
|
|
74
55
|
const terminal = new _metroCore.Terminal(process.stdout);
|
|
75
56
|
const terminalReporter = new _metroTerminalReporter.MetroTerminalReporter(serverRoot, terminal);
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
57
|
+
const hasConfig = await (0, _metroConfig1).resolveConfig(options.config, projectRoot);
|
|
58
|
+
let config = {
|
|
59
|
+
...await (0, _metroConfig1).loadConfig({
|
|
60
|
+
cwd: projectRoot,
|
|
61
|
+
projectRoot,
|
|
62
|
+
...options
|
|
63
|
+
}, // If the project does not have a metro.config.js, then we use the default config.
|
|
64
|
+
hasConfig.isEmpty ? (0, _metroConfig).getDefaultConfig(projectRoot) : undefined),
|
|
65
|
+
reporter: {
|
|
66
|
+
update (event) {
|
|
67
|
+
terminalReporter.update(event);
|
|
68
|
+
if (reportEvent) {
|
|
69
|
+
reportEvent(event);
|
|
70
|
+
}
|
|
81
71
|
}
|
|
82
72
|
}
|
|
83
73
|
};
|
|
84
|
-
let config = await ExpoMetroConfig.loadAsync(projectRoot, {
|
|
85
|
-
reporter,
|
|
86
|
-
...options
|
|
87
|
-
});
|
|
88
74
|
if (// Requires SDK 50 for expo-assets hashAssetPlugin change.
|
|
89
75
|
!exp.sdkVersion || gteSdkVersion(exp, "50.0.0")) {
|
|
90
76
|
if (isExporting) {
|
|
@@ -159,6 +145,7 @@ async function instantiateMetroAsync(metroBundler, options, { isExporting }) {
|
|
|
159
145
|
// Initialize all React Native debug features
|
|
160
146
|
const { debugMiddleware , debugWebsocketEndpoints } = (0, _createDebugMiddleware).createDebugMiddleware(metroBundler);
|
|
161
147
|
(0, _mutations).prependMiddleware(middleware, debugMiddleware);
|
|
148
|
+
middleware.use("/_expo/debugger", (0, _createJsInspectorMiddleware).createJsInspectorMiddleware());
|
|
162
149
|
const { server: server1 , metro } = await (0, _runServerFork).runServer(metroBundler, metroConfig, {
|
|
163
150
|
// @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api
|
|
164
151
|
websocketEndpoints: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport * as ExpoMetroConfig from '@expo/metro-config';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport { Server as ConnectServer } from 'connect';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\nimport semver from 'semver';\nimport { URL } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { createDebugMiddleware } from './debugging/createDebugMiddleware';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { MetroDevServerOptions } from '../../../export/fork-bundleAsync';\nimport { Log } from '../../../log';\nimport { getMetroProperties } from '../../../utils/analytics/getMetroProperties';\nimport { createDebuggerTelemetryMiddleware } from '../../../utils/analytics/metroDebuggerMiddleware';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { getMetroServerRoot } from '../middleware/ManifestMiddleware';\nimport { prependMiddleware, replaceMiddlewareWith } from '../middleware/mutations';\nimport { remoteDevtoolsCorsMiddleware } from '../middleware/remoteDevtoolsCorsMiddleware';\nimport { remoteDevtoolsSecurityHeadersMiddleware } from '../middleware/remoteDevtoolsSecurityHeadersMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { suppressRemoteDebuggingErrorMiddleware } from '../middleware/suppressErrorMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\nfunction gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n isExporting,\n }: { exp?: ExpoConfig; isExporting: boolean }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n const serverRoot = getMetroServerRoot(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n };\n\n let config = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n if (\n // Requires SDK 50 for expo-assets hashAssetPlugin change.\n !exp.sdkVersion ||\n gteSdkVersion(exp, '50.0.0')\n ) {\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.baseUrl ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n } else {\n if (isExporting && exp.experiments?.baseUrl) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = exp.experiments?.baseUrl;\n }\n }\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n platformBundlers,\n isTsconfigPathsEnabled: exp.experiments?.tsconfigPaths ?? true,\n webOutput: exp.web?.output ?? 'single',\n isFastResolverEnabled: env.EXPO_USE_FAST_RESOLVER,\n isExporting,\n });\n\n if (process.env.NODE_ENV !== 'test') {\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\n }\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: Omit<MetroDevServerOptions, 'logger'>,\n { isExporting }: { isExporting: boolean }\n): Promise<{\n metro: Metro.Server;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n });\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n { exp, isExporting }\n );\n\n const { createDevServerMiddleware, securityHeadersMiddleware } =\n require('@react-native-community/cli-server-api') as typeof import('@react-native-community/cli-server-api');\n\n const { middleware, messageSocketEndpoint, eventsSocketEndpoint, websocketEndpoints } =\n createDevServerMiddleware({\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n // securityHeadersMiddleware does not support cross-origin requests for remote devtools to get the sourcemap.\n // We replace with the enhanced version.\n replaceMiddlewareWith(\n middleware as ConnectServer,\n securityHeadersMiddleware,\n remoteDevtoolsSecurityHeadersMiddleware\n );\n\n middleware.use(remoteDevtoolsCorsMiddleware);\n\n prependMiddleware(middleware, suppressRemoteDebuggingErrorMiddleware);\n\n // TODO: We can probably drop this now.\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n middleware.use(createDebuggerTelemetryMiddleware(projectRoot, exp));\n\n // Initialize all React Native debug features\n const { debugMiddleware, debugWebsocketEndpoints } = createDebugMiddleware(metroBundler);\n prependMiddleware(middleware, debugMiddleware);\n\n const { server, metro } = await runServer(metroBundler, metroConfig, {\n // @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api\n websocketEndpoints: {\n ...websocketEndpoints,\n ...debugWebsocketEndpoints,\n },\n watch: !isExporting && isWatchEnabled(),\n });\n\n prependMiddleware(middleware, (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n // If the URL is a Metro asset request, then we need to skip all other middleware to prevent\n // the community CLI's serve-static from hosting `/assets/index.html` in place of all assets if it exists.\n // /assets/?unstable_path=.\n if (req.url) {\n const url = new URL(req.url!, 'http://localhost:8000');\n if (url.pathname.match(/^\\/assets\\/?/) && url.searchParams.get('unstable_path') != null) {\n return metro.processRequest(req, res, next);\n }\n }\n return next();\n });\n\n setEventReporter(eventsSocketEndpoint.reportEvent);\n\n return {\n metro,\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["loadMetroConfigAsync","instantiateMetroAsync","isWatchEnabled","ExpoMetroConfig","gteSdkVersion","exp","sdkVersion","semver","gte","Error","projectRoot","options","getConfig","skipSDKVersionRequirement","isExporting","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","config","loadAsync","transformer","publicPath","experiments","baseUrl","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","tsconfigPaths","webOutput","web","output","isFastResolverEnabled","env","EXPO_USE_FAST_RESOLVER","NODE_ENV","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","createDevServerMiddleware","securityHeadersMiddleware","require","middleware","messageSocketEndpoint","eventsSocketEndpoint","websocketEndpoints","port","server","watchFolders","replaceMiddlewareWith","remoteDevtoolsSecurityHeadersMiddleware","use","remoteDevtoolsCorsMiddleware","prependMiddleware","suppressRemoteDebuggingErrorMiddleware","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","createDebuggerTelemetryMiddleware","debugMiddleware","debugWebsocketEndpoints","createDebugMiddleware","metro","runServer","watch","req","res","next","url","URL","pathname","match","searchParams","get","processRequest","messageSocket","CI","Log","log","chalk"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { getDefaultConfig, LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport { Server as ConnectServer } from 'connect';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { loadConfig, resolveConfig, ConfigT } from 'metro-config';\nimport { Terminal } from 'metro-core';\nimport semver from 'semver';\nimport { URL } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { createDebugMiddleware } from './debugging/createDebugMiddleware';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { MetroDevServerOptions } from '../../../export/fork-bundleAsync';\nimport { Log } from '../../../log';\nimport { getMetroProperties } from '../../../utils/analytics/getMetroProperties';\nimport { createDebuggerTelemetryMiddleware } from '../../../utils/analytics/metroDebuggerMiddleware';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { getMetroServerRoot } from '../middleware/ManifestMiddleware';\nimport { createJsInspectorMiddleware } from '../middleware/inspector/createJsInspectorMiddleware';\nimport { prependMiddleware, replaceMiddlewareWith } from '../middleware/mutations';\nimport { remoteDevtoolsCorsMiddleware } from '../middleware/remoteDevtoolsCorsMiddleware';\nimport { remoteDevtoolsSecurityHeadersMiddleware } from '../middleware/remoteDevtoolsSecurityHeadersMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { suppressRemoteDebuggingErrorMiddleware } from '../middleware/suppressErrorMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\nfunction gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n isExporting,\n }: { exp?: ExpoConfig; isExporting: boolean }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n const serverRoot = getMetroServerRoot(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const hasConfig = await resolveConfig(options.config, projectRoot);\n let config: ConfigT = {\n ...(await loadConfig(\n { cwd: projectRoot, projectRoot, ...options },\n // If the project does not have a metro.config.js, then we use the default config.\n hasConfig.isEmpty ? getDefaultConfig(projectRoot) : undefined\n )),\n reporter: {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n },\n };\n\n if (\n // Requires SDK 50 for expo-assets hashAssetPlugin change.\n !exp.sdkVersion ||\n gteSdkVersion(exp, '50.0.0')\n ) {\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = `/assets?export_path=${\n (exp.experiments?.baseUrl ?? '') + '/assets'\n }`;\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n } else {\n if (isExporting && exp.experiments?.baseUrl) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = exp.experiments?.baseUrl;\n }\n }\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n config,\n platformBundlers,\n isTsconfigPathsEnabled: exp.experiments?.tsconfigPaths ?? true,\n webOutput: exp.web?.output ?? 'single',\n isFastResolverEnabled: env.EXPO_USE_FAST_RESOLVER,\n isExporting,\n });\n\n if (process.env.NODE_ENV !== 'test') {\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\n }\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: Omit<MetroDevServerOptions, 'logger'>,\n { isExporting }: { isExporting: boolean }\n): Promise<{\n metro: Metro.Server;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n });\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n { exp, isExporting }\n );\n\n const { createDevServerMiddleware, securityHeadersMiddleware } =\n require('@react-native-community/cli-server-api') as typeof import('@react-native-community/cli-server-api');\n\n const { middleware, messageSocketEndpoint, eventsSocketEndpoint, websocketEndpoints } =\n createDevServerMiddleware({\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n // securityHeadersMiddleware does not support cross-origin requests for remote devtools to get the sourcemap.\n // We replace with the enhanced version.\n replaceMiddlewareWith(\n middleware as ConnectServer,\n securityHeadersMiddleware,\n remoteDevtoolsSecurityHeadersMiddleware\n );\n\n middleware.use(remoteDevtoolsCorsMiddleware);\n\n prependMiddleware(middleware, suppressRemoteDebuggingErrorMiddleware);\n\n // TODO: We can probably drop this now.\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n middleware.use(createDebuggerTelemetryMiddleware(projectRoot, exp));\n\n // Initialize all React Native debug features\n const { debugMiddleware, debugWebsocketEndpoints } = createDebugMiddleware(metroBundler);\n prependMiddleware(middleware, debugMiddleware);\n middleware.use('/_expo/debugger', createJsInspectorMiddleware());\n\n const { server, metro } = await runServer(metroBundler, metroConfig, {\n // @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api\n websocketEndpoints: {\n ...websocketEndpoints,\n ...debugWebsocketEndpoints,\n },\n watch: !isExporting && isWatchEnabled(),\n });\n\n prependMiddleware(middleware, (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n // If the URL is a Metro asset request, then we need to skip all other middleware to prevent\n // the community CLI's serve-static from hosting `/assets/index.html` in place of all assets if it exists.\n // /assets/?unstable_path=.\n if (req.url) {\n const url = new URL(req.url!, 'http://localhost:8000');\n if (url.pathname.match(/^\\/assets\\/?/) && url.searchParams.get('unstable_path') != null) {\n return metro.processRequest(req, res, next);\n }\n }\n return next();\n });\n\n setEventReporter(eventsSocketEndpoint.reportEvent);\n\n return {\n metro,\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["loadMetroConfigAsync","instantiateMetroAsync","isWatchEnabled","gteSdkVersion","exp","sdkVersion","semver","gte","Error","projectRoot","options","getConfig","skipSDKVersionRequirement","isExporting","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","hasConfig","resolveConfig","config","loadConfig","cwd","isEmpty","getDefaultConfig","undefined","reporter","update","event","transformer","publicPath","experiments","baseUrl","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","isTsconfigPathsEnabled","tsconfigPaths","webOutput","web","output","isFastResolverEnabled","env","EXPO_USE_FAST_RESOLVER","NODE_ENV","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","createDevServerMiddleware","securityHeadersMiddleware","require","middleware","messageSocketEndpoint","eventsSocketEndpoint","websocketEndpoints","port","server","watchFolders","replaceMiddlewareWith","remoteDevtoolsSecurityHeadersMiddleware","use","remoteDevtoolsCorsMiddleware","prependMiddleware","suppressRemoteDebuggingErrorMiddleware","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","createDebuggerTelemetryMiddleware","debugMiddleware","debugWebsocketEndpoints","createDebugMiddleware","createJsInspectorMiddleware","metro","runServer","watch","req","res","next","url","URL","pathname","match","searchParams","get","processRequest","messageSocket","CI","Log","log","chalk"],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.createJsInspectorMiddleware = createJsInspectorMiddleware;
|
|
6
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
7
|
+
var _net = _interopRequireDefault(require("net"));
|
|
8
|
+
var _tls = require("tls");
|
|
9
|
+
var _url = require("url");
|
|
10
|
+
var _jsInspector = require("./JsInspector");
|
|
11
|
+
function _interopRequireDefault(obj) {
|
|
12
|
+
return obj && obj.__esModule ? obj : {
|
|
13
|
+
default: obj
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function createJsInspectorMiddleware() {
|
|
17
|
+
return async function(req, res, next) {
|
|
18
|
+
var _url1;
|
|
19
|
+
const { origin , searchParams } = new _url.URL((_url1 = req.url) != null ? _url1 : "/", getServerBase(req));
|
|
20
|
+
const appId = searchParams.get("appId") || searchParams.get("applicationId");
|
|
21
|
+
if (!appId) {
|
|
22
|
+
res.writeHead(400).end('Missing application identifier ("?appId=...")');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const app = await (0, _jsInspector).queryInspectorAppAsync(origin, appId);
|
|
26
|
+
if (!app) {
|
|
27
|
+
res.writeHead(404).end("Unable to find inspector target from @react-native/dev-middleware");
|
|
28
|
+
console.warn(_chalk.default.yellow("No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine."));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (req.method === "GET") {
|
|
32
|
+
const data = JSON.stringify(app);
|
|
33
|
+
res.writeHead(200, {
|
|
34
|
+
"Content-Type": "application/json; charset=UTF-8",
|
|
35
|
+
"Cache-Control": "no-cache",
|
|
36
|
+
"Content-Length": data.length.toString()
|
|
37
|
+
});
|
|
38
|
+
res.end(data);
|
|
39
|
+
} else if (req.method === "POST" || req.method === "PUT") {
|
|
40
|
+
try {
|
|
41
|
+
await (0, _jsInspector).openJsInspector(origin, app);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
var ref;
|
|
44
|
+
// abort(Error: Command failed: osascript -e POSIX path of (path to application "google chrome")
|
|
45
|
+
// 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)
|
|
46
|
+
console.error(_chalk.default.red("Error launching JS inspector: " + ((ref = error == null ? void 0 : error.message) != null ? ref : "Unknown error occurred")));
|
|
47
|
+
res.writeHead(500);
|
|
48
|
+
res.end();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
res.end();
|
|
52
|
+
} else {
|
|
53
|
+
res.writeHead(405);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function getServerBase(req) {
|
|
58
|
+
const scheme = req.socket instanceof _tls.TLSSocket && req.socket.encrypted === true ? "https" : "http";
|
|
59
|
+
const { localAddress , localPort } = req.socket;
|
|
60
|
+
const address = localAddress && _net.default.isIPv6(localAddress) ? `[${localAddress}]` : localAddress;
|
|
61
|
+
return `${scheme}:${address}:${localPort}`;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=createJsInspectorMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/createJsInspectorMiddleware.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { NextHandleFunction } from 'connect';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport net from 'net';\nimport { TLSSocket } from 'tls';\nimport { URL } from 'url';\n\nimport { openJsInspector, queryInspectorAppAsync } from './JsInspector';\n\n/**\n * Create a middleware that handles new requests to open the debugger from the dev menu.\n * @todo(cedric): delete this middleware once we fully swap over to the new React Native JS Inspector.\n */\nexport function createJsInspectorMiddleware(): NextHandleFunction {\n return async function (req: IncomingMessage, res: ServerResponse, next: (err?: Error) => void) {\n const { origin, searchParams } = new URL(req.url ?? '/', getServerBase(req));\n const appId = searchParams.get('appId') || searchParams.get('applicationId');\n if (!appId) {\n res.writeHead(400).end('Missing application identifier (\"?appId=...\")');\n return;\n }\n\n const app = await queryInspectorAppAsync(origin, appId);\n if (!app) {\n res.writeHead(404).end('Unable to find inspector target from @react-native/dev-middleware');\n console.warn(\n chalk.yellow(\n 'No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine.'\n )\n );\n return;\n }\n\n if (req.method === 'GET') {\n const data = JSON.stringify(app);\n res.writeHead(200, {\n 'Content-Type': 'application/json; charset=UTF-8',\n 'Cache-Control': 'no-cache',\n 'Content-Length': data.length.toString(),\n });\n res.end(data);\n } else if (req.method === 'POST' || req.method === 'PUT') {\n try {\n await openJsInspector(origin, app);\n } catch (error: any) {\n // abort(Error: Command failed: osascript -e POSIX path of (path to application \"google chrome\")\n // 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)\n\n console.error(\n chalk.red('Error launching JS inspector: ' + (error?.message ?? 'Unknown error occurred'))\n );\n res.writeHead(500);\n res.end();\n return;\n }\n res.end();\n } else {\n res.writeHead(405);\n }\n };\n}\n\nfunction getServerBase(req: IncomingMessage): string {\n const scheme =\n req.socket instanceof TLSSocket && req.socket.encrypted === true ? 'https' : 'http';\n const { localAddress, localPort } = req.socket;\n const address = localAddress && net.isIPv6(localAddress) ? `[${localAddress}]` : localAddress;\n return `${scheme}:${address}:${localPort}`;\n}\n"],"names":["createJsInspectorMiddleware","req","res","next","origin","searchParams","URL","url","getServerBase","appId","get","writeHead","end","app","queryInspectorAppAsync","console","warn","chalk","yellow","method","data","JSON","stringify","length","toString","openJsInspector","error","red","message","scheme","socket","TLSSocket","encrypted","localAddress","localPort","address","net","isIPv6"],"mappings":"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"}
|
|
@@ -94,7 +94,7 @@ async function logEventAsync(event, properties = {}) {
|
|
|
94
94
|
}
|
|
95
95
|
const { userId , deviceId } = identifyData;
|
|
96
96
|
const commonEventProperties = {
|
|
97
|
-
source_version: "0.16.
|
|
97
|
+
source_version: "0.16.2",
|
|
98
98
|
source: "expo"
|
|
99
99
|
};
|
|
100
100
|
const identity = {
|
|
@@ -135,7 +135,7 @@ function getContext() {
|
|
|
135
135
|
},
|
|
136
136
|
app: {
|
|
137
137
|
name: "expo",
|
|
138
|
-
version: "0.16.
|
|
138
|
+
version: "0.16.2"
|
|
139
139
|
},
|
|
140
140
|
ci: ciInfo.isCI ? {
|
|
141
141
|
name: ciInfo.name,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/cli",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.2",
|
|
4
4
|
"description": "The Expo CLI",
|
|
5
5
|
"main": "build/bin/cli",
|
|
6
6
|
"bin": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@expo/devcert": "^1.0.0",
|
|
45
45
|
"@expo/env": "~0.2.0",
|
|
46
46
|
"@expo/json-file": "^8.2.37",
|
|
47
|
-
"@expo/metro-config": "~0.16.
|
|
47
|
+
"@expo/metro-config": "~0.16.1",
|
|
48
48
|
"@expo/osascript": "^2.0.31",
|
|
49
49
|
"@expo/package-manager": "^1.1.1",
|
|
50
50
|
"@expo/plist": "^0.1.0",
|
|
@@ -159,5 +159,5 @@
|
|
|
159
159
|
"tree-kill": "^1.2.2",
|
|
160
160
|
"tsd": "^0.28.1"
|
|
161
161
|
},
|
|
162
|
-
"gitHead": "
|
|
162
|
+
"gitHead": "de557eedeac8719dc9a4ec61648986bac4d7fdfc"
|
|
163
163
|
}
|