@expo/cli 0.1.0 → 0.1.3

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 (113) hide show
  1. package/build/bin/cli +38 -11
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/config/index.js +7 -17
  4. package/build/src/config/index.js.map +1 -1
  5. package/build/src/export/createBundles.js +62 -0
  6. package/build/src/export/createBundles.js.map +1 -0
  7. package/build/src/export/createMetadataJson.js +36 -0
  8. package/build/src/export/createMetadataJson.js.map +1 -0
  9. package/build/src/export/exportApp.js +102 -0
  10. package/build/src/export/exportApp.js.map +1 -0
  11. package/build/src/export/exportAssets.js +106 -0
  12. package/build/src/export/exportAssets.js.map +1 -0
  13. package/build/src/export/exportAsync.js +49 -0
  14. package/build/src/export/exportAsync.js.map +1 -0
  15. package/build/src/export/fork-bundleAsync.js +138 -0
  16. package/build/src/export/fork-bundleAsync.js.map +1 -0
  17. package/build/src/export/getPublicExpoManifest.js +28 -0
  18. package/build/src/export/getPublicExpoManifest.js.map +1 -0
  19. package/build/src/export/getResolvedLocales.js +35 -0
  20. package/build/src/export/getResolvedLocales.js.map +1 -0
  21. package/build/src/export/index.js +77 -0
  22. package/build/src/export/index.js.map +1 -0
  23. package/build/src/export/printBundleSizes.js +122 -0
  24. package/build/src/export/printBundleSizes.js.map +1 -0
  25. package/build/src/export/resolveOptions.js +24 -0
  26. package/build/src/export/resolveOptions.js.map +1 -0
  27. package/build/src/export/saveAssets.js +65 -0
  28. package/build/src/export/saveAssets.js.map +1 -0
  29. package/build/src/export/writeContents.js +108 -0
  30. package/build/src/export/writeContents.js.map +1 -0
  31. package/build/src/install/index.js +13 -40
  32. package/build/src/install/index.js.map +1 -1
  33. package/build/src/login/index.js +6 -20
  34. package/build/src/login/index.js.map +1 -1
  35. package/build/src/logout/index.js +2 -17
  36. package/build/src/logout/index.js.map +1 -1
  37. package/build/src/prebuild/index.js +10 -21
  38. package/build/src/prebuild/index.js.map +1 -1
  39. package/build/src/prebuild/prebuildAsync.js +1 -1
  40. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  41. package/build/src/register/index.js +2 -17
  42. package/build/src/register/index.js.map +1 -1
  43. package/build/src/run/android/index.js +97 -0
  44. package/build/src/run/android/index.js.map +1 -0
  45. package/build/src/run/android/resolveDevice.js +23 -0
  46. package/build/src/run/android/resolveDevice.js.map +1 -0
  47. package/build/src/run/android/resolveGradleProps.js +37 -0
  48. package/build/src/run/android/resolveGradleProps.js.map +1 -0
  49. package/build/src/run/android/resolveInstallApkName.js +72 -0
  50. package/build/src/run/android/resolveInstallApkName.js.map +1 -0
  51. package/build/src/run/android/resolveLaunchProps.js +32 -0
  52. package/build/src/run/android/resolveLaunchProps.js.map +1 -0
  53. package/build/src/run/android/resolveOptions.js +25 -0
  54. package/build/src/run/android/resolveOptions.js.map +1 -0
  55. package/build/src/run/android/runAndroidAsync.js +74 -0
  56. package/build/src/run/android/runAndroidAsync.js.map +1 -0
  57. package/build/src/run/ensureNativeProject.js +33 -0
  58. package/build/src/run/ensureNativeProject.js.map +1 -0
  59. package/build/src/run/hints.js +22 -0
  60. package/build/src/run/hints.js.map +1 -0
  61. package/build/src/run/resolveBundlerProps.js +31 -0
  62. package/build/src/run/resolveBundlerProps.js.map +1 -0
  63. package/build/src/run/startBundler.js +76 -0
  64. package/build/src/run/startBundler.js.map +1 -0
  65. package/build/src/start/index.js +29 -39
  66. package/build/src/start/index.js.map +1 -1
  67. package/build/src/start/platforms/ExpoGoInstaller.js +4 -1
  68. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  69. package/build/src/start/platforms/PlatformManager.js +25 -0
  70. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  71. package/build/src/start/platforms/android/ADBServer.js +3 -1
  72. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  73. package/build/src/start/platforms/android/AndroidDeviceManager.js +13 -1
  74. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  75. package/build/src/start/platforms/android/activateWindow.js +2 -0
  76. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  77. package/build/src/start/platforms/android/adb.js +37 -4
  78. package/build/src/start/platforms/android/adb.js.map +1 -1
  79. package/build/src/start/platforms/android/gradle.js +86 -0
  80. package/build/src/start/platforms/android/gradle.js.map +1 -0
  81. package/build/src/start/server/BundlerDevServer.js +62 -2
  82. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  83. package/build/src/start/server/UrlCreator.js +2 -1
  84. package/build/src/start/server/UrlCreator.js.map +1 -1
  85. package/build/src/start/server/metro/MetroBundlerDevServer.js +11 -14
  86. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  87. package/build/src/start/server/metro/instantiateMetro.js +22 -9
  88. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  89. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  90. package/build/src/start/server/middleware/createDevServerMiddleware.js +2 -2
  91. package/build/src/start/server/middleware/createDevServerMiddleware.js.map +1 -1
  92. package/build/src/start/server/middleware/resolveAssets.js +4 -1
  93. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  94. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +10 -14
  95. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  96. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  97. package/build/src/utils/args.js +14 -0
  98. package/build/src/utils/args.js.map +1 -1
  99. package/build/src/utils/array.js +29 -0
  100. package/build/src/utils/array.js.map +1 -1
  101. package/build/src/utils/dir.js +5 -1
  102. package/build/src/utils/dir.js.map +1 -1
  103. package/build/src/utils/downloadAppAsync.js +3 -0
  104. package/build/src/utils/downloadAppAsync.js.map +1 -1
  105. package/build/src/utils/downloadExpoGoAsync.js +11 -5
  106. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  107. package/build/src/utils/env.js +3 -0
  108. package/build/src/utils/env.js.map +1 -1
  109. package/build/src/utils/resolveArgs.js +94 -0
  110. package/build/src/utils/resolveArgs.js.map +1 -0
  111. package/build/src/whoami/index.js +1 -17
  112. package/build/src/whoami/index.js.map +1 -1
  113. package/package.json +18 -13
@@ -69,7 +69,7 @@ async function getAssetFieldPathsForManifestAsync(manifest) {
69
69
  return sdkAssetFieldPaths.filter((assetSchema)=>(0, _obj).get(manifest, assetSchema)
70
70
  );
71
71
  }
