@expo/cli 0.2.11 → 0.3.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 (33) hide show
  1. package/build/bin/cli +2 -2
  2. package/build/src/start/interface/interactiveActions.js +9 -4
  3. package/build/src/start/interface/interactiveActions.js.map +1 -1
  4. package/build/src/start/platforms/PlatformManager.js +29 -4
  5. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  6. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  7. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  8. package/build/src/start/server/BundlerDevServer.js +17 -16
  9. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  10. package/build/src/start/server/UrlCreator.js +12 -3
  11. package/build/src/start/server/UrlCreator.js.map +1 -1
  12. package/build/src/start/server/metro/MetroBundlerDevServer.js +7 -1
  13. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  14. package/build/src/start/server/metro/instantiateMetro.js +5 -0
  15. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  16. package/build/src/start/server/metro/router.js +35 -0
  17. package/build/src/start/server/metro/router.js.map +1 -0
  18. package/build/src/start/server/metro/withMetroMultiPlatform.js +2 -1
  19. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  20. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  21. package/build/src/start/server/middleware/CreateFileMiddleware.js +103 -0
  22. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -0
  23. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +25 -16
  24. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  25. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +2 -1
  26. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  27. package/build/src/start/server/middleware/resolvePlatform.js +14 -0
  28. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  29. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  30. package/build/src/utils/env.js +2 -2
  31. package/build/src/utils/env.js.map +1 -1
  32. package/package.json +3 -3
  33. package/static/loading-page/index.html +99 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/env.ts"],"sourcesContent":["import { boolish, int, string } from 'getenv';\n\n// @expo/webpack-config -> expo-pwa -> @expo/image-utils: EXPO_IMAGE_UTILS_NO_SHARP\n\n// TODO: EXPO_CLI_USERNAME, EXPO_CLI_PASSWORD\n\nclass Env {\n /** Enable profiling metrics */\n get EXPO_PROFILE() {\n return boolish('EXPO_PROFILE', false);\n }\n\n /** Enable debug logging */\n get EXPO_DEBUG() {\n return boolish('EXPO_DEBUG', false);\n }\n\n /** Enable the beta version of Expo (TODO: Should this just be in the beta version of expo releases?) */\n get EXPO_BETA() {\n return boolish('EXPO_BETA', false);\n }\n\n /** Enable staging API environment */\n get EXPO_STAGING() {\n return boolish('EXPO_STAGING', false);\n }\n\n /** Enable local API environment */\n get EXPO_LOCAL() {\n return boolish('EXPO_LOCAL', false);\n }\n\n /** Is running in non-interactive CI mode */\n get CI() {\n return boolish('CI', false);\n }\n\n /** Disable telemetry (analytics) */\n get EXPO_NO_TELEMETRY() {\n return boolish('EXPO_NO_TELEMETRY', false);\n }\n\n /** local directory to the universe repo for testing locally */\n get EXPO_UNIVERSE_DIR() {\n return string('EXPO_UNIVERSE_DIR', '');\n }\n\n /** @deprecated Default Webpack host string */\n get WEB_HOST() {\n return string('WEB_HOST', '0.0.0.0');\n }\n\n /** Skip warning users about a dirty git status */\n get EXPO_NO_GIT_STATUS() {\n return boolish('EXPO_NO_GIT_STATUS', false);\n }\n /** Disable auto web setup */\n get EXPO_NO_WEB_SETUP() {\n return boolish('EXPO_NO_WEB_SETUP', false);\n }\n /** Disable auto TypeScript setup */\n get EXPO_NO_TYPESCRIPT_SETUP() {\n return boolish('EXPO_NO_TYPESCRIPT_SETUP', false);\n }\n /** Disable all API caches. Does not disable bundler caches. */\n get EXPO_NO_CACHE() {\n return boolish('EXPO_NO_CACHE', false);\n }\n /** Enable the experimental interstitial app select page. */\n get EXPO_ENABLE_INTERSTITIAL_PAGE() {\n return boolish('EXPO_ENABLE_INTERSTITIAL_PAGE', false);\n }\n /** The React Metro port that's baked into react-native scripts and tools. */\n get RCT_METRO_PORT() {\n return int('RCT_METRO_PORT', 0);\n }\n /** Skip validating the manifest during `export`. */\n get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN(): boolean {\n return !!string('EXPO_SKIP_MANIFEST_VALIDATION_TOKEN');\n }\n\n /** Public folder path relative to the project root. Default to `public` */\n get EXPO_PUBLIC_FOLDER(): string {\n return string('EXPO_PUBLIC_FOLDER', 'public');\n }\n\n /** Higher priority `$EDIOTR` variable for indicating which editor to use when pressing `o` in the Terminal UI. */\n get EXPO_EDITOR(): string {\n return string('EXPO_EDITOR', '');\n }\n\n /**\n * Overwrite the dev server URL, disregarding the `--port`, `--host`, `--tunnel`, `--lan`, `--localhost` arguments.\n * This is useful for browser editors that require custom proxy URLs.\n *\n * The URL will not be used verbatim unless `EXPO_NO_DEFAULT_PORT=true` is also set,\n * otherwise a `:80` port will be added for Android support.\n */\n get EXPO_PACKAGER_PROXY_URL(): string {\n return string('EXPO_PACKAGER_PROXY_URL', '');\n }\n\n /**\n * Disable the enforced `:80` port when using custom dev server URLs.\n * This can break the incomplete Android WebSocket implementation but allows\n * `EXPO_PACKAGER_PROXY_URL` to work as expected.\n * */\n get EXPO_NO_DEFAULT_PORT(): boolean {\n return boolish('EXPO_NO_DEFAULT_PORT', false);\n }\n}\n\nexport const env = new Env();\n"],"names":["Env","EXPO_PROFILE","boolish","EXPO_DEBUG","EXPO_BETA","EXPO_STAGING","EXPO_LOCAL","CI","EXPO_NO_TELEMETRY","EXPO_UNIVERSE_DIR","string","WEB_HOST","EXPO_NO_GIT_STATUS","EXPO_NO_WEB_SETUP","EXPO_NO_TYPESCRIPT_SETUP","EXPO_NO_CACHE","EXPO_ENABLE_INTERSTITIAL_PAGE","RCT_METRO_PORT","int","EXPO_SKIP_MANIFEST_VALIDATION_TOKEN","EXPO_PUBLIC_FOLDER","EXPO_EDITOR","EXPO_PACKAGER_PROXY_URL","EXPO_NO_DEFAULT_PORT","env"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/env.ts"],"sourcesContent":["import { boolish, int, string } from 'getenv';\n\n// @expo/webpack-config -> expo-pwa -> @expo/image-utils: EXPO_IMAGE_UTILS_NO_SHARP\n\n// TODO: EXPO_CLI_USERNAME, EXPO_CLI_PASSWORD\n\nclass Env {\n /** Enable profiling metrics */\n get EXPO_PROFILE() {\n return boolish('EXPO_PROFILE', false);\n }\n\n /** Enable debug logging */\n get EXPO_DEBUG() {\n return boolish('EXPO_DEBUG', false);\n }\n\n /** Enable the beta version of Expo (TODO: Should this just be in the beta version of expo releases?) */\n get EXPO_BETA() {\n return boolish('EXPO_BETA', false);\n }\n\n /** Enable staging API environment */\n get EXPO_STAGING() {\n return boolish('EXPO_STAGING', false);\n }\n\n /** Enable local API environment */\n get EXPO_LOCAL() {\n return boolish('EXPO_LOCAL', false);\n }\n\n /** Is running in non-interactive CI mode */\n get CI() {\n return boolish('CI', false);\n }\n\n /** Disable telemetry (analytics) */\n get EXPO_NO_TELEMETRY() {\n return boolish('EXPO_NO_TELEMETRY', false);\n }\n\n /** local directory to the universe repo for testing locally */\n get EXPO_UNIVERSE_DIR() {\n return string('EXPO_UNIVERSE_DIR', '');\n }\n\n /** @deprecated Default Webpack host string */\n get WEB_HOST() {\n return string('WEB_HOST', '0.0.0.0');\n }\n\n /** Skip warning users about a dirty git status */\n get EXPO_NO_GIT_STATUS() {\n return boolish('EXPO_NO_GIT_STATUS', false);\n }\n /** Disable auto web setup */\n get EXPO_NO_WEB_SETUP() {\n return boolish('EXPO_NO_WEB_SETUP', false);\n }\n /** Disable auto TypeScript setup */\n get EXPO_NO_TYPESCRIPT_SETUP() {\n return boolish('EXPO_NO_TYPESCRIPT_SETUP', false);\n }\n /** Disable all API caches. Does not disable bundler caches. */\n get EXPO_NO_CACHE() {\n return boolish('EXPO_NO_CACHE', false);\n }\n /** Disable the app select redirect page. */\n get EXPO_NO_REDIRECT_PAGE() {\n return boolish('EXPO_NO_REDIRECT_PAGE', false);\n }\n /** The React Metro port that's baked into react-native scripts and tools. */\n get RCT_METRO_PORT() {\n return int('RCT_METRO_PORT', 0);\n }\n /** Skip validating the manifest during `export`. */\n get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN(): boolean {\n return !!string('EXPO_SKIP_MANIFEST_VALIDATION_TOKEN');\n }\n\n /** Public folder path relative to the project root. Default to `public` */\n get EXPO_PUBLIC_FOLDER(): string {\n return string('EXPO_PUBLIC_FOLDER', 'public');\n }\n\n /** Higher priority `$EDIOTR` variable for indicating which editor to use when pressing `o` in the Terminal UI. */\n get EXPO_EDITOR(): string {\n return string('EXPO_EDITOR', '');\n }\n\n /**\n * Overwrite the dev server URL, disregarding the `--port`, `--host`, `--tunnel`, `--lan`, `--localhost` arguments.\n * This is useful for browser editors that require custom proxy URLs.\n *\n * The URL will not be used verbatim unless `EXPO_NO_DEFAULT_PORT=true` is also set,\n * otherwise a `:80` port will be added for Android support.\n */\n get EXPO_PACKAGER_PROXY_URL(): string {\n return string('EXPO_PACKAGER_PROXY_URL', '');\n }\n\n /**\n * Disable the enforced `:80` port when using custom dev server URLs.\n * This can break the incomplete Android WebSocket implementation but allows\n * `EXPO_PACKAGER_PROXY_URL` to work as expected.\n * */\n get EXPO_NO_DEFAULT_PORT(): boolean {\n return boolish('EXPO_NO_DEFAULT_PORT', false);\n }\n}\n\nexport const env = new Env();\n"],"names":["Env","EXPO_PROFILE","boolish","EXPO_DEBUG","EXPO_BETA","EXPO_STAGING","EXPO_LOCAL","CI","EXPO_NO_TELEMETRY","EXPO_UNIVERSE_DIR","string","WEB_HOST","EXPO_NO_GIT_STATUS","EXPO_NO_WEB_SETUP","EXPO_NO_TYPESCRIPT_SETUP","EXPO_NO_CACHE","EXPO_NO_REDIRECT_PAGE","RCT_METRO_PORT","int","EXPO_SKIP_MANIFEST_VALIDATION_TOKEN","EXPO_PUBLIC_FOLDER","EXPO_EDITOR","EXPO_PACKAGER_PROXY_URL","EXPO_NO_DEFAULT_PORT","env"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.2.11",
