@expo/cli 0.11.0 → 0.12.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 (281) hide show
  1. package/build/bin/cli +2 -2
  2. package/build/src/api/getExpoGoIntermediateCertificate.js +1 -1
  3. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
  4. package/build/src/api/getExpoSchema.js +1 -1
  5. package/build/src/api/getExpoSchema.js.map +1 -1
  6. package/build/src/api/getNativeModuleVersions.js +1 -1
  7. package/build/src/api/getNativeModuleVersions.js.map +1 -1
  8. package/build/src/api/getProjectDevelopmentCertificate.js +1 -1
  9. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
  10. package/build/src/api/getVersions.js +1 -1
  11. package/build/src/api/getVersions.js.map +1 -1
  12. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
  13. package/build/src/api/rest/client.js +5 -5
  14. package/build/src/api/rest/client.js.map +1 -1
  15. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  16. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  17. package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
  18. package/build/src/api/updateDevelopmentSession.js +1 -1
  19. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  20. package/build/src/api/user/actions.js +2 -2
  21. package/build/src/api/user/actions.js.map +1 -1
  22. package/build/src/api/user/otp.js +1 -1
  23. package/build/src/api/user/otp.js.map +1 -1
  24. package/build/src/api/user/user.js +2 -2
  25. package/build/src/api/user/user.js.map +1 -1
  26. package/build/src/config/configAsync.js +17 -1
  27. package/build/src/config/configAsync.js.map +1 -1
  28. package/build/src/customize/customizeAsync.js +1 -1
  29. package/build/src/customize/customizeAsync.js.map +1 -1
  30. package/build/src/customize/generate.js +29 -2
  31. package/build/src/customize/generate.js.map +1 -1
  32. package/build/src/customize/templates.js +8 -0
  33. package/build/src/customize/templates.js.map +1 -1
  34. package/build/src/customize/typescript.js +54 -0
  35. package/build/src/customize/typescript.js.map +1 -0
  36. package/build/src/export/createBundles.js +1 -1
  37. package/build/src/export/createBundles.js.map +1 -1
  38. package/build/src/export/createMetadataJson.js.map +1 -1
  39. package/build/src/export/embed/exportEmbedAsync.js +50 -4
  40. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  41. package/build/src/export/embed/index.js +1 -3
  42. package/build/src/export/embed/index.js.map +1 -1
  43. package/build/src/export/embed/resolveOptions.js +6 -10
  44. package/build/src/export/embed/resolveOptions.js.map +1 -1
  45. package/build/src/export/exportApp.js +50 -41
  46. package/build/src/export/exportApp.js.map +1 -1
  47. package/build/src/export/exportAssets.js +2 -2
  48. package/build/src/export/exportAssets.js.map +1 -1
  49. package/build/src/export/exportAsync.js +1 -1
  50. package/build/src/export/exportAsync.js.map +1 -1
  51. package/build/src/export/exportStaticAsync.js +42 -12
  52. package/build/src/export/exportStaticAsync.js.map +1 -1
  53. package/build/src/export/fork-bundleAsync.js +27 -2
  54. package/build/src/export/fork-bundleAsync.js.map +1 -1
  55. package/build/src/export/getPublicExpoManifest.js +1 -1
  56. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  57. package/build/src/export/getResolvedLocales.js.map +1 -1
  58. package/build/src/export/printBundleSizes.js.map +1 -1
  59. package/build/src/export/web/exportWebAsync.js.map +1 -1
  60. package/build/src/export/writeContents.js +5 -1
  61. package/build/src/export/writeContents.js.map +1 -1
  62. package/build/src/install/checkPackages.js +1 -1
  63. package/build/src/install/checkPackages.js.map +1 -1
  64. package/build/src/install/installAsync.js +1 -1
  65. package/build/src/install/installAsync.js.map +1 -1
  66. package/build/src/prebuild/configureProjectAsync.js +5 -9
  67. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  68. package/build/src/prebuild/prebuildAsync.js +5 -5
  69. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  70. package/build/src/prebuild/updateFromTemplate.js +8 -5
  71. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  72. package/build/src/register/registerAsync.js +0 -1
  73. package/build/src/register/registerAsync.js.map +1 -1
  74. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  75. package/build/src/run/android/resolveOptions.js +1 -1
  76. package/build/src/run/android/resolveOptions.js.map +1 -1
  77. package/build/src/run/android/runAndroidAsync.js +2 -2
  78. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  79. package/build/src/run/ios/XcodeBuild.js +2 -2
  80. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  81. package/build/src/run/ios/appleDevice/AppleDevice.js +4 -4
  82. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  83. package/build/src/run/ios/appleDevice/ClientManager.js +1 -1
  84. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  85. package/build/src/run/ios/appleDevice/client/AFCClient.js +1 -1
  86. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  87. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
  88. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  89. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +1 -1
  90. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  91. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
  92. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  93. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +1 -1
  94. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  95. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
  96. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +1 -1
  97. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  98. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +1 -1
  99. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  100. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +1 -1
  101. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  102. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  103. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +1 -1
  104. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  105. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +1 -1
  106. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  107. package/build/src/run/ios/codeSigning/configureCodeSigning.js +1 -1
  108. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  109. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +2 -2
  110. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  111. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +3 -0
  112. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  113. package/build/src/run/ios/index.js.map +1 -1
  114. package/build/src/run/ios/launchApp.js +2 -2
  115. package/build/src/run/ios/launchApp.js.map +1 -1
  116. package/build/src/run/ios/options/resolveDevice.js +1 -1
  117. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  118. package/build/src/run/ios/options/resolveOptions.js +2 -2
  119. package/build/src/run/ios/options/resolveOptions.js.map +1 -1
  120. package/build/src/run/ios/runIosAsync.js +3 -3
  121. package/build/src/run/ios/runIosAsync.js.map +1 -1
  122. package/build/src/start/doctor/apple/XcodePrerequisite.js +43 -2
  123. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  124. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +1 -1
  125. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  126. package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -3
  127. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  128. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +1 -1
  129. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  130. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  131. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +7 -7
  132. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  133. package/build/src/start/doctor/typescript/updateTSConfig.js +11 -10
  134. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  135. package/build/src/start/index.js +0 -2
  136. package/build/src/start/index.js.map +1 -1
  137. package/build/src/start/interface/interactiveActions.js +1 -1
  138. package/build/src/start/interface/interactiveActions.js.map +1 -1
  139. package/build/src/start/interface/startInterface.js +3 -3
  140. package/build/src/start/interface/startInterface.js.map +1 -1
  141. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  142. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  143. package/build/src/start/platforms/android/ADBServer.js +1 -1
  144. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  145. package/build/src/start/platforms/android/AndroidDeviceManager.js +5 -5
  146. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  147. package/build/src/start/platforms/android/AndroidPlatformManager.js +1 -1
  148. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  149. package/build/src/start/platforms/android/adb.js +1 -1
  150. package/build/src/start/platforms/android/adb.js.map +1 -1
  151. package/build/src/start/platforms/android/adbReverse.js +2 -2
  152. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  153. package/build/src/start/platforms/android/emulator.js +1 -1
  154. package/build/src/start/platforms/android/emulator.js.map +1 -1
  155. package/build/src/start/platforms/android/getDevices.js +1 -1
  156. package/build/src/start/platforms/android/getDevices.js.map +1 -1
  157. package/build/src/start/platforms/android/promptAndroidDevice.js +1 -1
  158. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  159. package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -5
  160. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  161. package/build/src/start/platforms/ios/ApplePlatformManager.js +1 -1
  162. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  163. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  164. package/build/src/start/platforms/ios/getBestSimulator.js +1 -1
  165. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  166. package/build/src/start/platforms/ios/promptAppleDevice.js +1 -1
  167. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  168. package/build/src/start/platforms/ios/simctl.js +1 -1
  169. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  170. package/build/src/start/platforms/ios/simctlLogging.js +1 -1
  171. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  172. package/build/src/start/resolveOptions.js +0 -5
  173. package/build/src/start/resolveOptions.js.map +1 -1
  174. package/build/src/start/server/AsyncNgrok.js +4 -3
  175. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  176. package/build/src/start/server/BundlerDevServer.js +4 -11
  177. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  178. package/build/src/start/server/DevServerManager.js +3 -2
  179. package/build/src/start/server/DevServerManager.js.map +1 -1
  180. package/build/src/start/server/UrlCreator.js +2 -1
  181. package/build/src/start/server/UrlCreator.js.map +1 -1
  182. package/build/src/start/server/getStaticRenderFunctions.js +2 -2
  183. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  184. package/build/src/start/server/metro/MetroBundlerDevServer.js +42 -25
  185. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  186. package/build/src/start/server/metro/MetroTerminalReporter.js +14 -3
  187. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  188. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  189. package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
  190. package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
  191. package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +1 -1
  192. package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +1 -1
  193. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
  194. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +1 -1
  195. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
  196. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +1 -1
  197. package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +1 -1
  198. package/build/src/start/server/metro/inspector-proxy/index.js +1 -1
  199. package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
  200. package/build/src/start/server/metro/instantiateMetro.js +49 -8
  201. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  202. package/build/src/start/server/metro/resolveFromProject.js +0 -4
  203. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  204. package/build/src/start/server/metro/runServer-fork.js +1 -1
  205. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  206. package/build/src/start/server/metro/withMetroMultiPlatform.js +59 -9
  207. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  208. package/build/src/start/server/metro/withMetroResolvers.js +6 -5
  209. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  210. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +2 -2
  211. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  212. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  213. package/build/src/start/server/middleware/FaviconMiddleware.js +1 -1
  214. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
  215. package/build/src/start/server/middleware/ManifestMiddleware.js +8 -11
  216. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  217. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +1 -1
  218. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  219. package/build/src/start/server/middleware/ServeStaticMiddleware.js +1 -1
  220. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  221. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  222. package/build/src/start/server/middleware/server.types.js.map +1 -1
  223. package/build/src/start/server/openPlatforms.js.map +1 -1
  224. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
  225. package/build/src/start/server/type-generation/routes.js +6 -6
  226. package/build/src/start/server/type-generation/routes.js.map +1 -1
  227. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +3 -3
  228. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  229. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +10 -5
  230. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  231. package/build/src/start/server/webpack/compile.js +1 -1
  232. package/build/src/start/server/webpack/compile.js.map +1 -1
  233. package/build/src/start/startAsync.js +10 -32
  234. package/build/src/start/startAsync.js.map +1 -1
  235. package/build/src/utils/FileNotifier.js +1 -1
  236. package/build/src/utils/FileNotifier.js.map +1 -1
  237. package/build/src/utils/analytics/metroDebuggerMiddleware.js +1 -1
  238. package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
  239. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  240. package/build/src/utils/array.js.map +1 -1
  241. package/build/src/utils/cocoapods.js +2 -2
  242. package/build/src/utils/cocoapods.js.map +1 -1
  243. package/build/src/utils/codesigning.js +2 -2
  244. package/build/src/utils/codesigning.js.map +1 -1
  245. package/build/src/utils/downloadAppAsync.js +1 -1
  246. package/build/src/utils/downloadAppAsync.js.map +1 -1
  247. package/build/src/utils/downloadExpoGoAsync.js +2 -2
  248. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  249. package/build/src/utils/editor.js +1 -1
  250. package/build/src/utils/editor.js.map +1 -1
  251. package/build/src/utils/env.js +1 -1
  252. package/build/src/utils/env.js.map +1 -1
  253. package/build/src/utils/errors.js.map +1 -1
  254. package/build/src/utils/getOrPromptApplicationId.js +2 -2
  255. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  256. package/build/src/utils/git.js +1 -1
  257. package/build/src/utils/git.js.map +1 -1
  258. package/build/src/utils/modifyConfigAsync.js +1 -1
  259. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  260. package/build/src/utils/modifyConfigPlugins.js +1 -1
  261. package/build/src/utils/modifyConfigPlugins.js.map +1 -1
  262. package/build/src/utils/npm.js +1 -1
  263. package/build/src/utils/npm.js.map +1 -1
  264. package/build/src/utils/obj.js.map +1 -1
  265. package/build/src/utils/plist.js +1 -1
  266. package/build/src/utils/plist.js.map +1 -1
  267. package/build/src/utils/port.js +1 -1
  268. package/build/src/utils/port.js.map +1 -1
  269. package/build/src/utils/profile.js +1 -1
  270. package/build/src/utils/profile.js.map +1 -1
  271. package/build/src/utils/scheme.js +1 -1
  272. package/build/src/utils/scheme.js.map +1 -1
  273. package/build/src/utils/tsconfig/loadTsConfigPaths.js +1 -1
  274. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
  275. package/build/src/utils/validateApplicationId.js +85 -5
  276. package/build/src/utils/validateApplicationId.js.map +1 -1
  277. package/package.json +11 -8
  278. package/build/src/api/signManifest.js +0 -26
  279. package/build/src/api/signManifest.js.map +0 -1
  280. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +0 -155
  281. package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/codesigning.ts"],"sourcesContent":["import {\n convertCertificatePEMToCertificate,\n convertKeyPairToPEM,\n convertCSRToCSRPEM,\n generateKeyPair,\n generateCSR,\n convertPrivateKeyPEMToPrivateKey,\n validateSelfSignedCertificate,\n signBufferRSASHA256AndVerify,\n} from '@expo/code-signing-certificates';\nimport { ExpoConfig } from '@expo/config';\nimport { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport JsonFile, { JSONObject } from '@expo/json-file';\nimport { promises as fs } from 'fs';\nimport { pki as PKI } from 'node-forge';\nimport path from 'path';\nimport { Dictionary, parseDictionary } from 'structured-headers';\n\nimport { getExpoGoIntermediateCertificateAsync } from '../api/getExpoGoIntermediateCertificate';\nimport { getProjectDevelopmentCertificateAsync } from '../api/getProjectDevelopmentCertificate';\nimport { AppQuery } from '../api/graphql/queries/AppQuery';\nimport { ensureLoggedInAsync } from '../api/user/actions';\nimport { Actor } from '../api/user/user';\nimport { AppByIdQuery, Permission } from '../graphql/generated';\nimport * as Log from '../log';\nimport { learnMore } from '../utils/link';\nimport { env } from './env';\nimport { CommandError } from './errors';\n\nconst debug = require('debug')('expo:codesigning') as typeof console.log;\n\nexport type CodeSigningInfo = {\n keyId: string;\n privateKey: string;\n certificateForPrivateKey: string;\n /**\n * Chain of certificates to serve in the manifest multipart body \"certificate_chain\" part.\n * The leaf certificate must be the 0th element of the array, followed by any intermediate certificates\n * necessary to evaluate the chain of trust ending in the implicitly trusted root certificate embedded in\n * the client.\n *\n * An empty array indicates that there is no need to serve the certificate chain in the multipart response.\n */\n certificateChainForResponse: string[];\n /**\n * Scope key cached for the project when certificate is development Expo Go code signing.\n * For project-specific code signing (keyId == the project's generated keyId) this is undefined.\n */\n scopeKey: string | null;\n};\n\ntype StoredDevelopmentExpoRootCodeSigningInfo = {\n easProjectId: string | null;\n scopeKey: string | null;\n privateKey: string | null;\n certificateChain: string[] | null;\n};\nconst DEVELOPMENT_CODE_SIGNING_SETTINGS_FILE_NAME = 'development-code-signing-settings-2.json';\n\nexport function getDevelopmentCodeSigningDirectory(): string {\n return path.join(getExpoHomeDirectory(), 'codesigning');\n}\n\nfunction getProjectDevelopmentCodeSigningInfoFile<T extends JSONObject>(defaults: T) {\n function getFile(easProjectId: string): JsonFile<T> {\n const filePath = path.join(\n getDevelopmentCodeSigningDirectory(),\n easProjectId,\n DEVELOPMENT_CODE_SIGNING_SETTINGS_FILE_NAME\n );\n return new JsonFile<T>(filePath);\n }\n\n async function readAsync(easProjectId: string): Promise<T> {\n let projectSettings;\n try {\n projectSettings = await getFile(easProjectId).readAsync();\n } catch {\n projectSettings = await getFile(easProjectId).writeAsync(defaults, { ensureDir: true });\n }\n // Set defaults for any missing fields\n return { ...defaults, ...projectSettings };\n }\n\n async function setAsync(easProjectId: string, json: Partial<T>): Promise<T> {\n try {\n return await getFile(easProjectId).mergeAsync(json, {\n cantReadFileDefault: defaults,\n });\n } catch {\n return await getFile(easProjectId).writeAsync(\n {\n ...defaults,\n ...json,\n },\n { ensureDir: true }\n );\n }\n }\n\n return {\n getFile,\n readAsync,\n setAsync,\n };\n}\n\nexport const DevelopmentCodeSigningInfoFile =\n getProjectDevelopmentCodeSigningInfoFile<StoredDevelopmentExpoRootCodeSigningInfo>({\n easProjectId: null,\n scopeKey: null,\n privateKey: null,\n certificateChain: null,\n });\n\n/**\n * Get info necessary to generate a response `expo-signature` header given a project and incoming request `expo-expect-signature` header.\n * This only knows how to serve two code signing keyids:\n * - `expo-root` indicates that it should use a development certificate in the `expo-root` chain. See {@link getExpoRootDevelopmentCodeSigningInfoAsync}\n * - <developer's expo-updates keyid> indicates that it should sign with the configured certificate. See {@link getProjectCodeSigningCertificateAsync}\n */\nexport async function getCodeSigningInfoAsync(\n exp: ExpoConfig,\n expectSignatureHeader: string | null,\n privateKeyPath: string | undefined\n): Promise<CodeSigningInfo | null> {\n if (!expectSignatureHeader) {\n return null;\n }\n\n let parsedExpectSignature: Dictionary;\n try {\n parsedExpectSignature = parseDictionary(expectSignatureHeader);\n } catch {\n throw new CommandError('Invalid value for expo-expect-signature header');\n }\n\n const expectedKeyIdOuter = parsedExpectSignature.get('keyid');\n if (!expectedKeyIdOuter) {\n throw new CommandError('keyid not present in expo-expect-signature header');\n }\n\n const expectedKeyId = expectedKeyIdOuter[0];\n if (typeof expectedKeyId !== 'string') {\n throw new CommandError(\n `Invalid value for keyid in expo-expect-signature header: ${expectedKeyId}`\n );\n }\n\n let expectedAlg: string | null = null;\n const expectedAlgOuter = parsedExpectSignature.get('alg');\n if (expectedAlgOuter) {\n const expectedAlgTemp = expectedAlgOuter[0];\n if (typeof expectedAlgTemp !== 'string') {\n throw new CommandError('Invalid value for alg in expo-expect-signature header');\n }\n expectedAlg = expectedAlgTemp;\n }\n\n if (expectedKeyId === 'expo-root') {\n return await getExpoRootDevelopmentCodeSigningInfoAsync(exp);\n } else if (expectedKeyId === 'expo-go') {\n throw new CommandError(\n 'Invalid certificate requested: cannot sign with embedded keyid=expo-go key'\n );\n } else {\n return await getProjectCodeSigningCertificateAsync(\n exp,\n privateKeyPath,\n expectedKeyId,\n expectedAlg\n );\n }\n}\n\n/**\n * Get a development code signing certificate for the expo-root -> expo-go -> (development certificate) certificate chain.\n * This requires the user be logged in and online, otherwise try to use the cached development certificate.\n */\nasync function getExpoRootDevelopmentCodeSigningInfoAsync(\n exp: ExpoConfig\n): Promise<CodeSigningInfo | null> {\n const easProjectId = exp.extra?.eas?.projectId;\n // can't check for scope key validity since scope key is derived on the server from projectId and we may be offline.\n // we rely upon the client certificate check to validate the scope key\n if (!easProjectId) {\n debug(\n `WARN: Expo Application Services (EAS) is not configured for your project. Configuring EAS enables a more secure development experience amongst many other benefits. ${learnMore(\n 'https://docs.expo.dev/eas/'\n )}`\n );\n return null;\n }\n\n const developmentCodeSigningInfoFromFile = await DevelopmentCodeSigningInfoFile.readAsync(\n easProjectId\n );\n const validatedCodeSigningInfo = validateStoredDevelopmentExpoRootCertificateCodeSigningInfo(\n developmentCodeSigningInfoFromFile,\n easProjectId\n );\n\n // 1. If online, ensure logged in, generate key pair and CSR, fetch and cache certificate chain for projectId\n // (overwriting existing dev cert in case projectId changed or it has expired)\n if (!env.EXPO_OFFLINE) {\n try {\n return await fetchAndCacheNewDevelopmentCodeSigningInfoAsync(easProjectId);\n } catch (e: any) {\n if (validatedCodeSigningInfo) {\n Log.warn(\n 'There was an error fetching the Expo development certificate, falling back to cached certificate'\n );\n return validatedCodeSigningInfo;\n } else {\n // need to return null here and say a message\n throw e;\n }\n }\n }\n\n // 2. check for cached cert/private key matching projectId and scopeKey of project, if found and valid return private key and cert chain including expo-go cert\n if (validatedCodeSigningInfo) {\n return validatedCodeSigningInfo;\n }\n\n // 3. if offline, return null\n Log.warn('Offline and no cached development certificate found, unable to sign manifest');\n return null;\n}\n\n/**\n * Get the certificate configured for expo-updates for this project.\n */\nasync function getProjectCodeSigningCertificateAsync(\n exp: ExpoConfig,\n privateKeyPath: string | undefined,\n expectedKeyId: string,\n expectedAlg: string | null\n): Promise<CodeSigningInfo | null> {\n const codeSigningCertificatePath = exp.updates?.codeSigningCertificate;\n if (!codeSigningCertificatePath) {\n return null;\n }\n\n if (!privateKeyPath) {\n throw new CommandError(\n 'Must specify --private-key-path argument to sign development manifest for requested code signing key'\n );\n }\n\n const codeSigningMetadata = exp.updates?.codeSigningMetadata;\n if (!codeSigningMetadata) {\n throw new CommandError(\n 'Must specify \"codeSigningMetadata\" under the \"updates\" field of your app config file to use EAS code signing'\n );\n }\n\n const { alg, keyid } = codeSigningMetadata;\n if (!alg || !keyid) {\n throw new CommandError(\n 'Must specify \"keyid\" and \"alg\" in the \"codeSigningMetadata\" field under the \"updates\" field of your app config file to use EAS code signing'\n );\n }\n\n if (expectedKeyId !== keyid) {\n throw new CommandError(`keyid mismatch: client=${expectedKeyId}, project=${keyid}`);\n }\n\n if (expectedAlg && expectedAlg !== alg) {\n throw new CommandError(`\"alg\" field mismatch (client=${expectedAlg}, project=${alg})`);\n }\n\n const { privateKeyPEM, certificatePEM } =\n await getProjectPrivateKeyAndCertificateFromFilePathsAsync({\n codeSigningCertificatePath,\n privateKeyPath,\n });\n\n return {\n keyId: keyid,\n privateKey: privateKeyPEM,\n certificateForPrivateKey: certificatePEM,\n certificateChainForResponse: [],\n scopeKey: null,\n };\n}\n\nasync function readFileWithErrorAsync(path: string, errorMessage: string): Promise<string> {\n try {\n return await fs.readFile(path, 'utf8');\n } catch {\n throw new CommandError(errorMessage);\n }\n}\n\nasync function getProjectPrivateKeyAndCertificateFromFilePathsAsync({\n codeSigningCertificatePath,\n privateKeyPath,\n}: {\n codeSigningCertificatePath: string;\n privateKeyPath: string;\n}): Promise<{ privateKeyPEM: string; certificatePEM: string }> {\n const [codeSigningCertificatePEM, privateKeyPEM] = await Promise.all([\n readFileWithErrorAsync(\n codeSigningCertificatePath,\n `Code signing certificate cannot be read from path: ${codeSigningCertificatePath}`\n ),\n readFileWithErrorAsync(\n privateKeyPath,\n `Code signing private key cannot be read from path: ${privateKeyPath}`\n ),\n ]);\n\n const privateKey = convertPrivateKeyPEMToPrivateKey(privateKeyPEM);\n const certificate = convertCertificatePEMToCertificate(codeSigningCertificatePEM);\n validateSelfSignedCertificate(certificate, {\n publicKey: certificate.publicKey as PKI.rsa.PublicKey,\n privateKey,\n });\n\n return { privateKeyPEM, certificatePEM: codeSigningCertificatePEM };\n}\n\n/**\n * Validate that the cached code signing info is still valid for the current project and\n * that it hasn't expired. If invalid, return null.\n */\nfunction validateStoredDevelopmentExpoRootCertificateCodeSigningInfo(\n codeSigningInfo: StoredDevelopmentExpoRootCodeSigningInfo,\n easProjectId: string\n): CodeSigningInfo | null {\n if (codeSigningInfo.easProjectId !== easProjectId) {\n return null;\n }\n\n const {\n privateKey: privateKeyPEM,\n certificateChain: certificatePEMs,\n scopeKey,\n } = codeSigningInfo;\n if (!privateKeyPEM || !certificatePEMs) {\n return null;\n }\n\n const certificateChain = certificatePEMs.map((certificatePEM) =>\n convertCertificatePEMToCertificate(certificatePEM)\n );\n\n // TODO(wschurman): maybe move to @expo/code-signing-certificates\n const leafCertificate = certificateChain[0];\n const now = new Date();\n if (leafCertificate.validity.notBefore > now || leafCertificate.validity.notAfter < now) {\n return null;\n }\n\n // TODO(wschurman): maybe do more validation, like validation of projectID and scopeKey within eas certificate extension\n\n return {\n keyId: 'expo-go',\n certificateChainForResponse: certificatePEMs,\n certificateForPrivateKey: certificatePEMs[0],\n privateKey: privateKeyPEM,\n scopeKey,\n };\n}\n\nfunction actorCanGetProjectDevelopmentCertificate(actor: Actor, app: AppByIdQuery['app']['byId']) {\n const owningAccountId = app.ownerAccount.id;\n\n const owningAccountIsActorPrimaryAccount =\n actor.__typename === 'User' || actor.__typename === 'SSOUser'\n ? actor.primaryAccount.id === owningAccountId\n : false;\n const userHasPublishPermissionForOwningAccount = !!actor.accounts\n .find((account) => account.id === owningAccountId)\n ?.users?.find((userPermission) => userPermission.actor.id === actor.id)\n ?.permissions?.includes(Permission.Publish);\n return owningAccountIsActorPrimaryAccount || userHasPublishPermissionForOwningAccount;\n}\n\nasync function fetchAndCacheNewDevelopmentCodeSigningInfoAsync(\n easProjectId: string\n): Promise<CodeSigningInfo | null> {\n const actor = await ensureLoggedInAsync();\n const app = await AppQuery.byIdAsync(easProjectId);\n if (!actorCanGetProjectDevelopmentCertificate(actor, app)) {\n return null;\n }\n\n const keyPair = generateKeyPair();\n const keyPairPEM = convertKeyPairToPEM(keyPair);\n const csr = generateCSR(keyPair, `Development Certificate for ${easProjectId}`);\n const csrPEM = convertCSRToCSRPEM(csr);\n const [developmentSigningCertificate, expoGoIntermediateCertificate] = await Promise.all([\n getProjectDevelopmentCertificateAsync(easProjectId, csrPEM),\n getExpoGoIntermediateCertificateAsync(easProjectId),\n ]);\n\n await DevelopmentCodeSigningInfoFile.setAsync(easProjectId, {\n easProjectId,\n scopeKey: app.scopeKey,\n privateKey: keyPairPEM.privateKeyPEM,\n certificateChain: [developmentSigningCertificate, expoGoIntermediateCertificate],\n });\n\n return {\n keyId: 'expo-go',\n certificateChainForResponse: [developmentSigningCertificate, expoGoIntermediateCertificate],\n certificateForPrivateKey: developmentSigningCertificate,\n privateKey: keyPairPEM.privateKeyPEM,\n scopeKey: app.scopeKey,\n };\n}\n/**\n * Generate the `expo-signature` header for a manifest and code signing info.\n */\nexport function signManifestString(\n stringifiedManifest: string,\n codeSigningInfo: CodeSigningInfo\n): string {\n const privateKey = convertPrivateKeyPEMToPrivateKey(codeSigningInfo.privateKey);\n const certificate = convertCertificatePEMToCertificate(codeSigningInfo.certificateForPrivateKey);\n return signBufferRSASHA256AndVerify(\n privateKey,\n certificate,\n Buffer.from(stringifiedManifest, 'utf8')\n );\n}\n"],"names":["getDevelopmentCodeSigningDirectory","getCodeSigningInfoAsync","signManifestString","Log","debug","require","DEVELOPMENT_CODE_SIGNING_SETTINGS_FILE_NAME","path","join","getExpoHomeDirectory","getProjectDevelopmentCodeSigningInfoFile","defaults","getFile","easProjectId","filePath","JsonFile","readAsync","projectSettings","writeAsync","ensureDir","setAsync","json","mergeAsync","cantReadFileDefault","DevelopmentCodeSigningInfoFile","scopeKey","privateKey","certificateChain","exp","expectSignatureHeader","privateKeyPath","parsedExpectSignature","parseDictionary","CommandError","expectedKeyIdOuter","get","expectedKeyId","expectedAlg","expectedAlgOuter","expectedAlgTemp","getExpoRootDevelopmentCodeSigningInfoAsync","getProjectCodeSigningCertificateAsync","extra","eas","projectId","learnMore","developmentCodeSigningInfoFromFile","validatedCodeSigningInfo","validateStoredDevelopmentExpoRootCertificateCodeSigningInfo","env","EXPO_OFFLINE","fetchAndCacheNewDevelopmentCodeSigningInfoAsync","e","warn","codeSigningCertificatePath","updates","codeSigningCertificate","codeSigningMetadata","alg","keyid","privateKeyPEM","certificatePEM","getProjectPrivateKeyAndCertificateFromFilePathsAsync","keyId","certificateForPrivateKey","certificateChainForResponse","readFileWithErrorAsync","errorMessage","fs","readFile","codeSigningCertificatePEM","Promise","all","convertPrivateKeyPEMToPrivateKey","certificate","convertCertificatePEMToCertificate","validateSelfSignedCertificate","publicKey","codeSigningInfo","certificatePEMs","map","leafCertificate","now","Date","validity","notBefore","notAfter","actorCanGetProjectDevelopmentCertificate","actor","app","owningAccountId","ownerAccount","id","owningAccountIsActorPrimaryAccount","__typename","primaryAccount","userHasPublishPermissionForOwningAccount","accounts","find","account","users","userPermission","permissions","includes","Permission","Publish","ensureLoggedInAsync","AppQuery","byIdAsync","keyPair","generateKeyPair","keyPairPEM","convertKeyPairToPEM","csr","generateCSR","csrPEM","convertCSRToCSRPEM","developmentSigningCertificate","expoGoIntermediateCertificate","getProjectDevelopmentCertificateAsync","getExpoGoIntermediateCertificateAsync","stringifiedManifest","signBufferRSASHA256AndVerify","Buffer","from"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/codesigning.ts"],"sourcesContent":["import {\n convertCertificatePEMToCertificate,\n convertKeyPairToPEM,\n convertCSRToCSRPEM,\n generateKeyPair,\n generateCSR,\n convertPrivateKeyPEMToPrivateKey,\n validateSelfSignedCertificate,\n signBufferRSASHA256AndVerify,\n} from '@expo/code-signing-certificates';\nimport { ExpoConfig } from '@expo/config';\nimport { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport JsonFile, { JSONObject } from '@expo/json-file';\nimport { promises as fs } from 'fs';\nimport { pki as PKI } from 'node-forge';\nimport path from 'path';\nimport { Dictionary, parseDictionary } from 'structured-headers';\n\nimport { env } from './env';\nimport { CommandError } from './errors';\nimport { getExpoGoIntermediateCertificateAsync } from '../api/getExpoGoIntermediateCertificate';\nimport { getProjectDevelopmentCertificateAsync } from '../api/getProjectDevelopmentCertificate';\nimport { AppQuery } from '../api/graphql/queries/AppQuery';\nimport { ensureLoggedInAsync } from '../api/user/actions';\nimport { Actor } from '../api/user/user';\nimport { AppByIdQuery, Permission } from '../graphql/generated';\nimport * as Log from '../log';\nimport { learnMore } from '../utils/link';\n\nconst debug = require('debug')('expo:codesigning') as typeof console.log;\n\nexport type CodeSigningInfo = {\n keyId: string;\n privateKey: string;\n certificateForPrivateKey: string;\n /**\n * Chain of certificates to serve in the manifest multipart body \"certificate_chain\" part.\n * The leaf certificate must be the 0th element of the array, followed by any intermediate certificates\n * necessary to evaluate the chain of trust ending in the implicitly trusted root certificate embedded in\n * the client.\n *\n * An empty array indicates that there is no need to serve the certificate chain in the multipart response.\n */\n certificateChainForResponse: string[];\n /**\n * Scope key cached for the project when certificate is development Expo Go code signing.\n * For project-specific code signing (keyId == the project's generated keyId) this is undefined.\n */\n scopeKey: string | null;\n};\n\ntype StoredDevelopmentExpoRootCodeSigningInfo = {\n easProjectId: string | null;\n scopeKey: string | null;\n privateKey: string | null;\n certificateChain: string[] | null;\n};\nconst DEVELOPMENT_CODE_SIGNING_SETTINGS_FILE_NAME = 'development-code-signing-settings-2.json';\n\nexport function getDevelopmentCodeSigningDirectory(): string {\n return path.join(getExpoHomeDirectory(), 'codesigning');\n}\n\nfunction getProjectDevelopmentCodeSigningInfoFile<T extends JSONObject>(defaults: T) {\n function getFile(easProjectId: string): JsonFile<T> {\n const filePath = path.join(\n getDevelopmentCodeSigningDirectory(),\n easProjectId,\n DEVELOPMENT_CODE_SIGNING_SETTINGS_FILE_NAME\n );\n return new JsonFile<T>(filePath);\n }\n\n async function readAsync(easProjectId: string): Promise<T> {\n let projectSettings;\n try {\n projectSettings = await getFile(easProjectId).readAsync();\n } catch {\n projectSettings = await getFile(easProjectId).writeAsync(defaults, { ensureDir: true });\n }\n // Set defaults for any missing fields\n return { ...defaults, ...projectSettings };\n }\n\n async function setAsync(easProjectId: string, json: Partial<T>): Promise<T> {\n try {\n return await getFile(easProjectId).mergeAsync(json, {\n cantReadFileDefault: defaults,\n });\n } catch {\n return await getFile(easProjectId).writeAsync(\n {\n ...defaults,\n ...json,\n },\n { ensureDir: true }\n );\n }\n }\n\n return {\n getFile,\n readAsync,\n setAsync,\n };\n}\n\nexport const DevelopmentCodeSigningInfoFile =\n getProjectDevelopmentCodeSigningInfoFile<StoredDevelopmentExpoRootCodeSigningInfo>({\n easProjectId: null,\n scopeKey: null,\n privateKey: null,\n certificateChain: null,\n });\n\n/**\n * Get info necessary to generate a response `expo-signature` header given a project and incoming request `expo-expect-signature` header.\n * This only knows how to serve two code signing keyids:\n * - `expo-root` indicates that it should use a development certificate in the `expo-root` chain. See {@link getExpoRootDevelopmentCodeSigningInfoAsync}\n * - <developer's expo-updates keyid> indicates that it should sign with the configured certificate. See {@link getProjectCodeSigningCertificateAsync}\n */\nexport async function getCodeSigningInfoAsync(\n exp: ExpoConfig,\n expectSignatureHeader: string | null,\n privateKeyPath: string | undefined\n): Promise<CodeSigningInfo | null> {\n if (!expectSignatureHeader) {\n return null;\n }\n\n let parsedExpectSignature: Dictionary;\n try {\n parsedExpectSignature = parseDictionary(expectSignatureHeader);\n } catch {\n throw new CommandError('Invalid value for expo-expect-signature header');\n }\n\n const expectedKeyIdOuter = parsedExpectSignature.get('keyid');\n if (!expectedKeyIdOuter) {\n throw new CommandError('keyid not present in expo-expect-signature header');\n }\n\n const expectedKeyId = expectedKeyIdOuter[0];\n if (typeof expectedKeyId !== 'string') {\n throw new CommandError(\n `Invalid value for keyid in expo-expect-signature header: ${expectedKeyId}`\n );\n }\n\n let expectedAlg: string | null = null;\n const expectedAlgOuter = parsedExpectSignature.get('alg');\n if (expectedAlgOuter) {\n const expectedAlgTemp = expectedAlgOuter[0];\n if (typeof expectedAlgTemp !== 'string') {\n throw new CommandError('Invalid value for alg in expo-expect-signature header');\n }\n expectedAlg = expectedAlgTemp;\n }\n\n if (expectedKeyId === 'expo-root') {\n return await getExpoRootDevelopmentCodeSigningInfoAsync(exp);\n } else if (expectedKeyId === 'expo-go') {\n throw new CommandError(\n 'Invalid certificate requested: cannot sign with embedded keyid=expo-go key'\n );\n } else {\n return await getProjectCodeSigningCertificateAsync(\n exp,\n privateKeyPath,\n expectedKeyId,\n expectedAlg\n );\n }\n}\n\n/**\n * Get a development code signing certificate for the expo-root -> expo-go -> (development certificate) certificate chain.\n * This requires the user be logged in and online, otherwise try to use the cached development certificate.\n */\nasync function getExpoRootDevelopmentCodeSigningInfoAsync(\n exp: ExpoConfig\n): Promise<CodeSigningInfo | null> {\n const easProjectId = exp.extra?.eas?.projectId;\n // can't check for scope key validity since scope key is derived on the server from projectId and we may be offline.\n // we rely upon the client certificate check to validate the scope key\n if (!easProjectId) {\n debug(\n `WARN: Expo Application Services (EAS) is not configured for your project. Configuring EAS enables a more secure development experience amongst many other benefits. ${learnMore(\n 'https://docs.expo.dev/eas/'\n )}`\n );\n return null;\n }\n\n const developmentCodeSigningInfoFromFile = await DevelopmentCodeSigningInfoFile.readAsync(\n easProjectId\n );\n const validatedCodeSigningInfo = validateStoredDevelopmentExpoRootCertificateCodeSigningInfo(\n developmentCodeSigningInfoFromFile,\n easProjectId\n );\n\n // 1. If online, ensure logged in, generate key pair and CSR, fetch and cache certificate chain for projectId\n // (overwriting existing dev cert in case projectId changed or it has expired)\n if (!env.EXPO_OFFLINE) {\n try {\n return await fetchAndCacheNewDevelopmentCodeSigningInfoAsync(easProjectId);\n } catch (e: any) {\n if (validatedCodeSigningInfo) {\n Log.warn(\n 'There was an error fetching the Expo development certificate, falling back to cached certificate'\n );\n return validatedCodeSigningInfo;\n } else {\n // need to return null here and say a message\n throw e;\n }\n }\n }\n\n // 2. check for cached cert/private key matching projectId and scopeKey of project, if found and valid return private key and cert chain including expo-go cert\n if (validatedCodeSigningInfo) {\n return validatedCodeSigningInfo;\n }\n\n // 3. if offline, return null\n Log.warn('Offline and no cached development certificate found, unable to sign manifest');\n return null;\n}\n\n/**\n * Get the certificate configured for expo-updates for this project.\n */\nasync function getProjectCodeSigningCertificateAsync(\n exp: ExpoConfig,\n privateKeyPath: string | undefined,\n expectedKeyId: string,\n expectedAlg: string | null\n): Promise<CodeSigningInfo | null> {\n const codeSigningCertificatePath = exp.updates?.codeSigningCertificate;\n if (!codeSigningCertificatePath) {\n return null;\n }\n\n if (!privateKeyPath) {\n throw new CommandError(\n 'Must specify --private-key-path argument to sign development manifest for requested code signing key'\n );\n }\n\n const codeSigningMetadata = exp.updates?.codeSigningMetadata;\n if (!codeSigningMetadata) {\n throw new CommandError(\n 'Must specify \"codeSigningMetadata\" under the \"updates\" field of your app config file to use EAS code signing'\n );\n }\n\n const { alg, keyid } = codeSigningMetadata;\n if (!alg || !keyid) {\n throw new CommandError(\n 'Must specify \"keyid\" and \"alg\" in the \"codeSigningMetadata\" field under the \"updates\" field of your app config file to use EAS code signing'\n );\n }\n\n if (expectedKeyId !== keyid) {\n throw new CommandError(`keyid mismatch: client=${expectedKeyId}, project=${keyid}`);\n }\n\n if (expectedAlg && expectedAlg !== alg) {\n throw new CommandError(`\"alg\" field mismatch (client=${expectedAlg}, project=${alg})`);\n }\n\n const { privateKeyPEM, certificatePEM } =\n await getProjectPrivateKeyAndCertificateFromFilePathsAsync({\n codeSigningCertificatePath,\n privateKeyPath,\n });\n\n return {\n keyId: keyid,\n privateKey: privateKeyPEM,\n certificateForPrivateKey: certificatePEM,\n certificateChainForResponse: [],\n scopeKey: null,\n };\n}\n\nasync function readFileWithErrorAsync(path: string, errorMessage: string): Promise<string> {\n try {\n return await fs.readFile(path, 'utf8');\n } catch {\n throw new CommandError(errorMessage);\n }\n}\n\nasync function getProjectPrivateKeyAndCertificateFromFilePathsAsync({\n codeSigningCertificatePath,\n privateKeyPath,\n}: {\n codeSigningCertificatePath: string;\n privateKeyPath: string;\n}): Promise<{ privateKeyPEM: string; certificatePEM: string }> {\n const [codeSigningCertificatePEM, privateKeyPEM] = await Promise.all([\n readFileWithErrorAsync(\n codeSigningCertificatePath,\n `Code signing certificate cannot be read from path: ${codeSigningCertificatePath}`\n ),\n readFileWithErrorAsync(\n privateKeyPath,\n `Code signing private key cannot be read from path: ${privateKeyPath}`\n ),\n ]);\n\n const privateKey = convertPrivateKeyPEMToPrivateKey(privateKeyPEM);\n const certificate = convertCertificatePEMToCertificate(codeSigningCertificatePEM);\n validateSelfSignedCertificate(certificate, {\n publicKey: certificate.publicKey as PKI.rsa.PublicKey,\n privateKey,\n });\n\n return { privateKeyPEM, certificatePEM: codeSigningCertificatePEM };\n}\n\n/**\n * Validate that the cached code signing info is still valid for the current project and\n * that it hasn't expired. If invalid, return null.\n */\nfunction validateStoredDevelopmentExpoRootCertificateCodeSigningInfo(\n codeSigningInfo: StoredDevelopmentExpoRootCodeSigningInfo,\n easProjectId: string\n): CodeSigningInfo | null {\n if (codeSigningInfo.easProjectId !== easProjectId) {\n return null;\n }\n\n const {\n privateKey: privateKeyPEM,\n certificateChain: certificatePEMs,\n scopeKey,\n } = codeSigningInfo;\n if (!privateKeyPEM || !certificatePEMs) {\n return null;\n }\n\n const certificateChain = certificatePEMs.map((certificatePEM) =>\n convertCertificatePEMToCertificate(certificatePEM)\n );\n\n // TODO(wschurman): maybe move to @expo/code-signing-certificates\n const leafCertificate = certificateChain[0];\n const now = new Date();\n if (leafCertificate.validity.notBefore > now || leafCertificate.validity.notAfter < now) {\n return null;\n }\n\n // TODO(wschurman): maybe do more validation, like validation of projectID and scopeKey within eas certificate extension\n\n return {\n keyId: 'expo-go',\n certificateChainForResponse: certificatePEMs,\n certificateForPrivateKey: certificatePEMs[0],\n privateKey: privateKeyPEM,\n scopeKey,\n };\n}\n\nfunction actorCanGetProjectDevelopmentCertificate(actor: Actor, app: AppByIdQuery['app']['byId']) {\n const owningAccountId = app.ownerAccount.id;\n\n const owningAccountIsActorPrimaryAccount =\n actor.__typename === 'User' || actor.__typename === 'SSOUser'\n ? actor.primaryAccount.id === owningAccountId\n : false;\n const userHasPublishPermissionForOwningAccount = !!actor.accounts\n .find((account) => account.id === owningAccountId)\n ?.users?.find((userPermission) => userPermission.actor.id === actor.id)\n ?.permissions?.includes(Permission.Publish);\n return owningAccountIsActorPrimaryAccount || userHasPublishPermissionForOwningAccount;\n}\n\nasync function fetchAndCacheNewDevelopmentCodeSigningInfoAsync(\n easProjectId: string\n): Promise<CodeSigningInfo | null> {\n const actor = await ensureLoggedInAsync();\n const app = await AppQuery.byIdAsync(easProjectId);\n if (!actorCanGetProjectDevelopmentCertificate(actor, app)) {\n return null;\n }\n\n const keyPair = generateKeyPair();\n const keyPairPEM = convertKeyPairToPEM(keyPair);\n const csr = generateCSR(keyPair, `Development Certificate for ${easProjectId}`);\n const csrPEM = convertCSRToCSRPEM(csr);\n const [developmentSigningCertificate, expoGoIntermediateCertificate] = await Promise.all([\n getProjectDevelopmentCertificateAsync(easProjectId, csrPEM),\n getExpoGoIntermediateCertificateAsync(easProjectId),\n ]);\n\n await DevelopmentCodeSigningInfoFile.setAsync(easProjectId, {\n easProjectId,\n scopeKey: app.scopeKey,\n privateKey: keyPairPEM.privateKeyPEM,\n certificateChain: [developmentSigningCertificate, expoGoIntermediateCertificate],\n });\n\n return {\n keyId: 'expo-go',\n certificateChainForResponse: [developmentSigningCertificate, expoGoIntermediateCertificate],\n certificateForPrivateKey: developmentSigningCertificate,\n privateKey: keyPairPEM.privateKeyPEM,\n scopeKey: app.scopeKey,\n };\n}\n/**\n * Generate the `expo-signature` header for a manifest and code signing info.\n */\nexport function signManifestString(\n stringifiedManifest: string,\n codeSigningInfo: CodeSigningInfo\n): string {\n const privateKey = convertPrivateKeyPEMToPrivateKey(codeSigningInfo.privateKey);\n const certificate = convertCertificatePEMToCertificate(codeSigningInfo.certificateForPrivateKey);\n return signBufferRSASHA256AndVerify(\n privateKey,\n certificate,\n Buffer.from(stringifiedManifest, 'utf8')\n );\n}\n"],"names":["getDevelopmentCodeSigningDirectory","getCodeSigningInfoAsync","signManifestString","Log","debug","require","DEVELOPMENT_CODE_SIGNING_SETTINGS_FILE_NAME","path","join","getExpoHomeDirectory","getProjectDevelopmentCodeSigningInfoFile","defaults","getFile","easProjectId","filePath","JsonFile","readAsync","projectSettings","writeAsync","ensureDir","setAsync","json","mergeAsync","cantReadFileDefault","DevelopmentCodeSigningInfoFile","scopeKey","privateKey","certificateChain","exp","expectSignatureHeader","privateKeyPath","parsedExpectSignature","parseDictionary","CommandError","expectedKeyIdOuter","get","expectedKeyId","expectedAlg","expectedAlgOuter","expectedAlgTemp","getExpoRootDevelopmentCodeSigningInfoAsync","getProjectCodeSigningCertificateAsync","extra","eas","projectId","learnMore","developmentCodeSigningInfoFromFile","validatedCodeSigningInfo","validateStoredDevelopmentExpoRootCertificateCodeSigningInfo","env","EXPO_OFFLINE","fetchAndCacheNewDevelopmentCodeSigningInfoAsync","e","warn","codeSigningCertificatePath","updates","codeSigningCertificate","codeSigningMetadata","alg","keyid","privateKeyPEM","certificatePEM","getProjectPrivateKeyAndCertificateFromFilePathsAsync","keyId","certificateForPrivateKey","certificateChainForResponse","readFileWithErrorAsync","errorMessage","fs","readFile","codeSigningCertificatePEM","Promise","all","convertPrivateKeyPEMToPrivateKey","certificate","convertCertificatePEMToCertificate","validateSelfSignedCertificate","publicKey","codeSigningInfo","certificatePEMs","map","leafCertificate","now","Date","validity","notBefore","notAfter","actorCanGetProjectDevelopmentCertificate","actor","app","owningAccountId","ownerAccount","id","owningAccountIsActorPrimaryAccount","__typename","primaryAccount","userHasPublishPermissionForOwningAccount","accounts","find","account","users","userPermission","permissions","includes","Permission","Publish","ensureLoggedInAsync","AppQuery","byIdAsync","keyPair","generateKeyPair","keyPairPEM","convertKeyPairToPEM","csr","generateCSR","csrPEM","convertCSRToCSRPEM","developmentSigningCertificate","expoGoIntermediateCertificate","getProjectDevelopmentCertificateAsync","getExpoGoIntermediateCertificateAsync","stringifiedManifest","signBufferRSASHA256AndVerify","Buffer","from"],"mappings":"AAAA;;;;QA2DgBA,kCAAkC,GAAlCA,kCAAkC;QA8D5BC,uBAAuB,GAAvBA,uBAAuB;QAuS7BC,kBAAkB,GAAlBA,kBAAkB;;AAvZ3B,IAAA,wBAAiC,WAAjC,iCAAiC,CAAA;AAEH,IAAA,aAAiC,WAAjC,iCAAiC,CAAA;AACjC,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACvB,IAAA,GAAI,WAAJ,IAAI,CAAA;AAElB,IAAA,KAAM,kCAAN,MAAM,EAAA;AACqB,IAAA,kBAAoB,WAApB,oBAAoB,CAAA;AAE5C,IAAA,IAAO,WAAP,OAAO,CAAA;AACE,IAAA,OAAU,WAAV,UAAU,CAAA;AACe,IAAA,iCAAyC,WAAzC,yCAAyC,CAAA;AACzC,IAAA,iCAAyC,WAAzC,yCAAyC,CAAA;AACtE,IAAA,SAAiC,WAAjC,iCAAiC,CAAA;AACtB,IAAA,QAAqB,WAArB,qBAAqB,CAAA;AAEhB,IAAA,UAAsB,WAAtB,sBAAsB,CAAA;AACnDC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACW,IAAA,KAAe,WAAf,eAAe,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzC,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,AAAsB,AAAC;AA4BzE,MAAMC,2CAA2C,GAAG,0CAA0C,AAAC;AAExF,SAASN,kCAAkC,GAAW;IAC3D,OAAOO,KAAI,QAAA,CAACC,IAAI,CAACC,CAAAA,GAAAA,aAAoB,AAAE,CAAA,qBAAF,EAAE,EAAE,aAAa,CAAC,CAAC;CACzD;AAED,SAASC,wCAAwC,CAAuBC,QAAW,EAAE;IACnF,SAASC,OAAO,CAACC,YAAoB,EAAe;QAClD,MAAMC,QAAQ,GAAGP,KAAI,QAAA,CAACC,IAAI,CACxBR,kCAAkC,EAAE,EACpCa,YAAY,EACZP,2CAA2C,CAC5C,AAAC;QACF,OAAO,IAAIS,SAAQ,QAAA,CAAID,QAAQ,CAAC,CAAC;KAClC;IAED,eAAeE,SAAS,CAACH,YAAoB,EAAc;QACzD,IAAII,eAAe,AAAC;QACpB,IAAI;YACFA,eAAe,GAAG,MAAML,OAAO,CAACC,YAAY,CAAC,CAACG,SAAS,EAAE,CAAC;SAC3D,CAAC,OAAM;YACNC,eAAe,GAAG,MAAML,OAAO,CAACC,YAAY,CAAC,CAACK,UAAU,CAACP,QAAQ,EAAE;gBAAEQ,SAAS,EAAE,IAAI;aAAE,CAAC,CAAC;SACzF;QACD,sCAAsC;QACtC,OAAO;YAAE,GAAGR,QAAQ;YAAE,GAAGM,eAAe;SAAE,CAAC;KAC5C;IAED,eAAeG,QAAQ,CAACP,YAAoB,EAAEQ,IAAgB,EAAc;QAC1E,IAAI;YACF,OAAO,MAAMT,OAAO,CAACC,YAAY,CAAC,CAACS,UAAU,CAACD,IAAI,EAAE;gBAClDE,mBAAmB,EAAEZ,QAAQ;aAC9B,CAAC,CAAC;SACJ,CAAC,OAAM;YACN,OAAO,MAAMC,OAAO,CAACC,YAAY,CAAC,CAACK,UAAU,CAC3C;gBACE,GAAGP,QAAQ;gBACX,GAAGU,IAAI;aACR,EACD;gBAAEF,SAAS,EAAE,IAAI;aAAE,CACpB,CAAC;SACH;KACF;IAED,OAAO;QACLP,OAAO;QACPI,SAAS;QACTI,QAAQ;KACT,CAAC;CACH;AAEM,MAAMI,8BAA8B,GACzCd,wCAAwC,CAA2C;IACjFG,YAAY,EAAE,IAAI;IAClBY,QAAQ,EAAE,IAAI;IACdC,UAAU,EAAE,IAAI;IAChBC,gBAAgB,EAAE,IAAI;CACvB,CAAC,AAAC;QANQH,8BAA8B,GAA9BA,8BAA8B;AAcpC,eAAevB,uBAAuB,CAC3C2B,GAAe,EACfC,qBAAoC,EACpCC,cAAkC,EACD;IACjC,IAAI,CAACD,qBAAqB,EAAE;QAC1B,OAAO,IAAI,CAAC;KACb;IAED,IAAIE,qBAAqB,AAAY,AAAC;IACtC,IAAI;QACFA,qBAAqB,GAAGC,CAAAA,GAAAA,kBAAe,AAAuB,CAAA,gBAAvB,CAACH,qBAAqB,CAAC,CAAC;KAChE,CAAC,OAAM;QACN,MAAM,IAAII,OAAY,aAAA,CAAC,gDAAgD,CAAC,CAAC;KAC1E;IAED,MAAMC,kBAAkB,GAAGH,qBAAqB,CAACI,GAAG,CAAC,OAAO,CAAC,AAAC;IAC9D,IAAI,CAACD,kBAAkB,EAAE;QACvB,MAAM,IAAID,OAAY,aAAA,CAAC,mDAAmD,CAAC,CAAC;KAC7E;IAED,MAAMG,aAAa,GAAGF,kBAAkB,CAAC,CAAC,CAAC,AAAC;IAC5C,IAAI,OAAOE,aAAa,KAAK,QAAQ,EAAE;QACrC,MAAM,IAAIH,OAAY,aAAA,CACpB,CAAC,yDAAyD,EAAEG,aAAa,CAAC,CAAC,CAC5E,CAAC;KACH;IAED,IAAIC,WAAW,GAAkB,IAAI,AAAC;IACtC,MAAMC,gBAAgB,GAAGP,qBAAqB,CAACI,GAAG,CAAC,KAAK,CAAC,AAAC;IAC1D,IAAIG,gBAAgB,EAAE;QACpB,MAAMC,eAAe,GAAGD,gBAAgB,CAAC,CAAC,CAAC,AAAC;QAC5C,IAAI,OAAOC,eAAe,KAAK,QAAQ,EAAE;YACvC,MAAM,IAAIN,OAAY,aAAA,CAAC,uDAAuD,CAAC,CAAC;SACjF;QACDI,WAAW,GAAGE,eAAe,CAAC;KAC/B;IAED,IAAIH,aAAa,KAAK,WAAW,EAAE;QACjC,OAAO,MAAMI,0CAA0C,CAACZ,GAAG,CAAC,CAAC;KAC9D,MAAM,IAAIQ,aAAa,KAAK,SAAS,EAAE;QACtC,MAAM,IAAIH,OAAY,aAAA,CACpB,4EAA4E,CAC7E,CAAC;KACH,MAAM;QACL,OAAO,MAAMQ,qCAAqC,CAChDb,GAAG,EACHE,cAAc,EACdM,aAAa,EACbC,WAAW,CACZ,CAAC;KACH;CACF;AAED;;;GAGG,CACH,eAAeG,0CAA0C,CACvDZ,GAAe,EACkB;QACZA,GAAS;IAA9B,MAAMf,YAAY,GAAGe,CAAAA,GAAS,GAATA,GAAG,CAACc,KAAK,SAAK,GAAdd,KAAAA,CAAc,GAAdA,QAAAA,GAAS,CAAEe,GAAG,SAAA,GAAdf,KAAAA,CAAc,QAAEgB,SAAS,AAAX,AAAY;IAC/C,oHAAoH;IACpH,sEAAsE;IACtE,IAAI,CAAC/B,YAAY,EAAE;QACjBT,KAAK,CACH,CAAC,oKAAoK,EAAEyC,CAAAA,GAAAA,KAAS,AAE/K,CAAA,UAF+K,CAC9K,4BAA4B,CAC7B,CAAC,CAAC,CACJ,CAAC;QACF,OAAO,IAAI,CAAC;KACb;IAED,MAAMC,kCAAkC,GAAG,MAAMtB,8BAA8B,CAACR,SAAS,CACvFH,YAAY,CACb,AAAC;IACF,MAAMkC,wBAAwB,GAAGC,2DAA2D,CAC1FF,kCAAkC,EAClCjC,YAAY,CACb,AAAC;IAEF,6GAA6G;IAC7G,iFAAiF;IACjF,IAAI,CAACoC,IAAG,IAAA,CAACC,YAAY,EAAE;QACrB,IAAI;YACF,OAAO,MAAMC,+CAA+C,CAACtC,YAAY,CAAC,CAAC;SAC5E,CAAC,OAAOuC,CAAC,EAAO;YACf,IAAIL,wBAAwB,EAAE;gBAC5B5C,GAAG,CAACkD,IAAI,CACN,kGAAkG,CACnG,CAAC;gBACF,OAAON,wBAAwB,CAAC;aACjC,MAAM;gBACL,6CAA6C;gBAC7C,MAAMK,CAAC,CAAC;aACT;SACF;KACF;IAED,+JAA+J;IAC/J,IAAIL,wBAAwB,EAAE;QAC5B,OAAOA,wBAAwB,CAAC;KACjC;IAED,6BAA6B;IAC7B5C,GAAG,CAACkD,IAAI,CAAC,8EAA8E,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC;CACb;AAED;;GAEG,CACH,eAAeZ,qCAAqC,CAClDb,GAAe,EACfE,cAAkC,EAClCM,aAAqB,EACrBC,WAA0B,EACO;QACET,GAAW,EAWlBA,IAAW;IAXvC,MAAM0B,0BAA0B,GAAG1B,CAAAA,GAAW,GAAXA,GAAG,CAAC2B,OAAO,SAAwB,GAAnC3B,KAAAA,CAAmC,GAAnCA,GAAW,CAAE4B,sBAAsB,AAAC;IACvE,IAAI,CAACF,0BAA0B,EAAE;QAC/B,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAACxB,cAAc,EAAE;QACnB,MAAM,IAAIG,OAAY,aAAA,CACpB,sGAAsG,CACvG,CAAC;KACH;IAED,MAAMwB,mBAAmB,GAAG7B,CAAAA,IAAW,GAAXA,GAAG,CAAC2B,OAAO,SAAqB,GAAhC3B,KAAAA,CAAgC,GAAhCA,IAAW,CAAE6B,mBAAmB,AAAC;IAC7D,IAAI,CAACA,mBAAmB,EAAE;QACxB,MAAM,IAAIxB,OAAY,aAAA,CACpB,8GAA8G,CAC/G,CAAC;KACH;IAED,MAAM,EAAEyB,GAAG,CAAA,EAAEC,KAAK,CAAA,EAAE,GAAGF,mBAAmB,AAAC;IAC3C,IAAI,CAACC,GAAG,IAAI,CAACC,KAAK,EAAE;QAClB,MAAM,IAAI1B,OAAY,aAAA,CACpB,6IAA6I,CAC9I,CAAC;KACH;IAED,IAAIG,aAAa,KAAKuB,KAAK,EAAE;QAC3B,MAAM,IAAI1B,OAAY,aAAA,CAAC,CAAC,uBAAuB,EAAEG,aAAa,CAAC,UAAU,EAAEuB,KAAK,CAAC,CAAC,CAAC,CAAC;KACrF;IAED,IAAItB,WAAW,IAAIA,WAAW,KAAKqB,GAAG,EAAE;QACtC,MAAM,IAAIzB,OAAY,aAAA,CAAC,CAAC,6BAA6B,EAAEI,WAAW,CAAC,UAAU,EAAEqB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACxF;IAED,MAAM,EAAEE,aAAa,CAAA,EAAEC,cAAc,CAAA,EAAE,GACrC,MAAMC,oDAAoD,CAAC;QACzDR,0BAA0B;QAC1BxB,cAAc;KACf,CAAC,AAAC;IAEL,OAAO;QACLiC,KAAK,EAAEJ,KAAK;QACZjC,UAAU,EAAEkC,aAAa;QACzBI,wBAAwB,EAAEH,cAAc;QACxCI,2BAA2B,EAAE,EAAE;QAC/BxC,QAAQ,EAAE,IAAI;KACf,CAAC;CACH;AAED,eAAeyC,sBAAsB,CAAC3D,IAAY,EAAE4D,YAAoB,EAAmB;IACzF,IAAI;QACF,OAAO,MAAMC,GAAE,SAAA,CAACC,QAAQ,CAAC9D,IAAI,EAAE,MAAM,CAAC,CAAC;KACxC,CAAC,OAAM;QACN,MAAM,IAAI0B,OAAY,aAAA,CAACkC,YAAY,CAAC,CAAC;KACtC;CACF;AAED,eAAeL,oDAAoD,CAAC,EAClER,0BAA0B,CAAA,EAC1BxB,cAAc,CAAA,EAIf,EAA8D;IAC7D,MAAM,CAACwC,yBAAyB,EAAEV,aAAa,CAAC,GAAG,MAAMW,OAAO,CAACC,GAAG,CAAC;QACnEN,sBAAsB,CACpBZ,0BAA0B,EAC1B,CAAC,mDAAmD,EAAEA,0BAA0B,CAAC,CAAC,CACnF;QACDY,sBAAsB,CACpBpC,cAAc,EACd,CAAC,mDAAmD,EAAEA,cAAc,CAAC,CAAC,CACvE;KACF,CAAC,AAAC;IAEH,MAAMJ,UAAU,GAAG+C,CAAAA,GAAAA,wBAAgC,AAAe,CAAA,iCAAf,CAACb,aAAa,CAAC,AAAC;IACnE,MAAMc,WAAW,GAAGC,CAAAA,GAAAA,wBAAkC,AAA2B,CAAA,mCAA3B,CAACL,yBAAyB,CAAC,AAAC;IAClFM,CAAAA,GAAAA,wBAA6B,AAG3B,CAAA,8BAH2B,CAACF,WAAW,EAAE;QACzCG,SAAS,EAAEH,WAAW,CAACG,SAAS;QAChCnD,UAAU;KACX,CAAC,CAAC;IAEH,OAAO;QAAEkC,aAAa;QAAEC,cAAc,EAAES,yBAAyB;KAAE,CAAC;CACrE;AAED;;;GAGG,CACH,SAAStB,2DAA2D,CAClE8B,eAAyD,EACzDjE,YAAoB,EACI;IACxB,IAAIiE,eAAe,CAACjE,YAAY,KAAKA,YAAY,EAAE;QACjD,OAAO,IAAI,CAAC;KACb;IAED,MAAM,EACJa,UAAU,EAAEkC,aAAa,CAAA,EACzBjC,gBAAgB,EAAEoD,eAAe,CAAA,EACjCtD,QAAQ,CAAA,IACT,GAAGqD,eAAe,AAAC;IACpB,IAAI,CAAClB,aAAa,IAAI,CAACmB,eAAe,EAAE;QACtC,OAAO,IAAI,CAAC;KACb;IAED,MAAMpD,gBAAgB,GAAGoD,eAAe,CAACC,GAAG,CAAC,CAACnB,cAAc,GAC1Dc,CAAAA,GAAAA,wBAAkC,AAAgB,CAAA,mCAAhB,CAACd,cAAc,CAAC;IAAA,CACnD,AAAC;IAEF,iEAAiE;IACjE,MAAMoB,eAAe,GAAGtD,gBAAgB,CAAC,CAAC,CAAC,AAAC;IAC5C,MAAMuD,GAAG,GAAG,IAAIC,IAAI,EAAE,AAAC;IACvB,IAAIF,eAAe,CAACG,QAAQ,CAACC,SAAS,GAAGH,GAAG,IAAID,eAAe,CAACG,QAAQ,CAACE,QAAQ,GAAGJ,GAAG,EAAE;QACvF,OAAO,IAAI,CAAC;KACb;IAED,wHAAwH;IAExH,OAAO;QACLnB,KAAK,EAAE,SAAS;QAChBE,2BAA2B,EAAEc,eAAe;QAC5Cf,wBAAwB,EAAEe,eAAe,CAAC,CAAC,CAAC;QAC5CrD,UAAU,EAAEkC,aAAa;QACzBnC,QAAQ;KACT,CAAC;CACH;AAED,SAAS8D,wCAAwC,CAACC,KAAY,EAAEC,GAAgC,EAAE;QAO7CD,GACC;IAPpD,MAAME,eAAe,GAAGD,GAAG,CAACE,YAAY,CAACC,EAAE,AAAC;IAE5C,MAAMC,kCAAkC,GACtCL,KAAK,CAACM,UAAU,KAAK,MAAM,IAAIN,KAAK,CAACM,UAAU,KAAK,SAAS,GACzDN,KAAK,CAACO,cAAc,CAACH,EAAE,KAAKF,eAAe,GAC3C,KAAK,AAAC;IACZ,MAAMM,wCAAwC,GAAG,CAAC,EAACR,QAAAA,CAAAA,GACC,GADDA,KAAK,CAACS,QAAQ,CAC9DC,IAAI,CAAC,CAACC,OAAO,GAAKA,OAAO,CAACP,EAAE,KAAKF,eAAe;IAAA,CAAC,SAC3C,GAF0CF,KAAAA,CAE1C,GAF0CA,QAAAA,GACC,CAChDY,KAAK,SAAA,GAF0CZ,KAAAA,CAE1C,GAF0CA,KAExCU,IAAI,CAAC,CAACG,cAAc,GAAKA,cAAc,CAACb,KAAK,CAACI,EAAE,KAAKJ,KAAK,CAACI,EAAE;IAAA,CAAC,SAC1D,GAHoCJ,KAAAA,CAGpC,GAHoCA,aAG/Cc,WAAW,SAAA,GAHoCd,KAAAA,CAGpC,GAHoCA,KAGlCe,QAAQ,CAACC,UAAU,WAAA,CAACC,OAAO,CAAC,CAAA,AAAC;IAC9C,OAAOZ,kCAAkC,IAAIG,wCAAwC,CAAC;CACvF;AAED,eAAe7C,+CAA+C,CAC5DtC,YAAoB,EACa;IACjC,MAAM2E,KAAK,GAAG,MAAMkB,CAAAA,GAAAA,QAAmB,AAAE,CAAA,oBAAF,EAAE,AAAC;IAC1C,MAAMjB,GAAG,GAAG,MAAMkB,SAAQ,SAAA,CAACC,SAAS,CAAC/F,YAAY,CAAC,AAAC;IACnD,IAAI,CAAC0E,wCAAwC,CAACC,KAAK,EAAEC,GAAG,CAAC,EAAE;QACzD,OAAO,IAAI,CAAC;KACb;IAED,MAAMoB,OAAO,GAAGC,CAAAA,GAAAA,wBAAe,AAAE,CAAA,gBAAF,EAAE,AAAC;IAClC,MAAMC,UAAU,GAAGC,CAAAA,GAAAA,wBAAmB,AAAS,CAAA,oBAAT,CAACH,OAAO,CAAC,AAAC;IAChD,MAAMI,GAAG,GAAGC,CAAAA,GAAAA,wBAAW,AAAwD,CAAA,YAAxD,CAACL,OAAO,EAAE,CAAC,4BAA4B,EAAEhG,YAAY,CAAC,CAAC,CAAC,AAAC;IAChF,MAAMsG,MAAM,GAAGC,CAAAA,GAAAA,wBAAkB,AAAK,CAAA,mBAAL,CAACH,GAAG,CAAC,AAAC;IACvC,MAAM,CAACI,6BAA6B,EAAEC,6BAA6B,CAAC,GAAG,MAAM/C,OAAO,CAACC,GAAG,CAAC;QACvF+C,CAAAA,GAAAA,iCAAqC,AAAsB,CAAA,sCAAtB,CAAC1G,YAAY,EAAEsG,MAAM,CAAC;QAC3DK,CAAAA,GAAAA,iCAAqC,AAAc,CAAA,sCAAd,CAAC3G,YAAY,CAAC;KACpD,CAAC,AAAC;IAEH,MAAMW,8BAA8B,CAACJ,QAAQ,CAACP,YAAY,EAAE;QAC1DA,YAAY;QACZY,QAAQ,EAAEgE,GAAG,CAAChE,QAAQ;QACtBC,UAAU,EAAEqF,UAAU,CAACnD,aAAa;QACpCjC,gBAAgB,EAAE;YAAC0F,6BAA6B;YAAEC,6BAA6B;SAAC;KACjF,CAAC,CAAC;IAEH,OAAO;QACLvD,KAAK,EAAE,SAAS;QAChBE,2BAA2B,EAAE;YAACoD,6BAA6B;YAAEC,6BAA6B;SAAC;QAC3FtD,wBAAwB,EAAEqD,6BAA6B;QACvD3F,UAAU,EAAEqF,UAAU,CAACnD,aAAa;QACpCnC,QAAQ,EAAEgE,GAAG,CAAChE,QAAQ;KACvB,CAAC;CACH;AAIM,SAASvB,kBAAkB,CAChCuH,mBAA2B,EAC3B3C,eAAgC,EACxB;IACR,MAAMpD,UAAU,GAAG+C,CAAAA,GAAAA,wBAAgC,AAA4B,CAAA,iCAA5B,CAACK,eAAe,CAACpD,UAAU,CAAC,AAAC;IAChF,MAAMgD,WAAW,GAAGC,CAAAA,GAAAA,wBAAkC,AAA0C,CAAA,mCAA1C,CAACG,eAAe,CAACd,wBAAwB,CAAC,AAAC;IACjG,OAAO0D,CAAAA,GAAAA,wBAA4B,AAIlC,CAAA,6BAJkC,CACjChG,UAAU,EACVgD,WAAW,EACXiD,MAAM,CAACC,IAAI,CAACH,mBAAmB,EAAE,MAAM,CAAC,CACzC,CAAC;CACH"}
@@ -8,10 +8,10 @@ var _path = _interopRequireDefault(require("path"));
8
8
  var _stream = require("stream");
9
9
  var _tempy = _interopRequireDefault(require("tempy"));
10
10
  var _util = require("util");
11
- var _client = require("../api/rest/client");
12
11
  var _dir = require("./dir");
13
12
  var _errors = require("./errors");
14
13
  var _tar = require("./tar");
14
+ var _client = require("../api/rest/client");
15
15
  function _interopRequireDefault(obj) {
16
16
  return obj && obj.__esModule ? obj : {
17
17
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/downloadAppAsync.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Stream } from 'stream';\nimport temporary from 'tempy';\nimport { promisify } from 'util';\n\nimport { createCachedFetch, fetchAsync } from '../api/rest/client';\nimport { FetchLike, ProgressCallback } from '../api/rest/client.types';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { extractAsync } from './tar';\n\nconst debug = require('debug')('expo:utils:downloadAppAsync') as typeof console.log;\n\nconst TIMER_DURATION = 30000;\n\nconst pipeline = promisify(Stream.pipeline);\n\nasync function downloadAsync({\n url,\n outputPath,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}) {\n let fetchInstance: FetchLike = fetchAsync;\n if (cacheDirectory) {\n // Reconstruct the cached fetch since caching could be disabled.\n fetchInstance = createCachedFetch({\n // We'll use a 1 week cache for versions so older values get flushed out eventually.\n ttl: 1000 * 60 * 60 * 24 * 7,\n // Users can also nuke their `~/.expo` directory to clear the cache.\n cacheDirectory,\n });\n }\n\n debug(`Downloading ${url} to ${outputPath}`);\n const res = await fetchInstance(url, {\n timeout: TIMER_DURATION,\n onProgress,\n });\n if (!res.ok) {\n throw new CommandError(\n 'FILE_DOWNLOAD',\n `Unexpected response: ${res.statusText}. From url: ${url}`\n );\n }\n return pipeline(res.body, fs.createWriteStream(outputPath));\n}\n\nexport async function downloadAppAsync({\n url,\n outputPath,\n extract = false,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n extract?: boolean;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}): Promise<void> {\n if (extract) {\n // For iOS we download the ipa to a file then pass that file into the extractor.\n // In the future we should just pipe the `res.body -> tar.extract` directly.\n // I tried this and it created some weird errors where observing the data stream\n // would corrupt the file causing tar to fail with `TAR_BAD_ARCHIVE`.\n const tmpPath = temporary.file({ name: path.basename(outputPath) });\n await downloadAsync({ url, outputPath: tmpPath, cacheDirectory, onProgress });\n debug(`Extracting ${tmpPath} to ${outputPath}`);\n await ensureDirectoryAsync(outputPath);\n await extractAsync(tmpPath, outputPath);\n } else {\n await ensureDirectoryAsync(path.dirname(outputPath));\n await downloadAsync({ url, outputPath, cacheDirectory, onProgress });\n }\n}\n"],"names":["downloadAppAsync","debug","require","TIMER_DURATION","pipeline","promisify","Stream","downloadAsync","url","outputPath","cacheDirectory","onProgress","fetchInstance","fetchAsync","createCachedFetch","ttl","res","timeout","ok","CommandError","statusText","body","fs","createWriteStream","extract","tmpPath","temporary","file","name","path","basename","ensureDirectoryAsync","extractAsync","dirname"],"mappings":"AAAA;;;;QAsDsBA,gBAAgB,GAAhBA,gBAAgB;AAtDvB,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACF,IAAA,KAAM,kCAAN,MAAM,EAAA;AACA,IAAA,OAAQ,WAAR,QAAQ,CAAA;AACT,IAAA,MAAO,kCAAP,OAAO,EAAA;AACH,IAAA,KAAM,WAAN,MAAM,CAAA;AAEc,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AAE7B,IAAA,IAAO,WAAP,OAAO,CAAA;AACf,IAAA,OAAU,WAAV,UAAU,CAAA;AACV,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;AAEpC,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,6BAA6B,CAAC,AAAsB,AAAC;AAEpF,MAAMC,cAAc,GAAG,KAAK,AAAC;AAE7B,MAAMC,QAAQ,GAAGC,CAAAA,GAAAA,KAAS,AAAiB,CAAA,UAAjB,CAACC,OAAM,OAAA,CAACF,QAAQ,CAAC,AAAC;AAE5C,eAAeG,aAAa,CAAC,EAC3BC,GAAG,CAAA,EACHC,UAAU,CAAA,EACVC,cAAc,CAAA,EACdC,UAAU,CAAA,EAMX,EAAE;IACD,IAAIC,aAAa,GAAcC,OAAU,WAAA,AAAC;IAC1C,IAAIH,cAAc,EAAE;QAClB,gEAAgE;QAChEE,aAAa,GAAGE,CAAAA,GAAAA,OAAiB,AAK/B,CAAA,kBAL+B,CAAC;YAChC,oFAAoF;YACpFC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAC5B,oEAAoE;YACpEL,cAAc;SACf,CAAC,CAAC;KACJ;IAEDT,KAAK,CAAC,CAAC,YAAY,EAAEO,GAAG,CAAC,IAAI,EAAEC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAMO,GAAG,GAAG,MAAMJ,aAAa,CAACJ,GAAG,EAAE;QACnCS,OAAO,EAAEd,cAAc;QACvBQ,UAAU;KACX,CAAC,AAAC;IACH,IAAI,CAACK,GAAG,CAACE,EAAE,EAAE;QACX,MAAM,IAAIC,OAAY,aAAA,CACpB,eAAe,EACf,CAAC,qBAAqB,EAAEH,GAAG,CAACI,UAAU,CAAC,YAAY,EAAEZ,GAAG,CAAC,CAAC,CAC3D,CAAC;KACH;IACD,OAAOJ,QAAQ,CAACY,GAAG,CAACK,IAAI,EAAEC,GAAE,QAAA,CAACC,iBAAiB,CAACd,UAAU,CAAC,CAAC,CAAC;CAC7D;AAEM,eAAeT,gBAAgB,CAAC,EACrCQ,GAAG,CAAA,EACHC,UAAU,CAAA,EACVe,OAAO,EAAG,KAAK,CAAA,EACfd,cAAc,CAAA,EACdC,UAAU,CAAA,EAOX,EAAiB;IAChB,IAAIa,OAAO,EAAE;QACX,gFAAgF;QAChF,4EAA4E;QAC5E,gFAAgF;QAChF,qEAAqE;QACrE,MAAMC,OAAO,GAAGC,MAAS,QAAA,CAACC,IAAI,CAAC;YAAEC,IAAI,EAAEC,KAAI,QAAA,CAACC,QAAQ,CAACrB,UAAU,CAAC;SAAE,CAAC,AAAC;QACpE,MAAMF,aAAa,CAAC;YAAEC,GAAG;YAAEC,UAAU,EAAEgB,OAAO;YAAEf,cAAc;YAAEC,UAAU;SAAE,CAAC,CAAC;QAC9EV,KAAK,CAAC,CAAC,WAAW,EAAEwB,OAAO,CAAC,IAAI,EAAEhB,UAAU,CAAC,CAAC,CAAC,CAAC;QAChD,MAAMsB,CAAAA,GAAAA,IAAoB,AAAY,CAAA,qBAAZ,CAACtB,UAAU,CAAC,CAAC;QACvC,MAAMuB,CAAAA,GAAAA,IAAY,AAAqB,CAAA,aAArB,CAACP,OAAO,EAAEhB,UAAU,CAAC,CAAC;KACzC,MAAM;QACL,MAAMsB,CAAAA,GAAAA,IAAoB,AAA0B,CAAA,qBAA1B,CAACF,KAAI,QAAA,CAACI,OAAO,CAACxB,UAAU,CAAC,CAAC,CAAC;QACrD,MAAMF,aAAa,CAAC;YAAEC,GAAG;YAAEC,UAAU;YAAEC,cAAc;YAAEC,UAAU;SAAE,CAAC,CAAC;KACtE;CACF"}
1
+ {"version":3,"sources":["../../../src/utils/downloadAppAsync.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Stream } from 'stream';\nimport temporary from 'tempy';\nimport { promisify } from 'util';\n\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { extractAsync } from './tar';\nimport { createCachedFetch, fetchAsync } from '../api/rest/client';\nimport { FetchLike, ProgressCallback } from '../api/rest/client.types';\n\nconst debug = require('debug')('expo:utils:downloadAppAsync') as typeof console.log;\n\nconst TIMER_DURATION = 30000;\n\nconst pipeline = promisify(Stream.pipeline);\n\nasync function downloadAsync({\n url,\n outputPath,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}) {\n let fetchInstance: FetchLike = fetchAsync;\n if (cacheDirectory) {\n // Reconstruct the cached fetch since caching could be disabled.\n fetchInstance = createCachedFetch({\n // We'll use a 1 week cache for versions so older values get flushed out eventually.\n ttl: 1000 * 60 * 60 * 24 * 7,\n // Users can also nuke their `~/.expo` directory to clear the cache.\n cacheDirectory,\n });\n }\n\n debug(`Downloading ${url} to ${outputPath}`);\n const res = await fetchInstance(url, {\n timeout: TIMER_DURATION,\n onProgress,\n });\n if (!res.ok) {\n throw new CommandError(\n 'FILE_DOWNLOAD',\n `Unexpected response: ${res.statusText}. From url: ${url}`\n );\n }\n return pipeline(res.body, fs.createWriteStream(outputPath));\n}\n\nexport async function downloadAppAsync({\n url,\n outputPath,\n extract = false,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n extract?: boolean;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}): Promise<void> {\n if (extract) {\n // For iOS we download the ipa to a file then pass that file into the extractor.\n // In the future we should just pipe the `res.body -> tar.extract` directly.\n // I tried this and it created some weird errors where observing the data stream\n // would corrupt the file causing tar to fail with `TAR_BAD_ARCHIVE`.\n const tmpPath = temporary.file({ name: path.basename(outputPath) });\n await downloadAsync({ url, outputPath: tmpPath, cacheDirectory, onProgress });\n debug(`Extracting ${tmpPath} to ${outputPath}`);\n await ensureDirectoryAsync(outputPath);\n await extractAsync(tmpPath, outputPath);\n } else {\n await ensureDirectoryAsync(path.dirname(outputPath));\n await downloadAsync({ url, outputPath, cacheDirectory, onProgress });\n }\n}\n"],"names":["downloadAppAsync","debug","require","TIMER_DURATION","pipeline","promisify","Stream","downloadAsync","url","outputPath","cacheDirectory","onProgress","fetchInstance","fetchAsync","createCachedFetch","ttl","res","timeout","ok","CommandError","statusText","body","fs","createWriteStream","extract","tmpPath","temporary","file","name","path","basename","ensureDirectoryAsync","extractAsync","dirname"],"mappings":"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"}
@@ -7,13 +7,13 @@ exports.downloadExpoGoAsync = downloadExpoGoAsync;
7
7
  var _getUserState = require("@expo/config/build/getUserState");
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
  var _semver = require("semver");
10
- var _getVersions = require("../api/getVersions");
11
- var _log = require("../log");
12
10
  var _downloadAppAsync = require("./downloadAppAsync");
13
11
  var _errors = require("./errors");
14
12
  var _ora = require("./ora");
15
13
  var _profile = require("./profile");
16
14
  var _progress = require("./progress");
15
+ var _getVersions = require("../api/getVersions");
16
+ var _log = require("../log");
17
17
  function _interopRequireDefault(obj) {
18
18
  return obj && obj.__esModule ? obj : {
19
19
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/downloadExpoGoAsync.ts"],"sourcesContent":["import { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport path from 'path';\nimport ProgressBar from 'progress';\nimport { gt } from 'semver';\n\nimport { getVersionsAsync, SDKVersion } from '../api/getVersions';\nimport { Log } from '../log';\nimport { downloadAppAsync } from './downloadAppAsync';\nimport { CommandError } from './errors';\nimport { ora } from './ora';\nimport { profile } from './profile';\nimport { createProgressBar } from './progress';\n\nconst debug = require('debug')('expo:utils:downloadExpoGo') as typeof console.log;\n\nconst platformSettings: Record<\n string,\n {\n shouldExtractResults: boolean;\n versionsKey: keyof SDKVersion;\n getFilePath: (filename: string) => string;\n }\n> = {\n ios: {\n versionsKey: 'iosClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'ios-simulator-app-cache', `${filename}.app`),\n shouldExtractResults: true,\n },\n android: {\n versionsKey: 'androidClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'android-apk-cache', `${filename}.apk`),\n shouldExtractResults: false,\n },\n};\n\n/**\n * @internal exposed for testing.\n * @returns the matching `SDKVersion` object from the Expo API.\n */\nexport async function getExpoGoVersionEntryAsync(sdkVersion: string): Promise<SDKVersion> {\n const { sdkVersions: versions } = await getVersionsAsync();\n let version: SDKVersion;\n\n if (sdkVersion.toUpperCase() === 'UNVERSIONED') {\n // find the latest version\n const latestVersionKey = Object.keys(versions).reduce((a, b) => {\n if (gt(b, a)) {\n return b;\n }\n return a;\n }, '0.0.0');\n\n Log.warn(\n `Downloading the latest Expo Go client (${latestVersionKey}). This will not fully conform to UNVERSIONED.`\n );\n version = versions[latestVersionKey];\n } else {\n version = versions[sdkVersion];\n }\n\n if (!version) {\n throw new CommandError(`Unable to find a version of Expo Go for SDK ${sdkVersion}`);\n }\n return version;\n}\n\n/** Download the Expo Go app from the Expo servers (if only it was this easy for every app). */\nexport async function downloadExpoGoAsync(\n platform: keyof typeof platformSettings,\n {\n url,\n sdkVersion,\n }: {\n url?: string;\n sdkVersion?: string;\n }\n): Promise<string> {\n const { getFilePath, versionsKey, shouldExtractResults } = platformSettings[platform];\n\n const spinner = ora({ text: 'Fetching Expo Go', color: 'white' }).start();\n\n let bar: ProgressBar | null = null;\n\n try {\n if (!url) {\n if (!sdkVersion) {\n throw new CommandError(\n `Unable to determine which Expo Go version to install (platform: ${platform})`\n );\n }\n\n const version = await getExpoGoVersionEntryAsync(sdkVersion);\n\n debug(`Installing Expo Go version for SDK ${sdkVersion} at URL: ${version[versionsKey]}`);\n url = version[versionsKey] as string;\n }\n } catch (error) {\n spinner.fail();\n throw error;\n }\n\n const filename = path.parse(url).name;\n\n try {\n const outputPath = getFilePath(filename);\n debug(`Downloading Expo Go from \"${url}\" to \"${outputPath}\".`);\n debug(\n `The requested copy of Expo Go might already be cached in: \"${getExpoHomeDirectory()}\". You can disable the cache with EXPO_NO_CACHE=1`\n );\n await profile(downloadAppAsync)({\n url,\n // Save all encrypted cache data to `~/.expo/expo-go`\n cacheDirectory: 'expo-go',\n outputPath,\n extract: shouldExtractResults,\n onProgress({ progress, total }) {\n if (progress && total) {\n if (!bar) {\n if (spinner.isSpinning) {\n spinner.stop();\n }\n bar = createProgressBar('Downloading the Expo Go app [:bar] :percent :etas', {\n width: 64,\n total: 100,\n // clear: true,\n complete: '=',\n incomplete: ' ',\n });\n } else {\n bar!.update(progress, total);\n }\n }\n },\n });\n return outputPath;\n } finally {\n spinner.stop();\n // @ts-expect-error\n bar?.terminate();\n }\n}\n"],"names":["getExpoGoVersionEntryAsync","downloadExpoGoAsync","debug","require","platformSettings","ios","versionsKey","getFilePath","filename","path","join","getExpoHomeDirectory","shouldExtractResults","android","sdkVersion","sdkVersions","versions","getVersionsAsync","version","toUpperCase","latestVersionKey","Object","keys","reduce","a","b","gt","Log","warn","CommandError","platform","url","spinner","ora","text","color","start","bar","error","fail","parse","name","outputPath","profile","downloadAppAsync","cacheDirectory","extract","onProgress","progress","total","isSpinning","stop","createProgressBar","width","complete","incomplete","update","terminate"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/downloadExpoGoAsync.ts"],"sourcesContent":["import { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport path from 'path';\nimport ProgressBar from 'progress';\nimport { gt } from 'semver';\n\nimport { downloadAppAsync } from './downloadAppAsync';\nimport { CommandError } from './errors';\nimport { ora } from './ora';\nimport { profile } from './profile';\nimport { createProgressBar } from './progress';\nimport { getVersionsAsync, SDKVersion } from '../api/getVersions';\nimport { Log } from '../log';\n\nconst debug = require('debug')('expo:utils:downloadExpoGo') as typeof console.log;\n\nconst platformSettings: Record<\n string,\n {\n shouldExtractResults: boolean;\n versionsKey: keyof SDKVersion;\n getFilePath: (filename: string) => string;\n }\n> = {\n ios: {\n versionsKey: 'iosClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'ios-simulator-app-cache', `${filename}.app`),\n shouldExtractResults: true,\n },\n android: {\n versionsKey: 'androidClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'android-apk-cache', `${filename}.apk`),\n shouldExtractResults: false,\n },\n};\n\n/**\n * @internal exposed for testing.\n * @returns the matching `SDKVersion` object from the Expo API.\n */\nexport async function getExpoGoVersionEntryAsync(sdkVersion: string): Promise<SDKVersion> {\n const { sdkVersions: versions } = await getVersionsAsync();\n let version: SDKVersion;\n\n if (sdkVersion.toUpperCase() === 'UNVERSIONED') {\n // find the latest version\n const latestVersionKey = Object.keys(versions).reduce((a, b) => {\n if (gt(b, a)) {\n return b;\n }\n return a;\n }, '0.0.0');\n\n Log.warn(\n `Downloading the latest Expo Go client (${latestVersionKey}). This will not fully conform to UNVERSIONED.`\n );\n version = versions[latestVersionKey];\n } else {\n version = versions[sdkVersion];\n }\n\n if (!version) {\n throw new CommandError(`Unable to find a version of Expo Go for SDK ${sdkVersion}`);\n }\n return version;\n}\n\n/** Download the Expo Go app from the Expo servers (if only it was this easy for every app). */\nexport async function downloadExpoGoAsync(\n platform: keyof typeof platformSettings,\n {\n url,\n sdkVersion,\n }: {\n url?: string;\n sdkVersion?: string;\n }\n): Promise<string> {\n const { getFilePath, versionsKey, shouldExtractResults } = platformSettings[platform];\n\n const spinner = ora({ text: 'Fetching Expo Go', color: 'white' }).start();\n\n let bar: ProgressBar | null = null;\n\n try {\n if (!url) {\n if (!sdkVersion) {\n throw new CommandError(\n `Unable to determine which Expo Go version to install (platform: ${platform})`\n );\n }\n\n const version = await getExpoGoVersionEntryAsync(sdkVersion);\n\n debug(`Installing Expo Go version for SDK ${sdkVersion} at URL: ${version[versionsKey]}`);\n url = version[versionsKey] as string;\n }\n } catch (error) {\n spinner.fail();\n throw error;\n }\n\n const filename = path.parse(url).name;\n\n try {\n const outputPath = getFilePath(filename);\n debug(`Downloading Expo Go from \"${url}\" to \"${outputPath}\".`);\n debug(\n `The requested copy of Expo Go might already be cached in: \"${getExpoHomeDirectory()}\". You can disable the cache with EXPO_NO_CACHE=1`\n );\n await profile(downloadAppAsync)({\n url,\n // Save all encrypted cache data to `~/.expo/expo-go`\n cacheDirectory: 'expo-go',\n outputPath,\n extract: shouldExtractResults,\n onProgress({ progress, total }) {\n if (progress && total) {\n if (!bar) {\n if (spinner.isSpinning) {\n spinner.stop();\n }\n bar = createProgressBar('Downloading the Expo Go app [:bar] :percent :etas', {\n width: 64,\n total: 100,\n // clear: true,\n complete: '=',\n incomplete: ' ',\n });\n } else {\n bar!.update(progress, total);\n }\n }\n },\n });\n return outputPath;\n } finally {\n spinner.stop();\n // @ts-expect-error\n bar?.terminate();\n }\n}\n"],"names":["getExpoGoVersionEntryAsync","downloadExpoGoAsync","debug","require","platformSettings","ios","versionsKey","getFilePath","filename","path","join","getExpoHomeDirectory","shouldExtractResults","android","sdkVersion","sdkVersions","versions","getVersionsAsync","version","toUpperCase","latestVersionKey","Object","keys","reduce","a","b","gt","Log","warn","CommandError","platform","url","spinner","ora","text","color","start","bar","error","fail","parse","name","outputPath","profile","downloadAppAsync","cacheDirectory","extract","onProgress","progress","total","isSpinning","stop","createProgressBar","width","complete","incomplete","update","terminate"],"mappings":"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"}
@@ -6,8 +6,8 @@ exports.guessEditor = guessEditor;
6
6
  exports.openInEditorAsync = openInEditorAsync;
7
7
  var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
8
8
  var _envEditor = _interopRequireDefault(require("env-editor"));
9
- var Log = _interopRequireWildcard(require("../log"));
10
9
  var _env = require("./env");
10
+ var Log = _interopRequireWildcard(require("../log"));
11
11
  function _interopRequireDefault(obj) {
12
12
  return obj && obj.__esModule ? obj : {
13
13
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/editor.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport editors from 'env-editor';\n\nimport * as Log from '../log';\nimport { env } from './env';\n\nconst debug = require('debug')('expo:utils:editor') as typeof console.log;\n\n/** Guess what the default editor is and default to VSCode. */\nexport function guessEditor(): editors.Editor {\n try {\n const editor = env.EXPO_EDITOR;\n if (editor) {\n debug('Using $EXPO_EDITOR:', editor);\n return editors.getEditor(editor);\n }\n debug('Falling back on $EDITOR:', editor);\n return editors.defaultEditor();\n } catch {\n debug('Falling back on vscode');\n return editors.getEditor('vscode');\n }\n}\n\n/** Open a file path in a given editor. */\nexport async function openInEditorAsync(path: string): Promise<boolean> {\n const editor = guessEditor();\n\n debug(`Opening ${path} in ${editor?.name} (bin: ${editor?.binary}, id: ${editor?.id})`);\n if (editor) {\n try {\n await spawnAsync(editor.binary, [path]);\n return true;\n } catch (error: any) {\n debug(`Failed to auto open path in editor (path: ${path}, binary: ${editor.binary}):`, error);\n }\n }\n\n Log.error(\n 'Could not open editor, you can set it by defining the $EDITOR environment variable with the binary of your editor. (e.g. \"vscode\" or \"atom\")'\n );\n return false;\n}\n"],"names":["guessEditor","openInEditorAsync","Log","debug","require","editor","env","EXPO_EDITOR","editors","getEditor","defaultEditor","path","name","binary","id","spawnAsync","error"],"mappings":"AAAA;;;;QASgBA,WAAW,GAAXA,WAAW;QAgBLC,iBAAiB,GAAjBA,iBAAiB;AAzBhB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AACtB,IAAA,UAAY,kCAAZ,YAAY,EAAA;AAEpBC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACK,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3B,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,AAAsB,AAAC;AAGnE,SAASJ,WAAW,GAAmB;IAC5C,IAAI;QACF,MAAMK,MAAM,GAAGC,IAAG,IAAA,CAACC,WAAW,AAAC;QAC/B,IAAIF,MAAM,EAAE;YACVF,KAAK,CAAC,qBAAqB,EAAEE,MAAM,CAAC,CAAC;YACrC,OAAOG,UAAO,QAAA,CAACC,SAAS,CAACJ,MAAM,CAAC,CAAC;SAClC;QACDF,KAAK,CAAC,0BAA0B,EAAEE,MAAM,CAAC,CAAC;QAC1C,OAAOG,UAAO,QAAA,CAACE,aAAa,EAAE,CAAC;KAChC,CAAC,OAAM;QACNP,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAChC,OAAOK,UAAO,QAAA,CAACC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACpC;CACF;AAGM,eAAeR,iBAAiB,CAACU,IAAY,EAAoB;IACtE,MAAMN,MAAM,GAAGL,WAAW,EAAE,AAAC;IAE7BG,KAAK,CAAC,CAAC,QAAQ,EAAEQ,IAAI,CAAC,IAAI,EAAEN,MAAM,QAAM,GAAZA,KAAAA,CAAY,GAAZA,MAAM,CAAEO,IAAI,CAAC,OAAO,EAAEP,MAAM,QAAQ,GAAdA,KAAAA,CAAc,GAAdA,MAAM,CAAEQ,MAAM,CAAC,MAAM,EAAER,MAAM,QAAI,GAAVA,KAAAA,CAAU,GAAVA,MAAM,CAAES,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,IAAIT,MAAM,EAAE;QACV,IAAI;YACF,MAAMU,CAAAA,GAAAA,WAAU,AAAuB,CAAA,QAAvB,CAACV,MAAM,CAACQ,MAAM,EAAE;gBAACF,IAAI;aAAC,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;SACb,CAAC,OAAOK,KAAK,EAAO;YACnBb,KAAK,CAAC,CAAC,0CAA0C,EAAEQ,IAAI,CAAC,UAAU,EAAEN,MAAM,CAACQ,MAAM,CAAC,EAAE,CAAC,EAAEG,KAAK,CAAC,CAAC;SAC/F;KACF;IAEDd,GAAG,CAACc,KAAK,CACP,8IAA8I,CAC/I,CAAC;IACF,OAAO,KAAK,CAAC;CACd"}
1
+ {"version":3,"sources":["../../../src/utils/editor.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport editors from 'env-editor';\n\nimport { env } from './env';\nimport * as Log from '../log';\n\nconst debug = require('debug')('expo:utils:editor') as typeof console.log;\n\n/** Guess what the default editor is and default to VSCode. */\nexport function guessEditor(): editors.Editor {\n try {\n const editor = env.EXPO_EDITOR;\n if (editor) {\n debug('Using $EXPO_EDITOR:', editor);\n return editors.getEditor(editor);\n }\n debug('Falling back on $EDITOR:', editor);\n return editors.defaultEditor();\n } catch {\n debug('Falling back on vscode');\n return editors.getEditor('vscode');\n }\n}\n\n/** Open a file path in a given editor. */\nexport async function openInEditorAsync(path: string): Promise<boolean> {\n const editor = guessEditor();\n\n debug(`Opening ${path} in ${editor?.name} (bin: ${editor?.binary}, id: ${editor?.id})`);\n if (editor) {\n try {\n await spawnAsync(editor.binary, [path]);\n return true;\n } catch (error: any) {\n debug(`Failed to auto open path in editor (path: ${path}, binary: ${editor.binary}):`, error);\n }\n }\n\n Log.error(\n 'Could not open editor, you can set it by defining the $EDITOR environment variable with the binary of your editor. (e.g. \"vscode\" or \"atom\")'\n );\n return false;\n}\n"],"names":["guessEditor","openInEditorAsync","Log","debug","require","editor","env","EXPO_EDITOR","editors","getEditor","defaultEditor","path","name","binary","id","spawnAsync","error"],"mappings":"AAAA;;;;QASgBA,WAAW,GAAXA,WAAW;QAgBLC,iBAAiB,GAAjBA,iBAAiB;AAzBhB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AACtB,IAAA,UAAY,kCAAZ,YAAY,EAAA;AAEZ,IAAA,IAAO,WAAP,OAAO,CAAA;AACfC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEf,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,AAAsB,AAAC;AAGnE,SAASJ,WAAW,GAAmB;IAC5C,IAAI;QACF,MAAMK,MAAM,GAAGC,IAAG,IAAA,CAACC,WAAW,AAAC;QAC/B,IAAIF,MAAM,EAAE;YACVF,KAAK,CAAC,qBAAqB,EAAEE,MAAM,CAAC,CAAC;YACrC,OAAOG,UAAO,QAAA,CAACC,SAAS,CAACJ,MAAM,CAAC,CAAC;SAClC;QACDF,KAAK,CAAC,0BAA0B,EAAEE,MAAM,CAAC,CAAC;QAC1C,OAAOG,UAAO,QAAA,CAACE,aAAa,EAAE,CAAC;KAChC,CAAC,OAAM;QACNP,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAChC,OAAOK,UAAO,QAAA,CAACC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACpC;CACF;AAGM,eAAeR,iBAAiB,CAACU,IAAY,EAAoB;IACtE,MAAMN,MAAM,GAAGL,WAAW,EAAE,AAAC;IAE7BG,KAAK,CAAC,CAAC,QAAQ,EAAEQ,IAAI,CAAC,IAAI,EAAEN,MAAM,QAAM,GAAZA,KAAAA,CAAY,GAAZA,MAAM,CAAEO,IAAI,CAAC,OAAO,EAAEP,MAAM,QAAQ,GAAdA,KAAAA,CAAc,GAAdA,MAAM,CAAEQ,MAAM,CAAC,MAAM,EAAER,MAAM,QAAI,GAAVA,KAAAA,CAAU,GAAVA,MAAM,CAAES,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,IAAIT,MAAM,EAAE;QACV,IAAI;YACF,MAAMU,CAAAA,GAAAA,WAAU,AAAuB,CAAA,QAAvB,CAACV,MAAM,CAACQ,MAAM,EAAE;gBAACF,IAAI;aAAC,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;SACb,CAAC,OAAOK,KAAK,EAAO;YACnBb,KAAK,CAAC,CAAC,0CAA0C,EAAEQ,IAAI,CAAC,UAAU,EAAEN,MAAM,CAACQ,MAAM,CAAC,EAAE,CAAC,EAAEG,KAAK,CAAC,CAAC;SAC/F;KACF;IAEDd,GAAG,CAACc,KAAK,CACP,8IAA8I,CAC/I,CAAC;IACF,OAAO,KAAK,CAAC;CACd"}
@@ -56,7 +56,7 @@ class Env {
56
56
  return (0, _getenv).int("RCT_METRO_PORT", 0);
57
57
  }
58
58
  /** Skip validating the manifest during `export`. */ get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN() {
59
- return !!(0, _getenv).string("EXPO_SKIP_MANIFEST_VALIDATION_TOKEN");
59
+ return !!(0, _getenv).string("EXPO_SKIP_MANIFEST_VALIDATION_TOKEN", "");
60
60
  }
61
61
  /** Public folder path relative to the project root. Default to `public` */ get EXPO_PUBLIC_FOLDER() {
62
62
  return (0, _getenv).string("EXPO_PUBLIC_FOLDER", "public");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/env.ts"],"sourcesContent":["import { boolish, int, string } from 'getenv';\n\n// @expo/webpack-config -> expo-pwa -> @expo/image-utils: EXPO_IMAGE_UTILS_NO_SHARP\n\n// TODO: EXPO_CLI_USERNAME, EXPO_CLI_PASSWORD\n\nclass Env {\n /** Enable profiling metrics */\n get EXPO_PROFILE() {\n return boolish('EXPO_PROFILE', false);\n }\n\n /** Enable debug logging */\n get EXPO_DEBUG() {\n return boolish('EXPO_DEBUG', false);\n }\n\n /** Disable all network requests */\n get EXPO_OFFLINE() {\n return boolish('EXPO_OFFLINE', false);\n }\n\n /** Enable the beta version of Expo (TODO: Should this just be in the beta version of expo releases?) */\n get EXPO_BETA() {\n return boolish('EXPO_BETA', false);\n }\n\n /** Enable staging API environment */\n get EXPO_STAGING() {\n return boolish('EXPO_STAGING', false);\n }\n\n /** Enable local API environment */\n get EXPO_LOCAL() {\n return boolish('EXPO_LOCAL', false);\n }\n\n /** Is running in non-interactive CI mode */\n get CI() {\n return boolish('CI', false);\n }\n\n /** Disable telemetry (analytics) */\n get EXPO_NO_TELEMETRY() {\n return boolish('EXPO_NO_TELEMETRY', false);\n }\n\n /** local directory to the universe repo for testing locally */\n get EXPO_UNIVERSE_DIR() {\n return string('EXPO_UNIVERSE_DIR', '');\n }\n\n /** @deprecated Default Webpack host string */\n get WEB_HOST() {\n return string('WEB_HOST', '0.0.0.0');\n }\n\n /** Skip warning users about a dirty git status */\n get EXPO_NO_GIT_STATUS() {\n return boolish('EXPO_NO_GIT_STATUS', false);\n }\n /** Disable auto web setup */\n get EXPO_NO_WEB_SETUP() {\n return boolish('EXPO_NO_WEB_SETUP', false);\n }\n /** Disable auto TypeScript setup */\n get EXPO_NO_TYPESCRIPT_SETUP() {\n return boolish('EXPO_NO_TYPESCRIPT_SETUP', false);\n }\n /** Disable all API caches. Does not disable bundler caches. */\n get EXPO_NO_CACHE() {\n return boolish('EXPO_NO_CACHE', false);\n }\n /** Disable the app select redirect page. */\n get EXPO_NO_REDIRECT_PAGE() {\n return boolish('EXPO_NO_REDIRECT_PAGE', false);\n }\n /** The React Metro port that's baked into react-native scripts and tools. */\n get RCT_METRO_PORT() {\n return int('RCT_METRO_PORT', 0);\n }\n /** Skip validating the manifest during `export`. */\n get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN(): boolean {\n return !!string('EXPO_SKIP_MANIFEST_VALIDATION_TOKEN');\n }\n\n /** Public folder path relative to the project root. Default to `public` */\n get EXPO_PUBLIC_FOLDER(): string {\n return string('EXPO_PUBLIC_FOLDER', 'public');\n }\n\n /** Higher priority `$EDIOTR` variable for indicating which editor to use when pressing `o` in the Terminal UI. */\n get EXPO_EDITOR(): string {\n return string('EXPO_EDITOR', '');\n }\n\n /** Enable auto server root detection for Metro. This will change the server root to the workspace root. */\n get EXPO_USE_METRO_WORKSPACE_ROOT(): boolean {\n return boolish('EXPO_USE_METRO_WORKSPACE_ROOT', false);\n }\n\n /**\n * Overwrite the dev server URL, disregarding the `--port`, `--host`, `--tunnel`, `--lan`, `--localhost` arguments.\n * This is useful for browser editors that require custom proxy URLs.\n */\n get EXPO_PACKAGER_PROXY_URL(): string {\n return string('EXPO_PACKAGER_PROXY_URL', '');\n }\n\n /**\n * **Experimental** - Disable using `exp.direct` as the hostname for\n * `--tunnel` connections. This enables **https://** forwarding which\n * can be used to test universal links on iOS.\n *\n * This may cause issues with `expo-linking` and Expo Go.\n *\n * Select the exact subdomain by passing a string value that is not one of: `true`, `false`, `1`, `0`.\n */\n get EXPO_TUNNEL_SUBDOMAIN(): string | boolean {\n const subdomain = string('EXPO_TUNNEL_SUBDOMAIN', '');\n if (['0', 'false', ''].includes(subdomain)) {\n return false;\n } else if (['1', 'true'].includes(subdomain)) {\n return true;\n }\n return subdomain;\n }\n\n /**\n * Force Expo CLI to use the [`resolver.resolverMainFields`](https://facebook.github.io/metro/docs/configuration/#resolvermainfields) from the project `metro.config.js` for all platforms.\n *\n * By default, Expo CLI will use `['browser', 'module', 'main']` (default for Webpack) for web and the user-defined main fields for other platforms.\n */\n get EXPO_METRO_NO_MAIN_FIELD_OVERRIDE(): boolean {\n return boolish('EXPO_METRO_NO_MAIN_FIELD_OVERRIDE', false);\n }\n\n /**\n * HTTP/HTTPS proxy to connect to for network requests. Configures [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent).\n */\n get HTTP_PROXY(): string {\n return process.env.HTTP_PROXY || process.env.http_proxy || '';\n }\n\n /** Use the network inspector by overriding the metro inspector proxy with a custom version */\n get EXPO_NO_INSPECTOR_PROXY(): boolean {\n return boolish('EXPO_NO_INSPECTOR_PROXY', false);\n }\n\n /** Disable lazy bundling in Metro bundler. */\n get EXPO_NO_METRO_LAZY() {\n return boolish('EXPO_NO_METRO_LAZY', false);\n }\n\n /** Enable the unstable inverse dependency stack trace for Metro bundling errors. */\n get EXPO_METRO_UNSTABLE_ERRORS() {\n return boolish('EXPO_METRO_UNSTABLE_ERRORS', false);\n }\n}\n\nexport const env = new Env();\n"],"names":["Env","EXPO_PROFILE","boolish","EXPO_DEBUG","EXPO_OFFLINE","EXPO_BETA","EXPO_STAGING","EXPO_LOCAL","CI","EXPO_NO_TELEMETRY","EXPO_UNIVERSE_DIR","string","WEB_HOST","EXPO_NO_GIT_STATUS","EXPO_NO_WEB_SETUP","EXPO_NO_TYPESCRIPT_SETUP","EXPO_NO_CACHE","EXPO_NO_REDIRECT_PAGE","RCT_METRO_PORT","int","EXPO_SKIP_MANIFEST_VALIDATION_TOKEN","EXPO_PUBLIC_FOLDER","EXPO_EDITOR","EXPO_USE_METRO_WORKSPACE_ROOT","EXPO_PACKAGER_PROXY_URL","EXPO_TUNNEL_SUBDOMAIN","subdomain","includes","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","HTTP_PROXY","process","env","http_proxy","EXPO_NO_INSPECTOR_PROXY","EXPO_NO_METRO_LAZY","EXPO_METRO_UNSTABLE_ERRORS"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/env.ts"],"sourcesContent":["import { boolish, int, string } from 'getenv';\n\n// @expo/webpack-config -> expo-pwa -> @expo/image-utils: EXPO_IMAGE_UTILS_NO_SHARP\n\n// TODO: EXPO_CLI_USERNAME, EXPO_CLI_PASSWORD\n\nclass Env {\n /** Enable profiling metrics */\n get EXPO_PROFILE() {\n return boolish('EXPO_PROFILE', false);\n }\n\n /** Enable debug logging */\n get EXPO_DEBUG() {\n return boolish('EXPO_DEBUG', false);\n }\n\n /** Disable all network requests */\n get EXPO_OFFLINE() {\n return boolish('EXPO_OFFLINE', false);\n }\n\n /** Enable the beta version of Expo (TODO: Should this just be in the beta version of expo releases?) */\n get EXPO_BETA() {\n return boolish('EXPO_BETA', false);\n }\n\n /** Enable staging API environment */\n get EXPO_STAGING() {\n return boolish('EXPO_STAGING', false);\n }\n\n /** Enable local API environment */\n get EXPO_LOCAL() {\n return boolish('EXPO_LOCAL', false);\n }\n\n /** Is running in non-interactive CI mode */\n get CI() {\n return boolish('CI', false);\n }\n\n /** Disable telemetry (analytics) */\n get EXPO_NO_TELEMETRY() {\n return boolish('EXPO_NO_TELEMETRY', false);\n }\n\n /** local directory to the universe repo for testing locally */\n get EXPO_UNIVERSE_DIR() {\n return string('EXPO_UNIVERSE_DIR', '');\n }\n\n /** @deprecated Default Webpack host string */\n get WEB_HOST() {\n return string('WEB_HOST', '0.0.0.0');\n }\n\n /** Skip warning users about a dirty git status */\n get EXPO_NO_GIT_STATUS() {\n return boolish('EXPO_NO_GIT_STATUS', false);\n }\n /** Disable auto web setup */\n get EXPO_NO_WEB_SETUP() {\n return boolish('EXPO_NO_WEB_SETUP', false);\n }\n /** Disable auto TypeScript setup */\n get EXPO_NO_TYPESCRIPT_SETUP() {\n return boolish('EXPO_NO_TYPESCRIPT_SETUP', false);\n }\n /** Disable all API caches. Does not disable bundler caches. */\n get EXPO_NO_CACHE() {\n return boolish('EXPO_NO_CACHE', false);\n }\n /** Disable the app select redirect page. */\n get EXPO_NO_REDIRECT_PAGE() {\n return boolish('EXPO_NO_REDIRECT_PAGE', false);\n }\n /** The React Metro port that's baked into react-native scripts and tools. */\n get RCT_METRO_PORT() {\n return int('RCT_METRO_PORT', 0);\n }\n /** Skip validating the manifest during `export`. */\n get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN(): boolean {\n return !!string('EXPO_SKIP_MANIFEST_VALIDATION_TOKEN', '');\n }\n\n /** Public folder path relative to the project root. Default to `public` */\n get EXPO_PUBLIC_FOLDER(): string {\n return string('EXPO_PUBLIC_FOLDER', 'public');\n }\n\n /** Higher priority `$EDIOTR` variable for indicating which editor to use when pressing `o` in the Terminal UI. */\n get EXPO_EDITOR(): string {\n return string('EXPO_EDITOR', '');\n }\n\n /** Enable auto server root detection for Metro. This will change the server root to the workspace root. */\n get EXPO_USE_METRO_WORKSPACE_ROOT(): boolean {\n return boolish('EXPO_USE_METRO_WORKSPACE_ROOT', false);\n }\n\n /**\n * Overwrite the dev server URL, disregarding the `--port`, `--host`, `--tunnel`, `--lan`, `--localhost` arguments.\n * This is useful for browser editors that require custom proxy URLs.\n */\n get EXPO_PACKAGER_PROXY_URL(): string {\n return string('EXPO_PACKAGER_PROXY_URL', '');\n }\n\n /**\n * **Experimental** - Disable using `exp.direct` as the hostname for\n * `--tunnel` connections. This enables **https://** forwarding which\n * can be used to test universal links on iOS.\n *\n * This may cause issues with `expo-linking` and Expo Go.\n *\n * Select the exact subdomain by passing a string value that is not one of: `true`, `false`, `1`, `0`.\n */\n get EXPO_TUNNEL_SUBDOMAIN(): string | boolean {\n const subdomain = string('EXPO_TUNNEL_SUBDOMAIN', '');\n if (['0', 'false', ''].includes(subdomain)) {\n return false;\n } else if (['1', 'true'].includes(subdomain)) {\n return true;\n }\n return subdomain;\n }\n\n /**\n * Force Expo CLI to use the [`resolver.resolverMainFields`](https://facebook.github.io/metro/docs/configuration/#resolvermainfields) from the project `metro.config.js` for all platforms.\n *\n * By default, Expo CLI will use `['browser', 'module', 'main']` (default for Webpack) for web and the user-defined main fields for other platforms.\n */\n get EXPO_METRO_NO_MAIN_FIELD_OVERRIDE(): boolean {\n return boolish('EXPO_METRO_NO_MAIN_FIELD_OVERRIDE', false);\n }\n\n /**\n * HTTP/HTTPS proxy to connect to for network requests. Configures [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent).\n */\n get HTTP_PROXY(): string {\n return process.env.HTTP_PROXY || process.env.http_proxy || '';\n }\n\n /** Use the network inspector by overriding the metro inspector proxy with a custom version */\n get EXPO_NO_INSPECTOR_PROXY(): boolean {\n return boolish('EXPO_NO_INSPECTOR_PROXY', false);\n }\n\n /** Disable lazy bundling in Metro bundler. */\n get EXPO_NO_METRO_LAZY() {\n return boolish('EXPO_NO_METRO_LAZY', false);\n }\n\n /** Enable the unstable inverse dependency stack trace for Metro bundling errors. */\n get EXPO_METRO_UNSTABLE_ERRORS() {\n return boolish('EXPO_METRO_UNSTABLE_ERRORS', false);\n }\n}\n\nexport const env = new Env();\n"],"names":["Env","EXPO_PROFILE","boolish","EXPO_DEBUG","EXPO_OFFLINE","EXPO_BETA","EXPO_STAGING","EXPO_LOCAL","CI","EXPO_NO_TELEMETRY","EXPO_UNIVERSE_DIR","string","WEB_HOST","EXPO_NO_GIT_STATUS","EXPO_NO_WEB_SETUP","EXPO_NO_TYPESCRIPT_SETUP","EXPO_NO_CACHE","EXPO_NO_REDIRECT_PAGE","RCT_METRO_PORT","int","EXPO_SKIP_MANIFEST_VALIDATION_TOKEN","EXPO_PUBLIC_FOLDER","EXPO_EDITOR","EXPO_USE_METRO_WORKSPACE_ROOT","EXPO_PACKAGER_PROXY_URL","EXPO_TUNNEL_SUBDOMAIN","subdomain","includes","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","HTTP_PROXY","process","env","http_proxy","EXPO_NO_INSPECTOR_PROXY","EXPO_NO_METRO_LAZY","EXPO_METRO_UNSTABLE_ERRORS"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/errors.ts"],"sourcesContent":["import { AssertionError } from 'assert';\nimport chalk from 'chalk';\n\nimport { exit } from '../log';\n\nconst ERROR_PREFIX = 'Error: ';\n\n/**\n * General error, formatted as a message in red text when caught by expo-cli (no stack trace is printed). Should be used in favor of `log.error()` in most cases.\n */\nexport class CommandError extends Error {\n name = 'CommandError';\n readonly isCommandError = true;\n\n constructor(public code: string, message: string = '') {\n super('');\n // If e.toString() was called to get `message` we don't want it to look\n // like \"Error: Error:\".\n if (message.startsWith(ERROR_PREFIX)) {\n message = message.substring(ERROR_PREFIX.length);\n }\n\n this.message = message || code;\n }\n}\n\nexport class AbortCommandError extends CommandError {\n constructor() {\n super('ABORTED', 'Interactive prompt was cancelled.');\n }\n}\n\n/**\n * Used to end a CLI process without printing a stack trace in the Expo CLI. Should be used in favor of `process.exit`.\n */\nexport class SilentError extends CommandError {\n constructor(messageOrError?: string | Error) {\n const message =\n (typeof messageOrError === 'string' ? messageOrError : messageOrError?.message) ??\n 'This error should fail silently in the CLI';\n super('SILENT', message);\n if (typeof messageOrError !== 'string') {\n // forward the props of the incoming error for tests or processes outside of expo-cli that use expo cli internals.\n this.stack = messageOrError?.stack ?? this.stack;\n this.name = messageOrError?.name ?? this.name;\n }\n }\n}\n\nexport function logCmdError(error: Error): never {\n if (error instanceof AbortCommandError || error instanceof SilentError) {\n // Do nothing, this is used for prompts or other cases that were custom logged.\n process.exit(0);\n } else if (\n error instanceof CommandError ||\n error instanceof AssertionError ||\n error.name === 'ApiV2Error' ||\n error.name === 'ConfigError'\n ) {\n // Print the stack trace in debug mode only.\n exit(error);\n }\n\n const errorDetails = error.stack ? '\\n' + chalk.gray(error.stack) : '';\n\n exit(chalk.red(error.toString()) + errorDetails);\n}\n\n/** This should never be thrown in production. */\nexport class UnimplementedError extends Error {\n constructor() {\n super('Unimplemented');\n this.name = 'UnimplementedError';\n }\n}\n"],"names":["logCmdError","ERROR_PREFIX","CommandError","Error","constructor","code","message","name","isCommandError","startsWith","substring","length","AbortCommandError","SilentError","messageOrError","stack","error","process","exit","AssertionError","errorDetails","chalk","gray","red","toString","UnimplementedError"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/errors.ts"],"sourcesContent":["import { AssertionError } from 'assert';\nimport chalk from 'chalk';\n\nimport { exit } from '../log';\n\nconst ERROR_PREFIX = 'Error: ';\n\n/**\n * General error, formatted as a message in red text when caught by expo-cli (no stack trace is printed). Should be used in favor of `log.error()` in most cases.\n */\nexport class CommandError extends Error {\n name = 'CommandError';\n readonly isCommandError = true;\n\n constructor(\n public code: string,\n message: string = ''\n ) {\n super('');\n // If e.toString() was called to get `message` we don't want it to look\n // like \"Error: Error:\".\n if (message.startsWith(ERROR_PREFIX)) {\n message = message.substring(ERROR_PREFIX.length);\n }\n\n this.message = message || code;\n }\n}\n\nexport class AbortCommandError extends CommandError {\n constructor() {\n super('ABORTED', 'Interactive prompt was cancelled.');\n }\n}\n\n/**\n * Used to end a CLI process without printing a stack trace in the Expo CLI. Should be used in favor of `process.exit`.\n */\nexport class SilentError extends CommandError {\n constructor(messageOrError?: string | Error) {\n const message =\n (typeof messageOrError === 'string' ? messageOrError : messageOrError?.message) ??\n 'This error should fail silently in the CLI';\n super('SILENT', message);\n if (typeof messageOrError !== 'string') {\n // forward the props of the incoming error for tests or processes outside of expo-cli that use expo cli internals.\n this.stack = messageOrError?.stack ?? this.stack;\n this.name = messageOrError?.name ?? this.name;\n }\n }\n}\n\nexport function logCmdError(error: Error): never {\n if (error instanceof AbortCommandError || error instanceof SilentError) {\n // Do nothing, this is used for prompts or other cases that were custom logged.\n process.exit(0);\n } else if (\n error instanceof CommandError ||\n error instanceof AssertionError ||\n error.name === 'ApiV2Error' ||\n error.name === 'ConfigError'\n ) {\n // Print the stack trace in debug mode only.\n exit(error);\n }\n\n const errorDetails = error.stack ? '\\n' + chalk.gray(error.stack) : '';\n\n exit(chalk.red(error.toString()) + errorDetails);\n}\n\n/** This should never be thrown in production. */\nexport class UnimplementedError extends Error {\n constructor() {\n super('Unimplemented');\n this.name = 'UnimplementedError';\n }\n}\n"],"names":["logCmdError","ERROR_PREFIX","CommandError","Error","constructor","code","message","name","isCommandError","startsWith","substring","length","AbortCommandError","SilentError","messageOrError","stack","error","process","exit","AssertionError","errorDetails","chalk","gray","red","toString","UnimplementedError"],"mappings":"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"}
@@ -6,11 +6,11 @@ exports.getOrPromptForBundleIdentifier = getOrPromptForBundleIdentifier;
6
6
  exports.getOrPromptForPackage = getOrPromptForPackage;
7
7
  var _config = require("@expo/config");
8
8
  var _chalk = _interopRequireDefault(require("chalk"));
9
- var Log = _interopRequireWildcard(require("../log"));
10
9
  var _link = require("./link");
11
10
  var _modifyConfigAsync = require("./modifyConfigAsync");
12
11
  var _prompts = _interopRequireWildcard(require("./prompts"));
13
12
  var _validateApplicationId = require("./validateApplicationId");
13
+ var Log = _interopRequireWildcard(require("../log"));
14
14
  function _interopRequireDefault(obj) {
15
15
  return obj && obj.__esModule ? obj : {
16
16
  default: obj
@@ -156,7 +156,7 @@ async function promptForPackageAsync(projectRoot, exp) {
156
156
  name: "packageName",
157
157
  initial: (ref = await getRecommendedPackageNameAsync(exp)) != null ? ref : undefined,
158
158
  message: `What would you like your Android package name to be?`,
159
- validate: _validateApplicationId.validatePackage
159
+ validate: _validateApplicationId.validatePackageWithWarning
160
160
  }, {
161
161
  nonInteractiveHelp: NO_PACKAGE_MESSAGE
162
162
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/getOrPromptApplicationId.ts"],"sourcesContent":["import { ExpoConfig, getAccountUsername, getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { learnMore } from './link';\nimport { attemptModification } from './modifyConfigAsync';\nimport prompt, { confirmAsync } from './prompts';\nimport {\n assertValidBundleId,\n assertValidPackage,\n getBundleIdWarningAsync,\n getPackageNameWarningAsync,\n validateBundleId,\n validatePackage,\n} from './validateApplicationId';\n\nfunction getUsernameAsync(exp: ExpoConfig) {\n // TODO: Use XDL's UserManager\n // import { UserManager } from 'xdl';\n return getAccountUsername(exp);\n}\n\nconst NO_BUNDLE_ID_MESSAGE = `Project must have a \\`ios.bundleIdentifier\\` set in the Expo config (app.json or app.config.js).`;\n\nconst NO_PACKAGE_MESSAGE = `Project must have a \\`android.package\\` set in the Expo config (app.json or app.config.js).`;\n\n/**\n * Get the bundle identifier from the Expo config or prompt the user to choose a new bundle identifier.\n * Prompted value will be validated against the App Store and a local regex.\n * If the project Expo config is a static JSON file, the bundle identifier will be updated in the config automatically.\n */\nexport async function getOrPromptForBundleIdentifier(projectRoot: string): Promise<string> {\n const { exp } = getConfig(projectRoot);\n\n const current = exp.ios?.bundleIdentifier;\n if (current) {\n assertValidBundleId(current);\n return current;\n }\n\n Log.log(\n chalk`\\n{bold 📝 iOS Bundle Identifier} {dim ${learnMore(\n 'https://expo.fyi/bundle-identifier'\n )}}\\n`\n );\n\n return await promptForBundleIdAsync(projectRoot, exp);\n}\n\nasync function promptForBundleIdAsync(projectRoot: string, exp: ExpoConfig): Promise<string> {\n // Prompt the user for the bundle ID.\n // Even if the project is using a dynamic config we can still\n // prompt a better error message, recommend a default value, and help the user\n // validate their custom bundle ID upfront.\n const { bundleIdentifier } = await prompt(\n {\n type: 'text',\n name: 'bundleIdentifier',\n initial: (await getRecommendedBundleIdAsync(exp)) ?? undefined,\n // The Apple helps people know this isn't an EAS feature.\n message: `What would you like your iOS bundle identifier to be?`,\n validate: validateBundleId,\n },\n {\n nonInteractiveHelp: NO_BUNDLE_ID_MESSAGE,\n }\n );\n\n // Warn the user if the bundle ID is already in use.\n const warning = await getBundleIdWarningAsync(bundleIdentifier);\n if (warning && !(await warnAndConfirmAsync(warning))) {\n // Cycle the Bundle ID prompt to try again.\n return await promptForBundleIdAsync(projectRoot, exp);\n }\n\n // Apply the changes to the config.\n await attemptModification(\n projectRoot,\n {\n ios: { ...(exp.ios || {}), bundleIdentifier },\n },\n { ios: { bundleIdentifier } }\n );\n\n return bundleIdentifier;\n}\n\nasync function warnAndConfirmAsync(warning: string): Promise<boolean> {\n Log.log();\n Log.warn(warning);\n Log.log();\n if (\n !(await confirmAsync({\n message: `Continue?`,\n initial: true,\n }))\n ) {\n return false;\n }\n return true;\n}\n\n// Recommend a bundle identifier based on the username and project slug.\nasync function getRecommendedBundleIdAsync(exp: ExpoConfig): Promise<string | null> {\n // Attempt to use the android package name first since it's convenient to have them aligned.\n if (exp.android?.package && validateBundleId(exp.android?.package)) {\n return exp.android?.package;\n } else {\n const username = await getUsernameAsync(exp);\n const possibleId = `com.${username}.${exp.slug}`;\n if (username && validateBundleId(possibleId)) {\n return possibleId;\n }\n }\n\n return null;\n}\n\n// Recommend a package name based on the username and project slug.\nasync function getRecommendedPackageNameAsync(exp: ExpoConfig): Promise<string | null> {\n // Attempt to use the ios bundle id first since it's convenient to have them aligned.\n if (exp.ios?.bundleIdentifier && validatePackage(exp.ios.bundleIdentifier)) {\n return exp.ios.bundleIdentifier;\n } else {\n const username = await getUsernameAsync(exp);\n // It's common to use dashes in your node project name, strip them from the suggested package name.\n const possibleId = `com.${username}.${exp.slug}`.split('-').join('');\n if (username && validatePackage(possibleId)) {\n return possibleId;\n }\n }\n return null;\n}\n\n/**\n * Get the package name from the Expo config or prompt the user to choose a new package name.\n * Prompted value will be validated against the Play Store and a local regex.\n * If the project Expo config is a static JSON file, the package name will be updated in the config automatically.\n */\nexport async function getOrPromptForPackage(projectRoot: string): Promise<string> {\n const { exp } = getConfig(projectRoot);\n\n const current = exp.android?.package;\n if (current) {\n assertValidPackage(current);\n return current;\n }\n\n Log.log(\n chalk`\\n{bold 📝 Android package} {dim ${learnMore('https://expo.fyi/android-package')}}\\n`\n );\n\n return await promptForPackageAsync(projectRoot, exp);\n}\n\nasync function promptForPackageAsync(projectRoot: string, exp: ExpoConfig): Promise<string> {\n // Prompt the user for the android package.\n // Even if the project is using a dynamic config we can still\n // prompt a better error message, recommend a default value, and help the user\n // validate their custom android package upfront.\n const { packageName } = await prompt(\n {\n type: 'text',\n name: 'packageName',\n initial: (await getRecommendedPackageNameAsync(exp)) ?? undefined,\n message: `What would you like your Android package name to be?`,\n validate: validatePackage,\n },\n {\n nonInteractiveHelp: NO_PACKAGE_MESSAGE,\n }\n );\n\n // Warn the user if the package name is already in use.\n const warning = await getPackageNameWarningAsync(packageName);\n if (warning && !(await warnAndConfirmAsync(warning))) {\n // Cycle the Package name prompt to try again.\n return await promptForPackageAsync(projectRoot, exp);\n }\n\n // Apply the changes to the config.\n await attemptModification(\n projectRoot,\n {\n android: { ...(exp.android || {}), package: packageName },\n },\n {\n android: { package: packageName },\n }\n );\n\n return packageName;\n}\n"],"names":["getOrPromptForBundleIdentifier","getOrPromptForPackage","Log","getUsernameAsync","exp","getAccountUsername","NO_BUNDLE_ID_MESSAGE","NO_PACKAGE_MESSAGE","projectRoot","getConfig","current","ios","bundleIdentifier","assertValidBundleId","log","chalk","learnMore","promptForBundleIdAsync","prompt","type","name","initial","getRecommendedBundleIdAsync","undefined","message","validate","validateBundleId","nonInteractiveHelp","warning","getBundleIdWarningAsync","warnAndConfirmAsync","attemptModification","warn","confirmAsync","android","package","username","possibleId","slug","getRecommendedPackageNameAsync","validatePackage","split","join","assertValidPackage","promptForPackageAsync","packageName","getPackageNameWarningAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/getOrPromptApplicationId.ts"],"sourcesContent":["import { ExpoConfig, getAccountUsername, getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { learnMore } from './link';\nimport { attemptModification } from './modifyConfigAsync';\nimport prompt, { confirmAsync } from './prompts';\nimport {\n assertValidBundleId,\n assertValidPackage,\n getBundleIdWarningAsync,\n getPackageNameWarningAsync,\n validateBundleId,\n validatePackage,\n validatePackageWithWarning,\n} from './validateApplicationId';\nimport * as Log from '../log';\n\nfunction getUsernameAsync(exp: ExpoConfig) {\n // TODO: Use XDL's UserManager\n // import { UserManager } from 'xdl';\n return getAccountUsername(exp);\n}\n\nconst NO_BUNDLE_ID_MESSAGE = `Project must have a \\`ios.bundleIdentifier\\` set in the Expo config (app.json or app.config.js).`;\n\nconst NO_PACKAGE_MESSAGE = `Project must have a \\`android.package\\` set in the Expo config (app.json or app.config.js).`;\n\n/**\n * Get the bundle identifier from the Expo config or prompt the user to choose a new bundle identifier.\n * Prompted value will be validated against the App Store and a local regex.\n * If the project Expo config is a static JSON file, the bundle identifier will be updated in the config automatically.\n */\nexport async function getOrPromptForBundleIdentifier(projectRoot: string): Promise<string> {\n const { exp } = getConfig(projectRoot);\n\n const current = exp.ios?.bundleIdentifier;\n if (current) {\n assertValidBundleId(current);\n return current;\n }\n\n Log.log(\n chalk`\\n{bold 📝 iOS Bundle Identifier} {dim ${learnMore(\n 'https://expo.fyi/bundle-identifier'\n )}}\\n`\n );\n\n return await promptForBundleIdAsync(projectRoot, exp);\n}\n\nasync function promptForBundleIdAsync(projectRoot: string, exp: ExpoConfig): Promise<string> {\n // Prompt the user for the bundle ID.\n // Even if the project is using a dynamic config we can still\n // prompt a better error message, recommend a default value, and help the user\n // validate their custom bundle ID upfront.\n const { bundleIdentifier } = await prompt(\n {\n type: 'text',\n name: 'bundleIdentifier',\n initial: (await getRecommendedBundleIdAsync(exp)) ?? undefined,\n // The Apple helps people know this isn't an EAS feature.\n message: `What would you like your iOS bundle identifier to be?`,\n validate: validateBundleId,\n },\n {\n nonInteractiveHelp: NO_BUNDLE_ID_MESSAGE,\n }\n );\n\n // Warn the user if the bundle ID is already in use.\n const warning = await getBundleIdWarningAsync(bundleIdentifier);\n if (warning && !(await warnAndConfirmAsync(warning))) {\n // Cycle the Bundle ID prompt to try again.\n return await promptForBundleIdAsync(projectRoot, exp);\n }\n\n // Apply the changes to the config.\n await attemptModification(\n projectRoot,\n {\n ios: { ...(exp.ios || {}), bundleIdentifier },\n },\n { ios: { bundleIdentifier } }\n );\n\n return bundleIdentifier;\n}\n\nasync function warnAndConfirmAsync(warning: string): Promise<boolean> {\n Log.log();\n Log.warn(warning);\n Log.log();\n if (\n !(await confirmAsync({\n message: `Continue?`,\n initial: true,\n }))\n ) {\n return false;\n }\n return true;\n}\n\n// Recommend a bundle identifier based on the username and project slug.\nasync function getRecommendedBundleIdAsync(exp: ExpoConfig): Promise<string | null> {\n // Attempt to use the android package name first since it's convenient to have them aligned.\n if (exp.android?.package && validateBundleId(exp.android?.package)) {\n return exp.android?.package;\n } else {\n const username = await getUsernameAsync(exp);\n const possibleId = `com.${username}.${exp.slug}`;\n if (username && validateBundleId(possibleId)) {\n return possibleId;\n }\n }\n\n return null;\n}\n\n// Recommend a package name based on the username and project slug.\nasync function getRecommendedPackageNameAsync(exp: ExpoConfig): Promise<string | null> {\n // Attempt to use the ios bundle id first since it's convenient to have them aligned.\n if (exp.ios?.bundleIdentifier && validatePackage(exp.ios.bundleIdentifier)) {\n return exp.ios.bundleIdentifier;\n } else {\n const username = await getUsernameAsync(exp);\n // It's common to use dashes in your node project name, strip them from the suggested package name.\n const possibleId = `com.${username}.${exp.slug}`.split('-').join('');\n if (username && validatePackage(possibleId)) {\n return possibleId;\n }\n }\n return null;\n}\n\n/**\n * Get the package name from the Expo config or prompt the user to choose a new package name.\n * Prompted value will be validated against the Play Store and a local regex.\n * If the project Expo config is a static JSON file, the package name will be updated in the config automatically.\n */\nexport async function getOrPromptForPackage(projectRoot: string): Promise<string> {\n const { exp } = getConfig(projectRoot);\n\n const current = exp.android?.package;\n if (current) {\n assertValidPackage(current);\n return current;\n }\n\n Log.log(\n chalk`\\n{bold 📝 Android package} {dim ${learnMore('https://expo.fyi/android-package')}}\\n`\n );\n\n return await promptForPackageAsync(projectRoot, exp);\n}\n\nasync function promptForPackageAsync(projectRoot: string, exp: ExpoConfig): Promise<string> {\n // Prompt the user for the android package.\n // Even if the project is using a dynamic config we can still\n // prompt a better error message, recommend a default value, and help the user\n // validate their custom android package upfront.\n const { packageName } = await prompt(\n {\n type: 'text',\n name: 'packageName',\n initial: (await getRecommendedPackageNameAsync(exp)) ?? undefined,\n message: `What would you like your Android package name to be?`,\n validate: validatePackageWithWarning,\n },\n {\n nonInteractiveHelp: NO_PACKAGE_MESSAGE,\n }\n );\n\n // Warn the user if the package name is already in use.\n const warning = await getPackageNameWarningAsync(packageName);\n if (warning && !(await warnAndConfirmAsync(warning))) {\n // Cycle the Package name prompt to try again.\n return await promptForPackageAsync(projectRoot, exp);\n }\n\n // Apply the changes to the config.\n await attemptModification(\n projectRoot,\n {\n android: { ...(exp.android || {}), package: packageName },\n },\n {\n android: { package: packageName },\n }\n );\n\n return packageName;\n}\n"],"names":["getOrPromptForBundleIdentifier","getOrPromptForPackage","Log","getUsernameAsync","exp","getAccountUsername","NO_BUNDLE_ID_MESSAGE","NO_PACKAGE_MESSAGE","projectRoot","getConfig","current","ios","bundleIdentifier","assertValidBundleId","log","chalk","learnMore","promptForBundleIdAsync","prompt","type","name","initial","getRecommendedBundleIdAsync","undefined","message","validate","validateBundleId","nonInteractiveHelp","warning","getBundleIdWarningAsync","warnAndConfirmAsync","attemptModification","warn","confirmAsync","android","package","username","possibleId","slug","getRecommendedPackageNameAsync","validatePackage","split","join","assertValidPackage","promptForPackageAsync","packageName","validatePackageWithWarning","getPackageNameWarningAsync"],"mappings":"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"}
@@ -6,10 +6,10 @@ exports.maybeBailOnGitStatusAsync = maybeBailOnGitStatusAsync;
6
6
  exports.validateGitStatusAsync = validateGitStatusAsync;
7
7
  var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
8
8
  var _chalk = _interopRequireDefault(require("chalk"));
9
- var Log = _interopRequireWildcard(require("../log"));
10
9
  var _env = require("./env");
11
10
  var _interactive = require("./interactive");
12
11
  var _prompts = require("./prompts");
12
+ var Log = _interopRequireWildcard(require("../log"));
13
13
  function _interopRequireDefault(obj) {
14
14
  return obj && obj.__esModule ? obj : {
15
15
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/git.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { env } from './env';\nimport { isInteractive } from './interactive';\nimport { confirmAsync } from './prompts';\n\nexport async function maybeBailOnGitStatusAsync(): Promise<boolean> {\n if (env.EXPO_NO_GIT_STATUS) {\n Log.warn(\n 'Git status is dirty but the command will continue because EXPO_NO_GIT_STATUS is enabled...'\n );\n return false;\n }\n const isGitStatusClean = await validateGitStatusAsync();\n\n // Give people a chance to bail out if git working tree is dirty\n if (!isGitStatusClean) {\n if (!isInteractive()) {\n Log.warn(\n `Git status is dirty but the command will continue because the terminal is not interactive.`\n );\n return false;\n }\n\n Log.log();\n const answer = await confirmAsync({\n message: `Would you like to proceed?`,\n });\n\n if (!answer) {\n return true;\n }\n\n Log.log();\n }\n return false;\n}\n\nexport async function validateGitStatusAsync(): Promise<boolean> {\n let workingTreeStatus = 'unknown';\n try {\n const result = await spawnAsync('git', ['status', '--porcelain']);\n workingTreeStatus = result.stdout === '' ? 'clean' : 'dirty';\n } catch {\n // Maybe git is not installed?\n // Maybe this project is not using git?\n }\n\n if (workingTreeStatus === 'clean') {\n Log.log(`Your git working tree is ${chalk.green('clean')}`);\n Log.log('To revert the changes after this command completes, you can run the following:');\n Log.log(' git clean --force && git reset --hard');\n return true;\n } else if (workingTreeStatus === 'dirty') {\n Log.log(`${chalk.bold('Warning!')} Your git working tree is ${chalk.red('dirty')}.`);\n Log.log(\n `It's recommended to ${chalk.bold(\n 'commit all your changes before proceeding'\n )}, so you can revert the changes made by this command if necessary.`\n );\n } else {\n Log.log(\"We couldn't find a git repository in your project directory.\");\n Log.log(\"It's recommended to back up your project before proceeding.\");\n }\n\n return false;\n}\n"],"names":["maybeBailOnGitStatusAsync","validateGitStatusAsync","Log","env","EXPO_NO_GIT_STATUS","warn","isGitStatusClean","isInteractive","log","answer","confirmAsync","message","workingTreeStatus","result","spawnAsync","stdout","chalk","green","bold","red"],"mappings":"AAAA;;;;QAQsBA,yBAAyB,GAAzBA,yBAAyB;QAgCzBC,sBAAsB,GAAtBA,sBAAsB;AAxCrB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AACxB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEbC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACK,IAAA,IAAO,WAAP,OAAO,CAAA;AACG,IAAA,YAAe,WAAf,eAAe,CAAA;AAChB,IAAA,QAAW,WAAX,WAAW,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjC,eAAeF,yBAAyB,GAAqB;IAClE,IAAIG,IAAG,IAAA,CAACC,kBAAkB,EAAE;QAC1BF,GAAG,CAACG,IAAI,CACN,4FAA4F,CAC7F,CAAC;QACF,OAAO,KAAK,CAAC;KACd;IACD,MAAMC,gBAAgB,GAAG,MAAML,sBAAsB,EAAE,AAAC;IAExD,gEAAgE;IAChE,IAAI,CAACK,gBAAgB,EAAE;QACrB,IAAI,CAACC,CAAAA,GAAAA,YAAa,AAAE,CAAA,cAAF,EAAE,EAAE;YACpBL,GAAG,CAACG,IAAI,CACN,CAAC,0FAA0F,CAAC,CAC7F,CAAC;YACF,OAAO,KAAK,CAAC;SACd;QAEDH,GAAG,CAACM,GAAG,EAAE,CAAC;QACV,MAAMC,MAAM,GAAG,MAAMC,CAAAA,GAAAA,QAAY,AAE/B,CAAA,aAF+B,CAAC;YAChCC,OAAO,EAAE,CAAC,0BAA0B,CAAC;SACtC,CAAC,AAAC;QAEH,IAAI,CAACF,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAEDP,GAAG,CAACM,GAAG,EAAE,CAAC;KACX;IACD,OAAO,KAAK,CAAC;CACd;AAEM,eAAeP,sBAAsB,GAAqB;IAC/D,IAAIW,iBAAiB,GAAG,SAAS,AAAC;IAClC,IAAI;QACF,MAAMC,MAAM,GAAG,MAAMC,CAAAA,GAAAA,WAAU,AAAkC,CAAA,QAAlC,CAAC,KAAK,EAAE;YAAC,QAAQ;YAAE,aAAa;SAAC,CAAC,AAAC;QAClEF,iBAAiB,GAAGC,MAAM,CAACE,MAAM,KAAK,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC;KAC9D,CAAC,OAAM;IACN,8BAA8B;IAC9B,uCAAuC;KACxC;IAED,IAAIH,iBAAiB,KAAK,OAAO,EAAE;QACjCV,GAAG,CAACM,GAAG,CAAC,CAAC,yBAAyB,EAAEQ,MAAK,QAAA,CAACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5Df,GAAG,CAACM,GAAG,CAAC,gFAAgF,CAAC,CAAC;QAC1FN,GAAG,CAACM,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;KACb,MAAM,IAAII,iBAAiB,KAAK,OAAO,EAAE;QACxCV,GAAG,CAACM,GAAG,CAAC,CAAC,EAAEQ,MAAK,QAAA,CAACE,IAAI,CAAC,UAAU,CAAC,CAAC,0BAA0B,EAAEF,MAAK,QAAA,CAACG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrFjB,GAAG,CAACM,GAAG,CACL,CAAC,oBAAoB,EAAEQ,MAAK,QAAA,CAACE,IAAI,CAC/B,2CAA2C,CAC5C,CAAC,kEAAkE,CAAC,CACtE,CAAC;KACH,MAAM;QACLhB,GAAG,CAACM,GAAG,CAAC,8DAA8D,CAAC,CAAC;QACxEN,GAAG,CAACM,GAAG,CAAC,6DAA6D,CAAC,CAAC;KACxE;IAED,OAAO,KAAK,CAAC;CACd"}
1
+ {"version":3,"sources":["../../../src/utils/git.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport chalk from 'chalk';\n\nimport { env } from './env';\nimport { isInteractive } from './interactive';\nimport { confirmAsync } from './prompts';\nimport * as Log from '../log';\n\nexport async function maybeBailOnGitStatusAsync(): Promise<boolean> {\n if (env.EXPO_NO_GIT_STATUS) {\n Log.warn(\n 'Git status is dirty but the command will continue because EXPO_NO_GIT_STATUS is enabled...'\n );\n return false;\n }\n const isGitStatusClean = await validateGitStatusAsync();\n\n // Give people a chance to bail out if git working tree is dirty\n if (!isGitStatusClean) {\n if (!isInteractive()) {\n Log.warn(\n `Git status is dirty but the command will continue because the terminal is not interactive.`\n );\n return false;\n }\n\n Log.log();\n const answer = await confirmAsync({\n message: `Would you like to proceed?`,\n });\n\n if (!answer) {\n return true;\n }\n\n Log.log();\n }\n return false;\n}\n\nexport async function validateGitStatusAsync(): Promise<boolean> {\n let workingTreeStatus = 'unknown';\n try {\n const result = await spawnAsync('git', ['status', '--porcelain']);\n workingTreeStatus = result.stdout === '' ? 'clean' : 'dirty';\n } catch {\n // Maybe git is not installed?\n // Maybe this project is not using git?\n }\n\n if (workingTreeStatus === 'clean') {\n Log.log(`Your git working tree is ${chalk.green('clean')}`);\n Log.log('To revert the changes after this command completes, you can run the following:');\n Log.log(' git clean --force && git reset --hard');\n return true;\n } else if (workingTreeStatus === 'dirty') {\n Log.log(`${chalk.bold('Warning!')} Your git working tree is ${chalk.red('dirty')}.`);\n Log.log(\n `It's recommended to ${chalk.bold(\n 'commit all your changes before proceeding'\n )}, so you can revert the changes made by this command if necessary.`\n );\n } else {\n Log.log(\"We couldn't find a git repository in your project directory.\");\n Log.log(\"It's recommended to back up your project before proceeding.\");\n }\n\n return false;\n}\n"],"names":["maybeBailOnGitStatusAsync","validateGitStatusAsync","Log","env","EXPO_NO_GIT_STATUS","warn","isGitStatusClean","isInteractive","log","answer","confirmAsync","message","workingTreeStatus","result","spawnAsync","stdout","chalk","green","bold","red"],"mappings":"AAAA;;;;QAQsBA,yBAAyB,GAAzBA,yBAAyB;QAgCzBC,sBAAsB,GAAtBA,sBAAsB;AAxCrB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AACxB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEL,IAAA,IAAO,WAAP,OAAO,CAAA;AACG,IAAA,YAAe,WAAf,eAAe,CAAA;AAChB,IAAA,QAAW,WAAX,WAAW,CAAA;AAC5BC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;;;;;;AAER,eAAeF,yBAAyB,GAAqB;IAClE,IAAIG,IAAG,IAAA,CAACC,kBAAkB,EAAE;QAC1BF,GAAG,CAACG,IAAI,CACN,4FAA4F,CAC7F,CAAC;QACF,OAAO,KAAK,CAAC;KACd;IACD,MAAMC,gBAAgB,GAAG,MAAML,sBAAsB,EAAE,AAAC;IAExD,gEAAgE;IAChE,IAAI,CAACK,gBAAgB,EAAE;QACrB,IAAI,CAACC,CAAAA,GAAAA,YAAa,AAAE,CAAA,cAAF,EAAE,EAAE;YACpBL,GAAG,CAACG,IAAI,CACN,CAAC,0FAA0F,CAAC,CAC7F,CAAC;YACF,OAAO,KAAK,CAAC;SACd;QAEDH,GAAG,CAACM,GAAG,EAAE,CAAC;QACV,MAAMC,MAAM,GAAG,MAAMC,CAAAA,GAAAA,QAAY,AAE/B,CAAA,aAF+B,CAAC;YAChCC,OAAO,EAAE,CAAC,0BAA0B,CAAC;SACtC,CAAC,AAAC;QAEH,IAAI,CAACF,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAEDP,GAAG,CAACM,GAAG,EAAE,CAAC;KACX;IACD,OAAO,KAAK,CAAC;CACd;AAEM,eAAeP,sBAAsB,GAAqB;IAC/D,IAAIW,iBAAiB,GAAG,SAAS,AAAC;IAClC,IAAI;QACF,MAAMC,MAAM,GAAG,MAAMC,CAAAA,GAAAA,WAAU,AAAkC,CAAA,QAAlC,CAAC,KAAK,EAAE;YAAC,QAAQ;YAAE,aAAa;SAAC,CAAC,AAAC;QAClEF,iBAAiB,GAAGC,MAAM,CAACE,MAAM,KAAK,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC;KAC9D,CAAC,OAAM;IACN,8BAA8B;IAC9B,uCAAuC;KACxC;IAED,IAAIH,iBAAiB,KAAK,OAAO,EAAE;QACjCV,GAAG,CAACM,GAAG,CAAC,CAAC,yBAAyB,EAAEQ,MAAK,QAAA,CAACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5Df,GAAG,CAACM,GAAG,CAAC,gFAAgF,CAAC,CAAC;QAC1FN,GAAG,CAACM,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;KACb,MAAM,IAAII,iBAAiB,KAAK,OAAO,EAAE;QACxCV,GAAG,CAACM,GAAG,CAAC,CAAC,EAAEQ,MAAK,QAAA,CAACE,IAAI,CAAC,UAAU,CAAC,CAAC,0BAA0B,EAAEF,MAAK,QAAA,CAACG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrFjB,GAAG,CAACM,GAAG,CACL,CAAC,oBAAoB,EAAEQ,MAAK,QAAA,CAACE,IAAI,CAC/B,2CAA2C,CAC5C,CAAC,kEAAkE,CAAC,CACtE,CAAC;KACH,MAAM;QACLhB,GAAG,CAACM,GAAG,CAAC,8DAA8D,CAAC,CAAC;QACxEN,GAAG,CAACM,GAAG,CAAC,6DAA6D,CAAC,CAAC;KACxE;IAED,OAAO,KAAK,CAAC;CACd"}
@@ -6,8 +6,8 @@ exports.attemptModification = attemptModification;
6
6
  exports.warnAboutConfigAndThrow = warnAboutConfigAndThrow;
7
7
  var _config = require("@expo/config");
8
8
  var _chalk = _interopRequireDefault(require("chalk"));
9
- var Log = _interopRequireWildcard(require("../log"));
10
9
  var _errors = require("./errors");
10
+ var Log = _interopRequireWildcard(require("../log"));
11
11
  function _interopRequireDefault(obj) {
12
12
  return obj && obj.__esModule ? obj : {
13
13
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/modifyConfigAsync.ts"],"sourcesContent":["import { ExpoConfig, modifyConfigAsync } from '@expo/config';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { SilentError } from './errors';\n\n/** Wraps `[@expo/config] modifyConfigAsync()` and adds additional logging. */\nexport async function attemptModification(\n projectRoot: string,\n edits: Partial<ExpoConfig>,\n exactEdits: Partial<ExpoConfig>\n): Promise<void> {\n const modification = await modifyConfigAsync(projectRoot, edits, {\n skipSDKVersionRequirement: true,\n });\n if (modification.type === 'success') {\n Log.log();\n } else {\n warnAboutConfigAndThrow(modification.type, modification.message!, exactEdits);\n }\n}\n\nfunction logNoConfig() {\n Log.log(\n chalk.yellow(\n `No Expo config was found. Please create an Expo config (${chalk.bold`app.json`} or ${chalk.bold`app.config.js`}) in your project root.`\n )\n );\n}\n\nexport function warnAboutConfigAndThrow(type: string, message: string, edits: Partial<ExpoConfig>) {\n Log.log();\n if (type === 'warn') {\n // The project is using a dynamic config, give the user a helpful log and bail out.\n Log.log(chalk.yellow(message));\n } else {\n logNoConfig();\n }\n\n notifyAboutManualConfigEdits(edits);\n throw new SilentError();\n}\n\nfunction notifyAboutManualConfigEdits(edits: Partial<ExpoConfig>) {\n Log.log(chalk.cyan(`Please add the following to your Expo config`));\n Log.log();\n Log.log(JSON.stringify(edits, null, 2));\n Log.log();\n}\n"],"names":["attemptModification","warnAboutConfigAndThrow","Log","projectRoot","edits","exactEdits","modification","modifyConfigAsync","skipSDKVersionRequirement","type","log","message","logNoConfig","chalk","yellow","bold","notifyAboutManualConfigEdits","SilentError","cyan","JSON","stringify"],"mappings":"AAAA;;;;QAOsBA,mBAAmB,GAAnBA,mBAAmB;QAuBzBC,uBAAuB,GAAvBA,uBAAuB;AA9BO,IAAA,OAAc,WAAd,cAAc,CAAA;AAC1C,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEbC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACa,IAAA,OAAU,WAAV,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG/B,eAAeF,mBAAmB,CACvCG,WAAmB,EACnBC,KAA0B,EAC1BC,UAA+B,EAChB;IACf,MAAMC,YAAY,GAAG,MAAMC,CAAAA,GAAAA,OAAiB,AAE1C,CAAA,kBAF0C,CAACJ,WAAW,EAAEC,KAAK,EAAE;QAC/DI,yBAAyB,EAAE,IAAI;KAChC,CAAC,AAAC;IACH,IAAIF,YAAY,CAACG,IAAI,KAAK,SAAS,EAAE;QACnCP,GAAG,CAACQ,GAAG,EAAE,CAAC;KACX,MAAM;QACLT,uBAAuB,CAACK,YAAY,CAACG,IAAI,EAAEH,YAAY,CAACK,OAAO,EAAGN,UAAU,CAAC,CAAC;KAC/E;CACF;AAED,SAASO,WAAW,GAAG;IACrBV,GAAG,CAACQ,GAAG,CACLG,MAAK,QAAA,CAACC,MAAM,CACV,CAAC,wDAAwD,EAAED,MAAK,QAAA,CAACE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAEF,MAAK,QAAA,CAACE,IAAI,CAAC,aAAa,CAAC,CAAC,uBAAuB,CAAC,CACzI,CACF,CAAC;CACH;AAEM,SAASd,uBAAuB,CAACQ,IAAY,EAAEE,OAAe,EAAEP,KAA0B,EAAE;IACjGF,GAAG,CAACQ,GAAG,EAAE,CAAC;IACV,IAAID,IAAI,KAAK,MAAM,EAAE;QACnB,mFAAmF;QACnFP,GAAG,CAACQ,GAAG,CAACG,MAAK,QAAA,CAACC,MAAM,CAACH,OAAO,CAAC,CAAC,CAAC;KAChC,MAAM;QACLC,WAAW,EAAE,CAAC;KACf;IAEDI,4BAA4B,CAACZ,KAAK,CAAC,CAAC;IACpC,MAAM,IAAIa,OAAW,YAAA,EAAE,CAAC;CACzB;AAED,SAASD,4BAA4B,CAACZ,KAA0B,EAAE;IAChEF,GAAG,CAACQ,GAAG,CAACG,MAAK,QAAA,CAACK,IAAI,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,CAAC;IACpEhB,GAAG,CAACQ,GAAG,EAAE,CAAC;IACVR,GAAG,CAACQ,GAAG,CAACS,IAAI,CAACC,SAAS,CAAChB,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxCF,GAAG,CAACQ,GAAG,EAAE,CAAC;CACX"}
1
+ {"version":3,"sources":["../../../src/utils/modifyConfigAsync.ts"],"sourcesContent":["import { ExpoConfig, modifyConfigAsync } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { SilentError } from './errors';\nimport * as Log from '../log';\n\n/** Wraps `[@expo/config] modifyConfigAsync()` and adds additional logging. */\nexport async function attemptModification(\n projectRoot: string,\n edits: Partial<ExpoConfig>,\n exactEdits: Partial<ExpoConfig>\n): Promise<void> {\n const modification = await modifyConfigAsync(projectRoot, edits, {\n skipSDKVersionRequirement: true,\n });\n if (modification.type === 'success') {\n Log.log();\n } else {\n warnAboutConfigAndThrow(modification.type, modification.message!, exactEdits);\n }\n}\n\nfunction logNoConfig() {\n Log.log(\n chalk.yellow(\n `No Expo config was found. Please create an Expo config (${chalk.bold`app.json`} or ${chalk.bold`app.config.js`}) in your project root.`\n )\n );\n}\n\nexport function warnAboutConfigAndThrow(type: string, message: string, edits: Partial<ExpoConfig>) {\n Log.log();\n if (type === 'warn') {\n // The project is using a dynamic config, give the user a helpful log and bail out.\n Log.log(chalk.yellow(message));\n } else {\n logNoConfig();\n }\n\n notifyAboutManualConfigEdits(edits);\n throw new SilentError();\n}\n\nfunction notifyAboutManualConfigEdits(edits: Partial<ExpoConfig>) {\n Log.log(chalk.cyan(`Please add the following to your Expo config`));\n Log.log();\n Log.log(JSON.stringify(edits, null, 2));\n Log.log();\n}\n"],"names":["attemptModification","warnAboutConfigAndThrow","Log","projectRoot","edits","exactEdits","modification","modifyConfigAsync","skipSDKVersionRequirement","type","log","message","logNoConfig","chalk","yellow","bold","notifyAboutManualConfigEdits","SilentError","cyan","JSON","stringify"],"mappings":"AAAA;;;;QAOsBA,mBAAmB,GAAnBA,mBAAmB;QAuBzBC,uBAAuB,GAAvBA,uBAAuB;AA9BO,IAAA,OAAc,WAAd,cAAc,CAAA;AAC1C,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEG,IAAA,OAAU,WAAV,UAAU,CAAA;AAC1BC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGR,eAAeF,mBAAmB,CACvCG,WAAmB,EACnBC,KAA0B,EAC1BC,UAA+B,EAChB;IACf,MAAMC,YAAY,GAAG,MAAMC,CAAAA,GAAAA,OAAiB,AAE1C,CAAA,kBAF0C,CAACJ,WAAW,EAAEC,KAAK,EAAE;QAC/DI,yBAAyB,EAAE,IAAI;KAChC,CAAC,AAAC;IACH,IAAIF,YAAY,CAACG,IAAI,KAAK,SAAS,EAAE;QACnCP,GAAG,CAACQ,GAAG,EAAE,CAAC;KACX,MAAM;QACLT,uBAAuB,CAACK,YAAY,CAACG,IAAI,EAAEH,YAAY,CAACK,OAAO,EAAGN,UAAU,CAAC,CAAC;KAC/E;CACF;AAED,SAASO,WAAW,GAAG;IACrBV,GAAG,CAACQ,GAAG,CACLG,MAAK,QAAA,CAACC,MAAM,CACV,CAAC,wDAAwD,EAAED,MAAK,QAAA,CAACE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAEF,MAAK,QAAA,CAACE,IAAI,CAAC,aAAa,CAAC,CAAC,uBAAuB,CAAC,CACzI,CACF,CAAC;CACH;AAEM,SAASd,uBAAuB,CAACQ,IAAY,EAAEE,OAAe,EAAEP,KAA0B,EAAE;IACjGF,GAAG,CAACQ,GAAG,EAAE,CAAC;IACV,IAAID,IAAI,KAAK,MAAM,EAAE;QACnB,mFAAmF;QACnFP,GAAG,CAACQ,GAAG,CAACG,MAAK,QAAA,CAACC,MAAM,CAACH,OAAO,CAAC,CAAC,CAAC;KAChC,MAAM;QACLC,WAAW,EAAE,CAAC;KACf;IAEDI,4BAA4B,CAACZ,KAAK,CAAC,CAAC;IACpC,MAAM,IAAIa,OAAW,YAAA,EAAE,CAAC;CACzB;AAED,SAASD,4BAA4B,CAACZ,KAA0B,EAAE;IAChEF,GAAG,CAACQ,GAAG,CAACG,MAAK,QAAA,CAACK,IAAI,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,CAAC;IACpEhB,GAAG,CAACQ,GAAG,EAAE,CAAC;IACVR,GAAG,CAACQ,GAAG,CAACS,IAAI,CAACC,SAAS,CAAChB,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxCF,GAAG,CAACQ,GAAG,EAAE,CAAC;CACX"}
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.attemptAddingPluginsAsync = attemptAddingPluginsAsync;
6
6
  var _config = require("@expo/config");
7
- var Log = _interopRequireWildcard(require("../log"));
8
7
  var _modifyConfigAsync = require("./modifyConfigAsync");
8
+ var Log = _interopRequireWildcard(require("../log"));
9
9
  function _interopRequireWildcard(obj) {
10
10
  if (obj && obj.__esModule) {
11
11
  return obj;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/modifyConfigPlugins.ts"],"sourcesContent":["import { ExpoConfig, modifyConfigAsync } from '@expo/config';\n\nimport * as Log from '../log';\nimport { warnAboutConfigAndThrow } from './modifyConfigAsync';\n\nexport async function attemptAddingPluginsAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'plugins'>,\n plugins: string[]\n): Promise<void> {\n if (!plugins.length) return;\n\n const edits = {\n plugins: [...new Set((exp.plugins || []).concat(plugins))],\n };\n const modification = await modifyConfigAsync(projectRoot, edits, {\n skipSDKVersionRequirement: true,\n skipPlugins: true,\n });\n if (modification.type === 'success') {\n Log.log(`\\u203A Added config plugin${plugins.length === 1 ? '' : 's'}: ${plugins.join(', ')}`);\n } else {\n const exactEdits = {\n plugins,\n };\n warnAboutConfigAndThrow(modification.type, modification.message!, exactEdits);\n }\n}\n"],"names":["attemptAddingPluginsAsync","Log","projectRoot","exp","plugins","length","edits","Set","concat","modification","modifyConfigAsync","skipSDKVersionRequirement","skipPlugins","type","log","join","exactEdits","warnAboutConfigAndThrow","message"],"mappings":"AAAA;;;;QAKsBA,yBAAyB,GAAzBA,yBAAyB;AALD,IAAA,OAAc,WAAd,cAAc,CAAA;AAEhDC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACyB,IAAA,kBAAqB,WAArB,qBAAqB,CAAA;;;;;;;;;;;;;;;;;;;;;;AAEtD,eAAeD,yBAAyB,CAC7CE,WAAmB,EACnBC,GAAgC,EAChCC,OAAiB,EACF;IACf,IAAI,CAACA,OAAO,CAACC,MAAM,EAAE,OAAO;IAE5B,MAAMC,KAAK,GAAG;QACZF,OAAO,EAAE;eAAI,IAAIG,GAAG,CAAC,CAACJ,GAAG,CAACC,OAAO,IAAI,EAAE,CAAC,CAACI,MAAM,CAACJ,OAAO,CAAC,CAAC;SAAC;KAC3D,AAAC;IACF,MAAMK,YAAY,GAAG,MAAMC,CAAAA,GAAAA,OAAiB,AAG1C,CAAA,kBAH0C,CAACR,WAAW,EAAEI,KAAK,EAAE;QAC/DK,yBAAyB,EAAE,IAAI;QAC/BC,WAAW,EAAE,IAAI;KAClB,CAAC,AAAC;IACH,IAAIH,YAAY,CAACI,IAAI,KAAK,SAAS,EAAE;QACnCZ,GAAG,CAACa,GAAG,CAAC,CAAC,0BAA0B,EAAEV,OAAO,CAACC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAED,OAAO,CAACW,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAChG,MAAM;QACL,MAAMC,UAAU,GAAG;YACjBZ,OAAO;SACR,AAAC;QACFa,CAAAA,GAAAA,kBAAuB,AAAsD,CAAA,wBAAtD,CAACR,YAAY,CAACI,IAAI,EAAEJ,YAAY,CAACS,OAAO,EAAGF,UAAU,CAAC,CAAC;KAC/E;CACF"}
1
+ {"version":3,"sources":["../../../src/utils/modifyConfigPlugins.ts"],"sourcesContent":["import { ExpoConfig, modifyConfigAsync } from '@expo/config';\n\nimport { warnAboutConfigAndThrow } from './modifyConfigAsync';\nimport * as Log from '../log';\n\nexport async function attemptAddingPluginsAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'plugins'>,\n plugins: string[]\n): Promise<void> {\n if (!plugins.length) return;\n\n const edits = {\n plugins: [...new Set((exp.plugins || []).concat(plugins))],\n };\n const modification = await modifyConfigAsync(projectRoot, edits, {\n skipSDKVersionRequirement: true,\n skipPlugins: true,\n });\n if (modification.type === 'success') {\n Log.log(`\\u203A Added config plugin${plugins.length === 1 ? '' : 's'}: ${plugins.join(', ')}`);\n } else {\n const exactEdits = {\n plugins,\n };\n warnAboutConfigAndThrow(modification.type, modification.message!, exactEdits);\n }\n}\n"],"names":["attemptAddingPluginsAsync","Log","projectRoot","exp","plugins","length","edits","Set","concat","modification","modifyConfigAsync","skipSDKVersionRequirement","skipPlugins","type","log","join","exactEdits","warnAboutConfigAndThrow","message"],"mappings":"AAAA;;;;QAKsBA,yBAAyB,GAAzBA,yBAAyB;AALD,IAAA,OAAc,WAAd,cAAc,CAAA;AAEpB,IAAA,kBAAqB,WAArB,qBAAqB,CAAA;AACjDC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;AAER,eAAeD,yBAAyB,CAC7CE,WAAmB,EACnBC,GAAgC,EAChCC,OAAiB,EACF;IACf,IAAI,CAACA,OAAO,CAACC,MAAM,EAAE,OAAO;IAE5B,MAAMC,KAAK,GAAG;QACZF,OAAO,EAAE;eAAI,IAAIG,GAAG,CAAC,CAACJ,GAAG,CAACC,OAAO,IAAI,EAAE,CAAC,CAACI,MAAM,CAACJ,OAAO,CAAC,CAAC;SAAC;KAC3D,AAAC;IACF,MAAMK,YAAY,GAAG,MAAMC,CAAAA,GAAAA,OAAiB,AAG1C,CAAA,kBAH0C,CAACR,WAAW,EAAEI,KAAK,EAAE;QAC/DK,yBAAyB,EAAE,IAAI;QAC/BC,WAAW,EAAE,IAAI;KAClB,CAAC,AAAC;IACH,IAAIH,YAAY,CAACI,IAAI,KAAK,SAAS,EAAE;QACnCZ,GAAG,CAACa,GAAG,CAAC,CAAC,0BAA0B,EAAEV,OAAO,CAACC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAED,OAAO,CAACW,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAChG,MAAM;QACL,MAAMC,UAAU,GAAG;YACjBZ,OAAO;SACR,AAAC;QACFa,CAAAA,GAAAA,kBAAuB,AAAsD,CAAA,wBAAtD,CAACR,YAAY,CAACI,IAAI,EAAEJ,YAAY,CAACS,OAAO,EAAGF,UAAU,CAAC,CAAC;KAC/E;CACF"}
@@ -16,10 +16,10 @@ var _slugify = _interopRequireDefault(require("slugify"));
16
16
  var _stream = require("stream");
17
17
  var _tar = _interopRequireDefault(require("tar"));
18
18
  var _util = require("util");
19
- var _client = require("../api/rest/client");
20
19
  var _createFileTransform = require("./createFileTransform");
21
20
  var _dir = require("./dir");
22
21
  var _errors = require("./errors");
22
+ var _client = require("../api/rest/client");
23
23
  function _interopRequireDefault(obj) {
24
24
  return obj && obj.__esModule ? obj : {
25
25
  default: obj