@expo/cli 0.1.4 → 0.2.1

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 (190) hide show
  1. package/build/bin/cli +83 -4
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/api/rest/wrapFetchWithOffline.js +2 -23
  4. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  5. package/build/src/customize/customizeAsync.js +40 -0
  6. package/build/src/customize/customizeAsync.js.map +1 -0
  7. package/build/src/customize/generate.js +77 -0
  8. package/build/src/customize/generate.js.map +1 -0
  9. package/build/src/customize/index.js +41 -0
  10. package/build/src/customize/index.js.map +1 -0
  11. package/build/src/customize/resolveOptions.js +18 -0
  12. package/build/src/customize/resolveOptions.js.map +1 -0
  13. package/build/src/customize/templates.js +118 -0
  14. package/build/src/customize/templates.js.map +1 -0
  15. package/build/src/export/createMetadataJson.js +10 -7
  16. package/build/src/export/createMetadataJson.js.map +1 -1
  17. package/build/src/export/exportApp.js +32 -0
  18. package/build/src/export/exportApp.js.map +1 -1
  19. package/build/src/export/exportAssets.js +2 -3
  20. package/build/src/export/exportAssets.js.map +1 -1
  21. package/build/src/export/fork-bundleAsync.js +51 -34
  22. package/build/src/export/fork-bundleAsync.js.map +1 -1
  23. package/build/src/export/index.js +14 -10
  24. package/build/src/export/index.js.map +1 -1
  25. package/build/src/export/printBundleSizes.js +27 -48
  26. package/build/src/export/printBundleSizes.js.map +1 -1
  27. package/build/src/export/resolveOptions.js +44 -5
  28. package/build/src/export/resolveOptions.js.map +1 -1
  29. package/build/src/export/saveAssets.js +2 -1
  30. package/build/src/export/saveAssets.js.map +1 -1
  31. package/build/src/export/web/exportWebAsync.js +37 -0
  32. package/build/src/export/web/exportWebAsync.js.map +1 -0
  33. package/build/src/export/web/index.js +66 -0
  34. package/build/src/export/web/index.js.map +1 -0
  35. package/build/src/export/web/resolveOptions.js +13 -0
  36. package/build/src/export/web/resolveOptions.js.map +1 -0
  37. package/build/src/export/writeContents.js.map +1 -1
  38. package/build/src/install/checkPackages.js +2 -1
  39. package/build/src/install/checkPackages.js.map +1 -1
  40. package/build/src/install/index.js +1 -0
  41. package/build/src/install/index.js.map +1 -1
  42. package/build/src/install/installAsync.js +13 -5
  43. package/build/src/install/installAsync.js.map +1 -1
  44. package/build/src/install/resolveOptions.js +12 -65
  45. package/build/src/install/resolveOptions.js.map +1 -1
  46. package/build/src/install/utils/autoAddConfigPlugins.js +5 -26
  47. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  48. package/build/src/log.js.map +1 -1
  49. package/build/src/prebuild/copyTemplateFiles.js +5 -23
  50. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  51. package/build/src/prebuild/index.js +18 -12
  52. package/build/src/prebuild/index.js.map +1 -1
  53. package/build/src/prebuild/prebuildAsync.js +11 -12
  54. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  55. package/build/src/prebuild/resolveOptions.js +17 -0
  56. package/build/src/prebuild/resolveOptions.js.map +1 -1
  57. package/build/src/prebuild/resolveTemplate.js +2 -1
  58. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  59. package/build/src/prebuild/updatePackageJson.js +5 -5
  60. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  61. package/build/src/run/android/resolveInstallApkName.js +5 -26
  62. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  63. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +2 -0
  64. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  65. package/build/src/start/doctor/apple/XcodePrerequisite.js +2 -0
  66. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  67. package/build/src/start/doctor/dependencies/bundledNativeModules.js +3 -2
  68. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
  69. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +7 -13
  70. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  71. package/build/src/start/doctor/dependencies/getMissingPackages.js +3 -24
  72. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  73. package/build/src/start/doctor/dependencies/getVersionedPackages.js +2 -23
  74. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  75. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +17 -9
  76. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  77. package/build/src/start/doctor/ngrok/ExternalModule.js +2 -1
  78. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  79. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +4 -3
  80. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  81. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +29 -31
  82. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  83. package/build/src/start/interface/KeyPressHandler.js +2 -0
  84. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  85. package/build/src/start/interface/interactiveActions.js +5 -5
  86. package/build/src/start/interface/interactiveActions.js.map +1 -1
  87. package/build/src/start/interface/startInterface.js +3 -2
  88. package/build/src/start/interface/startInterface.js.map +1 -1
  89. package/build/src/start/platforms/ExpoGoInstaller.js +2 -1
  90. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  91. package/build/src/start/platforms/PlatformManager.js +4 -24
  92. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  93. package/build/src/start/platforms/android/ADBServer.js +17 -32
  94. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  95. package/build/src/start/platforms/android/AndroidSdk.js +41 -0
  96. package/build/src/start/platforms/android/AndroidSdk.js.map +1 -0
  97. package/build/src/start/platforms/android/activateWindow.js +4 -4
  98. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  99. package/build/src/start/platforms/android/adb.js +8 -3
  100. package/build/src/start/platforms/android/adb.js.map +1 -1
  101. package/build/src/start/platforms/android/adbReverse.js +3 -2
  102. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  103. package/build/src/start/platforms/android/gradle.js +2 -2
  104. package/build/src/start/platforms/android/gradle.js.map +1 -1
  105. package/build/src/start/platforms/ios/getBestSimulator.js +4 -4
  106. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  107. package/build/src/start/platforms/ios/xcrun.js +2 -23
  108. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  109. package/build/src/start/project/devices.js +2 -0
  110. package/build/src/start/project/devices.js.map +1 -1
  111. package/build/src/start/server/AsyncNgrok.js +6 -5
  112. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  113. package/build/src/start/server/BundlerDevServer.js +15 -8
  114. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  115. package/build/src/start/server/DevServerManager.js +15 -5
  116. package/build/src/start/server/DevServerManager.js.map +1 -1
  117. package/build/src/start/server/DevelopmentSession.js +4 -0
  118. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  119. package/build/src/start/server/UrlCreator.js +10 -3
  120. package/build/src/start/server/UrlCreator.js.map +1 -1
  121. package/build/src/start/server/metro/MetroBundlerDevServer.js +9 -0
  122. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  123. package/build/src/start/server/metro/TerminalReporter.js +5 -0
  124. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  125. package/build/src/start/server/metro/instantiateMetro.js +11 -1
  126. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  127. package/build/src/start/server/metro/resolveFromProject.js +8 -0
  128. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  129. package/build/src/start/server/metro/withMetroMultiPlatform.js +115 -0
  130. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -0
  131. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  132. package/build/src/start/server/middleware/ExpoMiddleware.js +9 -4
  133. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  134. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +24 -0
  135. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -0
  136. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +2 -0
  137. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  138. package/build/src/start/server/middleware/ManifestMiddleware.js +57 -6
  139. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  140. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +6 -1
  141. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  142. package/build/src/start/server/middleware/ServeStaticMiddleware.js +62 -0
  143. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -0
  144. package/build/src/start/server/platformBundlers.js +18 -0
  145. package/build/src/start/server/platformBundlers.js.map +1 -0
  146. package/build/src/start/server/webTemplate.js +68 -0
  147. package/build/src/start/server/webTemplate.js.map +1 -0
  148. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +59 -19
  149. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  150. package/build/src/start/server/webpack/compile.js +64 -0
  151. package/build/src/start/server/webpack/compile.js.map +1 -0
  152. package/build/src/start/startAsync.js +21 -17
  153. package/build/src/start/startAsync.js.map +1 -1
  154. package/build/src/utils/FileNotifier.js +5 -2
  155. package/build/src/utils/FileNotifier.js.map +1 -1
  156. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  157. package/build/src/utils/downloadAppAsync.js +3 -2
  158. package/build/src/utils/downloadAppAsync.js.map +1 -1
  159. package/build/src/utils/downloadExpoGoAsync.js +7 -32
  160. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  161. package/build/src/utils/editor.js +3 -2
  162. package/build/src/utils/editor.js.map +1 -1
  163. package/build/src/utils/env.js +3 -0
  164. package/build/src/utils/env.js.map +1 -1
  165. package/build/src/utils/exit.js +4 -25
  166. package/build/src/utils/exit.js.map +1 -1
  167. package/build/src/utils/getRunningProcess.js +6 -2
  168. package/build/src/utils/getRunningProcess.js.map +1 -1
  169. package/build/src/utils/nodeModules.js +13 -102
  170. package/build/src/utils/nodeModules.js.map +1 -1
  171. package/build/src/utils/npm.js +3 -24
  172. package/build/src/utils/npm.js.map +1 -1
  173. package/build/src/utils/ora.js +1 -13
  174. package/build/src/utils/ora.js.map +1 -1
  175. package/build/src/utils/progress.js +46 -0
  176. package/build/src/utils/progress.js.map +1 -1
  177. package/build/src/utils/prompts.js +4 -4
  178. package/build/src/utils/prompts.js.map +1 -1
  179. package/build/src/utils/tar.js +3 -0
  180. package/build/src/utils/tar.js.map +1 -1
  181. package/build/src/utils/validateApplicationId.js +9 -2
  182. package/build/src/utils/validateApplicationId.js.map +1 -1
  183. package/build/src/utils/variadic.js +47 -0
  184. package/build/src/utils/variadic.js.map +1 -0
  185. package/package.json +12 -8
  186. package/static/template/babel.config.js +6 -0
  187. package/static/template/index.html +117 -0
  188. package/static/template/metro.config.js +4 -0
  189. package/static/template/serve.json +13 -0
  190. package/static/template/webpack.config.js +7 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/exit.ts"],"sourcesContent":["import * as Log from '../log';\nimport { guardAsync } from './fn';\n\ntype AsyncExitHook = (signal: NodeJS.Signals) => void | Promise<void>;\n\nconst PRE_EXIT_SIGNALS: NodeJS.Signals[] = ['SIGHUP', 'SIGINT', 'SIGTERM', 'SIGBREAK'];\n\n// We create a queue since Node.js throws an error if we try to append too many listeners:\n// (node:4405) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. Use emitter.setMaxListeners() to increase limit\nconst queue: AsyncExitHook[] = [];\n\nlet unsubscribe: (() => void) | null = null;\n\n/** Add functions that run before the process exits. Returns a function for removing the listeners. */\nexport function installExitHooks(asyncExitHook: AsyncExitHook): () => void {\n // We need to instantiate the master listener the first time the queue is used.\n if (!queue.length) {\n // Track the master listener so we can remove it later.\n unsubscribe = attachMasterListener();\n }\n\n queue.push(asyncExitHook);\n\n return () => {\n const index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n // Clean up the master listener if we don't need it anymore.\n if (!queue.length) {\n unsubscribe?.();\n }\n };\n}\n\n// Create a function that runs before the process exits and guards against running multiple times.\nfunction createExitHook(signal: NodeJS.Signals) {\n return guardAsync(async () => {\n Log.debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n\n for (const [index, hookAsync] of Object.entries(queue)) {\n try {\n await hookAsync(signal);\n } catch (error: any) {\n Log.debug(`Error in exit hook: %O (queue: ${index})`, error);\n }\n }\n\n Log.debug(`post-exit (code: ${process.exitCode ?? 0})`);\n\n process.exit();\n });\n}\n\nfunction attachMasterListener() {\n const hooks: [NodeJS.Signals, () => any][] = [];\n for (const signal of PRE_EXIT_SIGNALS) {\n const hook = createExitHook(signal);\n hooks.push([signal, hook]);\n process.on(signal, hook);\n }\n return () => {\n for (const [signal, hook] of hooks) {\n process.removeListener(signal, hook);\n }\n };\n}\n"],"names":["installExitHooks","Log","PRE_EXIT_SIGNALS","queue","unsubscribe","asyncExitHook","length","attachMasterListener","push","index","indexOf","splice","createExitHook","signal","guardAsync","debug","hookAsync","Object","entries","error","process","exitCode","exit","hooks","hook","on","removeListener"],"mappings":"AAAA;;;;QAcgBA,gBAAgB,GAAhBA,gBAAgB;AAdpBC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACY,IAAA,GAAM,WAAN,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;;;AAIjC,MAAMC,gBAAgB,GAAqB;IAAC,QAAQ;IAAE,QAAQ;IAAE,SAAS;IAAE,UAAU;CAAC,AAAC;AAEvF,0FAA0F;AAC1F,+KAA+K;AAC/K,MAAMC,KAAK,GAAoB,EAAE,AAAC;AAElC,IAAIC,WAAW,GAAwB,IAAI,AAAC;AAGrC,SAASJ,gBAAgB,CAACK,aAA4B,EAAc;IACzE,+EAA+E;IAC/E,IAAI,CAACF,KAAK,CAACG,MAAM,EAAE;QACjB,uDAAuD;QACvDF,WAAW,GAAGG,oBAAoB,EAAE,CAAC;KACtC;IAEDJ,KAAK,CAACK,IAAI,CAACH,aAAa,CAAC,CAAC;IAE1B,OAAO,IAAM;QACX,MAAMI,KAAK,GAAGN,KAAK,CAACO,OAAO,CAACL,aAAa,CAAC,AAAC;QAC3C,IAAII,KAAK,IAAI,CAAC,EAAE;YACdN,KAAK,CAACQ,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC,CAAC;SACxB;QACD,4DAA4D;QAC5D,IAAI,CAACN,KAAK,CAACG,MAAM,EAAE;YACjBF,WAAW,QAAI,GAAfA,KAAAA,CAAe,GAAfA,WAAW,EAAI,AA9BrB,CA8BsB;SACjB;KACF,CAAC;CACH;AAED,kGAAkG;AAClG,SAASQ,cAAc,CAACC,MAAsB,EAAE;IAC9C,OAAOC,CAAAA,GAAAA,GAAU,AAcf,CAAA,WAde,CAAC,UAAY;QAC5Bb,GAAG,CAACc,KAAK,CAAC,CAAC,kBAAkB,EAAEF,MAAM,CAAC,gBAAgB,EAAEV,KAAK,CAACG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,KAAK,MAAM,CAACG,KAAK,EAAEO,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACf,KAAK,CAAC,CAAE;YACtD,IAAI;gBACF,MAAMa,SAAS,CAACH,MAAM,CAAC,CAAC;aACzB,CAAC,OAAOM,KAAK,EAAO;gBACnBlB,GAAG,CAACc,KAAK,CAAC,CAAC,+BAA+B,EAAEN,KAAK,CAAC,CAAC,CAAC,EAAEU,KAAK,CAAC,CAAC;aAC9D;SACF;YAE6BC,SAAgB;QAA9CnB,GAAG,CAACc,KAAK,CAAC,CAAC,iBAAiB,EAAEK,CAAAA,SAAgB,GAAhBA,OAAO,CAACC,QAAQ,YAAhBD,SAAgB,GAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExDA,OAAO,CAACE,IAAI,EAAE,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,SAASf,oBAAoB,GAAG;IAC9B,MAAMgB,KAAK,GAAkC,EAAE,AAAC;IAChD,KAAK,MAAMV,OAAM,IAAIX,gBAAgB,CAAE;QACrC,MAAMsB,IAAI,GAAGZ,cAAc,CAACC,OAAM,CAAC,AAAC;QACpCU,KAAK,CAACf,IAAI,CAAC;YAACK,OAAM;YAAEW,IAAI;SAAC,CAAC,CAAC;QAC3BJ,OAAO,CAACK,EAAE,CAACZ,OAAM,EAAEW,IAAI,CAAC,CAAC;KAC1B;IACD,OAAO,IAAM;QACX,KAAK,MAAM,CAACX,MAAM,EAAEW,IAAI,CAAC,IAAID,KAAK,CAAE;YAClCH,OAAO,CAACM,cAAc,CAACb,MAAM,EAAEW,IAAI,CAAC,CAAC;SACtC;KACF,CAAC;CACH"}