3
+ "version": "0.3.0",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -43,7 +43,7 @@
43
43
  "@expo/dev-server": "~0.1.119",
44
44
  "@expo/devcert": "^1.0.0",
45
45
  "@expo/json-file": "^8.2.35",
46
- "@expo/metro-config": "~0.3.18",
46
+ "@expo/metro-config": "~0.4.0",
47
47
  "@expo/osascript": "^2.0.31",
48
48
  "@expo/package-manager": "~0.0.53",
49
49
  "@expo/plist": "^0.0.18",
@@ -137,5 +137,5 @@
137
137
  "structured-headers": "^0.4.1",
138
138
  "taskr": "1.1.0"
139
139
  },
140
- "gitHead": "f2136cdc98ea6595298d01900861d649bcc6cae1"
140
+ "gitHead": "76ba612c3ae012ef7478a9a3acacde9ab44d0aaf"
141
141
  }
@@ -185,10 +185,27 @@
185
185
  color: var(--secondary-text-color);
186
186
  }
187
187
 
188
+ #alert {
189
+ background-color: #fff;
190
+ color: var(--secondary-text-color);
191
+
192
+ padding-top: 20px;
193
+ padding-bottom: 20px;
194
+ padding-left: 10px;
195
+ padding-right: 10px;
196
+
197
+ text-align: center;
198
+ font-size: 16px;
199
+ letter-spacing: -0.0001em;
200
+ line-height: 150%;
201
+
202
+ display: none;
203
+ }
188
204
  </style>