72
- async function resolveManifestAssets(projectRoot, { manifest , resolver }) {
72
+ async function resolveManifestAssets(projectRoot, { manifest , resolver , strict }) {
73
73
  try {
74
74
  // Asset fields that the user has set like ["icon", "splash.image"]
75
75
  const assetSchemas = await getAssetFieldPathsForManifestAsync(manifest);
@@ -101,6 +101,9 @@ async function resolveManifestAssets(projectRoot, { manifest , resolver }) {
101
101
  } else {
102
102
  Log.warn(`Warning: Unable to resolve manifest assets. Icons and fonts might not work. ${error.message}.`);
103
103
  }
104
+ if (strict) {
105
+ throw new _errors.CommandError("MANIFEST_ASSET", "Failed to export manifest assets: " + error.message);
106
+ }
104
107
  }
105
108
  }
106
109
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/middleware/resolveAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { BundleAssetWithFileHashes } from '@expo/dev-server';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { getAssetSchemasAsync } from '../../../api/getExpoSchema';\nimport * as Log from '../../../log';\nimport { fileExistsAsync } from '../../../utils/dir';\nimport { CommandError } from '../../../utils/errors';\nimport { get, set } from '../../../utils/obj';\nimport { validateUrl } from '../../../utils/url';\n\ntype ManifestAsset = { fileHashes: string[]; files: string[]; hash: string };\n\nexport type Asset = ManifestAsset | BundleAssetWithFileHashes;\n\ntype ManifestResolutionError = Error & {\n localAssetPath?: string;\n manifestField?: string;\n};\n\n/** Inline the contents of each platform's `googleServicesFile` so runtimes can access them. */\nexport async function resolveGoogleServicesFile(\n projectRoot: string,\n manifest: Pick<ExpoConfig, 'android' | 'ios'>\n) {\n if (manifest.android?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.android.googleServicesFile),\n 'utf8'\n );\n manifest.android.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: android.googleServicesFile: \"${manifest.android.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.android.googleServicesFile;\n }\n }\n if (manifest.ios?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.ios.googleServicesFile),\n 'base64'\n );\n manifest.ios.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: ios.googleServicesFile: \"${manifest.ios.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.ios.googleServicesFile;\n }\n }\n return manifest;\n}\n\n/**\n * Get all fields in the manifest that match assets, then filter the ones that aren't set.\n *\n * @param manifest\n * @returns Asset fields that the user has set like [\"icon\", \"splash.image\", ...]\n */\nexport async function getAssetFieldPathsForManifestAsync(manifest: ExpoConfig): Promise<string[]> {\n // String array like [\"icon\", \"notification.icon\", \"loading.icon\", \"loading.backgroundImage\", \"ios.icon\", ...]\n const sdkAssetFieldPaths = await getAssetSchemasAsync(manifest.sdkVersion);\n return sdkAssetFieldPaths.filter((assetSchema) => get(manifest, assetSchema));\n}\n\n/** Resolve all assets in the app.json inline. */\nexport async function resolveManifestAssets(\n projectRoot: string,\n {\n manifest,\n resolver,\n }: {\n manifest: ExpoConfig;\n resolver: (assetPath: string) => Promise<string>;\n }\n) {\n try {\n // Asset fields that the user has set like [\"icon\", \"splash.image\"]\n const assetSchemas = await getAssetFieldPathsForManifestAsync(manifest);\n // Get the URLs\n const urls = await Promise.all(\n assetSchemas.map(async (manifestField) => {\n const pathOrURL = get(manifest, manifestField);\n // URL\n if (validateUrl(pathOrURL, { requireProtocol: true })) {\n return pathOrURL;\n }\n\n // File path\n if (await fileExistsAsync(path.resolve(projectRoot, pathOrURL))) {\n return await resolver(pathOrURL);\n }\n\n // Unknown\n const err: ManifestResolutionError = new CommandError(\n 'MANIFEST_ASSET',\n 'Could not resolve local asset: ' + pathOrURL\n );\n err.localAssetPath = pathOrURL;\n err.manifestField = manifestField;\n throw err;\n })\n );\n\n // Set the corresponding URL fields\n assetSchemas.forEach((manifestField, index: number) =>\n set(manifest, `${manifestField}Url`, urls[index])\n );\n } catch (error: any) {\n if (error.localAssetPath) {\n Log.warn(\n `Unable to resolve asset \"${error.localAssetPath}\" from \"${error.manifestField}\" in your app.json or app.config.js`\n );\n } else {\n Log.warn(\n `Warning: Unable to resolve manifest assets. Icons and fonts might not work. ${error.message}.`\n );\n }\n }\n}\n"],"names":["resolveGoogleServicesFile","getAssetFieldPathsForManifestAsync","resolveManifestAssets","Log","projectRoot","manifest","android","googleServicesFile","contents","fs","readFile","path","resolve","warn","ios","sdkAssetFieldPaths","getAssetSchemasAsync","sdkVersion","filter","assetSchema","get","resolver","assetSchemas","urls","Promise","all","map","manifestField","pathOrURL","validateUrl","requireProtocol","fileExistsAsync","err","CommandError","localAssetPath","forEach","index","set","error","message"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/resolveAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { BundleAssetWithFileHashes } from '@expo/dev-server';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { getAssetSchemasAsync } from '../../../api/getExpoSchema';\nimport * as Log from '../../../log';\nimport { fileExistsAsync } from '../../../utils/dir';\nimport { CommandError } from '../../../utils/errors';\nimport { get, set } from '../../../utils/obj';\nimport { validateUrl } from '../../../utils/url';\n\ntype ManifestAsset = { fileHashes: string[]; files: string[]; hash: string };\n\nexport type Asset = ManifestAsset | BundleAssetWithFileHashes;\n\ntype ManifestResolutionError = Error & {\n localAssetPath?: string;\n manifestField?: string;\n};\n\n/** Inline the contents of each platform's `googleServicesFile` so runtimes can access them. */\nexport async function resolveGoogleServicesFile(\n projectRoot: string,\n manifest: Pick<ExpoConfig, 'android' | 'ios'>\n) {\n if (manifest.android?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.android.googleServicesFile),\n 'utf8'\n );\n manifest.android.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: android.googleServicesFile: \"${manifest.android.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.android.googleServicesFile;\n }\n }\n if (manifest.ios?.googleServicesFile) {\n try {\n const contents = await fs.readFile(\n path.resolve(projectRoot, manifest.ios.googleServicesFile),\n 'base64'\n );\n manifest.ios.googleServicesFile = contents;\n } catch {\n Log.warn(\n `Could not parse Expo config: ios.googleServicesFile: \"${manifest.ios.googleServicesFile}\"`\n );\n // Delete the field so Expo Go doesn't attempt to read it.\n delete manifest.ios.googleServicesFile;\n }\n }\n return manifest;\n}\n\n/**\n * Get all fields in the manifest that match assets, then filter the ones that aren't set.\n *\n * @param manifest\n * @returns Asset fields that the user has set like [\"icon\", \"splash.image\", ...]\n */\nexport async function getAssetFieldPathsForManifestAsync(manifest: ExpoConfig): Promise<string[]> {\n // String array like [\"icon\", \"notification.icon\", \"loading.icon\", \"loading.backgroundImage\", \"ios.icon\", ...]\n const sdkAssetFieldPaths = await getAssetSchemasAsync(manifest.sdkVersion);\n return sdkAssetFieldPaths.filter((assetSchema) => get(manifest, assetSchema));\n}\n\n/** Resolve all assets in the app.json inline. */\nexport async function resolveManifestAssets(\n projectRoot: string,\n {\n manifest,\n resolver,\n strict,\n }: {\n manifest: ExpoConfig;\n resolver: (assetPath: string) => Promise<string>;\n strict?: boolean;\n }\n) {\n try {\n // Asset fields that the user has set like [\"icon\", \"splash.image\"]\n const assetSchemas = await getAssetFieldPathsForManifestAsync(manifest);\n // Get the URLs\n const urls = await Promise.all(\n assetSchemas.map(async (manifestField) => {\n const pathOrURL = get(manifest, manifestField);\n // URL\n if (validateUrl(pathOrURL, { requireProtocol: true })) {\n return pathOrURL;\n }\n\n // File path\n if (await fileExistsAsync(path.resolve(projectRoot, pathOrURL))) {\n return await resolver(pathOrURL);\n }\n\n // Unknown\n const err: ManifestResolutionError = new CommandError(\n 'MANIFEST_ASSET',\n 'Could not resolve local asset: ' + pathOrURL\n );\n err.localAssetPath = pathOrURL;\n err.manifestField = manifestField;\n throw err;\n })\n );\n\n // Set the corresponding URL fields\n assetSchemas.forEach((manifestField, index: number) =>\n set(manifest, `${manifestField}Url`, urls[index])\n );\n } catch (error: any) {\n if (error.localAssetPath) {\n Log.warn(\n `Unable to resolve asset \"${error.localAssetPath}\" from \"${error.manifestField}\" in your app.json or app.config.js`\n );\n } else {\n Log.warn(\n `Warning: Unable to resolve manifest assets. Icons and fonts might not work. ${error.message}.`\n );\n }\n\n if (strict) {\n throw new CommandError(\n 'MANIFEST_ASSET',\n 'Failed to export manifest assets: ' + error.message\n );\n }\n }\n}\n"],"names":["resolveGoogleServicesFile","getAssetFieldPathsForManifestAsync","resolveManifestAssets","Log","projectRoot","manifest","android","googleServicesFile","contents","fs","readFile","path","resolve","warn","ios","sdkAssetFieldPaths","getAssetSchemasAsync","sdkVersion","filter","assetSchema","get","resolver","strict","assetSchemas","urls","Promise","all","map","manifestField","pathOrURL","validateUrl","requireProtocol","fileExistsAsync","err","CommandError","localAssetPath","forEach","index","set","error","message"],"mappings":"AAAA;;;;QAsBsBA,yBAAyB,GAAzBA,yBAAyB;QA2CzBC,kCAAkC,GAAlCA,kCAAkC;QAOlCC,qBAAqB,GAArBA,qBAAqB;AAtE5B,IAAA,SAAa,kCAAb,aAAa,EAAA;AACX,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEc,IAAA,cAA4B,WAA5B,4BAA4B,CAAA;AACrDC,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACiB,IAAA,IAAoB,WAApB,oBAAoB,CAAA;AACvB,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AAC3B,IAAA,IAAoB,WAApB,oBAAoB,CAAA;AACjB,IAAA,IAAoB,WAApB,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYzC,eAAeH,yBAAyB,CAC7CI,WAAmB,EACnBC,QAA6C,EAC7C;QACIA,GAAgB,EAehBA,IAAY;IAfhB,IAAIA,CAAAA,GAAgB,GAAhBA,QAAQ,CAACC,OAAO,SAAoB,GAApCD,KAAAA,CAAoC,GAApCA,GAAgB,CAAEE,kBAAkB,EAAE;QACxC,IAAI;YACF,MAAMC,QAAQ,GAAG,MAAMC,SAAE,QAAA,CAACC,QAAQ,CAChCC,KAAI,QAAA,CAACC,OAAO,CAACR,WAAW,EAAEC,QAAQ,CAACC,OAAO,CAACC,kBAAkB,CAAC,EAC9D,MAAM,CACP,AAAC;YACFF,QAAQ,CAACC,OAAO,CAACC,kBAAkB,GAAGC,QAAQ,CAAC;SAChD,CAAC,OAAM;YACNL,GAAG,CAACU,IAAI,CACN,CAAC,0DAA0D,EAAER,QAAQ,CAACC,OAAO,CAACC,kBAAkB,CAAC,CAAC,CAAC,CACpG,CAAC;YACF,0DAA0D;YAC1D,OAAOF,QAAQ,CAACC,OAAO,CAACC,kBAAkB,CAAC;SAC5C;KACF;IACD,IAAIF,CAAAA,IAAY,GAAZA,QAAQ,CAACS,GAAG,SAAoB,GAAhCT,KAAAA,CAAgC,GAAhCA,IAAY,CAAEE,kBAAkB,EAAE;QACpC,IAAI;YACF,MAAMC,QAAQ,GAAG,MAAMC,SAAE,QAAA,CAACC,QAAQ,CAChCC,KAAI,QAAA,CAACC,OAAO,CAACR,WAAW,EAAEC,QAAQ,CAACS,GAAG,CAACP,kBAAkB,CAAC,EAC1D,QAAQ,CACT,AAAC;YACFF,QAAQ,CAACS,GAAG,CAACP,kBAAkB,GAAGC,QAAQ,CAAC;SAC5C,CAAC,OAAM;YACNL,GAAG,CAACU,IAAI,CACN,CAAC,sDAAsD,EAAER,QAAQ,CAACS,GAAG,CAACP,kBAAkB,CAAC,CAAC,CAAC,CAC5F,CAAC;YACF,0DAA0D;YAC1D,OAAOF,QAAQ,CAACS,GAAG,CAACP,kBAAkB,CAAC;SACxC;KACF;IACD,OAAOF,QAAQ,CAAC;CACjB;AAQM,eAAeJ,kCAAkC,CAACI,QAAoB,EAAqB;IAChG,8GAA8G;IAC9G,MAAMU,kBAAkB,GAAG,MAAMC,CAAAA,GAAAA,cAAoB,AAAqB,CAAA,qBAArB,CAACX,QAAQ,CAACY,UAAU,CAAC,AAAC;IAC3E,OAAOF,kBAAkB,CAACG,MAAM,CAAC,CAACC,WAAW,GAAKC,CAAAA,GAAAA,IAAG,AAAuB,CAAA,IAAvB,CAACf,QAAQ,EAAEc,WAAW,CAAC;IAAA,CAAC,CAAC;CAC/E;AAGM,eAAejB,qBAAqB,CACzCE,WAAmB,EACnB,EACEC,QAAQ,CAAA,EACRgB,QAAQ,CAAA,EACRC,MAAM,CAAA,EAKP,EACD;IACA,IAAI;QACF,mEAAmE;QACnE,MAAMC,YAAY,GAAG,MAAMtB,kCAAkC,CAACI,QAAQ,CAAC,AAAC;QACxE,eAAe;QACf,MAAMmB,IAAI,GAAG,MAAMC,OAAO,CAACC,GAAG,CAC5BH,YAAY,CAACI,GAAG,CAAC,OAAOC,aAAa,GAAK;YACxC,MAAMC,SAAS,GAAGT,CAAAA,GAAAA,IAAG,AAAyB,CAAA,IAAzB,CAACf,QAAQ,EAAEuB,aAAa,CAAC,AAAC;YAC/C,MAAM;YACN,IAAIE,CAAAA,GAAAA,IAAW,AAAsC,CAAA,YAAtC,CAACD,SAAS,EAAE;gBAAEE,eAAe,EAAE,IAAI;aAAE,CAAC,EAAE;gBACrD,OAAOF,SAAS,CAAC;aAClB;YAED,YAAY;YACZ,IAAI,MAAMG,CAAAA,GAAAA,IAAe,AAAsC,CAAA,gBAAtC,CAACrB,KAAI,QAAA,CAACC,OAAO,CAACR,WAAW,EAAEyB,SAAS,CAAC,CAAC,EAAE;gBAC/D,OAAO,MAAMR,QAAQ,CAACQ,SAAS,CAAC,CAAC;aAClC;YAED,UAAU;YACV,MAAMI,GAAG,GAA4B,IAAIC,OAAY,aAAA,CACnD,gBAAgB,EAChB,iCAAiC,GAAGL,SAAS,CAC9C,AAAC;YACFI,GAAG,CAACE,cAAc,GAAGN,SAAS,CAAC;YAC/BI,GAAG,CAACL,aAAa,GAAGA,aAAa,CAAC;YAClC,MAAMK,GAAG,CAAC;SACX,CAAC,CACH,AAAC;QAEF,mCAAmC;QACnCV,YAAY,CAACa,OAAO,CAAC,CAACR,aAAa,EAAES,KAAa,GAChDC,CAAAA,GAAAA,IAAG,AAA8C,CAAA,IAA9C,CAACjC,QAAQ,EAAE,CAAC,EAAEuB,aAAa,CAAC,GAAG,CAAC,EAAEJ,IAAI,CAACa,KAAK,CAAC,CAAC;QAAA,CAClD,CAAC;KACH,CAAC,OAAOE,KAAK,EAAO;QACnB,IAAIA,KAAK,CAACJ,cAAc,EAAE;YACxBhC,GAAG,CAACU,IAAI,CACN,CAAC,yBAAyB,EAAE0B,KAAK,CAACJ,cAAc,CAAC,QAAQ,EAAEI,KAAK,CAACX,aAAa,CAAC,mCAAmC,CAAC,CACpH,CAAC;SACH,MAAM;YACLzB,GAAG,CAACU,IAAI,CACN,CAAC,4EAA4E,EAAE0B,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAChG,CAAC;SACH;QAED,IAAIlB,MAAM,EAAE;YACV,MAAM,IAAIY,OAAY,aAAA,CACpB,gBAAgB,EAChB,oCAAoC,GAAGK,KAAK,CAACC,OAAO,CACrD,CAAC;SACH;KACF;CACF"}
@@ -15,7 +15,6 @@ var _ip = require("../../../utils/ip");
15
15
  var _port = require("../../../utils/port");
16
16
  var _dotExpo = require("../../project/dotExpo");
17
17
  var _bundlerDevServer = require("../BundlerDevServer");
18
- var _urlCreator = require("../UrlCreator");
19
18
  var _resolveFromProject = require("./resolveFromProject");
20
19
  var _tls = require("./tls");
