@expo/cli 0.1.3 → 0.1.6

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 (108) hide show
  1. package/build/bin/cli +8 -2
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/export/index.js +1 -0
  4. package/build/src/export/index.js.map +1 -1
  5. package/build/src/run/android/runAndroidAsync.js +3 -3
  6. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  7. package/build/src/run/ensureNativeProject.js +3 -0
  8. package/build/src/run/ensureNativeProject.js.map +1 -1
  9. package/build/src/run/hints.js +1 -1
  10. package/build/src/run/hints.js.map +1 -1
  11. package/build/src/run/ios/XcodeBuild.js +275 -0
  12. package/build/src/run/ios/XcodeBuild.js.map +1 -0
  13. package/build/src/run/ios/XcodeBuild.types.js +6 -0
  14. package/build/src/run/ios/XcodeBuild.types.js.map +1 -0
  15. package/build/src/run/ios/appleDevice/AppleDevice.js +161 -0
  16. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -0
  17. package/build/src/run/ios/appleDevice/ClientManager.js +161 -0
  18. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -0
  19. package/build/src/run/ios/appleDevice/client/AFCClient.js +195 -0
  20. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -0
  21. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +107 -0
  22. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -0
  23. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +97 -0
  24. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -0
  25. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +140 -0
  26. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -0
  27. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +91 -0
  28. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -0
  29. package/build/src/run/ios/appleDevice/client/ServiceClient.js +21 -0
  30. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -0
  31. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +117 -0
  32. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -0
  33. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +90 -0
  34. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -0
  35. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +332 -0
  36. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -0
  37. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +115 -0
  38. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -0
  39. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +126 -0
  40. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -0
  41. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +74 -0
  42. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -0
  43. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +65 -0
  44. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -0
  45. package/build/src/run/ios/codeSigning/Security.js +85 -0
  46. package/build/src/run/ios/codeSigning/Security.js.map +1 -0
  47. package/build/src/run/ios/codeSigning/configureCodeSigning.js +77 -0
  48. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -0
  49. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +102 -0
  50. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -0
  51. package/build/src/run/ios/codeSigning/settings.js +21 -0
  52. package/build/src/run/ios/codeSigning/settings.js.map +1 -0
  53. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +76 -0
  54. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -0
  55. package/build/src/run/ios/index.js +98 -0
  56. package/build/src/run/ios/index.js.map +1 -0
  57. package/build/src/run/ios/launchApp.js +75 -0
  58. package/build/src/run/ios/launchApp.js.map +1 -0
  59. package/build/src/run/ios/options/promptDevice.js +50 -0
  60. package/build/src/run/ios/options/promptDevice.js.map +1 -0
  61. package/build/src/run/ios/options/resolveDevice.js +92 -0
  62. package/build/src/run/ios/options/resolveDevice.js.map +1 -0
  63. package/build/src/run/ios/options/resolveNativeScheme.js +92 -0
  64. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -0
  65. package/build/src/run/ios/options/resolveOptions.js +44 -0
  66. package/build/src/run/ios/options/resolveOptions.js.map +1 -0
  67. package/build/src/run/ios/options/resolveXcodeProject.js +39 -0
  68. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -0
  69. package/build/src/run/ios/runIosAsync.js +85 -0
  70. package/build/src/run/ios/runIosAsync.js.map +1 -0
  71. package/build/src/run/resolveBundlerProps.js +9 -6
  72. package/build/src/run/resolveBundlerProps.js.map +1 -1
  73. package/build/src/run/startBundler.js +4 -2
  74. package/build/src/run/startBundler.js.map +1 -1
  75. package/build/src/start/doctor/Prerequisite.js +4 -4
  76. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  77. package/build/src/start/doctor/SecurityBinPrerequisite.js +27 -0
  78. package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -0
  79. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +69 -0
  80. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -0
  81. package/build/src/start/platforms/android/emulator.js +8 -0
  82. package/build/src/start/platforms/android/emulator.js.map +1 -1
  83. package/build/src/start/platforms/android/promptAndroidDevice.js +1 -5
  84. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  85. package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -1
  86. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  87. package/build/src/start/platforms/ios/promptAppleDevice.js +1 -5
  88. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  89. package/build/src/start/platforms/ios/simctl.js +14 -0
  90. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  91. package/build/src/start/platforms/ios/simctlLogging.js +220 -0
  92. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -0
  93. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  94. package/build/src/utils/analytics/rudderstackClient.js +30 -3
  95. package/build/src/utils/analytics/rudderstackClient.js.map +1 -1
  96. package/build/src/utils/cocoapods.js +47 -0
  97. package/build/src/utils/cocoapods.js.map +1 -1
  98. package/build/src/utils/dir.js +6 -1
  99. package/build/src/utils/dir.js.map +1 -1
  100. package/build/src/utils/plist.js +59 -0
  101. package/build/src/utils/plist.js.map +1 -0
  102. package/build/src/utils/prompts.js +16 -0
  103. package/build/src/utils/prompts.js.map +1 -1
  104. package/build/src/utils/resolveArgs.js +4 -1
  105. package/build/src/utils/resolveArgs.js.map +1 -1
  106. package/build/src/utils/terminal.js +10 -0
  107. package/build/src/utils/terminal.js.map +1 -0
  108. package/package.json +7 -7
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.hasPackageJsonDependencyListChangedAsync = hasPackageJsonDependencyListChangedAsync;
6
6
  exports.installCocoaPodsAsync = installCocoaPodsAsync;
7
+ exports.maybePromptToSyncPodsAsync = maybePromptToSyncPodsAsync;
7
8
  var _config = require("@expo/config");
8
9
  var _jsonFile = _interopRequireDefault(require("@expo/json-file"));
9
10
  var PackageManager = _interopRequireWildcard(require("@expo/package-manager"));
@@ -14,6 +15,7 @@ var Log = _interopRequireWildcard(require("../log"));
14
15
  var _updatePackageJson = require("../prebuild/updatePackageJson");
15
16
  var _dir = require("./dir");
16
17
  var _env = require("./env");
18
+ var _errors = require("./errors");
17
19
  var _ora = require("./ora");