1
+ {"version":3,"sources":["../../../src/utils/exit.ts"],"sourcesContent":["import { guardAsync } from './fn';\n\nconst debug = require('debug')('expo:utils:exit') as typeof console.log;\n\ntype AsyncExitHook = (signal: NodeJS.Signals) => void | Promise<void>;\n\nconst PRE_EXIT_SIGNALS: NodeJS.Signals[] = ['SIGHUP', 'SIGINT', 'SIGTERM', 'SIGBREAK'];\n\n// We create a queue since Node.js throws an error if we try to append too many listeners:\n// (node:4405) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. Use emitter.setMaxListeners() to increase limit\nconst queue: AsyncExitHook[] = [];\n\nlet unsubscribe: (() => void) | null = null;\n\n/** Add functions that run before the process exits. Returns a function for removing the listeners. */\nexport function installExitHooks(asyncExitHook: AsyncExitHook): () => void {\n // We need to instantiate the master listener the first time the queue is used.\n if (!queue.length) {\n // Track the master listener so we can remove it later.\n unsubscribe = attachMasterListener();\n }\n\n queue.push(asyncExitHook);\n\n return () => {\n const index = queue.indexOf(asyncExitHook);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n // Clean up the master listener if we don't need it anymore.\n if (!queue.length) {\n unsubscribe?.();\n }\n };\n}\n\n// Create a function that runs before the process exits and guards against running multiple times.\nfunction createExitHook(signal: NodeJS.Signals) {\n return guardAsync(async () => {\n debug(`pre-exit (signal: ${signal}, queue length: ${queue.length})`);\n\n for (const [index, hookAsync] of Object.entries(queue)) {\n try {\n await hookAsync(signal);\n } catch (error: any) {\n debug(`Error in exit hook: %O (queue: ${index})`, error);\n }\n }\n\n debug(`post-exit (code: ${process.exitCode ?? 0})`);\n\n process.exit();\n });\n}\n\nfunction attachMasterListener() {\n const hooks: [NodeJS.Signals, () => any][] = [];\n for (const signal of PRE_EXIT_SIGNALS) {\n const hook = createExitHook(signal);\n hooks.push([signal, hook]);\n process.on(signal, hook);\n }\n return () => {\n for (const [signal, hook] of hooks) {\n process.removeListener(signal, hook);\n }\n };\n}\n"],"names":["installExitHooks","debug","require","PRE_EXIT_SIGNALS","queue","unsubscribe","asyncExitHook","length","attachMasterListener","push","index","indexOf","splice","createExitHook","signal","guardAsync","hookAsync","Object","entries","error","process","exitCode","exit","hooks","hook","on","removeListener"],"mappings":"AAAA;;;;QAegBA,gBAAgB,GAAhBA,gBAAgB;AAfL,IAAA,GAAM,WAAN,MAAM,CAAA;AAEjC,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,AAAsB,AAAC;AAIxE,MAAMC,gBAAgB,GAAqB;IAAC,QAAQ;IAAE,QAAQ;IAAE,SAAS;IAAE,UAAU;CAAC,AAAC;AAEvF,0FAA0F;AAC1F,+KAA+K;AAC/K,MAAMC,KAAK,GAAoB,EAAE,AAAC;AAElC,IAAIC,WAAW,GAAwB,IAAI,AAAC;AAGrC,SAASL,gBAAgB,CAACM,aAA4B,EAAc;IACzE,+EAA+E;IAC/E,IAAI,CAACF,KAAK,CAACG,MAAM,EAAE;QACjB,uDAAuD;QACvDF,WAAW,GAAGG,oBAAoB,EAAE,CAAC;KACtC;IAEDJ,KAAK,CAACK,IAAI,CAACH,aAAa,CAAC,CAAC;IAE1B,OAAO,IAAM;QACX,MAAMI,KAAK,GAAGN,KAAK,CAACO,OAAO,CAACL,aAAa,CAAC,AAAC;QAC3C,IAAII,KAAK,IAAI,CAAC,EAAE;YACdN,KAAK,CAACQ,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC,CAAC;SACxB;QACD,4DAA4D;QAC5D,IAAI,CAACN,KAAK,CAACG,MAAM,EAAE;YACjBF,WAAW,QAAI,GAAfA,KAAAA,CAAe,GAAfA,WAAW,EAAI,AA/BrB,CA+BsB;SACjB;KACF,CAAC;CACH;AAED,kGAAkG;AAClG,SAASQ,cAAc,CAACC,MAAsB,EAAE;IAC9C,OAAOC,CAAAA,GAAAA,GAAU,AAcf,CAAA,WAde,CAAC,UAAY;QAC5Bd,KAAK,CAAC,CAAC,kBAAkB,EAAEa,MAAM,CAAC,gBAAgB,EAAEV,KAAK,CAACG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,KAAK,MAAM,CAACG,KAAK,EAAEM,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACd,KAAK,CAAC,CAAE;YACtD,IAAI;gBACF,MAAMY,SAAS,CAACF,MAAM,CAAC,CAAC;aACzB,CAAC,OAAOK,KAAK,EAAO;gBACnBlB,KAAK,CAAC,CAAC,+BAA+B,EAAES,KAAK,CAAC,CAAC,CAAC,EAAES,KAAK,CAAC,CAAC;aAC1D;SACF;YAEyBC,SAAgB;QAA1CnB,KAAK,CAAC,CAAC,iBAAiB,EAAEmB,CAAAA,SAAgB,GAAhBA,OAAO,CAACC,QAAQ,YAAhBD,SAAgB,GAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpDA,OAAO,CAACE,IAAI,EAAE,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,SAASd,oBAAoB,GAAG;IAC9B,MAAMe,KAAK,GAAkC,EAAE,AAAC;IAChD,KAAK,MAAMT,OAAM,IAAIX,gBAAgB,CAAE;QACrC,MAAMqB,IAAI,GAAGX,cAAc,CAACC,OAAM,CAAC,AAAC;QACpCS,KAAK,CAACd,IAAI,CAAC;YAACK,OAAM;YAAEU,IAAI;SAAC,CAAC,CAAC;QAC3BJ,OAAO,CAACK,EAAE,CAACX,OAAM,EAAEU,IAAI,CAAC,CAAC;KAC1B;IACD,OAAO,IAAM;QACX,KAAK,MAAM,CAACV,MAAM,EAAEU,IAAI,CAAC,IAAID,KAAK,CAAE;YAClCH,OAAO,CAACM,cAAc,CAACZ,MAAM,EAAEU,IAAI,CAAC,CAAC;SACtC;KACF,CAAC;CACH"}
@@ -28,6 +28,7 @@ function _interopRequireWildcard(obj) {
28
28
  return newObj;
29
29
  }
30
30
  }
31
+ const debug = require("debug")("expo:utils:getRunningProcess");
31
32
  const defaultOptions = {
32
33
  encoding: "utf8",
33
34
  stdio: [
@@ -44,8 +45,11 @@ function getPID(port) {
44
45
  "-t",
45
46
  "-sTCP:LISTEN"
46
47
  ], defaultOptions).split("\n")[0].trim();
47
- return Number(results);
48
- } catch {
48
+ const pid = Number(results);
49
+ debug(`pid: ${pid} for port: ${port}`);
50
+ return pid;
51
+ } catch (error) {
52
+ debug(`No pid found for port: ${port}. Error: ${error}`);
49
53
  return null;
50
54
  }
