@expo/cli 0.0.0 → 0.1.2

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 (388) hide show
  1. package/README.md +106 -0
  2. package/build/bin/cli +152 -0
  3. package/build/bin/cli.map +1 -0
  4. package/build/src/api/endpoint.js +17 -0
  5. package/build/src/api/endpoint.js.map +1 -0
  6. package/build/src/api/getExpoGoIntermediateCertificate.js +21 -0
  7. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -0
  8. package/build/src/api/getExpoSchema.js +69 -0
  9. package/build/src/api/getExpoSchema.js.map +1 -0
  10. package/build/src/api/getNativeModuleVersions.js +31 -0
  11. package/build/src/api/getNativeModuleVersions.js.map +1 -0
  12. package/build/src/api/getProject.js +19 -0
  13. package/build/src/api/getProject.js.map +1 -0
  14. package/build/src/api/getProjectDevelopmentCertificate.js +24 -0
  15. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -0
  16. package/build/src/api/getVersions.js +37 -0
  17. package/build/src/api/getVersions.js.map +1 -0
  18. package/build/src/api/graphql/client.js +104 -0
  19. package/build/src/api/graphql/client.js.map +1 -0
  20. package/build/src/api/graphql/generated.js +113 -0
  21. package/build/src/api/graphql/generated.js.map +1 -0
  22. package/build/src/api/graphql/queries/UserQuery.js +43 -0
  23. package/build/src/api/graphql/queries/UserQuery.js.map +1 -0
  24. package/build/src/api/rest/cache/FileSystemCache.js +79 -0
  25. package/build/src/api/rest/cache/FileSystemCache.js.map +1 -0
  26. package/build/src/api/rest/cache/response.js +31 -0
  27. package/build/src/api/rest/cache/response.js.map +1 -0
  28. package/build/src/api/rest/cache/wrapFetchWithCache.js +156 -0
  29. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -0
  30. package/build/src/api/rest/client.js +94 -0
  31. package/build/src/api/rest/client.js.map +1 -0
  32. package/build/src/api/rest/client.types.js +6 -0
  33. package/build/src/api/rest/client.types.js.map +1 -0
  34. package/build/src/api/rest/wrapFetchWithBaseUrl.js +20 -0
  35. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -0
  36. package/build/src/api/rest/wrapFetchWithOffline.js +39 -0
  37. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -0
  38. package/build/src/api/rest/wrapFetchWithProgress.js +59 -0
  39. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -0
  40. package/build/src/api/settings.js +11 -0
  41. package/build/src/api/settings.js.map +1 -0
  42. package/build/src/api/signManifest.js +38 -0
  43. package/build/src/api/signManifest.js.map +1 -0
  44. package/build/src/api/updateDevelopmentSession.js +74 -0
  45. package/build/src/api/updateDevelopmentSession.js.map +1 -0
  46. package/build/src/api/user/UserSettings.js +71 -0
  47. package/build/src/api/user/UserSettings.js.map +1 -0
  48. package/build/src/api/user/actions.js +97 -0
  49. package/build/src/api/user/actions.js.map +1 -0
  50. package/build/src/api/user/otp.js +139 -0
  51. package/build/src/api/user/otp.js.map +1 -0
  52. package/build/src/api/user/user.js +114 -0
  53. package/build/src/api/user/user.js.map +1 -0
  54. package/build/src/config/configAsync.js +118 -0
  55. package/build/src/config/configAsync.js.map +1 -0
  56. package/build/src/config/index.js +75 -0
  57. package/build/src/config/index.js.map +1 -0
  58. package/build/src/export/createBundles.js +62 -0
  59. package/build/src/export/createBundles.js.map +1 -0
  60. package/build/src/export/createMetadataJson.js +36 -0
  61. package/build/src/export/createMetadataJson.js.map +1 -0
  62. package/build/src/export/exportApp.js +102 -0
  63. package/build/src/export/exportApp.js.map +1 -0
  64. package/build/src/export/exportAssets.js +106 -0
  65. package/build/src/export/exportAssets.js.map +1 -0
  66. package/build/src/export/exportAsync.js +49 -0
  67. package/build/src/export/exportAsync.js.map +1 -0
  68. package/build/src/export/fork-bundleAsync.js +138 -0
  69. package/build/src/export/fork-bundleAsync.js.map +1 -0
  70. package/build/src/export/getPublicExpoManifest.js +28 -0
  71. package/build/src/export/getPublicExpoManifest.js.map +1 -0
  72. package/build/src/export/getResolvedLocales.js +35 -0
  73. package/build/src/export/getResolvedLocales.js.map +1 -0
  74. package/build/src/export/index.js +77 -0
  75. package/build/src/export/index.js.map +1 -0
  76. package/build/src/export/printBundleSizes.js +122 -0
  77. package/build/src/export/printBundleSizes.js.map +1 -0
  78. package/build/src/export/resolveOptions.js +24 -0
  79. package/build/src/export/resolveOptions.js.map +1 -0
  80. package/build/src/export/saveAssets.js +65 -0
  81. package/build/src/export/saveAssets.js.map +1 -0
  82. package/build/src/export/writeContents.js +108 -0
  83. package/build/src/export/writeContents.js.map +1 -0
  84. package/build/src/install/checkPackages.js +74 -0
  85. package/build/src/install/checkPackages.js.map +1 -0
  86. package/build/src/install/index.js +49 -0
  87. package/build/src/install/index.js.map +1 -0
  88. package/build/src/install/installAsync.js +103 -0
  89. package/build/src/install/installAsync.js.map +1 -0
  90. package/build/src/install/resolveOptions.js +99 -0
  91. package/build/src/install/resolveOptions.js.map +1 -0
  92. package/build/src/install/utils/autoAddConfigPlugins.js +87 -0
  93. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -0
  94. package/build/src/log.js +74 -0
  95. package/build/src/log.js.map +1 -0
  96. package/build/src/login/index.js +62 -0
  97. package/build/src/login/index.js.map +1 -0
  98. package/build/src/logout/index.js +48 -0
  99. package/build/src/logout/index.js.map +1 -0
  100. package/build/src/prebuild/clearNativeFolder.js +137 -0
  101. package/build/src/prebuild/clearNativeFolder.js.map +1 -0
  102. package/build/src/prebuild/configureProjectAsync.js +68 -0
  103. package/build/src/prebuild/configureProjectAsync.js.map +1 -0
  104. package/build/src/prebuild/copyTemplateFiles.js +124 -0
  105. package/build/src/prebuild/copyTemplateFiles.js.map +1 -0
  106. package/build/src/prebuild/ensureConfigAsync.js +86 -0
  107. package/build/src/prebuild/ensureConfigAsync.js.map +1 -0
  108. package/build/src/prebuild/index.js +90 -0
  109. package/build/src/prebuild/index.js.map +1 -0
  110. package/build/src/prebuild/prebuildAsync.js +112 -0
  111. package/build/src/prebuild/prebuildAsync.js.map +1 -0
  112. package/build/src/prebuild/resolveOptions.js +97 -0
  113. package/build/src/prebuild/resolveOptions.js.map +1 -0
  114. package/build/src/prebuild/resolveTemplate.js +157 -0
  115. package/build/src/prebuild/resolveTemplate.js.map +1 -0
  116. package/build/src/prebuild/updateFromTemplate.js +102 -0
  117. package/build/src/prebuild/updateFromTemplate.js.map +1 -0
  118. package/build/src/prebuild/updatePackageJson.js +236 -0
  119. package/build/src/prebuild/updatePackageJson.js.map +1 -0
  120. package/build/src/prebuild/writeMetroConfig.js +89 -0
  121. package/build/src/prebuild/writeMetroConfig.js.map +1 -0
  122. package/build/src/register/index.js +48 -0
  123. package/build/src/register/index.js.map +1 -0
  124. package/build/src/register/registerAsync.js +37 -0
  125. package/build/src/register/registerAsync.js.map +1 -0
  126. package/build/src/run/android/index.js +97 -0
  127. package/build/src/run/android/index.js.map +1 -0
  128. package/build/src/run/android/resolveDevice.js +23 -0
  129. package/build/src/run/android/resolveDevice.js.map +1 -0
  130. package/build/src/run/android/resolveGradleProps.js +37 -0
  131. package/build/src/run/android/resolveGradleProps.js.map +1 -0
  132. package/build/src/run/android/resolveInstallApkName.js +72 -0
  133. package/build/src/run/android/resolveInstallApkName.js.map +1 -0
  134. package/build/src/run/android/resolveLaunchProps.js +32 -0
  135. package/build/src/run/android/resolveLaunchProps.js.map +1 -0
  136. package/build/src/run/android/resolveOptions.js +25 -0
  137. package/build/src/run/android/resolveOptions.js.map +1 -0
  138. package/build/src/run/android/runAndroidAsync.js +74 -0
  139. package/build/src/run/android/runAndroidAsync.js.map +1 -0
  140. package/build/src/run/ensureNativeProject.js +33 -0
  141. package/build/src/run/ensureNativeProject.js.map +1 -0
  142. package/build/src/run/hints.js +22 -0
  143. package/build/src/run/hints.js.map +1 -0
  144. package/build/src/run/resolveBundlerProps.js +31 -0
  145. package/build/src/run/resolveBundlerProps.js.map +1 -0
  146. package/build/src/run/startBundler.js +76 -0
  147. package/build/src/run/startBundler.js.map +1 -0
  148. package/build/src/start/doctor/Prerequisite.js +47 -0
  149. package/build/src/start/doctor/Prerequisite.js.map +1 -0
  150. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +68 -0
  151. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -0
  152. package/build/src/start/doctor/apple/XcodePrerequisite.js +115 -0
  153. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -0
  154. package/build/src/start/doctor/apple/XcrunPrerequisite.js +65 -0
  155. package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -0
  156. package/build/src/start/doctor/dependencies/bundledNativeModules.js +64 -0
  157. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -0
  158. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +131 -0
  159. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -0
  160. package/build/src/start/doctor/dependencies/getMissingPackages.js +95 -0
  161. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -0
  162. package/build/src/start/doctor/dependencies/getVersionedPackages.js +119 -0
  163. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -0
  164. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +147 -0
  165. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -0
  166. package/build/src/start/doctor/ngrok/ExternalModule.js +164 -0
  167. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -0
  168. package/build/src/start/doctor/ngrok/NgrokResolver.js +17 -0
  169. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -0
  170. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +142 -0
  171. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -0
  172. package/build/src/start/doctor/typescript/updateTSConfig.js +92 -0
  173. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -0
  174. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +112 -0
  175. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -0
  176. package/build/src/start/index.js +116 -0
  177. package/build/src/start/index.js.map +1 -0
  178. package/build/src/start/interface/KeyPressHandler.js +99 -0
  179. package/build/src/start/interface/KeyPressHandler.js.map +1 -0
  180. package/build/src/start/interface/commandsTable.js +175 -0
  181. package/build/src/start/interface/commandsTable.js.map +1 -0
  182. package/build/src/start/interface/interactiveActions.js +134 -0
  183. package/build/src/start/interface/interactiveActions.js.map +1 -0
  184. package/build/src/start/interface/startInterface.js +217 -0
  185. package/build/src/start/interface/startInterface.js.map +1 -0
  186. package/build/src/start/platforms/AppIdResolver.js +44 -0
  187. package/build/src/start/platforms/AppIdResolver.js.map +1 -0
  188. package/build/src/start/platforms/DeviceManager.js +43 -0
  189. package/build/src/start/platforms/DeviceManager.js.map +1 -0
  190. package/build/src/start/platforms/ExpoGoInstaller.js +111 -0
  191. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -0
  192. package/build/src/start/platforms/PlatformManager.js +121 -0
  193. package/build/src/start/platforms/PlatformManager.js.map +1 -0
  194. package/build/src/start/platforms/android/ADBServer.js +129 -0
  195. package/build/src/start/platforms/android/ADBServer.js.map +1 -0
  196. package/build/src/start/platforms/android/AndroidAppIdResolver.js +40 -0
  197. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -0
  198. package/build/src/start/platforms/android/AndroidDeviceManager.js +183 -0
  199. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -0
  200. package/build/src/start/platforms/android/AndroidPlatformManager.js +35 -0
  201. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -0
  202. package/build/src/start/platforms/android/activateWindow.js +80 -0
  203. package/build/src/start/platforms/android/activateWindow.js.map +1 -0
  204. package/build/src/start/platforms/android/adb.js +263 -0
  205. package/build/src/start/platforms/android/adb.js.map +1 -0
  206. package/build/src/start/platforms/android/adbReverse.js +84 -0
  207. package/build/src/start/platforms/android/adbReverse.js.map +1 -0
  208. package/build/src/start/platforms/android/emulator.js +118 -0
  209. package/build/src/start/platforms/android/emulator.js.map +1 -0
  210. package/build/src/start/platforms/android/getDevices.js +36 -0
  211. package/build/src/start/platforms/android/getDevices.js.map +1 -0
  212. package/build/src/start/platforms/android/gradle.js +86 -0
  213. package/build/src/start/platforms/android/gradle.js.map +1 -0
  214. package/build/src/start/platforms/android/promptAndroidDevice.js +60 -0
  215. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -0
  216. package/build/src/start/platforms/ios/AppleAppIdResolver.js +46 -0
  217. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -0
  218. package/build/src/start/platforms/ios/AppleDeviceManager.js +201 -0
  219. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -0
  220. package/build/src/start/platforms/ios/ApplePlatformManager.js +31 -0
  221. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -0
  222. package/build/src/start/platforms/ios/assertSystemRequirements.js +16 -0
  223. package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -0
  224. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +85 -0
  225. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -0
  226. package/build/src/start/platforms/ios/getBestSimulator.js +101 -0
  227. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -0
  228. package/build/src/start/platforms/ios/promptAppleDevice.js +60 -0
  229. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -0
  230. package/build/src/start/platforms/ios/simctl.js +229 -0
  231. package/build/src/start/platforms/ios/simctl.js.map +1 -0
  232. package/build/src/start/platforms/ios/xcrun.js +67 -0
  233. package/build/src/start/platforms/ios/xcrun.js.map +1 -0
  234. package/build/src/start/project/devices.js +77 -0
  235. package/build/src/start/project/devices.js.map +1 -0
  236. package/build/src/start/project/dotExpo.js +74 -0
  237. package/build/src/start/project/dotExpo.js.map +1 -0
  238. package/build/src/start/project/settings.js +13 -0
  239. package/build/src/start/project/settings.js.map +1 -0
  240. package/build/src/start/resolveOptions.js +156 -0
  241. package/build/src/start/resolveOptions.js.map +1 -0
  242. package/build/src/start/server/AsyncNgrok.js +173 -0
  243. package/build/src/start/server/AsyncNgrok.js.map +1 -0
  244. package/build/src/start/server/BundlerDevServer.js +312 -0
  245. package/build/src/start/server/BundlerDevServer.js.map +1 -0
  246. package/build/src/start/server/DevServerManager.js +142 -0
  247. package/build/src/start/server/DevServerManager.js.map +1 -0
  248. package/build/src/start/server/DevelopmentSession.js +104 -0
  249. package/build/src/start/server/DevelopmentSession.js.map +1 -0
  250. package/build/src/start/server/UrlCreator.js +159 -0
  251. package/build/src/start/server/UrlCreator.js.map +1 -0
  252. package/build/src/start/server/metro/MetroBundlerDevServer.js +97 -0
  253. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -0
  254. package/build/src/start/server/metro/MetroTerminalReporter.js +178 -0
  255. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -0
  256. package/build/src/start/server/metro/TerminalReporter.js +87 -0
  257. package/build/src/start/server/metro/TerminalReporter.js.map +1 -0
  258. package/build/src/start/server/metro/TerminalReporter.types.js +6 -0
  259. package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -0
  260. package/build/src/start/server/metro/instantiateMetro.js +66 -0
  261. package/build/src/start/server/metro/instantiateMetro.js.map +1 -0
  262. package/build/src/start/server/metro/resolveFromProject.js +38 -0
  263. package/build/src/start/server/metro/resolveFromProject.js.map +1 -0
  264. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +145 -0
  265. package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +1 -0
  266. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +185 -0
  267. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -0
  268. package/build/src/start/server/middleware/ExpoMiddleware.js +78 -0
  269. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -0
  270. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +70 -0
  271. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -0
  272. package/build/src/start/server/middleware/ManifestMiddleware.js +177 -0
  273. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -0
  274. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +69 -0
  275. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -0
  276. package/build/src/start/server/middleware/createDevServerMiddleware.js +24 -0
  277. package/build/src/start/server/middleware/createDevServerMiddleware.js.map +1 -0
  278. package/build/src/start/server/middleware/resolveAssets.js +110 -0
  279. package/build/src/start/server/middleware/resolveAssets.js.map +1 -0
  280. package/build/src/start/server/middleware/resolveEntryPoint.js +37 -0
  281. package/build/src/start/server/middleware/resolveEntryPoint.js.map +1 -0
  282. package/build/src/start/server/middleware/resolvePlatform.js +32 -0
  283. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -0
  284. package/build/src/start/server/middleware/server.types.js +6 -0
  285. package/build/src/start/server/middleware/server.types.js.map +1 -0
  286. package/build/src/start/server/openPlatforms.js +30 -0
  287. package/build/src/start/server/openPlatforms.js.map +1 -0
  288. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +299 -0
  289. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -0
  290. package/build/src/start/server/webpack/formatWebpackMessages.js +94 -0
  291. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -0
  292. package/build/src/start/server/webpack/resolveFromProject.js +43 -0
  293. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -0
  294. package/build/src/start/server/webpack/tls.js +72 -0
  295. package/build/src/start/server/webpack/tls.js.map +1 -0
  296. package/build/src/start/startAsync.js +150 -0
  297. package/build/src/start/startAsync.js.map +1 -0
  298. package/build/src/utils/FileNotifier.js +71 -0
  299. package/build/src/utils/FileNotifier.js.map +1 -0
  300. package/build/src/utils/analytics/getDevClientProperties.js +41 -0
  301. package/build/src/utils/analytics/getDevClientProperties.js.map +1 -0
  302. package/build/src/utils/analytics/rudderstackClient.js +106 -0
  303. package/build/src/utils/analytics/rudderstackClient.js.map +1 -0
  304. package/build/src/utils/ansi.js +17 -0
  305. package/build/src/utils/ansi.js.map +1 -0
  306. package/build/src/utils/args.js +77 -0
  307. package/build/src/utils/args.js.map +1 -0
  308. package/build/src/utils/array.js +56 -0
  309. package/build/src/utils/array.js.map +1 -0
  310. package/build/src/utils/cocoapods.js +143 -0
  311. package/build/src/utils/cocoapods.js.map +1 -0
  312. package/build/src/utils/codesigning.js +283 -0
  313. package/build/src/utils/codesigning.js.map +1 -0
  314. package/build/src/utils/createFileTransform.js +89 -0
  315. package/build/src/utils/createFileTransform.js.map +1 -0
  316. package/build/src/utils/delay.js +39 -0
  317. package/build/src/utils/delay.js.map +1 -0
  318. package/build/src/utils/dir.js +38 -0
  319. package/build/src/utils/dir.js.map +1 -0
  320. package/build/src/utils/downloadAppAsync.js +74 -0
  321. package/build/src/utils/downloadAppAsync.js.map +1 -0
  322. package/build/src/utils/downloadExpoGoAsync.js +99 -0
  323. package/build/src/utils/downloadExpoGoAsync.js.map +1 -0
  324. package/build/src/utils/editor.js +60 -0
  325. package/build/src/utils/editor.js.map +1 -0
  326. package/build/src/utils/env.js +62 -0
  327. package/build/src/utils/env.js.map +1 -0
  328. package/build/src/utils/errors.js +69 -0
  329. package/build/src/utils/errors.js.map +1 -0
  330. package/build/src/utils/exit.js +90 -0
  331. package/build/src/utils/exit.js.map +1 -0
  332. package/build/src/utils/findUp.js +33 -0
  333. package/build/src/utils/findUp.js.map +1 -0
  334. package/build/src/utils/fn.js +32 -0
  335. package/build/src/utils/fn.js.map +1 -0
  336. package/build/src/utils/getOrPromptApplicationId.js +183 -0
  337. package/build/src/utils/getOrPromptApplicationId.js.map +1 -0
  338. package/build/src/utils/getRunningProcess.js +92 -0
  339. package/build/src/utils/getRunningProcess.js.map +1 -0
  340. package/build/src/utils/git.js +88 -0
  341. package/build/src/utils/git.js.map +1 -0
  342. package/build/src/utils/glob.js +65 -0
  343. package/build/src/utils/glob.js.map +1 -0
  344. package/build/src/utils/ip.js +16 -0
  345. package/build/src/utils/ip.js.map +1 -0
  346. package/build/src/utils/isModuleSymlinked.js +37 -0
  347. package/build/src/utils/isModuleSymlinked.js.map +1 -0
  348. package/build/src/utils/link.js +31 -0
  349. package/build/src/utils/link.js.map +1 -0
  350. package/build/src/utils/mergeGitIgnorePaths.js +112 -0
  351. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -0
  352. package/build/src/utils/modifyConfigAsync.js +68 -0
  353. package/build/src/utils/modifyConfigAsync.js.map +1 -0
  354. package/build/src/utils/modifyConfigPlugins.js +51 -0
  355. package/build/src/utils/modifyConfigPlugins.js.map +1 -0
  356. package/build/src/utils/nodeModules.js +118 -0
  357. package/build/src/utils/nodeModules.js.map +1 -0
  358. package/build/src/utils/npm.js +144 -0
  359. package/build/src/utils/npm.js.map +1 -0
  360. package/build/src/utils/obj.js +45 -0
  361. package/build/src/utils/obj.js.map +1 -0
  362. package/build/src/utils/ora.js +102 -0
  363. package/build/src/utils/ora.js.map +1 -0
  364. package/build/src/utils/port.js +130 -0
  365. package/build/src/utils/port.js.map +1 -0
  366. package/build/src/utils/profile.js +63 -0
  367. package/build/src/utils/profile.js.map +1 -0
  368. package/build/src/utils/progress.js +15 -0
  369. package/build/src/utils/progress.js.map +1 -0
  370. package/build/src/utils/prompts.js +127 -0
  371. package/build/src/utils/prompts.js.map +1 -0
  372. package/build/src/utils/resolveArgs.js +94 -0
  373. package/build/src/utils/resolveArgs.js.map +1 -0
  374. package/build/src/utils/scheme.js +106 -0
  375. package/build/src/utils/scheme.js.map +1 -0
  376. package/build/src/utils/tar.js +59 -0
  377. package/build/src/utils/tar.js.map +1 -0
  378. package/build/src/utils/url.js +67 -0
  379. package/build/src/utils/url.js.map +1 -0
  380. package/build/src/utils/validateApplicationId.js +90 -0
  381. package/build/src/utils/validateApplicationId.js.map +1 -0
  382. package/build/src/whoami/index.js +47 -0
  383. package/build/src/whoami/index.js.map +1 -0
  384. package/build/src/whoami/whoamiAsync.js +44 -0
  385. package/build/src/whoami/whoamiAsync.js.map +1 -0
  386. package/package.json +132 -4
  387. package/static/loading-page/index.html +270 -0
  388. package/index.js +0 -0
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.cloneTemplateAsync = cloneTemplateAsync;
6
+ exports.resolveTemplateArgAsync = resolveTemplateArgAsync;
7
+ var _chalk = _interopRequireDefault(require("chalk"));
8
+ var _fs = _interopRequireDefault(require("fs"));
9
+ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
10
+ var _path = _interopRequireDefault(require("path"));
11
+ var _semver = _interopRequireDefault(require("semver"));
12
+ var Log = _interopRequireWildcard(require("../log"));
13
+ var _errors = require("../utils/errors");
14
+ var _npm = require("../utils/npm");
15
+ var _url = require("../utils/url");
16
+ function _interopRequireDefault(obj) {
17
+ return obj && obj.__esModule ? obj : {
18
+ default: obj
19
+ };
20
+ }
21
+ function _interopRequireWildcard(obj) {
22
+ if (obj && obj.__esModule) {
23
+ return obj;
24
+ } else {
25
+ var newObj = {};
26
+ if (obj != null) {
27
+ for(var key in obj){
28
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
29
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
30
+ if (desc.get || desc.set) {
31
+ Object.defineProperty(newObj, key, desc);
32
+ } else {
33
+ newObj[key] = obj[key];
34
+ }
35
+ }
36
+ }
37
+ }
38
+ newObj.default = obj;
39
+ return newObj;
40
+ }
41
+ }
42
+ async function cloneTemplateAsync({ templateDirectory , template , exp , ora }) {
43
+ if (template) {
44
+ await resolveTemplateArgAsync(templateDirectory, ora, exp.name, template);
45
+ } else {
46
+ const templatePackageName = await getTemplateNpmPackageName(exp.sdkVersion);
47
+ await (0, _npm).downloadAndExtractNpmModuleAsync(templatePackageName, {
48
+ cwd: templateDirectory,
49
+ name: exp.name
50
+ });
51
+ }
52
+ }
53
+ /** Given an `sdkVersion` like `44.0.0` return a fully qualified NPM package name like: `expo-template-bare-minimum@sdk-44` */ function getTemplateNpmPackageName(sdkVersion) {
54
+ // When undefined or UNVERSIONED, we use the latest version.
55
+ if (!sdkVersion || sdkVersion === "UNVERSIONED") {
56
+ Log.log("Using an unspecified Expo SDK version. The latest template will be used.");
57
+ return `expo-template-bare-minimum@latest`;
58
+ }
59
+ return `expo-template-bare-minimum@sdk-${_semver.default.major(sdkVersion)}`;
60
+ }
61
+ async function getRepoInfo(url, examplePath) {
62
+ const [, username, name, t, _branch, ...file] = url.pathname.split("/");
63
+ const filePath = examplePath ? examplePath.replace(/^\//, "") : file.join("/");
64
+ // Support repos whose entire purpose is to be an example, e.g.
65
+ // https://github.com/:username/:my-cool-example-repo-name.
66
+ if (t === undefined) {
67
+ const infoResponse = await (0, _nodeFetch).default(`https://api.github.com/repos/${username}/${name}`);
68
+ if (infoResponse.status !== 200) {
69
+ return;
70
+ }
71
+ const info = await infoResponse.json();
72
+ return {
73
+ username,
74
+ name,
75
+ branch: info["default_branch"],
76
+ filePath
77
+ };
78
+ }
79
+ // If examplePath is available, the branch name takes the entire path
80
+ const branch = examplePath ? `${_branch}/${file.join("/")}`.replace(new RegExp(`/${filePath}|/$`), "") : _branch;
81
+ if (username && name && branch && t === "tree") {
82
+ return {
83
+ username,
84
+ name,
85
+ branch,
86
+ filePath
87
+ };
88
+ }
89
+ return undefined;
90
+ }
91
+ function hasRepo({ username , name , branch , filePath }) {
92
+ const contentsUrl = `https://api.github.com/repos/${username}/${name}/contents`;
93
+ const packagePath = `${filePath ? `/${filePath}` : ""}/package.json`;
94
+ return (0, _url).isUrlOk(contentsUrl + packagePath + `?ref=${branch}`);
95
+ }
96
+ async function downloadAndExtractRepoAsync(root, { username , name , branch , filePath }) {
97
+ const projectName = _path.default.basename(root);
98
+ const strip = filePath ? filePath.split("/").length + 1 : 1;
99
+ const url = `https://codeload.github.com/${username}/${name}/tar.gz/${branch}`;
100
+ Log.debug("Downloading tarball from:", url);
101
+ await (0, _npm).extractNpmTarballFromUrlAsync(url, {
102
+ cwd: root,
103
+ name: projectName,
104
+ strip,
105
+ fileList: [
106
+ `${name}-${branch}${filePath ? `/${filePath}` : ""}`
107
+ ]
108
+ });
109
+ }
110
+ async function resolveTemplateArgAsync(templateDirectory, oraInstance, appName, template, templatePath) {
111
+ let repoInfo;
112
+ if (template) {
113
+ // @ts-ignore
114
+ let repoUrl;
115
+ try {
116
+ // @ts-ignore
117
+ repoUrl = new URL(template);
118
+ } catch (error) {
119
+ if (error.code !== "ERR_INVALID_URL") {
120
+ oraInstance.fail(error);
121
+ throw error;
122
+ }
123
+ }
124
+ if (!repoUrl) {
125
+ const templatePath = _path.default.resolve(template);
126
+ if (!_fs.default.existsSync(templatePath)) {
127
+ throw new _errors.CommandError(`template file does not exist: ${templatePath}`);
128
+ }
129
+ await (0, _npm).extractLocalNpmTarballAsync(templatePath, {
130
+ cwd: templateDirectory,
131
+ name: appName
132
+ });
133
+ return templateDirectory;
134
+ }
135
+ if (repoUrl.origin !== "https://github.com") {
136
+ oraInstance.fail(`Invalid URL: ${_chalk.default.red(`"${template}"`)}. Only GitHub repositories are supported. Please use a GitHub URL and try again.`);
137
+ throw new _errors.AbortCommandError();
138
+ }
139
+ repoInfo = await getRepoInfo(repoUrl, templatePath);
140
+ if (!repoInfo) {
141
+ oraInstance.fail(`Found invalid GitHub URL: ${_chalk.default.red(`"${template}"`)}. Please fix the URL and try again.`);
142
+ throw new _errors.AbortCommandError();
143
+ }
144
+ const found = await hasRepo(repoInfo);
145
+ if (!found) {
146
+ oraInstance.fail(`Could not locate the repository for ${_chalk.default.red(`"${template}"`)}. Please check that the repository exists and try again.`);
147
+ throw new _errors.AbortCommandError();
148
+ }
149
+ }
150
+ if (repoInfo) {
151
+ oraInstance.text = _chalk.default.bold(`Downloading files from repo ${_chalk.default.cyan(template)}. This might take a moment.`);
152
+ await downloadAndExtractRepoAsync(templateDirectory, repoInfo);
153
+ }
154
+ return true;
155
+ }
156
+
157
+ //# sourceMappingURL=resolveTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prebuild/resolveTemplate.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport fetch from 'node-fetch';\nimport { Ora } from 'ora';\nimport path from 'path';\nimport semver from 'semver';\n\nimport * as Log from '../log';\nimport { AbortCommandError, CommandError } from '../utils/errors';\nimport {\n downloadAndExtractNpmModuleAsync,\n extractLocalNpmTarballAsync,\n extractNpmTarballFromUrlAsync,\n} from '../utils/npm';\nimport { isUrlOk } from '../utils/url';\n\ntype RepoInfo = {\n username: string;\n name: string;\n branch: string;\n filePath: string;\n};\n\nexport async function cloneTemplateAsync({\n templateDirectory,\n template,\n exp,\n ora,\n}: {\n templateDirectory: string;\n template?: string;\n exp: Pick<ExpoConfig, 'name' | 'sdkVersion'>;\n ora: Ora;\n}) {\n if (template) {\n await resolveTemplateArgAsync(templateDirectory, ora, exp.name, template);\n } else {\n const templatePackageName = await getTemplateNpmPackageName(exp.sdkVersion);\n await downloadAndExtractNpmModuleAsync(templatePackageName, {\n cwd: templateDirectory,\n name: exp.name,\n });\n }\n}\n\n/** Given an `sdkVersion` like `44.0.0` return a fully qualified NPM package name like: `expo-template-bare-minimum@sdk-44` */\nfunction getTemplateNpmPackageName(sdkVersion?: string): string {\n // When undefined or UNVERSIONED, we use the latest version.\n if (!sdkVersion || sdkVersion === 'UNVERSIONED') {\n Log.log('Using an unspecified Expo SDK version. The latest template will be used.');\n return `expo-template-bare-minimum@latest`;\n }\n return `expo-template-bare-minimum@sdk-${semver.major(sdkVersion)}`;\n}\n\nasync function getRepoInfo(url: any, examplePath?: string): Promise<RepoInfo | undefined> {\n const [, username, name, t, _branch, ...file] = url.pathname.split('/');\n const filePath = examplePath ? examplePath.replace(/^\\//, '') : file.join('/');\n\n // Support repos whose entire purpose is to be an example, e.g.\n // https://github.com/:username/:my-cool-example-repo-name.\n if (t === undefined) {\n const infoResponse = await fetch(`https://api.github.com/repos/${username}/${name}`);\n if (infoResponse.status !== 200) {\n return;\n }\n const info = await infoResponse.json();\n return { username, name, branch: info['default_branch'], filePath };\n }\n\n // If examplePath is available, the branch name takes the entire path\n const branch = examplePath\n ? `${_branch}/${file.join('/')}`.replace(new RegExp(`/${filePath}|/$`), '')\n : _branch;\n\n if (username && name && branch && t === 'tree') {\n return { username, name, branch, filePath };\n }\n return undefined;\n}\n\nfunction hasRepo({ username, name, branch, filePath }: RepoInfo) {\n const contentsUrl = `https://api.github.com/repos/${username}/${name}/contents`;\n const packagePath = `${filePath ? `/${filePath}` : ''}/package.json`;\n\n return isUrlOk(contentsUrl + packagePath + `?ref=${branch}`);\n}\n\nasync function downloadAndExtractRepoAsync(\n root: string,\n { username, name, branch, filePath }: RepoInfo\n): Promise<void> {\n const projectName = path.basename(root);\n\n const strip = filePath ? filePath.split('/').length + 1 : 1;\n\n const url = `https://codeload.github.com/${username}/${name}/tar.gz/${branch}`;\n Log.debug('Downloading tarball from:', url);\n await extractNpmTarballFromUrlAsync(url, {\n cwd: root,\n name: projectName,\n strip,\n fileList: [`${name}-${branch}${filePath ? `/${filePath}` : ''}`],\n });\n}\n\nexport async function resolveTemplateArgAsync(\n templateDirectory: string,\n oraInstance: Ora,\n appName: string,\n template: string,\n templatePath?: string\n) {\n let repoInfo: RepoInfo | undefined;\n\n if (template) {\n // @ts-ignore\n let repoUrl: URL | undefined;\n\n try {\n // @ts-ignore\n repoUrl = new URL(template);\n } catch (error: any) {\n if (error.code !== 'ERR_INVALID_URL') {\n oraInstance.fail(error);\n throw error;\n }\n }\n\n if (!repoUrl) {\n const templatePath = path.resolve(template);\n if (!fs.existsSync(templatePath)) {\n throw new CommandError(`template file does not exist: ${templatePath}`);\n }\n\n await extractLocalNpmTarballAsync(templatePath, { cwd: templateDirectory, name: appName });\n return templateDirectory;\n }\n\n if (repoUrl.origin !== 'https://github.com') {\n oraInstance.fail(\n `Invalid URL: ${chalk.red(\n `\"${template}\"`\n )}. Only GitHub repositories are supported. Please use a GitHub URL and try again.`\n );\n throw new AbortCommandError();\n }\n\n repoInfo = await getRepoInfo(repoUrl, templatePath);\n\n if (!repoInfo) {\n oraInstance.fail(\n `Found invalid GitHub URL: ${chalk.red(`\"${template}\"`)}. Please fix the URL and try again.`\n );\n throw new AbortCommandError();\n }\n\n const found = await hasRepo(repoInfo);\n\n if (!found) {\n oraInstance.fail(\n `Could not locate the repository for ${chalk.red(\n `\"${template}\"`\n )}. Please check that the repository exists and try again.`\n );\n throw new AbortCommandError();\n }\n }\n\n if (repoInfo) {\n oraInstance.text = chalk.bold(\n `Downloading files from repo ${chalk.cyan(template)}. This might take a moment.`\n );\n\n await downloadAndExtractRepoAsync(templateDirectory, repoInfo);\n }\n\n return true;\n}\n"],"names":["cloneTemplateAsync","resolveTemplateArgAsync","Log","templateDirectory","template","exp","ora","name","templatePackageName","getTemplateNpmPackageName","sdkVersion","downloadAndExtractNpmModuleAsync","cwd","log","semver","major","getRepoInfo","url","examplePath","username","t","_branch","file","pathname","split","filePath","replace","join","undefined","infoResponse","fetch","status","info","json","branch","RegExp","hasRepo","contentsUrl","packagePath","isUrlOk","downloadAndExtractRepoAsync","root","projectName","path","basename","strip","length","debug","extractNpmTarballFromUrlAsync","fileList","oraInstance","appName","templatePath","repoInfo","repoUrl","URL","error","code","fail","resolve","fs","existsSync","CommandError","extractLocalNpmTarballAsync","origin","chalk","red","AbortCommandError","found","text","bold","cyan"],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.updateFromTemplateAsync = updateFromTemplateAsync;
6
+ var _chalk = _interopRequireDefault(require("chalk"));
7
+ var Log = _interopRequireWildcard(require("../log"));
8
+ var _errors = require("../utils/errors");
9
+ var _ora = require("../utils/ora");
10
+ var _profile = require("../utils/profile");
11
+ var _copyTemplateFiles = require("./copyTemplateFiles");
12
+ var _resolveTemplate = require("./resolveTemplate");
13
+ var _updatePackageJson = require("./updatePackageJson");
14
+ var _writeMetroConfig = require("./writeMetroConfig");
15
+ function _interopRequireDefault(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
20
+ function _interopRequireWildcard(obj) {
21
+ if (obj && obj.__esModule) {
22
+ return obj;
23
+ } else {
24
+ var newObj = {};
25
+ if (obj != null) {
26
+ for(var key in obj){
27
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
28
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
29
+ if (desc.get || desc.set) {
30
+ Object.defineProperty(newObj, key, desc);
31
+ } else {
32
+ newObj[key] = obj[key];
33
+ }
34
+ }
35
+ }
36
+ }
37
+ newObj.default = obj;
38
+ return newObj;
39
+ }
40
+ }
41
+ async function updateFromTemplateAsync(projectRoot, { exp , pkg , template , templateDirectory , platforms , skipDependencyUpdate }) {
42
+ if (!templateDirectory) {
43
+ const temporary = await Promise.resolve().then(function() {
44
+ return _interopRequireWildcard(require("tempy"));
45
+ });
46
+ templateDirectory = temporary.directory();
47
+ }
48
+ const copiedPaths = await (0, _profile).profile(cloneTemplateAndCopyToProjectAsync)({
49
+ projectRoot,
50
+ template,
51
+ templateDirectory,
52
+ exp,
53
+ pkg,
54
+ platforms
55
+ });
56
+ (0, _profile).profile(_writeMetroConfig.writeMetroConfig)(projectRoot, {
57
+ pkg,
58
+ templateDirectory
59
+ });
60
+ const depsResults = await (0, _profile).profile(_updatePackageJson.updatePackageJSONAsync)(projectRoot, {
61
+ templateDirectory,
62
+ pkg,
63
+ skipDependencyUpdate
64
+ });
65
+ return {
66
+ hasNewProjectFiles: !!copiedPaths.length,
67
+ // If the iOS folder changes or new packages are added, we should rerun pod install.
68
+ needsPodInstall: copiedPaths.includes("ios") || depsResults.hasNewDependencies || depsResults.hasNewDevDependencies,
69
+ ...depsResults
70
+ };
71
+ }
72
+ /**
73
+ * Extract the template and copy the ios and android directories over to the project directory.
74
+ *
75
+ * @return `true` if any project files were created.
76
+ */ async function cloneTemplateAndCopyToProjectAsync({ projectRoot , templateDirectory , template , exp , pkg , platforms }) {
77
+ const ora = (0, _ora).logNewSection("Creating native project directories (./ios and ./android) and updating .gitignore");
78
+ try {
79
+ await (0, _resolveTemplate).cloneTemplateAsync({
80
+ templateDirectory,
81
+ template,
82
+ exp,
83
+ ora
84
+ });
85
+ const results = await (0, _copyTemplateFiles).copyTemplateFilesAsync(projectRoot, {
86
+ pkg,
87
+ templateDirectory,
88
+ platforms
89
+ });
90
+ ora.succeed((0, _copyTemplateFiles).createCopyFilesSuccessMessage(platforms, results));
91
+ return results.copiedPaths;
92
+ } catch (e) {
93
+ if (!(e instanceof _errors.AbortCommandError)) {
94
+ Log.error(e.message);
95
+ }
96
+ ora.fail("Failed to create the native project.");
97
+ Log.log(_chalk.default.yellow("You may want to delete the `./ios` and/or `./android` directories before trying again."));
98
+ throw new _errors.SilentError(e);
99
+ }
100
+ }
101
+
102
+ //# sourceMappingURL=updateFromTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prebuild/updateFromTemplate.ts"],"sourcesContent":["import { ExpoConfig, PackageJSONConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { AbortCommandError, SilentError } from '../utils/errors';\nimport { logNewSection } from '../utils/ora';\nimport { profile } from '../utils/profile';\nimport { copyTemplateFilesAsync, createCopyFilesSuccessMessage } from './copyTemplateFiles';\nimport { cloneTemplateAsync } from './resolveTemplate';\nimport { DependenciesModificationResults, updatePackageJSONAsync } from './updatePackageJson';\nimport { writeMetroConfig } from './writeMetroConfig';\n\n/**\n * Creates local native files from an input template file path.\n *\n * @return `true` if the project is ejecting, and `false` if it's syncing.\n */\nexport async function updateFromTemplateAsync(\n projectRoot: string,\n {\n exp,\n pkg,\n template,\n templateDirectory,\n platforms,\n skipDependencyUpdate,\n }: {\n /** Expo Config */\n exp: ExpoConfig;\n /** package.json as JSON */\n pkg: PackageJSONConfig;\n /** Template reference ID. */\n template?: string;\n /** Directory to write the template to before copying into the project. */\n templateDirectory?: string;\n /** List of platforms to clone. */\n platforms: ModPlatform[];\n /** List of dependencies to skip updating. */\n skipDependencyUpdate?: string[];\n }\n): Promise<\n {\n /** Indicates if new files were created in the project. */\n hasNewProjectFiles: boolean;\n /** Indicates that the project needs to run `pod install` */\n needsPodInstall: boolean;\n } & DependenciesModificationResults\n> {\n if (!templateDirectory) {\n const temporary = await import('tempy');\n templateDirectory = temporary.directory();\n }\n\n const copiedPaths = await profile(cloneTemplateAndCopyToProjectAsync)({\n projectRoot,\n template,\n templateDirectory,\n exp,\n pkg,\n platforms,\n });\n\n profile(writeMetroConfig)(projectRoot, { pkg, templateDirectory });\n\n const depsResults = await profile(updatePackageJSONAsync)(projectRoot, {\n templateDirectory,\n pkg,\n skipDependencyUpdate,\n });\n\n return {\n hasNewProjectFiles: !!copiedPaths.length,\n // If the iOS folder changes or new packages are added, we should rerun pod install.\n needsPodInstall:\n copiedPaths.includes('ios') ||\n depsResults.hasNewDependencies ||\n depsResults.hasNewDevDependencies,\n ...depsResults,\n };\n}\n\n/**\n * Extract the template and copy the ios and android directories over to the project directory.\n *\n * @return `true` if any project files were created.\n */\nasync function cloneTemplateAndCopyToProjectAsync({\n projectRoot,\n templateDirectory,\n template,\n exp,\n pkg,\n platforms,\n}: {\n projectRoot: string;\n templateDirectory: string;\n template?: string;\n exp: Pick<ExpoConfig, 'name' | 'sdkVersion'>;\n pkg: PackageJSONConfig;\n platforms: ModPlatform[];\n}): Promise<string[]> {\n const ora = logNewSection(\n 'Creating native project directories (./ios and ./android) and updating .gitignore'\n );\n\n try {\n await cloneTemplateAsync({ templateDirectory, template, exp, ora });\n\n const results = await copyTemplateFilesAsync(projectRoot, {\n pkg,\n templateDirectory,\n platforms,\n });\n\n ora.succeed(createCopyFilesSuccessMessage(platforms, results));\n\n return results.copiedPaths;\n } catch (e: any) {\n if (!(e instanceof AbortCommandError)) {\n Log.error(e.message);\n }\n ora.fail('Failed to create the native project.');\n Log.log(\n chalk.yellow(\n 'You may want to delete the `./ios` and/or `./android` directories before trying again.'\n )\n );\n throw new SilentError(e);\n }\n}\n"],"names":["updateFromTemplateAsync","Log","projectRoot","exp","pkg","template","templateDirectory","platforms","skipDependencyUpdate","temporary","directory","copiedPaths","profile","cloneTemplateAndCopyToProjectAsync","writeMetroConfig","depsResults","updatePackageJSONAsync","hasNewProjectFiles","length","needsPodInstall","includes","hasNewDependencies","hasNewDevDependencies","ora","logNewSection","cloneTemplateAsync","results","copyTemplateFilesAsync","succeed","createCopyFilesSuccessMessage","e","AbortCommandError","error","message","fail","log","chalk","yellow","SilentError"],"mappings":"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"}
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.updatePackageJSONAsync = updatePackageJSONAsync;
6
+ exports.updatePkgDependencies = updatePkgDependencies;
7
+ exports.createDependenciesMap = createDependenciesMap;
8
+ exports.isPkgMainExpoAppEntry = isPkgMainExpoAppEntry;
9
+ exports.hashForDependencyMap = hashForDependencyMap;
10
+ exports.createFileHash = createFileHash;
11
+ exports.shouldDeleteMainField = shouldDeleteMainField;
12
+ var _config = require("@expo/config");
13
+ var _chalk = _interopRequireDefault(require("chalk"));
14
+ var _crypto = _interopRequireDefault(require("crypto"));
15
+ var _fs = _interopRequireDefault(require("fs"));
16
+ var _path = _interopRequireDefault(require("path"));
17
+ var Log = _interopRequireWildcard(require("../log"));
18
+ var _isModuleSymlinked = require("../utils/isModuleSymlinked");
19
+ var _ora = require("../utils/ora");
20
+ function _interopRequireDefault(obj) {
21
+ return obj && obj.__esModule ? obj : {
22
+ default: obj
23
+ };
24
+ }
25
+ function _interopRequireWildcard(obj) {
26
+ if (obj && obj.__esModule) {
27
+ return obj;
28
+ } else {
29
+ var newObj = {};
30
+ if (obj != null) {
31
+ for(var key in obj){
32
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
33
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
34
+ if (desc.get || desc.set) {
35
+ Object.defineProperty(newObj, key, desc);
36
+ } else {
37
+ newObj[key] = obj[key];
38
+ }
39
+ }
40
+ }
41
+ }
42
+ newObj.default = obj;
43
+ return newObj;
44
+ }
45
+ }
46
+ async function updatePackageJSONAsync(projectRoot, { templateDirectory , pkg , skipDependencyUpdate }) {
47
+ const updatingPackageJsonStep = (0, _ora).logNewSection("Updating your package.json scripts, dependencies, and main file");
48
+ const templatePkg = (0, _config).getPackageJson(templateDirectory);
49
+ const results = _modifyPackageJson(projectRoot, {
50
+ templatePkg,
51
+ pkg,
52
+ skipDependencyUpdate
53
+ });
54
+ await _fs.default.promises.writeFile(_path.default.resolve(projectRoot, "package.json"), // Add new line to match the format of running yarn.
55
+ // This prevents the `package.json` from changing when running `prebuild --no-install` multiple times.
56
+ JSON.stringify(pkg, null, 2) + "\n");
57
+ updatingPackageJsonStep.succeed("Updated package.json and added index.js entry point for iOS and Android");
58
+ if (results.removedMainField) {
59
+ Log.log(`\u203A Removed ${_chalk.default.bold(`"main": "${results.removedMainField}"`)} from package.json because we recommend using index.js as main instead\n`);
60
+ }
61
+ return results;
62
+ }
63
+ /**
64
+ * Make required modifications to the `package.json` file as a JSON object.
65
+ *
66
+ * 1. Update `package.json` `scripts`.
67
+ * 2. Update `package.json` `dependencies` and `devDependencies`.
68
+ * 3. Update `package.json` `main`.
69
+ *
70
+ * @param projectRoot The root directory of the project.
71
+ * @param props.templatePkg Template project package.json as JSON.
72
+ * @param props.pkg Current package.json as JSON.
73
+ * @param props.skipDependencyUpdate Array of dependencies to skip updating.
74
+ * @returns
75
+ */ function _modifyPackageJson(projectRoot, { templatePkg , pkg , skipDependencyUpdate }) {
76
+ updatePkgScripts({
77
+ pkg
78
+ });
79
+ const results = updatePkgDependencies(projectRoot, {
80
+ pkg,
81
+ templatePkg,
82
+ skipDependencyUpdate
83
+ });
84
+ const removedMainField = updatePkgMain({
85
+ pkg
86
+ });
87
+ return {
88
+ ...results,
89
+ removedMainField
90
+ };
91
+ }
92
+ function updatePkgDependencies(projectRoot, { pkg: pkg1 , templatePkg , skipDependencyUpdate =[] }) {
93
+ if (!pkg1.devDependencies) {
94
+ pkg1.devDependencies = {};
95
+ }
96
+ const { dependencies , devDependencies } = templatePkg;
97
+ const defaultDependencies = createDependenciesMap(dependencies);
98
+ const defaultDevDependencies = createDependenciesMap(devDependencies);
99
+ const combinedDependencies = createDependenciesMap({
100
+ ...defaultDependencies,
101
+ ...pkg1.dependencies
102
+ });
103
+ const requiredDependencies = [
104
+ "react",
105
+ "react-native-unimodules",
106
+ "react-native",
107
+ "expo-updates",
108
+ ].filter((depKey)=>!!defaultDependencies[depKey]
109
+ );
110
+ const symlinkedPackages = [];
111
+ for (const dependenciesKey of requiredDependencies){
112
+ var // If the local package.json defined the dependency that we want to overwrite...
113
+ ref;
114
+ if ((ref = pkg1.dependencies) == null ? void 0 : ref[dependenciesKey]) {
115
+ if (// Then ensure it isn't symlinked (i.e. the user has a custom version in their yarn workspace).
116
+ (0, _isModuleSymlinked).isModuleSymlinked(projectRoot, {
117
+ moduleId: dependenciesKey,
118
+ isSilent: true
119
+ })) {
120
+ // If the package is in the project's package.json and it's symlinked, then skip overwriting it.
121
+ symlinkedPackages.push(dependenciesKey);
122
+ continue;
123
+ }
124
+ if (skipDependencyUpdate.includes(dependenciesKey)) {
125
+ continue;
126
+ }
127
+ }
128
+ combinedDependencies[dependenciesKey] = defaultDependencies[dependenciesKey];
129
+ }
130
+ if (symlinkedPackages.length) {
131
+ Log.log(`\u203A Using symlinked ${symlinkedPackages.map((pkg)=>_chalk.default.bold(pkg)
132
+ ).join(", ")} instead of recommended version(s).`);
133
+ }
134
+ const combinedDevDependencies = createDependenciesMap({
135
+ ...defaultDevDependencies,
136
+ ...pkg1.devDependencies
137
+ });
138
+ // Only change the dependencies if the normalized hash changes, this helps to reduce meaningless changes.
139
+ const hasNewDependencies = hashForDependencyMap(pkg1.dependencies) !== hashForDependencyMap(combinedDependencies);
140
+ const hasNewDevDependencies = hashForDependencyMap(pkg1.devDependencies) !== hashForDependencyMap(combinedDevDependencies);
141
+ // Save the dependencies
142
+ if (hasNewDependencies) {
143
+ var _dependencies;
144
+ // Use Object.assign to preserve the original order of dependencies, this makes it easier to see what changed in the git diff.
145
+ pkg1.dependencies = Object.assign((_dependencies = pkg1.dependencies) != null ? _dependencies : {}, combinedDependencies);
146
+ }
147
+ if (hasNewDevDependencies) {
148
+ var _devDependencies;
149
+ // Same as with dependencies
150
+ pkg1.devDependencies = Object.assign((_devDependencies = pkg1.devDependencies) != null ? _devDependencies : {}, combinedDevDependencies);
151
+ }
152
+ return {
153
+ hasNewDependencies,
154
+ hasNewDevDependencies
155
+ };
156
+ }
157
+ function createDependenciesMap(dependencies) {
158
+ if (typeof dependencies !== "object") {
159
+ throw new Error(`Dependency map is invalid, expected object but got ${typeof dependencies}`);
160
+ } else if (!dependencies) {
161
+ return {};
162
+ }
163
+ const outputMap = {};
164
+ for (const key of Object.keys(dependencies)){
165
+ const value = dependencies[key];
166
+ if (typeof value === "string") {
167
+ outputMap[key] = value;
168
+ } else {
169
+ throw new Error(`Dependency for key \`${key}\` should be a \`string\`, instead got: \`{ ${key}: ${JSON.stringify(value)} }\``);
170
+ }
171
+ }
172
+ return outputMap;
173
+ }
174
+ /**
175
+ * Update package.json scripts - `npm start` should default to `expo
176
+ * start --dev-client` rather than `expo start` after ejecting, for example.
177
+ */ function updatePkgScripts({ pkg }) {
178
+ var ref, ref1, ref2;
179
+ if (!pkg.scripts) {
180
+ pkg.scripts = {};
181
+ }
182
+ if (!((ref = pkg.scripts.start) == null ? void 0 : ref.includes("--dev-client"))) {
183
+ pkg.scripts.start = "expo start --dev-client";
184
+ }
185
+ if (!((ref1 = pkg.scripts.android) == null ? void 0 : ref1.includes("run"))) {
186
+ pkg.scripts.android = "expo run:android";
187
+ }
188
+ if (!((ref2 = pkg.scripts.ios) == null ? void 0 : ref2.includes("run"))) {
189
+ pkg.scripts.ios = "expo run:ios";
190
+ }
191
+ }
192
+ /**
193
+ * Add new app entry points
194
+ */ function updatePkgMain({ pkg }) {
195
+ let removedPkgMain = null;
196
+ // Check that the pkg.main doesn't match:
197
+ // - ./node_modules/expo/AppEntry
198
+ // - ./node_modules/expo/AppEntry.js
199
+ // - node_modules/expo/AppEntry.js
200
+ // - expo/AppEntry.js
201
+ // - expo/AppEntry
202
+ if (shouldDeleteMainField(pkg.main)) {
203
+ // Save the custom
204
+ removedPkgMain = pkg.main;
205
+ delete pkg.main;
206
+ }
207
+ return removedPkgMain;
208
+ }
209
+ function isPkgMainExpoAppEntry(input) {
210
+ const main = input || "";
211
+ if (main.startsWith("./")) {
212
+ return main.includes("node_modules/expo/AppEntry");
213
+ }
214
+ return main.includes("expo/AppEntry");
215
+ }
216
+ function normalizeDependencyMap(deps) {
217
+ return Object.keys(deps).map((dependency)=>`${dependency}@${deps[dependency]}`
218
+ ).sort();
219
+ }
220
+ function hashForDependencyMap(deps = {}) {
221
+ const depsList = normalizeDependencyMap(deps);
222
+ const depsString = depsList.join("\n");
223
+ return createFileHash(depsString);
224
+ }
225
+ function createFileHash(contents) {
226
+ // this doesn't need to be secure, the shorter the better.
227
+ return _crypto.default.createHash("sha1").update(contents).digest("hex");
228
+ }
229
+ function shouldDeleteMainField(main) {
230
+ if (!main || !isPkgMainExpoAppEntry(main)) {
231
+ return false;
232
+ }
233
+ return !(main == null ? void 0 : main.startsWith("index."));
234
+ }
235
+
236
+ //# sourceMappingURL=updatePackageJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prebuild/updatePackageJson.ts"],"sourcesContent":["import { getPackageJson, PackageJSONConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { isModuleSymlinked } from '../utils/isModuleSymlinked';\nimport { logNewSection } from '../utils/ora';\n\nexport type DependenciesMap = { [key: string]: string | number };\n\nexport type PackageJsonModificationResults = DependenciesModificationResults & {\n removedMainField: string | null;\n};\n\nexport type DependenciesModificationResults = {\n /** Indicates that new values were added to the `dependencies` object in the `package.json`. */\n hasNewDependencies: boolean;\n /** Indicates that new values were added to the `devDependencies` object in the `package.json`. */\n hasNewDevDependencies: boolean;\n};\n\n/** Modifies the `package.json` with `_modifyPackageJson` and format/displays the results. */\nexport async function updatePackageJSONAsync(\n projectRoot: string,\n {\n templateDirectory,\n pkg,\n skipDependencyUpdate,\n }: {\n templateDirectory: string;\n pkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): Promise<DependenciesModificationResults> {\n const updatingPackageJsonStep = logNewSection(\n 'Updating your package.json scripts, dependencies, and main file'\n );\n\n const templatePkg = getPackageJson(templateDirectory);\n\n const results = _modifyPackageJson(projectRoot, {\n templatePkg,\n pkg,\n skipDependencyUpdate,\n });\n\n await fs.promises.writeFile(\n path.resolve(projectRoot, 'package.json'),\n // Add new line to match the format of running yarn.\n // This prevents the `package.json` from changing when running `prebuild --no-install` multiple times.\n JSON.stringify(pkg, null, 2) + '\\n'\n );\n\n updatingPackageJsonStep.succeed(\n 'Updated package.json and added index.js entry point for iOS and Android'\n );\n\n if (results.removedMainField) {\n Log.log(\n `\\u203A Removed ${chalk.bold(\n `\"main\": \"${results.removedMainField}\"`\n )} from package.json because we recommend using index.js as main instead\\n`\n );\n }\n\n return results;\n}\n\n/**\n * Make required modifications to the `package.json` file as a JSON object.\n *\n * 1. Update `package.json` `scripts`.\n * 2. Update `package.json` `dependencies` and `devDependencies`.\n * 3. Update `package.json` `main`.\n *\n * @param projectRoot The root directory of the project.\n * @param props.templatePkg Template project package.json as JSON.\n * @param props.pkg Current package.json as JSON.\n * @param props.skipDependencyUpdate Array of dependencies to skip updating.\n * @returns\n */\nfunction _modifyPackageJson(\n projectRoot: string,\n {\n templatePkg,\n pkg,\n skipDependencyUpdate,\n }: {\n templatePkg: PackageJSONConfig;\n pkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): PackageJsonModificationResults {\n updatePkgScripts({ pkg });\n\n const results = updatePkgDependencies(projectRoot, {\n pkg,\n templatePkg,\n skipDependencyUpdate,\n });\n\n const removedMainField = updatePkgMain({ pkg });\n\n return { ...results, removedMainField };\n}\n\n/**\n * Update package.json dependencies by combining the dependencies in the project we are ejecting\n * with the dependencies in the template project. Does the same for devDependencies.\n *\n * - The template may have some dependencies beyond react/react-native/react-native-unimodules,\n * for example RNGH and Reanimated. We should prefer the version that is already being used\n * in the project for those, but swap the react/react-native/react-native-unimodules versions\n * with the ones in the template.\n * - The same applies to expo-updates -- since some native project configuration may depend on the\n * version, we should always use the version of expo-updates in the template.\n *\n * > Exposed for testing.\n */\nexport function updatePkgDependencies(\n projectRoot: string,\n {\n pkg,\n templatePkg,\n skipDependencyUpdate = [],\n }: {\n pkg: PackageJSONConfig;\n templatePkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): DependenciesModificationResults {\n if (!pkg.devDependencies) {\n pkg.devDependencies = {};\n }\n const { dependencies, devDependencies } = templatePkg;\n const defaultDependencies = createDependenciesMap(dependencies);\n const defaultDevDependencies = createDependenciesMap(devDependencies);\n\n const combinedDependencies: DependenciesMap = createDependenciesMap({\n ...defaultDependencies,\n ...pkg.dependencies,\n });\n\n const requiredDependencies = [\n 'react',\n 'react-native-unimodules',\n 'react-native',\n 'expo-updates',\n ].filter((depKey) => !!defaultDependencies[depKey]);\n\n const symlinkedPackages: string[] = [];\n\n for (const dependenciesKey of requiredDependencies) {\n if (\n // If the local package.json defined the dependency that we want to overwrite...\n pkg.dependencies?.[dependenciesKey]\n ) {\n if (\n // Then ensure it isn't symlinked (i.e. the user has a custom version in their yarn workspace).\n isModuleSymlinked(projectRoot, { moduleId: dependenciesKey, isSilent: true })\n ) {\n // If the package is in the project's package.json and it's symlinked, then skip overwriting it.\n symlinkedPackages.push(dependenciesKey);\n continue;\n }\n if (skipDependencyUpdate.includes(dependenciesKey)) {\n continue;\n }\n }\n combinedDependencies[dependenciesKey] = defaultDependencies[dependenciesKey];\n }\n\n if (symlinkedPackages.length) {\n Log.log(\n `\\u203A Using symlinked ${symlinkedPackages\n .map((pkg) => chalk.bold(pkg))\n .join(', ')} instead of recommended version(s).`\n );\n }\n\n const combinedDevDependencies: DependenciesMap = createDependenciesMap({\n ...defaultDevDependencies,\n ...pkg.devDependencies,\n });\n\n // Only change the dependencies if the normalized hash changes, this helps to reduce meaningless changes.\n const hasNewDependencies =\n hashForDependencyMap(pkg.dependencies) !== hashForDependencyMap(combinedDependencies);\n const hasNewDevDependencies =\n hashForDependencyMap(pkg.devDependencies) !== hashForDependencyMap(combinedDevDependencies);\n // Save the dependencies\n if (hasNewDependencies) {\n // Use Object.assign to preserve the original order of dependencies, this makes it easier to see what changed in the git diff.\n pkg.dependencies = Object.assign(pkg.dependencies ?? {}, combinedDependencies);\n }\n if (hasNewDevDependencies) {\n // Same as with dependencies\n pkg.devDependencies = Object.assign(pkg.devDependencies ?? {}, combinedDevDependencies);\n }\n\n return {\n hasNewDependencies,\n hasNewDevDependencies,\n };\n}\n\n/**\n * Create an object of type DependenciesMap a dependencies object or throw if not valid.\n *\n * @param dependencies - ideally an object of type {[key]: string} - if not then this will error.\n */\nexport function createDependenciesMap(dependencies: any): DependenciesMap {\n if (typeof dependencies !== 'object') {\n throw new Error(`Dependency map is invalid, expected object but got ${typeof dependencies}`);\n } else if (!dependencies) {\n return {};\n }\n\n const outputMap: DependenciesMap = {};\n\n for (const key of Object.keys(dependencies)) {\n const value = dependencies[key];\n if (typeof value === 'string') {\n outputMap[key] = value;\n } else {\n throw new Error(\n `Dependency for key \\`${key}\\` should be a \\`string\\`, instead got: \\`{ ${key}: ${JSON.stringify(\n value\n )} }\\``\n );\n }\n }\n return outputMap;\n}\n\n/**\n * Update package.json scripts - `npm start` should default to `expo\n * start --dev-client` rather than `expo start` after ejecting, for example.\n */\nfunction updatePkgScripts({ pkg }: { pkg: PackageJSONConfig }) {\n if (!pkg.scripts) {\n pkg.scripts = {};\n }\n if (!pkg.scripts.start?.includes('--dev-client')) {\n pkg.scripts.start = 'expo start --dev-client';\n }\n if (!pkg.scripts.android?.includes('run')) {\n pkg.scripts.android = 'expo run:android';\n }\n if (!pkg.scripts.ios?.includes('run')) {\n pkg.scripts.ios = 'expo run:ios';\n }\n}\n\n/**\n * Add new app entry points\n */\nfunction updatePkgMain({ pkg }: { pkg: PackageJSONConfig }): string | null {\n let removedPkgMain: null | string = null;\n // Check that the pkg.main doesn't match:\n // - ./node_modules/expo/AppEntry\n // - ./node_modules/expo/AppEntry.js\n // - node_modules/expo/AppEntry.js\n // - expo/AppEntry.js\n // - expo/AppEntry\n if (shouldDeleteMainField(pkg.main)) {\n // Save the custom\n removedPkgMain = pkg.main;\n delete pkg.main;\n }\n\n return removedPkgMain;\n}\n\n/**\n * Returns true if the input string matches the default expo main field.\n *\n * - ./node_modules/expo/AppEntry\n * - ./node_modules/expo/AppEntry.js\n * - node_modules/expo/AppEntry.js\n * - expo/AppEntry.js\n * - expo/AppEntry\n *\n * @param input package.json main field\n */\nexport function isPkgMainExpoAppEntry(input?: string): boolean {\n const main = input || '';\n if (main.startsWith('./')) {\n return main.includes('node_modules/expo/AppEntry');\n }\n return main.includes('expo/AppEntry');\n}\n\nfunction normalizeDependencyMap(deps: DependenciesMap): string[] {\n return Object.keys(deps)\n .map((dependency) => `${dependency}@${deps[dependency]}`)\n .sort();\n}\n\nexport function hashForDependencyMap(deps: DependenciesMap = {}): string {\n const depsList = normalizeDependencyMap(deps);\n const depsString = depsList.join('\\n');\n return createFileHash(depsString);\n}\n\nexport function createFileHash(contents: string): string {\n // this doesn't need to be secure, the shorter the better.\n return crypto.createHash('sha1').update(contents).digest('hex');\n}\n\nexport function shouldDeleteMainField(main?: any): boolean {\n if (!main || !isPkgMainExpoAppEntry(main)) {\n return false;\n }\n\n return !main?.startsWith('index.');\n}\n"],"names":["updatePackageJSONAsync","updatePkgDependencies","createDependenciesMap","isPkgMainExpoAppEntry","hashForDependencyMap","createFileHash","shouldDeleteMainField","Log","projectRoot","templateDirectory","pkg","skipDependencyUpdate","updatingPackageJsonStep","logNewSection","templatePkg","getPackageJson","results","_modifyPackageJson","fs","promises","writeFile","path","resolve","JSON","stringify","succeed","removedMainField","log","chalk","bold","updatePkgScripts","updatePkgMain","devDependencies","dependencies","defaultDependencies","defaultDevDependencies","combinedDependencies","requiredDependencies","filter","depKey","symlinkedPackages","dependenciesKey","isModuleSymlinked","moduleId","isSilent","push","includes","length","map","join","combinedDevDependencies","hasNewDependencies","hasNewDevDependencies","Object","assign","Error","outputMap","key","keys","value","scripts","start","android","ios","removedPkgMain","main","input","startsWith","normalizeDependencyMap","deps","dependency","sort","depsList","depsString","contents","crypto","createHash","update","digest"],"mappings":"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"}