18
20
  function _interopRequireDefault(obj) {
19
21
  return obj && obj.__esModule ? obj : {
@@ -139,5 +141,50 @@ async function installCocoaPodsAsync(projectRoot) {
139
141
  return false;
140
142
  }
141
143
  }
144
+ function doesProjectUseCocoaPods(projectRoot) {
145
+ return _fs.default.existsSync(_path.default.join(projectRoot, "ios", "Podfile"));
146
+ }
147
+ function isLockfileCreated(projectRoot) {
148
+ const podfileLockPath = _path.default.join(projectRoot, "ios", "Podfile.lock");
149
+ return _fs.default.existsSync(podfileLockPath);
150
+ }
151
+ function isPodFolderCreated(projectRoot) {
152
+ const podFolderPath = _path.default.join(projectRoot, "ios", "Pods");
153
+ return _fs.default.existsSync(podFolderPath);
154
+ }
155
+ async function maybePromptToSyncPodsAsync(projectRoot) {
156
+ if (!doesProjectUseCocoaPods(projectRoot)) {
157
+ // Project does not use CocoaPods
158
+ return;
159
+ }
160
+ if (!isLockfileCreated(projectRoot) || !isPodFolderCreated(projectRoot)) {
161
+ if (!await installCocoaPodsAsync(projectRoot)) {
162
+ throw new _errors.AbortCommandError();
163
+ }
164
+ return;
165
+ }
166
+ // Getting autolinked packages can be heavy, optimize around checking every time.
167
+ if (!await hasPackageJsonDependencyListChangedAsync(projectRoot)) {
168
+ return;
169
+ }
170
+ await promptToInstallPodsAsync(projectRoot, []);
171
+ }
172
+ async function promptToInstallPodsAsync(projectRoot, missingPods) {
173
+ if (missingPods == null ? void 0 : missingPods.length) {
174
+ Log.log(`Could not find the following native modules: ${missingPods.map((pod)=>_chalk.default.bold(pod)
175
+ ).join(", ")}. Did you forget to run "${_chalk.default.bold("pod install")}" ?`);
176
+ }
177
+ try {
178
+ if (!await installCocoaPodsAsync(projectRoot)) {
179
+ throw new _errors.AbortCommandError();
180
+ }
181
+ } catch (error) {
182
+ await _fs.default.promises.rm(_path.default.join(getTempPrebuildFolder(projectRoot), CACHED_PACKAGE_JSON), {
183
+ recursive: true,
184
+ force: true
185
+ });
186
+ throw error;
187
+ }
188
+ }
142
189
 
143
190
  //# sourceMappingURL=cocoapods.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/cocoapods.ts"],"sourcesContent":["import { getPackageJson, PackageJSONConfig } from '@expo/config';\nimport JsonFile from '@expo/json-file';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { hashForDependencyMap } from '../prebuild/updatePackageJson';\nimport { ensureDirectoryAsync } from './dir';\nimport { env } from './env';\nimport { logNewSection } from './ora';\n\ntype PackageChecksums = {\n /** checksum for the `package.json` dependency object. */\n dependencies: string;\n /** checksum for the `package.json` devDependency object. */\n devDependencies: string;\n};\n\nconst PROJECT_PREBUILD_SETTINGS = '.expo/prebuild';\nconst CACHED_PACKAGE_JSON = 'cached-packages.json';\n\nfunction getTempPrebuildFolder(projectRoot: string): string {\n return path.join(projectRoot, PROJECT_PREBUILD_SETTINGS);\n}\n\nfunction hasNewDependenciesSinceLastBuild(\n projectRoot: string,\n packageChecksums: PackageChecksums\n): boolean {\n // TODO: Maybe comparing lock files would be better...\n const templateDirectory = getTempPrebuildFolder(projectRoot);\n const tempPkgJsonPath = path.join(templateDirectory, CACHED_PACKAGE_JSON);\n if (!fs.existsSync(tempPkgJsonPath)) {\n return true;\n }\n const { dependencies, devDependencies } = JsonFile.read(tempPkgJsonPath);\n // Only change the dependencies if the normalized hash changes, this helps to reduce meaningless changes.\n const hasNewDependencies = packageChecksums.dependencies !== dependencies;\n const hasNewDevDependencies = packageChecksums.devDependencies !== devDependencies;\n\n return hasNewDependencies || hasNewDevDependencies;\n}\n\nfunction createPackageChecksums(pkg: PackageJSONConfig): PackageChecksums {\n return {\n dependencies: hashForDependencyMap(pkg.dependencies || {}),\n devDependencies: hashForDependencyMap(pkg.devDependencies || {}),\n };\n}\n\n/** @returns `true` if the package.json dependency hash does not match the cached hash from the last run. */\nexport async function hasPackageJsonDependencyListChangedAsync(\n projectRoot: string\n): Promise<boolean> {\n const pkg = getPackageJson(projectRoot);\n\n const packages = createPackageChecksums(pkg);\n const hasNewDependencies = hasNewDependenciesSinceLastBuild(projectRoot, packages);\n\n // Cache package.json\n await ensureDirectoryAsync(getTempPrebuildFolder(projectRoot));\n const templateDirectory = path.join(getTempPrebuildFolder(projectRoot), CACHED_PACKAGE_JSON);\n await JsonFile.writeAsync(templateDirectory, packages);\n\n return hasNewDependencies;\n}\n\nexport async function installCocoaPodsAsync(projectRoot: string): Promise<boolean> {\n let step = logNewSection('Installing CocoaPods...');\n if (process.platform !== 'darwin') {\n step.succeed('Skipped installing CocoaPods because operating system is not on macOS.');\n return false;\n }\n\n const packageManager = new PackageManager.CocoaPodsPackageManager({\n cwd: path.join(projectRoot, 'ios'),\n silent: !env.EXPO_DEBUG,\n });\n\n if (!(await packageManager.isCLIInstalledAsync())) {\n try {\n // prompt user -- do you want to install cocoapods right now?\n step.text = 'CocoaPods CLI not found in your PATH, installing it now.';\n step.stopAndPersist();\n await PackageManager.CocoaPodsPackageManager.installCLIAsync({\n nonInteractive: true,\n spawnOptions: {\n ...packageManager.options,\n // Don't silence this part\n stdio: ['inherit', 'inherit', 'pipe'],\n },\n });\n step.succeed('Installed CocoaPods CLI.');\n step = logNewSection('Running `pod install` in the `ios` directory.');\n } catch (error: any) {\n step.stopAndPersist({\n symbol: '⚠️ ',\n text: chalk.red('Unable to install the CocoaPods CLI.'),\n });\n if (error instanceof PackageManager.CocoaPodsError) {\n Log.log(error.message);\n } else {\n Log.log(`Unknown error: ${error.message}`);\n }\n return false;\n }\n }\n\n try {\n await packageManager.installAsync({ spinner: step });\n // Create cached list for later\n await hasPackageJsonDependencyListChangedAsync(projectRoot).catch(() => null);\n step.succeed('Installed pods and initialized Xcode workspace.');\n return true;\n } catch (error: any) {\n step.stopAndPersist({\n symbol: '⚠️ ',\n text: chalk.red('Something went wrong running `pod install` in the `ios` directory.'),\n });\n if (error instanceof PackageManager.CocoaPodsError) {\n Log.log(error.message);\n } else {\n Log.log(`Unknown error: ${error.message}`);\n }\n return false;\n }\n}\n"],"names":["hasPackageJsonDependencyListChangedAsync","installCocoaPodsAsync","PackageManager","Log","PROJECT_PREBUILD_SETTINGS","CACHED_PACKAGE_JSON","getTempPrebuildFolder","projectRoot","path","join","hasNewDependenciesSinceLastBuild","packageChecksums","templateDirectory","tempPkgJsonPath","fs","existsSync","dependencies","devDependencies","JsonFile","read","hasNewDependencies","hasNewDevDependencies","createPackageChecksums","pkg","hashForDependencyMap","getPackageJson","packages","ensureDirectoryAsync","writeAsync","step","logNewSection","process","platform","succeed","packageManager","CocoaPodsPackageManager","cwd","silent","env","EXPO_DEBUG","isCLIInstalledAsync","text","stopAndPersist","installCLIAsync","nonInteractive","spawnOptions","options","stdio","error","symbol","chalk","red","CocoaPodsError","log","message","installAsync","spinner","catch"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/cocoapods.ts"],"sourcesContent":["import { getPackageJson, PackageJSONConfig } from '@expo/config';\nimport JsonFile from '@expo/json-file';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { hashForDependencyMap } from '../prebuild/updatePackageJson';\nimport { ensureDirectoryAsync } from './dir';\nimport { env } from './env';\nimport { AbortCommandError } from './errors';\nimport { logNewSection } from './ora';\n\ntype PackageChecksums = {\n /** checksum for the `package.json` dependency object. */\n dependencies: string;\n /** checksum for the `package.json` devDependency object. */\n devDependencies: string;\n};\n\nconst PROJECT_PREBUILD_SETTINGS = '.expo/prebuild';\nconst CACHED_PACKAGE_JSON = 'cached-packages.json';\n\nfunction getTempPrebuildFolder(projectRoot: string): string {\n return path.join(projectRoot, PROJECT_PREBUILD_SETTINGS);\n}\n\nfunction hasNewDependenciesSinceLastBuild(\n projectRoot: string,\n packageChecksums: PackageChecksums\n): boolean {\n // TODO: Maybe comparing lock files would be better...\n const templateDirectory = getTempPrebuildFolder(projectRoot);\n const tempPkgJsonPath = path.join(templateDirectory, CACHED_PACKAGE_JSON);\n if (!fs.existsSync(tempPkgJsonPath)) {\n return true;\n }\n const { dependencies, devDependencies } = JsonFile.read(tempPkgJsonPath);\n // Only change the dependencies if the normalized hash changes, this helps to reduce meaningless changes.\n const hasNewDependencies = packageChecksums.dependencies !== dependencies;\n const hasNewDevDependencies = packageChecksums.devDependencies !== devDependencies;\n\n return hasNewDependencies || hasNewDevDependencies;\n}\n\nfunction createPackageChecksums(pkg: PackageJSONConfig): PackageChecksums {\n return {\n dependencies: hashForDependencyMap(pkg.dependencies || {}),\n devDependencies: hashForDependencyMap(pkg.devDependencies || {}),\n };\n}\n\n/** @returns `true` if the package.json dependency hash does not match the cached hash from the last run. */\nexport async function hasPackageJsonDependencyListChangedAsync(\n projectRoot: string\n): Promise<boolean> {\n const pkg = getPackageJson(projectRoot);\n\n const packages = createPackageChecksums(pkg);\n const hasNewDependencies = hasNewDependenciesSinceLastBuild(projectRoot, packages);\n\n // Cache package.json\n await ensureDirectoryAsync(getTempPrebuildFolder(projectRoot));\n const templateDirectory = path.join(getTempPrebuildFolder(projectRoot), CACHED_PACKAGE_JSON);\n await JsonFile.writeAsync(templateDirectory, packages);\n\n return hasNewDependencies;\n}\n\nexport async function installCocoaPodsAsync(projectRoot: string): Promise<boolean> {\n let step = logNewSection('Installing CocoaPods...');\n if (process.platform !== 'darwin') {\n step.succeed('Skipped installing CocoaPods because operating system is not on macOS.');\n return false;\n }\n\n const packageManager = new PackageManager.CocoaPodsPackageManager({\n cwd: path.join(projectRoot, 'ios'),\n silent: !env.EXPO_DEBUG,\n });\n\n if (!(await packageManager.isCLIInstalledAsync())) {\n try {\n // prompt user -- do you want to install cocoapods right now?\n step.text = 'CocoaPods CLI not found in your PATH, installing it now.';\n step.stopAndPersist();\n await PackageManager.CocoaPodsPackageManager.installCLIAsync({\n nonInteractive: true,\n spawnOptions: {\n ...packageManager.options,\n // Don't silence this part\n stdio: ['inherit', 'inherit', 'pipe'],\n },\n });\n step.succeed('Installed CocoaPods CLI.');\n step = logNewSection('Running `pod install` in the `ios` directory.');\n } catch (error: any) {\n step.stopAndPersist({\n symbol: '⚠️ ',\n text: chalk.red('Unable to install the CocoaPods CLI.'),\n });\n if (error instanceof PackageManager.CocoaPodsError) {\n Log.log(error.message);\n } else {\n Log.log(`Unknown error: ${error.message}`);\n }\n return false;\n }\n }\n\n try {\n await packageManager.installAsync({ spinner: step });\n // Create cached list for later\n await hasPackageJsonDependencyListChangedAsync(projectRoot).catch(() => null);\n step.succeed('Installed pods and initialized Xcode workspace.');\n return true;\n } catch (error: any) {\n step.stopAndPersist({\n symbol: '⚠️ ',\n text: chalk.red('Something went wrong running `pod install` in the `ios` directory.'),\n });\n if (error instanceof PackageManager.CocoaPodsError) {\n Log.log(error.message);\n } else {\n Log.log(`Unknown error: ${error.message}`);\n }\n return false;\n }\n}\n\nfunction doesProjectUseCocoaPods(projectRoot: string): boolean {\n return fs.existsSync(path.join(projectRoot, 'ios', 'Podfile'));\n}\n\nfunction isLockfileCreated(projectRoot: string): boolean {\n const podfileLockPath = path.join(projectRoot, 'ios', 'Podfile.lock');\n return fs.existsSync(podfileLockPath);\n}\n\nfunction isPodFolderCreated(projectRoot: string): boolean {\n const podFolderPath = path.join(projectRoot, 'ios', 'Pods');\n return fs.existsSync(podFolderPath);\n}\n\n// TODO: Same process but with app.config changes + default plugins.\n// This will ensure the user is prompted for extra setup.\nexport async function maybePromptToSyncPodsAsync(projectRoot: string) {\n if (!doesProjectUseCocoaPods(projectRoot)) {\n // Project does not use CocoaPods\n return;\n }\n if (!isLockfileCreated(projectRoot) || !isPodFolderCreated(projectRoot)) {\n if (!(await installCocoaPodsAsync(projectRoot))) {\n throw new AbortCommandError();\n }\n return;\n }\n\n // Getting autolinked packages can be heavy, optimize around checking every time.\n if (!(await hasPackageJsonDependencyListChangedAsync(projectRoot))) {\n return;\n }\n\n await promptToInstallPodsAsync(projectRoot, []);\n}\n\nasync function promptToInstallPodsAsync(projectRoot: string, missingPods?: string[]) {\n if (missingPods?.length) {\n Log.log(\n `Could not find the following native modules: ${missingPods\n .map((pod) => chalk.bold(pod))\n .join(', ')}. Did you forget to run \"${chalk.bold('pod install')}\" ?`\n );\n }\n\n try {\n if (!(await installCocoaPodsAsync(projectRoot))) {\n throw new AbortCommandError();\n }\n } catch (error) {\n await fs.promises.rm(path.join(getTempPrebuildFolder(projectRoot), CACHED_PACKAGE_JSON), {\n recursive: true,\n force: true,\n });\n throw error;\n }\n}\n"],"names":["hasPackageJsonDependencyListChangedAsync","installCocoaPodsAsync","maybePromptToSyncPodsAsync","PackageManager","Log","PROJECT_PREBUILD_SETTINGS","CACHED_PACKAGE_JSON","getTempPrebuildFolder","projectRoot","path","join","hasNewDependenciesSinceLastBuild","packageChecksums","templateDirectory","tempPkgJsonPath","fs","existsSync","dependencies","devDependencies","JsonFile","read","hasNewDependencies","hasNewDevDependencies","createPackageChecksums","pkg","hashForDependencyMap","getPackageJson","packages","ensureDirectoryAsync","writeAsync","step","logNewSection","process","platform","succeed","packageManager","CocoaPodsPackageManager","cwd","silent","env","EXPO_DEBUG","isCLIInstalledAsync","text","stopAndPersist","installCLIAsync","nonInteractive","spawnOptions","options","stdio","error","symbol","chalk","red","CocoaPodsError","log","message","installAsync","spinner","catch","doesProjectUseCocoaPods","isLockfileCreated","podfileLockPath","isPodFolderCreated","podFolderPath","AbortCommandError","promptToInstallPodsAsync","missingPods","length","map","pod","bold","promises","rm","recursive","force"],"mappings":"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"}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.directoryExistsAsync = directoryExistsAsync;
6
6
  exports.fileExistsAsync = fileExistsAsync;
7
- exports.removeAsync = exports.copyAsync = exports.copySync = exports.ensureDirectoryAsync = void 0;
7
+ exports.removeAsync = exports.copyAsync = exports.copySync = exports.ensureDirectory = exports.ensureDirectoryAsync = void 0;
8
8
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
9
9
  function _interopRequireDefault(obj) {
10
10
  return obj && obj.__esModule ? obj : {
@@ -28,6 +28,11 @@ const ensureDirectoryAsync = (path)=>_fsExtra.default.promises.mkdir(path, {
28
28
  })
29
29
  ;
30
30
  exports.ensureDirectoryAsync = ensureDirectoryAsync;
31
+ const ensureDirectory = (path)=>_fsExtra.default.mkdirSync(path, {
32
+ recursive: true
33
+ })
34
+ ;
35
+ exports.ensureDirectory = ensureDirectory;
31
36
  const copySync = _fsExtra.default.copySync;
32
37
  exports.copySync = copySync;
33
38
  const copyAsync = _fsExtra.default.copy;
@@ -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\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"}
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 ensureDirectory = (path: string) => fs.mkdirSync(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","ensureDirectory","mkdirSync","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,eAAe,GAAG,CAACH,IAAY,GAAKP,QAAE,QAAA,CAACW,SAAS,CAACJ,IAAI,EAAE;QAAEE,SAAS,EAAE,IAAI;KAAE,CAAC;AAAC;QAA5EC,eAAe,GAAfA,eAAe;AAErB,MAAME,QAAQ,GAAGZ,QAAE,QAAA,CAACY,QAAQ,AAAC;QAAvBA,QAAQ,GAARA,QAAQ;AAEd,MAAMC,SAAS,GAAGb,QAAE,QAAA,CAACc,IAAI,AAAC;QAApBD,SAAS,GAATA,SAAS;AAEf,MAAME,WAAW,GAAGf,QAAE,QAAA,CAACgB,MAAM,AAAC;QAAxBD,WAAW,GAAXA,WAAW"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.parsePlistAsync = parsePlistAsync;
6
+ exports.parsePlistBuffer = parsePlistBuffer;
7
+ var _plist = _interopRequireDefault(require("@expo/plist"));
8
+ var _bplistParser = _interopRequireDefault(require("bplist-parser"));
9
+ var _promises = _interopRequireDefault(require("fs/promises"));
10
+ var Log = _interopRequireWildcard(require("../log"));
11
+ var _errors = require("./errors");
12
+ function _interopRequireDefault(obj) {
13
+ return obj && obj.__esModule ? obj : {
14
+ default: obj
15
+ };
16
+ }
17
+ function _interopRequireWildcard(obj) {
18
+ if (obj && obj.__esModule) {
19
+ return obj;
20
+ } else {
21
+ var newObj = {};
22
+ if (obj != null) {
23
+ for(var key in obj){
24
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
25
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
26
+ if (desc.get || desc.set) {
27
+ Object.defineProperty(newObj, key, desc);
28
+ } else {
29
+ newObj[key] = obj[key];
30
+ }
31
+ }
32
+ }
33
+ }
34
+ newObj.default = obj;
35
+ return newObj;
36
+ }
37
+ }
38
+ const CHAR_CHEVRON_OPEN = 60;
39
+ const CHAR_B_LOWER = 98;
40
+ async function parsePlistAsync(plistPath) {
41
+ Log.debug(`Parse plist: ${plistPath}`);
42
+ return parsePlistBuffer(await _promises.default.readFile(plistPath));
43
+ }
44
+ function parsePlistBuffer(contents) {
45
+ if (contents[0] === CHAR_CHEVRON_OPEN) {
46
+ const info = _plist.default.parse(contents.toString());
47
+ if (Array.isArray(info)) return info[0];
48
+ return info;
49
+ } else if (contents[0] === CHAR_B_LOWER) {
50
+ // @ts-expect-error
51
+ const info = _bplistParser.default.parseBuffer(contents);
52
+ if (Array.isArray(info)) return info[0];
53
+ return info;
54
+ } else {
55
+ throw new _errors.CommandError("PLIST", `Cannot parse plist of type byte (0x${contents[0].toString(16)})`);
56
+ }
57
+ }
58
+
59
+ //# sourceMappingURL=plist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/plist.ts"],"sourcesContent":["import plist from '@expo/plist';\nimport binaryPlist from 'bplist-parser';\nimport fs from 'fs/promises';\n\nimport * as Log from '../log';\nimport { CommandError } from './errors';\n\nconst CHAR_CHEVRON_OPEN = 60;\nconst CHAR_B_LOWER = 98;\n// .mobileprovision\n// const CHAR_ZERO = 30;\n\nexport async function parsePlistAsync(plistPath: string) {\n Log.debug(`Parse plist: ${plistPath}`);\n\n return parsePlistBuffer(await fs.readFile(plistPath));\n}\n\nexport function parsePlistBuffer(contents: Buffer) {\n if (contents[0] === CHAR_CHEVRON_OPEN) {\n const info = plist.parse(contents.toString());\n if (Array.isArray(info)) return info[0];\n return info;\n } else if (contents[0] === CHAR_B_LOWER) {\n // @ts-expect-error\n const info = binaryPlist.parseBuffer(contents);\n if (Array.isArray(info)) return info[0];\n return info;\n } else {\n throw new CommandError(\n 'PLIST',\n `Cannot parse plist of type byte (0x${contents[0].toString(16)})`\n );\n }\n}\n"],"names":["parsePlistAsync","parsePlistBuffer","Log","CHAR_CHEVRON_OPEN","CHAR_B_LOWER","plistPath","debug","fs","readFile","contents","info","plist","parse","toString","Array","isArray","binaryPlist","parseBuffer","CommandError"],"mappings":"AAAA;;;;QAYsBA,eAAe,GAAfA,eAAe;QAMrBC,gBAAgB,GAAhBA,gBAAgB;AAlBd,IAAA,MAAa,kCAAb,aAAa,EAAA;AACP,IAAA,aAAe,kCAAf,eAAe,EAAA;AACxB,IAAA,SAAa,kCAAb,aAAa,EAAA;AAEhBC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACc,IAAA,OAAU,WAAV,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvC,MAAMC,iBAAiB,GAAG,EAAE,AAAC;AAC7B,MAAMC,YAAY,GAAG,EAAE,AAAC;AAIjB,eAAeJ,eAAe,CAACK,SAAiB,EAAE;IACvDH,GAAG,CAACI,KAAK,CAAC,CAAC,aAAa,EAAED,SAAS,CAAC,CAAC,CAAC,CAAC;IAEvC,OAAOJ,gBAAgB,CAAC,MAAMM,SAAE,QAAA,CAACC,QAAQ,CAACH,SAAS,CAAC,CAAC,CAAC;CACvD;AAEM,SAASJ,gBAAgB,CAACQ,QAAgB,EAAE;IACjD,IAAIA,QAAQ,CAAC,CAAC,CAAC,KAAKN,iBAAiB,EAAE;QACrC,MAAMO,IAAI,GAAGC,MAAK,QAAA,CAACC,KAAK,CAACH,QAAQ,CAACI,QAAQ,EAAE,CAAC,AAAC;QAC9C,IAAIC,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE,OAAOA,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,OAAOA,IAAI,CAAC;KACb,MAAM,IAAID,QAAQ,CAAC,CAAC,CAAC,KAAKL,YAAY,EAAE;QACvC,mBAAmB;QACnB,MAAMM,IAAI,GAAGM,aAAW,QAAA,CAACC,WAAW,CAACR,QAAQ,CAAC,AAAC;QAC/C,IAAIK,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE,OAAOA,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,OAAOA,IAAI,CAAC;KACb,MAAM;QACL,MAAM,IAAIQ,OAAY,aAAA,CACpB,OAAO,EACP,CAAC,mCAAmC,EAAET,QAAQ,CAAC,CAAC,CAAC,CAACI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAClE,CAAC;KACH;CACF"}
@@ -15,6 +15,7 @@ exports.addInteractionListener = addInteractionListener;
15
15
  exports.removeInteractionListener = removeInteractionListener;
16
16
  exports.pauseInteractions = pauseInteractions;
17
17
  exports.resumeInteractions = resumeInteractions;
18
+ exports.createSelectionFilter = createSelectionFilter;
18
19
  exports.promptAsync = void 0;
19
20
  var _assert = _interopRequireDefault(require("assert"));
20
21
  var _prompts = _interopRequireWildcard(require("prompts"));
@@ -123,5 +124,20 @@ function resumeInteractions(options = {}) {
123
124
  });
124
125
  }
125
126
  }