189
205
  <title>Expo Start | Loading Page</title>
190
206
  </head>
191
207
  <body>
208
+ <div id="alert"></div>
192
209
  <div class="logo-box">
193
210
  <div class="logo-background-box">
194
211
 
@@ -216,8 +233,8 @@
216
233
  <div class="info-box-details">
217
234
  <p class="info-box-app-name">{{ AppName }}</p>
218
235
  <div class="info-box-details-record">
219
- <p>Runtime version</p>
220
- <p>{{ RuntimeVersion }}</p>
236
+ <p>{{ ProjectVersionType }}</p>
237
+ <p>{{ ProjectVersion }}</p>
221
238
  </div>
222
239
  <!-- <div class="info-box-details-record">
223
240
  <p>Branch</p>
@@ -239,11 +256,29 @@
239
256
  <p class="bottom-bar-header">
240
257
  How would you like to open this project?
241
258
  </p>
242
- <a id="expo-dev-client-link" href="/_expo/link?choice=expo-dev-client" class="bottom-bar-button bottom-bar-button-dark">Development App</a>
259
+ <a id="expo-dev-client-link" href="/_expo/link?choice=expo-dev-client" class="bottom-bar-button bottom-bar-button-dark">Development Build</a>
243
260
  <a id="expo-go-link" href="/_expo/link?choice=expo-go" class="bottom-bar-button bottom-bar-button-grey">Expo Go</a>
