@expo/cli 0.19.8 → 0.19.9
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 +1 -1
- package/build/src/install/utils/checkPackagesCompatibility.js +1 -1
- package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +5 -2
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
- package/build/src/utils/telemetry/utils/context.js +1 -1
- package/package.json +2 -2
package/build/bin/cli
CHANGED
|
@@ -43,7 +43,7 @@ async function checkPackagesCompatibility(packages) {
|
|
|
43
43
|
return ((ref = packageMetadata[packageName]) == null ? void 0 : ref.newArchitecture) === "unsupported";
|
|
44
44
|
});
|
|
45
45
|
if (incompatiblePackages.length) {
|
|
46
|
-
_log.Log.warn(_chalk().default.yellow(`${_chalk().default.bold("Warning")}: ${formatPackageNames(incompatiblePackages)} do not support the New Architecture. ${(0, _link.learnMore)("https://docs.expo.dev/guides/new-architecture/")}`));
|
|
46
|
+
_log.Log.warn(_chalk().default.yellow(`${_chalk().default.bold("Warning")}: ${formatPackageNames(incompatiblePackages)} do${incompatiblePackages.length > 1 ? "" : "es"} not support the New Architecture. ${(0, _link.learnMore)("https://docs.expo.dev/guides/new-architecture/")}`));
|
|
47
47
|
}
|
|
48
48
|
} catch {
|
|
49
49
|
_log.Log.log(_chalk().default.gray(ERROR_MESSAGE));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/install/utils/checkPackagesCompatibility.ts"],"sourcesContent":["// note(Simek): https://github.com/react-native-community/directory/blob/main/pages/api/libraries/check.ts\nimport chalk from 'chalk';\n\nimport { Log } from '../../log';\nimport { fetch } from '../../utils/fetch';\nimport { learnMore } from '../../utils/link';\n\nexport type ReactNativeDirectoryCheckResult = {\n unmaintained: boolean;\n newArchitecture: 'supported' | 'unsupported' | 'untested';\n};\n\nconst ERROR_MESSAGE =\n 'Unable to fetch compatibility data from React Native Directory. Skipping check.';\n\nexport async function checkPackagesCompatibility(packages: string[]) {\n try {\n const response = await fetch('https://reactnative.directory/api/libraries/check', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ packages }),\n });\n\n if (!response.ok) {\n Log.log(chalk.gray(ERROR_MESSAGE));\n }\n\n const packageMetadata = (await response.json()) as Record<\n string,\n ReactNativeDirectoryCheckResult\n >;\n\n const incompatiblePackages = packages.filter(\n (packageName) => packageMetadata[packageName]?.newArchitecture === 'unsupported'\n );\n\n if (incompatiblePackages.length) {\n Log.warn(\n chalk.yellow(\n `${chalk.bold('Warning')}: ${formatPackageNames(incompatiblePackages)} do not support the New Architecture. ${learnMore('https://docs.expo.dev/guides/new-architecture/')}`\n )\n );\n }\n } catch {\n Log.log(chalk.gray(ERROR_MESSAGE));\n }\n}\n\nfunction formatPackageNames(incompatiblePackages: string[]) {\n if (incompatiblePackages.length === 1) {\n return incompatiblePackages.join();\n }\n\n const lastPackage = incompatiblePackages.pop();\n return `${incompatiblePackages.join(', ')} and ${lastPackage}`;\n}\n"],"names":["checkPackagesCompatibility","ERROR_MESSAGE","packages","response","fetch","method","headers","body","JSON","stringify","ok","Log","log","chalk","gray","packageMetadata","json","incompatiblePackages","filter","packageName","newArchitecture","length","warn","yellow","bold","formatPackageNames","learnMore","join","lastPackage","pop"],"mappings":"AAAA,0GAA0G;AAC1G;;;;+BAcsBA,4BAA0B;;aAA1BA,0BAA0B;;;8DAd9B,OAAO;;;;;;qBAEL,WAAW;uBACT,mBAAmB;sBACf,kBAAkB;;;;;;AAO5C,MAAMC,aAAa,GACjB,iFAAiF,AAAC;AAE7E,eAAeD,0BAA0B,CAACE,QAAkB,EAAE;IACnE,IAAI;QACF,MAAMC,QAAQ,GAAG,MAAMC,IAAAA,MAAK,MAAA,EAAC,mDAAmD,EAAE;YAChFC,MAAM,EAAE,MAAM;YACdC,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;gBAAEP,QAAQ;aAAE,CAAC;SACnC,CAAC,AAAC;QAEH,IAAI,CAACC,QAAQ,CAACO,EAAE,EAAE;YAChBC,IAAG,IAAA,CAACC,GAAG,CAACC,MAAK,EAAA,QAAA,CAACC,IAAI,CAACb,aAAa,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,MAAMc,eAAe,GAAI,MAAMZ,QAAQ,CAACa,IAAI,EAAE,AAG7C,AAAC;QAEF,MAAMC,oBAAoB,GAAGf,QAAQ,CAACgB,MAAM,CAC1C,CAACC,WAAW;gBAAKJ,GAA4B;YAA5BA,OAAAA,CAAAA,CAAAA,GAA4B,GAA5BA,eAAe,CAACI,WAAW,CAAC,SAAiB,GAA7CJ,KAAAA,CAA6C,GAA7CA,GAA4B,CAAEK,eAAe,CAAA,KAAK,aAAa,CAAA;SAAA,CACjF,AAAC;QAEF,IAAIH,oBAAoB,CAACI,MAAM,EAAE;YAC/BV,IAAG,IAAA,CAACW,IAAI,CACNT,MAAK,EAAA,QAAA,CAACU,MAAM,CACV,CAAC,EAAEV,MAAK,EAAA,QAAA,CAACW,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAEC,kBAAkB,CAACR,oBAAoB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"sources":["../../../../src/install/utils/checkPackagesCompatibility.ts"],"sourcesContent":["// note(Simek): https://github.com/react-native-community/directory/blob/main/pages/api/libraries/check.ts\nimport chalk from 'chalk';\n\nimport { Log } from '../../log';\nimport { fetch } from '../../utils/fetch';\nimport { learnMore } from '../../utils/link';\n\nexport type ReactNativeDirectoryCheckResult = {\n unmaintained: boolean;\n newArchitecture: 'supported' | 'unsupported' | 'untested';\n};\n\nconst ERROR_MESSAGE =\n 'Unable to fetch compatibility data from React Native Directory. Skipping check.';\n\nexport async function checkPackagesCompatibility(packages: string[]) {\n try {\n const response = await fetch('https://reactnative.directory/api/libraries/check', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ packages }),\n });\n\n if (!response.ok) {\n Log.log(chalk.gray(ERROR_MESSAGE));\n }\n\n const packageMetadata = (await response.json()) as Record<\n string,\n ReactNativeDirectoryCheckResult\n >;\n\n const incompatiblePackages = packages.filter(\n (packageName) => packageMetadata[packageName]?.newArchitecture === 'unsupported'\n );\n\n if (incompatiblePackages.length) {\n Log.warn(\n chalk.yellow(\n `${chalk.bold('Warning')}: ${formatPackageNames(incompatiblePackages)} do${incompatiblePackages.length > 1 ? '' : 'es'} not support the New Architecture. ${learnMore('https://docs.expo.dev/guides/new-architecture/')}`\n )\n );\n }\n } catch {\n Log.log(chalk.gray(ERROR_MESSAGE));\n }\n}\n\nfunction formatPackageNames(incompatiblePackages: string[]) {\n if (incompatiblePackages.length === 1) {\n return incompatiblePackages.join();\n }\n\n const lastPackage = incompatiblePackages.pop();\n return `${incompatiblePackages.join(', ')} and ${lastPackage}`;\n}\n"],"names":["checkPackagesCompatibility","ERROR_MESSAGE","packages","response","fetch","method","headers","body","JSON","stringify","ok","Log","log","chalk","gray","packageMetadata","json","incompatiblePackages","filter","packageName","newArchitecture","length","warn","yellow","bold","formatPackageNames","learnMore","join","lastPackage","pop"],"mappings":"AAAA,0GAA0G;AAC1G;;;;+BAcsBA,4BAA0B;;aAA1BA,0BAA0B;;;8DAd9B,OAAO;;;;;;qBAEL,WAAW;uBACT,mBAAmB;sBACf,kBAAkB;;;;;;AAO5C,MAAMC,aAAa,GACjB,iFAAiF,AAAC;AAE7E,eAAeD,0BAA0B,CAACE,QAAkB,EAAE;IACnE,IAAI;QACF,MAAMC,QAAQ,GAAG,MAAMC,IAAAA,MAAK,MAAA,EAAC,mDAAmD,EAAE;YAChFC,MAAM,EAAE,MAAM;YACdC,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;gBAAEP,QAAQ;aAAE,CAAC;SACnC,CAAC,AAAC;QAEH,IAAI,CAACC,QAAQ,CAACO,EAAE,EAAE;YAChBC,IAAG,IAAA,CAACC,GAAG,CAACC,MAAK,EAAA,QAAA,CAACC,IAAI,CAACb,aAAa,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,MAAMc,eAAe,GAAI,MAAMZ,QAAQ,CAACa,IAAI,EAAE,AAG7C,AAAC;QAEF,MAAMC,oBAAoB,GAAGf,QAAQ,CAACgB,MAAM,CAC1C,CAACC,WAAW;gBAAKJ,GAA4B;YAA5BA,OAAAA,CAAAA,CAAAA,GAA4B,GAA5BA,eAAe,CAACI,WAAW,CAAC,SAAiB,GAA7CJ,KAAAA,CAA6C,GAA7CA,GAA4B,CAAEK,eAAe,CAAA,KAAK,aAAa,CAAA;SAAA,CACjF,AAAC;QAEF,IAAIH,oBAAoB,CAACI,MAAM,EAAE;YAC/BV,IAAG,IAAA,CAACW,IAAI,CACNT,MAAK,EAAA,QAAA,CAACU,MAAM,CACV,CAAC,EAAEV,MAAK,EAAA,QAAA,CAACW,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAEC,kBAAkB,CAACR,oBAAoB,CAAC,CAAC,GAAG,EAAEA,oBAAoB,CAACI,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,mCAAmC,EAAEK,IAAAA,KAAS,UAAA,EAAC,gDAAgD,CAAC,CAAC,CAAC,CAC1N,CACF,CAAC;QACJ,CAAC;IACH,EAAE,OAAM;QACNf,IAAG,IAAA,CAACC,GAAG,CAACC,MAAK,EAAA,QAAA,CAACC,IAAI,CAACb,aAAa,CAAC,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,SAASwB,kBAAkB,CAACR,oBAA8B,EAAE;IAC1D,IAAIA,oBAAoB,CAACI,MAAM,KAAK,CAAC,EAAE;QACrC,OAAOJ,oBAAoB,CAACU,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,MAAMC,WAAW,GAAGX,oBAAoB,CAACY,GAAG,EAAE,AAAC;IAC/C,OAAO,CAAC,EAAEZ,oBAAoB,CAACU,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAEC,WAAW,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -244,13 +244,16 @@ class AsyncNgrok {
|
|
|
244
244
|
}
|
|
245
245
|
async getProjectRandomnessAsync() {
|
|
246
246
|
const { urlRandomness: randomness } = await _settings.ProjectSettings.readAsync(this.projectRoot);
|
|
247
|
-
if (randomness) {
|
|
247
|
+
if (randomness && /^[A-Za-z0-9]/.test(randomness)) {
|
|
248
248
|
return randomness;
|
|
249
249
|
}
|
|
250
250
|
return await this._resetProjectRandomnessAsync();
|
|
251
251
|
}
|
|
252
252
|
async _resetProjectRandomnessAsync() {
|
|
253
|
-
|
|
253
|
+
let randomness;
|
|
254
|
+
do {
|
|
255
|
+
randomness = _crypto().default.randomBytes(5).toString("base64url");
|
|
256
|
+
}while (randomness.startsWith("_")); // _ is an invalid character for a hostname
|
|
254
257
|
await _settings.ProjectSettings.setAsync(this.projectRoot, {
|
|
255
258
|
urlRandomness: randomness
|
|
256
259
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/server/AsyncNgrok.ts"],"sourcesContent":["import chalk from 'chalk';\nimport crypto from 'crypto';\nimport * as path from 'path';\nimport slugify from 'slugify';\n\nimport { getSettingsDirectory } from '../../api/user/UserSettings';\nimport { getActorDisplayName, getUserAsync } from '../../api/user/user';\nimport * as Log from '../../log';\nimport { delayAsync, resolveWithTimeout } from '../../utils/delay';\nimport { env } from '../../utils/env';\nimport { CommandError } from '../../utils/errors';\nimport { isNgrokClientError, NgrokInstance, NgrokResolver } from '../doctor/ngrok/NgrokResolver';\nimport { hasAdbReverseAsync, startAdbReverseAsync } from '../platforms/android/adbReverse';\nimport { ProjectSettings } from '../project/settings';\n\nconst debug = require('debug')('expo:start:server:ngrok') as typeof console.log;\n\nconst NGROK_CONFIG = {\n authToken: '5W1bR67GNbWcXqmxZzBG1_56GezNeaX6sSRvn8npeQ8',\n domain: 'exp.direct',\n};\n\nconst TUNNEL_TIMEOUT = 10 * 1000;\n\nexport class AsyncNgrok {\n /** Resolves the best instance of ngrok, exposed for testing. */\n resolver: NgrokResolver;\n\n /** Info about the currently running instance of ngrok. */\n private serverUrl: string | null = null;\n\n constructor(\n private projectRoot: string,\n private port: number\n ) {\n this.resolver = new NgrokResolver(projectRoot);\n }\n\n public getActiveUrl(): string | null {\n return this.serverUrl;\n }\n\n /** Exposed for testing. */\n async _getIdentifyingUrlSegmentsAsync(): Promise<string[]> {\n const user = await getUserAsync();\n if (user?.__typename === 'Robot') {\n throw new CommandError('NGROK_ROBOT', 'Cannot use ngrok with a robot user.');\n }\n const username = getActorDisplayName(user);\n\n return [\n // NOTE: https://github.com/expo/expo/pull/16556#discussion_r822944286\n await this.getProjectRandomnessAsync(),\n // Strip out periods from the username to avoid subdomain issues with SSL certificates.\n slugify(username, { remove: /\\./ }),\n // Use the port to distinguish between multiple tunnels (webpack, metro).\n String(this.port),\n ];\n }\n\n /** Exposed for testing. */\n async _getProjectHostnameAsync(): Promise<string> {\n return `${(await this._getIdentifyingUrlSegmentsAsync()).join('-')}.${NGROK_CONFIG.domain}`;\n }\n\n /** Exposed for testing. */\n async _getProjectSubdomainAsync(): Promise<string> {\n return (await this._getIdentifyingUrlSegmentsAsync()).join('-');\n }\n\n /** Start ngrok on the given port for the project. */\n async startAsync({ timeout }: { timeout?: number } = {}): Promise<void> {\n // Ensure the instance is loaded first, this can linger so we should run it before the timeout.\n await this.resolver.resolveAsync({\n // For now, prefer global install since the package has native code (harder to install) and doesn't change very often.\n prefersGlobalInstall: true,\n });\n\n // NOTE(EvanBacon): If the user doesn't have ADB installed,\n // then skip attempting to reverse the port.\n if (hasAdbReverseAsync()) {\n // Ensure ADB reverse is running.\n if (!(await startAdbReverseAsync([this.port]))) {\n // TODO: Better error message.\n throw new CommandError(\n 'NGROK_ADB',\n `Cannot start tunnel URL because \\`adb reverse\\` failed for the connected Android device(s).`\n );\n }\n }\n\n this.serverUrl = await this._connectToNgrokAsync({ timeout });\n\n debug('Tunnel URL:', this.serverUrl);\n Log.log('Tunnel ready.');\n }\n\n /** Stop the ngrok process if it's running. */\n public async stopAsync(): Promise<void> {\n debug('Stopping Tunnel');\n\n await this.resolver.get()?.kill?.();\n this.serverUrl = null;\n }\n\n /** Exposed for testing. */\n async _connectToNgrokAsync(\n options: { timeout?: number } = {},\n attempts: number = 0\n ): Promise<string> {\n // Attempt to stop any hanging processes, this increases the chances of a successful connection.\n await this.stopAsync();\n\n // Get the instance quietly or assert otherwise.\n const instance = await this.resolver.resolveAsync({\n shouldPrompt: false,\n autoInstall: false,\n });\n\n // TODO(Bacon): Consider dropping the timeout functionality:\n // https://github.com/expo/expo/pull/16556#discussion_r822307373\n const results = await resolveWithTimeout(\n () => this.connectToNgrokInternalAsync(instance, attempts),\n {\n timeout: options.timeout ?? TUNNEL_TIMEOUT,\n errorMessage: 'ngrok tunnel took too long to connect.',\n }\n );\n if (typeof results === 'string') {\n return results;\n }\n\n // Wait 100ms and then try again\n await delayAsync(100);\n\n return this._connectToNgrokAsync(options, attempts + 1);\n }\n\n private async _getConnectionPropsAsync(): Promise<{ hostname?: string; subdomain?: string }> {\n const userDefinedSubdomain = env.EXPO_TUNNEL_SUBDOMAIN;\n if (userDefinedSubdomain) {\n const subdomain =\n typeof userDefinedSubdomain === 'string'\n ? userDefinedSubdomain\n : await this._getProjectSubdomainAsync();\n debug('Subdomain:', subdomain);\n return { subdomain };\n } else {\n const hostname = await this._getProjectHostnameAsync();\n debug('Hostname:', hostname);\n return { hostname };\n }\n }\n\n private async connectToNgrokInternalAsync(\n instance: NgrokInstance,\n attempts: number = 0\n ): Promise<string | false> {\n try {\n // Global config path.\n const configPath = path.join(getSettingsDirectory(), 'ngrok.yml');\n debug('Global config path:', configPath);\n const urlProps = await this._getConnectionPropsAsync();\n\n const url = await instance.connect({\n ...urlProps,\n authtoken: NGROK_CONFIG.authToken,\n configPath,\n onStatusChange(status) {\n if (status === 'closed') {\n Log.error(\n chalk.red(\n 'Tunnel connection has been closed. This is often related to intermittent connection problems with the Ngrok servers. Restart the dev server to try connecting to Ngrok again.'\n ) + chalk.gray('\\nCheck the Ngrok status page for outages: https://status.ngrok.com/')\n );\n } else if (status === 'connected') {\n Log.log('Tunnel connected.');\n }\n },\n port: this.port,\n });\n return url;\n } catch (error: any) {\n const assertNgrok = () => {\n if (isNgrokClientError(error)) {\n throw new CommandError(\n 'NGROK_CONNECT',\n [\n error.body.msg,\n error.body.details?.err,\n chalk.gray('Check the Ngrok status page for outages: https://status.ngrok.com/'),\n ]\n .filter(Boolean)\n .join('\\n\\n')\n );\n }\n throw new CommandError(\n 'NGROK_CONNECT',\n error.toString() +\n chalk.gray('\\nCheck the Ngrok status page for outages: https://status.ngrok.com/')\n );\n };\n\n // Attempt to connect 3 times\n if (attempts >= 2) {\n assertNgrok();\n }\n\n // Attempt to fix the issue\n if (isNgrokClientError(error) && error.body.error_code === 103) {\n // Assert early if a custom subdomain is used since it cannot\n // be changed and retried. If the tunnel subdomain is a boolean\n // then we can reset the randomness and try again.\n if (typeof env.EXPO_TUNNEL_SUBDOMAIN === 'string') {\n assertNgrok();\n }\n // Change randomness to avoid conflict if killing ngrok doesn't help\n await this._resetProjectRandomnessAsync();\n }\n\n return false;\n }\n }\n\n private async getProjectRandomnessAsync() {\n const { urlRandomness: randomness } = await ProjectSettings.readAsync(this.projectRoot);\n if (randomness) {\n return randomness;\n }\n return await this._resetProjectRandomnessAsync();\n }\n\n async _resetProjectRandomnessAsync() {\n const randomness = crypto.randomBytes(5).toString('base64url');\n await ProjectSettings.setAsync(this.projectRoot, { urlRandomness: randomness });\n debug('Resetting project randomness:', randomness);\n return randomness;\n }\n}\n"],"names":["AsyncNgrok","debug","require","NGROK_CONFIG","authToken","domain","TUNNEL_TIMEOUT","constructor","projectRoot","port","serverUrl","resolver","NgrokResolver","getActiveUrl","_getIdentifyingUrlSegmentsAsync","user","getUserAsync","__typename","CommandError","username","getActorDisplayName","getProjectRandomnessAsync","slugify","remove","String","_getProjectHostnameAsync","join","_getProjectSubdomainAsync","startAsync","timeout","resolveAsync","prefersGlobalInstall","hasAdbReverseAsync","startAdbReverseAsync","_connectToNgrokAsync","Log","log","stopAsync","get","kill","options","attempts","instance","shouldPrompt","autoInstall","results","resolveWithTimeout","connectToNgrokInternalAsync","errorMessage","delayAsync","_getConnectionPropsAsync","userDefinedSubdomain","env","EXPO_TUNNEL_SUBDOMAIN","subdomain","hostname","configPath","path","getSettingsDirectory","urlProps","url","connect","authtoken","onStatusChange","status","error","chalk","red","gray","assertNgrok","isNgrokClientError","body","msg","details","err","filter","Boolean","toString","error_code","_resetProjectRandomnessAsync","urlRandomness","randomness","ProjectSettings","readAsync","crypto","randomBytes","setAsync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/start/server/AsyncNgrok.ts"],"sourcesContent":["import chalk from 'chalk';\nimport crypto from 'crypto';\nimport * as path from 'path';\nimport slugify from 'slugify';\n\nimport { getSettingsDirectory } from '../../api/user/UserSettings';\nimport { getActorDisplayName, getUserAsync } from '../../api/user/user';\nimport * as Log from '../../log';\nimport { delayAsync, resolveWithTimeout } from '../../utils/delay';\nimport { env } from '../../utils/env';\nimport { CommandError } from '../../utils/errors';\nimport { isNgrokClientError, NgrokInstance, NgrokResolver } from '../doctor/ngrok/NgrokResolver';\nimport { hasAdbReverseAsync, startAdbReverseAsync } from '../platforms/android/adbReverse';\nimport { ProjectSettings } from '../project/settings';\n\nconst debug = require('debug')('expo:start:server:ngrok') as typeof console.log;\n\nconst NGROK_CONFIG = {\n authToken: '5W1bR67GNbWcXqmxZzBG1_56GezNeaX6sSRvn8npeQ8',\n domain: 'exp.direct',\n};\n\nconst TUNNEL_TIMEOUT = 10 * 1000;\n\nexport class AsyncNgrok {\n /** Resolves the best instance of ngrok, exposed for testing. */\n resolver: NgrokResolver;\n\n /** Info about the currently running instance of ngrok. */\n private serverUrl: string | null = null;\n\n constructor(\n private projectRoot: string,\n private port: number\n ) {\n this.resolver = new NgrokResolver(projectRoot);\n }\n\n public getActiveUrl(): string | null {\n return this.serverUrl;\n }\n\n /** Exposed for testing. */\n async _getIdentifyingUrlSegmentsAsync(): Promise<string[]> {\n const user = await getUserAsync();\n if (user?.__typename === 'Robot') {\n throw new CommandError('NGROK_ROBOT', 'Cannot use ngrok with a robot user.');\n }\n const username = getActorDisplayName(user);\n\n return [\n // NOTE: https://github.com/expo/expo/pull/16556#discussion_r822944286\n await this.getProjectRandomnessAsync(),\n // Strip out periods from the username to avoid subdomain issues with SSL certificates.\n slugify(username, { remove: /\\./ }),\n // Use the port to distinguish between multiple tunnels (webpack, metro).\n String(this.port),\n ];\n }\n\n /** Exposed for testing. */\n async _getProjectHostnameAsync(): Promise<string> {\n return `${(await this._getIdentifyingUrlSegmentsAsync()).join('-')}.${NGROK_CONFIG.domain}`;\n }\n\n /** Exposed for testing. */\n async _getProjectSubdomainAsync(): Promise<string> {\n return (await this._getIdentifyingUrlSegmentsAsync()).join('-');\n }\n\n /** Start ngrok on the given port for the project. */\n async startAsync({ timeout }: { timeout?: number } = {}): Promise<void> {\n // Ensure the instance is loaded first, this can linger so we should run it before the timeout.\n await this.resolver.resolveAsync({\n // For now, prefer global install since the package has native code (harder to install) and doesn't change very often.\n prefersGlobalInstall: true,\n });\n\n // NOTE(EvanBacon): If the user doesn't have ADB installed,\n // then skip attempting to reverse the port.\n if (hasAdbReverseAsync()) {\n // Ensure ADB reverse is running.\n if (!(await startAdbReverseAsync([this.port]))) {\n // TODO: Better error message.\n throw new CommandError(\n 'NGROK_ADB',\n `Cannot start tunnel URL because \\`adb reverse\\` failed for the connected Android device(s).`\n );\n }\n }\n\n this.serverUrl = await this._connectToNgrokAsync({ timeout });\n\n debug('Tunnel URL:', this.serverUrl);\n Log.log('Tunnel ready.');\n }\n\n /** Stop the ngrok process if it's running. */\n public async stopAsync(): Promise<void> {\n debug('Stopping Tunnel');\n\n await this.resolver.get()?.kill?.();\n this.serverUrl = null;\n }\n\n /** Exposed for testing. */\n async _connectToNgrokAsync(\n options: { timeout?: number } = {},\n attempts: number = 0\n ): Promise<string> {\n // Attempt to stop any hanging processes, this increases the chances of a successful connection.\n await this.stopAsync();\n\n // Get the instance quietly or assert otherwise.\n const instance = await this.resolver.resolveAsync({\n shouldPrompt: false,\n autoInstall: false,\n });\n\n // TODO(Bacon): Consider dropping the timeout functionality:\n // https://github.com/expo/expo/pull/16556#discussion_r822307373\n const results = await resolveWithTimeout(\n () => this.connectToNgrokInternalAsync(instance, attempts),\n {\n timeout: options.timeout ?? TUNNEL_TIMEOUT,\n errorMessage: 'ngrok tunnel took too long to connect.',\n }\n );\n if (typeof results === 'string') {\n return results;\n }\n\n // Wait 100ms and then try again\n await delayAsync(100);\n\n return this._connectToNgrokAsync(options, attempts + 1);\n }\n\n private async _getConnectionPropsAsync(): Promise<{ hostname?: string; subdomain?: string }> {\n const userDefinedSubdomain = env.EXPO_TUNNEL_SUBDOMAIN;\n if (userDefinedSubdomain) {\n const subdomain =\n typeof userDefinedSubdomain === 'string'\n ? userDefinedSubdomain\n : await this._getProjectSubdomainAsync();\n debug('Subdomain:', subdomain);\n return { subdomain };\n } else {\n const hostname = await this._getProjectHostnameAsync();\n debug('Hostname:', hostname);\n return { hostname };\n }\n }\n\n private async connectToNgrokInternalAsync(\n instance: NgrokInstance,\n attempts: number = 0\n ): Promise<string | false> {\n try {\n // Global config path.\n const configPath = path.join(getSettingsDirectory(), 'ngrok.yml');\n debug('Global config path:', configPath);\n const urlProps = await this._getConnectionPropsAsync();\n\n const url = await instance.connect({\n ...urlProps,\n authtoken: NGROK_CONFIG.authToken,\n configPath,\n onStatusChange(status) {\n if (status === 'closed') {\n Log.error(\n chalk.red(\n 'Tunnel connection has been closed. This is often related to intermittent connection problems with the Ngrok servers. Restart the dev server to try connecting to Ngrok again.'\n ) + chalk.gray('\\nCheck the Ngrok status page for outages: https://status.ngrok.com/')\n );\n } else if (status === 'connected') {\n Log.log('Tunnel connected.');\n }\n },\n port: this.port,\n });\n return url;\n } catch (error: any) {\n const assertNgrok = () => {\n if (isNgrokClientError(error)) {\n throw new CommandError(\n 'NGROK_CONNECT',\n [\n error.body.msg,\n error.body.details?.err,\n chalk.gray('Check the Ngrok status page for outages: https://status.ngrok.com/'),\n ]\n .filter(Boolean)\n .join('\\n\\n')\n );\n }\n throw new CommandError(\n 'NGROK_CONNECT',\n error.toString() +\n chalk.gray('\\nCheck the Ngrok status page for outages: https://status.ngrok.com/')\n );\n };\n\n // Attempt to connect 3 times\n if (attempts >= 2) {\n assertNgrok();\n }\n\n // Attempt to fix the issue\n if (isNgrokClientError(error) && error.body.error_code === 103) {\n // Assert early if a custom subdomain is used since it cannot\n // be changed and retried. If the tunnel subdomain is a boolean\n // then we can reset the randomness and try again.\n if (typeof env.EXPO_TUNNEL_SUBDOMAIN === 'string') {\n assertNgrok();\n }\n // Change randomness to avoid conflict if killing ngrok doesn't help\n await this._resetProjectRandomnessAsync();\n }\n\n return false;\n }\n }\n\n private async getProjectRandomnessAsync() {\n const { urlRandomness: randomness } = await ProjectSettings.readAsync(this.projectRoot);\n if (randomness && /^[A-Za-z0-9]/.test(randomness)) {\n return randomness;\n }\n return await this._resetProjectRandomnessAsync();\n }\n\n async _resetProjectRandomnessAsync() {\n let randomness: string;\n do {\n randomness = crypto.randomBytes(5).toString('base64url');\n } while (randomness.startsWith('_')); // _ is an invalid character for a hostname\n\n await ProjectSettings.setAsync(this.projectRoot, { urlRandomness: randomness });\n debug('Resetting project randomness:', randomness);\n return randomness;\n }\n}\n"],"names":["AsyncNgrok","debug","require","NGROK_CONFIG","authToken","domain","TUNNEL_TIMEOUT","constructor","projectRoot","port","serverUrl","resolver","NgrokResolver","getActiveUrl","_getIdentifyingUrlSegmentsAsync","user","getUserAsync","__typename","CommandError","username","getActorDisplayName","getProjectRandomnessAsync","slugify","remove","String","_getProjectHostnameAsync","join","_getProjectSubdomainAsync","startAsync","timeout","resolveAsync","prefersGlobalInstall","hasAdbReverseAsync","startAdbReverseAsync","_connectToNgrokAsync","Log","log","stopAsync","get","kill","options","attempts","instance","shouldPrompt","autoInstall","results","resolveWithTimeout","connectToNgrokInternalAsync","errorMessage","delayAsync","_getConnectionPropsAsync","userDefinedSubdomain","env","EXPO_TUNNEL_SUBDOMAIN","subdomain","hostname","configPath","path","getSettingsDirectory","urlProps","url","connect","authtoken","onStatusChange","status","error","chalk","red","gray","assertNgrok","isNgrokClientError","body","msg","details","err","filter","Boolean","toString","error_code","_resetProjectRandomnessAsync","urlRandomness","randomness","ProjectSettings","readAsync","test","crypto","randomBytes","startsWith","setAsync"],"mappings":"AAAA;;;;+BAwBaA,YAAU;;aAAVA,UAAU;;;8DAxBL,OAAO;;;;;;;8DACN,QAAQ;;;;;;;+DACL,MAAM;;;;;;;8DACR,SAAS;;;;;;8BAEQ,6BAA6B;sBAChB,qBAAqB;2DAClD,WAAW;uBACe,mBAAmB;qBAC9C,iBAAiB;wBACR,oBAAoB;+BACgB,+BAA+B;4BACvC,iCAAiC;0BAC1D,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,AAAsB,AAAC;AAEhF,MAAMC,YAAY,GAAG;IACnBC,SAAS,EAAE,6CAA6C;IACxDC,MAAM,EAAE,YAAY;CACrB,AAAC;AAEF,MAAMC,cAAc,GAAG,EAAE,GAAG,IAAI,AAAC;AAE1B,MAAMN,UAAU;IAOrBO,YACUC,WAAmB,EACnBC,IAAY,CACpB;QAFQD,mBAAAA,WAAmB,CAAA;QACnBC,YAAAA,IAAY,CAAA;aAJdC,SAAS,GAAkB,IAAI;QAMrC,IAAI,CAACC,QAAQ,GAAG,IAAIC,cAAa,cAAA,CAACJ,WAAW,CAAC,CAAC;IACjD;IAEOK,YAAY,GAAkB;QACnC,OAAO,IAAI,CAACH,SAAS,CAAC;IACxB;IAEA,yBAAyB,SACnBI,+BAA+B,GAAsB;QACzD,MAAMC,IAAI,GAAG,MAAMC,IAAAA,KAAY,aAAA,GAAE,AAAC;QAClC,IAAID,CAAAA,IAAI,QAAY,GAAhBA,KAAAA,CAAgB,GAAhBA,IAAI,CAAEE,UAAU,CAAA,KAAK,OAAO,EAAE;YAChC,MAAM,IAAIC,OAAY,aAAA,CAAC,aAAa,EAAE,qCAAqC,CAAC,CAAC;QAC/E,CAAC;QACD,MAAMC,QAAQ,GAAGC,IAAAA,KAAmB,oBAAA,EAACL,IAAI,CAAC,AAAC;QAE3C,OAAO;YACL,sEAAsE;YACtE,MAAM,IAAI,CAACM,yBAAyB,EAAE;YACtC,uFAAuF;YACvFC,IAAAA,QAAO,EAAA,QAAA,EAACH,QAAQ,EAAE;gBAAEI,MAAM,MAAM;aAAE,CAAC;YACnC,yEAAyE;YACzEC,MAAM,CAAC,IAAI,CAACf,IAAI,CAAC;SAClB,CAAC;IACJ;IAEA,yBAAyB,SACnBgB,wBAAwB,GAAoB;QAChD,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAACX,+BAA+B,EAAE,CAAC,CAACY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAEvB,YAAY,CAACE,MAAM,CAAC,CAAC,CAAC;IAC9F;IAEA,yBAAyB,SACnBsB,yBAAyB,GAAoB;QACjD,OAAO,CAAC,MAAM,IAAI,CAACb,+BAA+B,EAAE,CAAC,CAACY,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE;IAEA,mDAAmD,SAC7CE,UAAU,CAAC,EAAEC,OAAO,CAAA,EAAwB,GAAG,EAAE,EAAiB;QACtE,+FAA+F;QAC/F,MAAM,IAAI,CAAClB,QAAQ,CAACmB,YAAY,CAAC;YAC/B,sHAAsH;YACtHC,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CAAC;QAEH,2DAA2D;QAC3D,4CAA4C;QAC5C,IAAIC,IAAAA,WAAkB,mBAAA,GAAE,EAAE;YACxB,iCAAiC;YACjC,IAAI,CAAE,MAAMC,IAAAA,WAAoB,qBAAA,EAAC;gBAAC,IAAI,CAACxB,IAAI;aAAC,CAAC,AAAC,EAAE;gBAC9C,8BAA8B;gBAC9B,MAAM,IAAIS,OAAY,aAAA,CACpB,WAAW,EACX,CAAC,2FAA2F,CAAC,CAC9F,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAACR,SAAS,GAAG,MAAM,IAAI,CAACwB,oBAAoB,CAAC;YAAEL,OAAO;SAAE,CAAC,CAAC;QAE9D5B,KAAK,CAAC,aAAa,EAAE,IAAI,CAACS,SAAS,CAAC,CAAC;QACrCyB,IAAG,CAACC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3B;IAEA,4CAA4C,SAC/BC,SAAS,GAAkB;YAGhC,GAAmB;QAFzBpC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEzB,OAAM,CAAA,GAAmB,GAAnB,IAAI,CAACU,QAAQ,CAAC2B,GAAG,EAAE,SAAM,GAAzB,KAAA,CAAyB,GAAzB,GAAmB,CAAEC,IAAI,QAAI,GAA7B,KAAA,CAA6B,GAA7B,GAAmB,CAAEA,IAAI,EAAI,CAAA,CAAC;QACpC,IAAI,CAAC7B,SAAS,GAAG,IAAI,CAAC;IACxB;IAEA,yBAAyB,SACnBwB,oBAAoB,CACxBM,OAA6B,GAAG,EAAE,EAClCC,QAAgB,GAAG,CAAC,EACH;QACjB,gGAAgG;QAChG,MAAM,IAAI,CAACJ,SAAS,EAAE,CAAC;QAEvB,gDAAgD;QAChD,MAAMK,QAAQ,GAAG,MAAM,IAAI,CAAC/B,QAAQ,CAACmB,YAAY,CAAC;YAChDa,YAAY,EAAE,KAAK;YACnBC,WAAW,EAAE,KAAK;SACnB,CAAC,AAAC;QAEH,4DAA4D;QAC5D,gEAAgE;QAChE,MAAMC,OAAO,GAAG,MAAMC,IAAAA,MAAkB,mBAAA,EACtC,IAAM,IAAI,CAACC,2BAA2B,CAACL,QAAQ,EAAED,QAAQ,CAAC,EAC1D;YACEZ,OAAO,EAAEW,OAAO,CAACX,OAAO,IAAIvB,cAAc;YAC1C0C,YAAY,EAAE,wCAAwC;SACvD,CACF,AAAC;QACF,IAAI,OAAOH,OAAO,KAAK,QAAQ,EAAE;YAC/B,OAAOA,OAAO,CAAC;QACjB,CAAC;QAED,gCAAgC;QAChC,MAAMI,IAAAA,MAAU,WAAA,EAAC,GAAG,CAAC,CAAC;QAEtB,OAAO,IAAI,CAACf,oBAAoB,CAACM,OAAO,EAAEC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1D;UAEcS,wBAAwB,GAAuD;QAC3F,MAAMC,oBAAoB,GAAGC,IAAG,IAAA,CAACC,qBAAqB,AAAC;QACvD,IAAIF,oBAAoB,EAAE;YACxB,MAAMG,SAAS,GACb,OAAOH,oBAAoB,KAAK,QAAQ,GACpCA,oBAAoB,GACpB,MAAM,IAAI,CAACxB,yBAAyB,EAAE,AAAC;YAC7C1B,KAAK,CAAC,YAAY,EAAEqD,SAAS,CAAC,CAAC;YAC/B,OAAO;gBAAEA,SAAS;aAAE,CAAC;QACvB,OAAO;YACL,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAAC9B,wBAAwB,EAAE,AAAC;YACvDxB,KAAK,CAAC,WAAW,EAAEsD,QAAQ,CAAC,CAAC;YAC7B,OAAO;gBAAEA,QAAQ;aAAE,CAAC;QACtB,CAAC;IACH;UAEcR,2BAA2B,CACvCL,QAAuB,EACvBD,QAAgB,GAAG,CAAC,EACK;QACzB,IAAI;YACF,sBAAsB;YACtB,MAAMe,UAAU,GAAGC,KAAI,EAAA,CAAC/B,IAAI,CAACgC,IAAAA,aAAoB,qBAAA,GAAE,EAAE,WAAW,CAAC,AAAC;YAClEzD,KAAK,CAAC,qBAAqB,EAAEuD,UAAU,CAAC,CAAC;YACzC,MAAMG,QAAQ,GAAG,MAAM,IAAI,CAACT,wBAAwB,EAAE,AAAC;YAEvD,MAAMU,GAAG,GAAG,MAAMlB,QAAQ,CAACmB,OAAO,CAAC;gBACjC,GAAGF,QAAQ;gBACXG,SAAS,EAAE3D,YAAY,CAACC,SAAS;gBACjCoD,UAAU;gBACVO,cAAc,EAACC,MAAM,EAAE;oBACrB,IAAIA,MAAM,KAAK,QAAQ,EAAE;wBACvB7B,IAAG,CAAC8B,KAAK,CACPC,MAAK,EAAA,QAAA,CAACC,GAAG,CACP,+KAA+K,CAChL,GAAGD,MAAK,EAAA,QAAA,CAACE,IAAI,CAAC,sEAAsE,CAAC,CACvF,CAAC;oBACJ,OAAO,IAAIJ,MAAM,KAAK,WAAW,EAAE;wBACjC7B,IAAG,CAACC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;gBACD3B,IAAI,EAAE,IAAI,CAACA,IAAI;aAChB,CAAC,AAAC;YACH,OAAOmD,GAAG,CAAC;QACb,EAAE,OAAOK,KAAK,EAAO;YACnB,MAAMI,WAAW,GAAG,IAAM;gBACxB,IAAIC,IAAAA,cAAkB,mBAAA,EAACL,KAAK,CAAC,EAAE;wBAKzBA,GAAkB;oBAJtB,MAAM,IAAI/C,OAAY,aAAA,CACpB,eAAe,EACf;wBACE+C,KAAK,CAACM,IAAI,CAACC,GAAG;wBACdP,CAAAA,GAAkB,GAAlBA,KAAK,CAACM,IAAI,CAACE,OAAO,SAAK,GAAvBR,KAAAA,CAAuB,GAAvBA,GAAkB,CAAES,GAAG;wBACvBR,MAAK,EAAA,QAAA,CAACE,IAAI,CAAC,oEAAoE,CAAC;qBACjF,CACEO,MAAM,CAACC,OAAO,CAAC,CACflD,IAAI,CAAC,MAAM,CAAC,CAChB,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAIR,OAAY,aAAA,CACpB,eAAe,EACf+C,KAAK,CAACY,QAAQ,EAAE,GACdX,MAAK,EAAA,QAAA,CAACE,IAAI,CAAC,sEAAsE,CAAC,CACrF,CAAC;YACJ,CAAC,AAAC;YAEF,6BAA6B;YAC7B,IAAI3B,QAAQ,IAAI,CAAC,EAAE;gBACjB4B,WAAW,EAAE,CAAC;YAChB,CAAC;YAED,2BAA2B;YAC3B,IAAIC,IAAAA,cAAkB,mBAAA,EAACL,KAAK,CAAC,IAAIA,KAAK,CAACM,IAAI,CAACO,UAAU,KAAK,GAAG,EAAE;gBAC9D,6DAA6D;gBAC7D,+DAA+D;gBAC/D,kDAAkD;gBAClD,IAAI,OAAO1B,IAAG,IAAA,CAACC,qBAAqB,KAAK,QAAQ,EAAE;oBACjDgB,WAAW,EAAE,CAAC;gBAChB,CAAC;gBACD,oEAAoE;gBACpE,MAAM,IAAI,CAACU,4BAA4B,EAAE,CAAC;YAC5C,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;IACH;UAEc1D,yBAAyB,GAAG;QACxC,MAAM,EAAE2D,aAAa,EAAEC,UAAU,CAAA,EAAE,GAAG,MAAMC,SAAe,gBAAA,CAACC,SAAS,CAAC,IAAI,CAAC3E,WAAW,CAAC,AAAC;QACxF,IAAIyE,UAAU,IAAI,eAAeG,IAAI,CAACH,UAAU,CAAC,EAAE;YACjD,OAAOA,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,IAAI,CAACF,4BAA4B,EAAE,CAAC;IACnD;UAEMA,4BAA4B,GAAG;QACnC,IAAIE,UAAU,AAAQ,AAAC;QACvB,GAAG;YACDA,UAAU,GAAGI,OAAM,EAAA,QAAA,CAACC,WAAW,CAAC,CAAC,CAAC,CAACT,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3D,QAASI,UAAU,CAACM,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,2CAA2C;QAEjF,MAAML,SAAe,gBAAA,CAACM,QAAQ,CAAC,IAAI,CAAChF,WAAW,EAAE;YAAEwE,aAAa,EAAEC,UAAU;SAAE,CAAC,CAAC;QAChFhF,KAAK,CAAC,+BAA+B,EAAEgF,UAAU,CAAC,CAAC;QACnD,OAAOA,UAAU,CAAC;IACpB;CACD"}
|
|
@@ -205,7 +205,7 @@ function isTransformError(error) {
|
|
|
205
205
|
/** @returns the html required to render the static metro error as an SPA. */ function logFromError({ error , projectRoot }) {
|
|
206
206
|
// Remap direct Metro Node.js errors to a format that will appear more client-friendly in the logbox UI.
|
|
207
207
|
let stack;
|
|
208
|
-
if (isTransformError(error)) {
|
|
208
|
+
if (isTransformError(error) && error.filename) {
|
|
209
209
|
// Syntax errors in static rendering.
|
|
210
210
|
stack = [
|
|
211
211
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/metro/metroErrorInterface.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 { getMetroServerRoot } from '@expo/config/paths';\nimport chalk from 'chalk';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport { parse, StackFrame } from 'stacktrace-parser';\nimport terminalLink from 'terminal-link';\n\nimport { LogBoxLog } from './log-box/LogBoxLog';\nimport type { CodeFrame, StackFrame as MetroStackFrame } from './log-box/LogBoxSymbolication';\nimport { getStackFormattedLocation } from './log-box/formatProjectFilePath';\nimport { Log } from '../../../log';\nimport { stripAnsi } from '../../../utils/ansi';\nimport { CommandError, SilentError } from '../../../utils/errors';\nimport { createMetroEndpointAsync } from '../getStaticRenderFunctions';\n\nfunction fill(width: number): string {\n return Array(width).join(' ');\n}\n\nfunction formatPaths(config: { filePath: string | null; line?: number; col?: number }) {\n const filePath = chalk.reset(config.filePath);\n return (\n chalk.dim('(') +\n filePath +\n chalk.dim(`:${[config.line, config.col].filter(Boolean).join(':')})`)\n );\n}\n\nexport async function logMetroErrorWithStack(\n projectRoot: string,\n {\n stack,\n codeFrame,\n error,\n }: {\n stack: MetroStackFrame[];\n codeFrame?: CodeFrame;\n error: Error;\n }\n) {\n if (error instanceof SilentError) {\n return;\n }\n\n // process.stdout.write('\\u001b[0m'); // Reset attributes\n // process.stdout.write('\\u001bc'); // Reset the terminal\n\n Log.log();\n Log.log(chalk.red('Metro error: ') + error.message);\n Log.log();\n\n if (error instanceof CommandError) {\n return;\n }\n\n if (codeFrame) {\n const maxWarningLineLength = Math.max(200, process.stdout.columns);\n\n const lineText = codeFrame.content;\n const isPreviewTooLong = codeFrame.content\n .split('\\n')\n .some((line) => line.length > maxWarningLineLength);\n const column = codeFrame.location?.column;\n // When the preview is too long, we skip reading the file and attempting to apply\n // code coloring, this is because it can get very slow.\n if (isPreviewTooLong) {\n let previewLine = '';\n let cursorLine = '';\n\n const formattedPath = formatPaths({\n filePath: codeFrame.fileName,\n line: codeFrame.location?.row,\n col: codeFrame.location?.column,\n });\n // Create a curtailed preview line like:\n // `...transition:'fade'},k._updatePropsStack=function(){clearImmediate(k._updateImmediate),k._updateImmediate...`\n // If there is no text preview or column number, we can't do anything.\n if (lineText && column != null) {\n const rangeWindow = Math.round(\n Math.max(codeFrame.fileName?.length ?? 0, Math.max(80, process.stdout.columns)) / 2\n );\n let minBounds = Math.max(0, column - rangeWindow);\n const maxBounds = Math.min(minBounds + rangeWindow * 2, lineText.length);\n previewLine = lineText.slice(minBounds, maxBounds);\n\n // If we splice content off the start, then we should append `...`.\n // This is unlikely to happen since we limit the activation size.\n if (minBounds > 0) {\n // Adjust the min bounds so the cursor is aligned after we add the \"...\"\n minBounds -= 3;\n previewLine = chalk.dim('...') + previewLine;\n }\n if (maxBounds < lineText.length) {\n previewLine += chalk.dim('...');\n }\n\n // If the column property could be found, then use that to fix the cursor location which is often broken in regex.\n cursorLine = (column == null ? '' : fill(column) + chalk.reset('^')).slice(minBounds);\n\n Log.log(\n [formattedPath, '', previewLine, cursorLine, chalk.dim('(error truncated)')].join('\\n')\n );\n }\n } else {\n Log.log(codeFrame.content);\n }\n }\n\n if (stack?.length) {\n const stackProps = stack.map((frame) => {\n return {\n title: frame.methodName,\n subtitle: getStackFormattedLocation(projectRoot, frame),\n collapse: frame.collapse,\n };\n });\n\n const stackLines: string[] = [];\n\n stackProps.forEach((frame) => {\n const position = terminalLink.isSupported\n ? terminalLink(frame.subtitle, frame.subtitle)\n : frame.subtitle;\n let lineItem = chalk.gray(` ${frame.title} (${position})`);\n if (frame.collapse) {\n lineItem = chalk.dim(lineItem);\n }\n // Never show the internal module system.\n if (!frame.subtitle.match(/\\/metro-require\\/require\\.js/)) {\n stackLines.push(lineItem);\n }\n });\n\n Log.log();\n Log.log(chalk.bold`Call Stack`);\n if (!stackLines.length) {\n Log.log(chalk.gray(' No stack trace available.'));\n } else {\n Log.log(stackLines.join('\\n'));\n }\n } else {\n Log.log(chalk.gray(` ${error.stack}`));\n }\n}\n\nexport async function logMetroError(projectRoot: string, { error }: { error: Error }) {\n if (error instanceof SilentError) {\n return;\n }\n\n const stack = parseErrorStack(projectRoot, error.stack);\n\n const log = new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n\n await new Promise((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\nfunction isTransformError(\n error: any\n): error is { type: 'TransformError'; filename: string; lineNumber: number; column: number } {\n return error.type === 'TransformError';\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nfunction logFromError({ error, projectRoot }: { error: Error; projectRoot: string }) {\n // Remap direct Metro Node.js errors to a format that will appear more client-friendly in the logbox UI.\n let stack: MetroStackFrame[] | undefined;\n if (isTransformError(error)) {\n // Syntax errors in static rendering.\n stack = [\n {\n file: path.join(projectRoot, error.filename),\n methodName: '<unknown>',\n arguments: [],\n // TODO: Import stack\n lineNumber: error.lineNumber,\n column: error.column,\n },\n ];\n } else if ('originModulePath' in error && typeof error.originModulePath === 'string') {\n // TODO: Use import stack here when the error is resolution based.\n stack = [\n {\n file: error.originModulePath,\n methodName: '<unknown>',\n arguments: [],\n // TODO: Import stack\n lineNumber: 0,\n column: 0,\n },\n ];\n } else {\n stack = parseErrorStack(projectRoot, error.stack);\n }\n\n return new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function logMetroErrorAsync({\n error,\n projectRoot,\n}: {\n error: Error;\n projectRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', () => res()));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n routerRoot,\n}: {\n error: Error;\n projectRoot: string;\n routerRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', () => res()));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n\n if ('message' in log && 'content' in log.message && typeof log.message.content === 'string') {\n log.message.content = stripAnsi(log.message.content)!;\n }\n\n const logBoxContext = {\n selectedLogIndex: 0,\n isDisabled: false,\n logs: [log],\n };\n const html = `<html><head><style>#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}</style></head><body><div id=\"root\"></div><script id=\"_expo-static-error\" type=\"application/json\">${JSON.stringify(\n logBoxContext\n )}</script></body></html>`;\n\n const errorOverlayEntry = await createMetroEndpointAsync(\n projectRoot,\n // Keep the URL relative\n '',\n resolveFrom(projectRoot, 'expo-router/_error'),\n {\n mode: 'development',\n platform: 'web',\n minify: false,\n optimize: false,\n usedExports: false,\n baseUrl: '',\n routerRoot,\n isExporting: false,\n reactCompiler: false,\n }\n );\n\n const htmlWithJs = html.replace('</body>', `<script src=${errorOverlayEntry}></script></body>`);\n return htmlWithJs;\n}\n\nfunction parseErrorStack(\n projectRoot: string,\n stack?: string\n): (StackFrame & { collapse?: boolean })[] {\n if (stack == null) {\n return [];\n }\n if (Array.isArray(stack)) {\n return stack;\n }\n\n const serverRoot = getMetroServerRoot(projectRoot);\n\n return parse(stack)\n .map((frame) => {\n // frame.file will mostly look like `http://localhost:8081/index.bundle?platform=web&dev=true&hot=false`\n\n if (frame.file) {\n // SSR will sometimes have absolute paths followed by `.bundle?...`, we need to try and make them relative paths and append a dev server URL.\n if (frame.file.startsWith('/') && frame.file.includes('bundle?') && !canParse(frame.file)) {\n // Malformed stack file from SSR. Attempt to repair.\n frame.file = 'https://localhost:8081/' + path.relative(serverRoot, frame.file);\n }\n }\n\n return {\n ...frame,\n column: frame.column != null ? frame.column - 1 : null,\n };\n })\n .filter((frame) => frame.file && !frame.file.includes('node_modules'));\n}\n\nfunction canParse(url: string): boolean {\n try {\n // eslint-disable-next-line no-new\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n"],"names":["logMetroErrorWithStack","logMetroError","logMetroErrorAsync","getErrorOverlayHtmlAsync","fill","width","Array","join","formatPaths","config","filePath","chalk","reset","dim","line","col","filter","Boolean","projectRoot","stack","codeFrame","error","SilentError","Log","log","red","message","CommandError","maxWarningLineLength","Math","max","process","stdout","columns","lineText","content","isPreviewTooLong","split","some","length","column","location","previewLine","cursorLine","formattedPath","fileName","row","rangeWindow","round","minBounds","maxBounds","min","slice","stackProps","map","frame","title","methodName","subtitle","getStackFormattedLocation","collapse","stackLines","forEach","position","terminalLink","isSupported","lineItem","gray","match","push","bold","parseErrorStack","LogBoxLog","level","substitutions","isComponentError","category","componentStack","Promise","res","symbolicate","symbolicated","isTransformError","type","logFromError","file","path","filename","arguments","lineNumber","originModulePath","routerRoot","stripAnsi","logBoxContext","selectedLogIndex","isDisabled","logs","html","JSON","stringify","errorOverlayEntry","createMetroEndpointAsync","resolveFrom","mode","platform","minify","optimize","usedExports","baseUrl","isExporting","reactCompiler","htmlWithJs","replace","isArray","serverRoot","getMetroServerRoot","parse","startsWith","includes","canParse","relative","url","URL"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/metro/metroErrorInterface.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 { getMetroServerRoot } from '@expo/config/paths';\nimport chalk from 'chalk';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport { parse, StackFrame } from 'stacktrace-parser';\nimport terminalLink from 'terminal-link';\n\nimport { LogBoxLog } from './log-box/LogBoxLog';\nimport type { CodeFrame, StackFrame as MetroStackFrame } from './log-box/LogBoxSymbolication';\nimport { getStackFormattedLocation } from './log-box/formatProjectFilePath';\nimport { Log } from '../../../log';\nimport { stripAnsi } from '../../../utils/ansi';\nimport { CommandError, SilentError } from '../../../utils/errors';\nimport { createMetroEndpointAsync } from '../getStaticRenderFunctions';\n\nfunction fill(width: number): string {\n return Array(width).join(' ');\n}\n\nfunction formatPaths(config: { filePath: string | null; line?: number; col?: number }) {\n const filePath = chalk.reset(config.filePath);\n return (\n chalk.dim('(') +\n filePath +\n chalk.dim(`:${[config.line, config.col].filter(Boolean).join(':')})`)\n );\n}\n\nexport async function logMetroErrorWithStack(\n projectRoot: string,\n {\n stack,\n codeFrame,\n error,\n }: {\n stack: MetroStackFrame[];\n codeFrame?: CodeFrame;\n error: Error;\n }\n) {\n if (error instanceof SilentError) {\n return;\n }\n\n // process.stdout.write('\\u001b[0m'); // Reset attributes\n // process.stdout.write('\\u001bc'); // Reset the terminal\n\n Log.log();\n Log.log(chalk.red('Metro error: ') + error.message);\n Log.log();\n\n if (error instanceof CommandError) {\n return;\n }\n\n if (codeFrame) {\n const maxWarningLineLength = Math.max(200, process.stdout.columns);\n\n const lineText = codeFrame.content;\n const isPreviewTooLong = codeFrame.content\n .split('\\n')\n .some((line) => line.length > maxWarningLineLength);\n const column = codeFrame.location?.column;\n // When the preview is too long, we skip reading the file and attempting to apply\n // code coloring, this is because it can get very slow.\n if (isPreviewTooLong) {\n let previewLine = '';\n let cursorLine = '';\n\n const formattedPath = formatPaths({\n filePath: codeFrame.fileName,\n line: codeFrame.location?.row,\n col: codeFrame.location?.column,\n });\n // Create a curtailed preview line like:\n // `...transition:'fade'},k._updatePropsStack=function(){clearImmediate(k._updateImmediate),k._updateImmediate...`\n // If there is no text preview or column number, we can't do anything.\n if (lineText && column != null) {\n const rangeWindow = Math.round(\n Math.max(codeFrame.fileName?.length ?? 0, Math.max(80, process.stdout.columns)) / 2\n );\n let minBounds = Math.max(0, column - rangeWindow);\n const maxBounds = Math.min(minBounds + rangeWindow * 2, lineText.length);\n previewLine = lineText.slice(minBounds, maxBounds);\n\n // If we splice content off the start, then we should append `...`.\n // This is unlikely to happen since we limit the activation size.\n if (minBounds > 0) {\n // Adjust the min bounds so the cursor is aligned after we add the \"...\"\n minBounds -= 3;\n previewLine = chalk.dim('...') + previewLine;\n }\n if (maxBounds < lineText.length) {\n previewLine += chalk.dim('...');\n }\n\n // If the column property could be found, then use that to fix the cursor location which is often broken in regex.\n cursorLine = (column == null ? '' : fill(column) + chalk.reset('^')).slice(minBounds);\n\n Log.log(\n [formattedPath, '', previewLine, cursorLine, chalk.dim('(error truncated)')].join('\\n')\n );\n }\n } else {\n Log.log(codeFrame.content);\n }\n }\n\n if (stack?.length) {\n const stackProps = stack.map((frame) => {\n return {\n title: frame.methodName,\n subtitle: getStackFormattedLocation(projectRoot, frame),\n collapse: frame.collapse,\n };\n });\n\n const stackLines: string[] = [];\n\n stackProps.forEach((frame) => {\n const position = terminalLink.isSupported\n ? terminalLink(frame.subtitle, frame.subtitle)\n : frame.subtitle;\n let lineItem = chalk.gray(` ${frame.title} (${position})`);\n if (frame.collapse) {\n lineItem = chalk.dim(lineItem);\n }\n // Never show the internal module system.\n if (!frame.subtitle.match(/\\/metro-require\\/require\\.js/)) {\n stackLines.push(lineItem);\n }\n });\n\n Log.log();\n Log.log(chalk.bold`Call Stack`);\n if (!stackLines.length) {\n Log.log(chalk.gray(' No stack trace available.'));\n } else {\n Log.log(stackLines.join('\\n'));\n }\n } else {\n Log.log(chalk.gray(` ${error.stack}`));\n }\n}\n\nexport async function logMetroError(projectRoot: string, { error }: { error: Error }) {\n if (error instanceof SilentError) {\n return;\n }\n\n const stack = parseErrorStack(projectRoot, error.stack);\n\n const log = new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n\n await new Promise((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\nfunction isTransformError(\n error: any\n): error is { type: 'TransformError'; filename: string; lineNumber: number; column: number } {\n return error.type === 'TransformError';\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nfunction logFromError({ error, projectRoot }: { error: Error; projectRoot: string }) {\n // Remap direct Metro Node.js errors to a format that will appear more client-friendly in the logbox UI.\n let stack: MetroStackFrame[] | undefined;\n if (isTransformError(error) && error.filename) {\n // Syntax errors in static rendering.\n stack = [\n {\n file: path.join(projectRoot, error.filename),\n methodName: '<unknown>',\n arguments: [],\n // TODO: Import stack\n lineNumber: error.lineNumber,\n column: error.column,\n },\n ];\n } else if ('originModulePath' in error && typeof error.originModulePath === 'string') {\n // TODO: Use import stack here when the error is resolution based.\n stack = [\n {\n file: error.originModulePath,\n methodName: '<unknown>',\n arguments: [],\n // TODO: Import stack\n lineNumber: 0,\n column: 0,\n },\n ];\n } else {\n stack = parseErrorStack(projectRoot, error.stack);\n }\n\n return new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function logMetroErrorAsync({\n error,\n projectRoot,\n}: {\n error: Error;\n projectRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', () => res()));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n routerRoot,\n}: {\n error: Error;\n projectRoot: string;\n routerRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', () => res()));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n\n if ('message' in log && 'content' in log.message && typeof log.message.content === 'string') {\n log.message.content = stripAnsi(log.message.content)!;\n }\n\n const logBoxContext = {\n selectedLogIndex: 0,\n isDisabled: false,\n logs: [log],\n };\n const html = `<html><head><style>#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}</style></head><body><div id=\"root\"></div><script id=\"_expo-static-error\" type=\"application/json\">${JSON.stringify(\n logBoxContext\n )}</script></body></html>`;\n\n const errorOverlayEntry = await createMetroEndpointAsync(\n projectRoot,\n // Keep the URL relative\n '',\n resolveFrom(projectRoot, 'expo-router/_error'),\n {\n mode: 'development',\n platform: 'web',\n minify: false,\n optimize: false,\n usedExports: false,\n baseUrl: '',\n routerRoot,\n isExporting: false,\n reactCompiler: false,\n }\n );\n\n const htmlWithJs = html.replace('</body>', `<script src=${errorOverlayEntry}></script></body>`);\n return htmlWithJs;\n}\n\nfunction parseErrorStack(\n projectRoot: string,\n stack?: string\n): (StackFrame & { collapse?: boolean })[] {\n if (stack == null) {\n return [];\n }\n if (Array.isArray(stack)) {\n return stack;\n }\n\n const serverRoot = getMetroServerRoot(projectRoot);\n\n return parse(stack)\n .map((frame) => {\n // frame.file will mostly look like `http://localhost:8081/index.bundle?platform=web&dev=true&hot=false`\n\n if (frame.file) {\n // SSR will sometimes have absolute paths followed by `.bundle?...`, we need to try and make them relative paths and append a dev server URL.\n if (frame.file.startsWith('/') && frame.file.includes('bundle?') && !canParse(frame.file)) {\n // Malformed stack file from SSR. Attempt to repair.\n frame.file = 'https://localhost:8081/' + path.relative(serverRoot, frame.file);\n }\n }\n\n return {\n ...frame,\n column: frame.column != null ? frame.column - 1 : null,\n };\n })\n .filter((frame) => frame.file && !frame.file.includes('node_modules'));\n}\n\nfunction canParse(url: string): boolean {\n try {\n // eslint-disable-next-line no-new\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n"],"names":["logMetroErrorWithStack","logMetroError","logMetroErrorAsync","getErrorOverlayHtmlAsync","fill","width","Array","join","formatPaths","config","filePath","chalk","reset","dim","line","col","filter","Boolean","projectRoot","stack","codeFrame","error","SilentError","Log","log","red","message","CommandError","maxWarningLineLength","Math","max","process","stdout","columns","lineText","content","isPreviewTooLong","split","some","length","column","location","previewLine","cursorLine","formattedPath","fileName","row","rangeWindow","round","minBounds","maxBounds","min","slice","stackProps","map","frame","title","methodName","subtitle","getStackFormattedLocation","collapse","stackLines","forEach","position","terminalLink","isSupported","lineItem","gray","match","push","bold","parseErrorStack","LogBoxLog","level","substitutions","isComponentError","category","componentStack","Promise","res","symbolicate","symbolicated","isTransformError","type","logFromError","filename","file","path","arguments","lineNumber","originModulePath","routerRoot","stripAnsi","logBoxContext","selectedLogIndex","isDisabled","logs","html","JSON","stringify","errorOverlayEntry","createMetroEndpointAsync","resolveFrom","mode","platform","minify","optimize","usedExports","baseUrl","isExporting","reactCompiler","htmlWithJs","replace","isArray","serverRoot","getMetroServerRoot","parse","startsWith","includes","canParse","relative","url","URL"],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ class FetchClient {
|
|
|
31
31
|
this.headers = {
|
|
32
32
|
accept: "application/json",
|
|
33
33
|
"content-type": "application/json",
|
|
34
|
-
"user-agent": `expo-cli/${"0.19.
|
|
34
|
+
"user-agent": `expo-cli/${"0.19.9"}`,
|
|
35
35
|
authorization: "Basic " + _nodeBuffer().Buffer.from(`${target}:`).toString("base64")
|
|
36
36
|
};
|
|
37
37
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/cli",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.9",
|
|
4
4
|
"description": "The Expo CLI",
|
|
5
5
|
"main": "build/bin/cli",
|
|
6
6
|
"bin": {
|
|
@@ -167,5 +167,5 @@
|
|
|
167
167
|
"tree-kill": "^1.2.2",
|
|
168
168
|
"tsd": "^0.28.1"
|
|
169
169
|
},
|
|
170
|
-
"gitHead": "
|
|
170
|
+
"gitHead": "1f7a56b5a5bcef23ac6e55b16db53077f6a4065c"
|
|
171
171
|
}
|