51
55
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/getRunningProcess.ts"],"sourcesContent":["import { execFileSync, execSync, ExecSyncOptionsWithStringEncoding } from 'child_process';\nimport * as path from 'path';\n\nconst defaultOptions: ExecSyncOptionsWithStringEncoding = {\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'ignore'],\n};\n\n/** Returns a pid value for a running port like `63828` or null if nothing is running on the given port. */\nexport function getPID(port: number): number | null {\n try {\n const results = execFileSync('lsof', [`-i:${port}`, '-P', '-t', '-sTCP:LISTEN'], defaultOptions)\n .split('\\n')[0]\n .trim();\n return Number(results);\n } catch {\n return null;\n }\n}\n\n/** Get `package.json` `name` field for a given directory. Returns `null` if none exist. */\nfunction getPackageName(packageRoot: string): string | null {\n const packageJson = path.join(packageRoot, 'package.json');\n try {\n return require(packageJson).name || null;\n } catch {\n return null;\n }\n}\n\n/** Returns a command like `node /Users/evanbacon/.../bin/expo start` or the package.json name. */\nfunction getProcessCommand(pid: number, procDirectory: string): string {\n const name = getPackageName(procDirectory);\n\n if (name) {\n return name;\n }\n return execSync(`ps -o command -p ${pid} | sed -n 2p`, defaultOptions).replace(/\\n$/, '').trim();\n}\n\n/** Get directory for a given process ID. */\nexport function getDirectoryOfProcessById(processId: number): string {\n return execSync(\n `lsof -p ${processId} | awk '$4==\"cwd\" {for (i=9; i<=NF; i++) printf \"%s \", $i}'`,\n defaultOptions\n ).trim();\n}\n\n/** Get information about a running process given a port. Returns null if no process is running on the given port. */\nexport function getRunningProcess(port: number): {\n /** The PID value for the port. */\n pid: number;\n /** Get the directory for the running process. */\n directory: string;\n /** The command running the process like `node /Users/evanbacon/.../bin/expo start` or the `package.json` name like `my-app`. */\n command: string;\n} | null {\n // 63828\n const pid = getPID(port);\n if (!pid) {\n return null;\n }\n\n try {\n // /Users/evanbacon/Documents/GitHub/lab/myapp\n const directory = getDirectoryOfProcessById(pid);\n // /Users/evanbacon/Documents/GitHub/lab/myapp/package.json\n const command = getProcessCommand(pid, directory);\n // TODO: Have a better message for reusing another process.\n return { pid, directory, command };\n } catch {\n return null;\n }\n}\n"],"names":["getPID","getDirectoryOfProcessById","getRunningProcess","path","defaultOptions","encoding","stdio","port","results","execFileSync","split","trim","Number","getPackageName","packageRoot","packageJson","join","require","name","getProcessCommand","pid","procDirectory","execSync","replace","processId","directory","command"],"mappings":"AAAA;;;;QASgBA,MAAM,GAANA,MAAM;QAgCNC,yBAAyB,GAAzBA,yBAAyB;QAQzBC,iBAAiB,GAAjBA,iBAAiB;AAjDyC,IAAA,aAAe,WAAf,eAAe,CAAA;AAC7EC,IAAAA,IAAI,mCAAM,MAAM,EAAZ;;;;;;;;;;;;;;;;;;;;;;AAEhB,MAAMC,cAAc,GAAsC;IACxDC,QAAQ,EAAE,MAAM;IAChBC,KAAK,EAAE;QAAC,MAAM;QAAE,MAAM;QAAE,QAAQ;KAAC;CAClC,AAAC;AAGK,SAASN,MAAM,CAACO,IAAY,EAAiB;IAClD,IAAI;QACF,MAAMC,OAAO,GAAGC,CAAAA,GAAAA,aAAY,AAAoE,CAAA,aAApE,CAAC,MAAM,EAAE;YAAC,CAAC,GAAG,EAAEF,IAAI,CAAC,CAAC;YAAE,IAAI;YAAE,IAAI;YAAE,cAAc;SAAC,EAAEH,cAAc,CAAC,CAC7FM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACdC,IAAI,EAAE,AAAC;QACV,OAAOC,MAAM,CAACJ,OAAO,CAAC,CAAC;KACxB,CAAC,OAAM;QACN,OAAO,IAAI,CAAC;KACb;CACF;AAED,2FAA2F,CAC3F,SAASK,cAAc,CAACC,WAAmB,EAAiB;IAC1D,MAAMC,WAAW,GAAGZ,IAAI,CAACa,IAAI,CAACF,WAAW,EAAE,cAAc,CAAC,AAAC;IAC3D,IAAI;QACF,OAAOG,OAAO,CAACF,WAAW,CAAC,CAACG,IAAI,IAAI,IAAI,CAAC;KAC1C,CAAC,OAAM;QACN,OAAO,IAAI,CAAC;KACb;CACF;AAED,kGAAkG,CAClG,SAASC,iBAAiB,CAACC,GAAW,EAAEC,aAAqB,EAAU;IACrE,MAAMH,IAAI,GAAGL,cAAc,CAACQ,aAAa,CAAC,AAAC;IAE3C,IAAIH,IAAI,EAAE;QACR,OAAOA,IAAI,CAAC;KACb;IACD,OAAOI,CAAAA,GAAAA,aAAQ,AAAuD,CAAA,SAAvD,CAAC,CAAC,iBAAiB,EAAEF,GAAG,CAAC,YAAY,CAAC,EAAEhB,cAAc,CAAC,CAACmB,OAAO,QAAQ,EAAE,CAAC,CAACZ,IAAI,EAAE,CAAC;CAClG;AAGM,SAASV,yBAAyB,CAACuB,SAAiB,EAAU;IACnE,OAAOF,CAAAA,GAAAA,aAAQ,AAGd,CAAA,SAHc,CACb,CAAC,QAAQ,EAAEE,SAAS,CAAC,2DAA2D,CAAC,EACjFpB,cAAc,CACf,CAACO,IAAI,EAAE,CAAC;CACV;AAGM,SAAST,iBAAiB,CAACK,IAAY,EAOrC;IACP,QAAQ;IACR,MAAMa,GAAG,GAAGpB,MAAM,CAACO,IAAI,CAAC,AAAC;IACzB,IAAI,CAACa,GAAG,EAAE;QACR,OAAO,IAAI,CAAC;KACb;IAED,IAAI;QACF,8CAA8C;QAC9C,MAAMK,SAAS,GAAGxB,yBAAyB,CAACmB,GAAG,CAAC,AAAC;QACjD,2DAA2D;QAC3D,MAAMM,OAAO,GAAGP,iBAAiB,CAACC,GAAG,EAAEK,SAAS,CAAC,AAAC;QAClD,2DAA2D;QAC3D,OAAO;YAAEL,GAAG;YAAEK,SAAS;YAAEC,OAAO;SAAE,CAAC;KACpC,CAAC,OAAM;QACN,OAAO,IAAI,CAAC;KACb;CACF"}
1
+ {"version":3,"sources":["../../../src/utils/getRunningProcess.ts"],"sourcesContent":["import { execFileSync, execSync, ExecSyncOptionsWithStringEncoding } from 'child_process';\nimport * as path from 'path';\n\nconst debug = require('debug')('expo:utils:getRunningProcess') as typeof console.log;\n\nconst defaultOptions: ExecSyncOptionsWithStringEncoding = {\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'ignore'],\n};\n\n/** Returns a pid value for a running port like `63828` or null if nothing is running on the given port. */\nexport function getPID(port: number): number | null {\n try {\n const results = execFileSync('lsof', [`-i:${port}`, '-P', '-t', '-sTCP:LISTEN'], defaultOptions)\n .split('\\n')[0]\n .trim();\n const pid = Number(results);\n debug(`pid: ${pid} for port: ${port}`);\n return pid;\n } catch (error: any) {\n debug(`No pid found for port: ${port}. Error: ${error}`);\n return null;\n }\n}\n\n/** Get `package.json` `name` field for a given directory. Returns `null` if none exist. */\nfunction getPackageName(packageRoot: string): string | null {\n const packageJson = path.join(packageRoot, 'package.json');\n try {\n return require(packageJson).name || null;\n } catch {\n return null;\n }\n}\n\n/** Returns a command like `node /Users/evanbacon/.../bin/expo start` or the package.json name. */\nfunction getProcessCommand(pid: number, procDirectory: string): string {\n const name = getPackageName(procDirectory);\n\n if (name) {\n return name;\n }\n return execSync(`ps -o command -p ${pid} | sed -n 2p`, defaultOptions).replace(/\\n$/, '').trim();\n}\n\n/** Get directory for a given process ID. */\nexport function getDirectoryOfProcessById(processId: number): string {\n return execSync(\n `lsof -p ${processId} | awk '$4==\"cwd\" {for (i=9; i<=NF; i++) printf \"%s \", $i}'`,\n defaultOptions\n ).trim();\n}\n\n/** Get information about a running process given a port. Returns null if no process is running on the given port. */\nexport function getRunningProcess(port: number): {\n /** The PID value for the port. */\n pid: number;\n /** Get the directory for the running process. */\n directory: string;\n /** The command running the process like `node /Users/evanbacon/.../bin/expo start` or the `package.json` name like `my-app`. */\n command: string;\n} | null {\n // 63828\n const pid = getPID(port);\n if (!pid) {\n return null;\n }\n\n try {\n // /Users/evanbacon/Documents/GitHub/lab/myapp\n const directory = getDirectoryOfProcessById(pid);\n // /Users/evanbacon/Documents/GitHub/lab/myapp/package.json\n const command = getProcessCommand(pid, directory);\n // TODO: Have a better message for reusing another process.\n return { pid, directory, command };\n } catch {\n return null;\n }\n}\n"],"names":["getPID","getDirectoryOfProcessById","getRunningProcess","path","debug","require","defaultOptions","encoding","stdio","port","results","execFileSync","split","trim","pid","Number","error","getPackageName","packageRoot","packageJson","join","name","getProcessCommand","procDirectory","execSync","replace","processId","directory","command"],"mappings":"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"}
@@ -2,117 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.resolvePackageManager = resolvePackageManager;
6
- exports.installNodeDependenciesAsync = installNodeDependenciesAsync;
7
- var PackageManager = _interopRequireWildcard(require("@expo/package-manager"));
5
+ exports.clearNodeModulesAsync = clearNodeModulesAsync;
8
6
  var _chalk = _interopRequireDefault(require("chalk"));
9
7
  var _fs = _interopRequireDefault(require("fs"));
10
- var _jsYaml = _interopRequireDefault(require("js-yaml"));
11
8
  var _path = _interopRequireDefault(require("path"));
12
- var _semver = _interopRequireDefault(require("semver"));
13
- var Log = _interopRequireWildcard(require("../log"));
14
- var _env = require("./env");
15
- var _errors = require("./errors");
16
9
  var _ora = require("./ora");
17
10
  function _interopRequireDefault(obj) {
18
11
  return obj && obj.__esModule ? obj : {
19
12
  default: obj
20
13
  };
21
14
  }
22
- function _interopRequireWildcard(obj) {
23
- if (obj && obj.__esModule) {
24
- return obj;
25
- } else {
26
- var newObj = {};
27
- if (obj != null) {
28
- for(var key in obj){
29
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
30
- var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
31
- if (desc.get || desc.set) {
32
- Object.defineProperty(newObj, key, desc);
33
- } else {
34
- newObj[key] = obj[key];
35
- }
36
- }
37
- }
38
- }
39
- newObj.default = obj;
40
- return newObj;
41
- }
42
- }
43
- function resolvePackageManager(options) {
44
- let packageManager = "npm";
45
- if (options.yarn || !options.npm && PackageManager.shouldUseYarn()) {
46
- packageManager = "yarn";
47
- } else {
48
- packageManager = "npm";
49
- }
50
- if (options.install) {
51
- Log.log(packageManager === "yarn" ? `🧶 Using Yarn to install packages. ${_chalk.default.dim("Pass --npm to use npm instead.")}` : "\uD83D\uDCE6 Using npm to install packages.");
52
- }
53
- return packageManager;
54
- }
55
- async function installNodeDependenciesAsync(projectRoot, packageManager, flags = {}) {
56
- var _silent;
57
- // Default to silent unless debugging.
58
- const isSilent = (_silent = flags.silent) != null ? _silent : !_env.env.EXPO_DEBUG;
59
- if (flags.clean && packageManager !== "yarn") {
60
- // This step can take a couple seconds, if the installation logs are enabled (with EXPO_DEBUG) then it
61
- // ends up looking odd to see "Installing JavaScript dependencies" for ~5 seconds before the logs start showing up.
62
- const cleanJsDepsStep = (0, _ora).logNewSection("Cleaning JavaScript dependencies");
63
- const time = Date.now();
64
- // nuke the node modules
65
- // TODO: this is substantially slower, we should find a better alternative to ensuring the modules are installed.
66
- await _fs.default.promises.rm("node_modules", {
67
- recursive: true,
68
- force: true
69
- });
70
- cleanJsDepsStep.succeed(`Cleaned JavaScript dependencies ${_chalk.default.gray(Date.now() - time + "ms")}`);
71
- }
72
- const installJsDepsStep = (0, _ora).logNewSection("Installing JavaScript dependencies");
73
- try {
74
- const time = Date.now();
75
- await installNodeDependenciesInternalAsync(projectRoot, packageManager, {
76
- silent: isSilent
77
- });
78
- installJsDepsStep.succeed(`Installed JavaScript dependencies ${_chalk.default.gray(Date.now() - time + "ms")}`);
79
- } catch {
80
- const message = `Something went wrong installing JavaScript dependencies, check your ${packageManager} logfile or run ${_chalk.default.bold(`${packageManager} install`)} again manually.`;
81
- installJsDepsStep.fail(_chalk.default.red(message));
82
- // TODO: actually show the error message from the package manager! :O
83
- throw new _errors.SilentError(message);
84
- }
85
- }
86
- async function installNodeDependenciesInternalAsync(projectRoot, packageManager, flags) {
87
- const options = {
88
- cwd: projectRoot,
89
- silent: flags.silent
90
- };
91
- if (packageManager === "yarn") {
92
- const yarn = new PackageManager.YarnPackageManager(options);
93
- const version = await yarn.versionAsync();
94
- const nodeLinker = await yarn.getConfigAsync("nodeLinker");
95
- if (_semver.default.satisfies(version, ">=2.0.0-rc.24") && nodeLinker !== "node-modules") {
96
- const yarnRc = _path.default.join(projectRoot, ".yarnrc.yml");
97
- let yamlString = "";
98
- try {
99
- yamlString = _fs.default.readFileSync(yarnRc, "utf8");
100
- } catch (error) {
101
- if (error.code !== "ENOENT") {
102
- throw error;
103
- }
104
- }
105
- const config = yamlString ? _jsYaml.default.safeLoad(yamlString) : {};
106
- // @ts-ignore
107
- config.nodeLinker = "node-modules";
108
- !flags.silent && Log.warn(`Yarn v${version} detected, enabling experimental Yarn v2 support using the node-modules plugin.`);
109
- !flags.silent && Log.log(`Writing ${yarnRc}...`);
110
- _fs.default.writeFileSync(yarnRc, _jsYaml.default.safeDump(config));
111
- }
112
- await yarn.installAsync();
113
- } else {
114
- await new PackageManager.NpmPackageManager(options).installAsync();
115
- }
15
+ async function clearNodeModulesAsync(projectRoot) {
16
+ // This step can take a couple seconds, if the installation logs are enabled (with EXPO_DEBUG) then it
17
+ // ends up looking odd to see "Installing JavaScript dependencies" for ~5 seconds before the logs start showing up.
18
+ const cleanJsDepsStep = (0, _ora).logNewSection("Cleaning JavaScript dependencies");
19
+ const time = Date.now();
20
+ // nuke the node modules
21
+ // TODO: this is substantially slower, we should find a better alternative to ensuring the modules are installed.
22
+ await _fs.default.promises.rm(_path.default.join(projectRoot, "node_modules"), {
23
+ recursive: true,
24
+ force: true
25
+ });
26
+ cleanJsDepsStep.succeed(`Cleaned JavaScript dependencies ${_chalk.default.gray(Date.now() - time + "ms")}`);
116
27
  }
117
28
 
118
29
  //# sourceMappingURL=nodeModules.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/nodeModules.ts"],"sourcesContent":["import * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport yaml from 'js-yaml';\nimport path from 'path';\nimport semver from 'semver';\n\nimport * as Log from '../log';\nimport { env } from './env';\nimport { SilentError } from './errors';\nimport { logNewSection } from './ora';\n\nexport type PackageManagerName = 'npm' | 'yarn';\n\nexport function resolvePackageManager(options: {\n yarn?: boolean;\n npm?: boolean;\n install?: boolean;\n}): PackageManagerName {\n let packageManager: PackageManagerName = 'npm';\n if (options.yarn || (!options.npm && PackageManager.shouldUseYarn())) {\n packageManager = 'yarn';\n } else {\n packageManager = 'npm';\n }\n if (options.install) {\n Log.log(\n packageManager === 'yarn'\n ? `🧶 Using Yarn to install packages. ${chalk.dim('Pass --npm to use npm instead.')}`\n : '📦 Using npm to install packages.'\n );\n }\n\n return packageManager;\n}\n\nexport async function installNodeDependenciesAsync(\n projectRoot: string,\n packageManager: PackageManagerName,\n flags: { silent?: boolean; clean?: boolean } = {}\n) {\n // Default to silent unless debugging.\n const isSilent = flags.silent ?? !env.EXPO_DEBUG;\n if (flags.clean && packageManager !== 'yarn') {\n // This step can take a couple seconds, if the installation logs are enabled (with EXPO_DEBUG) then it\n // ends up looking odd to see \"Installing JavaScript dependencies\" for ~5 seconds before the logs start showing up.\n const cleanJsDepsStep = logNewSection('Cleaning JavaScript dependencies');\n const time = Date.now();\n // nuke the node modules\n // TODO: this is substantially slower, we should find a better alternative to ensuring the modules are installed.\n await fs.promises.rm('node_modules', { recursive: true, force: true });\n cleanJsDepsStep.succeed(\n `Cleaned JavaScript dependencies ${chalk.gray(Date.now() - time + 'ms')}`\n );\n }\n\n const installJsDepsStep = logNewSection('Installing JavaScript dependencies');\n try {\n const time = Date.now();\n await installNodeDependenciesInternalAsync(projectRoot, packageManager, { silent: isSilent });\n installJsDepsStep.succeed(\n `Installed JavaScript dependencies ${chalk.gray(Date.now() - time + 'ms')}`\n );\n } catch {\n const message = `Something went wrong installing JavaScript dependencies, check your ${packageManager} logfile or run ${chalk.bold(\n `${packageManager} install`\n )} again manually.`;\n installJsDepsStep.fail(chalk.red(message));\n // TODO: actually show the error message from the package manager! :O\n throw new SilentError(message);\n }\n}\n\nasync function installNodeDependenciesInternalAsync(\n projectRoot: string,\n packageManager: PackageManagerName,\n flags: { silent: boolean }\n) {\n const options = { cwd: projectRoot, silent: flags.silent };\n if (packageManager === 'yarn') {\n const yarn = new PackageManager.YarnPackageManager(options);\n const version = await yarn.versionAsync();\n const nodeLinker = await yarn.getConfigAsync('nodeLinker');\n if (semver.satisfies(version, '>=2.0.0-rc.24') && nodeLinker !== 'node-modules') {\n const yarnRc = path.join(projectRoot, '.yarnrc.yml');\n let yamlString = '';\n try {\n yamlString = fs.readFileSync(yarnRc, 'utf8');\n } catch (error: any) {\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n const config = yamlString ? yaml.safeLoad(yamlString) : {};\n // @ts-ignore\n config.nodeLinker = 'node-modules';\n !flags.silent &&\n Log.warn(\n `Yarn v${version} detected, enabling experimental Yarn v2 support using the node-modules plugin.`\n );\n !flags.silent && Log.log(`Writing ${yarnRc}...`);\n fs.writeFileSync(yarnRc, yaml.safeDump(config));\n }\n await yarn.installAsync();\n } else {\n await new PackageManager.NpmPackageManager(options).installAsync();\n }\n}\n"],"names":["resolvePackageManager","installNodeDependenciesAsync","PackageManager","Log","options","packageManager","yarn","npm","shouldUseYarn","install","log","chalk","dim","projectRoot","flags","isSilent","silent","env","EXPO_DEBUG","clean","cleanJsDepsStep","logNewSection","time","Date","now","fs","promises","rm","recursive","force","succeed","gray","installJsDepsStep","installNodeDependenciesInternalAsync","message","bold","fail","red","SilentError","cwd","YarnPackageManager","version","versionAsync","nodeLinker","getConfigAsync","semver","satisfies","yarnRc","path","join","yamlString","readFileSync","error","code","config","yaml","safeLoad","warn","writeFileSync","safeDump","installAsync","NpmPackageManager"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/nodeModules.ts"],"sourcesContent":["import chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { logNewSection } from './ora';\n\nexport async function clearNodeModulesAsync(projectRoot: string) {\n // This step can take a couple seconds, if the installation logs are enabled (with EXPO_DEBUG) then it\n // ends up looking odd to see \"Installing JavaScript dependencies\" for ~5 seconds before the logs start showing up.\n const cleanJsDepsStep = logNewSection('Cleaning JavaScript dependencies');\n const time = Date.now();\n // nuke the node modules\n // TODO: this is substantially slower, we should find a better alternative to ensuring the modules are installed.\n await fs.promises.rm(path.join(projectRoot, 'node_modules'), { recursive: true, force: true });\n cleanJsDepsStep.succeed(\n `Cleaned JavaScript dependencies ${chalk.gray(Date.now() - time + 'ms')}`\n );\n}\n"],"names":["clearNodeModulesAsync","projectRoot","cleanJsDepsStep","logNewSection","time","Date","now","fs","promises","rm","path","join","recursive","force","succeed","chalk","gray"],"mappings":"AAAA;;;;QAMsBA,qBAAqB,GAArBA,qBAAqB;AANzB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACV,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACF,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEO,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;AAE9B,eAAeA,qBAAqB,CAACC,WAAmB,EAAE;IAC/D,sGAAsG;IACtG,mHAAmH;IACnH,MAAMC,eAAe,GAAGC,CAAAA,GAAAA,IAAa,AAAoC,CAAA,cAApC,CAAC,kCAAkC,CAAC,AAAC;IAC1E,MAAMC,IAAI,GAAGC,IAAI,CAACC,GAAG,EAAE,AAAC;IACxB,wBAAwB;IACxB,iHAAiH;IACjH,MAAMC,GAAE,QAAA,CAACC,QAAQ,CAACC,EAAE,CAACC,KAAI,QAAA,CAACC,IAAI,CAACV,WAAW,EAAE,cAAc,CAAC,EAAE;QAAEW,SAAS,EAAE,IAAI;QAAEC,KAAK,EAAE,IAAI;KAAE,CAAC,CAAC;IAC/FX,eAAe,CAACY,OAAO,CACrB,CAAC,gCAAgC,EAAEC,MAAK,QAAA,CAACC,IAAI,CAACX,IAAI,CAACC,GAAG,EAAE,GAAGF,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAC1E,CAAC;CACH"}
@@ -21,7 +21,6 @@ var _tar = _interopRequireDefault(require("tar"));
21
21
  var _util = require("util");
22
22
  var _fileSystemCache = require("../api/rest/cache/FileSystemCache");
23
23
  var _wrapFetchWithCache = require("../api/rest/cache/wrapFetchWithCache");
24
- var Log = _interopRequireWildcard(require("../log"));
25
24
  var _createFileTransform = require("./createFileTransform");
26
25
  var _dir = require("./dir");
27
26
  var _errors = require("./errors");
@@ -30,27 +29,7 @@ function _interopRequireDefault(obj) {
30
29
  default: obj
31
30
  };
32
31
  }
