@expo/cli 56.0.5 → 56.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/build/bin/cli +1 -1
  2. package/build/src/events/index.js +1 -1
  3. package/build/src/start/checkDependenciesOnStart.js +41 -8
  4. package/build/src/start/checkDependenciesOnStart.js.map +1 -1
  5. package/build/src/start/interface/commandsTable.js.map +1 -1
  6. package/build/src/start/interface/interactiveActions.js +7 -1
  7. package/build/src/start/interface/interactiveActions.js.map +1 -1
  8. package/build/src/start/interface/startInterface.js +7 -27
  9. package/build/src/start/interface/startInterface.js.map +1 -1
  10. package/build/src/start/resolveOptions.js +2 -2
  11. package/build/src/start/resolveOptions.js.map +1 -1
  12. package/build/src/start/server/getStaticRenderFunctions.js +7 -19
  13. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  14. package/build/src/start/server/metro/MetroBundlerDevServer.js +4 -12
  15. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  16. package/build/src/start/server/metro/MetroTerminalReporter.js +58 -8
  17. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  18. package/build/src/start/server/metro/TerminalReporter.js +18 -0
  19. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  20. package/build/src/start/server/metro/createFileMap-fork.js +2 -17
  21. package/build/src/start/server/metro/createFileMap-fork.js.map +1 -1
  22. package/build/src/start/server/metro/instantiateMetro.js +46 -3
  23. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  24. package/build/src/start/server/metro/runServer-fork.js +1 -8
  25. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  26. package/build/src/start/server/metro/withMetroErrorReportingResolver.js +48 -26
  27. package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -1
  28. package/build/src/start/server/metro/withMetroMultiPlatform.js +17 -4
  29. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  30. package/build/src/start/server/middleware/DomComponentsMiddleware.js +0 -8
  31. package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
  32. package/build/src/start/server/middleware/metroOptions.js +3 -2
  33. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  34. package/build/src/start/server/serverLogLikeMetro.js +5 -28
  35. package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
  36. package/build/src/start/startAsync.js +6 -7
  37. package/build/src/start/startAsync.js.map +1 -1
  38. package/build/src/utils/composeMetroIgnorePatterns.js +69 -0
  39. package/build/src/utils/composeMetroIgnorePatterns.js.map +1 -0
  40. package/build/src/utils/port.js +7 -0
  41. package/build/src/utils/port.js.map +1 -1
  42. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  43. package/build/src/utils/telemetry/utils/context.js +1 -1
  44. package/package.json +17 -19
package/build/bin/cli CHANGED
@@ -139,7 +139,7 @@ const args = (0, _arg().default)({
139
139
  });
140
140
  if (args['--version']) {
141
141
  // Version is added in the build script.
142
- console.log("56.0.5");
142
+ console.log("56.1.0");
143
143
  process.exit(0);
144
144
  }
