@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/npm.ts"],"sourcesContent":["import { JSONValue } from '@expo/json-file';\nimport spawnAsync from '@expo/spawn-async';\nimport assert from 'assert';\nimport fs from 'fs';\nimport slugify from 'slugify';\nimport { Stream } from 'stream';\nimport tar from 'tar';\nimport { promisify } from 'util';\n\nimport { createCachedFetch } from '../api/rest/client';\nimport { createEntryResolver, createFileTransform } from './createFileTransform';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\n\nconst debug = require('debug')('expo:utils:npm') as typeof console.log;\n\nconst cachedFetch = createCachedFetch({\n cacheDirectory: 'template-cache',\n // Time to live. How long (in ms) responses remain cached before being automatically ejected. If undefined, responses are never automatically ejected from the cache.\n // ttl: 1000,\n});\n\nexport function sanitizeNpmPackageName(name: string): string {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n return (\n applyKnownNpmPackageNameRules(name) ||\n applyKnownNpmPackageNameRules(slugify(name)) ||\n // If nothing is left use 'app' like we do in Xcode projects.\n 'app'\n );\n}\n\nfunction applyKnownNpmPackageNameRules(name: string): string | null {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n\n // package name cannot start with '.' or '_'.\n while (/^(\\.|_)/.test(name)) {\n name = name.substring(1);\n }\n\n name = name.toLowerCase().replace(/[^a-zA-Z._\\-/@]/g, '');\n\n return (\n name\n // .replace(/![a-z0-9-._~]+/g, '')\n // Remove special characters\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') || null\n );\n}\n\nexport async function npmViewAsync(...props: string[]): Promise<JSONValue> {\n const cmd = ['view', ...props, '--json'];\n const results = (await spawnAsync('npm', cmd)).stdout?.trim();\n const cmdString = `npm ${cmd.join(' ')}`;\n debug('Run:', cmdString);\n if (!results) {\n return null;\n }\n try {\n return JSON.parse(results);\n } catch (error: any) {\n throw new Error(\n `Could not parse JSON returned from \"${cmdString}\".\\n\\n${results}\\n\\nError: ${error.message}`\n );\n }\n}\n\n/** Given a package name like `expo` or `expo@beta`, return the registry URL if it exists. */\nexport async function getNpmUrlAsync(packageName: string): Promise<string> {\n const results = await npmViewAsync(packageName, 'dist.tarball');\n\n assert(results, `Could not get npm url for package \"${packageName}\"`);\n\n // Fully qualified url returns a string.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@sdk-33 dist.tarball --json\n if (typeof results === 'string') {\n return results;\n }\n\n // When the tag is arbitrary, the tarball url is an array, return the last value as it's the most recent.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@33 dist.tarball --json\n if (Array.isArray(results)) {\n return results[results.length - 1] as string;\n }\n\n throw new CommandError(\n 'Expected results of `npm view ...` to be an array or string. Instead found: ' + results\n );\n}\n\n// @ts-ignore\nconst pipeline = promisify(Stream.pipeline);\n\nexport async function downloadAndExtractNpmModuleAsync(\n npmName: string,\n props: ExtractProps\n): Promise<void> {\n const url = await getNpmUrlAsync(npmName);\n\n debug('Fetch from URL:', url);\n await extractNpmTarballFromUrlAsync(url, props);\n}\n\nexport async function extractLocalNpmTarballAsync(\n tarFilePath: string,\n props: ExtractProps\n): Promise<void> {\n const readStream = fs.createReadStream(tarFilePath);\n await extractNpmTarballAsync(readStream, props);\n}\n\ntype ExtractProps = {\n name: string;\n cwd: string;\n strip?: number;\n fileList?: string[];\n};\n\nasync function createUrlStreamAsync(url: string) {\n const response = await cachedFetch(url);\n if (!response.ok) {\n throw new Error(`Unexpected response: ${response.statusText}. From url: ${url}`);\n }\n\n return response.body;\n}\n\nexport async function extractNpmTarballFromUrlAsync(\n url: string,\n props: ExtractProps\n): Promise<void> {\n await extractNpmTarballAsync(await createUrlStreamAsync(url), props);\n}\n\nexport async function extractNpmTarballAsync(\n stream: NodeJS.ReadableStream,\n props: ExtractProps\n): Promise<void> {\n const { cwd, strip, name, fileList = [] } = props;\n\n await ensureDirectoryAsync(cwd);\n\n await pipeline(\n stream,\n tar.extract(\n {\n cwd,\n transform: createFileTransform(name),\n onentry: createEntryResolver(name),\n strip: strip ?? 1,\n },\n fileList\n )\n );\n}\n"],"names":["sanitizeNpmPackageName","npmViewAsync","getNpmUrlAsync","downloadAndExtractNpmModuleAsync","extractLocalNpmTarballAsync","extractNpmTarballFromUrlAsync","extractNpmTarballAsync","debug","require","cachedFetch","createCachedFetch","cacheDirectory","name","applyKnownNpmPackageNameRules","slugify","test","substring","toLowerCase","replace","normalize","props","cmd","results","spawnAsync","stdout","trim","cmdString","join","JSON","parse","error","Error","message","packageName","assert","Array","isArray","length","CommandError","pipeline","promisify","Stream","npmName","url","tarFilePath","readStream","fs","createReadStream","createUrlStreamAsync","response","ok","statusText","body","stream","cwd","strip","fileList","ensureDirectoryAsync","tar","extract","transform","createFileTransform","onentry","createEntryResolver"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/npm.ts"],"sourcesContent":["import { JSONValue } from '@expo/json-file';\nimport spawnAsync from '@expo/spawn-async';\nimport assert from 'assert';\nimport fs from 'fs';\nimport slugify from 'slugify';\nimport { Stream } from 'stream';\nimport tar from 'tar';\nimport { promisify } from 'util';\n\nimport { createEntryResolver, createFileTransform } from './createFileTransform';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { createCachedFetch } from '../api/rest/client';\n\nconst debug = require('debug')('expo:utils:npm') as typeof console.log;\n\nconst cachedFetch = createCachedFetch({\n cacheDirectory: 'template-cache',\n // Time to live. How long (in ms) responses remain cached before being automatically ejected. If undefined, responses are never automatically ejected from the cache.\n // ttl: 1000,\n});\n\nexport function sanitizeNpmPackageName(name: string): string {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n return (\n applyKnownNpmPackageNameRules(name) ||\n applyKnownNpmPackageNameRules(slugify(name)) ||\n // If nothing is left use 'app' like we do in Xcode projects.\n 'app'\n );\n}\n\nfunction applyKnownNpmPackageNameRules(name: string): string | null {\n // https://github.com/npm/validate-npm-package-name/#naming-rules\n\n // package name cannot start with '.' or '_'.\n while (/^(\\.|_)/.test(name)) {\n name = name.substring(1);\n }\n\n name = name.toLowerCase().replace(/[^a-zA-Z._\\-/@]/g, '');\n\n return (\n name\n // .replace(/![a-z0-9-._~]+/g, '')\n // Remove special characters\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') || null\n );\n}\n\nexport async function npmViewAsync(...props: string[]): Promise<JSONValue> {\n const cmd = ['view', ...props, '--json'];\n const results = (await spawnAsync('npm', cmd)).stdout?.trim();\n const cmdString = `npm ${cmd.join(' ')}`;\n debug('Run:', cmdString);\n if (!results) {\n return null;\n }\n try {\n return JSON.parse(results);\n } catch (error: any) {\n throw new Error(\n `Could not parse JSON returned from \"${cmdString}\".\\n\\n${results}\\n\\nError: ${error.message}`\n );\n }\n}\n\n/** Given a package name like `expo` or `expo@beta`, return the registry URL if it exists. */\nexport async function getNpmUrlAsync(packageName: string): Promise<string> {\n const results = await npmViewAsync(packageName, 'dist.tarball');\n\n assert(results, `Could not get npm url for package \"${packageName}\"`);\n\n // Fully qualified url returns a string.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@sdk-33 dist.tarball --json\n if (typeof results === 'string') {\n return results;\n }\n\n // When the tag is arbitrary, the tarball url is an array, return the last value as it's the most recent.\n // Example:\n // 𝝠 npm view expo-template-bare-minimum@33 dist.tarball --json\n if (Array.isArray(results)) {\n return results[results.length - 1] as string;\n }\n\n throw new CommandError(\n 'Expected results of `npm view ...` to be an array or string. Instead found: ' + results\n );\n}\n\n// @ts-ignore\nconst pipeline = promisify(Stream.pipeline);\n\nexport async function downloadAndExtractNpmModuleAsync(\n npmName: string,\n props: ExtractProps\n): Promise<void> {\n const url = await getNpmUrlAsync(npmName);\n\n debug('Fetch from URL:', url);\n await extractNpmTarballFromUrlAsync(url, props);\n}\n\nexport async function extractLocalNpmTarballAsync(\n tarFilePath: string,\n props: ExtractProps\n): Promise<void> {\n const readStream = fs.createReadStream(tarFilePath);\n await extractNpmTarballAsync(readStream, props);\n}\n\ntype ExtractProps = {\n name: string;\n cwd: string;\n strip?: number;\n fileList?: string[];\n};\n\nasync function createUrlStreamAsync(url: string) {\n const response = await cachedFetch(url);\n if (!response.ok) {\n throw new Error(`Unexpected response: ${response.statusText}. From url: ${url}`);\n }\n\n return response.body;\n}\n\nexport async function extractNpmTarballFromUrlAsync(\n url: string,\n props: ExtractProps\n): Promise<void> {\n await extractNpmTarballAsync(await createUrlStreamAsync(url), props);\n}\n\nexport async function extractNpmTarballAsync(\n stream: NodeJS.ReadableStream,\n props: ExtractProps\n): Promise<void> {\n const { cwd, strip, name, fileList = [] } = props;\n\n await ensureDirectoryAsync(cwd);\n\n await pipeline(\n stream,\n tar.extract(\n {\n cwd,\n transform: createFileTransform(name),\n onentry: createEntryResolver(name),\n strip: strip ?? 1,\n },\n fileList\n )\n );\n}\n"],"names":["sanitizeNpmPackageName","npmViewAsync","getNpmUrlAsync","downloadAndExtractNpmModuleAsync","extractLocalNpmTarballAsync","extractNpmTarballFromUrlAsync","extractNpmTarballAsync","debug","require","cachedFetch","createCachedFetch","cacheDirectory","name","applyKnownNpmPackageNameRules","slugify","test","substring","toLowerCase","replace","normalize","props","cmd","results","spawnAsync","stdout","trim","cmdString","join","JSON","parse","error","Error","message","packageName","assert","Array","isArray","length","CommandError","pipeline","promisify","Stream","npmName","url","tarFilePath","readStream","fs","createReadStream","createUrlStreamAsync","response","ok","statusText","body","stream","cwd","strip","fileList","ensureDirectoryAsync","tar","extract","transform","createFileTransform","onentry","createEntryResolver"],"mappings":"AAAA;;;;QAsBgBA,sBAAsB,GAAtBA,sBAAsB;QA6BhBC,YAAY,GAAZA,YAAY;QAkBZC,cAAc,GAAdA,cAAc;QA2BdC,gCAAgC,GAAhCA,gCAAgC;QAUhCC,2BAA2B,GAA3BA,2BAA2B;QAwB3BC,6BAA6B,GAA7BA,6BAA6B;QAO7BC,sBAAsB,GAAtBA,sBAAsB;AAxIrB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AACvB,IAAA,OAAQ,kCAAR,QAAQ,EAAA;AACZ,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACC,IAAA,QAAS,kCAAT,SAAS,EAAA;AACN,IAAA,OAAQ,WAAR,QAAQ,CAAA;AACf,IAAA,IAAK,kCAAL,KAAK,EAAA;AACK,IAAA,KAAM,WAAN,MAAM,CAAA;AAEyB,IAAA,oBAAuB,WAAvB,uBAAuB,CAAA;AAC3C,IAAA,IAAO,WAAP,OAAO,CAAA;AACf,IAAA,OAAU,WAAV,UAAU,CAAA;AACL,IAAA,OAAoB,WAApB,oBAAoB,CAAA;;;;;;AAEtD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,AAAsB,AAAC;AAEvE,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,OAAiB,AAInC,CAAA,kBAJmC,CAAC;IACpCC,cAAc,EAAE,gBAAgB;CAGjC,CAAC,AAAC;AAEI,SAASX,sBAAsB,CAACY,IAAY,EAAU;IAC3D,iEAAiE;IACjE,OACEC,6BAA6B,CAACD,IAAI,CAAC,IACnCC,6BAA6B,CAACC,CAAAA,GAAAA,QAAO,AAAM,CAAA,QAAN,CAACF,IAAI,CAAC,CAAC,IAC5C,6DAA6D;IAC7D,KAAK,CACL;CACH;AAED,SAASC,6BAA6B,CAACD,IAAY,EAAiB;IAClE,iEAAiE;IAEjE,6CAA6C;IAC7C,MAAO,UAAUG,IAAI,CAACH,IAAI,CAAC,CAAE;QAC3BA,IAAI,GAAGA,IAAI,CAACI,SAAS,CAAC,CAAC,CAAC,CAAC;KAC1B;IAEDJ,IAAI,GAAGA,IAAI,CAACK,WAAW,EAAE,CAACC,OAAO,qBAAqB,EAAE,CAAC,CAAC;IAE1D,OACEN,IAAI,AACF,kCAAkC;IAClC,4BAA4B;KAC3BO,SAAS,CAAC,KAAK,CAAC,CAChBD,OAAO,qBAAqB,EAAE,CAAC,IAAI,IAAI,CAC1C;CACH;AAEM,eAAejB,YAAY,CAAC,GAAGmB,KAAK,AAAU,EAAsB;QAEzD,GAAqC;IADrD,MAAMC,GAAG,GAAG;QAAC,MAAM;WAAKD,KAAK;QAAE,QAAQ;KAAC,AAAC;IACzC,MAAME,OAAO,GAAG,CAAA,GAAqC,GAArC,CAAC,MAAMC,CAAAA,GAAAA,WAAU,AAAY,CAAA,QAAZ,CAAC,KAAK,EAAEF,GAAG,CAAC,CAAC,CAACG,MAAM,SAAM,GAA3C,KAAA,CAA2C,GAA3C,GAAqC,CAAEC,IAAI,EAAE,AAAC;IAC9D,MAAMC,SAAS,GAAG,CAAC,IAAI,EAAEL,GAAG,CAACM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,AAAC;IACzCpB,KAAK,CAAC,MAAM,EAAEmB,SAAS,CAAC,CAAC;IACzB,IAAI,CAACJ,OAAO,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;IACD,IAAI;QACF,OAAOM,IAAI,CAACC,KAAK,CAACP,OAAO,CAAC,CAAC;KAC5B,CAAC,OAAOQ,KAAK,EAAO;QACnB,MAAM,IAAIC,KAAK,CACb,CAAC,oCAAoC,EAAEL,SAAS,CAAC,MAAM,EAAEJ,OAAO,CAAC,WAAW,EAAEQ,KAAK,CAACE,OAAO,CAAC,CAAC,CAC9F,CAAC;KACH;CACF;AAGM,eAAe9B,cAAc,CAAC+B,WAAmB,EAAmB;IACzE,MAAMX,OAAO,GAAG,MAAMrB,YAAY,CAACgC,WAAW,EAAE,cAAc,CAAC,AAAC;IAEhEC,CAAAA,GAAAA,OAAM,AAA+D,CAAA,QAA/D,CAACZ,OAAO,EAAE,CAAC,mCAAmC,EAAEW,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,wCAAwC;IACxC,WAAW;IACX,sEAAmE;IAChE,IAAC,OAAOX,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAOA,OAAO,CAAC;KAChB;IAED,yGAAyG;IACzG,WAAW;IACX,kEAA+D;IAC/D,IAAIa,KAAK,CAACC,OAAO,CAACd,OAAO,CAAC,EAAE;QAC1B,OAAOA,OAAO,CAACA,OAAO,CAACe,MAAM,GAAG,CAAC,CAAC,CAAW;KAC9C;IAED,MAAM,IAAIC,OAAY,aAAA,CACpB,8EAA8E,GAAGhB,OAAO,CACzF,CAAC;CACH;AAED,aAAa;AACb,MAAMiB,QAAQ,GAAGC,CAAAA,GAAAA,KAAS,AAAiB,CAAA,UAAjB,CAACC,OAAM,OAAA,CAACF,QAAQ,CAAC,AAAC;AAErC,eAAepC,gCAAgC,CACpDuC,OAAe,EACftB,KAAmB,EACJ;IACf,MAAMuB,GAAG,GAAG,MAAMzC,cAAc,CAACwC,OAAO,CAAC,AAAC;IAE1CnC,KAAK,CAAC,iBAAiB,EAAEoC,GAAG,CAAC,CAAC;IAC9B,MAAMtC,6BAA6B,CAACsC,GAAG,EAAEvB,KAAK,CAAC,CAAC;CACjD;AAEM,eAAehB,2BAA2B,CAC/CwC,WAAmB,EACnBxB,KAAmB,EACJ;IACf,MAAMyB,UAAU,GAAGC,GAAE,QAAA,CAACC,gBAAgB,CAACH,WAAW,CAAC,AAAC;IACpD,MAAMtC,sBAAsB,CAACuC,UAAU,EAAEzB,KAAK,CAAC,CAAC;CACjD;AASD,eAAe4B,oBAAoB,CAACL,GAAW,EAAE;IAC/C,MAAMM,QAAQ,GAAG,MAAMxC,WAAW,CAACkC,GAAG,CAAC,AAAC;IACxC,IAAI,CAACM,QAAQ,CAACC,EAAE,EAAE;QAChB,MAAM,IAAInB,KAAK,CAAC,CAAC,qBAAqB,EAAEkB,QAAQ,CAACE,UAAU,CAAC,YAAY,EAAER,GAAG,CAAC,CAAC,CAAC,CAAC;KAClF;IAED,OAAOM,QAAQ,CAACG,IAAI,CAAC;CACtB;AAEM,eAAe/C,6BAA6B,CACjDsC,GAAW,EACXvB,KAAmB,EACJ;IACf,MAAMd,sBAAsB,CAAC,MAAM0C,oBAAoB,CAACL,GAAG,CAAC,EAAEvB,KAAK,CAAC,CAAC;CACtE;AAEM,eAAed,sBAAsB,CAC1C+C,MAA6B,EAC7BjC,KAAmB,EACJ;IACf,MAAM,EAAEkC,GAAG,CAAA,EAAEC,KAAK,CAAA,EAAE3C,IAAI,CAAA,EAAE4C,QAAQ,EAAG,EAAE,CAAA,EAAE,GAAGpC,KAAK,AAAC;IAElD,MAAMqC,CAAAA,GAAAA,IAAoB,AAAK,CAAA,qBAAL,CAACH,GAAG,CAAC,CAAC;IAEhC,MAAMf,QAAQ,CACZc,MAAM,EACNK,IAAG,QAAA,CAACC,OAAO,CACT;QACEL,GAAG;QACHM,SAAS,EAAEC,CAAAA,GAAAA,oBAAmB,AAAM,CAAA,oBAAN,CAACjD,IAAI,CAAC;QACpCkD,OAAO,EAAEC,CAAAA,GAAAA,oBAAmB,AAAM,CAAA,oBAAN,CAACnD,IAAI,CAAC;QAClC2C,KAAK,EAAEA,KAAK,WAALA,KAAK,GAAI,CAAC;KAClB,EACDC,QAAQ,CACT,CACF,CAAC;CACH"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/obj.ts"],"sourcesContent":["/** `lodash.get` */\nexport function get(obj: any, key: string): any | null {\n const branches = key.split('.');\n let current: any = obj;\n let branch: string | undefined;\n while ((branch = branches.shift())) {\n if (!(branch in current)) {\n return null;\n }\n current = current[branch];\n }\n return current;\n}\n\n/** `lodash.set` */\nexport function set(obj: any, key: string, value: any): any | null {\n const branches = key.split('.');\n let current: any = obj;\n let branch: string | undefined;\n while ((branch = branches.shift())) {\n if (branches.length === 0) {\n current[branch] = value;\n return obj;\n }\n\n if (!(branch in current)) {\n current[branch] = {};\n }\n\n current = current[branch];\n }\n return null;\n}\n\n/** `lodash.pickBy` */\nexport function pickBy<T>(\n obj: { [key: string]: T },\n predicate: (value: T, key: string) => boolean | undefined\n) {\n return Object.entries(obj).reduce((acc, [key, value]) => {\n if (predicate(value, key)) {\n acc[key] = value;\n }\n return acc;\n }, {} as { [key: string]: T });\n}\n"],"names":["get","set","pickBy","obj","key","branches","split","current","branch","shift","value","length","predicate","Object","entries","reduce","acc"],"mappings":"AACA;;;;QAAgBA,GAAG,GAAHA,GAAG;QAcHC,GAAG,GAAHA,GAAG;QAoBHC,MAAM,GAANA,MAAM;AAlCf,SAASF,GAAG,CAACG,GAAQ,EAAEC,GAAW,EAAc;IACrD,MAAMC,QAAQ,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC,AAAC;IAChC,IAAIC,OAAO,GAAQJ,GAAG,AAAC;IACvB,IAAIK,MAAM,AAAoB,AAAC;IAC/B,MAAQA,MAAM,GAAGH,QAAQ,CAACI,KAAK,EAAE,CAAG;QAClC,IAAI,CAAC,CAACD,MAAM,IAAID,OAAO,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC;SACb;QACDA,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC,CAAC;KAC3B;IACD,OAAOD,OAAO,CAAC;CAChB;AAGM,SAASN,GAAG,CAACE,GAAQ,EAAEC,GAAW,EAAEM,KAAU,EAAc;IACjE,MAAML,QAAQ,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC,AAAC;IAChC,IAAIC,OAAO,GAAQJ,GAAG,AAAC;IACvB,IAAIK,MAAM,AAAoB,AAAC;IAC/B,MAAQA,MAAM,GAAGH,QAAQ,CAACI,KAAK,EAAE,CAAG;QAClC,IAAIJ,QAAQ,CAACM,MAAM,KAAK,CAAC,EAAE;YACzBJ,OAAO,CAACC,MAAM,CAAC,GAAGE,KAAK,CAAC;YACxB,OAAOP,GAAG,CAAC;SACZ;QAED,IAAI,CAAC,CAACK,MAAM,IAAID,OAAO,CAAC,EAAE;YACxBA,OAAO,CAACC,MAAM,CAAC,GAAG,EAAE,CAAC;SACtB;QAEDD,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC,CAAC;KAC3B;IACD,OAAO,IAAI,CAAC;CACb;AAGM,SAASN,MAAM,CACpBC,GAAyB,EACzBS,SAAyD,EACzD;IACA,OAAOC,MAAM,CAACC,OAAO,CAACX,GAAG,CAAC,CAACY,MAAM,CAAC,CAACC,GAAG,EAAE,CAACZ,GAAG,EAAEM,KAAK,CAAC,GAAK;QACvD,IAAIE,SAAS,CAACF,KAAK,EAAEN,GAAG,CAAC,EAAE;YACzBY,GAAG,CAACZ,GAAG,CAAC,GAAGM,KAAK,CAAC;SAClB;QACD,OAAOM,GAAG,CAAC;KACZ,EAAE,EAAE,CAAyB,CAAC;CAChC"}
1
+ {"version":3,"sources":["../../../src/utils/obj.ts"],"sourcesContent":["/** `lodash.get` */\nexport function get(obj: any, key: string): any | null {\n const branches = key.split('.');\n let current: any = obj;\n let branch: string | undefined;\n while ((branch = branches.shift())) {\n if (!(branch in current)) {\n return null;\n }\n current = current[branch];\n }\n return current;\n}\n\n/** `lodash.set` */\nexport function set(obj: any, key: string, value: any): any | null {\n const branches = key.split('.');\n let current: any = obj;\n let branch: string | undefined;\n while ((branch = branches.shift())) {\n if (branches.length === 0) {\n current[branch] = value;\n return obj;\n }\n\n if (!(branch in current)) {\n current[branch] = {};\n }\n\n current = current[branch];\n }\n return null;\n}\n\n/** `lodash.pickBy` */\nexport function pickBy<T>(\n obj: { [key: string]: T },\n predicate: (value: T, key: string) => boolean | undefined\n) {\n return Object.entries(obj).reduce(\n (acc, [key, value]) => {\n if (predicate(value, key)) {\n acc[key] = value;\n }\n return acc;\n },\n {} as { [key: string]: T }\n );\n}\n"],"names":["get","set","pickBy","obj","key","branches","split","current","branch","shift","value","length","predicate","Object","entries","reduce","acc"],"mappings":"AACA;;;;QAAgBA,GAAG,GAAHA,GAAG;QAcHC,GAAG,GAAHA,GAAG;QAoBHC,MAAM,GAANA,MAAM;AAlCf,SAASF,GAAG,CAACG,GAAQ,EAAEC,GAAW,EAAc;IACrD,MAAMC,QAAQ,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC,AAAC;IAChC,IAAIC,OAAO,GAAQJ,GAAG,AAAC;IACvB,IAAIK,MAAM,AAAoB,AAAC;IAC/B,MAAQA,MAAM,GAAGH,QAAQ,CAACI,KAAK,EAAE,CAAG;QAClC,IAAI,CAAC,CAACD,MAAM,IAAID,OAAO,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC;SACb;QACDA,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC,CAAC;KAC3B;IACD,OAAOD,OAAO,CAAC;CAChB;AAGM,SAASN,GAAG,CAACE,GAAQ,EAAEC,GAAW,EAAEM,KAAU,EAAc;IACjE,MAAML,QAAQ,GAAGD,GAAG,CAACE,KAAK,CAAC,GAAG,CAAC,AAAC;IAChC,IAAIC,OAAO,GAAQJ,GAAG,AAAC;IACvB,IAAIK,MAAM,AAAoB,AAAC;IAC/B,MAAQA,MAAM,GAAGH,QAAQ,CAACI,KAAK,EAAE,CAAG;QAClC,IAAIJ,QAAQ,CAACM,MAAM,KAAK,CAAC,EAAE;YACzBJ,OAAO,CAACC,MAAM,CAAC,GAAGE,KAAK,CAAC;YACxB,OAAOP,GAAG,CAAC;SACZ;QAED,IAAI,CAAC,CAACK,MAAM,IAAID,OAAO,CAAC,EAAE;YACxBA,OAAO,CAACC,MAAM,CAAC,GAAG,EAAE,CAAC;SACtB;QAEDD,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC,CAAC;KAC3B;IACD,OAAO,IAAI,CAAC;CACb;AAGM,SAASN,MAAM,CACpBC,GAAyB,EACzBS,SAAyD,EACzD;IACA,OAAOC,MAAM,CAACC,OAAO,CAACX,GAAG,CAAC,CAACY,MAAM,CAC/B,CAACC,GAAG,EAAE,CAACZ,GAAG,EAAEM,KAAK,CAAC,GAAK;QACrB,IAAIE,SAAS,CAACF,KAAK,EAAEN,GAAG,CAAC,EAAE;YACzBY,GAAG,CAACZ,GAAG,CAAC,GAAGM,KAAK,CAAC;SAClB;QACD,OAAOM,GAAG,CAAC;KACZ,EACD,EAAE,CACH,CAAC;CACH"}
@@ -7,8 +7,8 @@ exports.parsePlistBuffer = parsePlistBuffer;
7
7
  var _plist = _interopRequireDefault(require("@expo/plist"));
8
8
  var _bplistParser = _interopRequireDefault(require("bplist-parser"));
9
9
  var _promises = _interopRequireDefault(require("fs/promises"));
10
- var Log = _interopRequireWildcard(require("../log"));
11
10
  var _errors = require("./errors");
11
+ var Log = _interopRequireWildcard(require("../log"));
12
12
  function _interopRequireDefault(obj) {
13
13
  return obj && obj.__esModule ? obj : {
14
14
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/plist.ts"],"sourcesContent":["import plist from '@expo/plist';\nimport binaryPlist from 'bplist-parser';\nimport fs from 'fs/promises';\n\nimport * as Log from '../log';\nimport { CommandError } from './errors';\n\nconst CHAR_CHEVRON_OPEN = 60;\nconst CHAR_B_LOWER = 98;\n// .mobileprovision\n// const CHAR_ZERO = 30;\n\nexport async function parsePlistAsync(plistPath: string) {\n Log.debug(`Parse plist: ${plistPath}`);\n\n return parsePlistBuffer(await fs.readFile(plistPath));\n}\n\nexport function parsePlistBuffer(contents: Buffer) {\n if (contents[0] === CHAR_CHEVRON_OPEN) {\n const info = plist.parse(contents.toString());\n if (Array.isArray(info)) return info[0];\n return info;\n } else if (contents[0] === CHAR_B_LOWER) {\n // @ts-expect-error\n const info = binaryPlist.parseBuffer(contents);\n if (Array.isArray(info)) return info[0];\n return info;\n } else {\n throw new CommandError(\n 'PLIST',\n `Cannot parse plist of type byte (0x${contents[0].toString(16)})`\n );\n }\n}\n"],"names":["parsePlistAsync","parsePlistBuffer","Log","CHAR_CHEVRON_OPEN","CHAR_B_LOWER","plistPath","debug","fs","readFile","contents","info","plist","parse","toString","Array","isArray","binaryPlist","parseBuffer","CommandError"],"mappings":"AAAA;;;;QAYsBA,eAAe,GAAfA,eAAe;QAMrBC,gBAAgB,GAAhBA,gBAAgB;AAlBd,IAAA,MAAa,kCAAb,aAAa,EAAA;AACP,IAAA,aAAe,kCAAf,eAAe,EAAA;AACxB,IAAA,SAAa,kCAAb,aAAa,EAAA;AAEhBC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACc,IAAA,OAAU,WAAV,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvC,MAAMC,iBAAiB,GAAG,EAAE,AAAC;AAC7B,MAAMC,YAAY,GAAG,EAAE,AAAC;AAIjB,eAAeJ,eAAe,CAACK,SAAiB,EAAE;IACvDH,GAAG,CAACI,KAAK,CAAC,CAAC,aAAa,EAAED,SAAS,CAAC,CAAC,CAAC,CAAC;IAEvC,OAAOJ,gBAAgB,CAAC,MAAMM,SAAE,QAAA,CAACC,QAAQ,CAACH,SAAS,CAAC,CAAC,CAAC;CACvD;AAEM,SAASJ,gBAAgB,CAACQ,QAAgB,EAAE;IACjD,IAAIA,QAAQ,CAAC,CAAC,CAAC,KAAKN,iBAAiB,EAAE;QACrC,MAAMO,IAAI,GAAGC,MAAK,QAAA,CAACC,KAAK,CAACH,QAAQ,CAACI,QAAQ,EAAE,CAAC,AAAC;QAC9C,IAAIC,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE,OAAOA,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,OAAOA,IAAI,CAAC;KACb,MAAM,IAAID,QAAQ,CAAC,CAAC,CAAC,KAAKL,YAAY,EAAE;QACvC,mBAAmB;QACnB,MAAMM,IAAI,GAAGM,aAAW,QAAA,CAACC,WAAW,CAACR,QAAQ,CAAC,AAAC;QAC/C,IAAIK,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE,OAAOA,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,OAAOA,IAAI,CAAC;KACb,MAAM;QACL,MAAM,IAAIQ,OAAY,aAAA,CACpB,OAAO,EACP,CAAC,mCAAmC,EAAET,QAAQ,CAAC,CAAC,CAAC,CAACI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAClE,CAAC;KACH;CACF"}
1
+ {"version":3,"sources":["../../../src/utils/plist.ts"],"sourcesContent":["import plist from '@expo/plist';\nimport binaryPlist from 'bplist-parser';\nimport fs from 'fs/promises';\n\nimport { CommandError } from './errors';\nimport * as Log from '../log';\n\nconst CHAR_CHEVRON_OPEN = 60;\nconst CHAR_B_LOWER = 98;\n// .mobileprovision\n// const CHAR_ZERO = 30;\n\nexport async function parsePlistAsync(plistPath: string) {\n Log.debug(`Parse plist: ${plistPath}`);\n\n return parsePlistBuffer(await fs.readFile(plistPath));\n}\n\nexport function parsePlistBuffer(contents: Buffer) {\n if (contents[0] === CHAR_CHEVRON_OPEN) {\n const info = plist.parse(contents.toString());\n if (Array.isArray(info)) return info[0];\n return info;\n } else if (contents[0] === CHAR_B_LOWER) {\n // @ts-expect-error\n const info = binaryPlist.parseBuffer(contents);\n if (Array.isArray(info)) return info[0];\n return info;\n } else {\n throw new CommandError(\n 'PLIST',\n `Cannot parse plist of type byte (0x${contents[0].toString(16)})`\n );\n }\n}\n"],"names":["parsePlistAsync","parsePlistBuffer","Log","CHAR_CHEVRON_OPEN","CHAR_B_LOWER","plistPath","debug","fs","readFile","contents","info","plist","parse","toString","Array","isArray","binaryPlist","parseBuffer","CommandError"],"mappings":"AAAA;;;;QAYsBA,eAAe,GAAfA,eAAe;QAMrBC,gBAAgB,GAAhBA,gBAAgB;AAlBd,IAAA,MAAa,kCAAb,aAAa,EAAA;AACP,IAAA,aAAe,kCAAf,eAAe,EAAA;AACxB,IAAA,SAAa,kCAAb,aAAa,EAAA;AAEC,IAAA,OAAU,WAAV,UAAU,CAAA;AAC3BC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEf,MAAMC,iBAAiB,GAAG,EAAE,AAAC;AAC7B,MAAMC,YAAY,GAAG,EAAE,AAAC;AAIjB,eAAeJ,eAAe,CAACK,SAAiB,EAAE;IACvDH,GAAG,CAACI,KAAK,CAAC,CAAC,aAAa,EAAED,SAAS,CAAC,CAAC,CAAC,CAAC;IAEvC,OAAOJ,gBAAgB,CAAC,MAAMM,SAAE,QAAA,CAACC,QAAQ,CAACH,SAAS,CAAC,CAAC,CAAC;CACvD;AAEM,SAASJ,gBAAgB,CAACQ,QAAgB,EAAE;IACjD,IAAIA,QAAQ,CAAC,CAAC,CAAC,KAAKN,iBAAiB,EAAE;QACrC,MAAMO,IAAI,GAAGC,MAAK,QAAA,CAACC,KAAK,CAACH,QAAQ,CAACI,QAAQ,EAAE,CAAC,AAAC;QAC9C,IAAIC,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE,OAAOA,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,OAAOA,IAAI,CAAC;KACb,MAAM,IAAID,QAAQ,CAAC,CAAC,CAAC,KAAKL,YAAY,EAAE;QACvC,mBAAmB;QACnB,MAAMM,IAAI,GAAGM,aAAW,QAAA,CAACC,WAAW,CAACR,QAAQ,CAAC,AAAC;QAC/C,IAAIK,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE,OAAOA,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,OAAOA,IAAI,CAAC;KACb,MAAM;QACL,MAAM,IAAIQ,OAAY,aAAA,CACpB,OAAO,EACP,CAAC,mCAAmC,EAAET,QAAQ,CAAC,CAAC,CAAC,CAACI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAClE,CAAC;KACH;CACF"}
@@ -7,9 +7,9 @@ exports.choosePortAsync = choosePortAsync;
7
7
  exports.resolvePortAsync = resolvePortAsync;
8
8
  var _chalk = _interopRequireDefault(require("chalk"));
9
9
  var _freeportAsync = _interopRequireDefault(require("freeport-async"));
10
- var Log = _interopRequireWildcard(require("../log"));
11
10
  var _env = require("./env");
12
11
  var _errors = require("./errors");
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/port.ts"],"sourcesContent":["import chalk from 'chalk';\nimport freeportAsync from 'freeport-async';\n\nimport * as Log from '../log';\nimport { env } from './env';\nimport { CommandError } from './errors';\n\n/** Get a free port or assert a CLI command error. */\nexport async function getFreePortAsync(rangeStart: number): Promise<number> {\n const port = await freeportAsync(rangeStart, { hostnames: [null, 'localhost'] });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', 'No available port found');\n }\n\n return port;\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function choosePortAsync(\n projectRoot: string,\n {\n defaultPort,\n host,\n reuseExistingPort,\n }: {\n defaultPort: number;\n host?: string;\n reuseExistingPort?: boolean;\n }\n): Promise<number | null> {\n const [{ getRunningProcess }, { confirmAsync }, isRoot, Log] = await Promise.all([\n import('./getRunningProcess'),\n import('./prompts'),\n import('is-root'),\n import('../log'),\n ]);\n\n try {\n const port = await freeportAsync(defaultPort, { hostnames: [host ?? null] });\n if (port === defaultPort) {\n return port;\n }\n\n const isRestricted = process.platform !== 'win32' && defaultPort < 1024 && !isRoot.default();\n\n let message = isRestricted\n ? `Admin permissions are required to run a server on a port below 1024`\n : `Port ${chalk.bold(defaultPort)} is`;\n\n const runningProcess = isRestricted ? null : getRunningProcess(defaultPort);\n\n if (runningProcess) {\n const pidTag = chalk.gray(`(pid ${runningProcess.pid})`);\n if (runningProcess.directory === projectRoot) {\n message += ` running this app in another window`;\n if (reuseExistingPort) {\n return null;\n }\n } else {\n message += ` running ${chalk.cyan(runningProcess.command)} in another window`;\n }\n message += '\\n' + chalk.gray(` ${runningProcess.directory} ${pidTag}`);\n } else {\n message += ' being used by another process';\n }\n\n Log.log(`\\u203A ${message}`);\n const change = await confirmAsync({\n message: `Use port ${port} instead?`,\n initial: true,\n });\n return change ? port : null;\n } catch (error: any) {\n if (error.code === 'ABORTED') {\n throw error;\n } else if (error.code === 'NON_INTERACTIVE') {\n Log.warn(chalk.yellow(error.message));\n return null;\n }\n throw error;\n }\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function resolvePortAsync(\n projectRoot: string,\n {\n /** Should opt to reuse a port that is running the same project in another window. */\n reuseExistingPort,\n /** Preferred port. */\n defaultPort,\n /** Backup port for when the default isn't available. */\n fallbackPort,\n }: {\n reuseExistingPort?: boolean;\n defaultPort?: string | number;\n fallbackPort?: number;\n } = {}\n): Promise<number | null> {\n let port: number;\n if (typeof defaultPort === 'string') {\n port = parseInt(defaultPort, 10);\n } else if (typeof defaultPort === 'number') {\n port = defaultPort;\n } else {\n port = env.RCT_METRO_PORT || fallbackPort || 8081;\n }\n\n // Only check the port when the bundler is running.\n const resolvedPort = await choosePortAsync(projectRoot, {\n defaultPort: port,\n reuseExistingPort,\n });\n if (resolvedPort == null) {\n Log.log('\\u203A Skipping dev server');\n // Skip bundling if the port is null\n } else {\n // Use the new or resolved port\n process.env.RCT_METRO_PORT = String(resolvedPort);\n }\n\n return resolvedPort;\n}\n"],"names":["getFreePortAsync","choosePortAsync","resolvePortAsync","Log","rangeStart","port","freeportAsync","hostnames","CommandError","projectRoot","defaultPort","host","reuseExistingPort","getRunningProcess","confirmAsync","isRoot","Promise","all","isRestricted","process","platform","default","message","chalk","bold","runningProcess","pidTag","gray","pid","directory","cyan","command","log","change","initial","error","code","warn","yellow","fallbackPort","parseInt","env","RCT_METRO_PORT","resolvedPort","String"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/port.ts"],"sourcesContent":["import chalk from 'chalk';\nimport freeportAsync from 'freeport-async';\n\nimport { env } from './env';\nimport { CommandError } from './errors';\nimport * as Log from '../log';\n\n/** Get a free port or assert a CLI command error. */\nexport async function getFreePortAsync(rangeStart: number): Promise<number> {\n const port = await freeportAsync(rangeStart, { hostnames: [null, 'localhost'] });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', 'No available port found');\n }\n\n return port;\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function choosePortAsync(\n projectRoot: string,\n {\n defaultPort,\n host,\n reuseExistingPort,\n }: {\n defaultPort: number;\n host?: string;\n reuseExistingPort?: boolean;\n }\n): Promise<number | null> {\n const [{ getRunningProcess }, { confirmAsync }, isRoot, Log] = await Promise.all([\n import('./getRunningProcess'),\n import('./prompts'),\n import('is-root'),\n import('../log'),\n ]);\n\n try {\n const port = await freeportAsync(defaultPort, { hostnames: [host ?? null] });\n if (port === defaultPort) {\n return port;\n }\n\n const isRestricted = process.platform !== 'win32' && defaultPort < 1024 && !isRoot.default();\n\n let message = isRestricted\n ? `Admin permissions are required to run a server on a port below 1024`\n : `Port ${chalk.bold(defaultPort)} is`;\n\n const runningProcess = isRestricted ? null : getRunningProcess(defaultPort);\n\n if (runningProcess) {\n const pidTag = chalk.gray(`(pid ${runningProcess.pid})`);\n if (runningProcess.directory === projectRoot) {\n message += ` running this app in another window`;\n if (reuseExistingPort) {\n return null;\n }\n } else {\n message += ` running ${chalk.cyan(runningProcess.command)} in another window`;\n }\n message += '\\n' + chalk.gray(` ${runningProcess.directory} ${pidTag}`);\n } else {\n message += ' being used by another process';\n }\n\n Log.log(`\\u203A ${message}`);\n const change = await confirmAsync({\n message: `Use port ${port} instead?`,\n initial: true,\n });\n return change ? port : null;\n } catch (error: any) {\n if (error.code === 'ABORTED') {\n throw error;\n } else if (error.code === 'NON_INTERACTIVE') {\n Log.warn(chalk.yellow(error.message));\n return null;\n }\n throw error;\n }\n}\n\n// TODO(Bacon): Revisit after all start and run code is merged.\nexport async function resolvePortAsync(\n projectRoot: string,\n {\n /** Should opt to reuse a port that is running the same project in another window. */\n reuseExistingPort,\n /** Preferred port. */\n defaultPort,\n /** Backup port for when the default isn't available. */\n fallbackPort,\n }: {\n reuseExistingPort?: boolean;\n defaultPort?: string | number;\n fallbackPort?: number;\n } = {}\n): Promise<number | null> {\n let port: number;\n if (typeof defaultPort === 'string') {\n port = parseInt(defaultPort, 10);\n } else if (typeof defaultPort === 'number') {\n port = defaultPort;\n } else {\n port = env.RCT_METRO_PORT || fallbackPort || 8081;\n }\n\n // Only check the port when the bundler is running.\n const resolvedPort = await choosePortAsync(projectRoot, {\n defaultPort: port,\n reuseExistingPort,\n });\n if (resolvedPort == null) {\n Log.log('\\u203A Skipping dev server');\n // Skip bundling if the port is null\n } else {\n // Use the new or resolved port\n process.env.RCT_METRO_PORT = String(resolvedPort);\n }\n\n return resolvedPort;\n}\n"],"names":["getFreePortAsync","choosePortAsync","resolvePortAsync","Log","rangeStart","port","freeportAsync","hostnames","CommandError","projectRoot","defaultPort","host","reuseExistingPort","getRunningProcess","confirmAsync","isRoot","Promise","all","isRestricted","process","platform","default","message","chalk","bold","runningProcess","pidTag","gray","pid","directory","cyan","command","log","change","initial","error","code","warn","yellow","fallbackPort","parseInt","env","RCT_METRO_PORT","resolvedPort","String"],"mappings":"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"}
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.profile = profile;
6
6
  var _chalk = _interopRequireDefault(require("chalk"));
7
- var Log = _interopRequireWildcard(require("../log"));
8
7
  var _env = require("./env");
8
+ var Log = _interopRequireWildcard(require("../log"));
9
9
  function _interopRequireDefault(obj) {
10
10
  return obj && obj.__esModule ? obj : {
11
11
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/profile.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { env } from './env';\n\n/**\n * Wrap a method and profile the time it takes to execute the method using `EXPO_PROFILE`.\n * Works best with named functions (i.e. not arrow functions).\n *\n * @param fn function to profile.\n * @param functionName optional name of the function to display in the profile output.\n */\nexport function profile<IArgs extends any[], T extends (...args: IArgs) => any>(\n fn: T,\n functionName: string = fn.name\n): T {\n if (!env.EXPO_PROFILE) {\n return fn;\n }\n\n const name = chalk.dim(`⏱ [profile] ${functionName ?? 'unknown'}`);\n\n return ((...args: IArgs) => {\n // Start the timer.\n Log.time(name);\n\n // Invoke the method.\n const results = fn(...args);\n\n // If non-promise then return as-is.\n if (!(results instanceof Promise)) {\n Log.timeEnd(name);\n return results;\n }\n\n // Otherwise await to profile after the promise resolves.\n return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n results.then(\n (results) => {\n resolve(results);\n Log.timeEnd(name);\n },\n (reason) => {\n reject(reason);\n Log.timeEnd(name);\n }\n );\n });\n }) as T;\n}\n"],"names":["profile","Log","fn","functionName","name","env","EXPO_PROFILE","chalk","dim","args","time","results","Promise","timeEnd","resolve","reject","then","reason"],"mappings":"AAAA;;;;QAYgBA,OAAO,GAAPA,OAAO;AAZL,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEbC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACK,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AASpB,SAASD,OAAO,CACrBE,EAAK,EACLC,YAAoB,GAAGD,EAAE,CAACE,IAAI,EAC3B;IACH,IAAI,CAACC,IAAG,IAAA,CAACC,YAAY,EAAE;QACrB,OAAOJ,EAAE,CAAC;KACX;IAED,MAAME,IAAI,GAAGG,MAAK,QAAA,CAACC,GAAG,CAAC,CAAC,eAAa,EAAEL,YAAY,WAAZA,YAAY,GAAI,SAAS,CAAC,CAAC,CAAC,AAAC;IAEpE,OAAQ,CAAC,GAAGM,IAAI,AAAO,GAAK;QAC1B,mBAAmB;QACnBR,GAAG,CAACS,IAAI,CAACN,IAAI,CAAC,CAAC;QAEf,qBAAqB;QACrB,MAAMO,QAAO,GAAGT,EAAE,IAAIO,IAAI,CAAC,AAAC;QAE5B,oCAAoC;QACpC,IAAI,CAAC,CAACE,QAAO,YAAYC,OAAO,CAAC,EAAE;YACjCX,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;YAClB,OAAOO,QAAO,CAAC;SAChB;QAED,yDAAyD;QACzD,OAAO,IAAIC,OAAO,CAAyB,CAACE,OAAO,EAAEC,MAAM,GAAK;YAC9DJ,QAAO,CAACK,IAAI,CACV,CAACL,OAAO,GAAK;gBACXG,OAAO,CAACH,OAAO,CAAC,CAAC;gBACjBV,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;aACnB,EACD,CAACa,MAAM,GAAK;gBACVF,MAAM,CAACE,MAAM,CAAC,CAAC;gBACfhB,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;aACnB,CACF,CAAC;SACH,CAAC,CAAC;KACJ,CAAO;CACT"}
1
+ {"version":3,"sources":["../../../src/utils/profile.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { env } from './env';\nimport * as Log from '../log';\n\n/**\n * Wrap a method and profile the time it takes to execute the method using `EXPO_PROFILE`.\n * Works best with named functions (i.e. not arrow functions).\n *\n * @param fn function to profile.\n * @param functionName optional name of the function to display in the profile output.\n */\nexport function profile<IArgs extends any[], T extends (...args: IArgs) => any>(\n fn: T,\n functionName: string = fn.name\n): T {\n if (!env.EXPO_PROFILE) {\n return fn;\n }\n\n const name = chalk.dim(`⏱ [profile] ${functionName ?? 'unknown'}`);\n\n return ((...args: IArgs) => {\n // Start the timer.\n Log.time(name);\n\n // Invoke the method.\n const results = fn(...args);\n\n // If non-promise then return as-is.\n if (!(results instanceof Promise)) {\n Log.timeEnd(name);\n return results;\n }\n\n // Otherwise await to profile after the promise resolves.\n return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n results.then(\n (results) => {\n resolve(results);\n Log.timeEnd(name);\n },\n (reason) => {\n reject(reason);\n Log.timeEnd(name);\n }\n );\n });\n }) as T;\n}\n"],"names":["profile","Log","fn","functionName","name","env","EXPO_PROFILE","chalk","dim","args","time","results","Promise","timeEnd","resolve","reject","then","reason"],"mappings":"AAAA;;;;QAYgBA,OAAO,GAAPA,OAAO;AAZL,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEL,IAAA,IAAO,WAAP,OAAO,CAAA;AACfC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;;;;;;AASR,SAASD,OAAO,CACrBE,EAAK,EACLC,YAAoB,GAAGD,EAAE,CAACE,IAAI,EAC3B;IACH,IAAI,CAACC,IAAG,IAAA,CAACC,YAAY,EAAE;QACrB,OAAOJ,EAAE,CAAC;KACX;IAED,MAAME,IAAI,GAAGG,MAAK,QAAA,CAACC,GAAG,CAAC,CAAC,eAAa,EAAEL,YAAY,WAAZA,YAAY,GAAI,SAAS,CAAC,CAAC,CAAC,AAAC;IAEpE,OAAQ,CAAC,GAAGM,IAAI,AAAO,GAAK;QAC1B,mBAAmB;QACnBR,GAAG,CAACS,IAAI,CAACN,IAAI,CAAC,CAAC;QAEf,qBAAqB;QACrB,MAAMO,QAAO,GAAGT,EAAE,IAAIO,IAAI,CAAC,AAAC;QAE5B,oCAAoC;QACpC,IAAI,CAAC,CAACE,QAAO,YAAYC,OAAO,CAAC,EAAE;YACjCX,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;YAClB,OAAOO,QAAO,CAAC;SAChB;QAED,yDAAyD;QACzD,OAAO,IAAIC,OAAO,CAAyB,CAACE,OAAO,EAAEC,MAAM,GAAK;YAC9DJ,QAAO,CAACK,IAAI,CACV,CAACL,OAAO,GAAK;gBACXG,OAAO,CAACH,OAAO,CAAC,CAAC;gBACjBV,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;aACnB,EACD,CAACa,MAAM,GAAK;gBACVF,MAAM,CAACE,MAAM,CAAC,CAAC;gBACfhB,GAAG,CAACY,OAAO,CAACT,IAAI,CAAC,CAAC;aACnB,CACF,CAAC;SACH,CAAC,CAAC;KACJ,CAAO;CACT"}
@@ -12,9 +12,9 @@ var _plist = _interopRequireDefault(require("@expo/plist"));
12
12
  var _fs = _interopRequireDefault(require("fs"));
13
13
  var _path = _interopRequireDefault(require("path"));
14
14
  var _resolveFrom = _interopRequireDefault(require("resolve-from"));
15
+ var _array = require("./array");
15
16
  var Log = _interopRequireWildcard(require("../log"));
16
17
  var _clearNativeFolder = require("../prebuild/clearNativeFolder");
17
- var _array = require("./array");
18
18
  function _interopRequireDefault(obj) {
19
19
  return obj && obj.__esModule ? obj : {
20
20
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/scheme.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport { AndroidConfig, IOSConfig } from '@expo/config-plugins';\nimport { getInfoPlistPathFromPbxproj } from '@expo/config-plugins/build/ios/utils/getInfoPlistPath';\nimport plist from '@expo/plist';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport * as Log from '../log';\nimport {\n hasRequiredAndroidFilesAsync,\n hasRequiredIOSFilesAsync,\n} from '../prebuild/clearNativeFolder';\nimport { intersecting } from './array';\n\nconst debug = require('debug')('expo:utils:scheme') as typeof console.log;\n\n// sort longest to ensure uniqueness.\n// this might be undesirable as it causes the QR code to be longer.\nfunction sortLongest(obj: string[]): string[] {\n return obj.sort((a, b) => b.length - a.length);\n}\n\n/**\n * Resolve the scheme for the dev client using two methods:\n * - filter on known Expo schemes, starting with `exp+`, avoiding 3rd party schemes.\n * - filter on longest to ensure uniqueness.\n */\nfunction resolveExpoOrLongestScheme(schemes: string[]): string[] {\n const expoOnlySchemes = schemes.filter((scheme) => scheme.startsWith('exp+'));\n return expoOnlySchemes.length > 0 ? sortLongest(expoOnlySchemes) : sortLongest(schemes);\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getSchemesForIosAsync(projectRoot: string): Promise<string[]> {\n try {\n const infoPlistBuildProperty = getInfoPlistPathFromPbxproj(projectRoot);\n debug(`ios application Info.plist path:`, infoPlistBuildProperty);\n if (infoPlistBuildProperty) {\n const configPath = path.join(projectRoot, 'ios', infoPlistBuildProperty);\n const rawPlist = fs.readFileSync(configPath, 'utf8');\n const plistObject = plist.parse(rawPlist);\n const schemes = IOSConfig.Scheme.getSchemesFromPlist(plistObject);\n debug(`ios application schemes:`, schemes);\n return resolveExpoOrLongestScheme(schemes);\n }\n } catch (error) {\n debug(`expected error collecting ios application schemes for the main target:`, error);\n }\n // No ios folder or some other error\n return [];\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getSchemesForAndroidAsync(projectRoot: string): Promise<string[]> {\n try {\n const configPath = await AndroidConfig.Paths.getAndroidManifestAsync(projectRoot);\n const manifest = await AndroidConfig.Manifest.readAndroidManifestAsync(configPath);\n const schemes = await AndroidConfig.Scheme.getSchemesFromManifest(manifest);\n debug(`android application schemes:`, schemes);\n return resolveExpoOrLongestScheme(schemes);\n } catch (error) {\n debug(`expected error collecting android application schemes for the main activity:`, error);\n // No android folder or some other error\n return [];\n }\n}\n\n// TODO: Revisit and test after run code is merged.\nasync function getManagedDevClientSchemeAsync(projectRoot: string): Promise<string | null> {\n const { exp } = getConfig(projectRoot);\n try {\n const getDefaultScheme = require(resolveFrom(projectRoot, 'expo-dev-client/getDefaultScheme'));\n const scheme = getDefaultScheme(exp);\n return scheme;\n } catch {\n Log.warn(\n '\\nDevelopment build: Unable to get the default URI scheme for the project. Please make sure the expo-dev-client package is installed.'\n );\n return null;\n }\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getOptionalDevClientSchemeAsync(projectRoot: string): Promise<string | null> {\n const [hasIos, hasAndroid] = await Promise.all([\n hasRequiredIOSFilesAsync(projectRoot),\n hasRequiredAndroidFilesAsync(projectRoot),\n ]);\n\n const [ios, android] = await Promise.all([\n getSchemesForIosAsync(projectRoot),\n getSchemesForAndroidAsync(projectRoot),\n ]);\n\n // Allow managed projects\n if (!hasIos && !hasAndroid) {\n return getManagedDevClientSchemeAsync(projectRoot);\n }\n\n let matching: string;\n // Allow for only one native project to exist.\n if (!hasIos) {\n matching = android[0];\n } else if (!hasAndroid) {\n matching = ios[0];\n } else {\n [matching] = intersecting(ios, android);\n }\n return matching ?? null;\n}\n"],"names":["getSchemesForIosAsync","getSchemesForAndroidAsync","getOptionalDevClientSchemeAsync","Log","debug","require","sortLongest","obj","sort","a","b","length","resolveExpoOrLongestScheme","schemes","expoOnlySchemes","filter","scheme","startsWith","projectRoot","infoPlistBuildProperty","getInfoPlistPathFromPbxproj","configPath","path","join","rawPlist","fs","readFileSync","plistObject","plist","parse","IOSConfig","Scheme","getSchemesFromPlist","error","AndroidConfig","Paths","getAndroidManifestAsync","manifest","Manifest","readAndroidManifestAsync","getSchemesFromManifest","getManagedDevClientSchemeAsync","exp","getConfig","getDefaultScheme","resolveFrom","warn","hasIos","hasAndroid","Promise","all","hasRequiredIOSFilesAsync","hasRequiredAndroidFilesAsync","ios","android","matching","intersecting"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/scheme.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport { AndroidConfig, IOSConfig } from '@expo/config-plugins';\nimport { getInfoPlistPathFromPbxproj } from '@expo/config-plugins/build/ios/utils/getInfoPlistPath';\nimport plist from '@expo/plist';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { intersecting } from './array';\nimport * as Log from '../log';\nimport {\n hasRequiredAndroidFilesAsync,\n hasRequiredIOSFilesAsync,\n} from '../prebuild/clearNativeFolder';\n\nconst debug = require('debug')('expo:utils:scheme') as typeof console.log;\n\n// sort longest to ensure uniqueness.\n// this might be undesirable as it causes the QR code to be longer.\nfunction sortLongest(obj: string[]): string[] {\n return obj.sort((a, b) => b.length - a.length);\n}\n\n/**\n * Resolve the scheme for the dev client using two methods:\n * - filter on known Expo schemes, starting with `exp+`, avoiding 3rd party schemes.\n * - filter on longest to ensure uniqueness.\n */\nfunction resolveExpoOrLongestScheme(schemes: string[]): string[] {\n const expoOnlySchemes = schemes.filter((scheme) => scheme.startsWith('exp+'));\n return expoOnlySchemes.length > 0 ? sortLongest(expoOnlySchemes) : sortLongest(schemes);\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getSchemesForIosAsync(projectRoot: string): Promise<string[]> {\n try {\n const infoPlistBuildProperty = getInfoPlistPathFromPbxproj(projectRoot);\n debug(`ios application Info.plist path:`, infoPlistBuildProperty);\n if (infoPlistBuildProperty) {\n const configPath = path.join(projectRoot, 'ios', infoPlistBuildProperty);\n const rawPlist = fs.readFileSync(configPath, 'utf8');\n const plistObject = plist.parse(rawPlist);\n const schemes = IOSConfig.Scheme.getSchemesFromPlist(plistObject);\n debug(`ios application schemes:`, schemes);\n return resolveExpoOrLongestScheme(schemes);\n }\n } catch (error) {\n debug(`expected error collecting ios application schemes for the main target:`, error);\n }\n // No ios folder or some other error\n return [];\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getSchemesForAndroidAsync(projectRoot: string): Promise<string[]> {\n try {\n const configPath = await AndroidConfig.Paths.getAndroidManifestAsync(projectRoot);\n const manifest = await AndroidConfig.Manifest.readAndroidManifestAsync(configPath);\n const schemes = await AndroidConfig.Scheme.getSchemesFromManifest(manifest);\n debug(`android application schemes:`, schemes);\n return resolveExpoOrLongestScheme(schemes);\n } catch (error) {\n debug(`expected error collecting android application schemes for the main activity:`, error);\n // No android folder or some other error\n return [];\n }\n}\n\n// TODO: Revisit and test after run code is merged.\nasync function getManagedDevClientSchemeAsync(projectRoot: string): Promise<string | null> {\n const { exp } = getConfig(projectRoot);\n try {\n const getDefaultScheme = require(resolveFrom(projectRoot, 'expo-dev-client/getDefaultScheme'));\n const scheme = getDefaultScheme(exp);\n return scheme;\n } catch {\n Log.warn(\n '\\nDevelopment build: Unable to get the default URI scheme for the project. Please make sure the expo-dev-client package is installed.'\n );\n return null;\n }\n}\n\n// TODO: Revisit and test after run code is merged.\nexport async function getOptionalDevClientSchemeAsync(projectRoot: string): Promise<string | null> {\n const [hasIos, hasAndroid] = await Promise.all([\n hasRequiredIOSFilesAsync(projectRoot),\n hasRequiredAndroidFilesAsync(projectRoot),\n ]);\n\n const [ios, android] = await Promise.all([\n getSchemesForIosAsync(projectRoot),\n getSchemesForAndroidAsync(projectRoot),\n ]);\n\n // Allow managed projects\n if (!hasIos && !hasAndroid) {\n return getManagedDevClientSchemeAsync(projectRoot);\n }\n\n let matching: string;\n // Allow for only one native project to exist.\n if (!hasIos) {\n matching = android[0];\n } else if (!hasAndroid) {\n matching = ios[0];\n } else {\n [matching] = intersecting(ios, android);\n }\n return matching ?? null;\n}\n"],"names":["getSchemesForIosAsync","getSchemesForAndroidAsync","getOptionalDevClientSchemeAsync","Log","debug","require","sortLongest","obj","sort","a","b","length","resolveExpoOrLongestScheme","schemes","expoOnlySchemes","filter","scheme","startsWith","projectRoot","infoPlistBuildProperty","getInfoPlistPathFromPbxproj","configPath","path","join","rawPlist","fs","readFileSync","plistObject","plist","parse","IOSConfig","Scheme","getSchemesFromPlist","error","AndroidConfig","Paths","getAndroidManifestAsync","manifest","Manifest","readAndroidManifestAsync","getSchemesFromManifest","getManagedDevClientSchemeAsync","exp","getConfig","getDefaultScheme","resolveFrom","warn","hasIos","hasAndroid","Promise","all","hasRequiredIOSFilesAsync","hasRequiredAndroidFilesAsync","ios","android","matching","intersecting"],"mappings":"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"}
@@ -6,8 +6,8 @@ exports.loadTsConfigPathsAsync = loadTsConfigPathsAsync;
6
6
  exports.readTsconfigAsync = readTsconfigAsync;
7
7
  var _jsonFile = _interopRequireDefault(require("@expo/json-file"));
8
8
  var _path = _interopRequireDefault(require("path"));
9
- var _dir = require("../dir");
10
9
  var _evaluateTsConfig = require("./evaluateTsConfig");
10
+ var _dir = require("../dir");
11
11
  function _interopRequireDefault(obj) {
12
12
  return obj && obj.__esModule ? obj : {
13
13
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/tsconfig/loadTsConfigPaths.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport path from 'path';\n\nimport { fileExistsAsync } from '../dir';\nimport { evaluateTsConfig, importTypeScriptFromProjectOptionally } from './evaluateTsConfig';\n\nexport type TsConfigPaths = {\n paths?: Record<string, string[]>;\n baseUrl: string;\n};\n\ntype ConfigReadResults = [\n string,\n {\n compilerOptions?: {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n };\n }\n];\n\nconst debug = require('debug')('expo:utils:tsconfig:load') as typeof console.log;\n\nexport async function loadTsConfigPathsAsync(dir: string): Promise<TsConfigPaths | null> {\n const options = (await readTsconfigAsync(dir)) ?? (await readJsconfigAsync(dir));\n if (options) {\n const [filepath, config] = options;\n if (config.compilerOptions?.baseUrl) {\n return {\n paths: config.compilerOptions?.paths,\n baseUrl: path.resolve(dir, config.compilerOptions.baseUrl),\n };\n }\n debug(`No baseUrl found in ${filepath}`);\n return {\n paths: config.compilerOptions?.paths,\n baseUrl: dir,\n };\n }\n return null;\n}\n\nasync function readJsconfigAsync(projectRoot: string): Promise<null | ConfigReadResults> {\n const configPath = path.join(projectRoot, 'jsconfig.json');\n if (await fileExistsAsync(configPath)) {\n const config = await JsonFile.readAsync(configPath, { json5: true });\n if (config) {\n return [configPath, config];\n }\n }\n return null;\n}\n\n// TODO: Refactor for speed\nexport async function readTsconfigAsync(projectRoot: string): Promise<null | ConfigReadResults> {\n const configPath = path.join(projectRoot, 'tsconfig.json');\n if (await fileExistsAsync(configPath)) {\n // We need to fully evaluate the tsconfig to get the baseUrl and paths in case they were applied in `extends`.\n const ts = importTypeScriptFromProjectOptionally(projectRoot);\n if (ts) {\n return [configPath, evaluateTsConfig(ts, configPath)];\n }\n debug(`typescript module not found in: ${projectRoot}`);\n }\n return null;\n}\n"],"names":["loadTsConfigPathsAsync","readTsconfigAsync","debug","require","dir","options","readJsconfigAsync","config","filepath","compilerOptions","baseUrl","paths","path","resolve","projectRoot","configPath","join","fileExistsAsync","JsonFile","readAsync","json5","ts","importTypeScriptFromProjectOptionally","evaluateTsConfig"],"mappings":"AAAA;;;;QAuBsBA,sBAAsB,GAAtBA,sBAAsB;QA+BtBC,iBAAiB,GAAjBA,iBAAiB;AAtDlB,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACrB,IAAA,KAAM,kCAAN,MAAM,EAAA;AAES,IAAA,IAAQ,WAAR,QAAQ,CAAA;AACgC,IAAA,iBAAoB,WAApB,oBAAoB,CAAA;;;;;;AAiB5F,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,AAAsB,AAAC;AAE1E,eAAeH,sBAAsB,CAACI,GAAW,EAAiC;QACvE,GAA8B;IAA9C,MAAMC,OAAO,GAAG,CAAA,GAA8B,GAA7B,MAAMJ,iBAAiB,CAACG,GAAG,CAAC,YAA7B,GAA8B,GAAK,MAAME,iBAAiB,CAACF,GAAG,CAAC,AAAC,AAAC;IACjF,IAAIC,OAAO,EAAE;YAEPE,IAAsB,EAQjBA,IAAsB;QAT/B,MAAM,CAACC,QAAQ,EAAED,MAAM,CAAC,GAAGF,OAAO,AAAC;QACnC,IAAIE,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAS,GAA/BF,KAAAA,CAA+B,GAA/BA,IAAsB,CAAEG,OAAO,EAAE;gBAE1BH,IAAsB;YAD/B,OAAO;gBACLI,KAAK,EAAEJ,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAO,GAA7BF,KAAAA,CAA6B,GAA7BA,IAAsB,CAAEI,KAAK;gBACpCD,OAAO,EAAEE,KAAI,QAAA,CAACC,OAAO,CAACT,GAAG,EAAEG,MAAM,CAACE,eAAe,CAACC,OAAO,CAAC;aAC3D,CAAC;SACH;QACDR,KAAK,CAAC,CAAC,oBAAoB,EAAEM,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO;YACLG,KAAK,EAAEJ,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAO,GAA7BF,KAAAA,CAA6B,GAA7BA,IAAsB,CAAEI,KAAK;YACpCD,OAAO,EAAEN,GAAG;SACb,CAAC;KACH;IACD,OAAO,IAAI,CAAC;CACb;AAED,eAAeE,iBAAiB,CAACQ,WAAmB,EAAqC;IACvF,MAAMC,UAAU,GAAGH,KAAI,QAAA,CAACI,IAAI,CAACF,WAAW,EAAE,eAAe,CAAC,AAAC;IAC3D,IAAI,MAAMG,CAAAA,GAAAA,IAAe,AAAY,CAAA,gBAAZ,CAACF,UAAU,CAAC,EAAE;QACrC,MAAMR,MAAM,GAAG,MAAMW,SAAQ,QAAA,CAACC,SAAS,CAACJ,UAAU,EAAE;YAAEK,KAAK,EAAE,IAAI;SAAE,CAAC,AAAC;QACrE,IAAIb,MAAM,EAAE;YACV,OAAO;gBAACQ,UAAU;gBAAER,MAAM;aAAC,CAAC;SAC7B;KACF;IACD,OAAO,IAAI,CAAC;CACb;AAGM,eAAeN,iBAAiB,CAACa,WAAmB,EAAqC;IAC9F,MAAMC,UAAU,GAAGH,KAAI,QAAA,CAACI,IAAI,CAACF,WAAW,EAAE,eAAe,CAAC,AAAC;IAC3D,IAAI,MAAMG,CAAAA,GAAAA,IAAe,AAAY,CAAA,gBAAZ,CAACF,UAAU,CAAC,EAAE;QACrC,8GAA8G;QAC9G,MAAMM,EAAE,GAAGC,CAAAA,GAAAA,iBAAqC,AAAa,CAAA,sCAAb,CAACR,WAAW,CAAC,AAAC;QAC9D,IAAIO,EAAE,EAAE;YACN,OAAO;gBAACN,UAAU;gBAAEQ,CAAAA,GAAAA,iBAAgB,AAAgB,CAAA,iBAAhB,CAACF,EAAE,EAAEN,UAAU,CAAC;aAAC,CAAC;SACvD;QACDb,KAAK,CAAC,CAAC,gCAAgC,EAAEY,WAAW,CAAC,CAAC,CAAC,CAAC;KACzD;IACD,OAAO,IAAI,CAAC;CACb"}
1
+ {"version":3,"sources":["../../../../src/utils/tsconfig/loadTsConfigPaths.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport path from 'path';\n\nimport { evaluateTsConfig, importTypeScriptFromProjectOptionally } from './evaluateTsConfig';\nimport { fileExistsAsync } from '../dir';\n\nexport type TsConfigPaths = {\n paths?: Record<string, string[]>;\n baseUrl: string;\n};\n\ntype ConfigReadResults = [\n string,\n {\n compilerOptions?: {\n baseUrl?: string;\n paths?: Record<string, string[]>;\n };\n },\n];\n\nconst debug = require('debug')('expo:utils:tsconfig:load') as typeof console.log;\n\nexport async function loadTsConfigPathsAsync(dir: string): Promise<TsConfigPaths | null> {\n const options = (await readTsconfigAsync(dir)) ?? (await readJsconfigAsync(dir));\n if (options) {\n const [filepath, config] = options;\n if (config.compilerOptions?.baseUrl) {\n return {\n paths: config.compilerOptions?.paths,\n baseUrl: path.resolve(dir, config.compilerOptions.baseUrl),\n };\n }\n debug(`No baseUrl found in ${filepath}`);\n return {\n paths: config.compilerOptions?.paths,\n baseUrl: dir,\n };\n }\n return null;\n}\n\nasync function readJsconfigAsync(projectRoot: string): Promise<null | ConfigReadResults> {\n const configPath = path.join(projectRoot, 'jsconfig.json');\n if (await fileExistsAsync(configPath)) {\n const config = await JsonFile.readAsync(configPath, { json5: true });\n if (config) {\n return [configPath, config];\n }\n }\n return null;\n}\n\n// TODO: Refactor for speed\nexport async function readTsconfigAsync(projectRoot: string): Promise<null | ConfigReadResults> {\n const configPath = path.join(projectRoot, 'tsconfig.json');\n if (await fileExistsAsync(configPath)) {\n // We need to fully evaluate the tsconfig to get the baseUrl and paths in case they were applied in `extends`.\n const ts = importTypeScriptFromProjectOptionally(projectRoot);\n if (ts) {\n return [configPath, evaluateTsConfig(ts, configPath)];\n }\n debug(`typescript module not found in: ${projectRoot}`);\n }\n return null;\n}\n"],"names":["loadTsConfigPathsAsync","readTsconfigAsync","debug","require","dir","options","readJsconfigAsync","config","filepath","compilerOptions","baseUrl","paths","path","resolve","projectRoot","configPath","join","fileExistsAsync","JsonFile","readAsync","json5","ts","importTypeScriptFromProjectOptionally","evaluateTsConfig"],"mappings":"AAAA;;;;QAuBsBA,sBAAsB,GAAtBA,sBAAsB;QA+BtBC,iBAAiB,GAAjBA,iBAAiB;AAtDlB,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACrB,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEiD,IAAA,iBAAoB,WAApB,oBAAoB,CAAA;AAC5D,IAAA,IAAQ,WAAR,QAAQ,CAAA;;;;;;AAiBxC,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,AAAsB,AAAC;AAE1E,eAAeH,sBAAsB,CAACI,GAAW,EAAiC;QACvE,GAA8B;IAA9C,MAAMC,OAAO,GAAG,CAAA,GAA8B,GAA7B,MAAMJ,iBAAiB,CAACG,GAAG,CAAC,YAA7B,GAA8B,GAAK,MAAME,iBAAiB,CAACF,GAAG,CAAC,AAAC,AAAC;IACjF,IAAIC,OAAO,EAAE;YAEPE,IAAsB,EAQjBA,IAAsB;QAT/B,MAAM,CAACC,QAAQ,EAAED,MAAM,CAAC,GAAGF,OAAO,AAAC;QACnC,IAAIE,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAS,GAA/BF,KAAAA,CAA+B,GAA/BA,IAAsB,CAAEG,OAAO,EAAE;gBAE1BH,IAAsB;YAD/B,OAAO;gBACLI,KAAK,EAAEJ,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAO,GAA7BF,KAAAA,CAA6B,GAA7BA,IAAsB,CAAEI,KAAK;gBACpCD,OAAO,EAAEE,KAAI,QAAA,CAACC,OAAO,CAACT,GAAG,EAAEG,MAAM,CAACE,eAAe,CAACC,OAAO,CAAC;aAC3D,CAAC;SACH;QACDR,KAAK,CAAC,CAAC,oBAAoB,EAAEM,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO;YACLG,KAAK,EAAEJ,CAAAA,IAAsB,GAAtBA,MAAM,CAACE,eAAe,SAAO,GAA7BF,KAAAA,CAA6B,GAA7BA,IAAsB,CAAEI,KAAK;YACpCD,OAAO,EAAEN,GAAG;SACb,CAAC;KACH;IACD,OAAO,IAAI,CAAC;CACb;AAED,eAAeE,iBAAiB,CAACQ,WAAmB,EAAqC;IACvF,MAAMC,UAAU,GAAGH,KAAI,QAAA,CAACI,IAAI,CAACF,WAAW,EAAE,eAAe,CAAC,AAAC;IAC3D,IAAI,MAAMG,CAAAA,GAAAA,IAAe,AAAY,CAAA,gBAAZ,CAACF,UAAU,CAAC,EAAE;QACrC,MAAMR,MAAM,GAAG,MAAMW,SAAQ,QAAA,CAACC,SAAS,CAACJ,UAAU,EAAE;YAAEK,KAAK,EAAE,IAAI;SAAE,CAAC,AAAC;QACrE,IAAIb,MAAM,EAAE;YACV,OAAO;gBAACQ,UAAU;gBAAER,MAAM;aAAC,CAAC;SAC7B;KACF;IACD,OAAO,IAAI,CAAC;CACb;AAGM,eAAeN,iBAAiB,CAACa,WAAmB,EAAqC;IAC9F,MAAMC,UAAU,GAAGH,KAAI,QAAA,CAACI,IAAI,CAACF,WAAW,EAAE,eAAe,CAAC,AAAC;IAC3D,IAAI,MAAMG,CAAAA,GAAAA,IAAe,AAAY,CAAA,gBAAZ,CAACF,UAAU,CAAC,EAAE;QACrC,8GAA8G;QAC9G,MAAMM,EAAE,GAAGC,CAAAA,GAAAA,iBAAqC,AAAa,CAAA,sCAAb,CAACR,WAAW,CAAC,AAAC;QAC9D,IAAIO,EAAE,EAAE;YACN,OAAO;gBAACN,UAAU;gBAAEQ,CAAAA,GAAAA,iBAAgB,AAAgB,CAAA,iBAAhB,CAACF,EAAE,EAAEN,UAAU,CAAC;aAAC,CAAC;SACvD;QACDb,KAAK,CAAC,CAAC,gCAAgC,EAAEY,WAAW,CAAC,CAAC,CAAC,CAAC;KACzD;IACD,OAAO,IAAI,CAAC;CACb"}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.validateBundleId = validateBundleId;
6
6
  exports.validatePackage = validatePackage;
7
+ exports.validatePackageWithWarning = validatePackageWithWarning;
7
8
  exports.assertValidBundleId = assertValidBundleId;
8
9
  exports.assertValidPackage = assertValidPackage;
9
10
  exports.getBundleIdWarningInternalAsync = getBundleIdWarningInternalAsync;
@@ -11,12 +12,12 @@ exports.getPackageNameWarningInternalAsync = getPackageNameWarningInternalAsync;
11
12
  exports.getPackageNameWarningAsync = exports.getBundleIdWarningAsync = void 0;
12
13
  var _assert = _interopRequireDefault(require("assert"));
13
14
  var _chalk = _interopRequireDefault(require("chalk"));
14
- var _client = require("../api/rest/client");
15
- var _log = require("../log");
16
15
  var _env = require("./env");
17
16
  var _fn = require("./fn");
18
17
  var _link = require("./link");
19
18
  var _url = require("./url");
19
+ var _client = require("../api/rest/client");
20
+ var _log = require("../log");
20
21
  function _interopRequireDefault(obj) {
21
22
  return obj && obj.__esModule ? obj : {
22
23
  default: obj
@@ -24,18 +25,97 @@ function _interopRequireDefault(obj) {
24
25
  }
25
26
  const debug = require("debug")("expo:utils:validateApplicationId");
26
27
  const IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;
27
- const ANDROID_PACKAGE_REGEX = /^[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$/;
28
+ const ANDROID_PACKAGE_REGEX = /^(?!.*\bnative\b)[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$/;
28
29
  function validateBundleId(value) {
29
30
  return IOS_BUNDLE_ID_REGEX.test(value);
30
31
  }
31
32
  function validatePackage(value) {
32
- return ANDROID_PACKAGE_REGEX.test(value);
33
+ return validatePackageWithWarning(value) === true;
34
+ }
35
+ function validatePackageWithWarning(value) {
36
+ const parts = value.split(".");
37
+ for (const segment of parts){
38
+ if (RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS.includes(segment)) {
39
+ return `"${segment}" is a reserved Java keyword.`;
40
+ }
41
+ }
42
+ if (parts.length < 2) {
43
+ return `Package name must contain more than one segment, separated by ".", e.g. com.${value}`;
44
+ }
45
+ if (!ANDROID_PACKAGE_REGEX.test(value)) {
46
+ return 'Invalid characters in Android package name. Only alphanumeric characters, "." and "_" are allowed, and each "." must be followed by a letter or number.';
47
+ }
48
+ return true;
33
49
  }
50
+ // https://en.wikipedia.org/wiki/List_of_Java_keywords
51
+ // Running the following in the console and pruning the "Reserved Identifiers" section:
52
+ // [...document.querySelectorAll('dl > dt > code')].map(node => node.innerText)
53
+ const RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS = [
54
+ // List of Java keywords
55
+ "_",
56
+ "abstract",
57
+ "assert",
58
+ "boolean",
59
+ "break",
60
+ "byte",
61
+ "case",
62
+ "catch",
63
+ "char",
64
+ "class",
65
+ "const",
66
+ "continue",
67
+ "default",
68
+ "do",
69
+ "double",
70
+ "else",
71
+ "enum",
72
+ "extends",
73
+ "final",
74
+ "finally",
75
+ "float",
76
+ "for",
77
+ "goto",
78
+ "if",
79
+ "implements",
80
+ "import",
81
+ "instanceof",
82
+ "int",
83
+ "interface",
84
+ "long",
85
+ "native",
86
+ "new",
87
+ "package",
88
+ "private",
89
+ "protected",
90
+ "public",
91
+ "return",
92
+ "short",
93
+ "static",
94
+ "super",
95
+ "switch",
96
+ "synchronized",
97
+ "this",
98
+ "throw",
99
+ "throws",
100
+ "transient",
101
+ "try",
102
+ "void",
103
+ "volatile",
104
+ "while",
105
+ // Reserved words for literal values
106
+ "true",
107
+ "false",
108
+ "null",
109
+ // Unused
110
+ "const",
111
+ "goto",
112
+ "strictfp",
113
+ ];
34
114
  function assertValidBundleId(value) {
35
115
  _assert.default.match(value, IOS_BUNDLE_ID_REGEX, `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`);
36
116
  }
37
117
  function assertValidPackage(value) {
38
- _assert.default.match(value, ANDROID_PACKAGE_REGEX, `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.`);
118
+ _assert.default.match(value, ANDROID_PACKAGE_REGEX, `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter. The Java keyword 'native' is not allowed.`);
39
119
  }
40
120
  async function getBundleIdWarningInternalAsync(bundleId) {
41
121
  if (_env.env.EXPO_OFFLINE) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/validateApplicationId.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { fetchAsync } from '../api/rest/client';\nimport { Log } from '../log';\nimport { env } from './env';\nimport { memoize } from './fn';\nimport { learnMore } from './link';\nimport { isUrlAvailableAsync } from './url';\n\nconst debug = require('debug')('expo:utils:validateApplicationId') as typeof console.log;\n\nconst IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;\nconst ANDROID_PACKAGE_REGEX = /^[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)+$/;\n\n/** Validate an iOS bundle identifier. */\nexport function validateBundleId(value: string): boolean {\n return IOS_BUNDLE_ID_REGEX.test(value);\n}\n\n/** Validate an Android package name. */\nexport function validatePackage(value: string): boolean {\n return ANDROID_PACKAGE_REGEX.test(value);\n}\n\nexport function assertValidBundleId(value: string) {\n assert.match(\n value,\n IOS_BUNDLE_ID_REGEX,\n `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\nexport function assertValidPackage(value: string) {\n assert.match(\n value,\n ANDROID_PACKAGE_REGEX,\n `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\n/** @private */\nexport async function getBundleIdWarningInternalAsync(bundleId: string): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Apple bundle identifier reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('itunes.apple.com'))) {\n debug(\n `Couldn't connect to iTunes Store to check bundle ID ${bundleId}. itunes.apple.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `http://itunes.apple.com/lookup?bundleId=${bundleId}`;\n try {\n debug(`Checking iOS bundle ID '${bundleId}' at: ${url}`);\n const response = await fetchAsync(url);\n const json = await response.json();\n if (json.resultCount > 0) {\n const firstApp = json.results[0];\n return formatInUseWarning(firstApp.trackName, firstApp.sellerName, bundleId);\n }\n } catch (error: any) {\n debug(`Error checking bundle ID ${bundleId}: ${error.message}`);\n // Error fetching itunes data.\n }\n return null;\n}\n\n/** Returns a warning message if an iOS bundle identifier is potentially already in use. */\nexport const getBundleIdWarningAsync = memoize(getBundleIdWarningInternalAsync);\n\n/** @private */\nexport async function getPackageNameWarningInternalAsync(\n packageName: string\n): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Android package name reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('play.google.com'))) {\n debug(\n `Couldn't connect to Play Store to check package name ${packageName}. play.google.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `https://play.google.com/store/apps/details?id=${packageName}`;\n try {\n debug(`Checking Android package name '${packageName}' at: ${url}`);\n const response = await fetchAsync(url);\n // If the page exists, then warn the user.\n if (response.status === 200) {\n // There is no JSON API for the Play Store so we can't concisely\n // locate the app name and developer to match the iOS warning.\n return `⚠️ The package ${chalk.bold(packageName)} is already in use. ${chalk.dim(\n learnMore(url)\n )}`;\n }\n } catch (error: any) {\n // Error fetching play store data or the page doesn't exist.\n debug(`Error checking package name ${packageName}: ${error.message}`);\n }\n return null;\n}\n\nfunction formatInUseWarning(appName: string, author: string, id: string): string {\n return `⚠️ The app ${chalk.bold(appName)} by ${chalk.italic(\n author\n )} is already using ${chalk.bold(id)}`;\n}\n\n/** Returns a warning message if an Android package name is potentially already in use. */\nexport const getPackageNameWarningAsync = memoize(getPackageNameWarningInternalAsync);\n"],"names":["validateBundleId","validatePackage","assertValidBundleId","assertValidPackage","getBundleIdWarningInternalAsync","getPackageNameWarningInternalAsync","debug","require","IOS_BUNDLE_ID_REGEX","ANDROID_PACKAGE_REGEX","value","test","assert","match","bundleId","env","EXPO_OFFLINE","Log","warn","isUrlAvailableAsync","url","response","fetchAsync","json","resultCount","firstApp","results","formatInUseWarning","trackName","sellerName","error","message","getBundleIdWarningAsync","memoize","packageName","status","chalk","bold","dim","learnMore","appName","author","id","italic","getPackageNameWarningAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/validateApplicationId.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { env } from './env';\nimport { memoize } from './fn';\nimport { learnMore } from './link';\nimport { isUrlAvailableAsync } from './url';\nimport { fetchAsync } from '../api/rest/client';\nimport { Log } from '../log';\n\nconst debug = require('debug')('expo:utils:validateApplicationId') as typeof console.log;\n\nconst IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;\nconst ANDROID_PACKAGE_REGEX = /^(?!.*\\bnative\\b)[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)+$/;\n\n/** Validate an iOS bundle identifier. */\nexport function validateBundleId(value: string): boolean {\n return IOS_BUNDLE_ID_REGEX.test(value);\n}\n\n/** Validate an Android package name. */\nexport function validatePackage(value: string): boolean {\n return validatePackageWithWarning(value) === true;\n}\n\n/** Validate an Android package name and return the reason if invalid. */\nexport function validatePackageWithWarning(value: string): true | string {\n const parts = value.split('.');\n for (const segment of parts) {\n if (RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS.includes(segment)) {\n return `\"${segment}\" is a reserved Java keyword.`;\n }\n }\n if (parts.length < 2) {\n return `Package name must contain more than one segment, separated by \".\", e.g. com.${value}`;\n }\n if (!ANDROID_PACKAGE_REGEX.test(value)) {\n return 'Invalid characters in Android package name. Only alphanumeric characters, \".\" and \"_\" are allowed, and each \".\" must be followed by a letter or number.';\n }\n\n return true;\n}\n\n// https://en.wikipedia.org/wiki/List_of_Java_keywords\n// Running the following in the console and pruning the \"Reserved Identifiers\" section:\n// [...document.querySelectorAll('dl > dt > code')].map(node => node.innerText)\nconst RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS = [\n // List of Java keywords\n '_',\n 'abstract',\n 'assert',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'default',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'extends',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'instanceof',\n 'int',\n 'interface',\n 'long',\n 'native',\n 'new',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'try',\n 'void',\n 'volatile',\n 'while',\n // Reserved words for literal values\n 'true',\n 'false',\n 'null',\n // Unused\n 'const',\n 'goto',\n 'strictfp',\n];\n\nexport function assertValidBundleId(value: string) {\n assert.match(\n value,\n IOS_BUNDLE_ID_REGEX,\n `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\nexport function assertValidPackage(value: string) {\n assert.match(\n value,\n ANDROID_PACKAGE_REGEX,\n `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter. The Java keyword 'native' is not allowed.`\n );\n}\n\n/** @private */\nexport async function getBundleIdWarningInternalAsync(bundleId: string): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Apple bundle identifier reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('itunes.apple.com'))) {\n debug(\n `Couldn't connect to iTunes Store to check bundle ID ${bundleId}. itunes.apple.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `http://itunes.apple.com/lookup?bundleId=${bundleId}`;\n try {\n debug(`Checking iOS bundle ID '${bundleId}' at: ${url}`);\n const response = await fetchAsync(url);\n const json = await response.json();\n if (json.resultCount > 0) {\n const firstApp = json.results[0];\n return formatInUseWarning(firstApp.trackName, firstApp.sellerName, bundleId);\n }\n } catch (error: any) {\n debug(`Error checking bundle ID ${bundleId}: ${error.message}`);\n // Error fetching itunes data.\n }\n return null;\n}\n\n/** Returns a warning message if an iOS bundle identifier is potentially already in use. */\nexport const getBundleIdWarningAsync = memoize(getBundleIdWarningInternalAsync);\n\n/** @private */\nexport async function getPackageNameWarningInternalAsync(\n packageName: string\n): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Android package name reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('play.google.com'))) {\n debug(\n `Couldn't connect to Play Store to check package name ${packageName}. play.google.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `https://play.google.com/store/apps/details?id=${packageName}`;\n try {\n debug(`Checking Android package name '${packageName}' at: ${url}`);\n const response = await fetchAsync(url);\n // If the page exists, then warn the user.\n if (response.status === 200) {\n // There is no JSON API for the Play Store so we can't concisely\n // locate the app name and developer to match the iOS warning.\n return `⚠️ The package ${chalk.bold(packageName)} is already in use. ${chalk.dim(\n learnMore(url)\n )}`;\n }\n } catch (error: any) {\n // Error fetching play store data or the page doesn't exist.\n debug(`Error checking package name ${packageName}: ${error.message}`);\n }\n return null;\n}\n\nfunction formatInUseWarning(appName: string, author: string, id: string): string {\n return `⚠️ The app ${chalk.bold(appName)} by ${chalk.italic(\n author\n )} is already using ${chalk.bold(id)}`;\n}\n\n/** Returns a warning message if an Android package name is potentially already in use. */\nexport const getPackageNameWarningAsync = memoize(getPackageNameWarningInternalAsync);\n"],"names":["validateBundleId","validatePackage","validatePackageWithWarning","assertValidBundleId","assertValidPackage","getBundleIdWarningInternalAsync","getPackageNameWarningInternalAsync","debug","require","IOS_BUNDLE_ID_REGEX","ANDROID_PACKAGE_REGEX","value","test","parts","split","segment","RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS","includes","length","assert","match","bundleId","env","EXPO_OFFLINE","Log","warn","isUrlAvailableAsync","url","response","fetchAsync","json","resultCount","firstApp","results","formatInUseWarning","trackName","sellerName","error","message","getBundleIdWarningAsync","memoize","packageName","status","chalk","bold","dim","learnMore","appName","author","id","italic","getPackageNameWarningAsync"],"mappings":"AAAA;;;;QAgBgBA,gBAAgB,GAAhBA,gBAAgB;QAKhBC,eAAe,GAAfA,eAAe;QAKfC,0BAA0B,GAA1BA,0BAA0B;QAkF1BC,mBAAmB,GAAnBA,mBAAmB;QAQnBC,kBAAkB,GAAlBA,kBAAkB;QASZC,+BAA+B,GAA/BA,+BAA+B;QAkC/BC,kCAAkC,GAAlCA,kCAAkC;;AA/JrC,IAAA,OAAQ,kCAAR,QAAQ,EAAA;AACT,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEL,IAAA,IAAO,WAAP,OAAO,CAAA;AACH,IAAA,GAAM,WAAN,MAAM,CAAA;AACJ,IAAA,KAAQ,WAAR,QAAQ,CAAA;AACE,IAAA,IAAO,WAAP,OAAO,CAAA;AAChB,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AAC3B,IAAA,IAAQ,WAAR,QAAQ,CAAA;;;;;;AAE5B,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,kCAAkC,CAAC,AAAsB,AAAC;AAEzF,MAAMC,mBAAmB,qBAAqB,AAAC;AAC/C,MAAMC,qBAAqB,sEAAsE,AAAC;AAG3F,SAASV,gBAAgB,CAACW,KAAa,EAAW;IACvD,OAAOF,mBAAmB,CAACG,IAAI,CAACD,KAAK,CAAC,CAAC;CACxC;AAGM,SAASV,eAAe,CAACU,KAAa,EAAW;IACtD,OAAOT,0BAA0B,CAACS,KAAK,CAAC,KAAK,IAAI,CAAC;CACnD;AAGM,SAAST,0BAA0B,CAACS,KAAa,EAAiB;IACvE,MAAME,KAAK,GAAGF,KAAK,CAACG,KAAK,CAAC,GAAG,CAAC,AAAC;IAC/B,KAAK,MAAMC,OAAO,IAAIF,KAAK,CAAE;QAC3B,IAAIG,sCAAsC,CAACC,QAAQ,CAACF,OAAO,CAAC,EAAE;YAC5D,OAAO,CAAC,CAAC,EAAEA,OAAO,CAAC,6BAA6B,CAAC,CAAC;SACnD;KACF;IACD,IAAIF,KAAK,CAACK,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO,CAAC,4EAA4E,EAAEP,KAAK,CAAC,CAAC,CAAC;KAC/F;IACD,IAAI,CAACD,qBAAqB,CAACE,IAAI,CAACD,KAAK,CAAC,EAAE;QACtC,OAAO,yJAAyJ,CAAC;KAClK;IAED,OAAO,IAAI,CAAC;CACb;AAED,sDAAsD;AACtD,uFAAuF;AACvF,+EAA+E;AAC/E,MAAMK,sCAAsC,GAAG;IAC7C,wBAAwB;IACxB,GAAG;IACH,UAAU;IACV,QAAQ;IACR,SAAS;IACT,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,UAAU;IACV,SAAS;IACT,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,OAAO;IACP,SAAS;IACT,OAAO;IACP,KAAK;IACL,MAAM;IACN,IAAI;IACJ,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,KAAK;IACL,WAAW;IACX,MAAM;IACN,QAAQ;IACR,KAAK;IACL,SAAS;IACT,SAAS;IACT,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,cAAc;IACd,MAAM;IACN,OAAO;IACP,QAAQ;IACR,WAAW;IACX,KAAK;IACL,MAAM;IACN,UAAU;IACV,OAAO;IACP,oCAAoC;IACpC,MAAM;IACN,OAAO;IACP,MAAM;IACN,SAAS;IACT,OAAO;IACP,MAAM;IACN,UAAU;CACX,AAAC;AAEK,SAASb,mBAAmB,CAACQ,KAAa,EAAE;IACjDQ,OAAM,QAAA,CAACC,KAAK,CACVT,KAAK,EACLF,mBAAmB,EACnB,CAAC,uLAAuL,CAAC,CAC1L,CAAC;CACH;AAEM,SAASL,kBAAkB,CAACO,KAAa,EAAE;IAChDQ,OAAM,QAAA,CAACC,KAAK,CACVT,KAAK,EACLD,qBAAqB,EACrB,CAAC,mLAAmL,CAAC,CACtL,CAAC;CACH;AAGM,eAAeL,+BAA+B,CAACgB,QAAgB,EAA0B;IAC9F,IAAIC,IAAG,IAAA,CAACC,YAAY,EAAE;QACpBC,IAAG,IAAA,CAACC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAE,MAAMC,CAAAA,GAAAA,IAAmB,AAAoB,CAAA,oBAApB,CAAC,kBAAkB,CAAC,AAAC,EAAE;QACpDnB,KAAK,CACH,CAAC,oDAAoD,EAAEc,QAAQ,CAAC,+BAA+B,CAAC,CACjG,CAAC;QACF,qFAAqF;QACrF,OAAO,IAAI,CAAC;KACb;IAED,MAAMM,GAAG,GAAG,CAAC,wCAAwC,EAAEN,QAAQ,CAAC,CAAC,AAAC;IAClE,IAAI;QACFd,KAAK,CAAC,CAAC,wBAAwB,EAAEc,QAAQ,CAAC,MAAM,EAAEM,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,MAAMC,QAAQ,GAAG,MAAMC,CAAAA,GAAAA,OAAU,AAAK,CAAA,WAAL,CAACF,GAAG,CAAC,AAAC;QACvC,MAAMG,IAAI,GAAG,MAAMF,QAAQ,CAACE,IAAI,EAAE,AAAC;QACnC,IAAIA,IAAI,CAACC,WAAW,GAAG,CAAC,EAAE;YACxB,MAAMC,QAAQ,GAAGF,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC,AAAC;YACjC,OAAOC,kBAAkB,CAACF,QAAQ,CAACG,SAAS,EAAEH,QAAQ,CAACI,UAAU,EAAEf,QAAQ,CAAC,CAAC;SAC9E;KACF,CAAC,OAAOgB,KAAK,EAAO;QACnB9B,KAAK,CAAC,CAAC,yBAAyB,EAAEc,QAAQ,CAAC,EAAE,EAAEgB,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChE,8BAA8B;KAC/B;IACD,OAAO,IAAI,CAAC;CACb;AAGM,MAAMC,uBAAuB,GAAGC,CAAAA,GAAAA,GAAO,AAAiC,CAAA,QAAjC,CAACnC,+BAA+B,CAAC,AAAC;QAAnEkC,uBAAuB,GAAvBA,uBAAuB;AAG7B,eAAejC,kCAAkC,CACtDmC,WAAmB,EACK;IACxB,IAAInB,IAAG,IAAA,CAACC,YAAY,EAAE;QACpBC,IAAG,IAAA,CAACC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAE,MAAMC,CAAAA,GAAAA,IAAmB,AAAmB,CAAA,oBAAnB,CAAC,iBAAiB,CAAC,AAAC,EAAE;QACnDnB,KAAK,CACH,CAAC,qDAAqD,EAAEkC,WAAW,CAAC,8BAA8B,CAAC,CACpG,CAAC;QACF,qFAAqF;QACrF,OAAO,IAAI,CAAC;KACb;IAED,MAAMd,GAAG,GAAG,CAAC,8CAA8C,EAAEc,WAAW,CAAC,CAAC,AAAC;IAC3E,IAAI;QACFlC,KAAK,CAAC,CAAC,+BAA+B,EAAEkC,WAAW,CAAC,MAAM,EAAEd,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,MAAMC,QAAQ,GAAG,MAAMC,CAAAA,GAAAA,OAAU,AAAK,CAAA,WAAL,CAACF,GAAG,CAAC,AAAC;QACvC,0CAA0C;QAC1C,IAAIC,QAAQ,CAACc,MAAM,KAAK,GAAG,EAAE;YAC3B,gEAAgE;YAChE,8DAA8D;YAC9D,OAAO,CAAC,oBAAgB,EAAMC,MAAK,QAAA,CAACC,IAAI,CAACH,WAAW,CAAC,CAAC,oBAAoB,EAAEE,MAAK,QAAA,CAACE,GAAG,CAC/EC,CAAJA,GAAAA,KAAS,AAAK,CAAA,UAAL,CAACnB,GAAG,CAAC,CACf,CAAC,CAAC,CAAC;SACL;KACF,CAAC,OAAOU,KAAK,EAAO;QACnB,4DAA4D;QAC5D9B,KAAK,CAAC,CAAC,4BAA4B,EAAEkC,WAAW,CAAC,EAAE,EAAEJ,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;KACvE;IACD,OAAO,IAAI,CAAC;CACb;AAED,SAASJ,kBAAkB,CAACa,OAAe,EAAEC,MAAc,EAAEC,EAAU,EAAU;IAC/E,OAAO,CAAC,gBAAY,EAAEN,MAAK,QAAA,CAACC,IAAI,CAACG,OAAO,CAAC,CAAC,IAAI,EAAEJ,MAAK,QAAA,CAACO,MAAM,CAC1DF,MAAM,CACP,CAAC,kBAAkB,EAAEL,MAAK,QAAA,CAACC,IAAI,CAACK,EAAE,CAAC,CAAC,CAAC,CAAC;CACxC;AAGM,MAAME,0BAA0B,GAAGX,CAAAA,GAAAA,GAAO,AAAoC,CAAA,QAApC,CAAClC,kCAAkC,CAAC,AAAC;QAAzE6C,0BAA0B,GAA1BA,0BAA0B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -39,17 +39,17 @@
39
39
  "dependencies": {
40
40
  "@babel/runtime": "^7.20.0",
41
41
  "@expo/code-signing-certificates": "0.0.5",
42
- "@expo/config": "~8.2.0",
43
- "@expo/config-plugins": "~7.3.0",
44
- "@expo/dev-server": "0.6.0",
42
+ "@expo/config": "~8.3.0",
43
+ "@expo/config-plugins": "~7.4.0",
44
+ "@expo/dev-server": "0.7.0",
45
45
  "@expo/devcert": "^1.0.0",
46
46
  "@expo/env": "~0.1.0",
47
47
  "@expo/json-file": "^8.2.37",
48
- "@expo/metro-config": "~0.11.0",
48
+ "@expo/metro-config": "~0.12.0",
49
49
  "@expo/osascript": "^2.0.31",
50
50
  "@expo/package-manager": "~1.0.0",
51
51
  "@expo/plist": "^0.0.20",
52
- "@expo/prebuild-config": "6.3.0",
52
+ "@expo/prebuild-config": "6.4.0",
53
53
  "@expo/rudder-sdk-node": "1.1.1",
54
54
  "@expo/spawn-async": "1.5.0",
55
55
  "@expo/xcpretty": "^4.2.1",
@@ -68,6 +68,7 @@
68
68
  "freeport-async": "2.0.0",
69
69
  "fs-extra": "~8.1.0",
70
70
  "getenv": "^1.0.0",
71
+ "glob": "^7.1.7",
71
72
  "graphql": "15.8.0",
72
73
  "graphql-tag": "^2.10.1",
73
74
  "https-proxy-agent": "^5.0.1",
@@ -75,8 +76,8 @@
75
76
  "is-root": "^2.1.0",
76
77
  "js-yaml": "^3.13.1",
77
78
  "json-schema-deref-sync": "^0.13.0",
78
- "md5-file": "^3.2.3",
79
79
  "md5hex": "^1.0.0",
80
+ "minimatch": "^3.0.4",
80
81
  "minipass": "3.1.6",
81
82
  "node-fetch": "^2.6.7",
82
83
  "node-forge": "^1.3.1",
@@ -142,7 +143,9 @@
142
143
  "expo-module-scripts": "^3.0.0",
143
144
  "find-process": "^1.4.7",
144
145
  "klaw-sync": "^6.0.0",
146
+ "memfs": "^3.2.0",
145
147
  "nock": "~13.2.2",
148
+ "node-html-parser": "^6.1.5",
146
149
  "nullthrows": "^1.1.1",
147
150
  "structured-headers": "^0.4.1",
148
151
  "taskr": "1.1.0",
@@ -150,5 +153,5 @@
150
153
  "jest-runner-tsd": "^6.0.0",
151
154
  "tsd": "^0.28.1"
152
155
  },
153
- "gitHead": "663654577a7068c641b5e9474efbc502e3f334ea"
156
+ "gitHead": "79607a7325f47aa17c36d266100d09a4ff2cc544"
154
157
  }
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- exports.signClassicExpoGoManifestAsync = signClassicExpoGoManifestAsync;
6
- var _client = require("./rest/client");
7
- var _actions = require("./user/actions");
8
- var _user = require("./user/user");
9
- async function signClassicExpoGoManifestAsync(manifest) {
10
- await (0, _actions).ensureLoggedInAsync();
11
- var _owner;
12
- const res = await (0, _client).fetchAsync("manifest/sign", {
13
- method: "POST",
14
- body: JSON.stringify({
15
- args: {
16
- remoteUsername: (_owner = manifest.owner) != null ? _owner : (0, _user).getActorDisplayName(await (0, _user).getUserAsync()),
17
- remotePackageName: manifest.slug
18
- },
19
- manifest: manifest
20
- })
21
- });
22
- const { data } = await res.json();
23
- return data.response;
24
- }
25
-
26
- //# sourceMappingURL=signManifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/api/signManifest.ts"],"sourcesContent":["import { ExpoAppManifest } from '@expo/config';\nimport { JSONObject } from '@expo/json-file';\n\nimport { fetchAsync } from './rest/client';\nimport { ensureLoggedInAsync } from './user/actions';\nimport { getActorDisplayName, getUserAsync } from './user/user';\n\n/** Sign a classic manifest to access secure features in sandboxed environments like Expo Go. */\nexport async function signClassicExpoGoManifestAsync(\n manifest: Partial<ExpoAppManifest>\n): Promise<string> {\n await ensureLoggedInAsync();\n const res = await fetchAsync('manifest/sign', {\n method: 'POST',\n body: JSON.stringify({\n args: {\n remoteUsername: manifest.owner ?? getActorDisplayName(await getUserAsync()),\n remotePackageName: manifest.slug,\n },\n manifest: manifest as JSONObject,\n }),\n });\n const { data } = await res.json();\n return data.response;\n}\n"],"names":["signClassicExpoGoManifestAsync","manifest","ensureLoggedInAsync","res","fetchAsync","method","body","JSON","stringify","args","remoteUsername","owner","getActorDisplayName","getUserAsync","remotePackageName","slug","data","json","response"],"mappings":"AAAA;;;;QAQsBA,8BAA8B,GAA9BA,8BAA8B;AALzB,IAAA,OAAe,WAAf,eAAe,CAAA;AACN,IAAA,QAAgB,WAAhB,gBAAgB,CAAA;AACF,IAAA,KAAa,WAAb,aAAa,CAAA;AAGxD,eAAeA,8BAA8B,CAClDC,QAAkC,EACjB;IACjB,MAAMC,CAAAA,GAAAA,QAAmB,AAAE,CAAA,oBAAF,EAAE,CAAC;QAKND,MAAc;IAJpC,MAAME,GAAG,GAAG,MAAMC,CAAAA,GAAAA,OAAU,AAS1B,CAAA,WAT0B,CAAC,eAAe,EAAE;QAC5CC,MAAM,EAAE,MAAM;QACdC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;YACnBC,IAAI,EAAE;gBACJC,cAAc,EAAET,CAAAA,MAAc,GAAdA,QAAQ,CAACU,KAAK,YAAdV,MAAc,GAAIW,CAAAA,GAAAA,KAAmB,AAAsB,CAAA,oBAAtB,CAAC,MAAMC,CAAAA,GAAAA,KAAY,AAAE,CAAA,aAAF,EAAE,CAAC;gBAC3EC,iBAAiB,EAAEb,QAAQ,CAACc,IAAI;aACjC;YACDd,QAAQ,EAAEA,QAAQ;SACnB,CAAC;KACH,CAAC,AAAC;IACH,MAAM,EAAEe,IAAI,CAAA,EAAE,GAAG,MAAMb,GAAG,CAACc,IAAI,EAAE,AAAC;IAClC,OAAOD,IAAI,CAACE,QAAQ,CAAC;CACtB"}