@expo/cli 0.11.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/build/bin/cli +2 -2
  2. package/build/src/api/getExpoGoIntermediateCertificate.js +1 -1
  3. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
  4. package/build/src/api/getExpoSchema.js +1 -1
  5. package/build/src/api/getExpoSchema.js.map +1 -1
  6. package/build/src/api/getNativeModuleVersions.js +1 -1
  7. package/build/src/api/getNativeModuleVersions.js.map +1 -1
  8. package/build/src/api/getProjectDevelopmentCertificate.js +1 -1
  9. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
  10. package/build/src/api/getVersions.js +1 -1
  11. package/build/src/api/getVersions.js.map +1 -1
  12. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
  13. package/build/src/api/rest/client.js +5 -5
  14. package/build/src/api/rest/client.js.map +1 -1
  15. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  16. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  17. package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
  18. package/build/src/api/updateDevelopmentSession.js +1 -1
  19. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  20. package/build/src/api/user/actions.js +2 -2
  21. package/build/src/api/user/actions.js.map +1 -1
  22. package/build/src/api/user/otp.js +1 -1
  23. package/build/src/api/user/otp.js.map +1 -1
  24. package/build/src/api/user/user.js +2 -2
  25. package/build/src/api/user/user.js.map +1 -1
  26. package/build/src/config/configAsync.js +17 -1
  27. package/build/src/config/configAsync.js.map +1 -1
  28. package/build/src/customize/customizeAsync.js +1 -1
  29. package/build/src/customize/customizeAsync.js.map +1 -1
  30. package/build/src/customize/generate.js +29 -2
  31. package/build/src/customize/generate.js.map +1 -1
  32. package/build/src/customize/templates.js +8 -0
  33. package/build/src/customize/templates.js.map +1 -1
  34. package/build/src/customize/typescript.js +54 -0
  35. package/build/src/customize/typescript.js.map +1 -0
  36. package/build/src/export/createBundles.js +1 -1
  37. package/build/src/export/createBundles.js.map +1 -1
  38. package/build/src/export/createMetadataJson.js.map +1 -1
  39. package/build/src/export/embed/exportEmbedAsync.js +50 -4
  40. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  41. package/build/src/export/embed/index.js +1 -3
  42. package/build/src/export/embed/index.js.map +1 -1
  43. package/build/src/export/embed/resolveOptions.js +6 -10
  44. package/build/src/export/embed/resolveOptions.js.map +1 -1
  45. package/build/src/export/exportApp.js +50 -41
  46. package/build/src/export/exportApp.js.map +1 -1
  47. package/build/src/export/exportAssets.js +2 -2
  48. package/build/src/export/exportAssets.js.map +1 -1
  49. package/build/src/export/exportAsync.js +1 -1
  50. package/build/src/export/exportAsync.js.map +1 -1
  51. package/build/src/export/exportStaticAsync.js +42 -12
  52. package/build/src/export/exportStaticAsync.js.map +1 -1
  53. package/build/src/export/fork-bundleAsync.js +27 -2
  54. package/build/src/export/fork-bundleAsync.js.map +1 -1
  55. package/build/src/export/getPublicExpoManifest.js +1 -1
  56. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  57. package/build/src/export/getResolvedLocales.js.map +1 -1
  58. package/build/src/export/printBundleSizes.js.map +1 -1
  59. package/build/src/export/web/exportWebAsync.js.map +1 -1
  60. package/build/src/export/writeContents.js +5 -1
  61. package/build/src/export/writeContents.js.map +1 -1
  62. package/build/src/install/checkPackages.js +1 -1
  63. package/build/src/install/checkPackages.js.map +1 -1
  64. package/build/src/install/installAsync.js +1 -1
  65. package/build/src/install/installAsync.js.map +1 -1
  66. package/build/src/prebuild/configureProjectAsync.js +5 -9
  67. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  68. package/build/src/prebuild/prebuildAsync.js +5 -5
  69. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  70. package/build/src/prebuild/updateFromTemplate.js +8 -5
  71. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  72. package/build/src/register/registerAsync.js +0 -1
  73. package/build/src/register/registerAsync.js.map +1 -1
  74. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  75. package/build/src/run/android/resolveOptions.js +1 -1
  76. package/build/src/run/android/resolveOptions.js.map +1 -1
  77. package/build/src/run/android/runAndroidAsync.js +2 -2
  78. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  79. package/build/src/run/ios/XcodeBuild.js +2 -2
  80. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  81. package/build/src/run/ios/appleDevice/AppleDevice.js +4 -4
  82. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  83. package/build/src/run/ios/appleDevice/ClientManager.js +1 -1
  84. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  85. package/build/src/run/ios/appleDevice/client/AFCClient.js +1 -1
  86. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  87. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
  88. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  89. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +1 -1
  90. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  91. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
  92. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  93. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +1 -1
  94. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  95. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
  96. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +1 -1
  97. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  98. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +1 -1
  99. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  100. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +1 -1
  101. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  102. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  103. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +1 -1
  104. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  105. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +1 -1
  106. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  107. package/build/src/run/ios/codeSigning/configureCodeSigning.js +1 -1
  108. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  109. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +2 -2
  110. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  111. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +3 -0
  112. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  113. package/build/src/run/ios/index.js.map +1 -1
  114. package/build/src/run/ios/launchApp.js +2 -2
  115. package/build/src/run/ios/launchApp.js.map +1 -1
  116. package/build/src/run/ios/options/resolveDevice.js +1 -1
  117. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  118. package/build/src/run/ios/options/resolveOptions.js +2 -2
  119. package/build/src/run/ios/options/resolveOptions.js.map +1 -1
  120. package/build/src/run/ios/runIosAsync.js +3 -3
  121. package/build/src/run/ios/runIosAsync.js.map +1 -1
  122. package/build/src/start/doctor/apple/XcodePrerequisite.js +43 -2
  123. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  124. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +1 -1
  125. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  126. package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -3
  127. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  128. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +1 -1
  129. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  130. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  131. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +7 -7
  132. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  133. package/build/src/start/doctor/typescript/updateTSConfig.js +11 -10
  134. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  135. package/build/src/start/index.js +0 -2
  136. package/build/src/start/index.js.map +1 -1
  137. package/build/src/start/interface/interactiveActions.js +1 -1
  138. package/build/src/start/interface/interactiveActions.js.map +1 -1
  139. package/build/src/start/interface/startInterface.js +3 -3
  140. package/build/src/start/interface/startInterface.js.map +1 -1
  141. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  142. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  143. package/build/src/start/platforms/android/ADBServer.js +1 -1
  144. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  145. package/build/src/start/platforms/android/AndroidDeviceManager.js +5 -5
  146. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  147. package/build/src/start/platforms/android/AndroidPlatformManager.js +1 -1
  148. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  149. package/build/src/start/platforms/android/adb.js +1 -1
  150. package/build/src/start/platforms/android/adb.js.map +1 -1
  151. package/build/src/start/platforms/android/adbReverse.js +2 -2
  152. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  153. package/build/src/start/platforms/android/emulator.js +1 -1
  154. package/build/src/start/platforms/android/emulator.js.map +1 -1
  155. package/build/src/start/platforms/android/getDevices.js +1 -1
  156. package/build/src/start/platforms/android/getDevices.js.map +1 -1
  157. package/build/src/start/platforms/android/promptAndroidDevice.js +1 -1
  158. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  159. package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -5
  160. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  161. package/build/src/start/platforms/ios/ApplePlatformManager.js +1 -1
  162. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  163. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  164. package/build/src/start/platforms/ios/getBestSimulator.js +1 -1
  165. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  166. package/build/src/start/platforms/ios/promptAppleDevice.js +1 -1
  167. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  168. package/build/src/start/platforms/ios/simctl.js +1 -1
  169. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  170. package/build/src/start/platforms/ios/simctlLogging.js +1 -1
  171. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  172. package/build/src/start/resolveOptions.js +0 -5
  173. package/build/src/start/resolveOptions.js.map +1 -1
  174. package/build/src/start/server/AsyncNgrok.js +4 -3
  175. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  176. package/build/src/start/server/BundlerDevServer.js +4 -11
  177. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  178. package/build/src/start/server/DevServerManager.js +3 -2
  179. package/build/src/start/server/DevServerManager.js.map +1 -1
  180. package/build/src/start/server/UrlCreator.js +2 -1
  181. package/build/src/start/server/UrlCreator.js.map +1 -1
  182. package/build/src/start/server/getStaticRenderFunctions.js +2 -2
  183. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  184. package/build/src/start/server/metro/MetroBundlerDevServer.js +42 -25
  185. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  186. package/build/src/start/server/metro/MetroTerminalReporter.js +14 -3
  187. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  188. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  189. package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
  190. package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
  191. package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +1 -1
  192. package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +1 -1
  193. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
  194. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +1 -1
  195. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
  196. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +1 -1
  197. package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +1 -1
  198. package/build/src/start/server/metro/inspector-proxy/index.js +1 -1
  199. package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
  200. package/build/src/start/server/metro/instantiateMetro.js +49 -8
  201. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  202. package/build/src/start/server/metro/resolveFromProject.js +0 -4
  203. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  204. package/build/src/start/server/metro/runServer-fork.js +1 -1
  205. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  206. package/build/src/start/server/metro/withMetroMultiPlatform.js +29 -5
  207. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  208. package/build/src/start/server/metro/withMetroResolvers.js +1 -1
  209. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  210. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +2 -2
  211. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  212. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  213. package/build/src/start/server/middleware/FaviconMiddleware.js +1 -1
  214. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
  215. package/build/src/start/server/middleware/ManifestMiddleware.js +8 -5
  216. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  217. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +1 -1
  218. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  219. package/build/src/start/server/middleware/ServeStaticMiddleware.js +1 -1
  220. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  221. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  222. package/build/src/start/server/middleware/server.types.js.map +1 -1
  223. package/build/src/start/server/openPlatforms.js.map +1 -1
  224. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
  225. package/build/src/start/server/type-generation/routes.js +6 -6
  226. package/build/src/start/server/type-generation/routes.js.map +1 -1
  227. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +3 -3
  228. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  229. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +10 -5
  230. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  231. package/build/src/start/server/webpack/compile.js +1 -1
  232. package/build/src/start/server/webpack/compile.js.map +1 -1
  233. package/build/src/start/startAsync.js +10 -32
  234. package/build/src/start/startAsync.js.map +1 -1
  235. package/build/src/utils/FileNotifier.js +1 -1
  236. package/build/src/utils/FileNotifier.js.map +1 -1
  237. package/build/src/utils/analytics/metroDebuggerMiddleware.js +1 -1
  238. package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
  239. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  240. package/build/src/utils/array.js.map +1 -1
  241. package/build/src/utils/cocoapods.js +2 -2
  242. package/build/src/utils/cocoapods.js.map +1 -1
  243. package/build/src/utils/codesigning.js +2 -2
  244. package/build/src/utils/codesigning.js.map +1 -1
  245. package/build/src/utils/downloadAppAsync.js +1 -1
  246. package/build/src/utils/downloadAppAsync.js.map +1 -1
  247. package/build/src/utils/downloadExpoGoAsync.js +2 -2
  248. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  249. package/build/src/utils/editor.js +1 -1
  250. package/build/src/utils/editor.js.map +1 -1
  251. package/build/src/utils/env.js +1 -1
  252. package/build/src/utils/env.js.map +1 -1
  253. package/build/src/utils/errors.js.map +1 -1
  254. package/build/src/utils/getOrPromptApplicationId.js +2 -2
  255. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  256. package/build/src/utils/git.js +1 -1
  257. package/build/src/utils/git.js.map +1 -1
  258. package/build/src/utils/modifyConfigAsync.js +1 -1
  259. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  260. package/build/src/utils/modifyConfigPlugins.js +1 -1
  261. package/build/src/utils/modifyConfigPlugins.js.map +1 -1
  262. package/build/src/utils/npm.js +1 -1
  263. package/build/src/utils/npm.js.map +1 -1
  264. package/build/src/utils/obj.js.map +1 -1
  265. package/build/src/utils/plist.js +1 -1
  266. package/build/src/utils/plist.js.map +1 -1
  267. package/build/src/utils/port.js +1 -1
  268. package/build/src/utils/port.js.map +1 -1
  269. package/build/src/utils/profile.js +1 -1
  270. package/build/src/utils/profile.js.map +1 -1
  271. package/build/src/utils/scheme.js +1 -1
  272. package/build/src/utils/scheme.js.map +1 -1
  273. package/build/src/utils/tsconfig/loadTsConfigPaths.js +1 -1
  274. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
  275. package/build/src/utils/validateApplicationId.js +85 -5
  276. package/build/src/utils/validateApplicationId.js.map +1 -1
  277. package/package.json +11 -8
  278. package/build/src/api/signManifest.js +0 -26
  279. package/build/src/api/signManifest.js.map +0 -1
  280. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +0 -155
  281. package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +0 -1
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.validateBundleId = validateBundleId;
6
6
  exports.validatePackage = validatePackage;