127
+ function createSelectionFilter() {
128
+ function escapeRegex(string) {
129
+ return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
130
+ }
131
+ return async (input, choices)=>{
132
+ try {
133
+ const regex = new RegExp(escapeRegex(input), "i");
134
+ return choices.filter((choice)=>regex.test(choice.title)
135
+ );
136
+ } catch (error) {
137
+ Log.debug("Error filtering choices", error);
138
+ return [];
139
+ }
140
+ };
141
+ }
126
142
 
127
143
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/prompts.ts"],"sourcesContent":["import assert from 'assert';\nimport prompts, { Choice, Options, PromptObject, PromptType } from 'prompts';\n\nimport * as Log from '../log';\nimport { env } from './env';\nimport { AbortCommandError, CommandError } from './errors';\n\nexport type Question<V extends string = string> = PromptObject<V> & {\n optionsPerPage?: number;\n};\n\nexport interface ExpoChoice<T> extends Choice {\n value: T;\n}\n\nexport { PromptType };\n\ntype PromptOptions = { nonInteractiveHelp?: string } & Options;\n\nexport type NamelessQuestion = Omit<Question<'value'>, 'name' | 'type'>;\n\ntype InteractionOptions = { pause: boolean; canEscape?: boolean };\n\ntype InteractionCallback = (options: InteractionOptions) => void;\n\n/** Interaction observers for detecting when keystroke tracking should pause/resume. */\nconst listeners: InteractionCallback[] = [];\n\nexport default async function prompt(\n questions: Question | Question[],\n { nonInteractiveHelp, ...options }: PromptOptions = {}\n) {\n questions = Array.isArray(questions) ? questions : [questions];\n if (env.CI && questions.length !== 0) {\n let message = `Input is required, but 'npx expo' is in non-interactive mode.\\n`;\n if (nonInteractiveHelp) {\n message += nonInteractiveHelp;\n } else {\n const question = questions[0];\n const questionMessage =\n typeof question.message === 'function'\n ? question.message(undefined, {}, question)\n : question.message;\n\n message += `Required input:\\n${(questionMessage || '').trim().replace(/^/gm, '> ')}`;\n }\n throw new CommandError('NON_INTERACTIVE', message);\n }\n\n pauseInteractions();\n try {\n const results = await prompts(questions, {\n onCancel() {\n throw new AbortCommandError();\n },\n ...options,\n });\n\n return results;\n } finally {\n resumeInteractions();\n }\n}\n\n/**\n * Create a standard yes/no confirmation that can be cancelled.\n *\n * @param questions\n * @param options\n */\nexport async function confirmAsync(\n questions: NamelessQuestion,\n options?: PromptOptions\n): Promise<boolean> {\n const { value } = await prompt(\n {\n initial: true,\n ...questions,\n name: 'value',\n type: 'confirm',\n },\n options\n );\n return value ?? null;\n}\n\n/** Select an option from a list of options. */\nexport async function selectAsync<T>(\n message: string,\n choices: ExpoChoice<T>[],\n options?: PromptOptions\n): Promise<T> {\n const { value } = await prompt(\n {\n message,\n choices,\n name: 'value',\n type: 'select',\n },\n options\n );\n return value ?? null;\n}\n\nexport const promptAsync = prompt;\n\n/** Used to pause/resume interaction observers while prompting (made for TerminalUI). */\nexport function addInteractionListener(callback: InteractionCallback) {\n listeners.push(callback);\n}\n\nexport function removeInteractionListener(callback: InteractionCallback) {\n const listenerIndex = listeners.findIndex((_callback) => _callback === callback);\n assert(\n listenerIndex >= 0,\n 'removeInteractionListener(): cannot remove an unregistered event listener.'\n );\n listeners.splice(listenerIndex, 1);\n}\n\n/** Notify all listeners that keypress observations must pause. */\nexport function pauseInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n Log.debug('Interaction observers paused');\n for (const listener of listeners) {\n listener({ pause: true, ...options });\n }\n}\n\n/** Notify all listeners that keypress observations can start.. */\nexport function resumeInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n Log.debug('Interaction observers resumed');\n for (const listener of listeners) {\n listener({ pause: false, ...options });\n }\n}\n"],"names":["PromptType","prompt","confirmAsync","selectAsync","addInteractionListener","removeInteractionListener","pauseInteractions","resumeInteractions","Log","questions","nonInteractiveHelp","options","Array","isArray","env","CI","length","message","question","questionMessage","undefined","trim","replace","CommandError","results","prompts","onCancel","AbortCommandError","listeners","value","initial","name","type","choices","promptAsync","callback","push","listenerIndex","findIndex","_callback","assert","splice","debug","listener","pause"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/prompts.ts"],"sourcesContent":["import assert from 'assert';\nimport prompts, { Choice, Options, PromptObject, PromptType } from 'prompts';\n\nimport * as Log from '../log';\nimport { env } from './env';\nimport { AbortCommandError, CommandError } from './errors';\n\nexport type Question<V extends string = string> = PromptObject<V> & {\n optionsPerPage?: number;\n};\n\nexport interface ExpoChoice<T> extends Choice {\n value: T;\n}\n\nexport { PromptType };\n\ntype PromptOptions = { nonInteractiveHelp?: string } & Options;\n\nexport type NamelessQuestion = Omit<Question<'value'>, 'name' | 'type'>;\n\ntype InteractionOptions = { pause: boolean; canEscape?: boolean };\n\ntype InteractionCallback = (options: InteractionOptions) => void;\n\n/** Interaction observers for detecting when keystroke tracking should pause/resume. */\nconst listeners: InteractionCallback[] = [];\n\nexport default async function prompt(\n questions: Question | Question[],\n { nonInteractiveHelp, ...options }: PromptOptions = {}\n) {\n questions = Array.isArray(questions) ? questions : [questions];\n if (env.CI && questions.length !== 0) {\n let message = `Input is required, but 'npx expo' is in non-interactive mode.\\n`;\n if (nonInteractiveHelp) {\n message += nonInteractiveHelp;\n } else {\n const question = questions[0];\n const questionMessage =\n typeof question.message === 'function'\n ? question.message(undefined, {}, question)\n : question.message;\n\n message += `Required input:\\n${(questionMessage || '').trim().replace(/^/gm, '> ')}`;\n }\n throw new CommandError('NON_INTERACTIVE', message);\n }\n\n pauseInteractions();\n try {\n const results = await prompts(questions, {\n onCancel() {\n throw new AbortCommandError();\n },\n ...options,\n });\n\n return results;\n } finally {\n resumeInteractions();\n }\n}\n\n/**\n * Create a standard yes/no confirmation that can be cancelled.\n *\n * @param questions\n * @param options\n */\nexport async function confirmAsync(\n questions: NamelessQuestion,\n options?: PromptOptions\n): Promise<boolean> {\n const { value } = await prompt(\n {\n initial: true,\n ...questions,\n name: 'value',\n type: 'confirm',\n },\n options\n );\n return value ?? null;\n}\n\n/** Select an option from a list of options. */\nexport async function selectAsync<T>(\n message: string,\n choices: ExpoChoice<T>[],\n options?: PromptOptions\n): Promise<T> {\n const { value } = await prompt(\n {\n message,\n choices,\n name: 'value',\n type: 'select',\n },\n options\n );\n return value ?? null;\n}\n\nexport const promptAsync = prompt;\n\n/** Used to pause/resume interaction observers while prompting (made for TerminalUI). */\nexport function addInteractionListener(callback: InteractionCallback) {\n listeners.push(callback);\n}\n\nexport function removeInteractionListener(callback: InteractionCallback) {\n const listenerIndex = listeners.findIndex((_callback) => _callback === callback);\n assert(\n listenerIndex >= 0,\n 'removeInteractionListener(): cannot remove an unregistered event listener.'\n );\n listeners.splice(listenerIndex, 1);\n}\n\n/** Notify all listeners that keypress observations must pause. */\nexport function pauseInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n Log.debug('Interaction observers paused');\n for (const listener of listeners) {\n listener({ pause: true, ...options });\n }\n}\n\n/** Notify all listeners that keypress observations can start.. */\nexport function resumeInteractions(options: Omit<InteractionOptions, 'pause'> = {}) {\n Log.debug('Interaction observers resumed');\n for (const listener of listeners) {\n listener({ pause: false, ...options });\n }\n}\n\nexport function createSelectionFilter(): (input: any, choices: Choice[]) => Promise<any> {\n function escapeRegex(string: string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n return async (input: any, choices: Choice[]) => {\n try {\n const regex = new RegExp(escapeRegex(input), 'i');\n return choices.filter((choice: any) => regex.test(choice.title));\n } catch (error: any) {\n Log.debug('Error filtering choices', error);\n return [];\n }\n };\n}\n"],"names":["PromptType","prompt","confirmAsync","selectAsync","addInteractionListener","removeInteractionListener","pauseInteractions","resumeInteractions","createSelectionFilter","Log","questions","nonInteractiveHelp","options","Array","isArray","env","CI","length","message","question","questionMessage","undefined","trim","replace","CommandError","results","prompts","onCancel","AbortCommandError","listeners","value","initial","name","type","choices","promptAsync","callback","push","listenerIndex","findIndex","_callback","assert","splice","debug","listener","pause","escapeRegex","string","input","regex","RegExp","filter","choice","test","title","error"],"mappings":"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"}
@@ -18,7 +18,10 @@ async function resolveStringOrBooleanArgsAsync(args, rawMap, extraArgs) {
18
18
  // Collapse aliases into fully qualified arguments.
19
19
  args = collapseAliases(extraArgs, args);
20
20
  // Resolve all of the string or boolean arguments and the project root.
21
- return _resolveStringOrBooleanArgs(extraArgs, args);
21
+ return _resolveStringOrBooleanArgs({
22
+ ...rawMap,
23
+ ...extraArgs
24
+ }, args);
22
25
  }