21
20
  function _interopRequireDefault(obj) {
@@ -110,7 +109,7 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
110
109
  const { createDevServerMiddleware } = await Promise.resolve().then(function() {
111
110
  return _interopRequireWildcard(require("../middleware/createDevServerMiddleware"));
112
111
  });
113
- const nativeMiddleware = createDevServerMiddleware({
112
+ const nativeMiddleware = createDevServerMiddleware(this.projectRoot, {
114
113
  port,
115
114
  watchFolders: [
116
115
  this.projectRoot
@@ -142,22 +141,21 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
142
141
  throw new _errors.CommandError("NO_PORT_FOUND", error.message);
143
142
  }
144
143
  }
145
- async startAsync(options) {
144
+ async startImplementationAsync(options) {
146
145
  var ref;
147
146
  // Do this first to fail faster.
148
147
  const webpack = (0, _resolveFromProject).importWebpackFromProject(this.projectRoot);
149
148
  const WebpackDevServer = (0, _resolveFromProject).importWebpackDevServerFromProject(this.projectRoot);
150
149
  await this.stopAsync();
151
- const { resetDevServer , https , mode } = options;
152
- const port = await this.getAvailablePortAsync({
150
+ options.port = await this.getAvailablePortAsync({
153
151
  defaultPort: options.port
154
152
  });
155
- this.urlCreator = new _urlCreator.UrlCreator({
156
- scheme: https ? "https" : "http",
157
- ...options.location
158
- }, {
153
+ const { resetDevServer , https , port , mode } = options;
154
+ this.urlCreator = this.getUrlCreator({
159
155
  port,
160
- getTunnelUrl: this.getTunnelUrl.bind(this)
156
+ location: {
157
+ scheme: https ? "https" : "http"
158
+ }
161
159
  });
162
160
  Log.debug("Starting webpack on port: " + port);
163
161
  if (resetDevServer) {
@@ -215,7 +213,7 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
215
213
  };
216
214
  const _host = (0, _ip).getIpAddress();
217
215
  const protocol = https ? "https" : "http";
218
- this.setInstance({
216
+ return {
219
217
  // Server instance
220
218
  server: server1,
221
219
  // URL Info
@@ -230,9 +228,7 @@ class WebpackBundlerDevServer extends _bundlerDevServer.BundlerDevServer {
230
228
  messageSocket: {
231
229
  broadcast: this.broadcastMessage
232
230
  }
233
- });
234
- await this.postStartAsync(options);
235
- return this.instance;
231
+ };
236
232
  }
237
233
  /** Load the Webpack config. Exposed for testing. */ getProjectConfigFilePath() {
238
234
  var ref;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import { createSymbolicateMiddleware } from '@expo/dev-server/build/webpack/symbolicateMiddleware';\nimport chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'fs';\nimport http from 'http';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { getIpAddress } from '../../../utils/ip';\nimport { choosePortAsync } from '../../../utils/port';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { UrlCreator } from '../UrlCreator';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\n\ntype AnyCompiler = webpack.Compiler | webpack.MultiCompiler;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n // A custom message websocket broadcaster used to send messages to a React Native runtime.\n private customMessageSocketBroadcaster:\n | undefined\n | ((message: string, data?: Record<string, any>) => void);\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // Allow any message on native\n if (this.customMessageSocketBroadcaster) {\n this.customMessageSocketBroadcaster(method, params);\n return;\n }\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n\n private async attachNativeDevServerMiddlewareToDevServer({\n server,\n middleware,\n attachToServer,\n logger,\n }: { server: http.Server } & Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>>) {\n const { attachInspectorProxy, LogReporter } = await import('@expo/dev-server');\n\n // Hook up the React Native WebSockets to the Webpack dev server.\n const { messageSocket, debuggerProxy, eventsSocket } = attachToServer(server);\n\n this.customMessageSocketBroadcaster = messageSocket.broadcast;\n\n const logReporter = new LogReporter(logger);\n logReporter.reportEvent = eventsSocket.reportEvent;\n\n const { inspectorProxy } = attachInspectorProxy(this.projectRoot, {\n middleware,\n server,\n });\n\n return {\n messageSocket,\n eventsSocket,\n debuggerProxy,\n logReporter,\n inspectorProxy,\n };\n }\n\n isTargetingNative(): boolean {\n // Temporary hack while we implement multi-bundler dev server proxy.\n return ['ios', 'android'].includes(process.env.EXPO_WEBPACK_PLATFORM || '');\n }\n\n isTargetingWeb(): boolean {\n return true;\n }\n\n private async createNativeDevServerMiddleware({\n port,\n compiler,\n options,\n }: {\n port: number;\n compiler: AnyCompiler;\n options: BundlerStartOptions;\n }) {\n if (!this.isTargetingNative()) {\n return null;\n }\n\n const { createDevServerMiddleware } = await import('../middleware/createDevServerMiddleware');\n\n const nativeMiddleware = createDevServerMiddleware({\n port,\n watchFolders: [this.projectRoot],\n });\n // Add manifest middleware to the other middleware.\n // TODO: Move this in to expo/dev-server.\n\n const middleware = await this.getManifestMiddlewareAsync(options);\n\n nativeMiddleware.middleware.use(middleware).use(\n '/symbolicate',\n createSymbolicateMiddleware({\n projectRoot: this.projectRoot,\n compiler,\n logger: nativeMiddleware.logger,\n })\n );\n return nativeMiddleware;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n async startAsync(options: BundlerStartOptions): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n const { resetDevServer, https, mode } = options;\n\n const port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n\n this.urlCreator = new UrlCreator(\n {\n scheme: https ? 'https' : 'http',\n ...options.location,\n },\n {\n port,\n getTunnelUrl: this.getTunnelUrl.bind(this),\n }\n );\n\n Log.debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n Log.debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n let nativeMiddleware: Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>> | null =\n null;\n if (config.devServer?.before) {\n // Create the middleware required for interacting with a native runtime (Expo Go, or a development build).\n nativeMiddleware = await this.createNativeDevServerMiddleware({\n port,\n compiler,\n options,\n });\n // Inject the native manifest middleware.\n const originalBefore = config.devServer.before.bind(config.devServer.before);\n config.devServer.before = (\n app: Application,\n server: WebpackDevServer,\n compiler: webpack.Compiler\n ) => {\n originalBefore(app, server, compiler);\n\n if (nativeMiddleware?.middleware) {\n app.use(nativeMiddleware.middleware);\n }\n };\n }\n const { attachNativeDevServerMiddlewareToDevServer } = this;\n\n const server = new WebpackDevServer(\n // @ts-expect-error: type mismatch -- Webpack types aren't great.\n compiler,\n config.devServer\n );\n // Launch WebpackDevServer.\n server.listen(port, env.WEB_HOST, function (this: http.Server, error) {\n if (nativeMiddleware) {\n attachNativeDevServerMiddlewareToDevServer({\n server: this,\n ...nativeMiddleware,\n });\n }\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = getIpAddress();\n const protocol = https ? 'https' : 'http';\n\n this.setInstance({\n // Server instance\n server,\n // URL Info\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: nativeMiddleware?.middleware,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n });\n\n await this.postStartAsync(options);\n\n return this.instance!;\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: BundlerStartOptions,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n setMode(env.mode ?? 'development');\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n // @ts-expect-error: types appear to be broken\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n}\n\nfunction setMode(mode: 'development' | 'production' | 'test' | 'none'): void {\n process.env.BABEL_ENV = mode;\n process.env.NODE_ENV = mode;\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n\nasync function clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n}\n"],"names":["getProjectWebpackConfigFilePath","path","Log","assertIsWebpackDevServer","value","sockWrite","CommandError","constructor","name","WebpackBundlerDevServer","BundlerDevServer","broadcastMessage","method","params","instance","server","customMessageSocketBroadcaster","hackyConvertedMessage","sockets","attachNativeDevServerMiddlewareToDevServer","middleware","attachToServer","logger","attachInspectorProxy","LogReporter","messageSocket","debuggerProxy","eventsSocket","broadcast","logReporter","reportEvent","inspectorProxy","projectRoot","isTargetingNative","includes","process","env","EXPO_WEBPACK_PLATFORM","isTargetingWeb","createNativeDevServerMiddleware","port","compiler","options","createDevServerMiddleware","nativeMiddleware","watchFolders","getManifestMiddlewareAsync","use","createSymbolicateMiddleware","getAvailablePortAsync","defaultPort","choosePortAsync","host","WEB_HOST","error","message","startAsync","config","webpack","importWebpackFromProject","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","mode","urlCreator","UrlCreator","scheme","location","getTunnelUrl","bind","debug","clearWebProjectCacheAsync","ensureEnvironmentSupportsTLSAsync","catch","loadConfigAsync","log","chalk","devServer","before","originalBefore","app","listen","originalClose","close","callback","err","_host","getIpAddress","protocol","setInstance","url","postStartAsync","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","isImageEditingEnabled","info","setMode","projectWebpackConfig","webpackConfig","require","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","BABEL_ENV","NODE_ENV","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","join","fs","promises","rm","recursive","force"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import { createSymbolicateMiddleware } from '@expo/dev-server/build/webpack/symbolicateMiddleware';\nimport chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'fs';\nimport http from 'http';\nimport * as path from 'path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { getIpAddress } from '../../../utils/ip';\nimport { choosePortAsync } from '../../../utils/port';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\n\ntype AnyCompiler = webpack.Compiler | webpack.MultiCompiler;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n // A custom message websocket broadcaster used to send messages to a React Native runtime.\n private customMessageSocketBroadcaster:\n | undefined\n | ((message: string, data?: Record<string, any>) => void);\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // Allow any message on native\n if (this.customMessageSocketBroadcaster) {\n this.customMessageSocketBroadcaster(method, params);\n return;\n }\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n\n private async attachNativeDevServerMiddlewareToDevServer({\n server,\n middleware,\n attachToServer,\n logger,\n }: { server: http.Server } & Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>>) {\n const { attachInspectorProxy, LogReporter } = await import('@expo/dev-server');\n\n // Hook up the React Native WebSockets to the Webpack dev server.\n const { messageSocket, debuggerProxy, eventsSocket } = attachToServer(server);\n\n this.customMessageSocketBroadcaster = messageSocket.broadcast;\n\n const logReporter = new LogReporter(logger);\n logReporter.reportEvent = eventsSocket.reportEvent;\n\n const { inspectorProxy } = attachInspectorProxy(this.projectRoot, {\n middleware,\n server,\n });\n\n return {\n messageSocket,\n eventsSocket,\n debuggerProxy,\n logReporter,\n inspectorProxy,\n };\n }\n\n isTargetingNative(): boolean {\n // Temporary hack while we implement multi-bundler dev server proxy.\n return ['ios', 'android'].includes(process.env.EXPO_WEBPACK_PLATFORM || '');\n }\n\n isTargetingWeb(): boolean {\n return true;\n }\n\n private async createNativeDevServerMiddleware({\n port,\n compiler,\n options,\n }: {\n port: number;\n compiler: AnyCompiler;\n options: BundlerStartOptions;\n }) {\n if (!this.isTargetingNative()) {\n return null;\n }\n\n const { createDevServerMiddleware } = await import('../middleware/createDevServerMiddleware');\n\n const nativeMiddleware = createDevServerMiddleware(this.projectRoot, {\n port,\n watchFolders: [this.projectRoot],\n });\n // Add manifest middleware to the other middleware.\n // TODO: Move this in to expo/dev-server.\n\n const middleware = await this.getManifestMiddlewareAsync(options);\n\n nativeMiddleware.middleware.use(middleware).use(\n '/symbolicate',\n createSymbolicateMiddleware({\n projectRoot: this.projectRoot,\n compiler,\n logger: nativeMiddleware.logger,\n })\n );\n return nativeMiddleware;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n const { resetDevServer, https, port, mode } = options;\n\n this.urlCreator = this.getUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n Log.debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n Log.debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n let nativeMiddleware: Awaited<ReturnType<typeof this.createNativeDevServerMiddleware>> | null =\n null;\n if (config.devServer?.before) {\n // Create the middleware required for interacting with a native runtime (Expo Go, or a development build).\n nativeMiddleware = await this.createNativeDevServerMiddleware({\n port,\n compiler,\n options,\n });\n // Inject the native manifest middleware.\n const originalBefore = config.devServer.before.bind(config.devServer.before);\n config.devServer.before = (\n app: Application,\n server: WebpackDevServer,\n compiler: webpack.Compiler\n ) => {\n originalBefore(app, server, compiler);\n\n if (nativeMiddleware?.middleware) {\n app.use(nativeMiddleware.middleware);\n }\n };\n }\n const { attachNativeDevServerMiddlewareToDevServer } = this;\n\n const server = new WebpackDevServer(\n // @ts-expect-error: type mismatch -- Webpack types aren't great.\n compiler,\n config.devServer\n );\n // Launch WebpackDevServer.\n server.listen(port, env.WEB_HOST, function (this: http.Server, error) {\n if (nativeMiddleware) {\n attachNativeDevServerMiddlewareToDevServer({\n server: this,\n ...nativeMiddleware,\n });\n }\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = getIpAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: nativeMiddleware?.middleware,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: BundlerStartOptions,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n setMode(env.mode ?? 'development');\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n // @ts-expect-error: types appear to be broken\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n}\n\nfunction setMode(mode: 'development' | 'production' | 'test' | 'none'): void {\n process.env.BABEL_ENV = mode;\n process.env.NODE_ENV = mode;\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n\nasync function clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n}\n"],"names":["getProjectWebpackConfigFilePath","path","Log","assertIsWebpackDevServer","value","sockWrite","CommandError","constructor","name","WebpackBundlerDevServer","BundlerDevServer","broadcastMessage","method","params","instance","server","customMessageSocketBroadcaster","hackyConvertedMessage","sockets","attachNativeDevServerMiddlewareToDevServer","middleware","attachToServer","logger","attachInspectorProxy","LogReporter","messageSocket","debuggerProxy","eventsSocket","broadcast","logReporter","reportEvent","inspectorProxy","projectRoot","isTargetingNative","includes","process","env","EXPO_WEBPACK_PLATFORM","isTargetingWeb","createNativeDevServerMiddleware","port","compiler","options","createDevServerMiddleware","nativeMiddleware","watchFolders","getManifestMiddlewareAsync","use","createSymbolicateMiddleware","getAvailablePortAsync","defaultPort","choosePortAsync","host","WEB_HOST","error","message","startImplementationAsync","config","webpack","importWebpackFromProject","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","mode","urlCreator","getUrlCreator","location","scheme","debug","clearWebProjectCacheAsync","ensureEnvironmentSupportsTLSAsync","catch","loadConfigAsync","log","chalk","devServer","before","originalBefore","bind","app","listen","originalClose","close","callback","err","_host","getIpAddress","protocol","url","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","isImageEditingEnabled","info","setMode","projectWebpackConfig","webpackConfig","require","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","BABEL_ENV","NODE_ENV","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","join","fs","promises","rm","recursive","force"],"mappings":"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"}
@@ -57,7 +57,7 @@ function logEvent(event, properties = {}) {
57
57
  ensureIdentified();
58
58
  const { userId , deviceId } = identifyData != null ? identifyData : {};
59
59
  const commonEventProperties = {
60
- source_version: "0.1.0",
60
+ source_version: "0.1.3",
61
61
  source: "expo"
62
62
  };
63
63
  const identity = {
@@ -98,7 +98,7 @@ function getContext() {
98
98
  },
99
99
  app: {
100
100
  name: "expo",
101
- version: "0.1.0"
101
+ version: "0.1.3"
102
102
  }
103
103
  };
104
104
  }
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  exports.getProjectRoot = getProjectRoot;
6
6
  exports.assertArgs = assertArgs;
7
7
  exports.assertWithOptionsArgs = assertWithOptionsArgs;
8
+ exports.printHelp = printHelp;
8
9
  var _arg = _interopRequireDefault(require("arg"));
10
+ var _chalk = _interopRequireDefault(require("chalk"));
9
11
  var _fs = require("fs");
10
12
  var _path = require("path");
11
13
  var Log = _interopRequireWildcard(require("../log"));
@@ -59,5 +61,17 @@ function assertWithOptionsArgs(schema, options) {
59
61
  throw error;
60
62
  }
61
63
  }
64
+ function printHelp(info, usage, options, extra = "") {
65
+ Log.exit(_chalk.default`
66
+ {bold Info}
67
+ ${info}
68
+
69
+ {bold Usage}
70
+ {dim $} ${usage}
71
+
72
+ {bold Options}
73
+ ${options.split("\n").join("\n ")}
74
+ ` + extra, 0);
75
+ }
62
76
 
63
77
  //# sourceMappingURL=args.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/args.ts"],"sourcesContent":["// Common utilities for interacting with `args` library.\n// These functions should be used by every command.\nimport arg from 'arg';\nimport { existsSync } from 'fs';\nimport { resolve } from 'path';\n\nimport * as Log from '../log';\n\n/**\n * Parse the first argument as a project directory.\n *\n * @returns valid project directory.\n */\nexport function getProjectRoot(args: arg.Result<arg.Spec>) {\n const projectRoot = resolve(args._[0] || '.');\n\n if (!existsSync(projectRoot)) {\n Log.exit(`Invalid project root: ${projectRoot}`);\n }\n\n return projectRoot;\n}\n\n/**\n * Parse args and assert unknown options.\n *\n * @param schema the `args` schema for parsing the command line arguments.\n * @param argv extra strings\n * @returns processed args object.\n */\nexport function assertArgs(schema: arg.Spec, argv?: string[]): arg.Result<arg.Spec> {\n return assertWithOptionsArgs(schema, { argv });\n}\n\nexport function assertWithOptionsArgs(\n schema: arg.Spec,\n options: arg.Options\n): arg.Result<arg.Spec> {\n try {\n return arg(schema, options);\n } catch (error: any) {\n // Ensure unknown options are handled the same way.\n if (error.code === 'ARG_UNKNOWN_OPTION') {\n Log.exit(error.message, 1);\n }\n // Otherwise rethrow the error.\n throw error;\n }\n}\n"],"names":["getProjectRoot","assertArgs","assertWithOptionsArgs","Log","args","projectRoot","resolve","_","existsSync","exit","schema","argv","options","arg","error","code","message"],"mappings":"AAEA;;;;QAWgBA,cAAc,GAAdA,cAAc;QAiBdC,UAAU,GAAVA,UAAU;QAIVC,qBAAqB,GAArBA,qBAAqB;AAhCrB,IAAA,IAAK,kCAAL,KAAK,EAAA;AACM,IAAA,GAAI,WAAJ,IAAI,CAAA;AACP,IAAA,KAAM,WAAN,MAAM,CAAA;AAElBC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOR,SAASH,cAAc,CAACI,IAA0B,EAAE;IACzD,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,KAAO,AAAkB,CAAA,QAAlB,CAACF,IAAI,CAACG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,AAAC;IAE9C,IAAI,CAACC,CAAAA,GAAAA,GAAU,AAAa,CAAA,WAAb,CAACH,WAAW,CAAC,EAAE;QAC5BF,GAAG,CAACM,IAAI,CAAC,CAAC,sBAAsB,EAAEJ,WAAW,CAAC,CAAC,CAAC,CAAC;KAClD;IAED,OAAOA,WAAW,CAAC;CACpB;AASM,SAASJ,UAAU,CAACS,MAAgB,EAAEC,IAAe,EAAwB;IAClF,OAAOT,qBAAqB,CAACQ,MAAM,EAAE;QAAEC,IAAI;KAAE,CAAC,CAAC;CAChD;AAEM,SAAST,qBAAqB,CACnCQ,MAAgB,EAChBE,OAAoB,EACE;IACtB,IAAI;QACF,OAAOC,CAAAA,GAAAA,IAAG,AAAiB,CAAA,QAAjB,CAACH,MAAM,EAAEE,OAAO,CAAC,CAAC;KAC7B,CAAC,OAAOE,KAAK,EAAO;QACnB,mDAAmD;QACnD,IAAIA,KAAK,CAACC,IAAI,KAAK,oBAAoB,EAAE;YACvCZ,GAAG,CAACM,IAAI,CAACK,KAAK,CAACE,OAAO,EAAE,CAAC,CAAC,CAAC;SAC5B;QACD,+BAA+B;QAC/B,MAAMF,KAAK,CAAC;KACb;CACF"}
1
+ {"version":3,"sources":["../../../src/utils/args.ts"],"sourcesContent":["// Common utilities for interacting with `args` library.\n// These functions should be used by every command.\nimport arg from 'arg';\nimport chalk from 'chalk';\nimport { existsSync } from 'fs';\nimport { resolve } from 'path';\n\nimport * as Log from '../log';\n\n/**\n * Parse the first argument as a project directory.\n *\n * @returns valid project directory.\n */\nexport function getProjectRoot(args: arg.Result<arg.Spec>) {\n const projectRoot = resolve(args._[0] || '.');\n\n if (!existsSync(projectRoot)) {\n Log.exit(`Invalid project root: ${projectRoot}`);\n }\n\n return projectRoot;\n}\n\n/**\n * Parse args and assert unknown options.\n *\n * @param schema the `args` schema for parsing the command line arguments.\n * @param argv extra strings\n * @returns processed args object.\n */\nexport function assertArgs(schema: arg.Spec, argv?: string[]): arg.Result<arg.Spec> {\n return assertWithOptionsArgs(schema, { argv });\n}\n\nexport function assertWithOptionsArgs(\n schema: arg.Spec,\n options: arg.Options\n): arg.Result<arg.Spec> {\n try {\n return arg(schema, options);\n } catch (error: any) {\n // Ensure unknown options are handled the same way.\n if (error.code === 'ARG_UNKNOWN_OPTION') {\n Log.exit(error.message, 1);\n }\n // Otherwise rethrow the error.\n throw error;\n }\n}\n\nexport function printHelp(info: string, usage: string, options: string, extra: string = ''): never {\n Log.exit(\n chalk`\n {bold Info}\n ${info}\n\n {bold Usage}\n {dim $} ${usage}\n\n {bold Options}\n ${options.split('\\n').join('\\n ')}\n` + extra,\n 0\n );\n}\n"],"names":["getProjectRoot","assertArgs","assertWithOptionsArgs","printHelp","Log","args","projectRoot","resolve","_","existsSync","exit","schema","argv","options","arg","error","code","message","info","usage","extra","chalk","split","join"],"mappings":"AAEA;;;;QAYgBA,cAAc,GAAdA,cAAc;QAiBdC,UAAU,GAAVA,UAAU;QAIVC,qBAAqB,GAArBA,qBAAqB;QAgBrBC,SAAS,GAATA,SAAS;AAjDT,IAAA,IAAK,kCAAL,KAAK,EAAA;AACH,IAAA,MAAO,kCAAP,OAAO,EAAA;AACE,IAAA,GAAI,WAAJ,IAAI,CAAA;AACP,IAAA,KAAM,WAAN,MAAM,CAAA;AAElBC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOR,SAASJ,cAAc,CAACK,IAA0B,EAAE;IACzD,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,KAAO,AAAkB,CAAA,QAAlB,CAACF,IAAI,CAACG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,AAAC;IAE9C,IAAI,CAACC,CAAAA,GAAAA,GAAU,AAAa,CAAA,WAAb,CAACH,WAAW,CAAC,EAAE;QAC5BF,GAAG,CAACM,IAAI,CAAC,CAAC,sBAAsB,EAAEJ,WAAW,CAAC,CAAC,CAAC,CAAC;KAClD;IAED,OAAOA,WAAW,CAAC;CACpB;AASM,SAASL,UAAU,CAACU,MAAgB,EAAEC,IAAe,EAAwB;IAClF,OAAOV,qBAAqB,CAACS,MAAM,EAAE;QAAEC,IAAI;KAAE,CAAC,CAAC;CAChD;AAEM,SAASV,qBAAqB,CACnCS,MAAgB,EAChBE,OAAoB,EACE;IACtB,IAAI;QACF,OAAOC,CAAAA,GAAAA,IAAG,AAAiB,CAAA,QAAjB,CAACH,MAAM,EAAEE,OAAO,CAAC,CAAC;KAC7B,CAAC,OAAOE,KAAK,EAAO;QACnB,mDAAmD;QACnD,IAAIA,KAAK,CAACC,IAAI,KAAK,oBAAoB,EAAE;YACvCZ,GAAG,CAACM,IAAI,CAACK,KAAK,CAACE,OAAO,EAAE,CAAC,CAAC,CAAC;SAC5B;QACD,+BAA+B;QAC/B,MAAMF,KAAK,CAAC;KACb;CACF;AAEM,SAASZ,SAAS,CAACe,IAAY,EAAEC,KAAa,EAAEN,OAAe,EAAEO,KAAa,GAAG,EAAE,EAAS;IACjGhB,GAAG,CAACM,IAAI,CACNW,MAAK,QAAA,CAAC;;IAEN,EAAEH,IAAI,CAAC;;;YAGC,EAAEC,KAAK,CAAC;;;IAGhB,EAAEN,OAAO,CAACS,KAAK,CAAC,IAAI,CAAC,CAACC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC,GAAGH,KAAK,EACL,CAAC,CACF,CAAC;CACH"}
@@ -4,6 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.findLastIndex = findLastIndex;
6
6
  exports.intersecting = intersecting;
7
+ exports.replaceValue = replaceValue;
8
+ exports.uniqBy = uniqBy;
9
+ exports.chunk = chunk;
7
10
  function findLastIndex(array, predicate) {
8
11
  for(let i = array.length - 1; i >= 0; i--){
9
12
  if (predicate(array[i])) {
@@ -23,5 +26,31 @@ function intersecting(a, b) {
23
26
  return c.filter((value)=>d.includes(value)
24
27
  );
25
28
  }
29
+ function replaceValue(values, original, replacement) {
30
+ const index = values.indexOf(original);
31
+ if (index > -1) {
32
+ values[index] = replacement;
33
+ }
34
+ return values;
35
+ }
36
+ function uniqBy(array, key) {
37
+ const seen = {};
38
+ return array.filter((item)=>{
39
+ const k = key(item);
40
+ if (seen[k]) {
41
+ return false;
42
+ }
43
+ seen[k] = true;
44
+ return true;
45
+ });
46
+ }
47
+ function chunk(array, size) {
48
+ const chunked = [];
49
+ let index = 0;
50
+ while(index < array.length){
51
+ chunked.push(array.slice(index, index += size));
52
+ }
53
+ return chunked;
54
+ }
26
55
 
27
56
  //# sourceMappingURL=array.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/array.ts"],"sourcesContent":["/** Returns the last index of an item based on a given criteria. */\nexport function findLastIndex<T>(array: T[], predicate: (item: T) => boolean) {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i])) {\n return i;\n }\n }\n return -1;\n}\n\n/** Returns a list of items that intersect between two given arrays. */\nexport function intersecting<T>(a: T[], b: T[]): T[] {\n const [c, d] = a.length > b.length ? [a, b] : [b, a];\n return c.filter((value) => d.includes(value));\n}\n"],"names":["findLastIndex","intersecting","array","predicate","i","length","a","b","c","d","filter","value","includes"],"mappings":"AACA;;;;QAAgBA,aAAa,GAAbA,aAAa;QAUbC,YAAY,GAAZA,YAAY;AAVrB,SAASD,aAAa,CAAIE,KAAU,EAAEC,SAA+B,EAAE;IAC5E,IAAK,IAAIC,CAAC,GAAGF,KAAK,CAACG,MAAM,GAAG,CAAC,EAAED,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,CAAE;QAC1C,IAAID,SAAS,CAACD,KAAK,CAACE,CAAC,CAAC,CAAC,EAAE;YACvB,OAAOA,CAAC,CAAC;SACV;KACF;IACD,OAAO,CAAC,CAAC,CAAC;CACX;AAGM,SAASH,YAAY,CAAIK,CAAM,EAAEC,CAAM,EAAO;IACnD,MAAM,CAACC,CAAC,EAAEC,CAAC,CAAC,GAAGH,CAAC,CAACD,MAAM,GAAGE,CAAC,CAACF,MAAM,GAAG;QAACC,CAAC;QAAEC,CAAC;KAAC,GAAG;QAACA,CAAC;QAAED,CAAC;KAAC,AAAC;IACrD,OAAOE,CAAC,CAACE,MAAM,CAAC,CAACC,KAAK,GAAKF,CAAC,CAACG,QAAQ,CAACD,KAAK,CAAC;IAAA,CAAC,CAAC;CAC/C"}
1
+ {"version":3,"sources":["../../../src/utils/array.ts"],"sourcesContent":["/** Returns the last index of an item based on a given criteria. */\nexport function findLastIndex<T>(array: T[], predicate: (item: T) => boolean) {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i])) {\n return i;\n }\n }\n return -1;\n}\n\n/** Returns a list of items that intersect between two given arrays. */\nexport function intersecting<T>(a: T[], b: T[]): T[] {\n const [c, d] = a.length > b.length ? [a, b] : [b, a];\n return c.filter((value) => d.includes(value));\n}\n\nexport function replaceValue<T>(values: T[], original: T, replacement: T): T[] {\n const index = values.indexOf(original);\n if (index > -1) {\n values[index] = replacement;\n }\n return values;\n}\n\n/** lodash.uniqBy */\nexport function uniqBy<T>(array: T[], key: (item: T) => string): T[] {\n const seen: { [key: string]: boolean } = {};\n return array.filter((item) => {\n const k = key(item);\n if (seen[k]) {\n return false;\n }\n seen[k] = true;\n return true;\n });\n}\n\n/** `lodash.chunk` */\nexport function chunk<T>(array: T[], size: number): T[][] {\n const chunked = [];\n let index = 0;\n while (index < array.length) {\n chunked.push(array.slice(index, (index += size)));\n }\n return chunked;\n}\n"],"names":["findLastIndex","intersecting","replaceValue","uniqBy","chunk","array","predicate","i","length","a","b","c","d","filter","value","includes","values","original","replacement","index","indexOf","key","seen","item","k","size","chunked","push","slice"],"mappings":"AACA;;;;QAAgBA,aAAa,GAAbA,aAAa;QAUbC,YAAY,GAAZA,YAAY;QAKZC,YAAY,GAAZA,YAAY;QASZC,MAAM,GAANA,MAAM;QAaNC,KAAK,GAALA,KAAK;AArCd,SAASJ,aAAa,CAAIK,KAAU,EAAEC,SAA+B,EAAE;IAC5E,IAAK,IAAIC,CAAC,GAAGF,KAAK,CAACG,MAAM,GAAG,CAAC,EAAED,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,CAAE;QAC1C,IAAID,SAAS,CAACD,KAAK,CAACE,CAAC,CAAC,CAAC,EAAE;YACvB,OAAOA,CAAC,CAAC;SACV;KACF;IACD,OAAO,CAAC,CAAC,CAAC;CACX;AAGM,SAASN,YAAY,CAAIQ,CAAM,EAAEC,CAAM,EAAO;IACnD,MAAM,CAACC,CAAC,EAAEC,CAAC,CAAC,GAAGH,CAAC,CAACD,MAAM,GAAGE,CAAC,CAACF,MAAM,GAAG;QAACC,CAAC;QAAEC,CAAC;KAAC,GAAG;QAACA,CAAC;QAAED,CAAC;KAAC,AAAC;IACrD,OAAOE,CAAC,CAACE,MAAM,CAAC,CAACC,KAAK,GAAKF,CAAC,CAACG,QAAQ,CAACD,KAAK,CAAC;IAAA,CAAC,CAAC;CAC/C;AAEM,SAASZ,YAAY,CAAIc,MAAW,EAAEC,QAAW,EAAEC,WAAc,EAAO;IAC7E,MAAMC,KAAK,GAAGH,MAAM,CAACI,OAAO,CAACH,QAAQ,CAAC,AAAC;IACvC,IAAIE,KAAK,GAAG,CAAC,CAAC,EAAE;QACdH,MAAM,CAACG,KAAK,CAAC,GAAGD,WAAW,CAAC;KAC7B;IACD,OAAOF,MAAM,CAAC;CACf;AAGM,SAASb,MAAM,CAAIE,KAAU,EAAEgB,GAAwB,EAAO;IACnE,MAAMC,IAAI,GAA+B,EAAE,AAAC;IAC5C,OAAOjB,KAAK,CAACQ,MAAM,CAAC,CAACU,IAAI,GAAK;QAC5B,MAAMC,CAAC,GAAGH,GAAG,CAACE,IAAI,CAAC,AAAC;QACpB,IAAID,IAAI,CAACE,CAAC,CAAC,EAAE;YACX,OAAO,KAAK,CAAC;SACd;QACDF,IAAI,CAACE,CAAC,CAAC,GAAG,IAAI,CAAC;QACf,OAAO,IAAI,CAAC;KACb,CAAC,CAAC;CACJ;AAGM,SAASpB,KAAK,CAAIC,KAAU,EAAEoB,IAAY,EAAS;IACxD,MAAMC,OAAO,GAAG,EAAE,AAAC;IACnB,IAAIP,KAAK,GAAG,CAAC,AAAC;IACd,MAAOA,KAAK,GAAGd,KAAK,CAACG,MAAM,CAAE;QAC3BkB,OAAO,CAACC,IAAI,CAACtB,KAAK,CAACuB,KAAK,CAACT,KAAK,EAAGA,KAAK,IAAIM,IAAI,CAAE,CAAC,CAAC;KACnD;IACD,OAAOC,OAAO,CAAC;CAChB"}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.directoryExistsAsync = directoryExistsAsync;
6
6
  exports.fileExistsAsync = fileExistsAsync;
7
- exports.copySync = exports.ensureDirectoryAsync = void 0;
7
+ exports.removeAsync = exports.copyAsync = exports.copySync = exports.ensureDirectoryAsync = void 0;
8
8
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
9
9
  function _interopRequireDefault(obj) {
10
10
  return obj && obj.__esModule ? obj : {
@@ -30,5 +30,9 @@ const ensureDirectoryAsync = (path)=>_fsExtra.default.promises.mkdir(path, {
30
30
  exports.ensureDirectoryAsync = ensureDirectoryAsync;
31
31
  const copySync = _fsExtra.default.copySync;
32
32
  exports.copySync = copySync;
33
+ const copyAsync = _fsExtra.default.copy;
34
+ exports.copyAsync = copyAsync;
35
+ const removeAsync = _fsExtra.default.remove;
36
+ exports.removeAsync = removeAsync;
33
37
 
34
38
  //# sourceMappingURL=dir.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/dir.ts"],"sourcesContent":["import fs from 'fs-extra';\n\nexport async function directoryExistsAsync(file: string): Promise<boolean> {\n return (await fs.promises.stat(file).catch(() => null))?.isDirectory() ?? false;\n}\n\nexport async function fileExistsAsync(file: string): Promise<boolean> {\n return (await fs.promises.stat(file).catch(() => null))?.isFile() ?? false;\n}\n\nexport const ensureDirectoryAsync = (path: string) => fs.promises.mkdir(path, { recursive: true });\n\nexport const copySync = fs.copySync;\n"],"names":["directoryExistsAsync","fileExistsAsync","file","fs","promises","stat","catch","isDirectory","isFile","ensureDirectoryAsync","path","mkdir","recursive","copySync"],"mappings":"AAAA;;;;QAEsBA,oBAAoB,GAApBA,oBAAoB;QAIpBC,eAAe,GAAfA,eAAe;;AANtB,IAAA,QAAU,kCAAV,UAAU,EAAA;;;;;;AAElB,eAAeD,oBAAoB,CAACE,IAAY,EAAoB;QAClE,GAAgD;QAAhD,IAA+D;IAAtE,OAAO,CAAA,IAA+D,GAA/D,CAAA,GAAgD,GAA/C,MAAMC,QAAE,QAAA,CAACC,QAAQ,CAACC,IAAI,CAACH,IAAI,CAAC,CAACI,KAAK,CAAC,IAAM,IAAI;IAAA,CAAC,SAAc,GAA7D,KAAA,CAA6D,GAA7D,GAAgD,CAAEC,WAAW,EAAE,YAA/D,IAA+D,GAAI,KAAK,CAAC;CACjF;AAEM,eAAeN,eAAe,CAACC,IAAY,EAAoB;QAC7D,GAAgD;QAAhD,IAA0D;IAAjE,OAAO,CAAA,IAA0D,GAA1D,CAAA,GAAgD,GAA/C,MAAMC,QAAE,QAAA,CAACC,QAAQ,CAACC,IAAI,CAACH,IAAI,CAAC,CAACI,KAAK,CAAC,IAAM,IAAI;IAAA,CAAC,SAAS,GAAxD,KAAA,CAAwD,GAAxD,GAAgD,CAAEE,MAAM,EAAE,YAA1D,IAA0D,GAAI,KAAK,CAAC;CAC5E;AAEM,MAAMC,oBAAoB,GAAG,CAACC,IAAY,GAAKP,QAAE,QAAA,CAACC,QAAQ,CAACO,KAAK,CAACD,IAAI,EAAE;QAAEE,SAAS,EAAE,IAAI;KAAE,CAAC;AAAC;QAAtFH,oBAAoB,GAApBA,oBAAoB;AAE1B,MAAMI,QAAQ,GAAGV,QAAE,QAAA,CAACU,QAAQ,AAAC;QAAvBA,QAAQ,GAARA,QAAQ"}
1
+ {"version":3,"sources":["../../../src/utils/dir.ts"],"sourcesContent":["import fs from 'fs-extra';\n\nexport async function directoryExistsAsync(file: string): Promise<boolean> {\n return (await fs.promises.stat(file).catch(() => null))?.isDirectory() ?? false;\n}\n\nexport async function fileExistsAsync(file: string): Promise<boolean> {\n return (await fs.promises.stat(file).catch(() => null))?.isFile() ?? false;\n}\n\nexport const ensureDirectoryAsync = (path: string) => fs.promises.mkdir(path, { recursive: true });\n\nexport const copySync = fs.copySync;\n\nexport const copyAsync = fs.copy;\n\nexport const removeAsync = fs.remove;\n"],"names":["directoryExistsAsync","fileExistsAsync","file","fs","promises","stat","catch","isDirectory","isFile","ensureDirectoryAsync","path","mkdir","recursive","copySync","copyAsync","copy","removeAsync","remove"],"mappings":"AAAA;;;;QAEsBA,oBAAoB,GAApBA,oBAAoB;QAIpBC,eAAe,GAAfA,eAAe;;AANtB,IAAA,QAAU,kCAAV,UAAU,EAAA;;;;;;AAElB,eAAeD,oBAAoB,CAACE,IAAY,EAAoB;QAClE,GAAgD;QAAhD,IAA+D;IAAtE,OAAO,CAAA,IAA+D,GAA/D,CAAA,GAAgD,GAA/C,MAAMC,QAAE,QAAA,CAACC,QAAQ,CAACC,IAAI,CAACH,IAAI,CAAC,CAACI,KAAK,CAAC,IAAM,IAAI;IAAA,CAAC,SAAc,GAA7D,KAAA,CAA6D,GAA7D,GAAgD,CAAEC,WAAW,EAAE,YAA/D,IAA+D,GAAI,KAAK,CAAC;CACjF;AAEM,eAAeN,eAAe,CAACC,IAAY,EAAoB;QAC7D,GAAgD;QAAhD,IAA0D;IAAjE,OAAO,CAAA,IAA0D,GAA1D,CAAA,GAAgD,GAA/C,MAAMC,QAAE,QAAA,CAACC,QAAQ,CAACC,IAAI,CAACH,IAAI,CAAC,CAACI,KAAK,CAAC,IAAM,IAAI;IAAA,CAAC,SAAS,GAAxD,KAAA,CAAwD,GAAxD,GAAgD,CAAEE,MAAM,EAAE,YAA1D,IAA0D,GAAI,KAAK,CAAC;CAC5E;AAEM,MAAMC,oBAAoB,GAAG,CAACC,IAAY,GAAKP,QAAE,QAAA,CAACC,QAAQ,CAACO,KAAK,CAACD,IAAI,EAAE;QAAEE,SAAS,EAAE,IAAI;KAAE,CAAC;AAAC;QAAtFH,oBAAoB,GAApBA,oBAAoB;AAE1B,MAAMI,QAAQ,GAAGV,QAAE,QAAA,CAACU,QAAQ,AAAC;QAAvBA,QAAQ,GAARA,QAAQ;AAEd,MAAMC,SAAS,GAAGX,QAAE,QAAA,CAACY,IAAI,AAAC;QAApBD,SAAS,GAATA,SAAS;AAEf,MAAME,WAAW,GAAGb,QAAE,QAAA,CAACc,MAAM,AAAC;QAAxBD,WAAW,GAAXA,WAAW"}
@@ -11,6 +11,7 @@ var _tempy = _interopRequireDefault(require("tempy"));
11
11
  var _util = require("util");
12
12
  var _client = require("../api/rest/client");
13
13
  var _wrapFetchWithProgress = require("../api/rest/wrapFetchWithProgress");
14
+ var _log = require("../log");
14
15
  var _dir = require("./dir");
15
16
  var _errors = require("./errors");
16
17
  var _tar = require("./tar");
@@ -56,6 +57,8 @@ async function downloadAppAsync({ url , outputPath , extract =false , cacheDirec
56
57
  cacheDirectory,
57
58
  onProgress
58
59
  });
60
+ _log.Log.debug(`Extracting ${tmpPath} to ${outputPath}`);
61
+ await (0, _dir).ensureDirectoryAsync(outputPath);
59
62
  await (0, _tar).extractAsync(tmpPath, outputPath);
60
63
  } else {
61
64
  await (0, _dir).ensureDirectoryAsync(_path.default.dirname(outputPath));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/downloadAppAsync.ts"],"sourcesContent":["import fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport { Stream } from 'stream';\nimport temporary from 'tempy';\nimport { promisify } from 'util';\n\nimport { createCachedFetch } from '../api/rest/client';\nimport { FetchLike, ProgressCallback } from '../api/rest/client.types';\nimport { wrapFetchWithProgress } from '../api/rest/wrapFetchWithProgress';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { extractAsync } from './tar';\n\nconst TIMER_DURATION = 30000;\n\nconst pipeline = promisify(Stream.pipeline);\n\nasync function downloadAsync({\n url,\n outputPath,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}) {\n let fetchInstance: FetchLike = fetch;\n if (cacheDirectory) {\n // Reconstruct the cached fetch since caching could be disabled.\n fetchInstance = createCachedFetch({\n // We'll use a 1 week cache for versions so older values get flushed out eventually.\n ttl: 1000 * 60 * 60 * 24 * 7,\n // Users can also nuke their `~/.expo` directory to clear the cache.\n cacheDirectory,\n });\n }\n\n const res = await wrapFetchWithProgress(fetchInstance)(url, {\n timeout: TIMER_DURATION,\n onProgress,\n });\n if (!res.ok) {\n throw new CommandError(\n 'FILE_DOWNLOAD',\n `Unexpected response: ${res.statusText}. From url: ${url}`\n );\n }\n return pipeline(res.body, fs.createWriteStream(outputPath));\n}\n\nexport async function downloadAppAsync({\n url,\n outputPath,\n extract = false,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n extract?: boolean;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}): Promise<void> {\n if (extract) {\n // For iOS we download the ipa to a file then pass that file into the extractor.\n // In the future we should just pipe the `res.body -> tar.extract` directly.\n // I tried this and it created some weird errors where observing the data stream\n // would corrupt the file causing tar to fail with `TAR_BAD_ARCHIVE`.\n const tmpPath = temporary.file({ name: path.basename(outputPath) });\n await downloadAsync({ url, outputPath: tmpPath, cacheDirectory, onProgress });\n await extractAsync(tmpPath, outputPath);\n } else {\n await ensureDirectoryAsync(path.dirname(outputPath));\n await downloadAsync({ url, outputPath, cacheDirectory, onProgress });\n }\n}\n"],"names":["downloadAppAsync","TIMER_DURATION","pipeline","promisify","Stream","downloadAsync","url","outputPath","cacheDirectory","onProgress","fetchInstance","fetch","createCachedFetch","ttl","res","wrapFetchWithProgress","timeout","ok","CommandError","statusText","body","fs","createWriteStream","extract","tmpPath","temporary","file","name","path","basename","extractAsync","ensureDirectoryAsync","dirname"],"mappings":"AAAA;;;;QAqDsBA,gBAAgB,GAAhBA,gBAAgB;AArDvB,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACD,IAAA,UAAY,kCAAZ,YAAY,EAAA;AACb,IAAA,KAAM,kCAAN,MAAM,EAAA;AACA,IAAA,OAAQ,WAAR,QAAQ,CAAA;AACT,IAAA,MAAO,kCAAP,OAAO,EAAA;AACH,IAAA,KAAM,WAAN,MAAM,CAAA;AAEE,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AAEhB,IAAA,sBAAmC,WAAnC,mCAAmC,CAAA;AACpC,IAAA,IAAO,WAAP,OAAO,CAAA;AACf,IAAA,OAAU,WAAV,UAAU,CAAA;AACV,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;AAEpC,MAAMC,cAAc,GAAG,KAAK,AAAC;AAE7B,MAAMC,QAAQ,GAAGC,CAAAA,GAAAA,KAAS,AAAiB,CAAA,UAAjB,CAACC,OAAM,OAAA,CAACF,QAAQ,CAAC,AAAC;AAE5C,eAAeG,aAAa,CAAC,EAC3BC,GAAG,CAAA,EACHC,UAAU,CAAA,EACVC,cAAc,CAAA,EACdC,UAAU,CAAA,EAMX,EAAE;IACD,IAAIC,aAAa,GAAcC,UAAK,QAAA,AAAC;IACrC,IAAIH,cAAc,EAAE;QAClB,gEAAgE;QAChEE,aAAa,GAAGE,CAAAA,GAAAA,OAAiB,AAK/B,CAAA,kBAL+B,CAAC;YAChC,oFAAoF;YACpFC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAC5B,oEAAoE;YACpEL,cAAc;SACf,CAAC,CAAC;KACJ;IAED,MAAMM,GAAG,GAAG,MAAMC,CAAAA,GAAAA,sBAAqB,AAAe,CAAA,sBAAf,CAACL,aAAa,CAAC,CAACJ,GAAG,EAAE;QAC1DU,OAAO,EAAEf,cAAc;QACvBQ,UAAU;KACX,CAAC,AAAC;IACH,IAAI,CAACK,GAAG,CAACG,EAAE,EAAE;QACX,MAAM,IAAIC,OAAY,aAAA,CACpB,eAAe,EACf,CAAC,qBAAqB,EAAEJ,GAAG,CAACK,UAAU,CAAC,YAAY,EAAEb,GAAG,CAAC,CAAC,CAC3D,CAAC;KACH;IACD,OAAOJ,QAAQ,CAACY,GAAG,CAACM,IAAI,EAAEC,GAAE,QAAA,CAACC,iBAAiB,CAACf,UAAU,CAAC,CAAC,CAAC;CAC7D;AAEM,eAAeP,gBAAgB,CAAC,EACrCM,GAAG,CAAA,EACHC,UAAU,CAAA,EACVgB,OAAO,EAAG,KAAK,CAAA,EACff,cAAc,CAAA,EACdC,UAAU,CAAA,EAOX,EAAiB;IAChB,IAAIc,OAAO,EAAE;QACX,gFAAgF;QAChF,4EAA4E;QAC5E,gFAAgF;QAChF,qEAAqE;QACrE,MAAMC,OAAO,GAAGC,MAAS,QAAA,CAACC,IAAI,CAAC;YAAEC,IAAI,EAAEC,KAAI,QAAA,CAACC,QAAQ,CAACtB,UAAU,CAAC;SAAE,CAAC,AAAC;QACpE,MAAMF,aAAa,CAAC;YAAEC,GAAG;YAAEC,UAAU,EAAEiB,OAAO;YAAEhB,cAAc;YAAEC,UAAU;SAAE,CAAC,CAAC;QAC9E,MAAMqB,CAAAA,GAAAA,IAAY,AAAqB,CAAA,aAArB,CAACN,OAAO,EAAEjB,UAAU,CAAC,CAAC;KACzC,MAAM;QACL,MAAMwB,CAAAA,GAAAA,IAAoB,AAA0B,CAAA,qBAA1B,CAACH,KAAI,QAAA,CAACI,OAAO,CAACzB,UAAU,CAAC,CAAC,CAAC;QACrD,MAAMF,aAAa,CAAC;YAAEC,GAAG;YAAEC,UAAU;YAAEC,cAAc;YAAEC,UAAU;SAAE,CAAC,CAAC;KACtE;CACF"}
1
+ {"version":3,"sources":["../../../src/utils/downloadAppAsync.ts"],"sourcesContent":["import fs from 'fs';\nimport fetch from 'node-fetch';\nimport path from 'path';\nimport { Stream } from 'stream';\nimport temporary from 'tempy';\nimport { promisify } from 'util';\n\nimport { createCachedFetch } from '../api/rest/client';\nimport { FetchLike, ProgressCallback } from '../api/rest/client.types';\nimport { wrapFetchWithProgress } from '../api/rest/wrapFetchWithProgress';\nimport { Log } from '../log';\nimport { ensureDirectoryAsync } from './dir';\nimport { CommandError } from './errors';\nimport { extractAsync } from './tar';\n\nconst TIMER_DURATION = 30000;\n\nconst pipeline = promisify(Stream.pipeline);\n\nasync function downloadAsync({\n url,\n outputPath,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}) {\n let fetchInstance: FetchLike = fetch;\n if (cacheDirectory) {\n // Reconstruct the cached fetch since caching could be disabled.\n fetchInstance = createCachedFetch({\n // We'll use a 1 week cache for versions so older values get flushed out eventually.\n ttl: 1000 * 60 * 60 * 24 * 7,\n // Users can also nuke their `~/.expo` directory to clear the cache.\n cacheDirectory,\n });\n }\n\n const res = await wrapFetchWithProgress(fetchInstance)(url, {\n timeout: TIMER_DURATION,\n onProgress,\n });\n if (!res.ok) {\n throw new CommandError(\n 'FILE_DOWNLOAD',\n `Unexpected response: ${res.statusText}. From url: ${url}`\n );\n }\n return pipeline(res.body, fs.createWriteStream(outputPath));\n}\n\nexport async function downloadAppAsync({\n url,\n outputPath,\n extract = false,\n cacheDirectory,\n onProgress,\n}: {\n url: string;\n outputPath: string;\n extract?: boolean;\n cacheDirectory?: string;\n onProgress?: ProgressCallback;\n}): Promise<void> {\n if (extract) {\n // For iOS we download the ipa to a file then pass that file into the extractor.\n // In the future we should just pipe the `res.body -> tar.extract` directly.\n // I tried this and it created some weird errors where observing the data stream\n // would corrupt the file causing tar to fail with `TAR_BAD_ARCHIVE`.\n const tmpPath = temporary.file({ name: path.basename(outputPath) });\n await downloadAsync({ url, outputPath: tmpPath, cacheDirectory, onProgress });\n Log.debug(`Extracting ${tmpPath} to ${outputPath}`);\n await ensureDirectoryAsync(outputPath);\n await extractAsync(tmpPath, outputPath);\n } else {\n await ensureDirectoryAsync(path.dirname(outputPath));\n await downloadAsync({ url, outputPath, cacheDirectory, onProgress });\n }\n}\n"],"names":["downloadAppAsync","TIMER_DURATION","pipeline","promisify","Stream","downloadAsync","url","outputPath","cacheDirectory","onProgress","fetchInstance","fetch","createCachedFetch","ttl","res","wrapFetchWithProgress","timeout","ok","CommandError","statusText","body","fs","createWriteStream","extract","tmpPath","temporary","file","name","path","basename","Log","debug","ensureDirectoryAsync","extractAsync","dirname"],"mappings":"AAAA;;;;QAsDsBA,gBAAgB,GAAhBA,gBAAgB;AAtDvB,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACD,IAAA,UAAY,kCAAZ,YAAY,EAAA;AACb,IAAA,KAAM,kCAAN,MAAM,EAAA;AACA,IAAA,OAAQ,WAAR,QAAQ,CAAA;AACT,IAAA,MAAO,kCAAP,OAAO,EAAA;AACH,IAAA,KAAM,WAAN,MAAM,CAAA;AAEE,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AAEhB,IAAA,sBAAmC,WAAnC,mCAAmC,CAAA;AACrD,IAAA,IAAQ,WAAR,QAAQ,CAAA;AACS,IAAA,IAAO,WAAP,OAAO,CAAA;AACf,IAAA,OAAU,WAAV,UAAU,CAAA;AACV,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;AAEpC,MAAMC,cAAc,GAAG,KAAK,AAAC;AAE7B,MAAMC,QAAQ,GAAGC,CAAAA,GAAAA,KAAS,AAAiB,CAAA,UAAjB,CAACC,OAAM,OAAA,CAACF,QAAQ,CAAC,AAAC;AAE5C,eAAeG,aAAa,CAAC,EAC3BC,GAAG,CAAA,EACHC,UAAU,CAAA,EACVC,cAAc,CAAA,EACdC,UAAU,CAAA,EAMX,EAAE;IACD,IAAIC,aAAa,GAAcC,UAAK,QAAA,AAAC;IACrC,IAAIH,cAAc,EAAE;QAClB,gEAAgE;QAChEE,aAAa,GAAGE,CAAAA,GAAAA,OAAiB,AAK/B,CAAA,kBAL+B,CAAC;YAChC,oFAAoF;YACpFC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAC5B,oEAAoE;YACpEL,cAAc;SACf,CAAC,CAAC;KACJ;IAED,MAAMM,GAAG,GAAG,MAAMC,CAAAA,GAAAA,sBAAqB,AAAe,CAAA,sBAAf,CAACL,aAAa,CAAC,CAACJ,GAAG,EAAE;QAC1DU,OAAO,EAAEf,cAAc;QACvBQ,UAAU;KACX,CAAC,AAAC;IACH,IAAI,CAACK,GAAG,CAACG,EAAE,EAAE;QACX,MAAM,IAAIC,OAAY,aAAA,CACpB,eAAe,EACf,CAAC,qBAAqB,EAAEJ,GAAG,CAACK,UAAU,CAAC,YAAY,EAAEb,GAAG,CAAC,CAAC,CAC3D,CAAC;KACH;IACD,OAAOJ,QAAQ,CAACY,GAAG,CAACM,IAAI,EAAEC,GAAE,QAAA,CAACC,iBAAiB,CAACf,UAAU,CAAC,CAAC,CAAC;CAC7D;AAEM,eAAeP,gBAAgB,CAAC,EACrCM,GAAG,CAAA,EACHC,UAAU,CAAA,EACVgB,OAAO,EAAG,KAAK,CAAA,EACff,cAAc,CAAA,EACdC,UAAU,CAAA,EAOX,EAAiB;IAChB,IAAIc,OAAO,EAAE;QACX,gFAAgF;QAChF,4EAA4E;QAC5E,gFAAgF;QAChF,qEAAqE;QACrE,MAAMC,OAAO,GAAGC,MAAS,QAAA,CAACC,IAAI,CAAC;YAAEC,IAAI,EAAEC,KAAI,QAAA,CAACC,QAAQ,CAACtB,UAAU,CAAC;SAAE,CAAC,AAAC;QACpE,MAAMF,aAAa,CAAC;YAAEC,GAAG;YAAEC,UAAU,EAAEiB,OAAO;YAAEhB,cAAc;YAAEC,UAAU;SAAE,CAAC,CAAC;QAC9EqB,IAAG,IAAA,CAACC,KAAK,CAAC,CAAC,WAAW,EAAEP,OAAO,CAAC,IAAI,EAAEjB,UAAU,CAAC,CAAC,CAAC,CAAC;QACpD,MAAMyB,CAAAA,GAAAA,IAAoB,AAAY,CAAA,qBAAZ,CAACzB,UAAU,CAAC,CAAC;QACvC,MAAM0B,CAAAA,GAAAA,IAAY,AAAqB,CAAA,aAArB,CAACT,OAAO,EAAEjB,UAAU,CAAC,CAAC;KACzC,MAAM;QACL,MAAMyB,CAAAA,GAAAA,IAAoB,AAA0B,CAAA,qBAA1B,CAACJ,KAAI,QAAA,CAACM,OAAO,CAAC3B,UAAU,CAAC,CAAC,CAAC;QACrD,MAAMF,aAAa,CAAC;YAAEC,GAAG;YAAEC,UAAU;YAAEC,cAAc;YAAEC,UAAU;SAAE,CAAC,CAAC;KACtE;CACF"}
@@ -9,6 +9,7 @@ var _progress = _interopRequireDefault(require("progress"));
9
9
  var _getVersions = require("../api/getVersions");
10
10
  var Log = _interopRequireWildcard(require("../log"));
11
11
  var _downloadAppAsync = require("./downloadAppAsync");
12
+ var _errors = require("./errors");
12
13
  var _profile = require("./profile");
13
14
  var _progress1 = require("./progress");
14
15
  function _interopRequireDefault(obj) {
@@ -39,19 +40,19 @@ function _interopRequireWildcard(obj) {
39
40
  }
40
41
  const platformSettings = {
41
42
  ios: {
42
- versionsKey: "iosUrl",
43
+ versionsKey: "iosClientUrl",
43
44
  getFilePath: (filename)=>_path.default.join((0, _getUserState).getExpoHomeDirectory(), "ios-simulator-app-cache", `${filename}.app`)
44
45
  ,
45
46
  shouldExtractResults: true
46
47
  },
47
48
  android: {
48
- versionsKey: "androidUrl",
49
+ versionsKey: "androidClientUrl",
49
50
  getFilePath: (filename)=>_path.default.join((0, _getUserState).getExpoHomeDirectory(), "android-apk-cache", `${filename}.apk`)
50
51
  ,
51
52
  shouldExtractResults: false
52
53
  }
53
54
  };
54
- async function downloadExpoGoAsync(platform, { url } = {}) {
55
+ async function downloadExpoGoAsync(platform, { url , sdkVersion }) {
55
56
  const { getFilePath , versionsKey , shouldExtractResults } = platformSettings[platform];
56
57
  const bar = new _progress.default("Downloading the Expo Go app [:bar] :percent :etas", {
57
58
  width: 64,
@@ -63,8 +64,13 @@ async function downloadExpoGoAsync(platform, { url } = {}) {
63
64
  // TODO: Auto track progress
64
65
  (0, _progress1).setProgressBar(bar);
65
66
  if (!url) {
66
- const versions = await (0, _getVersions).getVersionsAsync();
67
- url = versions[versionsKey];
67
+ if (!sdkVersion) {
68
+ throw new _errors.CommandError(`Unable to determine which Expo Go version to install (platform: ${platform})`);
69
+ }
70
+ const versions = await (0, _getVersions).getReleasedVersionsAsync();
71
+ const version = versions[sdkVersion];
72
+ Log.debug(`Installing Expo Go version for SDK ${sdkVersion} at URL: ${version[versionsKey]}`);
73
+ url = version[versionsKey];
68
74
  }
69
75
  const filename = _path.default.parse(url).name;
70
76
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/downloadExpoGoAsync.ts"],"sourcesContent":["import { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport path from 'path';\nimport ProgressBar from 'progress';\n\nimport { getVersionsAsync } from '../api/getVersions';\nimport * as Log from '../log';\nimport { downloadAppAsync } from './downloadAppAsync';\nimport { profile } from './profile';\nimport { setProgressBar } from './progress';\n\nconst platformSettings: Record<\n string,\n {\n shouldExtractResults: boolean;\n versionsKey: keyof Awaited<ReturnType<typeof getVersionsAsync>>;\n getFilePath: (filename: string) => string;\n }\n> = {\n ios: {\n versionsKey: 'iosUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'ios-simulator-app-cache', `${filename}.app`),\n shouldExtractResults: true,\n },\n android: {\n versionsKey: 'androidUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'android-apk-cache', `${filename}.apk`),\n shouldExtractResults: false,\n },\n};\n\n/** Download the Expo Go app from the Expo servers (if only it was this easy for every app). */\nexport async function downloadExpoGoAsync(\n platform: keyof typeof platformSettings,\n {\n url,\n }: {\n url?: string;\n } = {}\n): Promise<string> {\n const { getFilePath, versionsKey, shouldExtractResults } = platformSettings[platform];\n\n const bar = new ProgressBar('Downloading the Expo Go app [:bar] :percent :etas', {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n // TODO: Auto track progress\n setProgressBar(bar);\n\n if (!url) {\n const versions = await getVersionsAsync();\n url = versions[versionsKey] as string;\n }\n\n const filename = path.parse(url).name;\n\n try {\n const outputPath = getFilePath(filename);\n Log.debug(`Downloading Expo Go from \"${url}\" to \"${outputPath}\".`);\n Log.debug(\n `The requested copy of Expo Go might already be cached in: \"${getExpoHomeDirectory()}\". You can disable the cache with EXPO_NO_CACHE=1`\n );\n await profile(downloadAppAsync)({\n url,\n // Save all encrypted cache data to `~/.expo/expo-go`\n cacheDirectory: 'expo-go',\n outputPath,\n extract: shouldExtractResults,\n onProgress({ progress }) {\n if (bar) {\n bar.tick(1, progress);\n }\n },\n });\n return outputPath;\n } finally {\n bar.terminate();\n setProgressBar(null);\n }\n}\n"],"names":["downloadExpoGoAsync","Log","platformSettings","ios","versionsKey","getFilePath","filename","path","join","getExpoHomeDirectory","shouldExtractResults","android","platform","url","bar","ProgressBar","width","total","clear","complete","incomplete","setProgressBar","versions","getVersionsAsync","parse","name","outputPath","debug","profile","downloadAppAsync","cacheDirectory","extract","onProgress","progress","tick","terminate"],"mappings":"AAAA;;;;QAiCsBA,mBAAmB,GAAnBA,mBAAmB;AAjCJ,IAAA,aAAiC,WAAjC,iCAAiC,CAAA;AACrD,IAAA,KAAM,kCAAN,MAAM,EAAA;AACC,IAAA,SAAU,kCAAV,UAAU,EAAA;AAED,IAAA,YAAoB,WAApB,oBAAoB,CAAA;AACzCC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACkB,IAAA,iBAAoB,WAApB,oBAAoB,CAAA;AAC7B,IAAA,QAAW,WAAX,WAAW,CAAA;AACJ,IAAA,UAAY,WAAZ,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE3C,MAAMC,gBAAgB,GAOlB;IACFC,GAAG,EAAE;QACHC,WAAW,EAAE,QAAQ;QACrBC,WAAW,EAAE,CAACC,QAAQ,GACpBC,KAAI,QAAA,CAACC,IAAI,CAACC,CAAAA,GAAAA,aAAoB,AAAE,CAAA,qBAAF,EAAE,EAAE,yBAAyB,EAAE,CAAC,EAAEH,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAA;QACjFI,oBAAoB,EAAE,IAAI;KAC3B;IACDC,OAAO,EAAE;QACPP,WAAW,EAAE,YAAY;QACzBC,WAAW,EAAE,CAACC,QAAQ,GACpBC,KAAI,QAAA,CAACC,IAAI,CAACC,CAAAA,GAAAA,aAAoB,AAAE,CAAA,qBAAF,EAAE,EAAE,mBAAmB,EAAE,CAAC,EAAEH,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAA;QAC3EI,oBAAoB,EAAE,KAAK;KAC5B;CACF,AAAC;AAGK,eAAeV,mBAAmB,CACvCY,QAAuC,EACvC,EACEC,GAAG,CAAA,EAGJ,GAAG,EAAE,EACW;IACjB,MAAM,EAAER,WAAW,CAAA,EAAED,WAAW,CAAA,EAAEM,oBAAoB,CAAA,EAAE,GAAGR,gBAAgB,CAACU,QAAQ,CAAC,AAAC;IAEtF,MAAME,GAAG,GAAG,IAAIC,SAAW,QAAA,CAAC,mDAAmD,EAAE;QAC/EC,KAAK,EAAE,EAAE;QACTC,KAAK,EAAE,GAAG;QACVC,KAAK,EAAE,IAAI;QACXC,QAAQ,EAAE,GAAG;QACbC,UAAU,EAAE,GAAG;KAChB,CAAC,AAAC;IACH,4BAA4B;IAC5BC,CAAAA,GAAAA,UAAc,AAAK,CAAA,eAAL,CAACP,GAAG,CAAC,CAAC;IAEpB,IAAI,CAACD,GAAG,EAAE;QACR,MAAMS,QAAQ,GAAG,MAAMC,CAAAA,GAAAA,YAAgB,AAAE,CAAA,iBAAF,EAAE,AAAC;QAC1CV,GAAG,GAAGS,QAAQ,CAAClB,WAAW,CAAC,AAAU,CAAC;KACvC;IAED,MAAME,QAAQ,GAAGC,KAAI,QAAA,CAACiB,KAAK,CAACX,GAAG,CAAC,CAACY,IAAI,AAAC;IAEtC,IAAI;QACF,MAAMC,UAAU,GAAGrB,WAAW,CAACC,QAAQ,CAAC,AAAC;QACzCL,GAAG,CAAC0B,KAAK,CAAC,CAAC,0BAA0B,EAAEd,GAAG,CAAC,MAAM,EAAEa,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACnEzB,GAAG,CAAC0B,KAAK,CACP,CAAC,2DAA2D,EAAElB,CAAAA,GAAAA,aAAoB,AAAE,CAAA,qBAAF,EAAE,CAAC,iDAAiD,CAAC,CACxI,CAAC;QACF,MAAMmB,CAAAA,GAAAA,QAAO,AAAkB,CAAA,QAAlB,CAACC,iBAAgB,iBAAA,CAAC,CAAC;YAC9BhB,GAAG;YACH,qDAAqD;YACrDiB,cAAc,EAAE,SAAS;YACzBJ,UAAU;YACVK,OAAO,EAAErB,oBAAoB;YAC7BsB,UAAU,EAAC,EAAEC,QAAQ,CAAA,EAAE,EAAE;gBACvB,IAAInB,GAAG,EAAE;oBACPA,GAAG,CAACoB,IAAI,CAAC,CAAC,EAAED,QAAQ,CAAC,CAAC;iBACvB;aACF;SACF,CAAC,CAAC;QACH,OAAOP,UAAU,CAAC;KACnB,QAAS;QACRZ,GAAG,CAACqB,SAAS,EAAE,CAAC;QAChBd,CAAAA,GAAAA,UAAc,AAAM,CAAA,eAAN,CAAC,IAAI,CAAC,CAAC;KACtB;CACF"}
1
+ {"version":3,"sources":["../../../src/utils/downloadExpoGoAsync.ts"],"sourcesContent":["import { getExpoHomeDirectory } from '@expo/config/build/getUserState';\nimport path from 'path';\nimport ProgressBar from 'progress';\n\nimport { getReleasedVersionsAsync, SDKVersion } from '../api/getVersions';\nimport * as Log from '../log';\nimport { downloadAppAsync } from './downloadAppAsync';\nimport { CommandError } from './errors';\nimport { profile } from './profile';\nimport { setProgressBar } from './progress';\n\nconst platformSettings: Record<\n string,\n {\n shouldExtractResults: boolean;\n versionsKey: keyof SDKVersion;\n getFilePath: (filename: string) => string;\n }\n> = {\n ios: {\n versionsKey: 'iosClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'ios-simulator-app-cache', `${filename}.app`),\n shouldExtractResults: true,\n },\n android: {\n versionsKey: 'androidClientUrl',\n getFilePath: (filename) =>\n path.join(getExpoHomeDirectory(), 'android-apk-cache', `${filename}.apk`),\n shouldExtractResults: false,\n },\n};\n\n/** Download the Expo Go app from the Expo servers (if only it was this easy for every app). */\nexport async function downloadExpoGoAsync(\n platform: keyof typeof platformSettings,\n {\n url,\n sdkVersion,\n }: {\n url?: string;\n sdkVersion?: string;\n }\n): Promise<string> {\n const { getFilePath, versionsKey, shouldExtractResults } = platformSettings[platform];\n\n const bar = new ProgressBar('Downloading the Expo Go app [:bar] :percent :etas', {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n // TODO: Auto track progress\n setProgressBar(bar);\n\n if (!url) {\n if (!sdkVersion) {\n throw new CommandError(\n `Unable to determine which Expo Go version to install (platform: ${platform})`\n );\n }\n const versions = await getReleasedVersionsAsync();\n const version = versions[sdkVersion];\n Log.debug(`Installing Expo Go version for SDK ${sdkVersion} at URL: ${version[versionsKey]}`);\n url = version[versionsKey] as string;\n }\n\n const filename = path.parse(url).name;\n\n try {\n const outputPath = getFilePath(filename);\n Log.debug(`Downloading Expo Go from \"${url}\" to \"${outputPath}\".`);\n Log.debug(\n `The requested copy of Expo Go might already be cached in: \"${getExpoHomeDirectory()}\". You can disable the cache with EXPO_NO_CACHE=1`\n );\n await profile(downloadAppAsync)({\n url,\n // Save all encrypted cache data to `~/.expo/expo-go`\n cacheDirectory: 'expo-go',\n outputPath,\n extract: shouldExtractResults,\n onProgress({ progress }) {\n if (bar) {\n bar.tick(1, progress);\n }\n },\n });\n return outputPath;\n } finally {\n bar.terminate();\n setProgressBar(null);\n }\n}\n"],"names":["downloadExpoGoAsync","Log","platformSettings","ios","versionsKey","getFilePath","filename","path","join","getExpoHomeDirectory","shouldExtractResults","android","platform","url","sdkVersion","bar","ProgressBar","width","total","clear","complete","incomplete","setProgressBar","CommandError","versions","getReleasedVersionsAsync","version","debug","parse","name","outputPath","profile","downloadAppAsync","cacheDirectory","extract","onProgress","progress","tick","terminate"],"mappings":"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"}
@@ -52,6 +52,9 @@ class Env {
52
52
  /** The React Metro port that's baked into react-native scripts and tools. */ get RCT_METRO_PORT() {
53
53
  return (0, _getenv).int("RCT_METRO_PORT", 0);
54
54
  }
55
+ /** Skip validating the manifest during `export`. */ get EXPO_SKIP_MANIFEST_VALIDATION_TOKEN() {
56
+ return !!(0, _getenv).string("EXPO_SKIP_MANIFEST_VALIDATION_TOKEN");
57
+ }
55
58
  }
56
59
  const env = new Env();
57
60
  exports.env = env;
@@ -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}\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","env"],"mappings":"AAAA;;;;;AAAqC,IAAA,OAAQ,WAAR,QAAQ,CAAA;AAE7C,mFAAmF;AAEnF,6CAA6C;AAE7C,MAAMA,GAAG;IACP,+BAA+B,CAC/B,IAAIC,YAAY,GAAG;QACjB,OAAOC,CAAAA,GAAAA,OAAO,AAAuB,CAAA,QAAvB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;KACvC;IAED,2BAA2B,CAC3B,IAAIC,UAAU,GAAG;QACf,OAAOD,CAAAA,GAAAA,OAAO,AAAqB,CAAA,QAArB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;KACrC;IAED,wGAAwG,CACxG,IAAIE,SAAS,GAAG;QACd,OAAOF,CAAAA,GAAAA,OAAO,AAAoB,CAAA,QAApB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KACpC;IAED,qCAAqC,CACrC,IAAIG,YAAY,GAAG;QACjB,OAAOH,CAAAA,GAAAA,OAAO,AAAuB,CAAA,QAAvB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;KACvC;IAED,mCAAmC,CACnC,IAAII,UAAU,GAAG;QACf,OAAOJ,CAAAA,GAAAA,OAAO,AAAqB,CAAA,QAArB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;KACrC;IAED,4CAA4C,CAC5C,IAAIK,EAAE,GAAG;QACP,OAAOL,CAAAA,GAAAA,OAAO,AAAa,CAAA,QAAb,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC7B;IAED,oCAAoC,CACpC,IAAIM,iBAAiB,GAAG;QACtB,OAAON,CAAAA,GAAAA,OAAO,AAA4B,CAAA,QAA5B,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;KAC5C;IAED,+DAA+D,CAC/D,IAAIO,iBAAiB,GAAG;QACtB,OAAOC,CAAAA,GAAAA,OAAM,AAAyB,CAAA,OAAzB,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;KACxC;IAED,8CAA8C,CAC9C,IAAIC,QAAQ,GAAG;QACb,OAAOD,CAAAA,GAAAA,OAAM,AAAuB,CAAA,OAAvB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;KACtC;IAED,kDAAkD,CAClD,IAAIE,kBAAkB,GAAG;QACvB,OAAOV,CAAAA,GAAAA,OAAO,AAA6B,CAAA,QAA7B,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;KAC7C;IACD,6BAA6B,CAC7B,IAAIW,iBAAiB,GAAG;QACtB,OAAOX,CAAAA,GAAAA,OAAO,AAA4B,CAAA,QAA5B,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;KAC5C;IACD,oCAAoC,CACpC,IAAIY,wBAAwB,GAAG;QAC7B,OAAOZ,CAAAA,GAAAA,OAAO,AAAmC,CAAA,QAAnC,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;KACnD;IACD,+DAA+D,CAC/D,IAAIa,aAAa,GAAG;QAClB,OAAOb,CAAAA,GAAAA,OAAO,AAAwB,CAAA,QAAxB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;KACxC;IACD,4DAA4D,CAC5D,IAAIc,6BAA6B,GAAG;QAClC,OAAOd,CAAAA,GAAAA,OAAO,AAAwC,CAAA,QAAxC,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;KACxD;IACD,6EAA6E,CAC7E,IAAIe,cAAc,GAAG;QACnB,OAAOC,CAAAA,GAAAA,OAAG,AAAqB,CAAA,IAArB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;KACjC;CACF;AAEM,MAAMC,GAAG,GAAG,IAAInB,GAAG,EAAE,AAAC;QAAhBmB,GAAG,GAAHA,GAAG"}
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\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","env"],"mappings":"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"}