@expo/cli 0.1.3 → 0.2.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 (289) hide show
  1. package/build/bin/cli +89 -4
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/api/rest/wrapFetchWithOffline.js +2 -23
  4. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  5. package/build/src/customize/customizeAsync.js +40 -0
  6. package/build/src/customize/customizeAsync.js.map +1 -0
  7. package/build/src/customize/generate.js +77 -0
  8. package/build/src/customize/generate.js.map +1 -0
  9. package/build/src/customize/index.js +41 -0
  10. package/build/src/customize/index.js.map +1 -0
  11. package/build/src/customize/resolveOptions.js +18 -0
  12. package/build/src/customize/resolveOptions.js.map +1 -0
  13. package/build/src/customize/templates.js +118 -0
  14. package/build/src/customize/templates.js.map +1 -0
  15. package/build/src/export/createMetadataJson.js +10 -7
  16. package/build/src/export/createMetadataJson.js.map +1 -1
  17. package/build/src/export/exportApp.js +32 -0
  18. package/build/src/export/exportApp.js.map +1 -1
  19. package/build/src/export/exportAssets.js +2 -3
  20. package/build/src/export/exportAssets.js.map +1 -1
  21. package/build/src/export/fork-bundleAsync.js +51 -34
  22. package/build/src/export/fork-bundleAsync.js.map +1 -1
  23. package/build/src/export/index.js +15 -10
  24. package/build/src/export/index.js.map +1 -1
  25. package/build/src/export/printBundleSizes.js +27 -48
  26. package/build/src/export/printBundleSizes.js.map +1 -1
  27. package/build/src/export/resolveOptions.js +44 -5
  28. package/build/src/export/resolveOptions.js.map +1 -1
  29. package/build/src/export/saveAssets.js +2 -1
  30. package/build/src/export/saveAssets.js.map +1 -1
  31. package/build/src/export/web/exportWebAsync.js +37 -0
  32. package/build/src/export/web/exportWebAsync.js.map +1 -0
  33. package/build/src/export/web/index.js +66 -0
  34. package/build/src/export/web/index.js.map +1 -0
  35. package/build/src/export/web/resolveOptions.js +13 -0
  36. package/build/src/export/web/resolveOptions.js.map +1 -0
  37. package/build/src/export/writeContents.js.map +1 -1
  38. package/build/src/install/checkPackages.js +2 -1
  39. package/build/src/install/checkPackages.js.map +1 -1
  40. package/build/src/install/index.js +1 -0
  41. package/build/src/install/index.js.map +1 -1
  42. package/build/src/install/installAsync.js +13 -5
  43. package/build/src/install/installAsync.js.map +1 -1
  44. package/build/src/install/resolveOptions.js +12 -65
  45. package/build/src/install/resolveOptions.js.map +1 -1
  46. package/build/src/install/utils/autoAddConfigPlugins.js +5 -26
  47. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  48. package/build/src/log.js.map +1 -1
  49. package/build/src/prebuild/copyTemplateFiles.js +5 -23
  50. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  51. package/build/src/prebuild/index.js +18 -12
  52. package/build/src/prebuild/index.js.map +1 -1
  53. package/build/src/prebuild/prebuildAsync.js +11 -12
  54. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  55. package/build/src/prebuild/resolveOptions.js +17 -0
  56. package/build/src/prebuild/resolveOptions.js.map +1 -1
  57. package/build/src/prebuild/resolveTemplate.js +2 -1
  58. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  59. package/build/src/prebuild/updatePackageJson.js +5 -5
  60. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  61. package/build/src/run/android/resolveInstallApkName.js +5 -26
  62. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  63. package/build/src/run/android/runAndroidAsync.js +3 -3
  64. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  65. package/build/src/run/ensureNativeProject.js +3 -0
  66. package/build/src/run/ensureNativeProject.js.map +1 -1
  67. package/build/src/run/hints.js +1 -1
  68. package/build/src/run/hints.js.map +1 -1
  69. package/build/src/run/ios/XcodeBuild.js +275 -0
  70. package/build/src/run/ios/XcodeBuild.js.map +1 -0
  71. package/build/src/run/ios/XcodeBuild.types.js +6 -0
  72. package/build/src/run/ios/XcodeBuild.types.js.map +1 -0
  73. package/build/src/run/ios/appleDevice/AppleDevice.js +161 -0
  74. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -0
  75. package/build/src/run/ios/appleDevice/ClientManager.js +161 -0
  76. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -0
  77. package/build/src/run/ios/appleDevice/client/AFCClient.js +195 -0
  78. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -0
  79. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +107 -0
  80. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -0
  81. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +97 -0
  82. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -0
  83. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +140 -0
  84. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -0
  85. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +91 -0
  86. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -0
  87. package/build/src/run/ios/appleDevice/client/ServiceClient.js +21 -0
  88. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -0
  89. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +117 -0
  90. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -0
  91. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +90 -0
  92. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -0
  93. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +332 -0
  94. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -0
  95. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +115 -0
  96. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -0
  97. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +126 -0
  98. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -0
  99. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +74 -0
  100. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -0
  101. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +65 -0
  102. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -0
  103. package/build/src/run/ios/codeSigning/Security.js +85 -0
  104. package/build/src/run/ios/codeSigning/Security.js.map +1 -0
  105. package/build/src/run/ios/codeSigning/configureCodeSigning.js +77 -0
  106. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -0
  107. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +102 -0
  108. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -0
  109. package/build/src/run/ios/codeSigning/settings.js +21 -0
  110. package/build/src/run/ios/codeSigning/settings.js.map +1 -0
  111. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +76 -0
  112. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -0
  113. package/build/src/run/ios/index.js +98 -0
  114. package/build/src/run/ios/index.js.map +1 -0
  115. package/build/src/run/ios/launchApp.js +75 -0
  116. package/build/src/run/ios/launchApp.js.map +1 -0
  117. package/build/src/run/ios/options/promptDevice.js +50 -0
  118. package/build/src/run/ios/options/promptDevice.js.map +1 -0
  119. package/build/src/run/ios/options/resolveDevice.js +92 -0
  120. package/build/src/run/ios/options/resolveDevice.js.map +1 -0
  121. package/build/src/run/ios/options/resolveNativeScheme.js +92 -0
  122. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -0
  123. package/build/src/run/ios/options/resolveOptions.js +44 -0
  124. package/build/src/run/ios/options/resolveOptions.js.map +1 -0
  125. package/build/src/run/ios/options/resolveXcodeProject.js +39 -0
  126. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -0
  127. package/build/src/run/ios/runIosAsync.js +85 -0
  128. package/build/src/run/ios/runIosAsync.js.map +1 -0
  129. package/build/src/run/resolveBundlerProps.js +9 -6
  130. package/build/src/run/resolveBundlerProps.js.map +1 -1
  131. package/build/src/run/startBundler.js +4 -2
  132. package/build/src/run/startBundler.js.map +1 -1
  133. package/build/src/start/doctor/Prerequisite.js +4 -4
  134. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  135. package/build/src/start/doctor/SecurityBinPrerequisite.js +27 -0
  136. package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -0
  137. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +2 -0
  138. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  139. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +69 -0
  140. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -0
  141. package/build/src/start/doctor/apple/XcodePrerequisite.js +2 -0
  142. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  143. package/build/src/start/doctor/dependencies/bundledNativeModules.js +3 -2
  144. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
  145. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +7 -13
  146. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  147. package/build/src/start/doctor/dependencies/getMissingPackages.js +3 -24
  148. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  149. package/build/src/start/doctor/dependencies/getVersionedPackages.js +2 -23
  150. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  151. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +17 -9
  152. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  153. package/build/src/start/doctor/ngrok/ExternalModule.js +2 -1
  154. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  155. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +4 -3
  156. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  157. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +32 -31
  158. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  159. package/build/src/start/interface/KeyPressHandler.js +2 -0
  160. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  161. package/build/src/start/interface/interactiveActions.js +5 -5
  162. package/build/src/start/interface/interactiveActions.js.map +1 -1
  163. package/build/src/start/interface/startInterface.js +3 -2
  164. package/build/src/start/interface/startInterface.js.map +1 -1
  165. package/build/src/start/platforms/ExpoGoInstaller.js +2 -1
  166. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  167. package/build/src/start/platforms/PlatformManager.js +4 -24
  168. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  169. package/build/src/start/platforms/android/ADBServer.js +17 -32
  170. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  171. package/build/src/start/platforms/android/AndroidSdk.js +41 -0
  172. package/build/src/start/platforms/android/AndroidSdk.js.map +1 -0
  173. package/build/src/start/platforms/android/activateWindow.js +4 -4
  174. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  175. package/build/src/start/platforms/android/adb.js +8 -3
  176. package/build/src/start/platforms/android/adb.js.map +1 -1
  177. package/build/src/start/platforms/android/adbReverse.js +3 -2
  178. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  179. package/build/src/start/platforms/android/emulator.js +8 -0
  180. package/build/src/start/platforms/android/emulator.js.map +1 -1
  181. package/build/src/start/platforms/android/gradle.js +2 -2
  182. package/build/src/start/platforms/android/gradle.js.map +1 -1
  183. package/build/src/start/platforms/android/promptAndroidDevice.js +1 -5
  184. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  185. package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -1
  186. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  187. package/build/src/start/platforms/ios/getBestSimulator.js +4 -4
  188. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  189. package/build/src/start/platforms/ios/promptAppleDevice.js +1 -5
  190. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  191. package/build/src/start/platforms/ios/simctl.js +14 -0
  192. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  193. package/build/src/start/platforms/ios/simctlLogging.js +220 -0
  194. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -0
  195. package/build/src/start/platforms/ios/xcrun.js +2 -23
  196. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  197. package/build/src/start/project/devices.js +2 -0
  198. package/build/src/start/project/devices.js.map +1 -1
  199. package/build/src/start/server/AsyncNgrok.js +6 -5
  200. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  201. package/build/src/start/server/BundlerDevServer.js +15 -8
  202. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  203. package/build/src/start/server/DevServerManager.js +15 -5
  204. package/build/src/start/server/DevServerManager.js.map +1 -1
  205. package/build/src/start/server/DevelopmentSession.js +4 -0
  206. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  207. package/build/src/start/server/UrlCreator.js +10 -3
  208. package/build/src/start/server/UrlCreator.js.map +1 -1
  209. package/build/src/start/server/metro/MetroBundlerDevServer.js +9 -0
  210. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  211. package/build/src/start/server/metro/TerminalReporter.js +5 -0
  212. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  213. package/build/src/start/server/metro/instantiateMetro.js +11 -1
  214. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  215. package/build/src/start/server/metro/resolveFromProject.js +8 -0
  216. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  217. package/build/src/start/server/metro/withMetroMultiPlatform.js +115 -0
  218. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -0
  219. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  220. package/build/src/start/server/middleware/ExpoMiddleware.js +9 -4
  221. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  222. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +24 -0
  223. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -0
  224. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +2 -0
  225. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  226. package/build/src/start/server/middleware/ManifestMiddleware.js +57 -6
  227. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  228. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +6 -1
  229. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  230. package/build/src/start/server/middleware/ServeStaticMiddleware.js +62 -0
  231. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -0
  232. package/build/src/start/server/platformBundlers.js +18 -0
  233. package/build/src/start/server/platformBundlers.js.map +1 -0
  234. package/build/src/start/server/webTemplate.js +68 -0
  235. package/build/src/start/server/webTemplate.js.map +1 -0
  236. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +59 -19
  237. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  238. package/build/src/start/server/webpack/compile.js +64 -0
  239. package/build/src/start/server/webpack/compile.js.map +1 -0
  240. package/build/src/start/startAsync.js +21 -17
  241. package/build/src/start/startAsync.js.map +1 -1
  242. package/build/src/utils/FileNotifier.js +5 -2
  243. package/build/src/utils/FileNotifier.js.map +1 -1
  244. package/build/src/utils/analytics/rudderstackClient.js +30 -3
  245. package/build/src/utils/analytics/rudderstackClient.js.map +1 -1
  246. package/build/src/utils/cocoapods.js +47 -0
  247. package/build/src/utils/cocoapods.js.map +1 -1
  248. package/build/src/utils/dir.js +6 -1
  249. package/build/src/utils/dir.js.map +1 -1
  250. package/build/src/utils/downloadAppAsync.js +3 -2
  251. package/build/src/utils/downloadAppAsync.js.map +1 -1
  252. package/build/src/utils/downloadExpoGoAsync.js +7 -32
  253. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  254. package/build/src/utils/editor.js +3 -2
  255. package/build/src/utils/editor.js.map +1 -1
  256. package/build/src/utils/env.js +3 -0
  257. package/build/src/utils/env.js.map +1 -1
  258. package/build/src/utils/exit.js +4 -25
  259. package/build/src/utils/exit.js.map +1 -1
  260. package/build/src/utils/getRunningProcess.js +6 -2
  261. package/build/src/utils/getRunningProcess.js.map +1 -1
  262. package/build/src/utils/nodeModules.js +13 -102
  263. package/build/src/utils/nodeModules.js.map +1 -1
  264. package/build/src/utils/npm.js +3 -24
  265. package/build/src/utils/npm.js.map +1 -1
  266. package/build/src/utils/ora.js +1 -13
  267. package/build/src/utils/ora.js.map +1 -1
  268. package/build/src/utils/plist.js +59 -0
  269. package/build/src/utils/plist.js.map +1 -0
  270. package/build/src/utils/progress.js +46 -0
  271. package/build/src/utils/progress.js.map +1 -1
  272. package/build/src/utils/prompts.js +19 -3
  273. package/build/src/utils/prompts.js.map +1 -1
  274. package/build/src/utils/resolveArgs.js +4 -1
  275. package/build/src/utils/resolveArgs.js.map +1 -1
  276. package/build/src/utils/tar.js +3 -0
  277. package/build/src/utils/tar.js.map +1 -1
  278. package/build/src/utils/terminal.js +10 -0
  279. package/build/src/utils/terminal.js.map +1 -0
  280. package/build/src/utils/validateApplicationId.js +9 -2
  281. package/build/src/utils/validateApplicationId.js.map +1 -1
  282. package/build/src/utils/variadic.js +47 -0
  283. package/build/src/utils/variadic.js.map +1 -0
  284. package/package.json +14 -10
  285. package/static/template/babel.config.js +6 -0
  286. package/static/template/index.html +117 -0
  287. package/static/template/metro.config.js +4 -0
  288. package/static/template/serve.json +13 -0
  289. package/static/template/webpack.config.js +7 -0