23
26
  function _resolveStringOrBooleanArgs(arg, args) {
24
27
  // Default project root, if a custom one is defined then it will overwrite this.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/resolveArgs.ts"],"sourcesContent":["import arg, { Spec } from 'arg';\n\nimport { replaceValue } from './array';\nimport { CommandError } from './errors';\n\n/**\n * Enables the resolution of arguments that can either be a string or a boolean.\n *\n * @param args arguments that were passed to the command.\n * @param rawMap raw map of arguments that are passed to the command.\n * @param extraArgs extra arguments and aliases that should be resolved as string or boolean.\n * @returns parsed arguments and project root.\n */\nexport async function resolveStringOrBooleanArgsAsync(\n args: string[],\n rawMap: arg.Spec,\n extraArgs: arg.Spec\n) {\n // Assert any missing arguments\n assertUnknownArgs(\n {\n ...rawMap,\n ...extraArgs,\n },\n args\n );\n\n // Collapse aliases into fully qualified arguments.\n args = collapseAliases(extraArgs, args);\n\n // Resolve all of the string or boolean arguments and the project root.\n return _resolveStringOrBooleanArgs(extraArgs, args);\n}\n\nexport function _resolveStringOrBooleanArgs(arg: Spec, args: string[]) {\n // Default project root, if a custom one is defined then it will overwrite this.\n let projectRoot: string = '.';\n // The resolved arguments.\n const settings: Record<string, string | boolean | undefined> = {};\n\n // Create a list of possible arguments, this will filter out aliases.\n const possibleArgs = Object.entries(arg)\n .filter(([, value]) => typeof value !== 'string')\n .map(([key]) => key);\n\n // Loop over arguments in reverse order so we can resolve if a value belongs to a flag.\n for (let i = args.length - 1; i > -1; i--) {\n const value = args[i];\n // At this point we should have converted all aliases to fully qualified arguments.\n if (value.startsWith('--')) {\n // If we ever find an argument then it must be a boolean because we are checking in reverse\n // and removing arguments from the array if we find a string.\n settings[value] = true;\n } else {\n // Get the previous argument in the array.\n const nextValue = i > 0 ? args[i - 1] : null;\n if (nextValue && possibleArgs.includes(nextValue)) {\n settings[nextValue] = value;\n i--;\n } else if (\n // If the last value is not a flag and it doesn't have a recognized flag before it (instead having a string value or nothing)\n // then it must be the project root.\n i ===\n args.length - 1\n ) {\n projectRoot = value;\n } else {\n // This will asserts if two strings are passed in a row and not at the end of the line.\n throw new CommandError('BAD_ARGS', `Unknown argument: ${value}`);\n }\n }\n }\n\n return {\n args: settings,\n projectRoot,\n };\n}\n\n/** Convert all aliases to fully qualified flag names. */\nexport function collapseAliases(arg: Spec, args: string[]): string[] {\n const aliasMap = getAliasTuples(arg);\n\n for (const [arg, alias] of aliasMap) {\n args = replaceValue(args, arg, alias);\n }\n\n // Assert if there are duplicate flags after we collapse the aliases.\n assertDuplicateArgs(args, aliasMap);\n return args;\n}\n\n/** Assert that the spec has unknown arguments. */\nexport function assertUnknownArgs(arg: Spec, args: string[]) {\n const allowedArgs = Object.keys(arg);\n const unknownArgs = args.filter((arg) => !allowedArgs.includes(arg) && arg.startsWith('-'));\n if (unknownArgs.length > 0) {\n throw new CommandError(`Unknown arguments: ${unknownArgs.join(', ')}`);\n }\n}\n\nfunction getAliasTuples(arg: Spec): [string, string][] {\n return Object.entries(arg).filter(([, value]) => typeof value === 'string') as [string, string][];\n}\n\n/** Asserts that a duplicate flag has been used, this naively throws without knowing if an alias or flag were used as the duplicate. */\nexport function assertDuplicateArgs(args: string[], argNameAliasTuple: [string, string][]) {\n for (const [argName, argNameAlias] of argNameAliasTuple) {\n if (args.filter((a) => [argName, argNameAlias].includes(a)).length > 1) {\n throw new CommandError(\n 'BAD_ARGS',\n `Can only provide one instance of ${argName} or ${argNameAlias}`\n );\n }\n }\n}\n"],"names":["resolveStringOrBooleanArgsAsync","_resolveStringOrBooleanArgs","collapseAliases","assertUnknownArgs","assertDuplicateArgs","args","rawMap","extraArgs","arg","projectRoot","settings","possibleArgs","Object","entries","filter","value","map","key","i","length","startsWith","nextValue","includes","CommandError","aliasMap","getAliasTuples","alias","replaceValue","allowedArgs","keys","unknownArgs","join","argNameAliasTuple","argName","argNameAlias","a"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/resolveArgs.ts"],"sourcesContent":["import arg, { Spec } from 'arg';\n\nimport { replaceValue } from './array';\nimport { CommandError } from './errors';\n\n/**\n * Enables the resolution of arguments that can either be a string or a boolean.\n *\n * @param args arguments that were passed to the command.\n * @param rawMap raw map of arguments that are passed to the command.\n * @param extraArgs extra arguments and aliases that should be resolved as string or boolean.\n * @returns parsed arguments and project root.\n */\nexport async function resolveStringOrBooleanArgsAsync(\n args: string[],\n rawMap: arg.Spec,\n extraArgs: arg.Spec\n) {\n // Assert any missing arguments\n assertUnknownArgs(\n {\n ...rawMap,\n ...extraArgs,\n },\n args\n );\n\n // Collapse aliases into fully qualified arguments.\n args = collapseAliases(extraArgs, args);\n\n // Resolve all of the string or boolean arguments and the project root.\n return _resolveStringOrBooleanArgs({ ...rawMap, ...extraArgs }, args);\n}\n\nexport function _resolveStringOrBooleanArgs(arg: Spec, args: string[]) {\n // Default project root, if a custom one is defined then it will overwrite this.\n let projectRoot: string = '.';\n // The resolved arguments.\n const settings: Record<string, string | boolean | undefined> = {};\n\n // Create a list of possible arguments, this will filter out aliases.\n const possibleArgs = Object.entries(arg)\n .filter(([, value]) => typeof value !== 'string')\n .map(([key]) => key);\n\n // Loop over arguments in reverse order so we can resolve if a value belongs to a flag.\n for (let i = args.length - 1; i > -1; i--) {\n const value = args[i];\n // At this point we should have converted all aliases to fully qualified arguments.\n if (value.startsWith('--')) {\n // If we ever find an argument then it must be a boolean because we are checking in reverse\n // and removing arguments from the array if we find a string.\n settings[value] = true;\n } else {\n // Get the previous argument in the array.\n const nextValue = i > 0 ? args[i - 1] : null;\n if (nextValue && possibleArgs.includes(nextValue)) {\n settings[nextValue] = value;\n i--;\n } else if (\n // If the last value is not a flag and it doesn't have a recognized flag before it (instead having a string value or nothing)\n // then it must be the project root.\n i ===\n args.length - 1\n ) {\n projectRoot = value;\n } else {\n // This will asserts if two strings are passed in a row and not at the end of the line.\n throw new CommandError('BAD_ARGS', `Unknown argument: ${value}`);\n }\n }\n }\n\n return {\n args: settings,\n projectRoot,\n };\n}\n\n/** Convert all aliases to fully qualified flag names. */\nexport function collapseAliases(arg: Spec, args: string[]): string[] {\n const aliasMap = getAliasTuples(arg);\n\n for (const [arg, alias] of aliasMap) {\n args = replaceValue(args, arg, alias);\n }\n\n // Assert if there are duplicate flags after we collapse the aliases.\n assertDuplicateArgs(args, aliasMap);\n return args;\n}\n\n/** Assert that the spec has unknown arguments. */\nexport function assertUnknownArgs(arg: Spec, args: string[]) {\n const allowedArgs = Object.keys(arg);\n const unknownArgs = args.filter((arg) => !allowedArgs.includes(arg) && arg.startsWith('-'));\n if (unknownArgs.length > 0) {\n throw new CommandError(`Unknown arguments: ${unknownArgs.join(', ')}`);\n }\n}\n\nfunction getAliasTuples(arg: Spec): [string, string][] {\n return Object.entries(arg).filter(([, value]) => typeof value === 'string') as [string, string][];\n}\n\n/** Asserts that a duplicate flag has been used, this naively throws without knowing if an alias or flag were used as the duplicate. */\nexport function assertDuplicateArgs(args: string[], argNameAliasTuple: [string, string][]) {\n for (const [argName, argNameAlias] of argNameAliasTuple) {\n if (args.filter((a) => [argName, argNameAlias].includes(a)).length > 1) {\n throw new CommandError(\n 'BAD_ARGS',\n `Can only provide one instance of ${argName} or ${argNameAlias}`\n );\n }\n }\n}\n"],"names":["resolveStringOrBooleanArgsAsync","_resolveStringOrBooleanArgs","collapseAliases","assertUnknownArgs","assertDuplicateArgs","args","rawMap","extraArgs","arg","projectRoot","settings","possibleArgs","Object","entries","filter","value","map","key","i","length","startsWith","nextValue","includes","CommandError","aliasMap","getAliasTuples","alias","replaceValue","allowedArgs","keys","unknownArgs","join","argNameAliasTuple","argName","argNameAlias","a"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.getUserTerminal = getUserTerminal;
6
+ function getUserTerminal() {
7
+ return process.env.REACT_TERMINAL || (process.platform === "darwin" ? process.env.TERM_PROGRAM : process.env.TERM);
8
+ }
9
+
10
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/terminal.ts"],"sourcesContent":["/** @returns the environment variable indicating the default terminal program to use. */\nexport function getUserTerminal(): string | undefined {\n return (\n process.env.REACT_TERMINAL ||\n (process.platform === 'darwin' ? process.env.TERM_PROGRAM : process.env.TERM)\n );\n}\n"],"names":["getUserTerminal","process","env","REACT_TERMINAL","platform","TERM_PROGRAM","TERM"],"mappings":"AACA;;;;QAAgBA,eAAe,GAAfA,eAAe;AAAxB,SAASA,eAAe,GAAuB;IACpD,OACEC,OAAO,CAACC,GAAG,CAACC,cAAc,IAC1B,CAACF,OAAO,CAACG,QAAQ,KAAK,QAAQ,GAAGH,OAAO,CAACC,GAAG,CAACG,YAAY,GAAGJ,OAAO,CAACC,GAAG,CAACI,IAAI,CAAC,CAC7E;CACH"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.6",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
7
- "expo": "build/bin/cli"
7
+ "expo-internal": "build/bin/cli"
8
8
  },