33
- function _interopRequireWildcard(obj) {
34
- if (obj && obj.__esModule) {
35
- return obj;
36
- } else {
37
- var newObj = {};
38
- if (obj != null) {
39
- for(var key in obj){
40
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
41
- var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
42
- if (desc.get || desc.set) {
43
- Object.defineProperty(newObj, key, desc);
44
- } else {
45
- newObj[key] = obj[key];
46
- }
47
- }
48
- }
49
- }
50
- newObj.default = obj;
51
- return newObj;
52
- }
53
- }
32
+ const debug = require("debug")("expo:utils:npm");
54
33
  const cachedFetch = (0, _wrapFetchWithCache).wrapFetchWithCache(_nodeFetch.default, new _fileSystemCache.FileSystemCache({
55
34
  cacheDirectory: getCacheFilePath()
56
35
  }));
@@ -79,7 +58,7 @@ async function npmViewAsync(...props) {
79
58
  ];
80
59
  const results = (ref = (await (0, _spawnAsync).default("npm", cmd)).stdout) == null ? void 0 : ref.trim();
81
60
  const cmdString = `npm ${cmd.join(" ")}`;
82
- Log.debug("Run:", cmdString);
61
+ debug("Run:", cmdString);
83
62
  if (!results) {
84
63
  return null;
85
64
  }