244
261
  </div>
245
262
 
246
263
  <script>
264
+ const alertElement = document.getElementById("alert");
265
+
266
+ const showAlert = (isExpoGo) => {
267
+ if (isExpoGo) {
268
+ alertElement.innerHTML = 'Unable to open in Expo Go. Please install <b>Expo Go</b> to continue.' +
269
+ '<br><a href="https://expo.dev/client">Learn more.</a>';
270
+ } else {
271
+ alertElement.innerHTML = 'Unable to open in Development Build with the <b>{{ Scheme }}</b> scheme. Please build and install a compatible <b>Development Build</b> to continue.' +
272
+ '<br><a href="https://docs.expo.dev/development/build/">Learn more.</a>';
273
+ }
274
+
275
+ alertElement.style.display = "block";
276
+ }
277
+
278
+ const hideAlert = () => {
279
+ alertElement.style.display = "none";
280
+ }
281
+
247
282
  function findGetParameter(parameterName) {
248
283
  let result = null;
249
284
 
@@ -257,11 +292,69 @@
257
292
  return result;
258
293
  }
259
294
 
295
+ function tryToDetectDeepLinkFailure(isExpoGo) {
296
+ const waitForRedirect = 800;
297
+ let didHide = false;
298
+ let didLoseFocuse = false;
299
+
300
+ const onVisibilitychange = (e) => {
301
+ if (e.target.visibilityState === 'hidden') {
302
+ didHide = true;
303
+ hideAlert();
304
+ }
305
+ };
306
+
307
+ const clearOnFocus = () => {
308
+ hideAlert();
309
+ window.removeEventListener('focus', clearOnFocus);
310
+ };
311
+
312
+ const showErrorOnFocus = () => {
313
+ window.removeEventListener('focus', showErrorOnFocus);
314
+
315
+ setTimeout(() => {
316
+ window.addEventListener('focus', clearOnFocus);
317
+
318
+ if (!didHide) {
319
+ showAlert(isExpoGo);
320
+ }
321
+ }, waitForRedirect);
322
+ }
323
+
324
+ const onBlur = () => {
325
+ didLoseFocuse = true;
326
+ window.removeEventListener('blur', onBlur);
327
+ window.addEventListener('focus', showErrorOnFocus);
328
+ };
329
+
330
+ window.addEventListener('blur', onBlur);
331
+ document.addEventListener("visibilitychange", onVisibilitychange);
332
+ setTimeout(() => {
333
+ // A modal was shown. So we need to wait for a user input.
334
+ if (didLoseFocuse) {
335
+ return;
336
+ }
337
+
338
+ window.addEventListener('focus', clearOnFocus);
339
+ document.removeEventListener("visibilitychange", onVisibilitychange);
340
+
341
+ // deeplink seems to be working
342
+ if (didHide) {
343
+ return;
344
+ }
345
+
346
+ showAlert(isExpoGo);
347
+ }, waitForRedirect);
348
+ }
349
+
350
+ const devClientLink = document.getElementById("expo-dev-client-link");
351
+ const goLink = document.getElementById("expo-go-link");
352
+
353
+ devClientLink.onclick = () => tryToDetectDeepLinkFailure(false);
354
+ goLink.onclick = () => tryToDetectDeepLinkFailure(true);
355
+
260
356
  const platform = findGetParameter("platform");
261
357
  if (platform) {
262
- const devClientLink = document.getElementById("expo-dev-client-link");
263
- const goLink = document.getElementById("expo-go-link");
264
-
265
358
  devClientLink.href += "&platform=" + encodeURIComponent(platform);
266
359
  goLink.href += "&platform=" + encodeURIComponent(platform);
267
360
  }