package/build/bin/cli CHANGED
@@ -2,6 +2,8 @@
2
2
  "use strict";
3
3
  var _arg = _interopRequireDefault(require("arg"));
4
4
  var _chalk = _interopRequireDefault(require("chalk"));
5
+ var _debug = _interopRequireDefault(require("debug"));
6
+ var _getenv = require("getenv");
5
7
  function _interopRequireDefault(obj) {
6
8
  return obj && obj.__esModule ? obj : {
7
9
  default: obj
@@ -28,9 +30,20 @@ function _interopRequireWildcard(obj) {
28
30
  return newObj;
29
31
  }
30
32
  }
33
+ // Setup before requiring `debug`.
34
+ if ((0, _getenv).boolish("EXPO_DEBUG", false)) {
35
+ _debug.default.enable("expo:*");
36
+ } else if (_debug.default.enabled("expo:")) {
37
+ process.env.EXPO_DEBUG = "1";
38
+ }
31
39
  const defaultCmd = "start";
32
40
  const commands = {
33
41
  // Add a new command here
42
+ "run:ios": ()=>Promise.resolve().then(function() {
43
+ return _interopRequireWildcard(require("../src/run/ios"));
44
+ }).then((i)=>i.expoRunIos
45
+ )
46
+ ,
34
47
  "run:android": ()=>Promise.resolve().then(function() {
35
48
  return _interopRequireWildcard(require("../src/run/android"));
36
49
  }).then((i)=>i.expoRunAndroid
@@ -56,12 +69,22 @@ const commands = {
56
69
  }).then((i)=>i.expoExport
57
70
  )
58
71
  ,
72
+ "export:web": ()=>Promise.resolve().then(function() {
73
+ return _interopRequireWildcard(require("../src/export/web"));
74
+ }).then((i)=>i.expoExportWeb
75
+ )
76
+ ,
59
77
  // Auxiliary commands
60
78
  install: ()=>Promise.resolve().then(function() {
61
79
  return _interopRequireWildcard(require("../src/install"));
62
80
  }).then((i)=>i.expoInstall
63
81
  )
64
82
  ,
83
+ customize: ()=>Promise.resolve().then(function() {
84
+ return _interopRequireWildcard(require("../src/customize"));
85
+ }).then((i)=>i.expoCustomize
86
+ )
87
+ ,
65
88
  // Auth
66
89
  login: ()=>Promise.resolve().then(function() {
67
90
  return _interopRequireWildcard(require("../src/login"));
@@ -95,14 +118,14 @@ const args = (0, _arg).default({
95
118
  });
96
119
  if (args["--version"]) {
97
120
  // Version is added in the build script.
98
- console.log("0.1.3");
121
+ console.log("0.2.0");
99
122
  process.exit(0);
100
123
  }
101
124
  // Check if we are running `npx expo <subcommand>` or `npx expo`
102
125
  const isSubcommand = Boolean(commands[args._[0]]);
103
126
  // Handle `--help` flag
104
127
  if (!isSubcommand && args["--help"]) {
105
- const { login , logout , whoami , register , start , install , export: _export , config , prebuild , "run:android": runAndroid , ...others } = commands;
128
+ const { login , logout , whoami , register , start , install , export: _export , config , customize , prebuild , "run:ios": runIos , "run:android": runAndroid , ...others } = commands;
106
129
  console.log(_chalk.default`
107
130
  {bold Usage}
108
131
  {dim $} npx expo <command>
@@ -110,15 +133,19 @@ if (!isSubcommand && args["--help"]) {
110
133
  {bold Commands}
111
134
  ${Object.keys({
112
135
  start,
113
- install,
114
136
  export: _export,
115
- config,
116
137
  ...others
117
138
  }).join(", ")}
118
139
  ${Object.keys({
140
+ "run:ios": runIos,
119
141
  "run:android": runAndroid,
120
142
  prebuild
121
143
  }).join(", ")}
144
+ ${Object.keys({
145
+ install,
146
+ customize,
147
+ config
148
+ }).join(", ")}
122
149
  {dim ${Object.keys({
123
150
  login,
124
151
  logout,
@@ -135,6 +162,64 @@ if (!isSubcommand && args["--help"]) {
135
162
  `);
136
163
  process.exit(0);
137
164
  }
165
+ // NOTE(EvanBacon): Squat some directory names to help with migration,
166
+ // users can still use folders named "send" or "eject" by using the fully qualified `npx expo start ./send`.
167
+ if (!isSubcommand) {
168
+ const migrationMap = {
169
+ init: "npx create-expo-app",
170
+ eject: "npx expo prebuild",
171
+ "start:web": "npx expo start --web",
172
+ "build:ios": "eas build -p ios",
173
+ "build:android": "eas build -p android",
174
+ "client:install:ios": "npx expo start --ios",
175
+ "client:install:android": "npx expo start --android",
176
+ doctor: "expo doctor",
177
+ upgrade: "expo upgrade",
178
+ "customize:web": "npx expo customize",
179
+ publish: "eas update",
180
+ "publish:set": "eas update",
181
+ "publish:rollback": "eas update",
182
+ "publish:history": "eas update",
183
+ "publish:details": "eas update",
184
+ "build:web": "npx expo export",
185
+ "credentials:manager": `eas credentials`,
186
+ "fetch:ios:certs": `eas credentials`,
187
+ "fetch:android:keystore": `eas credentials`,
188
+ "fetch:android:hashes": `eas credentials`,
189
+ "fetch:android:upload-cert": `eas credentials`,
190
+ "push:android:upload": `eas credentials`,
191
+ "push:android:show": `eas credentials`,
192
+ "push:android:clear": `eas credentials`,
193
+ url: `eas build:list`,
194
+ "url:ipa": `eas build:list`,
195
+ "url:apk": `eas build:list`,
196
+ webhooks: `eas webhook`,
197
+ "webhooks:add": `eas webhook:create`,
198
+ "webhooks:remove": `eas webhook:delete`,
199
+ "webhooks:update": `eas webhook:update`,
200
+ "build:status": `eas build:list`,
201
+ "upload:android": `eas submit -p android`,
202
+ "upload:ios": `eas submit -p ios`
203
+ };
204
+ const subcommand = args._[0];
205
+ if (subcommand in migrationMap) {
206
+ const replacement = migrationMap[subcommand];
207
+ console.log();
208
+ console.log(_chalk.default.yellow` {gray $} {bold expo ${subcommand}} is not supported in the local CLI, please use {bold ${replacement}} instead`);
209
+ console.log();
210
+ process.exit(1);
211
+ }
212
+ const deprecated = [
213
+ "send",
214
+ "client:ios"
215
+ ];
216
+ if (deprecated.includes(subcommand)) {
217
+ console.log();
218
+ console.log(_chalk.default.yellow` {gray $} {bold expo ${subcommand}} is deprecated`);
219
+ console.log();
220
+ process.exit(1);
221
+ }
222
+ }
138
223
  const command = isSubcommand ? args._[0] : defaultCmd;
139
224
  const commandArgs = isSubcommand ? args._.slice(1) : args._;
140
225
  // Push the help flag to the subcommand args.
package/build/bin/cli.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport arg from 'arg';\nimport chalk from 'chalk';\n\nconst defaultCmd = 'start';\n\nexport type Command = (argv?: string[]) => void;\n\nconst commands: { [command: string]: () => Promise<Command> } = {\n // Add a new command here\n 'run:android': () => import('../src/run/android').then((i) => i.expoRunAndroid),\n start: () => import('../src/start').then((i) => i.expoStart),\n prebuild: () => import('../src/prebuild').then((i) => i.expoPrebuild),\n config: () => import('../src/config').then((i) => i.expoConfig),\n export: () => import('../src/export').then((i) => i.expoExport),\n\n // Auxiliary commands\n install: () => import('../src/install').then((i) => i.expoInstall),\n\n // Auth\n login: () => import('../src/login').then((i) => i.expoLogin),\n logout: () => import('../src/logout').then((i) => i.expoLogout),\n register: () => import('../src/register').then((i) => i.expoRegister),\n whoami: () => import('../src/whoami').then((i) => i.expoWhoami),\n};\n\nconst args = arg(\n {\n // Types\n '--version': Boolean,\n '--help': Boolean,\n\n // Aliases\n '-v': '--version',\n '-h': '--help',\n },\n {\n permissive: true,\n }\n);\n\nif (args['--version']) {\n // Version is added in the build script.\n console.log(process.env.__EXPO_VERSION);\n process.exit(0);\n}\n\n// Check if we are running `npx expo <subcommand>` or `npx expo`\nconst isSubcommand = Boolean(commands[args._[0]]);\n\n// Handle `--help` flag\nif (!isSubcommand && args['--help']) {\n const {\n login,\n logout,\n whoami,\n register,\n start,\n install,\n export: _export,\n config,\n prebuild,\n 'run:android': runAndroid,\n ...others\n } = commands;\n\n console.log(chalk`\n {bold Usage}\n {dim $} npx expo <command>\n\n {bold Commands}\n ${Object.keys({ start, install, export: _export, config, ...others }).join(', ')}\n ${Object.keys({ 'run:android': runAndroid, prebuild }).join(', ')}\n {dim ${Object.keys({ login, logout, whoami, register }).join(', ')}}\n\n {bold Options}\n --version, -v Version number\n --help, -h Usage info\n\n For more info run a command with the {bold --help} flag\n {dim $} npx expo start --help\n`);\n process.exit(0);\n}\n\nconst command = isSubcommand ? args._[0] : defaultCmd;\nconst commandArgs = isSubcommand ? args._.slice(1) : args._;\n\n// Push the help flag to the subcommand args.\nif (args['--help']) {\n commandArgs.push('--help');\n}\n\n// Install exit hooks\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\ncommands[command]().then((exec) => exec(commandArgs));\n"],"names":["defaultCmd","commands","then","i","expoRunAndroid","start","expoStart","prebuild","expoPrebuild","config","expoConfig","export","expoExport","install","expoInstall","login","expoLogin","logout","expoLogout","register","expoRegister","whoami","expoWhoami","args","arg","Boolean","permissive","console","log","process","env","__EXPO_VERSION","exit","isSubcommand","_","_export","runAndroid","others","chalk","Object","keys","join","command","commandArgs","slice","push","on","exec"],"mappings":"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"}
1
+ {"version":3,"sources":["../../bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport arg from 'arg';\nimport chalk from 'chalk';\nimport Debug from 'debug';\nimport { boolish } from 'getenv';\n\n// Setup before requiring `debug`.\nif (boolish('EXPO_DEBUG', false)) {\n Debug.enable('expo:*');\n} else if (Debug.enabled('expo:')) {\n process.env.EXPO_DEBUG = '1';\n}\n\nconst defaultCmd = 'start';\n\nexport type Command = (argv?: string[]) => void;\n\nconst commands: { [command: string]: () => Promise<Command> } = {\n // Add a new command here\n 'run:ios': () => import('../src/run/ios').then((i) => i.expoRunIos),\n 'run:android': () => import('../src/run/android').then((i) => i.expoRunAndroid),\n start: () => import('../src/start').then((i) => i.expoStart),\n prebuild: () => import('../src/prebuild').then((i) => i.expoPrebuild),\n config: () => import('../src/config').then((i) => i.expoConfig),\n export: () => import('../src/export').then((i) => i.expoExport),\n 'export:web': () => import('../src/export/web').then((i) => i.expoExportWeb),\n\n // Auxiliary commands\n install: () => import('../src/install').then((i) => i.expoInstall),\n customize: () => import('../src/customize').then((i) => i.expoCustomize),\n\n // Auth\n login: () => import('../src/login').then((i) => i.expoLogin),\n logout: () => import('../src/logout').then((i) => i.expoLogout),\n register: () => import('../src/register').then((i) => i.expoRegister),\n whoami: () => import('../src/whoami').then((i) => i.expoWhoami),\n};\n\nconst args = arg(\n {\n // Types\n '--version': Boolean,\n '--help': Boolean,\n\n // Aliases\n '-v': '--version',\n '-h': '--help',\n },\n {\n permissive: true,\n }\n);\n\nif (args['--version']) {\n // Version is added in the build script.\n console.log(process.env.__EXPO_VERSION);\n process.exit(0);\n}\n\n// Check if we are running `npx expo <subcommand>` or `npx expo`\nconst isSubcommand = Boolean(commands[args._[0]]);\n\n// Handle `--help` flag\nif (!isSubcommand && args['--help']) {\n const {\n login,\n logout,\n whoami,\n register,\n start,\n install,\n export: _export,\n config,\n customize,\n prebuild,\n 'run:ios': runIos,\n 'run:android': runAndroid,\n ...others\n } = commands;\n\n console.log(chalk`\n {bold Usage}\n {dim $} npx expo <command>\n\n {bold Commands}\n ${Object.keys({ start, export: _export, ...others }).join(', ')}\n ${Object.keys({ 'run:ios': runIos, 'run:android': runAndroid, prebuild }).join(', ')}\n ${Object.keys({ install, customize, config }).join(', ')}\n {dim ${Object.keys({ login, logout, whoami, register }).join(', ')}}\n\n {bold Options}\n --version, -v Version number\n --help, -h Usage info\n\n For more info run a command with the {bold --help} flag\n {dim $} npx expo start --help\n`);\n process.exit(0);\n}\n\n// NOTE(EvanBacon): Squat some directory names to help with migration,\n// users can still use folders named \"send\" or \"eject\" by using the fully qualified `npx expo start ./send`.\nif (!isSubcommand) {\n const migrationMap: Record<string, string> = {\n init: 'npx create-expo-app',\n eject: 'npx expo prebuild',\n 'start:web': 'npx expo start --web',\n 'build:ios': 'eas build -p ios',\n 'build:android': 'eas build -p android',\n 'client:install:ios': 'npx expo start --ios',\n 'client:install:android': 'npx expo start --android',\n doctor: 'expo doctor',\n upgrade: 'expo upgrade',\n 'customize:web': 'npx expo customize',\n\n publish: 'eas update',\n 'publish:set': 'eas update',\n 'publish:rollback': 'eas update',\n 'publish:history': 'eas update',\n 'publish:details': 'eas update',\n\n 'build:web': 'npx expo export',\n\n 'credentials:manager': `eas credentials`,\n 'fetch:ios:certs': `eas credentials`,\n 'fetch:android:keystore': `eas credentials`,\n 'fetch:android:hashes': `eas credentials`,\n 'fetch:android:upload-cert': `eas credentials`,\n 'push:android:upload': `eas credentials`,\n 'push:android:show': `eas credentials`,\n 'push:android:clear': `eas credentials`,\n url: `eas build:list`,\n 'url:ipa': `eas build:list`,\n 'url:apk': `eas build:list`,\n webhooks: `eas webhook`,\n 'webhooks:add': `eas webhook:create`,\n 'webhooks:remove': `eas webhook:delete`,\n 'webhooks:update': `eas webhook:update`,\n\n 'build:status': `eas build:list`,\n 'upload:android': `eas submit -p android`,\n 'upload:ios': `eas submit -p ios`,\n };\n\n const subcommand = args._[0];\n if (subcommand in migrationMap) {\n const replacement = migrationMap[subcommand];\n console.log();\n console.log(\n chalk.yellow` {gray $} {bold expo ${subcommand}} is not supported in the local CLI, please use {bold ${replacement}} instead`\n );\n console.log();\n process.exit(1);\n }\n const deprecated = ['send', 'client:ios'];\n if (deprecated.includes(subcommand)) {\n console.log();\n console.log(chalk.yellow` {gray $} {bold expo ${subcommand}} is deprecated`);\n console.log();\n process.exit(1);\n }\n}\n\nconst command = isSubcommand ? args._[0] : defaultCmd;\nconst commandArgs = isSubcommand ? args._.slice(1) : args._;\n\n// Push the help flag to the subcommand args.\nif (args['--help']) {\n commandArgs.push('--help');\n}\n\n// Install exit hooks\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\ncommands[command]().then((exec) => exec(commandArgs));\n"],"names":["boolish","Debug","enable","enabled","process","env","EXPO_DEBUG","defaultCmd","commands","then","i","expoRunIos","expoRunAndroid","start","expoStart","prebuild","expoPrebuild","config","expoConfig","export","expoExport","expoExportWeb","install","expoInstall","customize","expoCustomize","login","expoLogin","logout","expoLogout","register","expoRegister","whoami","expoWhoami","args","arg","Boolean","permissive","console","log","__EXPO_VERSION","exit","isSubcommand","_","_export","runIos","runAndroid","others","chalk","Object","keys","join","migrationMap","init","eject","doctor","upgrade","publish","url","webhooks","subcommand","replacement","yellow","deprecated","includes","command","commandArgs","slice","push","on","exec"],"mappings":"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"}
@@ -3,33 +3,12 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  exports.wrapFetchWithOffline = wrapFetchWithOffline;
6
- var Log = _interopRequireWildcard(require("../../log"));
7
6
  var _settings = require("../settings");
8
- function _interopRequireWildcard(obj) {
9
- if (obj && obj.__esModule) {
10
- return obj;
11
- } else {
12
- var newObj = {};
13
- if (obj != null) {
14
- for(var key in obj){
15
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
16
- var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
17
- if (desc.get || desc.set) {
18
- Object.defineProperty(newObj, key, desc);
19
- } else {
20
- newObj[key] = obj[key];
21
- }
22
- }
23
- }
24
- }
25
- newObj.default = obj;
26
- return newObj;
27
- }
28
- }
7
+ const debug = require("debug")("expo:api:fetch:offline");
29
8
  function wrapFetchWithOffline(fetchFunction) {
30
9
  return async function fetchWithOffline(url, options = {}) {
31
10
  if (_settings.APISettings.isOffline) {
32
- Log.debug("[fetch] Offline: Skipping network request: " + url);
11
+ debug("Skipping network request: " + url);
33
12
  options.timeout = 1;
34
13
  }
35
14
  return fetchFunction(url, options);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithOffline.ts"],"sourcesContent":["import * as Log from '../../log';\nimport { APISettings } from '../settings';\nimport { FetchLike } from './client.types';\n\n/** Wrap fetch with support for APISettings offline mode. */\nexport function wrapFetchWithOffline(fetchFunction: FetchLike): FetchLike {\n return async function fetchWithOffline(url, options = {}) {\n if (APISettings.isOffline) {\n Log.debug('[fetch] Offline: Skipping network request: ' + url);\n options.timeout = 1;\n }\n return fetchFunction(url, options);\n };\n}\n"],"names":["wrapFetchWithOffline","Log","fetchFunction","fetchWithOffline","url","options","APISettings","isOffline","debug","timeout"],"mappings":"AAAA;;;;QAKgBA,oBAAoB,GAApBA,oBAAoB;AALxBC,IAAAA,GAAG,mCAAM,WAAW,EAAjB;AACa,IAAA,SAAa,WAAb,aAAa,CAAA;;;;;;;;;;;;;;;;;;;;;;AAIlC,SAASD,oBAAoB,CAACE,aAAwB,EAAa;IACxE,OAAO,eAAeC,gBAAgB,CAACC,GAAG,EAAEC,OAAO,GAAG,EAAE,EAAE;QACxD,IAAIC,SAAW,YAAA,CAACC,SAAS,EAAE;YACzBN,GAAG,CAACO,KAAK,CAAC,6CAA6C,GAAGJ,GAAG,CAAC,CAAC;YAC/DC,OAAO,CAACI,OAAO,GAAG,CAAC,CAAC;SACrB;QACD,OAAOP,aAAa,CAACE,GAAG,EAAEC,OAAO,CAAC,CAAC;KACpC,CAAC;CACH"}
1
+ {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithOffline.ts"],"sourcesContent":["import { APISettings } from '../settings';\nimport { FetchLike } from './client.types';\n\nconst debug = require('debug')('expo:api:fetch:offline') as typeof console.log;\n\n/** Wrap fetch with support for APISettings offline mode. */\nexport function wrapFetchWithOffline(fetchFunction: FetchLike): FetchLike {\n return async function fetchWithOffline(url, options = {}) {\n if (APISettings.isOffline) {\n debug('Skipping network request: ' + url);\n options.timeout = 1;\n }\n return fetchFunction(url, options);\n };\n}\n"],"names":["wrapFetchWithOffline","debug","require","fetchFunction","fetchWithOffline","url","options","APISettings","isOffline","timeout"],"mappings":"AAAA;;;;QAMgBA,oBAAoB,GAApBA,oBAAoB;AANR,IAAA,SAAa,WAAb,aAAa,CAAA;AAGzC,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,AAAsB,AAAC;AAGxE,SAASF,oBAAoB,CAACG,aAAwB,EAAa;IACxE,OAAO,eAAeC,gBAAgB,CAACC,GAAG,EAAEC,OAAO,GAAG,EAAE,EAAE;QACxD,IAAIC,SAAW,YAAA,CAACC,SAAS,EAAE;YACzBP,KAAK,CAAC,4BAA4B,GAAGI,GAAG,CAAC,CAAC;YAC1CC,OAAO,CAACG,OAAO,GAAG,CAAC,CAAC;SACrB;QACD,OAAON,aAAa,CAACE,GAAG,EAAEC,OAAO,CAAC,CAAC;KACpC,CAAC;CACH"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.customizeAsync = customizeAsync;
6
+ var _config = require("@expo/config");
7
+ var _findUp = require("../utils/findUp");
8
+ var _generate = require("./generate");
9
+ async function customizeAsync(files, options, extras) {
10
+ var ref;
11
+ // Locate the project root based on the process current working directory.
12
+ // This enables users to run `npx expo customize` from a subdirectory of the project.
13
+ const projectRoot = (0, _findUp).findUpProjectRootOrAssert(process.cwd());
14
+ // Get the static path (defaults to 'web/')
15
+ // Doesn't matter if expo is installed or which mode is used.
16
+ const { exp } = (0, _config).getConfig(projectRoot, {
17
+ skipSDKVersionRequirement: true
18
+ });
19
+ var ref1;
20
+ // Create the destination resolution props which are used in both
21
+ // the query and select functions.
22
+ const props = {
23
+ webStaticPath: (ref1 = (ref = exp.web) == null ? void 0 : ref.staticPath) != null ? ref1 : "web"
24
+ };
25
+ // If the user provided files, we'll generate them without prompting.
26
+ if (files.length) {
27
+ return (0, _generate).queryAndGenerateAsync(projectRoot, {
28
+ files,
29
+ props,
30
+ extras
31
+ });
32
+ }
33
+ // Otherwise, we'll prompt the user to select which files to generate.
34
+ await (0, _generate).selectAndGenerateAsync(projectRoot, {
35
+ props,
36
+ extras
37
+ });
38
+ }
39
+
40
+ //# sourceMappingURL=customizeAsync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/customize/customizeAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\n\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { queryAndGenerateAsync, selectAndGenerateAsync } from './generate';\nimport { Options } from './resolveOptions';\nimport { DestinationResolutionProps } from './templates';\n\nexport async function customizeAsync(files: string[], options: Options, extras: any[]) {\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo customize` from a subdirectory of the project.\n const projectRoot = findUpProjectRootOrAssert(process.cwd());\n\n // Get the static path (defaults to 'web/')\n // Doesn't matter if expo is installed or which mode is used.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n });\n\n // Create the destination resolution props which are used in both\n // the query and select functions.\n const props: DestinationResolutionProps = {\n webStaticPath: exp.web?.staticPath ?? 'web',\n };\n\n // If the user provided files, we'll generate them without prompting.\n if (files.length) {\n return queryAndGenerateAsync(projectRoot, {\n files,\n props,\n extras,\n });\n }\n\n // Otherwise, we'll prompt the user to select which files to generate.\n await selectAndGenerateAsync(projectRoot, {\n props,\n extras,\n });\n}\n"],"names":["customizeAsync","files","options","extras","exp","projectRoot","findUpProjectRootOrAssert","process","cwd","getConfig","skipSDKVersionRequirement","props","webStaticPath","web","staticPath","length","queryAndGenerateAsync","selectAndGenerateAsync"],"mappings":"AAAA;;;;QAOsBA,cAAc,GAAdA,cAAc;AAPV,IAAA,OAAc,WAAd,cAAc,CAAA;AAEE,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;AACG,IAAA,SAAY,WAAZ,YAAY,CAAA;AAInE,eAAeA,cAAc,CAACC,KAAe,EAAEC,OAAgB,EAAEC,MAAa,EAAE;QAcpEC,GAAO;IAbxB,0EAA0E;IAC1E,qFAAqF;IACrF,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,OAAyB,AAAe,CAAA,0BAAf,CAACC,OAAO,CAACC,GAAG,EAAE,CAAC,AAAC;IAE7D,2CAA2C;IAC3C,6DAA6D;IAC7D,MAAM,EAAEJ,GAAG,CAAA,EAAE,GAAGK,CAAAA,GAAAA,OAAS,AAEvB,CAAA,UAFuB,CAACJ,WAAW,EAAE;QACrCK,yBAAyB,EAAE,IAAI;KAChC,CAAC,AAAC;QAKcN,IAAmB;IAHpC,iEAAiE;IACjE,kCAAkC;IAClC,MAAMO,KAAK,GAA+B;QACxCC,aAAa,EAAER,CAAAA,IAAmB,GAAnBA,CAAAA,GAAO,GAAPA,GAAG,CAACS,GAAG,SAAY,GAAnBT,KAAAA,CAAmB,GAAnBA,GAAO,CAAEU,UAAU,YAAnBV,IAAmB,GAAI,KAAK;KAC5C,AAAC;IAEF,qEAAqE;IACrE,IAAIH,KAAK,CAACc,MAAM,EAAE;QAChB,OAAOC,CAAAA,GAAAA,SAAqB,AAI1B,CAAA,sBAJ0B,CAACX,WAAW,EAAE;YACxCJ,KAAK;YACLU,KAAK;YACLR,MAAM;SACP,CAAC,CAAC;KACJ;IAED,sEAAsE;IACtE,MAAMc,CAAAA,GAAAA,SAAsB,AAG1B,CAAA,uBAH0B,CAACZ,WAAW,EAAE;QACxCM,KAAK;QACLR,MAAM;KACP,CAAC,CAAC;CACJ"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.queryAndGenerateAsync = queryAndGenerateAsync;
6
+ exports.selectAndGenerateAsync = selectAndGenerateAsync;
7
+ var _path = _interopRequireDefault(require("path"));
8
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
9
+ var _installAsync = require("../install/installAsync");
10
+ var _log = require("../log");
11
+ var _dir = require("../utils/dir");
12
+ var _errors = require("../utils/errors");
13
+ var _templates = require("./templates");
14
+ function _interopRequireDefault(obj) {
15
+ return obj && obj.__esModule ? obj : {
16
+ default: obj
17
+ };
18
+ }
19
+ async function queryAndGenerateAsync(projectRoot, { files , props , extras }) {
20
+ const valid = files.filter((file)=>!!_templates.TEMPLATES.find((template)=>template.destination(props) === file
21
+ )
22
+ );
23
+ if (valid.length !== files.length) {
24
+ const diff = files.filter((file)=>!_templates.TEMPLATES.find((template)=>template.destination(props) === file
25
+ )
26
+ );
27
+ throw new _errors.CommandError(`Invalid files: ${diff.join(", ")}. Allowed: ${_templates.TEMPLATES.map((template)=>template.destination(props)
28
+ ).join(", ")}`);
29
+ }
30
+ if (!valid.length) {
31
+ return;
32
+ }
33
+ _log.Log.log(`Generating: ${valid.join(", ")}`);
34
+ return generateAsync(projectRoot, {
35
+ answer: files.map((file)=>_templates.TEMPLATES.findIndex((template)=>template.destination(props) === file
36
+ )
37
+ ),
38
+ props,
39
+ extras
40
+ });
41
+ }
42
+ async function selectAndGenerateAsync(projectRoot, { props , extras }) {
43
+ const answer = await (0, _templates).selectTemplatesAsync(projectRoot, props);
44
+ if (!(answer == null ? void 0 : answer.length)) {
45
+ _log.Log.exit("\n\u203A Exiting with no change...", 0);
46
+ }
47
+ await generateAsync(projectRoot, {
48
+ answer,
49
+ props,
50
+ extras
51
+ });
52
+ }
53
+ async function generateAsync(projectRoot, { answer , props , extras }) {
54
+ // Copy files
55
+ await Promise.all(answer.map((file)=>{
56
+ const template = _templates.TEMPLATES[file];
57
+ const projectFilePath = _path.default.resolve(projectRoot, template.destination(props));
58
+ // copy the file from template
59
+ return (0, _dir).copyAsync(template.file(projectRoot), projectFilePath, {
60
+ overwrite: true,
61
+ recursive: true
62
+ });
63
+ }));
64
+ // Install dependencies
65
+ const packages = answer.map((file)=>_templates.TEMPLATES[file].dependencies
66
+ ).flat().filter((pkg)=>!_resolveFrom.default.silent(projectRoot, pkg)
67
+ );
68
+ if (packages.length) {
69
+ _log.Log.debug("Installing " + packages.join(", "));
70
+ await (0, _installAsync).installAsync(packages, {}, [
71
+ "--dev",
72
+ ...extras
73
+ ]);
74
+ }
75
+ }
76
+
77
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/customize/generate.ts"],"sourcesContent":["import path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { installAsync } from '../install/installAsync';\nimport { Log } from '../log';\nimport { copyAsync } from '../utils/dir';\nimport { CommandError } from '../utils/errors';\nimport { DestinationResolutionProps, selectTemplatesAsync, TEMPLATES } from './templates';\n\nexport async function queryAndGenerateAsync(\n projectRoot: string,\n {\n files,\n props,\n extras,\n }: {\n files: string[];\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n const valid = files.filter(\n (file) => !!TEMPLATES.find((template) => template.destination(props) === file)\n );\n\n if (valid.length !== files.length) {\n const diff = files.filter(\n (file) => !TEMPLATES.find((template) => template.destination(props) === file)\n );\n throw new CommandError(\n `Invalid files: ${diff.join(', ')}. Allowed: ${TEMPLATES.map((template) =>\n template.destination(props)\n ).join(', ')}`\n );\n }\n\n if (!valid.length) {\n return;\n }\n Log.log(`Generating: ${valid.join(', ')}`);\n return generateAsync(projectRoot, {\n answer: files.map((file) =>\n TEMPLATES.findIndex((template) => template.destination(props) === file)\n ),\n props,\n extras,\n });\n}\n\n/** Select templates to generate then generate and install. */\nexport async function selectAndGenerateAsync(\n projectRoot: string,\n {\n props,\n extras,\n }: {\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n const answer = await selectTemplatesAsync(projectRoot, props);\n\n if (!answer?.length) {\n Log.exit('\\n\\u203A Exiting with no change...', 0);\n }\n\n await generateAsync(projectRoot, {\n answer,\n props,\n extras,\n });\n}\n\nasync function generateAsync(\n projectRoot: string,\n {\n answer,\n props,\n extras,\n }: {\n answer: number[];\n props: DestinationResolutionProps;\n /** Any extra props to pass to the install command. */\n extras: any[];\n }\n) {\n // Copy files\n await Promise.all(\n answer.map((file) => {\n const template = TEMPLATES[file];\n const projectFilePath = path.resolve(projectRoot, template.destination(props));\n // copy the file from template\n return copyAsync(template.file(projectRoot), projectFilePath, {\n overwrite: true,\n recursive: true,\n });\n })\n );\n\n // Install dependencies\n const packages = answer\n .map((file) => TEMPLATES[file].dependencies)\n .flat()\n .filter((pkg) => !resolveFrom.silent(projectRoot, pkg));\n if (packages.length) {\n Log.debug('Installing ' + packages.join(', '));\n await installAsync(packages, {}, ['--dev', ...extras]);\n }\n}\n"],"names":["queryAndGenerateAsync","selectAndGenerateAsync","projectRoot","files","props","extras","valid","filter","file","TEMPLATES","find","template","destination","length","diff","CommandError","join","map","Log","log","generateAsync","answer","findIndex","selectTemplatesAsync","exit","Promise","all","projectFilePath","path","resolve","copyAsync","overwrite","recursive","packages","dependencies","flat","pkg","resolveFrom","silent","debug","installAsync"],"mappings":"AAAA;;;;QASsBA,qBAAqB,GAArBA,qBAAqB;QA0CrBC,sBAAsB,GAAtBA,sBAAsB;AAnD3B,IAAA,KAAM,kCAAN,MAAM,EAAA;AACC,IAAA,YAAc,kCAAd,cAAc,EAAA;AAET,IAAA,aAAyB,WAAzB,yBAAyB,CAAA;AAClC,IAAA,IAAQ,WAAR,QAAQ,CAAA;AACF,IAAA,IAAc,WAAd,cAAc,CAAA;AACX,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;AAC8B,IAAA,UAAa,WAAb,aAAa,CAAA;;;;;;AAElF,eAAeD,qBAAqB,CACzCE,WAAmB,EACnB,EACEC,KAAK,CAAA,EACLC,KAAK,CAAA,EACLC,MAAM,CAAA,EAMP,EACD;IACA,MAAMC,KAAK,GAAGH,KAAK,CAACI,MAAM,CACxB,CAACC,IAAI,GAAK,CAAC,CAACC,UAAS,UAAA,CAACC,IAAI,CAAC,CAACC,QAAQ,GAAKA,QAAQ,CAACC,WAAW,CAACR,KAAK,CAAC,KAAKI,IAAI;QAAA,CAAC;IAAA,CAC/E,AAAC;IAEF,IAAIF,KAAK,CAACO,MAAM,KAAKV,KAAK,CAACU,MAAM,EAAE;QACjC,MAAMC,IAAI,GAAGX,KAAK,CAACI,MAAM,CACvB,CAACC,IAAI,GAAK,CAACC,UAAS,UAAA,CAACC,IAAI,CAAC,CAACC,QAAQ,GAAKA,QAAQ,CAACC,WAAW,CAACR,KAAK,CAAC,KAAKI,IAAI;YAAA,CAAC;QAAA,CAC9E,AAAC;QACF,MAAM,IAAIO,OAAY,aAAA,CACpB,CAAC,eAAe,EAAED,IAAI,CAACE,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAEP,UAAS,UAAA,CAACQ,GAAG,CAAC,CAACN,QAAQ,GACpEA,QAAQ,CAACC,WAAW,CAACR,KAAK,CAAC;QAAA,CAC5B,CAACY,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACf,CAAC;KACH;IAED,IAAI,CAACV,KAAK,CAACO,MAAM,EAAE;QACjB,OAAO;KACR;IACDK,IAAG,IAAA,CAACC,GAAG,CAAC,CAAC,YAAY,EAAEb,KAAK,CAACU,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAOI,aAAa,CAAClB,WAAW,EAAE;QAChCmB,MAAM,EAAElB,KAAK,CAACc,GAAG,CAAC,CAACT,IAAI,GACrBC,UAAS,UAAA,CAACa,SAAS,CAAC,CAACX,QAAQ,GAAKA,QAAQ,CAACC,WAAW,CAACR,KAAK,CAAC,KAAKI,IAAI;YAAA,CAAC;QAAA,CACxE;QACDJ,KAAK;QACLC,MAAM;KACP,CAAC,CAAC;CACJ;AAGM,eAAeJ,sBAAsB,CAC1CC,WAAmB,EACnB,EACEE,KAAK,CAAA,EACLC,MAAM,CAAA,EAKP,EACD;IACA,MAAMgB,MAAM,GAAG,MAAME,CAAAA,GAAAA,UAAoB,AAAoB,CAAA,qBAApB,CAACrB,WAAW,EAAEE,KAAK,CAAC,AAAC;IAE9D,IAAI,CAACiB,CAAAA,MAAM,QAAQ,GAAdA,KAAAA,CAAc,GAAdA,MAAM,CAAER,MAAM,CAAA,EAAE;QACnBK,IAAG,IAAA,CAACM,IAAI,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC;KACnD;IAED,MAAMJ,aAAa,CAAClB,WAAW,EAAE;QAC/BmB,MAAM;QACNjB,KAAK;QACLC,MAAM;KACP,CAAC,CAAC;CACJ;AAED,eAAee,aAAa,CAC1BlB,WAAmB,EACnB,EACEmB,MAAM,CAAA,EACNjB,KAAK,CAAA,EACLC,MAAM,CAAA,EAMP,EACD;IACA,aAAa;IACb,MAAMoB,OAAO,CAACC,GAAG,CACfL,MAAM,CAACJ,GAAG,CAAC,CAACT,IAAI,GAAK;QACnB,MAAMG,QAAQ,GAAGF,UAAS,UAAA,CAACD,IAAI,CAAC,AAAC;QACjC,MAAMmB,eAAe,GAAGC,KAAI,QAAA,CAACC,OAAO,CAAC3B,WAAW,EAAES,QAAQ,CAACC,WAAW,CAACR,KAAK,CAAC,CAAC,AAAC;QAC/E,8BAA8B;QAC9B,OAAO0B,CAAAA,GAAAA,IAAS,AAGd,CAAA,UAHc,CAACnB,QAAQ,CAACH,IAAI,CAACN,WAAW,CAAC,EAAEyB,eAAe,EAAE;YAC5DI,SAAS,EAAE,IAAI;YACfC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;KACJ,CAAC,CACH,CAAC;IAEF,uBAAuB;IACvB,MAAMC,QAAQ,GAAGZ,MAAM,CACpBJ,GAAG,CAAC,CAACT,IAAI,GAAKC,UAAS,UAAA,CAACD,IAAI,CAAC,CAAC0B,YAAY;IAAA,CAAC,CAC3CC,IAAI,EAAE,CACN5B,MAAM,CAAC,CAAC6B,GAAG,GAAK,CAACC,YAAW,QAAA,CAACC,MAAM,CAACpC,WAAW,EAAEkC,GAAG,CAAC;IAAA,CAAC,AAAC;IAC1D,IAAIH,QAAQ,CAACpB,MAAM,EAAE;QACnBK,IAAG,IAAA,CAACqB,KAAK,CAAC,aAAa,GAAGN,QAAQ,CAACjB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,MAAMwB,CAAAA,GAAAA,aAAY,AAAoC,CAAA,aAApC,CAACP,QAAQ,EAAE,EAAE,EAAE;YAAC,OAAO;eAAK5B,MAAM;SAAC,CAAC,CAAC;KACxD;CACF"}
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.expoCustomize = void 0;
7
+ var _chalk = _interopRequireDefault(require("chalk"));
8
+ var _args = require("../utils/args");
9
+ function _interopRequireDefault(obj) {
10
+ return obj && obj.__esModule ? obj : {
11
+ default: obj
12
+ };
13
+ }
14
+ const expoCustomize = async (argv)=>{
15
+ const args = (0, _args).assertWithOptionsArgs({
16
+ // Other options are parsed manually.
17
+ "--help": Boolean,
18
+ // Aliases
19
+ "-h": "--help"
20
+ }, {
21
+ argv,
22
+ // Allow other options, we'll throw an error if unexpected values are passed.
23
+ permissive: true
24
+ });
25
+ if (args["--help"]) {
26
+ (0, _args).printHelp(`Generate static project files`, _chalk.default`npx expo customize {dim [files...] -- [options]}`, [
27
+ _chalk.default`[files...] List of files to generate`,
28
+ _chalk.default`[options] Options to pass to the install command`,
29
+ `-h, --help Usage info`,
30
+ ].join("\n"));
31
+ }
32
+ // Load modules after the help prompt so `npx expo install -h` shows as fast as possible.
33
+ const { customizeAsync } = require("./customizeAsync");
34
+ const { logCmdError } = require("../utils/errors");
35
+ const { resolveArgsAsync } = require("./resolveOptions");
36
+ const { variadic , options , extras } = await resolveArgsAsync(process.argv.slice(3)).catch(logCmdError);
37
+ return customizeAsync(variadic, options, extras).catch(logCmdError);
38
+ };
39
+ exports.expoCustomize = expoCustomize;
40
+
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/customize/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertWithOptionsArgs, printHelp } from '../utils/args';\n\nexport const expoCustomize: Command = async (argv) => {\n const args = assertWithOptionsArgs(\n {\n // Other options are parsed manually.\n '--help': Boolean,\n // Aliases\n '-h': '--help',\n },\n {\n argv,\n // Allow other options, we'll throw an error if unexpected values are passed.\n permissive: true,\n }\n );\n\n if (args['--help']) {\n printHelp(\n `Generate static project files`,\n chalk`npx expo customize {dim [files...] -- [options]}`,\n [\n chalk`[files...] List of files to generate`,\n chalk`[options] Options to pass to the install command`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n // Load modules after the help prompt so `npx expo install -h` shows as fast as possible.\n const { customizeAsync } = require('./customizeAsync') as typeof import('./customizeAsync');\n const { logCmdError } = require('../utils/errors') as typeof import('../utils/errors');\n const { resolveArgsAsync } = require('./resolveOptions') as typeof import('./resolveOptions');\n\n const { variadic, options, extras } = await resolveArgsAsync(process.argv.slice(3)).catch(\n logCmdError\n );\n return customizeAsync(variadic, options, extras).catch(logCmdError);\n};\n"],"names":["expoCustomize","argv","args","assertWithOptionsArgs","Boolean","permissive","printHelp","chalk","join","customizeAsync","require","logCmdError","resolveArgsAsync","variadic","options","extras","process","slice","catch"],"mappings":"AAAA;;;;;;AACkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAGwB,IAAA,KAAe,WAAf,eAAe,CAAA;;;;;;AAEzD,MAAMA,aAAa,GAAY,OAAOC,IAAI,GAAK;IACpD,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAqB,AAYjC,CAAA,sBAZiC,CAChC;QACE,qCAAqC;QACrC,QAAQ,EAAEC,OAAO;QACjB,UAAU;QACV,IAAI,EAAE,QAAQ;KACf,EACD;QACEH,IAAI;QACJ,6EAA6E;QAC7EI,UAAU,EAAE,IAAI;KACjB,CACF,AAAC;IAEF,IAAIH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBI,CAAAA,GAAAA,KAAS,AAQR,CAAA,UARQ,CACP,CAAC,6BAA6B,CAAC,EAC/BC,MAAK,QAAA,CAAC,gDAAgD,CAAC,EACvD;YACEA,MAAK,QAAA,CAAC,qCAAqC,CAAC;YAC5CA,MAAK,QAAA,CAAC,kDAAkD,CAAC;YACzD,CAAC,sBAAsB,CAAC;SACzB,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,yFAAyF;IACzF,MAAM,EAAEC,cAAc,CAAA,EAAE,GAAGC,OAAO,CAAC,kBAAkB,CAAC,AAAqC,AAAC;IAC5F,MAAM,EAAEC,WAAW,CAAA,EAAE,GAAGD,OAAO,CAAC,iBAAiB,CAAC,AAAoC,AAAC;IACvF,MAAM,EAAEE,gBAAgB,CAAA,EAAE,GAAGF,OAAO,CAAC,kBAAkB,CAAC,AAAqC,AAAC;IAE9F,MAAM,EAAEG,QAAQ,CAAA,EAAEC,OAAO,CAAA,EAAEC,MAAM,CAAA,EAAE,GAAG,MAAMH,gBAAgB,CAACI,OAAO,CAACf,IAAI,CAACgB,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,KAAK,CACvFP,WAAW,CACZ,AAAC;IACF,OAAOF,cAAc,CAACI,QAAQ,EAAEC,OAAO,EAAEC,MAAM,CAAC,CAACG,KAAK,CAACP,WAAW,CAAC,CAAC;CACrE,AAAC;QApCWX,aAAa,GAAbA,aAAa"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.resolveArgsAsync = resolveArgsAsync;
6
+ var _variadic = require("../utils/variadic");
7
+ async function resolveArgsAsync(argv) {
8
+ const { variadic , extras , flags } = (0, _variadic).parseVariadicArguments(argv);
9
+ (0, _variadic).assertUnexpectedObjectKeys([], flags);
10
+ return {
11
+ // Variadic arguments like `npx expo install react react-dom` -> ['react', 'react-dom']
12
+ variadic,
13
+ options: {},
14
+ extras
15
+ };
16
+ }
17
+
18
+ //# sourceMappingURL=resolveOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/customize/resolveOptions.ts"],"sourcesContent":["import { assertUnexpectedObjectKeys, parseVariadicArguments } from '../utils/variadic';\n\nexport type Options = object;\n\nexport async function resolveArgsAsync(\n argv: string[]\n): Promise<{ variadic: string[]; options: Options; extras: string[] }> {\n const { variadic, extras, flags } = parseVariadicArguments(argv);\n\n assertUnexpectedObjectKeys([], flags);\n\n return {\n // Variadic arguments like `npx expo install react react-dom` -> ['react', 'react-dom']\n variadic,\n options: {},\n extras,\n };\n}\n"],"names":["resolveArgsAsync","argv","variadic","extras","flags","parseVariadicArguments","assertUnexpectedObjectKeys","options"],"mappings":"AAAA;;;;QAIsBA,gBAAgB,GAAhBA,gBAAgB;AAJ6B,IAAA,SAAmB,WAAnB,mBAAmB,CAAA;AAI/E,eAAeA,gBAAgB,CACpCC,IAAc,EACuD;IACrE,MAAM,EAAEC,QAAQ,CAAA,EAAEC,MAAM,CAAA,EAAEC,KAAK,CAAA,EAAE,GAAGC,CAAAA,GAAAA,SAAsB,AAAM,CAAA,uBAAN,CAACJ,IAAI,CAAC,AAAC;IAEjEK,CAAAA,GAAAA,SAA0B,AAAW,CAAA,2BAAX,CAAC,EAAE,EAAEF,KAAK,CAAC,CAAC;IAEtC,OAAO;QACL,uFAAuF;QACvFF,QAAQ;QACRK,OAAO,EAAE,EAAE;QACXJ,MAAM;KACP,CAAC;CACH"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.selectTemplatesAsync = selectTemplatesAsync;
6
+ exports.TEMPLATES = void 0;
7
+ var _chalk = _interopRequireDefault(require("chalk"));
8
+ var _fs = _interopRequireDefault(require("fs"));
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
11
+ var _prompts = _interopRequireDefault(require("../utils/prompts"));
12
+ function _interopRequireDefault(obj) {
13
+ return obj && obj.__esModule ? obj : {
14
+ default: obj
15
+ };
16
+ }
17
+ const debug = require("debug")("expo:customize:templates");
18
+ function importFromExpoWebpackConfig(projectRoot, folder, moduleId) {
19
+ try {
20
+ const filePath = (0, _resolveFrom).default(projectRoot, `@expo/webpack-config/${folder}/${moduleId}`);
21
+ debug(`Using @expo/webpack-config template for "${moduleId}": ${filePath}`);
22
+ return filePath;
23
+ } catch {
24
+ debug(`@expo/webpack-config template for "${moduleId}" not found, falling back on @expo/cli`);
25
+ }
26
+ return importFromVendor(projectRoot, moduleId);
27
+ }
28
+ function importFromVendor(projectRoot, moduleId) {
29
+ try {
30
+ const filePath = (0, _resolveFrom).default(projectRoot, "@expo/cli/static/template/" + moduleId);
31
+ debug(`Using @expo/cli template for "${moduleId}": ${filePath}`);
32
+ return filePath;
33
+ } catch {
34
+ // For dev mode, testing and other cases where @expo/cli is not installed
35
+ const filePath = require.resolve(`@expo/cli/static/template/${moduleId}`);
36
+ debug(`Local @expo/cli template for "${moduleId}" not found, falling back on template relative to @expo/cli: ${filePath}`);
37
+ return filePath;
38
+ }
39
+ }
40
+ const TEMPLATES = [
41
+ {
42
+ id: "babel.config.js",
43
+ file: (projectRoot)=>importFromVendor(projectRoot, "babel.config.js")
44
+ ,
45
+ destination: ()=>"babel.config.js"
46
+ ,
47
+ dependencies: [
48
+ // Even though this is installed in `expo`, we should add it for now.
49
+ "babel-preset-expo",
50
+ ]
51
+ },
52
+ {
53
+ id: "webpack.config.js",
54
+ file: (projectRoot)=>importFromExpoWebpackConfig(projectRoot, "template", "webpack.config.js")
55
+ ,
56
+ destination: ()=>"webpack.config.js"
57
+ ,
58
+ dependencies: [
59
+ "@expo/webpack-config"
60
+ ]
61
+ },
62
+ {
63
+ id: "metro.config.js",
64
+ dependencies: [
65
+ "@expo/metro-config"
66
+ ],
67
+ destination: ()=>"metro.config.js"
68
+ ,
69
+ file: (projectRoot)=>importFromVendor(projectRoot, "metro.config.js")
70
+ },
71
+ {
72
+ id: "serve.json",
73
+ file: (projectRoot)=>importFromExpoWebpackConfig(projectRoot, "web-default", "serve.json")
74
+ ,
75
+ // web/serve.json
76
+ destination: ({ webStaticPath })=>webStaticPath + "/serve.json"
77
+ ,
78
+ dependencies: []
79
+ },
80
+ {
81
+ id: "index.html",
82
+ file: (projectRoot)=>importFromExpoWebpackConfig(projectRoot, "web-default", "index.html")
83
+ ,
84
+ // web/index.html
85
+ destination: ({ webStaticPath })=>webStaticPath + "/index.html"
86
+ ,
87
+ dependencies: []
88
+ },
89
+ ];
90
+ exports.TEMPLATES = TEMPLATES;
91
+ /** Generate the prompt choices. */ function createChoices(projectRoot, props) {
92
+ return TEMPLATES.map((template, index)=>{
93
+ const destination = template.destination(props);
94
+ const localProjectFile = _path.default.resolve(projectRoot, destination);
95
+ const exists = _fs.default.existsSync(localProjectFile);
96
+ return {
97
+ title: destination,
98
+ value: index,
99
+ description: exists ? _chalk.default.red("This will overwrite the existing file") : undefined
100
+ };
101
+ });
102
+ }
103
+ async function selectTemplatesAsync(projectRoot, props) {
104
+ const options = createChoices(projectRoot, props);
105
+ const { answer } = await (0, _prompts).default({
106
+ type: "multiselect",
107
+ name: "answer",
108
+ message: "Which files would you like to generate?",
109
+ hint: "- Space to select. Return to submit",
110
+ warn: "File already exists.",
111
+ limit: options.length,
112
+ instructions: "",
113
+ choices: options
114
+ });
115
+ return answer;
116
+ }
117
+
118
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/customize/templates.ts"],"sourcesContent":["import chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport prompt, { ExpoChoice } from '../utils/prompts';\n\nconst debug = require('debug')('expo:customize:templates');\n\nexport type DestinationResolutionProps = {\n /** Web 'public' folder path (defaults to `/web`). This technically can be changed but shouldn't be. */\n webStaticPath: string;\n};\n\nfunction importFromExpoWebpackConfig(projectRoot: string, folder: string, moduleId: string) {\n try {\n const filePath = resolveFrom(projectRoot, `@expo/webpack-config/${folder}/${moduleId}`);\n debug(`Using @expo/webpack-config template for \"${moduleId}\": ${filePath}`);\n return filePath;\n } catch {\n debug(`@expo/webpack-config template for \"${moduleId}\" not found, falling back on @expo/cli`);\n }\n return importFromVendor(projectRoot, moduleId);\n}\n\nfunction importFromVendor(projectRoot: string, moduleId: string) {\n try {\n const filePath = resolveFrom(projectRoot, '@expo/cli/static/template/' + moduleId);\n debug(`Using @expo/cli template for \"${moduleId}\": ${filePath}`);\n return filePath;\n } catch {\n // For dev mode, testing and other cases where @expo/cli is not installed\n const filePath = require.resolve(`@expo/cli/static/template/${moduleId}`);\n debug(\n `Local @expo/cli template for \"${moduleId}\" not found, falling back on template relative to @expo/cli: ${filePath}`\n );\n\n return filePath;\n }\n}\n\nexport const TEMPLATES: {\n /** Unique ID for easily indexing. */\n id: string;\n /** Template file path to copy into the project. */\n file: (projectRoot: string) => string;\n /** Output location for the file in the user project. */\n destination: (props: DestinationResolutionProps) => string;\n /** List of dependencies to install in the project. These are used inside of the template file. */\n dependencies: string[];\n}[] = [\n {\n id: 'babel.config.js',\n file: (projectRoot) => importFromVendor(projectRoot, 'babel.config.js'),\n destination: () => 'babel.config.js',\n dependencies: [\n // Even though this is installed in `expo`, we should add it for now.\n 'babel-preset-expo',\n ],\n },\n {\n id: 'webpack.config.js',\n file: (projectRoot) =>\n importFromExpoWebpackConfig(projectRoot, 'template', 'webpack.config.js'),\n destination: () => 'webpack.config.js',\n dependencies: ['@expo/webpack-config'],\n },\n {\n id: 'metro.config.js',\n dependencies: ['@expo/metro-config'],\n destination: () => 'metro.config.js',\n file: (projectRoot) => importFromVendor(projectRoot, 'metro.config.js'),\n },\n {\n id: 'serve.json',\n file: (projectRoot) => importFromExpoWebpackConfig(projectRoot, 'web-default', 'serve.json'),\n // web/serve.json\n destination: ({ webStaticPath }) => webStaticPath + '/serve.json',\n dependencies: [],\n },\n {\n id: 'index.html',\n file: (projectRoot) => importFromExpoWebpackConfig(projectRoot, 'web-default', 'index.html'),\n // web/index.html\n destination: ({ webStaticPath }) => webStaticPath + '/index.html',\n dependencies: [],\n },\n];\n\n/** Generate the prompt choices. */\nfunction createChoices(\n projectRoot: string,\n props: DestinationResolutionProps\n): ExpoChoice<number>[] {\n return TEMPLATES.map((template, index) => {\n const destination = template.destination(props);\n const localProjectFile = path.resolve(projectRoot, destination);\n const exists = fs.existsSync(localProjectFile);\n\n return {\n title: destination,\n value: index,\n description: exists ? chalk.red('This will overwrite the existing file') : undefined,\n };\n });\n}\n\n/** Prompt to select templates to add. */\nexport async function selectTemplatesAsync(projectRoot: string, props: DestinationResolutionProps) {\n const options = createChoices(projectRoot, props);\n\n const { answer } = await prompt({\n type: 'multiselect',\n name: 'answer',\n message: 'Which files would you like to generate?',\n hint: '- Space to select. Return to submit',\n warn: 'File already exists.',\n limit: options.length,\n instructions: '',\n choices: options,\n });\n return answer;\n}\n"],"names":["selectTemplatesAsync","debug","require","importFromExpoWebpackConfig","projectRoot","folder","moduleId","filePath","resolveFrom","importFromVendor","resolve","TEMPLATES","id","file","destination","dependencies","webStaticPath","createChoices","props","map","template","index","localProjectFile","path","exists","fs","existsSync","title","value","description","chalk","red","undefined","options","answer","prompt","type","name","message","hint","warn","limit","length","instructions","choices"],"mappings":"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"}
@@ -14,22 +14,25 @@ function createMetadataJson({ bundles , fileNames }) {
14
14
  return {
15
15
  version: 0,
16
16
  bundler: "metro",
17
- fileMetadata: Object.entries(bundles).reduce((metadata, [platform, bundle])=>({
17
+ fileMetadata: Object.entries(bundles).reduce((metadata, [platform, bundle])=>{
18
+ return {
18
19
  ...metadata,
19
20
  [platform]: {
20
21
  // Get the filename for each platform's bundle.
21
22
  bundle: _path.default.join("bundles", fileNames[platform]),
22
23
  // Collect all of the assets and convert them to the serial format.
23
- assets: bundle.assets.map((asset)=>// Each asset has multiple hashes which we convert and then flatten.
24
- asset.fileHashes.map((hash)=>({
24
+ assets: bundle.assets.map((asset)=>{
25
+ var // Each asset has multiple hashes which we convert and then flatten.
26
+ ref;
27
+ return (ref = asset.fileHashes) == null ? void 0 : ref.map((hash)=>({
25
28
  path: _path.default.join("assets", hash),
26
29
  ext: asset.type
27
30
  })
28
- )
29
- ).flat()
31
+ );
32
+ }).filter(Boolean).flat()
30
33
  }
31
- })
32
- , {})
34
+ };
35
+ }, {})
33
36
  };
34
37
  }
35
38