@@ -110,7 +89,7 @@ async function getNpmUrlAsync(packageName) {
110
89
  const pipeline = (0, _util).promisify(_stream.Stream.pipeline);
111
90
  async function downloadAndExtractNpmModuleAsync(npmName, props) {
112
91
  const url = await getNpmUrlAsync(npmName);
113
- Log.debug("Fetch from URL:", url);
92
+ debug("Fetch from URL:", url);
114
93
  await extractNpmTarballFromUrlAsync(url, props);
115
94
  }
116
95
  async function extractLocalNpmTarballAsync(tarFilePath, props) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/npm.ts"],"sourcesContent":["import { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport { JSONValue } from '@expo/json-file';\nimport spawnAsync from '@expo/spawn-async';\nimport assert from 'assert';\nimport fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport slugify from 'slugify';\nimport { Stream } from 'stream';\nimport tar from 'tar';\nimport { promisify } from 'util';\n\nimport { FileSystemCache } from '../api/rest/cache/FileSystemCache';\nimport { wrapFetchWithCache } from '../api/rest/cache/wrapFetchWithCache';\nimport * as Log from '../log';\nimport { createEntryResolver, createFileTransform } from './createFileTransform';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\n\nconst cachedFetch = wrapFetchWithCache(\n fetch,\n new FileSystemCache({\n cacheDirectory: getCacheFilePath(),\n // Time to live. How long (in ms) responses remain cached before being automatically ejected. If undefined, responses are never automatically ejected from the cache.\n // ttl: 1000,\n })\n);\n\nexport function sanitizeNpmPackageName(name: string): string {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n return (\n applyKnownNpmPackageNameRules(name) ||\n applyKnownNpmPackageNameRules(slugify(name)) ||\n // If nothing is left use 'app' like we do in Xcode projects.\n 'app'\n );\n}\n\nfunction applyKnownNpmPackageNameRules(name: string): string | null {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n\n // package name cannot start with '.' or '_'.\n while (/^(\\.|_)/.test(name)) {\n name = name.substring(1);\n }\n\n name = name.toLowerCase().replace(/[^a-zA-Z._\\-/@]/g, '');\n\n return (\n name\n // .replace(/![a-z0-9-._~]+/g, '')\n // Remove special characters\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') || null\n );\n}\n\nexport async function npmViewAsync(...props: string[]): Promise<JSONValue> {\n const cmd = ['view', ...props, '--json'];\n const results = (await spawnAsync('npm', cmd)).stdout?.trim();\n const cmdString = `npm ${cmd.join(' ')}`;\n Log.debug('Run:', cmdString);\n if (!results) {\n return null;\n }\n try {\n return JSON.parse(results);\n } catch (error: any) {\n throw new Error(\n `Could not parse JSON returned from \"${cmdString}\".\\n\\n${results}\\n\\nError: ${error.message}`\n );\n }\n}\n\n/** Given a package name like `expo` or `expo@beta`, return the registry URL if it exists. */\nexport async function getNpmUrlAsync(packageName: string): Promise<string> {\n const results = await npmViewAsync(packageName, 'dist.tarball');\n\n assert(results, `Could not get npm url for package \"${packageName}\"`);\n\n // Fully qualified url returns a string.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@sdk-33 dist.tarball --json\n if (typeof results === 'string') {\n return results;\n }\n\n // When the tag is arbitrary, the tarball url is an array, return the last value as it's the most recent.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@33 dist.tarball --json\n if (Array.isArray(results)) {\n return results[results.length - 1] as string;\n }\n\n throw new CommandError(\n 'Expected results of `npm view ...` to be an array or string. Instead found: ' + results\n );\n}\n\n// @ts-ignore\nconst pipeline = promisify(Stream.pipeline);\n\nexport async function downloadAndExtractNpmModuleAsync(\n npmName: string,\n props: ExtractProps\n): Promise<void> {\n const url = await getNpmUrlAsync(npmName);\n\n Log.debug('Fetch from URL:', url);\n await extractNpmTarballFromUrlAsync(url, props);\n}\n\nexport async function extractLocalNpmTarballAsync(\n tarFilePath: string,\n props: ExtractProps\n): Promise<void> {\n const readStream = fs.createReadStream(tarFilePath);\n await extractNpmTarballAsync(readStream, props);\n}\n\ntype ExtractProps = {\n name: string;\n cwd: string;\n strip?: number;\n fileList?: string[];\n};\n\nfunction getCacheFilePath() {\n return path.join(getExpoHomeDirectory(), 'template-cache');\n}\n\nasync function createUrlStreamAsync(url: string) {\n const response = await cachedFetch(url);\n if (!response.ok) {\n throw new Error(`Unexpected response: ${response.statusText}. From url: ${url}`);\n }\n\n return response.body;\n}\n\nexport async function extractNpmTarballFromUrlAsync(\n url: string,\n props: ExtractProps\n): Promise<void> {\n await extractNpmTarballAsync(await createUrlStreamAsync(url), props);\n}\n\nexport async function extractNpmTarballAsync(\n stream: NodeJS.ReadableStream,\n props: ExtractProps\n): Promise<void> {\n const { cwd, strip, name, fileList = [] } = props;\n\n await ensureDirectoryAsync(cwd);\n\n await pipeline(\n stream,\n tar.extract(\n {\n cwd,\n transform: createFileTransform(name),\n onentry: createEntryResolver(name),\n strip: strip ?? 1,\n },\n fileList\n )\n );\n}\n"],"names":["sanitizeNpmPackageName","npmViewAsync","getNpmUrlAsync","downloadAndExtractNpmModuleAsync","extractLocalNpmTarballAsync","extractNpmTarballFromUrlAsync","extractNpmTarballAsync","Log","cachedFetch","wrapFetchWithCache","fetch","FileSystemCache","cacheDirectory","getCacheFilePath","name","applyKnownNpmPackageNameRules","slugify","test","substring","toLowerCase","replace","normalize","props","cmd","results","spawnAsync","stdout","trim","cmdString","join","debug","JSON","parse","error","Error","message","packageName","assert","Array","isArray","length","CommandError","pipeline","promisify","Stream","npmName","url","tarFilePath","readStream","fs","createReadStream","path","getExpoHomeDirectory","createUrlStreamAsync","response","ok","statusText","body","stream","cwd","strip","fileList","ensureDirectoryAsync","tar","extract","transform","createFileTransform","onentry","createEntryResolver"],"mappings":"AAAA;;;;QA4BgBA,sBAAsB,GAAtBA,sBAAsB;QA6BhBC,YAAY,GAAZA,YAAY;QAkBZC,cAAc,GAAdA,cAAc;QA2BdC,gCAAgC,GAAhCA,gCAAgC;QAUhCC,2BAA2B,GAA3BA,2BAA2B;QA4B3BC,6BAA6B,GAA7BA,6BAA6B;QAO7BC,sBAAsB,GAAtBA,sBAAsB;AAnJP,IAAA,aAAiC,WAAjC,iCAAiC,CAAA;AAE/C,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AACvB,IAAA,OAAQ,kCAAR,QAAQ,EAAA;AACZ,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACD,IAAA,UAAY,kCAAZ,YAAY,EAAA;AACb,IAAA,KAAM,kCAAN,MAAM,EAAA;AACH,IAAA,QAAS,kCAAT,SAAS,EAAA;AACN,IAAA,OAAQ,WAAR,QAAQ,CAAA;AACf,IAAA,IAAK,kCAAL,KAAK,EAAA;AACK,IAAA,KAAM,WAAN,MAAM,CAAA;AAEA,IAAA,gBAAmC,WAAnC,mCAAmC,CAAA;AAChC,IAAA,mBAAsC,WAAtC,sCAAsC,CAAA;AAC7DC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AAC0C,IAAA,oBAAuB,WAAvB,uBAAuB,CAAA;AAC3C,IAAA,IAAO,WAAP,OAAO,CAAA;AACf,IAAA,OAAU,WAAV,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvC,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,mBAAkB,AAOrC,CAAA,mBAPqC,CACpCC,UAAK,QAAA,EACL,IAAIC,gBAAe,gBAAA,CAAC;IAClBC,cAAc,EAAEC,gBAAgB,EAAE;CAGnC,CAAC,CACH,AAAC;AAEK,SAASb,sBAAsB,CAACc,IAAY,EAAU;IAC3D,iEAAiE;IACjE,OACEC,6BAA6B,CAACD,IAAI,CAAC,IACnCC,6BAA6B,CAACC,CAAAA,GAAAA,QAAO,AAAM,CAAA,QAAN,CAACF,IAAI,CAAC,CAAC,IAC5C,6DAA6D;IAC7D,KAAK,CACL;CACH;AAED,SAASC,6BAA6B,CAACD,IAAY,EAAiB;IAClE,iEAAiE;IAEjE,6CAA6C;IAC7C,MAAO,UAAUG,IAAI,CAACH,IAAI,CAAC,CAAE;QAC3BA,IAAI,GAAGA,IAAI,CAACI,SAAS,CAAC,CAAC,CAAC,CAAC;KAC1B;IAEDJ,IAAI,GAAGA,IAAI,CAACK,WAAW,EAAE,CAACC,OAAO,qBAAqB,EAAE,CAAC,CAAC;IAE1D,OACEN,IAAI,AACF,kCAAkC;IAClC,4BAA4B;KAC3BO,SAAS,CAAC,KAAK,CAAC,CAChBD,OAAO,qBAAqB,EAAE,CAAC,IAAI,IAAI,CAC1C;CACH;AAEM,eAAenB,YAAY,CAAC,GAAGqB,KAAK,AAAU,EAAsB;QAEzD,GAAqC;IADrD,MAAMC,GAAG,GAAG;QAAC,MAAM;WAAKD,KAAK;QAAE,QAAQ;KAAC,AAAC;IACzC,MAAME,OAAO,GAAG,CAAA,GAAqC,GAArC,CAAC,MAAMC,CAAAA,GAAAA,WAAU,AAAY,CAAA,QAAZ,CAAC,KAAK,EAAEF,GAAG,CAAC,CAAC,CAACG,MAAM,SAAM,GAA3C,KAAA,CAA2C,GAA3C,GAAqC,CAAEC,IAAI,EAAE,AAAC;IAC9D,MAAMC,SAAS,GAAG,CAAC,IAAI,EAAEL,GAAG,CAACM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,AAAC;IACzCtB,GAAG,CAACuB,KAAK,CAAC,MAAM,EAAEF,SAAS,CAAC,CAAC;IAC7B,IAAI,CAACJ,OAAO,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;IACD,IAAI;QACF,OAAOO,IAAI,CAACC,KAAK,CAACR,OAAO,CAAC,CAAC;KAC5B,CAAC,OAAOS,KAAK,EAAO;QACnB,MAAM,IAAIC,KAAK,CACb,CAAC,oCAAoC,EAAEN,SAAS,CAAC,MAAM,EAAEJ,OAAO,CAAC,WAAW,EAAES,KAAK,CAACE,OAAO,CAAC,CAAC,CAC9F,CAAC;KACH;CACF;AAGM,eAAejC,cAAc,CAACkC,WAAmB,EAAmB;IACzE,MAAMZ,OAAO,GAAG,MAAMvB,YAAY,CAACmC,WAAW,EAAE,cAAc,CAAC,AAAC;IAEhEC,CAAAA,GAAAA,OAAM,AAA+D,CAAA,QAA/D,CAACb,OAAO,EAAE,CAAC,mCAAmC,EAAEY,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,wCAAwC;IACxC,WAAW;IACX,sEAAmE;IAChE,IAAC,OAAOZ,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAOA,OAAO,CAAC;KAChB;IAED,yGAAyG;IACzG,WAAW;IACX,kEAA+D;IAC/D,IAAIc,KAAK,CAACC,OAAO,CAACf,OAAO,CAAC,EAAE;QAC1B,OAAOA,OAAO,CAACA,OAAO,CAACgB,MAAM,GAAG,CAAC,CAAC,CAAW;KAC9C;IAED,MAAM,IAAIC,OAAY,aAAA,CACpB,8EAA8E,GAAGjB,OAAO,CACzF,CAAC;CACH;AAED,aAAa;AACb,MAAMkB,QAAQ,GAAGC,CAAAA,GAAAA,KAAS,AAAiB,CAAA,UAAjB,CAACC,OAAM,OAAA,CAACF,QAAQ,CAAC,AAAC;AAErC,eAAevC,gCAAgC,CACpD0C,OAAe,EACfvB,KAAmB,EACJ;IACf,MAAMwB,GAAG,GAAG,MAAM5C,cAAc,CAAC2C,OAAO,CAAC,AAAC;IAE1CtC,GAAG,CAACuB,KAAK,CAAC,iBAAiB,EAAEgB,GAAG,CAAC,CAAC;IAClC,MAAMzC,6BAA6B,CAACyC,GAAG,EAAExB,KAAK,CAAC,CAAC;CACjD;AAEM,eAAelB,2BAA2B,CAC/C2C,WAAmB,EACnBzB,KAAmB,EACJ;IACf,MAAM0B,UAAU,GAAGC,GAAE,QAAA,CAACC,gBAAgB,CAACH,WAAW,CAAC,AAAC;IACpD,MAAMzC,sBAAsB,CAAC0C,UAAU,EAAE1B,KAAK,CAAC,CAAC;CACjD;AASD,SAAST,gBAAgB,GAAG;IAC1B,OAAOsC,KAAI,QAAA,CAACtB,IAAI,CAACuB,CAAAA,GAAAA,aAAoB,AAAE,CAAA,qBAAF,EAAE,EAAE,gBAAgB,CAAC,CAAC;CAC5D;AAED,eAAeC,oBAAoB,CAACP,GAAW,EAAE;IAC/C,MAAMQ,QAAQ,GAAG,MAAM9C,WAAW,CAACsC,GAAG,CAAC,AAAC;IACxC,IAAI,CAACQ,QAAQ,CAACC,EAAE,EAAE;QAChB,MAAM,IAAIrB,KAAK,CAAC,CAAC,qBAAqB,EAAEoB,QAAQ,CAACE,UAAU,CAAC,YAAY,EAAEV,GAAG,CAAC,CAAC,CAAC,CAAC;KAClF;IAED,OAAOQ,QAAQ,CAACG,IAAI,CAAC;CACtB;AAEM,eAAepD,6BAA6B,CACjDyC,GAAW,EACXxB,KAAmB,EACJ;IACf,MAAMhB,sBAAsB,CAAC,MAAM+C,oBAAoB,CAACP,GAAG,CAAC,EAAExB,KAAK,CAAC,CAAC;CACtE;AAEM,eAAehB,sBAAsB,CAC1CoD,MAA6B,EAC7BpC,KAAmB,EACJ;IACf,MAAM,EAAEqC,GAAG,CAAA,EAAEC,KAAK,CAAA,EAAE9C,IAAI,CAAA,EAAE+C,QAAQ,EAAG,EAAE,CAAA,EAAE,GAAGvC,KAAK,AAAC;IAElD,MAAMwC,CAAAA,GAAAA,IAAoB,AAAK,CAAA,qBAAL,CAACH,GAAG,CAAC,CAAC;IAEhC,MAAMjB,QAAQ,CACZgB,MAAM,EACNK,IAAG,QAAA,CAACC,OAAO,CACT;QACEL,GAAG;QACHM,SAAS,EAAEC,CAAAA,GAAAA,oBAAmB,AAAM,CAAA,oBAAN,CAACpD,IAAI,CAAC;QACpCqD,OAAO,EAAEC,CAAAA,GAAAA,oBAAmB,AAAM,CAAA,oBAAN,CAACtD,IAAI,CAAC;QAClC8C,KAAK,EAAEA,KAAK,WAALA,KAAK,GAAI,CAAC;KAClB,EACDC,QAAQ,CACT,CACF,CAAC;CACH"}
1
+ {"version":3,"sources":["../../../src/utils/npm.ts"],"sourcesContent":["import { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport { JSONValue } from '@expo/json-file';\nimport spawnAsync from '@expo/spawn-async';\nimport assert from 'assert';\nimport fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport slugify from 'slugify';\nimport { Stream } from 'stream';\nimport tar from 'tar';\nimport { promisify } from 'util';\n\nimport { FileSystemCache } from '../api/rest/cache/FileSystemCache';\nimport { wrapFetchWithCache } from '../api/rest/cache/wrapFetchWithCache';\nimport { createEntryResolver, createFileTransform } from './createFileTransform';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\n\nconst debug = require('debug')('expo:utils:npm') as typeof console.log;\n\nconst cachedFetch = wrapFetchWithCache(\n fetch,\n new FileSystemCache({\n cacheDirectory: getCacheFilePath(),\n // Time to live. How long (in ms) responses remain cached before being automatically ejected. If undefined, responses are never automatically ejected from the cache.\n // ttl: 1000,\n })\n);\n\nexport function sanitizeNpmPackageName(name: string): string {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n return (\n applyKnownNpmPackageNameRules(name) ||\n applyKnownNpmPackageNameRules(slugify(name)) ||\n // If nothing is left use 'app' like we do in Xcode projects.\n 'app'\n );\n}\n\nfunction applyKnownNpmPackageNameRules(name: string): string | null {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n\n // package name cannot start with '.' or '_'.\n while (/^(\\.|_)/.test(name)) {\n name = name.substring(1);\n }\n\n name = name.toLowerCase().replace(/[^a-zA-Z._\\-/@]/g, '');\n\n return (\n name\n // .replace(/![a-z0-9-._~]+/g, '')\n // Remove special characters\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') || null\n );\n}\n\nexport async function npmViewAsync(...props: string[]): Promise<JSONValue> {\n const cmd = ['view', ...props, '--json'];\n const results = (await spawnAsync('npm', cmd)).stdout?.trim();\n const cmdString = `npm ${cmd.join(' ')}`;\n debug('Run:', cmdString);\n if (!results) {\n return null;\n }\n try {\n return JSON.parse(results);\n } catch (error: any) {\n throw new Error(\n `Could not parse JSON returned from \"${cmdString}\".\\n\\n${results}\\n\\nError: ${error.message}`\n );\n }\n}\n\n/** Given a package name like `expo` or `expo@beta`, return the registry URL if it exists. */\nexport async function getNpmUrlAsync(packageName: string): Promise<string> {\n const results = await npmViewAsync(packageName, 'dist.tarball');\n\n assert(results, `Could not get npm url for package \"${packageName}\"`);\n\n // Fully qualified url returns a string.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@sdk-33 dist.tarball --json\n if (typeof results === 'string') {\n return results;\n }\n\n // When the tag is arbitrary, the tarball url is an array, return the last value as it's the most recent.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@33 dist.tarball --json\n if (Array.isArray(results)) {\n return results[results.length - 1] as string;\n }\n\n throw new CommandError(\n 'Expected results of `npm view ...` to be an array or string. Instead found: ' + results\n );\n}\n\n// @ts-ignore\nconst pipeline = promisify(Stream.pipeline);\n\nexport async function downloadAndExtractNpmModuleAsync(\n npmName: string,\n props: ExtractProps\n): Promise<void> {\n const url = await getNpmUrlAsync(npmName);\n\n debug('Fetch from URL:', url);\n await extractNpmTarballFromUrlAsync(url, props);\n}\n\nexport async function extractLocalNpmTarballAsync(\n tarFilePath: string,\n props: ExtractProps\n): Promise<void> {\n const readStream = fs.createReadStream(tarFilePath);\n await extractNpmTarballAsync(readStream, props);\n}\n\ntype ExtractProps = {\n name: string;\n cwd: string;\n strip?: number;\n fileList?: string[];\n};\n\nfunction getCacheFilePath() {\n return path.join(getExpoHomeDirectory(), 'template-cache');\n}\n\nasync function createUrlStreamAsync(url: string) {\n const response = await cachedFetch(url);\n if (!response.ok) {\n throw new Error(`Unexpected response: ${response.statusText}. From url: ${url}`);\n }\n\n return response.body;\n}\n\nexport async function extractNpmTarballFromUrlAsync(\n url: string,\n props: ExtractProps\n): Promise<void> {\n await extractNpmTarballAsync(await createUrlStreamAsync(url), props);\n}\n\nexport async function extractNpmTarballAsync(\n stream: NodeJS.ReadableStream,\n props: ExtractProps\n): Promise<void> {\n const { cwd, strip, name, fileList = [] } = props;\n\n await ensureDirectoryAsync(cwd);\n\n await pipeline(\n stream,\n tar.extract(\n {\n cwd,\n transform: createFileTransform(name),\n onentry: createEntryResolver(name),\n strip: strip ?? 1,\n },\n fileList\n )\n );\n}\n"],"names":["sanitizeNpmPackageName","npmViewAsync","getNpmUrlAsync","downloadAndExtractNpmModuleAsync","extractLocalNpmTarballAsync","extractNpmTarballFromUrlAsync","extractNpmTarballAsync","debug","require","cachedFetch","wrapFetchWithCache","fetch","FileSystemCache","cacheDirectory","getCacheFilePath","name","applyKnownNpmPackageNameRules","slugify","test","substring","toLowerCase","replace","normalize","props","cmd","results","spawnAsync","stdout","trim","cmdString","join","JSON","parse","error","Error","message","packageName","assert","Array","isArray","length","CommandError","pipeline","promisify","Stream","npmName","url","tarFilePath","readStream","fs","createReadStream","path","getExpoHomeDirectory","createUrlStreamAsync","response","ok","statusText","body","stream","cwd","strip","fileList","ensureDirectoryAsync","tar","extract","transform","createFileTransform","onentry","createEntryResolver"],"mappings":"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"}
@@ -13,13 +13,9 @@ function _interopRequireDefault(obj) {
13
13
  default: obj
14
14
  };
15
15
  }
16
- // eslint-disable-next-line no-console
17
16
  const logReal = console.log;
18
- // eslint-disable-next-line no-console
19
17
  const infoReal = console.info;
20
- // eslint-disable-next-line no-console
21
18
  const warnReal = console.warn;
22
- // eslint-disable-next-line no-console
23
19
  const errorReal = console.error;
24
20
  const runningSpinners = [];
25
21
  function getAllSpinners() {
@@ -46,28 +42,20 @@ function ora(options1) {
46
42
  spinner.start();
47
43
  };
48
44
  const wrapNativeLogs = ()=>{
49
- // eslint-disable-next-line no-console
50
45
  console.log = (...args)=>logWrap(logReal, args)
51
46
  ;
52
- // eslint-disable-next-line no-console
53
47
  console.info = (...args)=>logWrap(infoReal, args)
54
48
  ;
55
- // eslint-disable-next-line no-console
56
49
  console.warn = (...args)=>logWrap(warnReal, args)
57
50
  ;
58
- // eslint-disable-next-line no-console
59
51
  console.error = (...args)=>logWrap(errorReal, args)
60
52
  ;
61
53
  runningSpinners.push(spinner);
62
54
  };
63
55
  const resetNativeLogs = ()=>{
64
- // eslint-disable-next-line no-console
65
56
  console.log = logReal;
66
- // eslint-disable-next-line no-console
67
- console.info = logReal;
68
- // eslint-disable-next-line no-console
57
+ console.info = infoReal;
69
58
  console.warn = warnReal;
70
- // eslint-disable-next-line no-console
71
59
  console.error = errorReal;
72
60
  const index = runningSpinners.indexOf(spinner);
73
61
  if (index >= 0) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/ora.ts"],"sourcesContent":["import chalk from 'chalk';\nimport oraReal, { Ora } from 'ora';\n\n// import * as Log from '../log';\nimport { env } from './env';\n\n// eslint-disable-next-line no-console\nconst logReal = console.log;\n// eslint-disable-next-line no-console\nconst infoReal = console.info;\n// eslint-disable-next-line no-console\nconst warnReal = console.warn;\n// eslint-disable-next-line no-console\nconst errorReal = console.error;\n\nconst runningSpinners: oraReal.Ora[] = [];\n\nexport function getAllSpinners() {\n return runningSpinners;\n}\n\n/**\n * A custom ora spinner that sends the stream to stdout in CI, non-TTY, or expo's non-interactive flag instead of stderr (the default).\n *\n * @param options\n * @returns\n */\nexport function ora(options?: oraReal.Options | string): oraReal.Ora {\n const inputOptions = typeof options === 'string' ? { text: options } : options || {};\n const disabled = env.CI || env.EXPO_DEBUG;\n const spinner = oraReal({\n // Ensure our non-interactive mode emulates CI mode.\n isEnabled: !disabled,\n // In non-interactive mode, send the stream to stdout so it prevents looking like an error.\n stream: disabled ? process.stdout : process.stderr,\n ...inputOptions,\n });\n\n const oraStart = spinner.start.bind(spinner);\n const oraStop = spinner.stop.bind(spinner);\n const oraStopAndPersist = spinner.stopAndPersist.bind(spinner);\n\n const logWrap = (method: any, args: any[]): void => {\n oraStop();\n method(...args);\n spinner.start();\n };\n\n const wrapNativeLogs = (): void => {\n // eslint-disable-next-line no-console\n console.log = (...args: any) => logWrap(logReal, args);\n // eslint-disable-next-line no-console\n console.info = (...args: any) => logWrap(infoReal, args);\n // eslint-disable-next-line no-console\n console.warn = (...args: any) => logWrap(warnReal, args);\n // eslint-disable-next-line no-console\n console.error = (...args: any) => logWrap(errorReal, args);\n\n runningSpinners.push(spinner);\n };\n\n const resetNativeLogs = (): void => {\n // eslint-disable-next-line no-console\n console.log = logReal;\n // eslint-disable-next-line no-console\n console.info = logReal;\n // eslint-disable-next-line no-console\n console.warn = warnReal;\n // eslint-disable-next-line no-console\n console.error = errorReal;\n\n const index = runningSpinners.indexOf(spinner);\n if (index >= 0) {\n runningSpinners.splice(index, 1);\n }\n };\n\n spinner.start = (text): Ora => {\n wrapNativeLogs();\n return oraStart(text);\n };\n\n spinner.stopAndPersist = (options): Ora => {\n const result = oraStopAndPersist(options);\n resetNativeLogs();\n return result;\n };\n\n spinner.stop = (): Ora => {\n const result = oraStop();\n resetNativeLogs();\n return result;\n };\n\n // Always make the central logging module aware of the current spinner\n // Log.setSpinner(spinner);\n\n return spinner;\n}\n\n/**\n * Create a unified section spinner.\n *\n * @param title\n * @returns\n */\nexport function logNewSection(title: string) {\n const spinner = ora(chalk.bold(title));\n // Prevent the spinner from clashing with debug logs\n spinner.start();\n return spinner;\n}\n"],"names":["getAllSpinners","ora","logNewSection","logReal","console","log","infoReal","info","warnReal","warn","errorReal","error","runningSpinners","options","inputOptions","text","disabled","env","CI","EXPO_DEBUG","spinner","oraReal","isEnabled","stream","process","stdout","stderr","oraStart","start","bind","oraStop","stop","oraStopAndPersist","stopAndPersist","logWrap","method","args","wrapNativeLogs","push","resetNativeLogs","index","indexOf","splice","result","title","chalk","bold"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/ora.ts"],"sourcesContent":["import chalk from 'chalk';\nimport oraReal, { Ora } from 'ora';\n\n// import * as Log from '../log';\nimport { env } from './env';\n\nconst logReal = console.log;\nconst infoReal = console.info;\nconst warnReal = console.warn;\nconst errorReal = console.error;\n\nconst runningSpinners: oraReal.Ora[] = [];\n\nexport function getAllSpinners() {\n return runningSpinners;\n}\n\n/**\n * A custom ora spinner that sends the stream to stdout in CI, non-TTY, or expo's non-interactive flag instead of stderr (the default).\n *\n * @param options\n * @returns\n */\nexport function ora(options?: oraReal.Options | string): oraReal.Ora {\n const inputOptions = typeof options === 'string' ? { text: options } : options || {};\n const disabled = env.CI || env.EXPO_DEBUG;\n const spinner = oraReal({\n // Ensure our non-interactive mode emulates CI mode.\n isEnabled: !disabled,\n // In non-interactive mode, send the stream to stdout so it prevents looking like an error.\n stream: disabled ? process.stdout : process.stderr,\n ...inputOptions,\n });\n\n const oraStart = spinner.start.bind(spinner);\n const oraStop = spinner.stop.bind(spinner);\n const oraStopAndPersist = spinner.stopAndPersist.bind(spinner);\n\n const logWrap = (method: any, args: any[]): void => {\n oraStop();\n method(...args);\n spinner.start();\n };\n\n const wrapNativeLogs = (): void => {\n console.log = (...args: any) => logWrap(logReal, args);\n console.info = (...args: any) => logWrap(infoReal, args);\n console.warn = (...args: any) => logWrap(warnReal, args);\n console.error = (...args: any) => logWrap(errorReal, args);\n\n runningSpinners.push(spinner);\n };\n\n const resetNativeLogs = (): void => {\n console.log = logReal;\n console.info = infoReal;\n console.warn = warnReal;\n console.error = errorReal;\n\n const index = runningSpinners.indexOf(spinner);\n if (index >= 0) {\n runningSpinners.splice(index, 1);\n }\n };\n\n spinner.start = (text): Ora => {\n wrapNativeLogs();\n return oraStart(text);\n };\n\n spinner.stopAndPersist = (options): Ora => {\n const result = oraStopAndPersist(options);\n resetNativeLogs();\n return result;\n };\n\n spinner.stop = (): Ora => {\n const result = oraStop();\n resetNativeLogs();\n return result;\n };\n\n // Always make the central logging module aware of the current spinner\n // Log.setSpinner(spinner);\n\n return spinner;\n}\n\n/**\n * Create a unified section spinner.\n *\n * @param title\n * @returns\n */\nexport function logNewSection(title: string) {\n const spinner = ora(chalk.bold(title));\n // Prevent the spinner from clashing with debug logs\n spinner.start();\n return spinner;\n}\n"],"names":["getAllSpinners","ora","logNewSection","logReal","console","log","infoReal","info","warnReal","warn","errorReal","error","runningSpinners","options","inputOptions","text","disabled","env","CI","EXPO_DEBUG","spinner","oraReal","isEnabled","stream","process","stdout","stderr","oraStart","start","bind","oraStop","stop","oraStopAndPersist","stopAndPersist","logWrap","method","args","wrapNativeLogs","push","resetNativeLogs","index","indexOf","splice","result","title","chalk","bold"],"mappings":"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"}
@@ -4,6 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.setProgressBar = setProgressBar;
6
6
  exports.getProgressBar = getProgressBar;
7
+ exports.createProgressBar = createProgressBar;
8
+ var _progress = _interopRequireDefault(require("progress"));
9
+ function _interopRequireDefault(obj) {
10
+ return obj && obj.__esModule ? obj : {
11
+ default: obj
12
+ };
13
+ }
7
14
  let currentProgress = null;
8
15
  function setProgressBar(bar) {
9
16
  currentProgress = bar;
@@ -11,5 +18,44 @@ function setProgressBar(bar) {
11
18
  function getProgressBar() {
12
19
  return currentProgress;
13
20
  }
21
+ function createProgressBar(barFormat, options) {
22
+ if (process.stderr.clearLine == null) {
23
+ return null;
24
+ }
25
+ const bar = new _progress.default(barFormat, options);
26
+ const logReal = console.log;
27
+ const infoReal = console.info;
28
+ const warnReal = console.warn;
29
+ const errorReal = console.error;
30
+ const wrapNativeLogs = ()=>{
31
+ // @ts-expect-error
32
+ console.log = (...args)=>bar.interrupt(...args)
33
+ ;
34
+ // @ts-expect-error
35
+ console.info = (...args)=>bar.interrupt(...args)
36
+ ;
37
+ // @ts-expect-error
38
+ console.warn = (...args)=>bar.interrupt(...args)
39
+ ;
40
+ // @ts-expect-error
41
+ console.error = (...args)=>bar.interrupt(...args)
42
+ ;
43
+ };
44
+ const resetNativeLogs = ()=>{
45
+ console.log = logReal;
46
+ console.info = infoReal;
47
+ console.warn = warnReal;
48
+ console.error = errorReal;
49
+ };
50
+ const originalTerminate = bar.terminate.bind(bar);
51
+ bar.terminate = ()=>{
52
+ resetNativeLogs();
53
+ setProgressBar(null);
54
+ originalTerminate();
55
+ };
56
+ wrapNativeLogs();
57
+ setProgressBar(bar);
58
+ return bar;
59
+ }
14
60
 
15
61
  //# sourceMappingURL=progress.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/progress.ts"],"sourcesContent":["import ProgressBar from 'progress';\n\nlet currentProgress: ProgressBar | null = null;\n\nexport function setProgressBar(bar: ProgressBar | null): void {\n currentProgress = bar;\n}\n\nexport function getProgressBar(): ProgressBar | null {\n return currentProgress;\n}\n"],"names":["setProgressBar","getProgressBar","currentProgress","bar"],"mappings":"AAAA;;;;QAIgBA,cAAc,GAAdA,cAAc;QAIdC,cAAc,GAAdA,cAAc;AAN9B,IAAIC,eAAe,GAAuB,IAAI,AAAC;AAExC,SAASF,cAAc,CAACG,GAAuB,EAAQ;IAC5DD,eAAe,GAAGC,GAAG,CAAC;CACvB;AAEM,SAASF,cAAc,GAAuB;IACnD,OAAOC,eAAe,CAAC;CACxB"}
1
+ {"version":3,"sources":["../../../src/utils/progress.ts"],"sourcesContent":["import ProgressBar from 'progress';\n\nlet currentProgress: ProgressBar | null = null;\n\nexport function setProgressBar(bar: ProgressBar | null): void {\n currentProgress = bar;\n}\n\nexport function getProgressBar(): ProgressBar | null {\n return currentProgress;\n}\n\nexport function createProgressBar(barFormat: string, options: ProgressBar.ProgressBarOptions) {\n if (process.stderr.clearLine == null) {\n return null;\n }\n\n const bar = new ProgressBar(barFormat, options);\n\n const logReal = console.log;\n const infoReal = console.info;\n const warnReal = console.warn;\n const errorReal = console.error;\n\n const wrapNativeLogs = (): void => {\n // @ts-expect-error\n console.log = (...args: any) => bar.interrupt(...args);\n // @ts-expect-error\n console.info = (...args: any) => bar.interrupt(...args);\n // @ts-expect-error\n console.warn = (...args: any) => bar.interrupt(...args);\n // @ts-expect-error\n console.error = (...args: any) => bar.interrupt(...args);\n };\n\n const resetNativeLogs = (): void => {\n console.log = logReal;\n console.info = infoReal;\n console.warn = warnReal;\n console.error = errorReal;\n };\n\n const originalTerminate = bar.terminate.bind(bar);\n bar.terminate = () => {\n resetNativeLogs();\n setProgressBar(null);\n originalTerminate();\n };\n\n wrapNativeLogs();\n setProgressBar(bar);\n return bar;\n}\n"],"names":["setProgressBar","getProgressBar","createProgressBar","currentProgress","bar","barFormat","options","process","stderr","clearLine","ProgressBar","logReal","console","log","infoReal","info","warnReal","warn","errorReal","error","wrapNativeLogs","args","interrupt","resetNativeLogs","originalTerminate","terminate","bind"],"mappings":"AAAA;;;;QAIgBA,cAAc,GAAdA,cAAc;QAIdC,cAAc,GAAdA,cAAc;QAIdC,iBAAiB,GAAjBA,iBAAiB;AAZT,IAAA,SAAU,kCAAV,UAAU,EAAA;;;;;;AAElC,IAAIC,eAAe,GAAuB,IAAI,AAAC;AAExC,SAASH,cAAc,CAACI,GAAuB,EAAQ;IAC5DD,eAAe,GAAGC,GAAG,CAAC;CACvB;AAEM,SAASH,cAAc,GAAuB;IACnD,OAAOE,eAAe,CAAC;CACxB;AAEM,SAASD,iBAAiB,CAACG,SAAiB,EAAEC,OAAuC,EAAE;IAC5F,IAAIC,OAAO,CAACC,MAAM,CAACC,SAAS,IAAI,IAAI,EAAE;QACpC,OAAO,IAAI,CAAC;KACb;IAED,MAAML,GAAG,GAAG,IAAIM,SAAW,QAAA,CAACL,SAAS,EAAEC,OAAO,CAAC,AAAC;IAEhD,MAAMK,OAAO,GAAGC,OAAO,CAACC,GAAG,AAAC;IAC5B,MAAMC,QAAQ,GAAGF,OAAO,CAACG,IAAI,AAAC;IAC9B,MAAMC,QAAQ,GAAGJ,OAAO,CAACK,IAAI,AAAC;IAC9B,MAAMC,SAAS,GAAGN,OAAO,CAACO,KAAK,AAAC;IAEhC,MAAMC,cAAc,GAAG,IAAY;QACjC,mBAAmB;QACnBR,OAAO,CAACC,GAAG,GAAG,CAAC,GAAGQ,IAAI,AAAK,GAAKjB,GAAG,CAACkB,SAAS,IAAID,IAAI,CAAC;QAAA,CAAC;QACvD,mBAAmB;QACnBT,OAAO,CAACG,IAAI,GAAG,CAAC,GAAGM,IAAI,AAAK,GAAKjB,GAAG,CAACkB,SAAS,IAAID,IAAI,CAAC;QAAA,CAAC;QACxD,mBAAmB;QACnBT,OAAO,CAACK,IAAI,GAAG,CAAC,GAAGI,IAAI,AAAK,GAAKjB,GAAG,CAACkB,SAAS,IAAID,IAAI,CAAC;QAAA,CAAC;QACxD,mBAAmB;QACnBT,OAAO,CAACO,KAAK,GAAG,CAAC,GAAGE,IAAI,AAAK,GAAKjB,GAAG,CAACkB,SAAS,IAAID,IAAI,CAAC;QAAA,CAAC;KAC1D,AAAC;IAEF,MAAME,eAAe,GAAG,IAAY;QAClCX,OAAO,CAACC,GAAG,GAAGF,OAAO,CAAC;QACtBC,OAAO,CAACG,IAAI,GAAGD,QAAQ,CAAC;QACxBF,OAAO,CAACK,IAAI,GAAGD,QAAQ,CAAC;QACxBJ,OAAO,CAACO,KAAK,GAAGD,SAAS,CAAC;KAC3B,AAAC;IAEF,MAAMM,iBAAiB,GAAGpB,GAAG,CAACqB,SAAS,CAACC,IAAI,CAACtB,GAAG,CAAC,AAAC;IAClDA,GAAG,CAACqB,SAAS,GAAG,IAAM;QACpBF,eAAe,EAAE,CAAC;QAClBvB,cAAc,CAAC,IAAI,CAAC,CAAC;QACrBwB,iBAAiB,EAAE,CAAC;KACrB,CAAC;IAEFJ,cAAc,EAAE,CAAC;IACjBpB,cAAc,CAACI,GAAG,CAAC,CAAC;IACpB,OAAOA,GAAG,CAAC;CACZ"}
@@ -19,7 +19,6 @@ exports.createSelectionFilter = createSelectionFilter;
19
19
  exports.promptAsync = void 0;
20
20
  var _assert = _interopRequireDefault(require("assert"));
21
21
  var _prompts = _interopRequireWildcard(require("prompts"));
22
- var Log = _interopRequireWildcard(require("../log"));
23
22
  var _env = require("./env");
24
23
  var _errors = require("./errors");
25
24
  async function prompt(questions, { nonInteractiveHelp , ...options } = {}) {
@@ -76,6 +75,7 @@ function _interopRequireWildcard(obj) {
76
75
  return newObj;
77
76
  }
78
77
  }
78
+ const debug = require("debug")("expo:utils:prompts");
79
79
  /** Interaction observers for detecting when keystroke tracking should pause/resume. */ const listeners = [];
80
80
  async function confirmAsync(questions, options) {
81
81
  const { value } = await prompt({
@@ -107,7 +107,7 @@ function removeInteractionListener(callback) {
107
107
  listeners.splice(listenerIndex, 1);
108
108
  }
109
109
  function pauseInteractions(options = {}) {
110
- Log.debug("Interaction observers paused");
110
+ debug("Interaction observers paused");
111
111
  for (const listener of listeners){
112
112
  listener({
113
113
  pause: true,
@@ -116,7 +116,7 @@ function pauseInteractions(options = {}) {
116
116
  }
117
117
  }
118
118
  function resumeInteractions(options = {}) {
119
- Log.debug("Interaction observers resumed");
119
+ debug("Interaction observers resumed");
120
120
  for (const listener of listeners){
121
121
  listener({
122
122
  pause: false,
@@ -134,7 +134,7 @@ function createSelectionFilter() {
134
134
  return choices.filter((choice)=>regex.test(choice.title)
135
135
  );
136
136
  } catch (error) {
137
- Log.debug("Error filtering choices", error);
137
+ debug("Error filtering choices", error);
138
138
  return [];
139
139
  }
140
140
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/prompts.ts"],"sourcesContent":["import assert from 'assert';\nimport prompts, { Choice, Options, PromptObject, PromptType } from 'prompts';\n\nimport * as Log from '../log';\nimport { env } from './env';\nimport { AbortCommandError, CommandError } from './errors';\n\nexport type Question<V extends string = string> = PromptObject<V> & {\n optionsPerPage?: number;\n};\n\nexport interface ExpoChoice<T> extends Choice {\n value: T;\n}\n\nexport { PromptType };\n\ntype PromptOptions = { nonInteractiveHelp?: string } & Options;\n\nexport type NamelessQuestion = Omit<Question<'value'>, 'name' | 'type'>;\n\ntype InteractionOptions = { pause: boolean; canEscape?: boolean };\n\ntype InteractionCallback = (options: InteractionOptions) => void;\n\n/** Interaction observers for detecting when keystroke tracking should pause/resume. */\nconst listeners: InteractionCallback[] = [];\n\nexport default async function prompt(\n questions: Question | Question[],\n { nonInteractiveHelp, ...options }: PromptOptions = {}\n) {\n questions = Array.isArray(questions) ? questions : [questions];\n if (env.CI && questions.length !== 0) {\n let message = `Input is required, but 'npx expo' is in non-interactive mode.\\n`;\n if (nonInteractiveHelp) {\n message += nonInteractiveHelp;\n } else {\n const question = questions[0];\n const questionMessage =\n typeof question.message === 'function'\n ? question.message(undefined, {}, question)\n : question.message;\n\n message += `Required input:\\n${(questionMessage || '').trim().replace(/^/gm, '> ')}`;\n }\n throw new CommandError('NON_INTERACTIVE', message);\n }\n\n pauseInteractions();\n try {\n const results = await prompts(questions, {\n onCancel() {\n throw new AbortCommandError();\n },\n ...options,\n });\n\n return results;\n } finally {\n resumeInteractions();\n }\n}\n\n/**\n * Create a standard yes/no confirmation that can be cancelled.\n *\n * @param questions\n * @param options\n */\nexport async function confirmAsync(\n questions: NamelessQuestion,\n options?: PromptOptions\n): Promise<boolean> {\n const { value } = await prompt(\n {\n initial: true,\n ...questions,\n name: 'value',\n type: 'confirm',\n },\n options\n );\n return value ?? null;\n}\n\n/** Select an option from a list of options. */\nexport async function selectAsync<T>(\n message: string,\n choices: ExpoChoice<T>[],\n options?: PromptOptions\n): Promise<T> {\n const { value } = await prompt(\n {\n message,\n choices,\n name: 'value',\n type: 'select',\n },\n options\n );\n return value ?? null;\n}\n\nexport const promptAsync = prompt;\n\n/** Used to pause/resume interaction observers while prompting (made for TerminalUI). */\nexport function addInteractionListener(callback: InteractionCallback) {\n listeners.push(callback);\n}\n\nexport function removeInteractionListener(callback: InteractionCallback) {\n const listenerIndex = listeners.findIndex((_callback) => _callback === callback);\n assert(\n listenerIndex >= 0,\n 'removeInteractionListener(): cannot remove an unregistered event listener.'\n );\n listeners.splice(listenerIndex, 1);\n}\n\n/** Notify all listeners that keypress observations must pause. */\nexport function pauseInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n Log.debug('Interaction observers paused');\n for (const listener of listeners) {\n listener({ pause: true, ...options });\n }\n}\n\n/** Notify all listeners that keypress observations can start.. */\nexport function resumeInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n Log.debug('Interaction observers resumed');\n for (const listener of listeners) {\n listener({ pause: false, ...options });\n }\n}\n\nexport function createSelectionFilter(): (input: any, choices: Choice[]) => Promise<any> {\n function escapeRegex(string: string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n return async (input: any, choices: Choice[]) => {\n try {\n const regex = new RegExp(escapeRegex(input), 'i');\n return choices.filter((choice: any) => regex.test(choice.title));\n } catch (error: any) {\n Log.debug('Error filtering choices', error);\n return [];\n }\n };\n}\n"],"names":["PromptType","prompt","confirmAsync","selectAsync","addInteractionListener","removeInteractionListener","pauseInteractions","resumeInteractions","createSelectionFilter","Log","questions","nonInteractiveHelp","options","Array","isArray","env","CI","length","message","question","questionMessage","undefined","trim","replace","CommandError","results","prompts","onCancel","AbortCommandError","listeners","value","initial","name","type","choices","promptAsync","callback","push","listenerIndex","findIndex","_callback","assert","splice","debug","listener","pause","escapeRegex","string","input","regex","RegExp","filter","choice","test","title","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/prompts.ts"],"sourcesContent":["import assert from 'assert';\nimport prompts, { Choice, Options, PromptObject, PromptType } from 'prompts';\n\nimport { env } from './env';\nimport { AbortCommandError, CommandError } from './errors';\n\nconst debug = require('debug')('expo:utils:prompts') as typeof console.log;\n\nexport type Question<V extends string = string> = PromptObject<V> & {\n optionsPerPage?: number;\n};\n\nexport interface ExpoChoice<T> extends Choice {\n value: T;\n}\n\nexport { PromptType };\n\ntype PromptOptions = { nonInteractiveHelp?: string } & Options;\n\nexport type NamelessQuestion = Omit<Question<'value'>, 'name' | 'type'>;\n\ntype InteractionOptions = { pause: boolean; canEscape?: boolean };\n\ntype InteractionCallback = (options: InteractionOptions) => void;\n\n/** Interaction observers for detecting when keystroke tracking should pause/resume. */\nconst listeners: InteractionCallback[] = [];\n\nexport default async function prompt(\n questions: Question | Question[],\n { nonInteractiveHelp, ...options }: PromptOptions = {}\n) {\n questions = Array.isArray(questions) ? questions : [questions];\n if (env.CI && questions.length !== 0) {\n let message = `Input is required, but 'npx expo' is in non-interactive mode.\\n`;\n if (nonInteractiveHelp) {\n message += nonInteractiveHelp;\n } else {\n const question = questions[0];\n const questionMessage =\n typeof question.message === 'function'\n ? question.message(undefined, {}, question)\n : question.message;\n\n message += `Required input:\\n${(questionMessage || '').trim().replace(/^/gm, '> ')}`;\n }\n throw new CommandError('NON_INTERACTIVE', message);\n }\n\n pauseInteractions();\n try {\n const results = await prompts(questions, {\n onCancel() {\n throw new AbortCommandError();\n },\n ...options,\n });\n\n return results;\n } finally {\n resumeInteractions();\n }\n}\n\n/**\n * Create a standard yes/no confirmation that can be cancelled.\n *\n * @param questions\n * @param options\n */\nexport async function confirmAsync(\n questions: NamelessQuestion,\n options?: PromptOptions\n): Promise<boolean> {\n const { value } = await prompt(\n {\n initial: true,\n ...questions,\n name: 'value',\n type: 'confirm',\n },\n options\n );\n return value ?? null;\n}\n\n/** Select an option from a list of options. */\nexport async function selectAsync<T>(\n message: string,\n choices: ExpoChoice<T>[],\n options?: PromptOptions\n): Promise<T> {\n const { value } = await prompt(\n {\n message,\n choices,\n name: 'value',\n type: 'select',\n },\n options\n );\n return value ?? null;\n}\n\nexport const promptAsync = prompt;\n\n/** Used to pause/resume interaction observers while prompting (made for TerminalUI). */\nexport function addInteractionListener(callback: InteractionCallback) {\n listeners.push(callback);\n}\n\nexport function removeInteractionListener(callback: InteractionCallback) {\n const listenerIndex = listeners.findIndex((_callback) => _callback === callback);\n assert(\n listenerIndex >= 0,\n 'removeInteractionListener(): cannot remove an unregistered event listener.'\n );\n listeners.splice(listenerIndex, 1);\n}\n\n/** Notify all listeners that keypress observations must pause. */\nexport function pauseInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n debug('Interaction observers paused');\n for (const listener of listeners) {\n listener({ pause: true, ...options });\n }\n}\n\n/** Notify all listeners that keypress observations can start.. */\nexport function resumeInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n debug('Interaction observers resumed');\n for (const listener of listeners) {\n listener({ pause: false, ...options });\n }\n}\n\nexport function createSelectionFilter(): (input: any, choices: Choice[]) => Promise<any> {\n function escapeRegex(string: string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n return async (input: any, choices: Choice[]) => {\n try {\n const regex = new RegExp(escapeRegex(input), 'i');\n return choices.filter((choice: any) => regex.test(choice.title));\n } catch (error: any) {\n debug('Error filtering choices', error);\n return [];\n }\n };\n}\n"],"names":["PromptType","prompt","confirmAsync","selectAsync","addInteractionListener","removeInteractionListener","pauseInteractions","resumeInteractions","createSelectionFilter","questions","nonInteractiveHelp","options","Array","isArray","env","CI","length","message","question","questionMessage","undefined","trim","replace","CommandError","results","prompts","onCancel","AbortCommandError","debug","require","listeners","value","initial","name","type","choices","promptAsync","callback","push","listenerIndex","findIndex","_callback","assert","splice","listener","pause","escapeRegex","string","input","regex","RegExp","filter","choice","test","title","error"],"mappings":"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"}
@@ -32,9 +32,11 @@ function _interopRequireWildcard(obj) {
32
32
  return newObj;
33
33
  }
34
34
  }
35
+ const debug = require("debug")("expo:utils:tar");
35
36
  async function extractAsync(input, output) {
36
37
  try {
37
38
  if (process.platform !== "win32") {
39
+ debug(`Extracting ${input} to ${output}`);
38
40
  await (0, _spawnAsync).default("tar", [
39
41
  "-xf",
40
42
  input,
@@ -48,6 +50,7 @@ async function extractAsync(input, output) {
48
50
  } catch (error) {
49
51
  Log.warn(`Failed to extract tar using native tools, falling back on JS tar module. ${error.message}`);
50
52
  }
53
+ debug(`Extracting ${input} to ${output} using JS tar module`);
51
54
  // tar node module has previously had problems with big files, and seems to
52
55
  // be slower, so only use it as a backup.
53
56
  await _tar.default.extract({