9
9
  "files": [
10
10
  "static",
@@ -21,9 +21,6 @@
21
21
  "prepublishOnly": "expo-module prepublishOnly",
22
22
  "expo-module": "expo-module"
23
23
  },
24
- "jest": {
25
- "preset": "expo-module-scripts"
26
- },
27
24
  "repository": {
28
25
  "type": "git",
29
26
  "url": "https://github.com/expo/expo.git",
@@ -46,20 +43,23 @@
46
43
  "@expo/dev-server": "~0.1.110",
47
44
  "@expo/devcert": "^1.0.0",
48
45
  "@expo/json-file": "^8.2.35",
49
- "@expo/metro-config": "~0.3.16",
46
+ "@expo/metro-config": "0.3.19",
50
47
  "@expo/osascript": "^2.0.31",
51
48
  "@expo/package-manager": "~0.0.52",
52
49
  "@expo/plist": "^0.0.18",
53
50
  "@expo/prebuild-config": "~4.0.0",
54
51
  "@expo/rudder-sdk-node": "1.1.1",
55
52
  "@expo/spawn-async": "1.5.0",
53
+ "@expo/xcpretty": "^4.1.1",
56
54
  "@urql/core": "2.3.6",
57
55
  "@urql/exchange-retry": "0.3.0",
58
56
  "accepts": "^1.3.8",
59
57
  "arg": "4.1.0",
60
58
  "better-opn": "~3.0.2",
59
+ "bplist-parser": "^0.3.1",
61
60
  "cacache": "^15.3.0",
62
61
  "chalk": "^4.0.0",
62
+ "ci-info": "^3.3.0",
63
63
  "env-editor": "^0.4.1",
64
64
  "form-data": "^3.0.1",
65
65
  "freeport-async": "2.0.0",
@@ -133,5 +133,5 @@
133
133
  "structured-headers": "^0.4.1",
134
134
  "taskr": "1.1.0"
135
135
  },
136
- "gitHead": "2c80909eaf5380d9c5f6f7034ca30a6bb8d84098"
136
+ "gitHead": "25a469fcf2674fef4492c4f56be5ec7cf0fe2db5"
137
137
  }