7
+ exports.validatePackageWithWarning = validatePackageWithWarning;
7
8
  exports.assertValidBundleId = assertValidBundleId;
8
9
  exports.assertValidPackage = assertValidPackage;
9
10
  exports.getBundleIdWarningInternalAsync = getBundleIdWarningInternalAsync;
@@ -11,12 +12,12 @@ exports.getPackageNameWarningInternalAsync = getPackageNameWarningInternalAsync;
11
12
  exports.getPackageNameWarningAsync = exports.getBundleIdWarningAsync = void 0;
12
13
  var _assert = _interopRequireDefault(require("assert"));
13
14
  var _chalk = _interopRequireDefault(require("chalk"));
14
- var _client = require("../api/rest/client");
15
- var _log = require("../log");
16
15
  var _env = require("./env");
17
16
  var _fn = require("./fn");
18
17
  var _link = require("./link");
19
18
  var _url = require("./url");
19
+ var _client = require("../api/rest/client");
20
+ var _log = require("../log");
20
21
  function _interopRequireDefault(obj) {
21
22
  return obj && obj.__esModule ? obj : {
22
23
  default: obj
@@ -24,18 +25,97 @@ function _interopRequireDefault(obj) {
24
25
  }
25
26
  const debug = require("debug")("expo:utils:validateApplicationId");
26
27
  const IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;
27
- const ANDROID_PACKAGE_REGEX = /^[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$/;
28
+ const ANDROID_PACKAGE_REGEX = /^(?!.*\bnative\b)[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$/;
28
29
  function validateBundleId(value) {
29
30
  return IOS_BUNDLE_ID_REGEX.test(value);
30
31
  }
31
32
  function validatePackage(value) {
32
- return ANDROID_PACKAGE_REGEX.test(value);
33
+ return validatePackageWithWarning(value) === true;
34
+ }
35
+ function validatePackageWithWarning(value) {
36
+ const parts = value.split(".");
37
+ for (const segment of parts){
38
+ if (RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS.includes(segment)) {
39
+ return `"${segment}" is a reserved Java keyword.`;
40
+ }
41
+ }
42
+ if (parts.length < 2) {
43
+ return `Package name must contain more than one segment, separated by ".", e.g. com.${value}`;
44
+ }
45
+ if (!ANDROID_PACKAGE_REGEX.test(value)) {
46
+ return 'Invalid characters in Android package name. Only alphanumeric characters, "." and "_" are allowed, and each "." must be followed by a letter or number.';
47
+ }
48
+ return true;
33
49
  }
50
+ // https://en.wikipedia.org/wiki/List_of_Java_keywords
51
+ // Running the following in the console and pruning the "Reserved Identifiers" section:
52
+ // [...document.querySelectorAll('dl > dt > code')].map(node => node.innerText)
53
+ const RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS = [
54
+ // List of Java keywords
55
+ "_",
56
+ "abstract",
57
+ "assert",
58
+ "boolean",
59
+ "break",
60
+ "byte",
61
+ "case",
62
+ "catch",
63
+ "char",
64
+ "class",
65
+ "const",
66
+ "continue",
67
+ "default",
68
+ "do",
69
+ "double",
70
+ "else",
71
+ "enum",
72
+ "extends",
73
+ "final",
74
+ "finally",
75
+ "float",
76
+ "for",
77
+ "goto",
78
+ "if",
79
+ "implements",
80
+ "import",
81
+ "instanceof",
82
+ "int",
83
+ "interface",
84
+ "long",
85
+ "native",
86
+ "new",
87
+ "package",
88
+ "private",
89
+ "protected",
90
+ "public",
91
+ "return",
92
+ "short",
93
+ "static",
94
+ "super",
95
+ "switch",
96
+ "synchronized",
97
+ "this",
98
+ "throw",
99
+ "throws",
100
+ "transient",
101
+ "try",
102
+ "void",
103
+ "volatile",
104
+ "while",
105
+ // Reserved words for literal values
106
+ "true",
107
+ "false",
108
+ "null",
109
+ // Unused
110
+ "const",
111
+ "goto",
112
+ "strictfp",
113
+ ];
34
114
  function assertValidBundleId(value) {
35
115
  _assert.default.match(value, IOS_BUNDLE_ID_REGEX, `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`);
36
116
  }
37
117
  function assertValidPackage(value) {
38
- _assert.default.match(value, ANDROID_PACKAGE_REGEX, `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.`);
118
+ _assert.default.match(value, ANDROID_PACKAGE_REGEX, `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter. The Java keyword 'native' is not allowed.`);
39
119
  }
40
120
  async function getBundleIdWarningInternalAsync(bundleId) {
41
121
  if (_env.env.EXPO_OFFLINE) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/validateApplicationId.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { fetchAsync } from '../api/rest/client';\nimport { Log } from '../log';\nimport { env } from './env';\nimport { memoize } from './fn';\nimport { learnMore } from './link';\nimport { isUrlAvailableAsync } from './url';\n\nconst debug = require('debug')('expo:utils:validateApplicationId') as typeof console.log;\n\nconst IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;\nconst ANDROID_PACKAGE_REGEX = /^[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)+$/;\n\n/** Validate an iOS bundle identifier. */\nexport function validateBundleId(value: string): boolean {\n return IOS_BUNDLE_ID_REGEX.test(value);\n}\n\n/** Validate an Android package name. */\nexport function validatePackage(value: string): boolean {\n return ANDROID_PACKAGE_REGEX.test(value);\n}\n\nexport function assertValidBundleId(value: string) {\n assert.match(\n value,\n IOS_BUNDLE_ID_REGEX,\n `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\nexport function assertValidPackage(value: string) {\n assert.match(\n value,\n ANDROID_PACKAGE_REGEX,\n `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\n/** @private */\nexport async function getBundleIdWarningInternalAsync(bundleId: string): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Apple bundle identifier reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('itunes.apple.com'))) {\n debug(\n `Couldn't connect to iTunes Store to check bundle ID ${bundleId}. itunes.apple.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `http://itunes.apple.com/lookup?bundleId=${bundleId}`;\n try {\n debug(`Checking iOS bundle ID '${bundleId}' at: ${url}`);\n const response = await fetchAsync(url);\n const json = await response.json();\n if (json.resultCount > 0) {\n const firstApp = json.results[0];\n return formatInUseWarning(firstApp.trackName, firstApp.sellerName, bundleId);\n }\n } catch (error: any) {\n debug(`Error checking bundle ID ${bundleId}: ${error.message}`);\n // Error fetching itunes data.\n }\n return null;\n}\n\n/** Returns a warning message if an iOS bundle identifier is potentially already in use. */\nexport const getBundleIdWarningAsync = memoize(getBundleIdWarningInternalAsync);\n\n/** @private */\nexport async function getPackageNameWarningInternalAsync(\n packageName: string\n): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Android package name reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('play.google.com'))) {\n debug(\n `Couldn't connect to Play Store to check package name ${packageName}. play.google.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `https://play.google.com/store/apps/details?id=${packageName}`;\n try {\n debug(`Checking Android package name '${packageName}' at: ${url}`);\n const response = await fetchAsync(url);\n // If the page exists, then warn the user.\n if (response.status === 200) {\n // There is no JSON API for the Play Store so we can't concisely\n // locate the app name and developer to match the iOS warning.\n return `⚠️ The package ${chalk.bold(packageName)} is already in use. ${chalk.dim(\n learnMore(url)\n )}`;\n }\n } catch (error: any) {\n // Error fetching play store data or the page doesn't exist.\n debug(`Error checking package name ${packageName}: ${error.message}`);\n }\n return null;\n}\n\nfunction formatInUseWarning(appName: string, author: string, id: string): string {\n return `⚠️ The app ${chalk.bold(appName)} by ${chalk.italic(\n author\n )} is already using ${chalk.bold(id)}`;\n}\n\n/** Returns a warning message if an Android package name is potentially already in use. */\nexport const getPackageNameWarningAsync = memoize(getPackageNameWarningInternalAsync);\n"],"names":["validateBundleId","validatePackage","assertValidBundleId","assertValidPackage","getBundleIdWarningInternalAsync","getPackageNameWarningInternalAsync","debug","require","IOS_BUNDLE_ID_REGEX","ANDROID_PACKAGE_REGEX","value","test","assert","match","bundleId","env","EXPO_OFFLINE","Log","warn","isUrlAvailableAsync","url","response","fetchAsync","json","resultCount","firstApp","results","formatInUseWarning","trackName","sellerName","error","message","getBundleIdWarningAsync","memoize","packageName","status","chalk","bold","dim","learnMore","appName","author","id","italic","getPackageNameWarningAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/validateApplicationId.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { env } from './env';\nimport { memoize } from './fn';\nimport { learnMore } from './link';\nimport { isUrlAvailableAsync } from './url';\nimport { fetchAsync } from '../api/rest/client';\nimport { Log } from '../log';\n\nconst debug = require('debug')('expo:utils:validateApplicationId') as typeof console.log;\n\nconst IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;\nconst ANDROID_PACKAGE_REGEX = /^(?!.*\\bnative\\b)[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)+$/;\n\n/** Validate an iOS bundle identifier. */\nexport function validateBundleId(value: string): boolean {\n return IOS_BUNDLE_ID_REGEX.test(value);\n}\n\n/** Validate an Android package name. */\nexport function validatePackage(value: string): boolean {\n return validatePackageWithWarning(value) === true;\n}\n\n/** Validate an Android package name and return the reason if invalid. */\nexport function validatePackageWithWarning(value: string): true | string {\n const parts = value.split('.');\n for (const segment of parts) {\n if (RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS.includes(segment)) {\n return `\"${segment}\" is a reserved Java keyword.`;\n }\n }\n if (parts.length < 2) {\n return `Package name must contain more than one segment, separated by \".\", e.g. com.${value}`;\n }\n if (!ANDROID_PACKAGE_REGEX.test(value)) {\n return 'Invalid characters in Android package name. Only alphanumeric characters, \".\" and \"_\" are allowed, and each \".\" must be followed by a letter or number.';\n }\n\n return true;\n}\n\n// https://en.wikipedia.org/wiki/List_of_Java_keywords\n// Running the following in the console and pruning the \"Reserved Identifiers\" section:\n// [...document.querySelectorAll('dl > dt > code')].map(node => node.innerText)\nconst RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS = [\n // List of Java keywords\n '_',\n 'abstract',\n 'assert',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'default',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'extends',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'instanceof',\n 'int',\n 'interface',\n 'long',\n 'native',\n 'new',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'try',\n 'void',\n 'volatile',\n 'while',\n // Reserved words for literal values\n 'true',\n 'false',\n 'null',\n // Unused\n 'const',\n 'goto',\n 'strictfp',\n];\n\nexport function assertValidBundleId(value: string) {\n assert.match(\n value,\n IOS_BUNDLE_ID_REGEX,\n `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\nexport function assertValidPackage(value: string) {\n assert.match(\n value,\n ANDROID_PACKAGE_REGEX,\n `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter. The Java keyword 'native' is not allowed.`\n );\n}\n\n/** @private */\nexport async function getBundleIdWarningInternalAsync(bundleId: string): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Apple bundle identifier reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('itunes.apple.com'))) {\n debug(\n `Couldn't connect to iTunes Store to check bundle ID ${bundleId}. itunes.apple.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `http://itunes.apple.com/lookup?bundleId=${bundleId}`;\n try {\n debug(`Checking iOS bundle ID '${bundleId}' at: ${url}`);\n const response = await fetchAsync(url);\n const json = await response.json();\n if (json.resultCount > 0) {\n const firstApp = json.results[0];\n return formatInUseWarning(firstApp.trackName, firstApp.sellerName, bundleId);\n }\n } catch (error: any) {\n debug(`Error checking bundle ID ${bundleId}: ${error.message}`);\n // Error fetching itunes data.\n }\n return null;\n}\n\n/** Returns a warning message if an iOS bundle identifier is potentially already in use. */\nexport const getBundleIdWarningAsync = memoize(getBundleIdWarningInternalAsync);\n\n/** @private */\nexport async function getPackageNameWarningInternalAsync(\n packageName: string\n): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Android package name reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('play.google.com'))) {\n debug(\n `Couldn't connect to Play Store to check package name ${packageName}. play.google.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `https://play.google.com/store/apps/details?id=${packageName}`;\n try {\n debug(`Checking Android package name '${packageName}' at: ${url}`);\n const response = await fetchAsync(url);\n // If the page exists, then warn the user.\n if (response.status === 200) {\n // There is no JSON API for the Play Store so we can't concisely\n // locate the app name and developer to match the iOS warning.\n return `⚠️ The package ${chalk.bold(packageName)} is already in use. ${chalk.dim(\n learnMore(url)\n )}`;\n }\n } catch (error: any) {\n // Error fetching play store data or the page doesn't exist.\n debug(`Error checking package name ${packageName}: ${error.message}`);\n }\n return null;\n}\n\nfunction formatInUseWarning(appName: string, author: string, id: string): string {\n return `⚠️ The app ${chalk.bold(appName)} by ${chalk.italic(\n author\n )} is already using ${chalk.bold(id)}`;\n}\n\n/** Returns a warning message if an Android package name is potentially already in use. */\nexport const getPackageNameWarningAsync = memoize(getPackageNameWarningInternalAsync);\n"],"names":["validateBundleId","validatePackage","validatePackageWithWarning","assertValidBundleId","assertValidPackage","getBundleIdWarningInternalAsync","getPackageNameWarningInternalAsync","debug","require","IOS_BUNDLE_ID_REGEX","ANDROID_PACKAGE_REGEX","value","test","parts","split","segment","RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS","includes","length","assert","match","bundleId","env","EXPO_OFFLINE","Log","warn","isUrlAvailableAsync","url","response","fetchAsync","json","resultCount","firstApp","results","formatInUseWarning","trackName","sellerName","error","message","getBundleIdWarningAsync","memoize","packageName","status","chalk","bold","dim","learnMore","appName","author","id","italic","getPackageNameWarningAsync"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.11.1",
3
+ "version": "0.12.0",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -39,17 +39,17 @@
39
39
  "dependencies": {
40
40
  "@babel/runtime": "^7.20.0",
41
41
  "@expo/code-signing-certificates": "0.0.5",
42
- "@expo/config": "~8.2.0",
43
- "@expo/config-plugins": "~7.3.0",
44
- "@expo/dev-server": "0.6.0",
42
+ "@expo/config": "~8.3.0",
43
+ "@expo/config-plugins": "~7.4.0",
44
+ "@expo/dev-server": "0.7.0",
45
45
  "@expo/devcert": "^1.0.0",
46
46
  "@expo/env": "~0.1.0",
47
47
  "@expo/json-file": "^8.2.37",
48
- "@expo/metro-config": "~0.11.0",
48
+ "@expo/metro-config": "~0.12.0",
49
49
  "@expo/osascript": "^2.0.31",
50
50
  "@expo/package-manager": "~1.0.0",
51
51
  "@expo/plist": "^0.0.20",
52
- "@expo/prebuild-config": "6.3.0",
52
+ "@expo/prebuild-config": "6.4.0",
53
53
  "@expo/rudder-sdk-node": "1.1.1",
54
54
  "@expo/spawn-async": "1.5.0",
55
55
  "@expo/xcpretty": "^4.2.1",
@@ -68,6 +68,7 @@
68
68
  "freeport-async": "2.0.0",
69
69
  "fs-extra": "~8.1.0",
70
70
  "getenv": "^1.0.0",
71
+ "glob": "^7.1.7",
71
72
  "graphql": "15.8.0",
72
73
  "graphql-tag": "^2.10.1",
73
74
  "https-proxy-agent": "^5.0.1",
@@ -75,8 +76,8 @@
75
76
  "is-root": "^2.1.0",
76
77
  "js-yaml": "^3.13.1",
77
78
  "json-schema-deref-sync": "^0.13.0",
78
- "md5-file": "^3.2.3",
79
79
  "md5hex": "^1.0.0",
80
+ "minimatch": "^3.0.4",
80
81
  "minipass": "3.1.6",
81
82
  "node-fetch": "^2.6.7",
82
83
  "node-forge": "^1.3.1",
@@ -142,7 +143,9 @@
142
143
  "expo-module-scripts": "^3.0.0",
143
144
  "find-process": "^1.4.7",
144
145
  "klaw-sync": "^6.0.0",
146
+ "memfs": "^3.2.0",
145
147
  "nock": "~13.2.2",
148
+ "node-html-parser": "^6.1.5",
146
149
  "nullthrows": "^1.1.1",
147
150
  "structured-headers": "^0.4.1",
148
151
  "taskr": "1.1.0",
@@ -150,5 +153,5 @@
150
153
  "jest-runner-tsd": "^6.0.0",
151
154
  "tsd": "^0.28.1"
152
155
  },
153
- "gitHead": "2240630a92eb79a4e4bf73e1439916c394876478"
156
+ "gitHead": "79607a7325f47aa17c36d266100d09a4ff2cc544"
154
157
  }
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- exports.signClassicExpoGoManifestAsync = signClassicExpoGoManifestAsync;
6
- var _client = require("./rest/client");
7
- var _actions = require("./user/actions");
8
- var _user = require("./user/user");
9
- async function signClassicExpoGoManifestAsync(manifest) {
10
- await (0, _actions).ensureLoggedInAsync();
11
- var _owner;
12
- const res = await (0, _client).fetchAsync("manifest/sign", {
13
- method: "POST",
14
- body: JSON.stringify({
15
- args: {
16
- remoteUsername: (_owner = manifest.owner) != null ? _owner : (0, _user).getActorDisplayName(await (0, _user).getUserAsync()),
17
- remotePackageName: manifest.slug
18
- },
19
- manifest: manifest
20
- })
21
- });
22
- const { data } = await res.json();
23
- return data.response;
24
- }
25
-
26
- //# sourceMappingURL=signManifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/api/signManifest.ts"],"sourcesContent":["import { ExpoAppManifest } from '@expo/config';\nimport { JSONObject } from '@expo/json-file';\n\nimport { fetchAsync } from './rest/client';\nimport { ensureLoggedInAsync } from './user/actions';\nimport { getActorDisplayName, getUserAsync } from './user/user';\n\n/** Sign a classic manifest to access secure features in sandboxed environments like Expo Go. */\nexport async function signClassicExpoGoManifestAsync(\n manifest: Partial<ExpoAppManifest>\n): Promise<string> {\n await ensureLoggedInAsync();\n const res = await fetchAsync('manifest/sign', {\n method: 'POST',\n body: JSON.stringify({\n args: {\n remoteUsername: manifest.owner ?? getActorDisplayName(await getUserAsync()),\n remotePackageName: manifest.slug,\n },\n manifest: manifest as JSONObject,\n }),\n });\n const { data } = await res.json();\n return data.response;\n}\n"],"names":["signClassicExpoGoManifestAsync","manifest","ensureLoggedInAsync","res","fetchAsync","method","body","JSON","stringify","args","remoteUsername","owner","getActorDisplayName","getUserAsync","remotePackageName","slug","data","json","response"],"mappings":"AAAA;;;;QAQsBA,8BAA8B,GAA9BA,8BAA8B;AALzB,IAAA,OAAe,WAAf,eAAe,CAAA;AACN,IAAA,QAAgB,WAAhB,gBAAgB,CAAA;AACF,IAAA,KAAa,WAAb,aAAa,CAAA;AAGxD,eAAeA,8BAA8B,CAClDC,QAAkC,EACjB;IACjB,MAAMC,CAAAA,GAAAA,QAAmB,AAAE,CAAA,oBAAF,EAAE,CAAC;QAKND,MAAc;IAJpC,MAAME,GAAG,GAAG,MAAMC,CAAAA,GAAAA,OAAU,AAS1B,CAAA,WAT0B,CAAC,eAAe,EAAE;QAC5CC,MAAM,EAAE,MAAM;QACdC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;YACnBC,IAAI,EAAE;gBACJC,cAAc,EAAET,CAAAA,MAAc,GAAdA,QAAQ,CAACU,KAAK,YAAdV,MAAc,GAAIW,CAAAA,GAAAA,KAAmB,AAAsB,CAAA,oBAAtB,CAAC,MAAMC,CAAAA,GAAAA,KAAY,AAAE,CAAA,aAAF,EAAE,CAAC;gBAC3EC,iBAAiB,EAAEb,QAAQ,CAACc,IAAI;aACjC;YACDd,QAAQ,EAAEA,QAAQ;SACnB,CAAC;KACH,CAAC,AAAC;IACH,MAAM,EAAEe,IAAI,CAAA,EAAE,GAAG,MAAMb,GAAG,CAACc,IAAI,EAAE,AAAC;IAClC,OAAOD,IAAI,CAACE,QAAQ,CAAC;CACtB"}
@@ -1,155 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- var _chalk = _interopRequireDefault(require("chalk"));
6
- var _os = _interopRequireDefault(require("os"));
7
- var _settings = require("../../../api/settings");
8
- var _signManifest = require("../../../api/signManifest");
9
- var _userSettings = _interopRequireDefault(require("../../../api/user/UserSettings"));
10
- var _user = require("../../../api/user/user");
11
- var Log = _interopRequireWildcard(require("../../../log"));
12
- var _rudderstackClient = require("../../../utils/analytics/rudderstackClient");
13
- var _env = require("../../../utils/env");
14
- var _fn = require("../../../utils/fn");
15
- var _link = require("../../../utils/link");
16
- var _url = require("../../../utils/url");
17
- var _manifestMiddleware = require("./ManifestMiddleware");
18
- var _resolvePlatform = require("./resolvePlatform");
19
- function _interopRequireDefault(obj) {
20
- return obj && obj.__esModule ? obj : {
21
- default: obj
22
- };
23
- }
24
- function _interopRequireWildcard(obj) {
25
- if (obj && obj.__esModule) {
26
- return obj;
27
- } else {
28
- var newObj = {};
29
- if (obj != null) {
30
- for(var key in obj){
31
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
32
- var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
33
- if (desc.get || desc.set) {
34
- Object.defineProperty(newObj, key, desc);
35
- } else {
36
- newObj[key] = obj[key];
37
- }
38
- }
39
- }
40
- }
41
- newObj.default = obj;
42
- return newObj;
43
- }
44
- }
45
- const debug = require("debug")("expo:start:server:middleware:ClassicManifestMiddleware");
46
- class ClassicManifestMiddleware extends _manifestMiddleware.ManifestMiddleware {
47
- getParsedHeaders(req) {
48
- const platform = (0, _resolvePlatform).parsePlatformHeader(req) || "ios";
49
- (0, _resolvePlatform).assertRuntimePlatform(platform);
50
- return {
51
- platform,
52
- acceptSignature: this.getLegacyAcceptSignatureHeader(req),
53
- hostname: (0, _url).stripPort(req.headers["host"])
54
- };
55
- }
56
- /**
57
- * This header is specified as a string "true" or "false", in one of two headers:
58
- * - exponent-accept-signature
59
- * - expo-accept-signature
60
- */ getLegacyAcceptSignatureHeader(req) {
61
- return req.headers["exponent-accept-signature"] === "true" || req.headers["expo-accept-signature"] === "true";
62
- }
63
- async _getManifestResponseAsync({ acceptSignature , ...requestOptions }) {
64
- const { exp , hostUri , expoGoConfig , bundleUrl } = await this._resolveProjectSettingsAsync(requestOptions);
65
- const manifest = {
66
- ...exp,
67
- ...expoGoConfig,
68
- hostUri,
69
- bundleUrl
70
- };
71
- // Gather packager and host info
72
- const hostInfo = await createHostInfoAsync();
73
- const headers = new Map();
74
- headers.set("Exponent-Server", JSON.stringify(hostInfo));
75
- // Create the final string
76
- const body = await this._fetchComputedManifestStringAsync({
77
- manifest,
78
- hostId: hostInfo.host,
79
- acceptSignature
80
- });
81
- return {
82
- body,
83
- version: manifest.sdkVersion,
84
- headers
85
- };
86
- }
87
- trackManifest(version) {
88
- // Log analytics
89
- (0, _rudderstackClient).logEventAsync("Serve Manifest", {
90
- sdkVersion: version != null ? version : null
91
- });
92
- }
93
- /** Exposed for testing. */ async _getManifestStringAsync({ manifest , hostId , acceptSignature }) {
94
- const currentSession = await (0, _user).getUserAsync();
95
- if (!currentSession || _env.env.EXPO_OFFLINE) {
96
- manifest.id = `@${_user.ANONYMOUS_USERNAME}/${manifest.slug}-${hostId}`;
97
- }
98
- if (!acceptSignature) {
99
- return JSON.stringify(manifest);
100
- } else if (!currentSession || _env.env.EXPO_OFFLINE) {
101
- return getUnsignedManifestString(manifest);
102
- } else {
103
- return this.getSignedManifestStringAsync(manifest);
104
- }
105
- }
106
- getSignedManifestStringAsync = (0, _fn).memoize(_signManifest.signClassicExpoGoManifestAsync);
107
- /** Exposed for testing. */ async _fetchComputedManifestStringAsync(props) {
108
- try {
109
- return await this._getManifestStringAsync(props);
110
- } catch (error) {
111
- debug(`Error getting manifest:`, error);
112
- if (error.code === "UNAUTHORIZED" && props.manifest.owner) {
113
- // Don't have permissions for signing, warn and enable offline mode.
114
- this.addSigningDisabledWarning(`This project belongs to ${_chalk.default.bold(`@${props.manifest.owner}`)} and you have not been granted the appropriate permissions.\n` + `Please request access from an admin of @${props.manifest.owner} or change the "owner" field to an account you belong to.\n` + (0, _link).learnMore("https://docs.expo.dev/versions/latest/config/app/#owner"));
115
- (0, _settings).disableNetwork();
116
- return await this._getManifestStringAsync(props);
117
- } else if (error.code === "ENOTFOUND" || error.code === "OFFLINE") {
118
- // Got a DNS error, i.e. can't access exp.host, warn and enable offline mode.
119
- this.addSigningDisabledWarning(`Could not reach Expo servers, please check if you can access ${error.hostname || "exp.host"}.`);
120
- (0, _settings).disableNetwork();
121
- return await this._getManifestStringAsync(props);
122
- } else {
123
- throw error;
124
- }
125
- }
126
- }
127
- addSigningDisabledWarning = (0, _fn).memoize((reason)=>{
128
- Log.warn(`${reason}\nFalling back to offline mode.`);
129
- // For the memo
130
- return reason;
131
- });
132
- }
133
- exports.ClassicManifestMiddleware = ClassicManifestMiddleware;
134
- // Passed to Expo Go and registered as telemetry.
135
- // TODO: it's unclear why we don't just send it from the CLI.
136
- async function createHostInfoAsync() {
137
- return {
138
- host: await _userSettings.default.getAnonymousIdentifierAsync(),
139
- server: "expo",
140
- // Defined in the build step
141
- serverVersion: "0.11.1",
142
- serverDriver: _manifestMiddleware.DEVELOPER_TOOL,
143
- serverOS: _os.default.platform(),
144
- serverOSVersion: _os.default.release()
145
- };
146
- }
147
- function getUnsignedManifestString(manifest) {
148
- const unsignedManifest = {
149
- manifestString: JSON.stringify(manifest),
150
- signature: "UNSIGNED"
151
- };
152
- return JSON.stringify(unsignedManifest);
153
- }
154
-
155
- //# sourceMappingURL=ClassicManifestMiddleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/start/server/middleware/ClassicManifestMiddleware.ts"],"sourcesContent":["import { ExpoAppManifest, ExpoConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport os from 'os';\n\nimport { disableNetwork } from '../../../api/settings';\nimport { signClassicExpoGoManifestAsync } from '../../../api/signManifest';\nimport UserSettings from '../../../api/user/UserSettings';\nimport { ANONYMOUS_USERNAME, getUserAsync } from '../../../api/user/user';\nimport * as Log from '../../../log';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { memoize } from '../../../utils/fn';\nimport { learnMore } from '../../../utils/link';\nimport { stripPort } from '../../../utils/url';\nimport {\n DEVELOPER_TOOL,\n HostInfo,\n ManifestMiddleware,\n ManifestRequestInfo,\n} from './ManifestMiddleware';\nimport { assertRuntimePlatform, parsePlatformHeader } from './resolvePlatform';\nimport { ServerHeaders, ServerRequest } from './server.types';\n\ntype SignManifestProps = {\n manifest: ExpoAppManifest;\n hostId: string;\n acceptSignature: boolean;\n};\n\ninterface ClassicManifestRequestInfo extends ManifestRequestInfo {\n /** Should return the signed manifest. */\n acceptSignature: boolean;\n}\n\nconst debug = require('debug')(\n 'expo:start:server:middleware:ClassicManifestMiddleware'\n) as typeof console.log;\n\nexport class ClassicManifestMiddleware extends ManifestMiddleware<ClassicManifestRequestInfo> {\n public getParsedHeaders(req: ServerRequest): ClassicManifestRequestInfo {\n const platform = parsePlatformHeader(req) || 'ios';\n assertRuntimePlatform(platform);\n return {\n platform,\n acceptSignature: this.getLegacyAcceptSignatureHeader(req),\n hostname: stripPort(req.headers['host']),\n };\n }\n\n /**\n * This header is specified as a string \"true\" or \"false\", in one of two headers:\n * - exponent-accept-signature\n * - expo-accept-signature\n */\n private getLegacyAcceptSignatureHeader(req: ServerRequest): boolean {\n return (\n req.headers['exponent-accept-signature'] === 'true' ||\n req.headers['expo-accept-signature'] === 'true'\n );\n }\n\n public async _getManifestResponseAsync({\n acceptSignature,\n ...requestOptions\n }: ClassicManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }> {\n const { exp, hostUri, expoGoConfig, bundleUrl } = await this._resolveProjectSettingsAsync(\n requestOptions\n );\n\n const manifest: ExpoAppManifest = {\n ...(exp as ExpoAppManifest),\n ...expoGoConfig,\n hostUri,\n bundleUrl,\n };\n\n // Gather packager and host info\n const hostInfo = await createHostInfoAsync();\n\n const headers = new Map<string, any>();\n headers.set('Exponent-Server', JSON.stringify(hostInfo));\n\n // Create the final string\n const body = await this._fetchComputedManifestStringAsync({\n manifest,\n hostId: hostInfo.host,\n acceptSignature,\n });\n\n return {\n body,\n version: manifest.sdkVersion,\n headers,\n };\n }\n\n protected trackManifest(version?: string) {\n // Log analytics\n logEventAsync('Serve Manifest', {\n sdkVersion: version ?? null,\n });\n }\n\n /** Exposed for testing. */\n async _getManifestStringAsync({\n manifest,\n hostId,\n acceptSignature,\n }: SignManifestProps): Promise<string> {\n const currentSession = await getUserAsync();\n if (!currentSession || env.EXPO_OFFLINE) {\n manifest.id = `@${ANONYMOUS_USERNAME}/${manifest.slug}-${hostId}`;\n }\n if (!acceptSignature) {\n return JSON.stringify(manifest);\n } else if (!currentSession || env.EXPO_OFFLINE) {\n return getUnsignedManifestString(manifest);\n } else {\n return this.getSignedManifestStringAsync(manifest);\n }\n }\n\n private getSignedManifestStringAsync = memoize(signClassicExpoGoManifestAsync);\n\n /** Exposed for testing. */\n async _fetchComputedManifestStringAsync(props: SignManifestProps): Promise<string> {\n try {\n return await this._getManifestStringAsync(props);\n } catch (error: any) {\n debug(`Error getting manifest:`, error);\n if (error.code === 'UNAUTHORIZED' && props.manifest.owner) {\n // Don't have permissions for signing, warn and enable offline mode.\n this.addSigningDisabledWarning(\n `This project belongs to ${chalk.bold(\n `@${props.manifest.owner}`\n )} and you have not been granted the appropriate permissions.\\n` +\n `Please request access from an admin of @${props.manifest.owner} or change the \"owner\" field to an account you belong to.\\n` +\n learnMore('https://docs.expo.dev/versions/latest/config/app/#owner')\n );\n\n disableNetwork();\n return await this._getManifestStringAsync(props);\n } else if (error.code === 'ENOTFOUND' || error.code === 'OFFLINE') {\n // Got a DNS error, i.e. can't access exp.host, warn and enable offline mode.\n this.addSigningDisabledWarning(\n `Could not reach Expo servers, please check if you can access ${\n error.hostname || 'exp.host'\n }.`\n );\n\n disableNetwork();\n return await this._getManifestStringAsync(props);\n } else {\n throw error;\n }\n }\n }\n\n private addSigningDisabledWarning = memoize((reason: string) => {\n Log.warn(`${reason}\\nFalling back to offline mode.`);\n // For the memo\n return reason;\n });\n}\n\n// Passed to Expo Go and registered as telemetry.\n// TODO: it's unclear why we don't just send it from the CLI.\nasync function createHostInfoAsync(): Promise<HostInfo> {\n return {\n host: await UserSettings.getAnonymousIdentifierAsync(),\n server: 'expo',\n // Defined in the build step\n serverVersion: process.env.__EXPO_VERSION!,\n serverDriver: DEVELOPER_TOOL,\n serverOS: os.platform(),\n serverOSVersion: os.release(),\n };\n}\n\nfunction getUnsignedManifestString(manifest: ExpoConfig) {\n const unsignedManifest = {\n manifestString: JSON.stringify(manifest),\n signature: 'UNSIGNED',\n };\n return JSON.stringify(unsignedManifest);\n}\n"],"names":["Log","debug","require","ClassicManifestMiddleware","ManifestMiddleware","getParsedHeaders","req","platform","parsePlatformHeader","assertRuntimePlatform","acceptSignature","getLegacyAcceptSignatureHeader","hostname","stripPort","headers","_getManifestResponseAsync","requestOptions","exp","hostUri","expoGoConfig","bundleUrl","_resolveProjectSettingsAsync","manifest","hostInfo","createHostInfoAsync","Map","set","JSON","stringify","body","_fetchComputedManifestStringAsync","hostId","host","version","sdkVersion","trackManifest","logEventAsync","_getManifestStringAsync","currentSession","getUserAsync","env","EXPO_OFFLINE","id","ANONYMOUS_USERNAME","slug","getUnsignedManifestString","getSignedManifestStringAsync","memoize","signClassicExpoGoManifestAsync","props","error","code","owner","addSigningDisabledWarning","chalk","bold","learnMore","disableNetwork","reason","warn","UserSettings","getAnonymousIdentifierAsync","server","serverVersion","process","__EXPO_VERSION","serverDriver","DEVELOPER_TOOL","serverOS","os","serverOSVersion","release","unsignedManifest","manifestString","signature"],"mappings":"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"}