145
145
  if (args['--non-interactive']) {
@@ -76,7 +76,7 @@ function getInitMetadata() {
76
76
  return {
77
77
  format: 'v0-jsonl',
78
78
  // Version is added in the build script.
79
- version: "56.0.5" ?? 'UNVERSIONED'
79
+ version: "56.1.0" ?? 'UNVERSIONED'
80
80
  };
81
81
  }
82
82
  function getWellKnownTemporaryLogFile(projectRoot, command) {
@@ -9,8 +9,11 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- get checkDependenciesAsync () {
13
- return checkDependenciesAsync;
12
+ get checkDependencies () {
13
+ return checkDependencies;
14
+ },
15
+ get getDependencyCheckMessage () {
16
+ return getDependencyCheckMessage;
14
17
  },
15
18
  get printDependencyCheckResult () {
16
19
  return printDependencyCheckResult;
@@ -71,7 +74,10 @@ function _interop_require_wildcard(obj, nodeInterop) {
71
74
  }
72
75
  return newObj;
73
76
  }
74
- async function checkDependenciesAsync(projectRoot, exp, pkg) {
77
+ /**
78
+ * Fetch dependency version check results.
79
+ * Returns null if everything is up-to-date.
80
+ */ async function checkDependenciesAsync(projectRoot, exp, pkg) {
75
81
  const incorrectDeps = await (0, _validateDependenciesVersions.getVersionedDependenciesAsync)(projectRoot, exp, pkg);
76
82
  if (incorrectDeps.length === 0) {
77
83
  return null;
@@ -86,12 +92,39 @@ async function checkDependenciesAsync(projectRoot, exp, pkg) {
86
92
  otherCount
87
93
  };
88
94
  }
89
- function printDependencyCheckResult(result) {
90
- if (result.expo) {
91
- _log.warn((0, _chalk().default)`An update for {bold expo} is available: {red ${result.expo.actualVersion}} {dim →} {green ${result.expo.expectedVersionOrRange}}`);
95
+ let _checkDependenciesRef;
96
+ function checkDependencies(projectRoot, exp, pkg) {
97
+ if (_checkDependenciesRef) {
98
+ return _checkDependenciesRef;
92
99
  }
93
- if (result.otherCount > 0) {
94
- _log.warn((0, _chalk().default)`${result.otherCount} other package${result.otherCount === 1 ? '' : 's'} may need updating. Run {bold npx expo install --check} for details.`);
100
+ const ref = {
101
+ result: null,
102
+ promise: Promise.resolve(null)
103
+ };
104
+ ref.promise = checkDependenciesAsync(projectRoot, exp, pkg).then((result)=>{
105
+ ref.result = result;
106
+ return result;
107
+ }, (_error)=>null);
108
+ _checkDependenciesRef = ref;
109
+ return ref;
110
+ }
111
+ function getDependencyCheckMessage(result) {
112
+ if (result == null ? void 0 : result.expo) {
113
+ return [
114
+ _chalk().default.yellow`An update for {bold expo} is available: {red ${result.expo.actualVersion}} {dim →} {green ${result.expo.expectedVersionOrRange}}`,
115
+ _chalk().default.yellow`${result.otherCount} other package${result.otherCount === 1 ? '' : 's'} may need updating. Run {bold npx expo install --check} for details.`
116
+ ];
117
+ } else if (result == null ? void 0 : result.otherCount) {
118
+ return [
119
+ _chalk().default.yellow`${result.otherCount} package${result.otherCount === 1 ? '' : 's'} may need updating. Run {bold npx expo install --check} for details.`
120
+ ];
121
+ } else {
122
+ return [];
123
+ }
124
+ }
125
+ function printDependencyCheckResult(result) {
126
+ for (const line of getDependencyCheckMessage(result)){
127
+ _log.log(line);
95
128
  }
96
129
  }
97
130
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/start/checkDependenciesOnStart.ts"],"sourcesContent":["import type { ExpoConfig, PackageJSONConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { getVersionedDependenciesAsync } from './doctor/dependencies/validateDependenciesVersions';\n\nexport type DependencyCheckResult = {\n expo?: { actualVersion: string; expectedVersionOrRange: string };\n otherCount: number;\n};\n\n/**\n * Fetch dependency version check results.\n * Returns null if everything is up-to-date.\n */\nexport async function checkDependenciesAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'sdkVersion'>,\n pkg: PackageJSONConfig\n): Promise<DependencyCheckResult | null> {\n const incorrectDeps = await getVersionedDependenciesAsync(projectRoot, exp, pkg);\n if (incorrectDeps.length === 0) {\n return null;\n }\n\n const expoDep = incorrectDeps.find((dep) => dep.packageName === 'expo');\n const otherCount = incorrectDeps.filter((dep) => dep.packageName !== 'expo').length;\n\n return {\n expo: expoDep\n ? {\n actualVersion: expoDep.actualVersion,\n expectedVersionOrRange: expoDep.expectedVersionOrRange,\n }\n : undefined,\n otherCount,\n };\n}\n\n/** Print the condensed dependency check messages to the terminal. */\nexport function printDependencyCheckResult(result: DependencyCheckResult): void {\n if (result.expo) {\n Log.warn(\n chalk`An update for {bold expo} is available: {red ${result.expo.actualVersion}} {dim →} {green ${result.expo.expectedVersionOrRange}}`\n );\n }\n if (result.otherCount > 0) {\n Log.warn(\n chalk`${result.otherCount} other package${result.otherCount === 1 ? '' : 's'} may need updating. Run {bold npx expo install --check} for details.`\n );\n }\n}\n"],"names":["checkDependenciesAsync","printDependencyCheckResult","projectRoot","exp","pkg","incorrectDeps","getVersionedDependenciesAsync","length","expoDep","find","dep","packageName","otherCount","filter","expo","actualVersion","expectedVersionOrRange","undefined","result","Log","warn","chalk"],"mappings":";;;;;;;;;;;QAesBA;eAAAA;;QAyBNC;eAAAA;;;;gEAvCE;;;;;;6DAEG;8CACyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWvC,eAAeD,uBACpBE,WAAmB,EACnBC,GAAmC,EACnCC,GAAsB;IAEtB,MAAMC,gBAAgB,MAAMC,IAAAA,2DAA6B,EAACJ,aAAaC,KAAKC;IAC5E,IAAIC,cAAcE,MAAM,KAAK,GAAG;QAC9B,OAAO;IACT;IAEA,MAAMC,UAAUH,cAAcI,IAAI,CAAC,CAACC,MAAQA,IAAIC,WAAW,KAAK;IAChE,MAAMC,aAAaP,cAAcQ,MAAM,CAAC,CAACH,MAAQA,IAAIC,WAAW,KAAK,QAAQJ,MAAM;IAEnF,OAAO;QACLO,MAAMN,UACF;YACEO,eAAeP,QAAQO,aAAa;YACpCC,wBAAwBR,QAAQQ,sBAAsB;QACxD,IACAC;QACJL;IACF;AACF;AAGO,SAASX,2BAA2BiB,MAA6B;IACtE,IAAIA,OAAOJ,IAAI,EAAE;QACfK,KAAIC,IAAI,CACNC,IAAAA,gBAAK,CAAA,CAAC,6CAA6C,EAAEH,OAAOJ,IAAI,CAACC,aAAa,CAAC,iBAAiB,EAAEG,OAAOJ,IAAI,CAACE,sBAAsB,CAAC,CAAC,CAAC;IAE3I;IACA,IAAIE,OAAON,UAAU,GAAG,GAAG;QACzBO,KAAIC,IAAI,CACNC,IAAAA,gBAAK,CAAA,CAAC,EAAEH,OAAON,UAAU,CAAC,cAAc,EAAEM,OAAON,UAAU,KAAK,IAAI,KAAK,IAAI,oEAAoE,CAAC;IAEtJ;AACF"}
1
+ {"version":3,"sources":["../../../src/start/checkDependenciesOnStart.ts"],"sourcesContent":["import type { ExpoConfig, PackageJSONConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { getVersionedDependenciesAsync } from './doctor/dependencies/validateDependenciesVersions';\n\nexport interface DependencyCheckResult {\n expo?: { actualVersion: string; expectedVersionOrRange: string };\n otherCount: number;\n}\n\nexport interface DependencyCheckRef {\n result: DependencyCheckResult | null;\n promise: Promise<DependencyCheckResult | null>;\n}\n\n/**\n * Fetch dependency version check results.\n * Returns null if everything is up-to-date.\n */\nasync function checkDependenciesAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'sdkVersion'>,\n pkg: PackageJSONConfig\n): Promise<DependencyCheckResult | null> {\n const incorrectDeps = await getVersionedDependenciesAsync(projectRoot, exp, pkg);\n if (incorrectDeps.length === 0) {\n return null;\n }\n\n const expoDep = incorrectDeps.find((dep) => dep.packageName === 'expo');\n const otherCount = incorrectDeps.filter((dep) => dep.packageName !== 'expo').length;\n\n return {\n expo: expoDep\n ? {\n actualVersion: expoDep.actualVersion,\n expectedVersionOrRange: expoDep.expectedVersionOrRange,\n }\n : undefined,\n otherCount,\n };\n}\n\nlet _checkDependenciesRef: DependencyCheckRef | undefined;\n\nexport function checkDependencies(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'sdkVersion'>,\n pkg: PackageJSONConfig\n) {\n if (_checkDependenciesRef) {\n return _checkDependenciesRef;\n }\n\n const ref: DependencyCheckRef = {\n result: null,\n promise: Promise.resolve(null),\n };\n\n ref.promise = checkDependenciesAsync(projectRoot, exp, pkg).then(\n (result) => {\n ref.result = result;\n return result;\n },\n (_error) => null\n );\n\n _checkDependenciesRef = ref;\n return ref;\n}\n\n/** Print the condensed dependency check messages to the terminal. */\nexport function getDependencyCheckMessage(\n result: DependencyCheckResult | null | undefined\n): string[] {\n if (result?.expo) {\n return [\n chalk.yellow`An update for {bold expo} is available: {red ${result.expo.actualVersion}} {dim →} {green ${result.expo.expectedVersionOrRange}}`,\n chalk.yellow`${result.otherCount} other package${result.otherCount === 1 ? '' : 's'} may need updating. Run {bold npx expo install --check} for details.`,\n ];\n } else if (result?.otherCount) {\n return [\n chalk.yellow`${result.otherCount} package${result.otherCount === 1 ? '' : 's'} may need updating. Run {bold npx expo install --check} for details.`,\n ];\n } else {\n return [];\n }\n}\n\n/** Print the condensed dependency check messages to the terminal. */\nexport function printDependencyCheckResult(result: DependencyCheckResult): void {\n for (const line of getDependencyCheckMessage(result)) {\n Log.log(line);\n }\n}\n"],"names":["checkDependencies","getDependencyCheckMessage","printDependencyCheckResult","checkDependenciesAsync","projectRoot","exp","pkg","incorrectDeps","getVersionedDependenciesAsync","length","expoDep","find","dep","packageName","otherCount","filter","expo","actualVersion","expectedVersionOrRange","undefined","_checkDependenciesRef","ref","result","promise","Promise","resolve","then","_error","chalk","yellow","line","Log","log"],"mappings":";;;;;;;;;;;QA8CgBA;eAAAA;;QA2BAC;eAAAA;;QAkBAC;eAAAA;;;;gEA1FE;;;;;;6DAEG;8CACyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAY9C;;;CAGC,GACD,eAAeC,uBACbC,WAAmB,EACnBC,GAAmC,EACnCC,GAAsB;IAEtB,MAAMC,gBAAgB,MAAMC,IAAAA,2DAA6B,EAACJ,aAAaC,KAAKC;IAC5E,IAAIC,cAAcE,MAAM,KAAK,GAAG;QAC9B,OAAO;IACT;IAEA,MAAMC,UAAUH,cAAcI,IAAI,CAAC,CAACC,MAAQA,IAAIC,WAAW,KAAK;IAChE,MAAMC,aAAaP,cAAcQ,MAAM,CAAC,CAACH,MAAQA,IAAIC,WAAW,KAAK,QAAQJ,MAAM;IAEnF,OAAO;QACLO,MAAMN,UACF;YACEO,eAAeP,QAAQO,aAAa;YACpCC,wBAAwBR,QAAQQ,sBAAsB;QACxD,IACAC;QACJL;IACF;AACF;AAEA,IAAIM;AAEG,SAASpB,kBACdI,WAAmB,EACnBC,GAAmC,EACnCC,GAAsB;IAEtB,IAAIc,uBAAuB;QACzB,OAAOA;IACT;IAEA,MAAMC,MAA0B;QAC9BC,QAAQ;QACRC,SAASC,QAAQC,OAAO,CAAC;IAC3B;IAEAJ,IAAIE,OAAO,GAAGpB,uBAAuBC,aAAaC,KAAKC,KAAKoB,IAAI,CAC9D,CAACJ;QACCD,IAAIC,MAAM,GAAGA;QACb,OAAOA;IACT,GACA,CAACK,SAAW;IAGdP,wBAAwBC;IACxB,OAAOA;AACT;AAGO,SAASpB,0BACdqB,MAAgD;IAEhD,IAAIA,0BAAAA,OAAQN,IAAI,EAAE;QAChB,OAAO;YACLY,gBAAK,CAACC,MAAM,CAAC,6CAA6C,EAAEP,OAAON,IAAI,CAACC,aAAa,CAAC,iBAAiB,EAAEK,OAAON,IAAI,CAACE,sBAAsB,CAAC,CAAC,CAAC;YAC9IU,gBAAK,CAACC,MAAM,CAAC,EAAEP,OAAOR,UAAU,CAAC,cAAc,EAAEQ,OAAOR,UAAU,KAAK,IAAI,KAAK,IAAI,oEAAoE,CAAC;SAC1J;IACH,OAAO,IAAIQ,0BAAAA,OAAQR,UAAU,EAAE;QAC7B,OAAO;YACLc,gBAAK,CAACC,MAAM,CAAC,EAAEP,OAAOR,UAAU,CAAC,QAAQ,EAAEQ,OAAOR,UAAU,KAAK,IAAI,KAAK,IAAI,oEAAoE,CAAC;SACpJ;IACH,OAAO;QACL,OAAO,EAAE;IACX;AACF;AAGO,SAASZ,2BAA2BoB,MAA6B;IACtE,KAAK,MAAMQ,QAAQ7B,0BAA0BqB,QAAS;QACpDS,KAAIC,GAAG,CAACF;IACV;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/interface/commandsTable.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport wrapAnsi from 'wrap-ansi';\n\nimport * as Log from '../../log';\nimport type { DependencyCheckResult } from '../checkDependenciesOnStart';\nimport type { McpServer } from '../server/MCP';\n\n// Approximately how many rows apart from the commands table (usage guide on `expo start`)\n// will be printed after the QR code? The `rows` input doesn't account for all of them,\n// so we add our best guess instead.\nconst RESERVED_ROWS = 6;\n\nexport const BLT = '\\u203A';\n\nexport type StartOptions = {\n isWebSocketsEnabled?: boolean;\n devClient?: boolean;\n reset?: boolean;\n nonPersistent?: boolean;\n maxWorkers?: number;\n platforms?: ExpoConfig['platforms'];\n mcpServer?: McpServer;\n dependencyCheckPromise?: Promise<DependencyCheckResult | null>;\n};\n\nexport const printHelp = (): void => {\n logCommandsTable([{ key: '?', msg: 'show all commands' }]).print();\n};\n\nexport const getTerminalColumns = () => process.stdout.columns || 80;\n\nexport const printItem = (text: string, opts?: { dim: boolean }): string => {\n let output = `${BLT} ` + wrapAnsi(text, getTerminalColumns()).trimStart();\n if (opts?.dim) {\n output = chalk`{dim ${output}}`;\n }\n return output;\n};\n\nexport function printUsage(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>,\n { verbose, rows }: { verbose: boolean; rows?: number }\n) {\n const isMac = process.platform === 'darwin';\n\n const { platforms = ['ios', 'android', 'web'] } = options;\n\n const isAndroidDisabled = !platforms.includes('android');\n const isIosDisabled = !platforms.includes('ios');\n const isWebDisable = !platforms.includes('web');\n\n const switchMsg = `switch to ${options.devClient === false ? 'development build' : 'Expo Go'}`;\n const target = options.devClient === false ? `Expo Go` : 'development build';\n\n const printPrefix = ({ short }: { short: boolean }) => {\n Log.log();\n let message = chalk`Using {cyan ${target}}`;\n if (!short) {\n message += chalk` {dim (Press {bold s} to ${switchMsg})}`;\n }\n Log.log(printItem(message));\n };\n\n if (verbose) {\n printPrefix({ short: true });\n return logCommandsTable([\n { key: 's', msg: switchMsg },\n {},\n { key: 'a', msg: 'open Android', disabled: isAndroidDisabled },\n { key: 'shift+a', msg: 'select an Android device or emulator', disabled: isAndroidDisabled },\n isMac && { key: 'i', msg: 'open iOS simulator', disabled: isIosDisabled },\n isMac && { key: 'shift+i', msg: 'select an iOS simulator', disabled: isIosDisabled },\n { key: 'w', msg: 'open web', disabled: isWebDisable },\n {},\n { key: 'r', msg: 'reload app' },\n !!options.isWebSocketsEnabled && { key: 'j', msg: 'open debugger' },\n !!options.isWebSocketsEnabled && { key: 'm', msg: 'toggle menu' },\n !!options.isWebSocketsEnabled && { key: 'shift+m', msg: 'more tools' },\n { key: 'o', msg: 'open project code in your editor' },\n { key: 'c', msg: 'show project QR' },\n {},\n ]).print();\n }\n\n const table = logCommandsTable([\n { key: 's', msg: switchMsg },\n {},\n { key: 'a', msg: 'open Android', disabled: isAndroidDisabled },\n isMac && { key: 'i', msg: 'open iOS simulator', disabled: isIosDisabled },\n { key: 'w', msg: 'open web', disabled: isWebDisable },\n {},\n { key: 'j', msg: 'open debugger' },\n { key: 'r', msg: 'reload app' },\n !!options.isWebSocketsEnabled && { key: 'm', msg: 'toggle menu' },\n !!options.isWebSocketsEnabled && { key: 'shift+m', msg: 'more tools' },\n { key: 'o', msg: 'open project code in your editor' },\n {},\n ]);\n\n // If we're not in verbose mode, we check if we have enough space. If we don't, we don't print\n // the full usage guide and rely on the `printHelp()` message being shown instead\n if ((rows || Infinity) - RESERVED_ROWS > table.lines) {\n printPrefix({ short: true });\n table.print();\n } else {\n printPrefix({ short: false });\n }\n}\n\nfunction logCommandsTable(\n ui: (false | { key?: string; msg?: string; status?: string; disabled?: boolean })[]\n) {\n const lines = ui\n .filter((x) => !!x)\n .map(({ key, msg, status, disabled }) => {\n if (!key) return '';\n let view = `${BLT} `;\n if (key.length === 1) view += 'Press ';\n view += chalk`{bold ${key}} {dim │} `;\n view += msg;\n if (status) {\n view += ` ${chalk.dim(`(${chalk.italic(status)})`)}`;\n }\n if (disabled) {\n view = chalk.dim(view);\n }\n return view;\n });\n return {\n lines: lines.length,\n print() {\n Log.log(lines.join('\\n'));\n },\n };\n}\n"],"names":["BLT","getTerminalColumns","printHelp","printItem","printUsage","RESERVED_ROWS","logCommandsTable","key","msg","print","process","stdout","columns","text","opts","output","wrapAnsi","trimStart","dim","chalk","options","verbose","rows","isMac","platform","platforms","isAndroidDisabled","includes","isIosDisabled","isWebDisable","switchMsg","devClient","target","printPrefix","short","Log","log","message","disabled","isWebSocketsEnabled","table","Infinity","lines","ui","filter","x","map","status","view","length","italic","join"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/start/interface/commandsTable.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport wrapAnsi from 'wrap-ansi';\n\nimport * as Log from '../../log';\nimport type { DependencyCheckRef } from '../checkDependenciesOnStart';\nimport type { McpServer } from '../server/MCP';\n\n// Approximately how many rows apart from the commands table (usage guide on `expo start`)\n// will be printed after the QR code? The `rows` input doesn't account for all of them,\n// so we add our best guess instead.\nconst RESERVED_ROWS = 6;\n\nexport const BLT = '\\u203A';\n\nexport type StartOptions = {\n isWebSocketsEnabled?: boolean;\n devClient?: boolean;\n reset?: boolean;\n nonPersistent?: boolean;\n maxWorkers?: number;\n platforms?: ExpoConfig['platforms'];\n mcpServer?: McpServer;\n dependencyCheckRef?: DependencyCheckRef;\n};\n\nexport const printHelp = (): void => {\n logCommandsTable([{ key: '?', msg: 'show all commands' }]).print();\n};\n\nexport const getTerminalColumns = () => process.stdout.columns || 80;\n\nexport const printItem = (text: string, opts?: { dim: boolean }): string => {\n let output = `${BLT} ` + wrapAnsi(text, getTerminalColumns()).trimStart();\n if (opts?.dim) {\n output = chalk`{dim ${output}}`;\n }\n return output;\n};\n\nexport function printUsage(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>,\n { verbose, rows }: { verbose: boolean; rows?: number }\n) {\n const isMac = process.platform === 'darwin';\n\n const { platforms = ['ios', 'android', 'web'] } = options;\n\n const isAndroidDisabled = !platforms.includes('android');\n const isIosDisabled = !platforms.includes('ios');\n const isWebDisable = !platforms.includes('web');\n\n const switchMsg = `switch to ${options.devClient === false ? 'development build' : 'Expo Go'}`;\n const target = options.devClient === false ? `Expo Go` : 'development build';\n\n const printPrefix = ({ short }: { short: boolean }) => {\n Log.log();\n let message = chalk`Using {cyan ${target}}`;\n if (!short) {\n message += chalk` {dim (Press {bold s} to ${switchMsg})}`;\n }\n Log.log(printItem(message));\n };\n\n if (verbose) {\n printPrefix({ short: true });\n return logCommandsTable([\n { key: 's', msg: switchMsg },\n {},\n { key: 'a', msg: 'open Android', disabled: isAndroidDisabled },\n { key: 'shift+a', msg: 'select an Android device or emulator', disabled: isAndroidDisabled },\n isMac && { key: 'i', msg: 'open iOS simulator', disabled: isIosDisabled },\n isMac && { key: 'shift+i', msg: 'select an iOS simulator', disabled: isIosDisabled },\n { key: 'w', msg: 'open web', disabled: isWebDisable },\n {},\n { key: 'r', msg: 'reload app' },\n !!options.isWebSocketsEnabled && { key: 'j', msg: 'open debugger' },\n !!options.isWebSocketsEnabled && { key: 'm', msg: 'toggle menu' },\n !!options.isWebSocketsEnabled && { key: 'shift+m', msg: 'more tools' },\n { key: 'o', msg: 'open project code in your editor' },\n { key: 'c', msg: 'show project QR' },\n {},\n ]).print();\n }\n\n const table = logCommandsTable([\n { key: 's', msg: switchMsg },\n {},\n { key: 'a', msg: 'open Android', disabled: isAndroidDisabled },\n isMac && { key: 'i', msg: 'open iOS simulator', disabled: isIosDisabled },\n { key: 'w', msg: 'open web', disabled: isWebDisable },\n {},\n { key: 'j', msg: 'open debugger' },\n { key: 'r', msg: 'reload app' },\n !!options.isWebSocketsEnabled && { key: 'm', msg: 'toggle menu' },\n !!options.isWebSocketsEnabled && { key: 'shift+m', msg: 'more tools' },\n { key: 'o', msg: 'open project code in your editor' },\n {},\n ]);\n\n // If we're not in verbose mode, we check if we have enough space. If we don't, we don't print\n // the full usage guide and rely on the `printHelp()` message being shown instead\n if ((rows || Infinity) - RESERVED_ROWS > table.lines) {\n printPrefix({ short: true });\n table.print();\n } else {\n printPrefix({ short: false });\n }\n}\n\nfunction logCommandsTable(\n ui: (false | { key?: string; msg?: string; status?: string; disabled?: boolean })[]\n) {\n const lines = ui\n .filter((x) => !!x)\n .map(({ key, msg, status, disabled }) => {\n if (!key) return '';\n let view = `${BLT} `;\n if (key.length === 1) view += 'Press ';\n view += chalk`{bold ${key}} {dim │} `;\n view += msg;\n if (status) {\n view += ` ${chalk.dim(`(${chalk.italic(status)})`)}`;\n }\n if (disabled) {\n view = chalk.dim(view);\n }\n return view;\n });\n return {\n lines: lines.length,\n print() {\n Log.log(lines.join('\\n'));\n },\n };\n}\n"],"names":["BLT","getTerminalColumns","printHelp","printItem","printUsage","RESERVED_ROWS","logCommandsTable","key","msg","print","process","stdout","columns","text","opts","output","wrapAnsi","trimStart","dim","chalk","options","verbose","rows","isMac","platform","platforms","isAndroidDisabled","includes","isIosDisabled","isWebDisable","switchMsg","devClient","target","printPrefix","short","Log","log","message","disabled","isWebSocketsEnabled","table","Infinity","lines","ui","filter","x","map","status","view","length","italic","join"],"mappings":"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"}
@@ -22,6 +22,7 @@ const _env = require("../../utils/env");
22
22
  const _link = require("../../utils/link");
23
23
  const _prompts = require("../../utils/prompts");
24
24
  const _qr = require("../../utils/qr");
25
+ const _checkDependenciesOnStart = require("../checkDependenciesOnStart");
25
26
  const _JsInspector = require("../server/middleware/inspector/JsInspector");
26
27
  function _interop_require_default(obj) {
27
28
  return obj && obj.__esModule ? obj : {
@@ -76,7 +77,7 @@ class DevServerManagerActions {
76
77
  this.options = options;
77
78
  }
78
79
  printDevServerInfo(options) {
79
- var _this_options_platforms;
80
+ var _this_options_platforms, _options_dependencyCheckRef;
80
81
  // Keep track of approximately how much space we have to print our usage guide
81
82
  let rows = process.stdout.rows || Infinity;
82
83
  // If native dev server is running, print its URL.
@@ -137,12 +138,17 @@ class DevServerManagerActions {
137
138
  rows--;
138
139
  }
139
140
  }
141
+ const dependencyCheckLines = (0, _checkDependenciesOnStart.getDependencyCheckMessage)((_options_dependencyCheckRef = options.dependencyCheckRef) == null ? void 0 : _options_dependencyCheckRef.result);
142
+ rows -= dependencyCheckLines.length;
140
143
  (0, _commandsTable.printUsage)(options, {
141
144
  verbose: false,
142
145
  rows
143
146
  });
144
147
  (0, _commandsTable.printHelp)();
145
148
  _log.log();
149
+ for (const line of dependencyCheckLines){
150
+ _log.log(line);
151
+ }
146
152
  }
147
153
  async openJsInspectorAsync() {
148
154
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/interface/interactiveActions.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport type { StartOptions } from './commandsTable';\nimport { BLT, printHelp, printItem, printUsage } from './commandsTable';\nimport { createDevToolsMenuItems } from './createDevToolsMenuItems';\nimport * as Log from '../../log';\nimport { env } from '../../utils/env';\nimport { learnMore } from '../../utils/link';\nimport type { ExpoChoice } from '../../utils/prompts';\nimport { selectAsync } from '../../utils/prompts';\nimport { printQRCode } from '../../utils/qr';\nimport type { DevServerManager } from '../server/DevServerManager';\nimport {\n openJsInspector,\n queryAllInspectorAppsAsync,\n promptInspectorAppAsync,\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(\n private devServerManager: DevServerManager,\n private options: Pick<StartOptions, 'devClient' | 'platforms'>\n ) {}\n\n printDevServerInfo(\n options: Pick<StartOptions, 'devClient' | 'isWebSocketsEnabled' | 'platforms'>\n ) {\n // Keep track of approximately how much space we have to print our usage guide\n let rows = process.stdout.rows || Infinity;\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 // Print the URL to stdout for tests\n if (env.__EXPO_E2E_TEST) {\n console.info(\n `[__EXPO_E2E_TEST:server] ${JSON.stringify({ url: devServer.getDevServerUrl() })}`\n );\n rows--;\n }\n\n if (!env.EXPO_NO_QR_CODE) {\n const qr = printQRCode(interstitialPageUrl ?? nativeRuntimeUrl);\n rows -= qr.lines;\n qr.print();\n\n let qrMessage = '';\n if (!options.devClient) {\n qrMessage = `Scan the QR code above to open in ${chalk`{bold Expo Go}`}.`;\n } else {\n qrMessage = chalk`Scan the QR code above to open in a {bold development build}.`;\n qrMessage += ` (${learnMore('https://expo.fyi/start')})`;\n }\n rows--;\n Log.log(printItem(qrMessage, { dim: true }));\n }\n\n if (interstitialPageUrl) {\n rows--;\n Log.log(\n printItem(\n chalk`Choose an app to open your project at {underline ${interstitialPageUrl}}`\n )\n );\n }\n\n rows--;\n Log.log(printItem(chalk`Metro: {underline ${nativeRuntimeUrl}}`));\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: {underline ${serverUrl}}`));\n Log.log(printItem(`Linking is disabled because the client scheme cannot be resolved.`));\n rows -= 2;\n }\n }\n }\n\n if (this.options.platforms?.includes('web')) {\n const webDevServer = this.devServerManager.getWebDevServer();\n const webUrl = webDevServer?.getDevServerUrl({ hostType: 'localhost' });\n if (webUrl) {\n Log.log(printItem(chalk`Web: {underline ${webUrl}}`));\n rows--;\n }\n }\n\n printUsage(options, { verbose: false, rows });\n printHelp();\n Log.log();\n }\n\n async openJsInspectorAsync() {\n try {\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n if (!apps.length) {\n return Log.warn(\n chalk`{bold Debug:} No compatible apps connected, React Native DevTools can only be used with Hermes. ${learnMore(\n 'https://docs.expo.dev/guides/using-hermes/'\n )}`\n );\n }\n\n const app = await promptInspectorAppAsync(apps);\n if (!app) {\n return Log.error(chalk`{bold Debug:} No inspectable device selected`);\n }\n\n if (!(await openJsInspector(metroServerOrigin, app))) {\n Log.warn(\n chalk`{bold Debug:} Failed to open the React Native DevTools, see debug logs for more info.`\n );\n }\n } catch (error: any) {\n // Handle aborting prompt\n if (error.code === 'ABORTED') return;\n\n Log.error('Failed to open the React Native DevTools.');\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 // TODO: Maybe a \"View Source\" option to open code.\n ];\n\n const defaultServerUrl = this.devServerManager\n .getDefaultDevServer()\n .getUrlCreator()\n .constructUrl({ scheme: 'http' });\n\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const plugins = await this.devServerManager.devtoolsPluginManager.queryPluginsAsync();\n\n const menuItems = [\n ...defaultMenuItems,\n ...createDevToolsMenuItems(plugins, defaultServerUrl, metroServerOrigin),\n ];\n\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 toggleDevMenu() {\n Log.log(`${BLT} Toggling dev menu`);\n this.devServerManager.broadcastMessage('devMenu');\n }\n}\n"],"names":["DevServerManagerActions","debug","require","devServerManager","options","printDevServerInfo","rows","process","stdout","Infinity","getNativeDevServerPort","devServer","getDefaultDevServer","nativeRuntimeUrl","getNativeRuntimeUrl","interstitialPageUrl","getRedirectUrl","env","__EXPO_E2E_TEST","console","info","JSON","stringify","url","getDevServerUrl","EXPO_NO_QR_CODE","qr","printQRCode","lines","print","qrMessage","devClient","chalk","learnMore","Log","log","printItem","dim","error","code","serverUrl","platforms","includes","webDevServer","getWebDevServer","webUrl","hostType","printUsage","verbose","printHelp","openJsInspectorAsync","metroServerOrigin","getJsInspectorBaseUrl","apps","queryAllInspectorAppsAsync","length","warn","app","promptInspectorAppAsync","openJsInspector","exception","reloadApp","BLT","broadcastMessage","openMoreToolsAsync","defaultMenuItems","title","value","defaultServerUrl","getUrlCreator","constructUrl","scheme","plugins","devtoolsPluginManager","queryPluginsAsync","menuItems","createDevToolsMenuItems","selectAsync","menuItem","find","item","action","name","toggleDevMenu"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/start/interface/interactiveActions.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport type { StartOptions } from './commandsTable';\nimport { BLT, printHelp, printItem, printUsage } from './commandsTable';\nimport { createDevToolsMenuItems } from './createDevToolsMenuItems';\nimport * as Log from '../../log';\nimport { env } from '../../utils/env';\nimport { learnMore } from '../../utils/link';\nimport type { ExpoChoice } from '../../utils/prompts';\nimport { selectAsync } from '../../utils/prompts';\nimport { printQRCode } from '../../utils/qr';\nimport { getDependencyCheckMessage } from '../checkDependenciesOnStart';\nimport type { DevServerManager } from '../server/DevServerManager';\nimport {\n openJsInspector,\n queryAllInspectorAppsAsync,\n promptInspectorAppAsync,\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(\n private devServerManager: DevServerManager,\n private options: Pick<StartOptions, 'devClient' | 'platforms'>\n ) {}\n\n printDevServerInfo(\n options: Pick<\n StartOptions,\n 'devClient' | 'isWebSocketsEnabled' | 'platforms' | 'dependencyCheckRef'\n >\n ) {\n // Keep track of approximately how much space we have to print our usage guide\n let rows = process.stdout.rows || Infinity;\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 // Print the URL to stdout for tests\n if (env.__EXPO_E2E_TEST) {\n console.info(\n `[__EXPO_E2E_TEST:server] ${JSON.stringify({ url: devServer.getDevServerUrl() })}`\n );\n rows--;\n }\n\n if (!env.EXPO_NO_QR_CODE) {\n const qr = printQRCode(interstitialPageUrl ?? nativeRuntimeUrl);\n rows -= qr.lines;\n qr.print();\n\n let qrMessage = '';\n if (!options.devClient) {\n qrMessage = `Scan the QR code above to open in ${chalk`{bold Expo Go}`}.`;\n } else {\n qrMessage = chalk`Scan the QR code above to open in a {bold development build}.`;\n qrMessage += ` (${learnMore('https://expo.fyi/start')})`;\n }\n rows--;\n Log.log(printItem(qrMessage, { dim: true }));\n }\n\n if (interstitialPageUrl) {\n rows--;\n Log.log(\n printItem(\n chalk`Choose an app to open your project at {underline ${interstitialPageUrl}}`\n )\n );\n }\n\n rows--;\n Log.log(printItem(chalk`Metro: {underline ${nativeRuntimeUrl}}`));\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: {underline ${serverUrl}}`));\n Log.log(printItem(`Linking is disabled because the client scheme cannot be resolved.`));\n rows -= 2;\n }\n }\n }\n\n if (this.options.platforms?.includes('web')) {\n const webDevServer = this.devServerManager.getWebDevServer();\n const webUrl = webDevServer?.getDevServerUrl({ hostType: 'localhost' });\n if (webUrl) {\n Log.log(printItem(chalk`Web: {underline ${webUrl}}`));\n rows--;\n }\n }\n\n const dependencyCheckLines = getDependencyCheckMessage(options.dependencyCheckRef?.result);\n rows -= dependencyCheckLines.length;\n\n printUsage(options, { verbose: false, rows });\n printHelp();\n Log.log();\n\n for (const line of dependencyCheckLines) {\n Log.log(line);\n }\n }\n\n async openJsInspectorAsync() {\n try {\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n if (!apps.length) {\n return Log.warn(\n chalk`{bold Debug:} No compatible apps connected, React Native DevTools can only be used with Hermes. ${learnMore(\n 'https://docs.expo.dev/guides/using-hermes/'\n )}`\n );\n }\n\n const app = await promptInspectorAppAsync(apps);\n if (!app) {\n return Log.error(chalk`{bold Debug:} No inspectable device selected`);\n }\n\n if (!(await openJsInspector(metroServerOrigin, app))) {\n Log.warn(\n chalk`{bold Debug:} Failed to open the React Native DevTools, see debug logs for more info.`\n );\n }\n } catch (error: any) {\n // Handle aborting prompt\n if (error.code === 'ABORTED') return;\n\n Log.error('Failed to open the React Native DevTools.');\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 // TODO: Maybe a \"View Source\" option to open code.\n ];\n\n const defaultServerUrl = this.devServerManager\n .getDefaultDevServer()\n .getUrlCreator()\n .constructUrl({ scheme: 'http' });\n\n const metroServerOrigin = this.devServerManager.getDefaultDevServer().getJsInspectorBaseUrl();\n const plugins = await this.devServerManager.devtoolsPluginManager.queryPluginsAsync();\n\n const menuItems = [\n ...defaultMenuItems,\n ...createDevToolsMenuItems(plugins, defaultServerUrl, metroServerOrigin),\n ];\n\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 toggleDevMenu() {\n Log.log(`${BLT} Toggling dev menu`);\n this.devServerManager.broadcastMessage('devMenu');\n }\n}\n"],"names":["DevServerManagerActions","debug","require","devServerManager","options","printDevServerInfo","rows","process","stdout","Infinity","getNativeDevServerPort","devServer","getDefaultDevServer","nativeRuntimeUrl","getNativeRuntimeUrl","interstitialPageUrl","getRedirectUrl","env","__EXPO_E2E_TEST","console","info","JSON","stringify","url","getDevServerUrl","EXPO_NO_QR_CODE","qr","printQRCode","lines","print","qrMessage","devClient","chalk","learnMore","Log","log","printItem","dim","error","code","serverUrl","platforms","includes","webDevServer","getWebDevServer","webUrl","hostType","dependencyCheckLines","getDependencyCheckMessage","dependencyCheckRef","result","length","printUsage","verbose","printHelp","line","openJsInspectorAsync","metroServerOrigin","getJsInspectorBaseUrl","apps","queryAllInspectorAppsAsync","warn","app","promptInspectorAppAsync","openJsInspector","exception","reloadApp","BLT","broadcastMessage","openMoreToolsAsync","defaultMenuItems","title","value","defaultServerUrl","getUrlCreator","constructUrl","scheme","plugins","devtoolsPluginManager","queryPluginsAsync","menuItems","createDevToolsMenuItems","selectAsync","menuItem","find","item","action","name","toggleDevMenu"],"mappings":"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"}
@@ -24,7 +24,6 @@ const _errors = require("../../utils/errors");
24
24
  const _ora = require("../../utils/ora");
25
25
  const _progress = require("../../utils/progress");
26
26
  const _prompts = require("../../utils/prompts");
27
- const _checkDependenciesOnStart = require("../checkDependenciesOnStart");
28
27
  const _WebSupportProjectPrerequisite = require("../doctor/web/WebSupportProjectPrerequisite");
29
28
  function _interop_require_default(obj) {
30
29
  return obj && obj.__esModule ? obj : {
@@ -90,6 +89,13 @@ const PLATFORM_SETTINGS = {
90
89
  };
91
90
  async function startInterfaceAsync(devServerManager, options) {
92
91
  var _devServerManager_getDefaultDevServer;
92
+ // Spend one-tick waiting for the dependency check result
93
+ if (options.dependencyCheckRef) {
94
+ await Promise.race([
95
+ options.dependencyCheckRef.promise,
96
+ Promise.resolve(null)
97
+ ]);
98
+ }
93
99
  const actions = new _interactiveActions.DevServerManagerActions(devServerManager, options);
94
100
  const isWebSocketsEnabled = (_devServerManager_getDefaultDevServer = devServerManager.getDefaultDevServer()) == null ? void 0 : _devServerManager_getDefaultDevServer.isTargetingNative();
95
101
  const usageOptions = {
@@ -97,31 +103,7 @@ async function startInterfaceAsync(devServerManager, options) {
97
103
  devClient: devServerManager.options.devClient,
98
104
  ...options
99
105
  };
100
- // Print the dependency check if it completed (it runs in the background since early startup).
101
- // With a warm fetch cache this resolves near-instantly, so we defer by a tick
102
- // On cold starts it may not be ready, in which case it will appear on the next reprint or restart
103
- let dependencyCheckResult;
104
- if (options.dependencyCheckPromise) {
105
- dependencyCheckResult = await Promise.race([
106
- options.dependencyCheckPromise,
107
- Promise.resolve(null)
108
- ]);
109
- if (!dependencyCheckResult) {
110
- // Not ready yet — capture once resolved for display on next reprint
111
- options.dependencyCheckPromise.then((result)=>{
112
- if (result) {
113
- dependencyCheckResult = result;
114
- }
115
- });
116
- }
117
- }
118
- const printDependencyCheckIfAvailable = ()=>{
119
- if (dependencyCheckResult) {
120
- (0, _checkDependenciesOnStart.printDependencyCheckResult)(dependencyCheckResult);
121
- }
122
- };
123
106
  actions.printDevServerInfo(usageOptions);
124
- printDependencyCheckIfAvailable();
125
107
  const onPressAsync = async (key)=>{
126
108
  // Auxillary commands all escape.
127
109
  switch(key){
@@ -224,7 +206,6 @@ async function startInterfaceAsync(devServerManager, options) {
224
206
  if (await devServerManager.toggleRuntimeMode()) {
225
207
  usageOptions.devClient = devServerManager.options.devClient;
226
208
  actions.printDevServerInfo(usageOptions);
227
- printDependencyCheckIfAvailable();
228
209
  return;
229
210
  }
230
211
  break;
@@ -269,7 +250,6 @@ async function startInterfaceAsync(devServerManager, options) {
269
250
  case 'c':
270
251
  _log.clear();
271
252
  actions.printDevServerInfo(usageOptions);
272
- printDependencyCheckIfAvailable();
273
253
  return;
274
254
  case 'j':
275
255
  return actions.openJsInspectorAsync();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/interface/startInterface.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { KeyPressHandler } from './KeyPressHandler';\nimport type { StartOptions } from './commandsTable';\nimport { BLT, printHelp, printUsage } from './commandsTable';\nimport { DevServerManagerActions } from './interactiveActions';\nimport * as Log from '../../log';\nimport { openInEditorAsync } from '../../utils/editor';\nimport { AbortCommandError } from '../../utils/errors';\nimport { getAllSpinners, ora } from '../../utils/ora';\nimport { getProgressBar, setProgressBar } from '../../utils/progress';\nimport { addInteractionListener, pauseInteractions } from '../../utils/prompts';\nimport type { DependencyCheckResult } from '../checkDependenciesOnStart';\nimport { printDependencyCheckResult } from '../checkDependenciesOnStart';\nimport { WebSupportProjectPrerequisite } from '../doctor/web/WebSupportProjectPrerequisite';\nimport type { DevServerManager } from '../server/DevServerManager';\n\nconst debug = require('debug')('expo:start:interface:startInterface') as typeof console.log;\n\nconst CTRL_C = '\\u0003';\nconst CTRL_D = '\\u0004';\nconst CTRL_L = '\\u000C';\n\nconst PLATFORM_SETTINGS: Record<\n string,\n { name: string; key: 'android' | 'ios'; launchTarget: 'emulator' | 'simulator' }\n> = {\n android: {\n name: 'Android',\n key: 'android',\n launchTarget: 'emulator',\n },\n ios: {\n name: 'iOS',\n key: 'ios',\n launchTarget: 'simulator',\n },\n};\n\nexport async function startInterfaceAsync(\n devServerManager: DevServerManager,\n options: Pick<StartOptions, 'devClient' | 'platforms' | 'mcpServer' | 'dependencyCheckPromise'>\n) {\n const actions = new DevServerManagerActions(devServerManager, options);\n\n const isWebSocketsEnabled = devServerManager.getDefaultDevServer()?.isTargetingNative();\n\n const usageOptions = {\n isWebSocketsEnabled,\n devClient: devServerManager.options.devClient,\n ...options,\n };\n\n // Print the dependency check if it completed (it runs in the background since early startup).\n // With a warm fetch cache this resolves near-instantly, so we defer by a tick\n // On cold starts it may not be ready, in which case it will appear on the next reprint or restart\n let dependencyCheckResult: DependencyCheckResult | null | undefined;\n if (options.dependencyCheckPromise) {\n dependencyCheckResult = await Promise.race([\n options.dependencyCheckPromise,\n Promise.resolve(null),\n ]);\n if (!dependencyCheckResult) {\n // Not ready yet — capture once resolved for display on next reprint\n options.dependencyCheckPromise.then((result) => {\n if (result) {\n dependencyCheckResult = result;\n }\n });\n }\n }\n\n const printDependencyCheckIfAvailable = () => {\n if (dependencyCheckResult) {\n printDependencyCheckResult(dependencyCheckResult);\n }\n };\n\n actions.printDevServerInfo(usageOptions);\n printDependencyCheckIfAvailable();\n\n const onPressAsync = async (key: string) => {\n // Auxillary commands all escape.\n switch (key) {\n case CTRL_C:\n case CTRL_D: {\n // Prevent terminal UI from accepting commands while the process is closing.\n // Without this, fast typers will close the server then start typing their\n // next command and have a bunch of unrelated things pop up.\n pauseInteractions();\n\n const spinners = getAllSpinners();\n spinners.forEach((spinner) => {\n spinner.fail();\n });\n\n const currentProgress = getProgressBar();\n if (currentProgress) {\n currentProgress.terminate();\n setProgressBar(null);\n }\n const spinner = ora({ text: 'Stopping server', color: 'white' }).start();\n try {\n await devServerManager.stopAsync();\n if (options.mcpServer) {\n await options.mcpServer.closeAsync();\n }\n spinner.stopAndPersist({ text: 'Stopped server', symbol: `\\u203A` });\n // @ts-ignore: Argument of type '\"SIGINT\"' is not assignable to parameter of type '\"disconnect\"'.\n process.emit('SIGINT');\n\n // TODO: Is this the right place to do this?\n process.exit();\n } catch (error) {\n spinner.fail('Failed to stop server');\n throw error;\n }\n break;\n }\n case CTRL_L:\n return Log.clear();\n case '?':\n return printUsage(usageOptions, { verbose: true });\n }\n\n // Optionally enabled\n\n if (isWebSocketsEnabled) {\n switch (key) {\n case 'm':\n return actions.toggleDevMenu();\n case 'M':\n return actions.openMoreToolsAsync();\n }\n }\n\n const { platforms = ['ios', 'android', 'web'] } = options;\n\n if (['i', 'a'].includes(key.toLowerCase())) {\n const platform = key.toLowerCase() === 'i' ? 'ios' : 'android';\n\n const shouldPrompt = ['I', 'A'].includes(key);\n if (shouldPrompt) {\n Log.clear();\n }\n\n const server = devServerManager.getDefaultDevServer();\n const settings = PLATFORM_SETTINGS[platform]!;\n\n Log.log(`${BLT} Opening on ${settings.name}...`);\n\n if (server.isTargetingNative() && !platforms.includes(settings.key)) {\n Log.warn(\n chalk`${settings.name} is disabled, enable it by adding {bold ${settings.key}} to the platforms array in your app.json or app.config.js`\n );\n } else {\n try {\n await server.openPlatformAsync(settings.launchTarget, { shouldPrompt });\n printHelp();\n } catch (error: any) {\n if (!(error instanceof AbortCommandError)) {\n Log.exception(error);\n }\n }\n }\n // Break out early.\n return;\n }\n\n switch (key) {\n case 's': {\n Log.clear();\n if (await devServerManager.toggleRuntimeMode()) {\n usageOptions.devClient = devServerManager.options.devClient;\n actions.printDevServerInfo(usageOptions);\n printDependencyCheckIfAvailable();\n return;\n }\n break;\n }\n case 'w': {\n try {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n if (!platforms.includes('web')) {\n platforms.push('web');\n options.platforms?.push('web');\n }\n } catch (e: any) {\n Log.warn(e.message);\n break;\n }\n\n const isDisabled = !platforms.includes('web');\n if (isDisabled) {\n debug('Web is disabled');\n // Use warnings from the web support setup.\n break;\n }\n\n // Ensure the Webpack dev server is running first\n if (!devServerManager.getWebDevServer()) {\n debug('Starting up webpack dev server');\n await devServerManager.ensureWebDevServerRunningAsync();\n // When this is the first time webpack is started, reprint the connection info.\n actions.printDevServerInfo(usageOptions);\n }\n\n Log.log(`${BLT} Open in the web browser...`);\n try {\n await devServerManager.getWebDevServer()?.openPlatformAsync('desktop');\n printHelp();\n } catch (error: any) {\n if (!(error instanceof AbortCommandError)) {\n Log.exception(error);\n }\n }\n break;\n }\n case 'c':\n Log.clear();\n actions.printDevServerInfo(usageOptions);\n printDependencyCheckIfAvailable();\n return;\n case 'j':\n return actions.openJsInspectorAsync();\n case 'r':\n return actions.reloadApp();\n case 'o':\n Log.log(`${BLT} Opening the editor...`);\n return openInEditorAsync(devServerManager.projectRoot);\n }\n };\n\n const keyPressHandler = new KeyPressHandler(onPressAsync);\n\n const listener = keyPressHandler.createInteractionListener();\n\n addInteractionListener(listener);\n\n // Start observing...\n keyPressHandler.startInterceptingKeyStrokes();\n}\n"],"names":["startInterfaceAsync","debug","require","CTRL_C","CTRL_D","CTRL_L","PLATFORM_SETTINGS","android","name","key","launchTarget","ios","devServerManager","options","actions","DevServerManagerActions","isWebSocketsEnabled","getDefaultDevServer","isTargetingNative","usageOptions","devClient","dependencyCheckResult","dependencyCheckPromise","Promise","race","resolve","then","result","printDependencyCheckIfAvailable","printDependencyCheckResult","printDevServerInfo","onPressAsync","pauseInteractions","spinners","getAllSpinners","forEach","spinner","fail","currentProgress","getProgressBar","terminate","setProgressBar","ora","text","color","start","stopAsync","mcpServer","closeAsync","stopAndPersist","symbol","process","emit","exit","error","Log","clear","printUsage","verbose","toggleDevMenu","openMoreToolsAsync","platforms","includes","toLowerCase","platform","shouldPrompt","server","settings","log","BLT","warn","chalk","openPlatformAsync","printHelp","AbortCommandError","exception","toggleRuntimeMode","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","push","e","message","isDisabled","getWebDevServer","ensureWebDevServerRunningAsync","openJsInspectorAsync","reloadApp","openInEditorAsync","projectRoot","keyPressHandler","KeyPressHandler","listener","createInteractionListener","addInteractionListener","startInterceptingKeyStrokes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/start/interface/startInterface.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { KeyPressHandler } from './KeyPressHandler';\nimport type { StartOptions } from './commandsTable';\nimport { BLT, printHelp, printUsage } from './commandsTable';\nimport { DevServerManagerActions } from './interactiveActions';\nimport * as Log from '../../log';\nimport { openInEditorAsync } from '../../utils/editor';\nimport { AbortCommandError } from '../../utils/errors';\nimport { getAllSpinners, ora } from '../../utils/ora';\nimport { getProgressBar, setProgressBar } from '../../utils/progress';\nimport { addInteractionListener, pauseInteractions } from '../../utils/prompts';\nimport { WebSupportProjectPrerequisite } from '../doctor/web/WebSupportProjectPrerequisite';\nimport type { DevServerManager } from '../server/DevServerManager';\n\nconst debug = require('debug')('expo:start:interface:startInterface') as typeof console.log;\n\nconst CTRL_C = '\\u0003';\nconst CTRL_D = '\\u0004';\nconst CTRL_L = '\\u000C';\n\nconst PLATFORM_SETTINGS: Record<\n string,\n { name: string; key: 'android' | 'ios'; launchTarget: 'emulator' | 'simulator' }\n> = {\n android: {\n name: 'Android',\n key: 'android',\n launchTarget: 'emulator',\n },\n ios: {\n name: 'iOS',\n key: 'ios',\n launchTarget: 'simulator',\n },\n};\n\nexport async function startInterfaceAsync(\n devServerManager: DevServerManager,\n options: Pick<StartOptions, 'devClient' | 'platforms' | 'mcpServer' | 'dependencyCheckRef'>\n) {\n // Spend one-tick waiting for the dependency check result\n if (options.dependencyCheckRef) {\n await Promise.race([options.dependencyCheckRef.promise, Promise.resolve(null)]);\n }\n\n const actions = new DevServerManagerActions(devServerManager, options);\n const isWebSocketsEnabled = devServerManager.getDefaultDevServer()?.isTargetingNative();\n const usageOptions = {\n isWebSocketsEnabled,\n devClient: devServerManager.options.devClient,\n ...options,\n };\n\n actions.printDevServerInfo(usageOptions);\n\n const onPressAsync = async (key: string) => {\n // Auxillary commands all escape.\n switch (key) {\n case CTRL_C:\n case CTRL_D: {\n // Prevent terminal UI from accepting commands while the process is closing.\n // Without this, fast typers will close the server then start typing their\n // next command and have a bunch of unrelated things pop up.\n pauseInteractions();\n\n const spinners = getAllSpinners();\n spinners.forEach((spinner) => {\n spinner.fail();\n });\n\n const currentProgress = getProgressBar();\n if (currentProgress) {\n currentProgress.terminate();\n setProgressBar(null);\n }\n const spinner = ora({ text: 'Stopping server', color: 'white' }).start();\n try {\n await devServerManager.stopAsync();\n if (options.mcpServer) {\n await options.mcpServer.closeAsync();\n }\n spinner.stopAndPersist({ text: 'Stopped server', symbol: `\\u203A` });\n // @ts-ignore: Argument of type '\"SIGINT\"' is not assignable to parameter of type '\"disconnect\"'.\n process.emit('SIGINT');\n\n // TODO: Is this the right place to do this?\n process.exit();\n } catch (error) {\n spinner.fail('Failed to stop server');\n throw error;\n }\n break;\n }\n case CTRL_L:\n return Log.clear();\n case '?':\n return printUsage(usageOptions, { verbose: true });\n }\n\n // Optionally enabled\n\n if (isWebSocketsEnabled) {\n switch (key) {\n case 'm':\n return actions.toggleDevMenu();\n case 'M':\n return actions.openMoreToolsAsync();\n }\n }\n\n const { platforms = ['ios', 'android', 'web'] } = options;\n\n if (['i', 'a'].includes(key.toLowerCase())) {\n const platform = key.toLowerCase() === 'i' ? 'ios' : 'android';\n\n const shouldPrompt = ['I', 'A'].includes(key);\n if (shouldPrompt) {\n Log.clear();\n }\n\n const server = devServerManager.getDefaultDevServer();\n const settings = PLATFORM_SETTINGS[platform]!;\n\n Log.log(`${BLT} Opening on ${settings.name}...`);\n\n if (server.isTargetingNative() && !platforms.includes(settings.key)) {\n Log.warn(\n chalk`${settings.name} is disabled, enable it by adding {bold ${settings.key}} to the platforms array in your app.json or app.config.js`\n );\n } else {\n try {\n await server.openPlatformAsync(settings.launchTarget, { shouldPrompt });\n printHelp();\n } catch (error: any) {\n if (!(error instanceof AbortCommandError)) {\n Log.exception(error);\n }\n }\n }\n // Break out early.\n return;\n }\n\n switch (key) {\n case 's': {\n Log.clear();\n if (await devServerManager.toggleRuntimeMode()) {\n usageOptions.devClient = devServerManager.options.devClient;\n actions.printDevServerInfo(usageOptions);\n return;\n }\n break;\n }\n case 'w': {\n try {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n if (!platforms.includes('web')) {\n platforms.push('web');\n options.platforms?.push('web');\n }\n } catch (e: any) {\n Log.warn(e.message);\n break;\n }\n\n const isDisabled = !platforms.includes('web');\n if (isDisabled) {\n debug('Web is disabled');\n // Use warnings from the web support setup.\n break;\n }\n\n // Ensure the Webpack dev server is running first\n if (!devServerManager.getWebDevServer()) {\n debug('Starting up webpack dev server');\n await devServerManager.ensureWebDevServerRunningAsync();\n // When this is the first time webpack is started, reprint the connection info.\n actions.printDevServerInfo(usageOptions);\n }\n\n Log.log(`${BLT} Open in the web browser...`);\n try {\n await devServerManager.getWebDevServer()?.openPlatformAsync('desktop');\n printHelp();\n } catch (error: any) {\n if (!(error instanceof AbortCommandError)) {\n Log.exception(error);\n }\n }\n break;\n }\n case 'c':\n Log.clear();\n actions.printDevServerInfo(usageOptions);\n return;\n case 'j':\n return actions.openJsInspectorAsync();\n case 'r':\n return actions.reloadApp();\n case 'o':\n Log.log(`${BLT} Opening the editor...`);\n return openInEditorAsync(devServerManager.projectRoot);\n }\n };\n\n const keyPressHandler = new KeyPressHandler(onPressAsync);\n\n const listener = keyPressHandler.createInteractionListener();\n\n addInteractionListener(listener);\n\n // Start observing...\n keyPressHandler.startInterceptingKeyStrokes();\n}\n"],"names":["startInterfaceAsync","debug","require","CTRL_C","CTRL_D","CTRL_L","PLATFORM_SETTINGS","android","name","key","launchTarget","ios","devServerManager","options","dependencyCheckRef","Promise","race","promise","resolve","actions","DevServerManagerActions","isWebSocketsEnabled","getDefaultDevServer","isTargetingNative","usageOptions","devClient","printDevServerInfo","onPressAsync","pauseInteractions","spinners","getAllSpinners","forEach","spinner","fail","currentProgress","getProgressBar","terminate","setProgressBar","ora","text","color","start","stopAsync","mcpServer","closeAsync","stopAndPersist","symbol","process","emit","exit","error","Log","clear","printUsage","verbose","toggleDevMenu","openMoreToolsAsync","platforms","includes","toLowerCase","platform","shouldPrompt","server","settings","log","BLT","warn","chalk","openPlatformAsync","printHelp","AbortCommandError","exception","toggleRuntimeMode","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","push","e","message","isDisabled","getWebDevServer","ensureWebDevServerRunningAsync","openJsInspectorAsync","reloadApp","openInEditorAsync","projectRoot","keyPressHandler","KeyPressHandler","listener","createInteractionListener","addInteractionListener","startInterceptingKeyStrokes"],"mappings":"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"}
@@ -152,7 +152,7 @@ async function resolvePortsAsync(projectRoot, options, settings) {
152
152
  // Default web port
153
153
  fallbackPort: 19006
154
154
  });
155
- if (!webpackPort) {
155
+ if (webpackPort == null) {
156
156
  throw new _errors.AbortCommandError();
157
157
  }
158
158
  multiBundlerSettings.webpackPort = webpackPort;
@@ -162,7 +162,7 @@ async function resolvePortsAsync(projectRoot, options, settings) {
162
162
  defaultPort: options.port,
163
163
  fallbackPort
164
164
  });
165
- if (!metroPort) {
165
+ if (metroPort == null) {
166
166
  throw new _errors.AbortCommandError();
167
167
  }
168
168
  multiBundlerSettings.metroPort = metroPort;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/start/resolveOptions.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { canResolveDevClient, hasDirectDevClientDependency } from './detectDevClient';\nimport { Log } from '../log';\nimport { envIsWebcontainer } from '../utils/env';\nimport { AbortCommandError, CommandError } from '../utils/errors';\nimport { resolvePortAsync } from '../utils/port';\n\nexport type Options = {\n privateKeyPath: string | null;\n android: boolean;\n web: boolean;\n ios: boolean;\n offline: boolean;\n clear: boolean;\n dev: boolean;\n https: boolean;\n maxWorkers: number;\n port: number;\n /** Should instruct the bundler to create minified bundles. */\n minify: boolean;\n devClient: boolean;\n scheme: string | null;\n host: 'localhost' | 'lan' | 'tunnel';\n};\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n if (args['--dev-client'] && args['--go']) {\n throw new CommandError('BAD_ARGS', 'Cannot use both --dev-client and --go together.');\n }\n const host = resolveHostType({\n host: args['--host'],\n offline: args['--offline'],\n lan: args['--lan'],\n localhost: args['--localhost'],\n tunnel: args['--tunnel'],\n });\n\n if (args['--https']) {\n Log.warn(chalk`{bold --https} option is deprecated in favor of {bold --tunnel}`);\n }\n\n // User can force the default target by passing either `--dev-client` or `--go`. They can also\n // swap between them during development by pressing `s`.\n const isUserDefinedDevClient =\n !!args['--dev-client'] || (args['--go'] == null ? false : !args['--go']);\n\n // If the user didn't specify `--dev-client` or `--go` we check if they have the dev client package\n // in their package.json.\n const isAutoDevClient =\n args['--dev-client'] == null &&\n args['--go'] == null &&\n hasDirectDevClientDependency(projectRoot);\n\n const isDevClient = isAutoDevClient || isUserDefinedDevClient;\n\n const scheme = await resolveSchemeAsync(projectRoot, {\n scheme: args['--scheme'],\n devClient: isDevClient,\n });\n\n return {\n privateKeyPath: args['--private-key-path'] ?? null,\n\n android: !!args['--android'],\n web: !!args['--web'],\n ios: !!args['--ios'],\n offline: !!args['--offline'],\n\n clear: !!args['--clear'],\n dev: !args['--no-dev'],\n https: !!args['--https'],\n maxWorkers: args['--max-workers'],\n port: args['--port'],\n minify: !!args['--minify'],\n\n devClient: isDevClient,\n\n scheme,\n host,\n };\n}\n\nexport async function resolveSchemeAsync(\n projectRoot: string,\n options: { scheme?: string; devClient?: boolean }\n): Promise<string | null> {\n if (typeof options.scheme === 'string') {\n // Use the custom scheme\n return options.scheme ?? null;\n }\n\n if (options.devClient || canResolveDevClient(projectRoot)) {\n const { getOptionalDevClientSchemeAsync } =\n require('../utils/scheme') as typeof import('../utils/scheme');\n // Attempt to find the scheme or warn the user how to setup a custom scheme\n const resolvedScheme = await getOptionalDevClientSchemeAsync(projectRoot);\n if (!resolvedScheme.scheme) {\n if (resolvedScheme.resolution === 'shared') {\n // This can happen if one of the native projects has no URI schemes defined in it.\n // Normally, this should never happen.\n Log.warn(\n chalk`Could not find a shared URI scheme for the dev client between the local {bold /ios} and {bold /android} directories. App launches (QR code, interstitial, terminal keys) may not work as expected. You can configure a custom scheme using the {bold --scheme} option, or by running {bold npx expo prebuild} to regenerate the native directories with URI schemes.`\n );\n } else if (['ios', 'android'].includes(resolvedScheme.resolution)) {\n Log.warn(\n chalk`The {bold /${resolvedScheme.resolution}} project does not contain any URI schemes. Expo CLI will not be able to use links to launch the project. You can configure a custom URI scheme using the {bold --scheme} option.`\n );\n }\n }\n return resolvedScheme.scheme;\n } else {\n // Ensure this is reset when users don't use `--scheme`, `--dev-client` and don't have the `expo-dev-client` package installed.\n return null;\n }\n}\n\n/** Resolve and assert host type options. */\nexport function resolveHostType(options: {\n host?: string;\n offline?: boolean;\n lan?: boolean;\n localhost?: boolean;\n tunnel?: boolean;\n}): 'lan' | 'tunnel' | 'localhost' {\n if (\n [options.offline, options.host, options.lan, options.localhost, options.tunnel].filter((i) => i)\n .length > 1\n ) {\n throw new CommandError(\n 'BAD_ARGS',\n 'Specify at most one of: --offline, --host, --tunnel, --lan, --localhost'\n );\n }\n\n if (options.offline) {\n // Force `lan` in offline mode.\n return 'lan';\n } else if (options.host) {\n assert.match(options.host, /^(lan|tunnel|localhost)$/);\n return options.host as 'lan' | 'tunnel' | 'localhost';\n } else if (options.tunnel) {\n return 'tunnel';\n } else if (options.lan) {\n return 'lan';\n } else if (options.localhost) {\n return 'localhost';\n }\n\n // If no option is provided, and we are running in Stackblitz, enable tunnel by default\n if (envIsWebcontainer()) {\n return 'tunnel';\n }\n\n return 'lan';\n}\n\n/** Resolve the port options for all supported bundlers. */\nexport async function resolvePortsAsync(\n projectRoot: string,\n options: Partial<Pick<Options, 'port' | 'devClient'>>,\n settings: { webOnly?: boolean }\n) {\n const multiBundlerSettings: { webpackPort?: number; metroPort?: number } = {};\n\n if (settings.webOnly) {\n const webpackPort = await resolvePortAsync(projectRoot, {\n defaultPort: options.port,\n // Default web port\n fallbackPort: 19006,\n });\n if (!webpackPort) {\n throw new AbortCommandError();\n }\n multiBundlerSettings.webpackPort = webpackPort;\n } else {\n const fallbackPort = process.env.RCT_METRO_PORT\n ? parseInt(process.env.RCT_METRO_PORT, 10)\n : 8081;\n const metroPort = await resolvePortAsync(projectRoot, {\n defaultPort: options.port,\n fallbackPort,\n });\n if (!metroPort) {\n throw new AbortCommandError();\n }\n multiBundlerSettings.metroPort = metroPort;\n }\n\n return multiBundlerSettings;\n}\n"],"names":["resolveHostType","resolveOptionsAsync","resolvePortsAsync","resolveSchemeAsync","projectRoot","args","CommandError","host","offline","lan","localhost","tunnel","Log","warn","chalk","isUserDefinedDevClient","isAutoDevClient","hasDirectDevClientDependency","isDevClient","scheme","devClient","privateKeyPath","android","web","ios","clear","dev","https","maxWorkers","port","minify","options","canResolveDevClient","getOptionalDevClientSchemeAsync","require","resolvedScheme","resolution","includes","filter","i","length","assert","match","envIsWebcontainer","settings","multiBundlerSettings","webOnly","webpackPort","resolvePortAsync","defaultPort","fallbackPort","AbortCommandError","process","env","RCT_METRO_PORT","parseInt","metroPort"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/start/resolveOptions.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { canResolveDevClient, hasDirectDevClientDependency } from './detectDevClient';\nimport { Log } from '../log';\nimport { envIsWebcontainer } from '../utils/env';\nimport { AbortCommandError, CommandError } from '../utils/errors';\nimport { resolvePortAsync } from '../utils/port';\n\nexport type Options = {\n privateKeyPath: string | null;\n android: boolean;\n web: boolean;\n ios: boolean;\n offline: boolean;\n clear: boolean;\n dev: boolean;\n https: boolean;\n maxWorkers: number;\n port: number;\n /** Should instruct the bundler to create minified bundles. */\n minify: boolean;\n devClient: boolean;\n scheme: string | null;\n host: 'localhost' | 'lan' | 'tunnel';\n};\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n if (args['--dev-client'] && args['--go']) {\n throw new CommandError('BAD_ARGS', 'Cannot use both --dev-client and --go together.');\n }\n const host = resolveHostType({\n host: args['--host'],\n offline: args['--offline'],\n lan: args['--lan'],\n localhost: args['--localhost'],\n tunnel: args['--tunnel'],\n });\n\n if (args['--https']) {\n Log.warn(chalk`{bold --https} option is deprecated in favor of {bold --tunnel}`);\n }\n\n // User can force the default target by passing either `--dev-client` or `--go`. They can also\n // swap between them during development by pressing `s`.\n const isUserDefinedDevClient =\n !!args['--dev-client'] || (args['--go'] == null ? false : !args['--go']);\n\n // If the user didn't specify `--dev-client` or `--go` we check if they have the dev client package\n // in their package.json.\n const isAutoDevClient =\n args['--dev-client'] == null &&\n args['--go'] == null &&\n hasDirectDevClientDependency(projectRoot);\n\n const isDevClient = isAutoDevClient || isUserDefinedDevClient;\n\n const scheme = await resolveSchemeAsync(projectRoot, {\n scheme: args['--scheme'],\n devClient: isDevClient,\n });\n\n return {\n privateKeyPath: args['--private-key-path'] ?? null,\n\n android: !!args['--android'],\n web: !!args['--web'],\n ios: !!args['--ios'],\n offline: !!args['--offline'],\n\n clear: !!args['--clear'],\n dev: !args['--no-dev'],\n https: !!args['--https'],\n maxWorkers: args['--max-workers'],\n port: args['--port'],\n minify: !!args['--minify'],\n\n devClient: isDevClient,\n\n scheme,\n host,\n };\n}\n\nexport async function resolveSchemeAsync(\n projectRoot: string,\n options: { scheme?: string; devClient?: boolean }\n): Promise<string | null> {\n if (typeof options.scheme === 'string') {\n // Use the custom scheme\n return options.scheme ?? null;\n }\n\n if (options.devClient || canResolveDevClient(projectRoot)) {\n const { getOptionalDevClientSchemeAsync } =\n require('../utils/scheme') as typeof import('../utils/scheme');\n // Attempt to find the scheme or warn the user how to setup a custom scheme\n const resolvedScheme = await getOptionalDevClientSchemeAsync(projectRoot);\n if (!resolvedScheme.scheme) {\n if (resolvedScheme.resolution === 'shared') {\n // This can happen if one of the native projects has no URI schemes defined in it.\n // Normally, this should never happen.\n Log.warn(\n chalk`Could not find a shared URI scheme for the dev client between the local {bold /ios} and {bold /android} directories. App launches (QR code, interstitial, terminal keys) may not work as expected. You can configure a custom scheme using the {bold --scheme} option, or by running {bold npx expo prebuild} to regenerate the native directories with URI schemes.`\n );\n } else if (['ios', 'android'].includes(resolvedScheme.resolution)) {\n Log.warn(\n chalk`The {bold /${resolvedScheme.resolution}} project does not contain any URI schemes. Expo CLI will not be able to use links to launch the project. You can configure a custom URI scheme using the {bold --scheme} option.`\n );\n }\n }\n return resolvedScheme.scheme;\n } else {\n // Ensure this is reset when users don't use `--scheme`, `--dev-client` and don't have the `expo-dev-client` package installed.\n return null;\n }\n}\n\n/** Resolve and assert host type options. */\nexport function resolveHostType(options: {\n host?: string;\n offline?: boolean;\n lan?: boolean;\n localhost?: boolean;\n tunnel?: boolean;\n}): 'lan' | 'tunnel' | 'localhost' {\n if (\n [options.offline, options.host, options.lan, options.localhost, options.tunnel].filter((i) => i)\n .length > 1\n ) {\n throw new CommandError(\n 'BAD_ARGS',\n 'Specify at most one of: --offline, --host, --tunnel, --lan, --localhost'\n );\n }\n\n if (options.offline) {\n // Force `lan` in offline mode.\n return 'lan';\n } else if (options.host) {\n assert.match(options.host, /^(lan|tunnel|localhost)$/);\n return options.host as 'lan' | 'tunnel' | 'localhost';\n } else if (options.tunnel) {\n return 'tunnel';\n } else if (options.lan) {\n return 'lan';\n } else if (options.localhost) {\n return 'localhost';\n }\n\n // If no option is provided, and we are running in Stackblitz, enable tunnel by default\n if (envIsWebcontainer()) {\n return 'tunnel';\n }\n\n return 'lan';\n}\n\n/** Resolve the port options for all supported bundlers. */\nexport async function resolvePortsAsync(\n projectRoot: string,\n options: Partial<Pick<Options, 'port' | 'devClient'>>,\n settings: { webOnly?: boolean }\n) {\n const multiBundlerSettings: { webpackPort?: number; metroPort?: number } = {};\n\n if (settings.webOnly) {\n const webpackPort = await resolvePortAsync(projectRoot, {\n defaultPort: options.port,\n // Default web port\n fallbackPort: 19006,\n });\n if (webpackPort == null) {\n throw new AbortCommandError();\n }\n multiBundlerSettings.webpackPort = webpackPort;\n } else {\n const fallbackPort = process.env.RCT_METRO_PORT\n ? parseInt(process.env.RCT_METRO_PORT, 10)\n : 8081;\n const metroPort = await resolvePortAsync(projectRoot, {\n defaultPort: options.port,\n fallbackPort,\n });\n if (metroPort == null) {\n throw new AbortCommandError();\n }\n multiBundlerSettings.metroPort = metroPort;\n }\n\n return multiBundlerSettings;\n}\n"],"names":["resolveHostType","resolveOptionsAsync","resolvePortsAsync","resolveSchemeAsync","projectRoot","args","CommandError","host","offline","lan","localhost","tunnel","Log","warn","chalk","isUserDefinedDevClient","isAutoDevClient","hasDirectDevClientDependency","isDevClient","scheme","devClient","privateKeyPath","android","web","ios","clear","dev","https","maxWorkers","port","minify","options","canResolveDevClient","getOptionalDevClientSchemeAsync","require","resolvedScheme","resolution","includes","filter","i","length","assert","match","envIsWebcontainer","settings","multiBundlerSettings","webOnly","webpackPort","resolvePortAsync","defaultPort","fallbackPort","AbortCommandError","process","env","RCT_METRO_PORT","parseInt","metroPort"],"mappings":";;;;;;;;;;;QAuHgBA;eAAAA;;QA5FMC;eAAAA;;QAoIAC;eAAAA;;QA3EAC;eAAAA;;;;gEApFH;;;;;;;gEACD;;;;;;iCAEgD;qBAC9C;qBACc;wBACc;sBACf;;;;;;AAoB1B,eAAeF,oBAAoBG,WAAmB,EAAEC,IAAS;IACtE,IAAIA,IAAI,CAAC,eAAe,IAAIA,IAAI,CAAC,OAAO,EAAE;QACxC,MAAM,IAAIC,oBAAY,CAAC,YAAY;IACrC;IACA,MAAMC,OAAOP,gBAAgB;QAC3BO,MAAMF,IAAI,CAAC,SAAS;QACpBG,SAASH,IAAI,CAAC,YAAY;QAC1BI,KAAKJ,IAAI,CAAC,QAAQ;QAClBK,WAAWL,IAAI,CAAC,cAAc;QAC9BM,QAAQN,IAAI,CAAC,WAAW;IAC1B;IAEA,IAAIA,IAAI,CAAC,UAAU,EAAE;QACnBO,QAAG,CAACC,IAAI,CAACC,IAAAA,gBAAK,CAAA,CAAC,+DAA+D,CAAC;IACjF;IAEA,8FAA8F;IAC9F,wDAAwD;IACxD,MAAMC,yBACJ,CAAC,CAACV,IAAI,CAAC,eAAe,IAAKA,CAAAA,IAAI,CAAC,OAAO,IAAI,OAAO,QAAQ,CAACA,IAAI,CAAC,OAAO,AAAD;IAExE,mGAAmG;IACnG,yBAAyB;IACzB,MAAMW,kBACJX,IAAI,CAAC,eAAe,IAAI,QACxBA,IAAI,CAAC,OAAO,IAAI,QAChBY,IAAAA,6CAA4B,EAACb;IAE/B,MAAMc,cAAcF,mBAAmBD;IAEvC,MAAMI,SAAS,MAAMhB,mBAAmBC,aAAa;QACnDe,QAAQd,IAAI,CAAC,WAAW;QACxBe,WAAWF;IACb;IAEA,OAAO;QACLG,gBAAgBhB,IAAI,CAAC,qBAAqB,IAAI;QAE9CiB,SAAS,CAAC,CAACjB,IAAI,CAAC,YAAY;QAC5BkB,KAAK,CAAC,CAAClB,IAAI,CAAC,QAAQ;QACpBmB,KAAK,CAAC,CAACnB,IAAI,CAAC,QAAQ;QACpBG,SAAS,CAAC,CAACH,IAAI,CAAC,YAAY;QAE5BoB,OAAO,CAAC,CAACpB,IAAI,CAAC,UAAU;QACxBqB,KAAK,CAACrB,IAAI,CAAC,WAAW;QACtBsB,OAAO,CAAC,CAACtB,IAAI,CAAC,UAAU;QACxBuB,YAAYvB,IAAI,CAAC,gBAAgB;QACjCwB,MAAMxB,IAAI,CAAC,SAAS;QACpByB,QAAQ,CAAC,CAACzB,IAAI,CAAC,WAAW;QAE1Be,WAAWF;QAEXC;QACAZ;IACF;AACF;AAEO,eAAeJ,mBACpBC,WAAmB,EACnB2B,OAAiD;IAEjD,IAAI,OAAOA,QAAQZ,MAAM,KAAK,UAAU;QACtC,wBAAwB;QACxB,OAAOY,QAAQZ,MAAM,IAAI;IAC3B;IAEA,IAAIY,QAAQX,SAAS,IAAIY,IAAAA,oCAAmB,EAAC5B,cAAc;QACzD,MAAM,EAAE6B,+BAA+B,EAAE,GACvCC,QAAQ;QACV,2EAA2E;QAC3E,MAAMC,iBAAiB,MAAMF,gCAAgC7B;QAC7D,IAAI,CAAC+B,eAAehB,MAAM,EAAE;YAC1B,IAAIgB,eAAeC,UAAU,KAAK,UAAU;gBAC1C,kFAAkF;gBAClF,sCAAsC;gBACtCxB,QAAG,CAACC,IAAI,CACNC,IAAAA,gBAAK,CAAA,CAAC,oWAAoW,CAAC;YAE/W,OAAO,IAAI;gBAAC;gBAAO;aAAU,CAACuB,QAAQ,CAACF,eAAeC,UAAU,GAAG;gBACjExB,QAAG,CAACC,IAAI,CACNC,IAAAA,gBAAK,CAAA,CAAC,WAAW,EAAEqB,eAAeC,UAAU,CAAC,iLAAiL,CAAC;YAEnO;QACF;QACA,OAAOD,eAAehB,MAAM;IAC9B,OAAO;QACL,+HAA+H;QAC/H,OAAO;IACT;AACF;AAGO,SAASnB,gBAAgB+B,OAM/B;IACC,IACE;QAACA,QAAQvB,OAAO;QAAEuB,QAAQxB,IAAI;QAAEwB,QAAQtB,GAAG;QAAEsB,QAAQrB,SAAS;QAAEqB,QAAQpB,MAAM;KAAC,CAAC2B,MAAM,CAAC,CAACC,IAAMA,GAC3FC,MAAM,GAAG,GACZ;QACA,MAAM,IAAIlC,oBAAY,CACpB,YACA;IAEJ;IAEA,IAAIyB,QAAQvB,OAAO,EAAE;QACnB,+BAA+B;QAC/B,OAAO;IACT,OAAO,IAAIuB,QAAQxB,IAAI,EAAE;QACvBkC,iBAAM,CAACC,KAAK,CAACX,QAAQxB,IAAI,EAAE;QAC3B,OAAOwB,QAAQxB,IAAI;IACrB,OAAO,IAAIwB,QAAQpB,MAAM,EAAE;QACzB,OAAO;IACT,OAAO,IAAIoB,QAAQtB,GAAG,EAAE;QACtB,OAAO;IACT,OAAO,IAAIsB,QAAQrB,SAAS,EAAE;QAC5B,OAAO;IACT;IAEA,uFAAuF;IACvF,IAAIiC,IAAAA,sBAAiB,KAAI;QACvB,OAAO;IACT;IAEA,OAAO;AACT;AAGO,eAAezC,kBACpBE,WAAmB,EACnB2B,OAAqD,EACrDa,QAA+B;IAE/B,MAAMC,uBAAqE,CAAC;IAE5E,IAAID,SAASE,OAAO,EAAE;QACpB,MAAMC,cAAc,MAAMC,IAAAA,sBAAgB,EAAC5C,aAAa;YACtD6C,aAAalB,QAAQF,IAAI;YACzB,mBAAmB;YACnBqB,cAAc;QAChB;QACA,IAAIH,eAAe,MAAM;YACvB,MAAM,IAAII,yBAAiB;QAC7B;QACAN,qBAAqBE,WAAW,GAAGA;IACrC,OAAO;QACL,MAAMG,eAAeE,QAAQC,GAAG,CAACC,cAAc,GAC3CC,SAASH,QAAQC,GAAG,CAACC,cAAc,EAAE,MACrC;QACJ,MAAME,YAAY,MAAMR,IAAAA,sBAAgB,EAAC5C,aAAa;YACpD6C,aAAalB,QAAQF,IAAI;YACzBqB;QACF;QACA,IAAIM,aAAa,MAAM;YACrB,MAAM,IAAIL,yBAAiB;QAC7B;QACAN,qBAAqBW,SAAS,GAAGA;IACnC;IAEA,OAAOX;AACT"}
@@ -14,9 +14,6 @@ function _export(target, all) {
14
14
  });
15
15
  }
16
16
  _export(exports, {
17
- get cachedSourceMaps () {
18
- return cachedSourceMaps;
19
- },
20
17
  get createMetroEndpointAsync () {
21
18
  return createMetroEndpointAsync;
22
19
  },
@@ -68,18 +65,6 @@ function _interop_require_default(obj) {
68
65
  };
69
66
  }
70
67
  const debug = require('debug')('expo:start:server:getStaticRenderFunctions');
71
- const cachedSourceMaps = new Map();
72
- // Detect if running in Bun
73
- if (!process.isBun) {
74
- require('source-map-support').install({
75
- retrieveSourceMap (source) {
76
- if (cachedSourceMaps.has(source)) {
77
- return cachedSourceMaps.get(source);
78
- }
79
- return null;
80
- }
81
- });
82
- }
83
68
  async function ensureFileInRootDirectory(projectRoot, otherFile) {
84
69
  // Cannot be accessed using Metro's server API, we need to move the file
85
70
  // into the project root and try again.
@@ -120,9 +105,9 @@ async function createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFileP
120
105
  }
121
106
  return url;
122
107
  }
123
- function evalMetroAndWrapFunctions(projectRoot, script, filename, isExporting) {
108
+ function evalMetroAndWrapFunctions(projectRoot, script, filename, sourceMap, isExporting) {
124
109
  // TODO: Add back stack trace logic that hides traces from metro-runtime and other internal modules.
125
- const contents = evalMetroNoHandling(projectRoot, script, filename);
110
+ const contents = evalMetroNoHandling(projectRoot, script, filename, sourceMap);
126
111
  if (!contents) {
127
112
  // This can happen if ErrorUtils isn't working correctly on web and failing to throw an error when a module throws.
128
113
  // This is unexpected behavior and should not be pretty formatted, therefore we're avoiding CommandError.
@@ -155,7 +140,7 @@ function evalMetroAndWrapFunctions(projectRoot, script, filename, isExporting) {
155
140
  return acc;
156
141
  }, {});
157
142
  }
158
- function evalMetroNoHandling(projectRoot, src, filename) {
143
+ function evalMetroNoHandling(projectRoot, src, filename, sourceMap) {
159
144
  (0, _serverLogLikeMetro.augmentLogs)(projectRoot);
160
145
  // NOTE(@kitten): `require-from-string` derives a base path from the filename we pass it,
161
146
  // but doesn't validate that the filename exists. These debug messages should help identify
@@ -165,7 +150,10 @@ function evalMetroNoHandling(projectRoot, src, filename) {
165
150
  } else if (!(0, _filePath.toPosixPath)(_path().default.dirname(filename)).startsWith((0, _filePath.toPosixPath)(projectRoot))) {
166
151
  debug(`evalMetroNoHandling received filename outside of the project root: ${filename}`);
167
152
  }
168
- return (0, _profile.profile)(_requireutils().evalModule, 'eval-metro-bundle')(src, filename);
153
+ return (0, _profile.profile)(_requireutils().evalModule, 'eval-metro-bundle')(src, filename, {
154
+ cache: false,
155
+ sourceMap
156
+ });
169
157
  }
170
158
 
171
159
  //# sourceMappingURL=getStaticRenderFunctions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/server/getStaticRenderFunctions.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 { evalModule } from '@expo/require-utils';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { IS_METRO_BUNDLE_ERROR_SYMBOL, logMetroError } from './metro/metroErrorInterface';\nimport type { ExpoMetroOptions } from './middleware/metroOptions';\nimport { createBundleUrlPath } from './middleware/metroOptions';\nimport { augmentLogs } from './serverLogLikeMetro';\nimport { delayAsync } from '../../utils/delay';\nimport { SilentError } from '../../utils/errors';\nimport { toPosixPath } from '../../utils/filePath';\nimport { profile } from '../../utils/profile';\n\nconst debug = require('debug')('expo:start:server:getStaticRenderFunctions') as typeof console.log;\n\n/** The list of input keys will become optional, everything else will remain the same. */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport const cachedSourceMaps: Map<string, { url: string; map: string }> = new Map();\n\n// Support unhandled rejections\n\ndeclare global {\n namespace NodeJS {\n interface Process {\n isBun?: boolean;\n }\n }\n}\n\n// Detect if running in Bun\nif (!process.isBun) {\n require('source-map-support').install({\n retrieveSourceMap(source: string) {\n if (cachedSourceMaps.has(source)) {\n return cachedSourceMaps.get(source);\n }\n return null;\n },\n });\n}\n\nasync function ensureFileInRootDirectory(projectRoot: string, otherFile: string) {\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (!path.relative(projectRoot, otherFile).startsWith('..' + path.sep)) {\n return otherFile;\n }\n\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static-tmp');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, path.basename(otherFile));\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(otherFile, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n}\n\nexport async function createMetroEndpointAsync(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const safeOtherFile = await ensureFileInRootDirectory(projectRoot, absoluteFilePath);\n const serverPath = path.relative(root, safeOtherFile).replace(/\\.[jt]sx?$/, '');\n\n const urlFragment = createBundleUrlPath({\n mainModuleName: serverPath,\n lazy: false,\n asyncRoutes: false,\n inlineSourceMap: false,\n engine: 'hermes',\n minify: false,\n bytecode: false,\n ...props,\n });\n\n let url: string;\n if (devServerUrl) {\n url = new URL(urlFragment.replace(/^\\//, ''), devServerUrl).toString();\n } else {\n url = '/' + urlFragment.replace(/^\\/+/, '');\n }\n return url;\n}\n\nexport function evalMetroAndWrapFunctions<T = Record<string, any>>(\n projectRoot: string,\n script: string,\n filename: string,\n isExporting: boolean\n): T {\n // TODO: Add back stack trace logic that hides traces from metro-runtime and other internal modules.\n const contents = evalMetroNoHandling(projectRoot, script, filename);\n\n if (!contents) {\n // This can happen if ErrorUtils isn't working correctly on web and failing to throw an error when a module throws.\n // This is unexpected behavior and should not be pretty formatted, therefore we're avoiding CommandError.\n throw new Error(\n '[Expo SSR] Module returned undefined, this could be due to a misconfiguration in Metro error handling'\n );\n }\n // wrap each function with a try/catch that uses Metro's error formatter\n return Object.keys(contents).reduce((acc, key) => {\n const fn = contents[key];\n if (typeof fn !== 'function') {\n return { ...acc, [key]: fn };\n }\n\n acc[key] = async function (...props: any[]) {\n try {\n return await fn.apply(this, props);\n } catch (error: any) {\n await logMetroError(projectRoot, { error });\n\n if (isExporting || error[IS_METRO_BUNDLE_ERROR_SYMBOL]) {\n throw error;\n } else {\n // TODO: When does this happen?\n throw new SilentError(error);\n }\n }\n };\n return acc;\n }, {} as any);\n}\n\nexport function evalMetroNoHandling(projectRoot: string, src: string, filename: string) {\n augmentLogs(projectRoot);\n\n // NOTE(@kitten): `require-from-string` derives a base path from the filename we pass it,\n // but doesn't validate that the filename exists. These debug messages should help identify\n // these problems, if they occur in user projects without reproductions\n if (!fs.existsSync(path.dirname(filename))) {\n debug(`evalMetroNoHandling received filename in a directory that does not exist: ${filename}`);\n } else if (!toPosixPath(path.dirname(filename)).startsWith(toPosixPath(projectRoot))) {\n debug(`evalMetroNoHandling received filename outside of the project root: ${filename}`);\n }\n\n return profile(evalModule, 'eval-metro-bundle')(src, filename);\n}\n"],"names":["cachedSourceMaps","createMetroEndpointAsync","evalMetroAndWrapFunctions","evalMetroNoHandling","debug","require","Map","process","isBun","install","retrieveSourceMap","source","has","get","ensureFileInRootDirectory","projectRoot","otherFile","path","relative","startsWith","sep","tempDir","join","fs","promises","mkdir","recursive","moduleId","basename","writeFile","readFile","delayAsync","devServerUrl","absoluteFilePath","props","root","getMetroServerRoot","safeOtherFile","serverPath","replace","urlFragment","createBundleUrlPath","mainModuleName","lazy","asyncRoutes","inlineSourceMap","engine","minify","bytecode","url","URL","toString","script","filename","isExporting","contents","Error","Object","keys","reduce","acc","key","fn","apply","error","logMetroError","IS_METRO_BUNDLE_ERROR_SYMBOL","SilentError","src","augmentLogs","existsSync","dirname","toPosixPath","profile","evalModule"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/start/server/getStaticRenderFunctions.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 { evalModule } from '@expo/require-utils';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { IS_METRO_BUNDLE_ERROR_SYMBOL, logMetroError } from './metro/metroErrorInterface';\nimport type { ExpoMetroOptions } from './middleware/metroOptions';\nimport { createBundleUrlPath } from './middleware/metroOptions';\nimport { augmentLogs } from './serverLogLikeMetro';\nimport { delayAsync } from '../../utils/delay';\nimport { SilentError } from '../../utils/errors';\nimport { toPosixPath } from '../../utils/filePath';\nimport { profile } from '../../utils/profile';\n\nconst debug = require('debug')('expo:start:server:getStaticRenderFunctions') as typeof console.log;\n\n/** The list of input keys will become optional, everything else will remain the same. */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nasync function ensureFileInRootDirectory(projectRoot: string, otherFile: string) {\n // Cannot be accessed using Metro's server API, we need to move the file\n // into the project root and try again.\n if (!path.relative(projectRoot, otherFile).startsWith('..' + path.sep)) {\n return otherFile;\n }\n\n // Copy the file into the project to ensure it works in monorepos.\n // This means the file cannot have any relative imports.\n const tempDir = path.join(projectRoot, '.expo/static-tmp');\n await fs.promises.mkdir(tempDir, { recursive: true });\n const moduleId = path.join(tempDir, path.basename(otherFile));\n await fs.promises.writeFile(moduleId, await fs.promises.readFile(otherFile, 'utf8'));\n // Sleep to give watchman time to register the file.\n await delayAsync(50);\n return moduleId;\n}\n\nexport async function createMetroEndpointAsync(\n projectRoot: string,\n devServerUrl: string,\n absoluteFilePath: string,\n props: PickPartial<ExpoMetroOptions, 'mainModuleName' | 'bytecode'>\n): Promise<string> {\n const root = getMetroServerRoot(projectRoot);\n const safeOtherFile = await ensureFileInRootDirectory(projectRoot, absoluteFilePath);\n const serverPath = path.relative(root, safeOtherFile).replace(/\\.[jt]sx?$/, '');\n\n const urlFragment = createBundleUrlPath({\n mainModuleName: serverPath,\n lazy: false,\n asyncRoutes: false,\n inlineSourceMap: false,\n engine: 'hermes',\n minify: false,\n bytecode: false,\n ...props,\n });\n\n let url: string;\n if (devServerUrl) {\n url = new URL(urlFragment.replace(/^\\//, ''), devServerUrl).toString();\n } else {\n url = '/' + urlFragment.replace(/^\\/+/, '');\n }\n return url;\n}\n\nexport function evalMetroAndWrapFunctions<T = Record<string, any>>(\n projectRoot: string,\n script: string,\n filename: string,\n sourceMap: string | undefined,\n isExporting: boolean\n): T {\n // TODO: Add back stack trace logic that hides traces from metro-runtime and other internal modules.\n const contents = evalMetroNoHandling(projectRoot, script, filename, sourceMap);\n\n if (!contents) {\n // This can happen if ErrorUtils isn't working correctly on web and failing to throw an error when a module throws.\n // This is unexpected behavior and should not be pretty formatted, therefore we're avoiding CommandError.\n throw new Error(\n '[Expo SSR] Module returned undefined, this could be due to a misconfiguration in Metro error handling'\n );\n }\n // wrap each function with a try/catch that uses Metro's error formatter\n return Object.keys(contents).reduce((acc, key) => {\n const fn = contents[key];\n if (typeof fn !== 'function') {\n return { ...acc, [key]: fn };\n }\n\n acc[key] = async function (...props: any[]) {\n try {\n return await fn.apply(this, props);\n } catch (error: any) {\n await logMetroError(projectRoot, { error });\n\n if (isExporting || error[IS_METRO_BUNDLE_ERROR_SYMBOL]) {\n throw error;\n } else {\n // TODO: When does this happen?\n throw new SilentError(error);\n }\n }\n };\n return acc;\n }, {} as any);\n}\n\nexport function evalMetroNoHandling(\n projectRoot: string,\n src: string,\n filename: string,\n sourceMap?: string\n) {\n augmentLogs(projectRoot);\n\n // NOTE(@kitten): `require-from-string` derives a base path from the filename we pass it,\n // but doesn't validate that the filename exists. These debug messages should help identify\n // these problems, if they occur in user projects without reproductions\n if (!fs.existsSync(path.dirname(filename))) {\n debug(`evalMetroNoHandling received filename in a directory that does not exist: ${filename}`);\n } else if (!toPosixPath(path.dirname(filename)).startsWith(toPosixPath(projectRoot))) {\n debug(`evalMetroNoHandling received filename outside of the project root: ${filename}`);\n }\n\n return profile(evalModule, 'eval-metro-bundle')(src, filename, {\n cache: false,\n sourceMap,\n });\n}\n"],"names":["createMetroEndpointAsync","evalMetroAndWrapFunctions","evalMetroNoHandling","debug","require","ensureFileInRootDirectory","projectRoot","otherFile","path","relative","startsWith","sep","tempDir","join","fs","promises","mkdir","recursive","moduleId","basename","writeFile","readFile","delayAsync","devServerUrl","absoluteFilePath","props","root","getMetroServerRoot","safeOtherFile","serverPath","replace","urlFragment","createBundleUrlPath","mainModuleName","lazy","asyncRoutes","inlineSourceMap","engine","minify","bytecode","url","URL","toString","script","filename","sourceMap","isExporting","contents","Error","Object","keys","reduce","acc","key","fn","apply","error","logMetroError","IS_METRO_BUNDLE_ERROR_SYMBOL","SilentError","src","augmentLogs","existsSync","dirname","toPosixPath","profile","evalModule","cache"],"mappings":"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"}