@expo/cli 0.1.4 → 0.2.1
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.
- package/build/bin/cli +83 -4
- package/build/bin/cli.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js +2 -23
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/customize/customizeAsync.js +40 -0
- package/build/src/customize/customizeAsync.js.map +1 -0
- package/build/src/customize/generate.js +77 -0
- package/build/src/customize/generate.js.map +1 -0
- package/build/src/customize/index.js +41 -0
- package/build/src/customize/index.js.map +1 -0
- package/build/src/customize/resolveOptions.js +18 -0
- package/build/src/customize/resolveOptions.js.map +1 -0
- package/build/src/customize/templates.js +118 -0
- package/build/src/customize/templates.js.map +1 -0
- package/build/src/export/createMetadataJson.js +10 -7
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/exportApp.js +32 -0
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +2 -3
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +51 -34
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/index.js +14 -10
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/printBundleSizes.js +27 -48
- package/build/src/export/printBundleSizes.js.map +1 -1
- package/build/src/export/resolveOptions.js +44 -5
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +2 -1
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +37 -0
- package/build/src/export/web/exportWebAsync.js.map +1 -0
- package/build/src/export/web/index.js +66 -0
- package/build/src/export/web/index.js.map +1 -0
- package/build/src/export/web/resolveOptions.js +13 -0
- package/build/src/export/web/resolveOptions.js.map +1 -0
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/checkPackages.js +2 -1
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/index.js +1 -0
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +13 -5
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/resolveOptions.js +12 -65
- package/build/src/install/resolveOptions.js.map +1 -1
- package/build/src/install/utils/autoAddConfigPlugins.js +5 -26
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
- package/build/src/log.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +5 -23
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/index.js +18 -12
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +11 -12
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +17 -0
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/resolveTemplate.js +2 -1
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +5 -5
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js +5 -26
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +2 -0
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +2 -0
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/bundledNativeModules.js +3 -2
- package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +7 -13
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getMissingPackages.js +3 -24
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +2 -23
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +17 -9
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js +2 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +4 -3
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +29 -31
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
- package/build/src/start/interface/KeyPressHandler.js +2 -0
- package/build/src/start/interface/KeyPressHandler.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +5 -5
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +3 -2
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js +2 -1
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js +4 -24
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/ADBServer.js +17 -32
- package/build/src/start/platforms/android/ADBServer.js.map +1 -1
- package/build/src/start/platforms/android/AndroidSdk.js +41 -0
- package/build/src/start/platforms/android/AndroidSdk.js.map +1 -0
- package/build/src/start/platforms/android/activateWindow.js +4 -4
- package/build/src/start/platforms/android/activateWindow.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +8 -3
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/adbReverse.js +3 -2
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/gradle.js +2 -2
- package/build/src/start/platforms/android/gradle.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +4 -4
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/xcrun.js +2 -23
- package/build/src/start/platforms/ios/xcrun.js.map +1 -1
- package/build/src/start/project/devices.js +2 -0
- package/build/src/start/project/devices.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +6 -5
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +15 -8
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +15 -5
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevelopmentSession.js +4 -0
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +10 -3
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +9 -0
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js +5 -0
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +11 -1
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/resolveFromProject.js +8 -0
- package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +115 -0
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -0
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js +9 -4
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +24 -0
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +2 -0
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +57 -6
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +6 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +62 -0
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -0
- package/build/src/start/server/platformBundlers.js +18 -0
- package/build/src/start/server/platformBundlers.js.map +1 -0
- package/build/src/start/server/webTemplate.js +68 -0
- package/build/src/start/server/webTemplate.js.map +1 -0
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +59 -19
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/compile.js +64 -0
- package/build/src/start/server/webpack/compile.js.map +1 -0
- package/build/src/start/startAsync.js +21 -17
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +5 -2
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/downloadAppAsync.js +3 -2
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +7 -32
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +3 -2
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +3 -0
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/exit.js +4 -25
- package/build/src/utils/exit.js.map +1 -1
- package/build/src/utils/getRunningProcess.js +6 -2
- package/build/src/utils/getRunningProcess.js.map +1 -1
- package/build/src/utils/nodeModules.js +13 -102
- package/build/src/utils/nodeModules.js.map +1 -1
- package/build/src/utils/npm.js +3 -24
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/ora.js +1 -13
- package/build/src/utils/ora.js.map +1 -1
- package/build/src/utils/progress.js +46 -0
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/prompts.js +4 -4
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/tar.js +3 -0
- package/build/src/utils/tar.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +9 -2
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/build/src/utils/variadic.js +47 -0
- package/build/src/utils/variadic.js.map +1 -0
- package/package.json +12 -8
- package/static/template/babel.config.js +6 -0
- package/static/template/index.html +117 -0
- package/static/template/metro.config.js +4 -0
- package/static/template/serve.json +13 -0
- package/static/template/webpack.config.js +7 -0
|
@@ -46,7 +46,7 @@ function _interopRequireWildcard(obj) {
|
|
|
46
46
|
async function updatePackageJSONAsync(projectRoot, { templateDirectory , pkg , skipDependencyUpdate }) {
|
|
47
47
|
const updatingPackageJsonStep = (0, _ora).logNewSection("Updating your package.json scripts, dependencies, and main file");
|
|
48
48
|
const templatePkg = (0, _config).getPackageJson(templateDirectory);
|
|
49
|
-
const results =
|
|
49
|
+
const results = modifyPackageJson(projectRoot, {
|
|
50
50
|
templatePkg,
|
|
51
51
|
pkg,
|
|
52
52
|
skipDependencyUpdate
|
|
@@ -72,7 +72,7 @@ async function updatePackageJSONAsync(projectRoot, { templateDirectory , pkg , s
|
|
|
72
72
|
* @param props.pkg Current package.json as JSON.
|
|
73
73
|
* @param props.skipDependencyUpdate Array of dependencies to skip updating.
|
|
74
74
|
* @returns
|
|
75
|
-
*/ function
|
|
75
|
+
*/ function modifyPackageJson(projectRoot, { templatePkg , pkg , skipDependencyUpdate }) {
|
|
76
76
|
updatePkgScripts({
|
|
77
77
|
pkg
|
|
78
78
|
});
|
|
@@ -101,10 +101,10 @@ function updatePkgDependencies(projectRoot, { pkg: pkg1 , templatePkg , skipDepe
|
|
|
101
101
|
...pkg1.dependencies
|
|
102
102
|
});
|
|
103
103
|
const requiredDependencies = [
|
|
104
|
+
"expo",
|
|
105
|
+
"expo-splash-screen",
|
|
104
106
|
"react",
|
|
105
|
-
"react-native
|
|
106
|
-
"react-native",
|
|
107
|
-
"expo-updates",
|
|
107
|
+
"react-native"
|
|
108
108
|
].filter((depKey)=>!!defaultDependencies[depKey]
|
|
109
109
|
);
|
|
110
110
|
const symlinkedPackages = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prebuild/updatePackageJson.ts"],"sourcesContent":["import { getPackageJson, PackageJSONConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { isModuleSymlinked } from '../utils/isModuleSymlinked';\nimport { logNewSection } from '../utils/ora';\n\nexport type DependenciesMap = { [key: string]: string | number };\n\nexport type PackageJsonModificationResults = DependenciesModificationResults & {\n removedMainField: string | null;\n};\n\nexport type DependenciesModificationResults = {\n /** Indicates that new values were added to the `dependencies` object in the `package.json`. */\n hasNewDependencies: boolean;\n /** Indicates that new values were added to the `devDependencies` object in the `package.json`. */\n hasNewDevDependencies: boolean;\n};\n\n/** Modifies the `package.json` with `_modifyPackageJson` and format/displays the results. */\nexport async function updatePackageJSONAsync(\n projectRoot: string,\n {\n templateDirectory,\n pkg,\n skipDependencyUpdate,\n }: {\n templateDirectory: string;\n pkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): Promise<DependenciesModificationResults> {\n const updatingPackageJsonStep = logNewSection(\n 'Updating your package.json scripts, dependencies, and main file'\n );\n\n const templatePkg = getPackageJson(templateDirectory);\n\n const results = _modifyPackageJson(projectRoot, {\n templatePkg,\n pkg,\n skipDependencyUpdate,\n });\n\n await fs.promises.writeFile(\n path.resolve(projectRoot, 'package.json'),\n // Add new line to match the format of running yarn.\n // This prevents the `package.json` from changing when running `prebuild --no-install` multiple times.\n JSON.stringify(pkg, null, 2) + '\\n'\n );\n\n updatingPackageJsonStep.succeed(\n 'Updated package.json and added index.js entry point for iOS and Android'\n );\n\n if (results.removedMainField) {\n Log.log(\n `\\u203A Removed ${chalk.bold(\n `\"main\": \"${results.removedMainField}\"`\n )} from package.json because we recommend using index.js as main instead\\n`\n );\n }\n\n return results;\n}\n\n/**\n * Make required modifications to the `package.json` file as a JSON object.\n *\n * 1. Update `package.json` `scripts`.\n * 2. Update `package.json` `dependencies` and `devDependencies`.\n * 3. Update `package.json` `main`.\n *\n * @param projectRoot The root directory of the project.\n * @param props.templatePkg Template project package.json as JSON.\n * @param props.pkg Current package.json as JSON.\n * @param props.skipDependencyUpdate Array of dependencies to skip updating.\n * @returns\n */\nfunction _modifyPackageJson(\n projectRoot: string,\n {\n templatePkg,\n pkg,\n skipDependencyUpdate,\n }: {\n templatePkg: PackageJSONConfig;\n pkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): PackageJsonModificationResults {\n updatePkgScripts({ pkg });\n\n const results = updatePkgDependencies(projectRoot, {\n pkg,\n templatePkg,\n skipDependencyUpdate,\n });\n\n const removedMainField = updatePkgMain({ pkg });\n\n return { ...results, removedMainField };\n}\n\n/**\n * Update package.json dependencies by combining the dependencies in the project we are ejecting\n * with the dependencies in the template project. Does the same for devDependencies.\n *\n * - The template may have some dependencies beyond react/react-native/react-native-unimodules,\n * for example RNGH and Reanimated. We should prefer the version that is already being used\n * in the project for those, but swap the react/react-native/react-native-unimodules versions\n * with the ones in the template.\n * - The same applies to expo-updates -- since some native project configuration may depend on the\n * version, we should always use the version of expo-updates in the template.\n *\n * > Exposed for testing.\n */\nexport function updatePkgDependencies(\n projectRoot: string,\n {\n pkg,\n templatePkg,\n skipDependencyUpdate = [],\n }: {\n pkg: PackageJSONConfig;\n templatePkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): DependenciesModificationResults {\n if (!pkg.devDependencies) {\n pkg.devDependencies = {};\n }\n const { dependencies, devDependencies } = templatePkg;\n const defaultDependencies = createDependenciesMap(dependencies);\n const defaultDevDependencies = createDependenciesMap(devDependencies);\n\n const combinedDependencies: DependenciesMap = createDependenciesMap({\n ...defaultDependencies,\n ...pkg.dependencies,\n });\n\n const requiredDependencies = [\n 'react',\n 'react-native-unimodules',\n 'react-native',\n 'expo-updates',\n ].filter((depKey) => !!defaultDependencies[depKey]);\n\n const symlinkedPackages: string[] = [];\n\n for (const dependenciesKey of requiredDependencies) {\n if (\n // If the local package.json defined the dependency that we want to overwrite...\n pkg.dependencies?.[dependenciesKey]\n ) {\n if (\n // Then ensure it isn't symlinked (i.e. the user has a custom version in their yarn workspace).\n isModuleSymlinked(projectRoot, { moduleId: dependenciesKey, isSilent: true })\n ) {\n // If the package is in the project's package.json and it's symlinked, then skip overwriting it.\n symlinkedPackages.push(dependenciesKey);\n continue;\n }\n if (skipDependencyUpdate.includes(dependenciesKey)) {\n continue;\n }\n }\n combinedDependencies[dependenciesKey] = defaultDependencies[dependenciesKey];\n }\n\n if (symlinkedPackages.length) {\n Log.log(\n `\\u203A Using symlinked ${symlinkedPackages\n .map((pkg) => chalk.bold(pkg))\n .join(', ')} instead of recommended version(s).`\n );\n }\n\n const combinedDevDependencies: DependenciesMap = createDependenciesMap({\n ...defaultDevDependencies,\n ...pkg.devDependencies,\n });\n\n // Only change the dependencies if the normalized hash changes, this helps to reduce meaningless changes.\n const hasNewDependencies =\n hashForDependencyMap(pkg.dependencies) !== hashForDependencyMap(combinedDependencies);\n const hasNewDevDependencies =\n hashForDependencyMap(pkg.devDependencies) !== hashForDependencyMap(combinedDevDependencies);\n // Save the dependencies\n if (hasNewDependencies) {\n // Use Object.assign to preserve the original order of dependencies, this makes it easier to see what changed in the git diff.\n pkg.dependencies = Object.assign(pkg.dependencies ?? {}, combinedDependencies);\n }\n if (hasNewDevDependencies) {\n // Same as with dependencies\n pkg.devDependencies = Object.assign(pkg.devDependencies ?? {}, combinedDevDependencies);\n }\n\n return {\n hasNewDependencies,\n hasNewDevDependencies,\n };\n}\n\n/**\n * Create an object of type DependenciesMap a dependencies object or throw if not valid.\n *\n * @param dependencies - ideally an object of type {[key]: string} - if not then this will error.\n */\nexport function createDependenciesMap(dependencies: any): DependenciesMap {\n if (typeof dependencies !== 'object') {\n throw new Error(`Dependency map is invalid, expected object but got ${typeof dependencies}`);\n } else if (!dependencies) {\n return {};\n }\n\n const outputMap: DependenciesMap = {};\n\n for (const key of Object.keys(dependencies)) {\n const value = dependencies[key];\n if (typeof value === 'string') {\n outputMap[key] = value;\n } else {\n throw new Error(\n `Dependency for key \\`${key}\\` should be a \\`string\\`, instead got: \\`{ ${key}: ${JSON.stringify(\n value\n )} }\\``\n );\n }\n }\n return outputMap;\n}\n\n/**\n * Update package.json scripts - `npm start` should default to `expo\n * start --dev-client` rather than `expo start` after ejecting, for example.\n */\nfunction updatePkgScripts({ pkg }: { pkg: PackageJSONConfig }) {\n if (!pkg.scripts) {\n pkg.scripts = {};\n }\n if (!pkg.scripts.start?.includes('--dev-client')) {\n pkg.scripts.start = 'expo start --dev-client';\n }\n if (!pkg.scripts.android?.includes('run')) {\n pkg.scripts.android = 'expo run:android';\n }\n if (!pkg.scripts.ios?.includes('run')) {\n pkg.scripts.ios = 'expo run:ios';\n }\n}\n\n/**\n * Add new app entry points\n */\nfunction updatePkgMain({ pkg }: { pkg: PackageJSONConfig }): string | null {\n let removedPkgMain: null | string = null;\n // Check that the pkg.main doesn't match:\n // - ./node_modules/expo/AppEntry\n // - ./node_modules/expo/AppEntry.js\n // - node_modules/expo/AppEntry.js\n // - expo/AppEntry.js\n // - expo/AppEntry\n if (shouldDeleteMainField(pkg.main)) {\n // Save the custom\n removedPkgMain = pkg.main;\n delete pkg.main;\n }\n\n return removedPkgMain;\n}\n\n/**\n * Returns true if the input string matches the default expo main field.\n *\n * - ./node_modules/expo/AppEntry\n * - ./node_modules/expo/AppEntry.js\n * - node_modules/expo/AppEntry.js\n * - expo/AppEntry.js\n * - expo/AppEntry\n *\n * @param input package.json main field\n */\nexport function isPkgMainExpoAppEntry(input?: string): boolean {\n const main = input || '';\n if (main.startsWith('./')) {\n return main.includes('node_modules/expo/AppEntry');\n }\n return main.includes('expo/AppEntry');\n}\n\nfunction normalizeDependencyMap(deps: DependenciesMap): string[] {\n return Object.keys(deps)\n .map((dependency) => `${dependency}@${deps[dependency]}`)\n .sort();\n}\n\nexport function hashForDependencyMap(deps: DependenciesMap = {}): string {\n const depsList = normalizeDependencyMap(deps);\n const depsString = depsList.join('\\n');\n return createFileHash(depsString);\n}\n\nexport function createFileHash(contents: string): string {\n // this doesn't need to be secure, the shorter the better.\n return crypto.createHash('sha1').update(contents).digest('hex');\n}\n\nexport function shouldDeleteMainField(main?: any): boolean {\n if (!main || !isPkgMainExpoAppEntry(main)) {\n return false;\n }\n\n return !main?.startsWith('index.');\n}\n"],"names":["updatePackageJSONAsync","updatePkgDependencies","createDependenciesMap","isPkgMainExpoAppEntry","hashForDependencyMap","createFileHash","shouldDeleteMainField","Log","projectRoot","templateDirectory","pkg","skipDependencyUpdate","updatingPackageJsonStep","logNewSection","templatePkg","getPackageJson","results","_modifyPackageJson","fs","promises","writeFile","path","resolve","JSON","stringify","succeed","removedMainField","log","chalk","bold","updatePkgScripts","updatePkgMain","devDependencies","dependencies","defaultDependencies","defaultDevDependencies","combinedDependencies","requiredDependencies","filter","depKey","symlinkedPackages","dependenciesKey","isModuleSymlinked","moduleId","isSilent","push","includes","length","map","join","combinedDevDependencies","hasNewDependencies","hasNewDevDependencies","Object","assign","Error","outputMap","key","keys","value","scripts","start","android","ios","removedPkgMain","main","input","startsWith","normalizeDependencyMap","deps","dependency","sort","depsList","depsString","contents","crypto","createHash","update","digest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/prebuild/updatePackageJson.ts"],"sourcesContent":["import { getPackageJson, PackageJSONConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { isModuleSymlinked } from '../utils/isModuleSymlinked';\nimport { logNewSection } from '../utils/ora';\n\nexport type DependenciesMap = { [key: string]: string | number };\n\nexport type PackageJsonModificationResults = DependenciesModificationResults & {\n removedMainField: string | null;\n};\n\nexport type DependenciesModificationResults = {\n /** Indicates that new values were added to the `dependencies` object in the `package.json`. */\n hasNewDependencies: boolean;\n /** Indicates that new values were added to the `devDependencies` object in the `package.json`. */\n hasNewDevDependencies: boolean;\n};\n\n/** Modifies the `package.json` with `modifyPackageJson` and format/displays the results. */\nexport async function updatePackageJSONAsync(\n projectRoot: string,\n {\n templateDirectory,\n pkg,\n skipDependencyUpdate,\n }: {\n templateDirectory: string;\n pkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): Promise<DependenciesModificationResults> {\n const updatingPackageJsonStep = logNewSection(\n 'Updating your package.json scripts, dependencies, and main file'\n );\n\n const templatePkg = getPackageJson(templateDirectory);\n\n const results = modifyPackageJson(projectRoot, {\n templatePkg,\n pkg,\n skipDependencyUpdate,\n });\n\n await fs.promises.writeFile(\n path.resolve(projectRoot, 'package.json'),\n // Add new line to match the format of running yarn.\n // This prevents the `package.json` from changing when running `prebuild --no-install` multiple times.\n JSON.stringify(pkg, null, 2) + '\\n'\n );\n\n updatingPackageJsonStep.succeed(\n 'Updated package.json and added index.js entry point for iOS and Android'\n );\n\n if (results.removedMainField) {\n Log.log(\n `\\u203A Removed ${chalk.bold(\n `\"main\": \"${results.removedMainField}\"`\n )} from package.json because we recommend using index.js as main instead\\n`\n );\n }\n\n return results;\n}\n\n/**\n * Make required modifications to the `package.json` file as a JSON object.\n *\n * 1. Update `package.json` `scripts`.\n * 2. Update `package.json` `dependencies` and `devDependencies`.\n * 3. Update `package.json` `main`.\n *\n * @param projectRoot The root directory of the project.\n * @param props.templatePkg Template project package.json as JSON.\n * @param props.pkg Current package.json as JSON.\n * @param props.skipDependencyUpdate Array of dependencies to skip updating.\n * @returns\n */\nfunction modifyPackageJson(\n projectRoot: string,\n {\n templatePkg,\n pkg,\n skipDependencyUpdate,\n }: {\n templatePkg: PackageJSONConfig;\n pkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): PackageJsonModificationResults {\n updatePkgScripts({ pkg });\n\n const results = updatePkgDependencies(projectRoot, {\n pkg,\n templatePkg,\n skipDependencyUpdate,\n });\n\n const removedMainField = updatePkgMain({ pkg });\n\n return { ...results, removedMainField };\n}\n\n/**\n * Update package.json dependencies by combining the dependencies in the project we are ejecting\n * with the dependencies in the template project. Does the same for devDependencies.\n *\n * - The template may have some dependencies beyond react/react-native/react-native-unimodules,\n * for example RNGH and Reanimated. We should prefer the version that is already being used\n * in the project for those, but swap the react/react-native/react-native-unimodules versions\n * with the ones in the template.\n * - The same applies to expo-updates -- since some native project configuration may depend on the\n * version, we should always use the version of expo-updates in the template.\n *\n * > Exposed for testing.\n */\nexport function updatePkgDependencies(\n projectRoot: string,\n {\n pkg,\n templatePkg,\n skipDependencyUpdate = [],\n }: {\n pkg: PackageJSONConfig;\n templatePkg: PackageJSONConfig;\n skipDependencyUpdate?: string[];\n }\n): DependenciesModificationResults {\n if (!pkg.devDependencies) {\n pkg.devDependencies = {};\n }\n const { dependencies, devDependencies } = templatePkg;\n const defaultDependencies = createDependenciesMap(dependencies);\n const defaultDevDependencies = createDependenciesMap(devDependencies);\n\n const combinedDependencies: DependenciesMap = createDependenciesMap({\n ...defaultDependencies,\n ...pkg.dependencies,\n });\n\n const requiredDependencies = ['expo', 'expo-splash-screen', 'react', 'react-native'].filter(\n (depKey) => !!defaultDependencies[depKey]\n );\n\n const symlinkedPackages: string[] = [];\n\n for (const dependenciesKey of requiredDependencies) {\n if (\n // If the local package.json defined the dependency that we want to overwrite...\n pkg.dependencies?.[dependenciesKey]\n ) {\n if (\n // Then ensure it isn't symlinked (i.e. the user has a custom version in their yarn workspace).\n isModuleSymlinked(projectRoot, { moduleId: dependenciesKey, isSilent: true })\n ) {\n // If the package is in the project's package.json and it's symlinked, then skip overwriting it.\n symlinkedPackages.push(dependenciesKey);\n continue;\n }\n if (skipDependencyUpdate.includes(dependenciesKey)) {\n continue;\n }\n }\n combinedDependencies[dependenciesKey] = defaultDependencies[dependenciesKey];\n }\n\n if (symlinkedPackages.length) {\n Log.log(\n `\\u203A Using symlinked ${symlinkedPackages\n .map((pkg) => chalk.bold(pkg))\n .join(', ')} instead of recommended version(s).`\n );\n }\n\n const combinedDevDependencies: DependenciesMap = createDependenciesMap({\n ...defaultDevDependencies,\n ...pkg.devDependencies,\n });\n\n // Only change the dependencies if the normalized hash changes, this helps to reduce meaningless changes.\n const hasNewDependencies =\n hashForDependencyMap(pkg.dependencies) !== hashForDependencyMap(combinedDependencies);\n const hasNewDevDependencies =\n hashForDependencyMap(pkg.devDependencies) !== hashForDependencyMap(combinedDevDependencies);\n // Save the dependencies\n if (hasNewDependencies) {\n // Use Object.assign to preserve the original order of dependencies, this makes it easier to see what changed in the git diff.\n pkg.dependencies = Object.assign(pkg.dependencies ?? {}, combinedDependencies);\n }\n if (hasNewDevDependencies) {\n // Same as with dependencies\n pkg.devDependencies = Object.assign(pkg.devDependencies ?? {}, combinedDevDependencies);\n }\n\n return {\n hasNewDependencies,\n hasNewDevDependencies,\n };\n}\n\n/**\n * Create an object of type DependenciesMap a dependencies object or throw if not valid.\n *\n * @param dependencies - ideally an object of type {[key]: string} - if not then this will error.\n */\nexport function createDependenciesMap(dependencies: any): DependenciesMap {\n if (typeof dependencies !== 'object') {\n throw new Error(`Dependency map is invalid, expected object but got ${typeof dependencies}`);\n } else if (!dependencies) {\n return {};\n }\n\n const outputMap: DependenciesMap = {};\n\n for (const key of Object.keys(dependencies)) {\n const value = dependencies[key];\n if (typeof value === 'string') {\n outputMap[key] = value;\n } else {\n throw new Error(\n `Dependency for key \\`${key}\\` should be a \\`string\\`, instead got: \\`{ ${key}: ${JSON.stringify(\n value\n )} }\\``\n );\n }\n }\n return outputMap;\n}\n\n/**\n * Update package.json scripts - `npm start` should default to `expo\n * start --dev-client` rather than `expo start` after ejecting, for example.\n */\nfunction updatePkgScripts({ pkg }: { pkg: PackageJSONConfig }) {\n if (!pkg.scripts) {\n pkg.scripts = {};\n }\n if (!pkg.scripts.start?.includes('--dev-client')) {\n pkg.scripts.start = 'expo start --dev-client';\n }\n if (!pkg.scripts.android?.includes('run')) {\n pkg.scripts.android = 'expo run:android';\n }\n if (!pkg.scripts.ios?.includes('run')) {\n pkg.scripts.ios = 'expo run:ios';\n }\n}\n\n/**\n * Add new app entry points\n */\nfunction updatePkgMain({ pkg }: { pkg: PackageJSONConfig }): string | null {\n let removedPkgMain: null | string = null;\n // Check that the pkg.main doesn't match:\n // - ./node_modules/expo/AppEntry\n // - ./node_modules/expo/AppEntry.js\n // - node_modules/expo/AppEntry.js\n // - expo/AppEntry.js\n // - expo/AppEntry\n if (shouldDeleteMainField(pkg.main)) {\n // Save the custom\n removedPkgMain = pkg.main;\n delete pkg.main;\n }\n\n return removedPkgMain;\n}\n\n/**\n * Returns true if the input string matches the default expo main field.\n *\n * - ./node_modules/expo/AppEntry\n * - ./node_modules/expo/AppEntry.js\n * - node_modules/expo/AppEntry.js\n * - expo/AppEntry.js\n * - expo/AppEntry\n *\n * @param input package.json main field\n */\nexport function isPkgMainExpoAppEntry(input?: string): boolean {\n const main = input || '';\n if (main.startsWith('./')) {\n return main.includes('node_modules/expo/AppEntry');\n }\n return main.includes('expo/AppEntry');\n}\n\nfunction normalizeDependencyMap(deps: DependenciesMap): string[] {\n return Object.keys(deps)\n .map((dependency) => `${dependency}@${deps[dependency]}`)\n .sort();\n}\n\nexport function hashForDependencyMap(deps: DependenciesMap = {}): string {\n const depsList = normalizeDependencyMap(deps);\n const depsString = depsList.join('\\n');\n return createFileHash(depsString);\n}\n\nexport function createFileHash(contents: string): string {\n // this doesn't need to be secure, the shorter the better.\n return crypto.createHash('sha1').update(contents).digest('hex');\n}\n\nexport function shouldDeleteMainField(main?: any): boolean {\n if (!main || !isPkgMainExpoAppEntry(main)) {\n return false;\n }\n\n return !main?.startsWith('index.');\n}\n"],"names":["updatePackageJSONAsync","updatePkgDependencies","createDependenciesMap","isPkgMainExpoAppEntry","hashForDependencyMap","createFileHash","shouldDeleteMainField","Log","projectRoot","templateDirectory","pkg","skipDependencyUpdate","updatingPackageJsonStep","logNewSection","templatePkg","getPackageJson","results","modifyPackageJson","fs","promises","writeFile","path","resolve","JSON","stringify","succeed","removedMainField","log","chalk","bold","updatePkgScripts","updatePkgMain","devDependencies","dependencies","defaultDependencies","defaultDevDependencies","combinedDependencies","requiredDependencies","filter","depKey","symlinkedPackages","dependenciesKey","isModuleSymlinked","moduleId","isSilent","push","includes","length","map","join","combinedDevDependencies","hasNewDependencies","hasNewDevDependencies","Object","assign","Error","outputMap","key","keys","value","scripts","start","android","ios","removedPkgMain","main","input","startsWith","normalizeDependencyMap","deps","dependency","sort","depsList","depsString","contents","crypto","createHash","update","digest"],"mappings":"AAAA;;;;QAwBsBA,sBAAsB,GAAtBA,sBAAsB;QAiG5BC,qBAAqB,GAArBA,qBAAqB;QAyFrBC,qBAAqB,GAArBA,qBAAqB;QA0ErBC,qBAAqB,GAArBA,qBAAqB;QAcrBC,oBAAoB,GAApBA,oBAAoB;QAMpBC,cAAc,GAAdA,cAAc;QAKdC,qBAAqB,GAArBA,qBAAqB;AArTa,IAAA,OAAc,WAAd,cAAc,CAAA;AAC9C,IAAA,MAAO,kCAAP,OAAO,EAAA;AACN,IAAA,OAAQ,kCAAR,QAAQ,EAAA;AACZ,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACF,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEXC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACmB,IAAA,kBAA4B,WAA5B,4BAA4B,CAAA;AAChC,IAAA,IAAc,WAAd,cAAc,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBrC,eAAeP,sBAAsB,CAC1CQ,WAAmB,EACnB,EACEC,iBAAiB,CAAA,EACjBC,GAAG,CAAA,EACHC,oBAAoB,CAAA,EAKrB,EACyC;IAC1C,MAAMC,uBAAuB,GAAGC,CAAAA,GAAAA,IAAa,AAE5C,CAAA,cAF4C,CAC3C,iEAAiE,CAClE,AAAC;IAEF,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,OAAc,AAAmB,CAAA,eAAnB,CAACN,iBAAiB,CAAC,AAAC;IAEtD,MAAMO,OAAO,GAAGC,iBAAiB,CAACT,WAAW,EAAE;QAC7CM,WAAW;QACXJ,GAAG;QACHC,oBAAoB;KACrB,CAAC,AAAC;IAEH,MAAMO,GAAE,QAAA,CAACC,QAAQ,CAACC,SAAS,CACzBC,KAAI,QAAA,CAACC,OAAO,CAACd,WAAW,EAAE,cAAc,CAAC,EACzC,oDAAoD;IACpD,sGAAsG;IACtGe,IAAI,CAACC,SAAS,CAACd,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACpC,CAAC;IAEFE,uBAAuB,CAACa,OAAO,CAC7B,yEAAyE,CAC1E,CAAC;IAEF,IAAIT,OAAO,CAACU,gBAAgB,EAAE;QAC5BnB,GAAG,CAACoB,GAAG,CACL,CAAC,eAAe,EAAEC,MAAK,QAAA,CAACC,IAAI,CAC1B,CAAC,SAAS,EAAEb,OAAO,CAACU,gBAAgB,CAAC,CAAC,CAAC,CACxC,CAAC,wEAAwE,CAAC,CAC5E,CAAC;KACH;IAED,OAAOV,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG,CACH,SAASC,iBAAiB,CACxBT,WAAmB,EACnB,EACEM,WAAW,CAAA,EACXJ,GAAG,CAAA,EACHC,oBAAoB,CAAA,EAKrB,EAC+B;IAChCmB,gBAAgB,CAAC;QAAEpB,GAAG;KAAE,CAAC,CAAC;IAE1B,MAAMM,OAAO,GAAGf,qBAAqB,CAACO,WAAW,EAAE;QACjDE,GAAG;QACHI,WAAW;QACXH,oBAAoB;KACrB,CAAC,AAAC;IAEH,MAAMe,gBAAgB,GAAGK,aAAa,CAAC;QAAErB,GAAG;KAAE,CAAC,AAAC;IAEhD,OAAO;QAAE,GAAGM,OAAO;QAAEU,gBAAgB;KAAE,CAAC;CACzC;AAeM,SAASzB,qBAAqB,CACnCO,WAAmB,EACnB,EACEE,GAAG,EAAHA,IAAG,CAAA,EACHI,WAAW,CAAA,EACXH,oBAAoB,EAAG,EAAE,CAAA,EAK1B,EACgC;IACjC,IAAI,CAACD,IAAG,CAACsB,eAAe,EAAE;QACxBtB,IAAG,CAACsB,eAAe,GAAG,EAAE,CAAC;KAC1B;IACD,MAAM,EAAEC,YAAY,CAAA,EAAED,eAAe,CAAA,EAAE,GAAGlB,WAAW,AAAC;IACtD,MAAMoB,mBAAmB,GAAGhC,qBAAqB,CAAC+B,YAAY,CAAC,AAAC;IAChE,MAAME,sBAAsB,GAAGjC,qBAAqB,CAAC8B,eAAe,CAAC,AAAC;IAEtE,MAAMI,oBAAoB,GAAoBlC,qBAAqB,CAAC;QAClE,GAAGgC,mBAAmB;QACtB,GAAGxB,IAAG,CAACuB,YAAY;KACpB,CAAC,AAAC;IAEH,MAAMI,oBAAoB,GAAG;QAAC,MAAM;QAAE,oBAAoB;QAAE,OAAO;QAAE,cAAc;KAAC,CAACC,MAAM,CACzF,CAACC,MAAM,GAAK,CAAC,CAACL,mBAAmB,CAACK,MAAM,CAAC;IAAA,CAC1C,AAAC;IAEF,MAAMC,iBAAiB,GAAa,EAAE,AAAC;IAEvC,KAAK,MAAMC,eAAe,IAAIJ,oBAAoB,CAAE;YAEhD,gFAAgF;QAChF3B,GAAgB;QAFlB,IAEEA,CAAAA,GAAgB,GAAhBA,IAAG,CAACuB,YAAY,SAAmB,GAAnCvB,KAAAA,CAAmC,GAAnCA,GAAgB,AAAE,CAAC+B,eAAe,CAAC,EACnC;YACA,IACE,+FAA+F;YAC/FC,CAAAA,GAAAA,kBAAiB,AAA4D,CAAA,kBAA5D,CAAClC,WAAW,EAAE;gBAAEmC,QAAQ,EAAEF,eAAe;gBAAEG,QAAQ,EAAE,IAAI;aAAE,CAAC,EAC7E;gBACA,gGAAgG;gBAChGJ,iBAAiB,CAACK,IAAI,CAACJ,eAAe,CAAC,CAAC;gBACxC,SAAS;aACV;YACD,IAAI9B,oBAAoB,CAACmC,QAAQ,CAACL,eAAe,CAAC,EAAE;gBAClD,SAAS;aACV;SACF;QACDL,oBAAoB,CAACK,eAAe,CAAC,GAAGP,mBAAmB,CAACO,eAAe,CAAC,CAAC;KAC9E;IAED,IAAID,iBAAiB,CAACO,MAAM,EAAE;QAC5BxC,GAAG,CAACoB,GAAG,CACL,CAAC,uBAAuB,EAAEa,iBAAiB,CACxCQ,GAAG,CAAC,CAACtC,GAAG,GAAKkB,MAAK,QAAA,CAACC,IAAI,CAACnB,GAAG,CAAC;QAAA,CAAC,CAC7BuC,IAAI,CAAC,IAAI,CAAC,CAAC,mCAAmC,CAAC,CACnD,CAAC;KACH;IAED,MAAMC,uBAAuB,GAAoBhD,qBAAqB,CAAC;QACrE,GAAGiC,sBAAsB;QACzB,GAAGzB,IAAG,CAACsB,eAAe;KACvB,CAAC,AAAC;IAEH,yGAAyG;IACzG,MAAMmB,kBAAkB,GACtB/C,oBAAoB,CAACM,IAAG,CAACuB,YAAY,CAAC,KAAK7B,oBAAoB,CAACgC,oBAAoB,CAAC,AAAC;IACxF,MAAMgB,qBAAqB,GACzBhD,oBAAoB,CAACM,IAAG,CAACsB,eAAe,CAAC,KAAK5B,oBAAoB,CAAC8C,uBAAuB,CAAC,AAAC;IAC9F,wBAAwB;IACxB,IAAIC,kBAAkB,EAAE;YAEWzC,aAAgB;QADjD,8HAA8H;QAC9HA,IAAG,CAACuB,YAAY,GAAGoB,MAAM,CAACC,MAAM,CAAC5C,CAAAA,aAAgB,GAAhBA,IAAG,CAACuB,YAAY,YAAhBvB,aAAgB,GAAI,EAAE,EAAE0B,oBAAoB,CAAC,CAAC;KAChF;IACD,IAAIgB,qBAAqB,EAAE;YAEW1C,gBAAmB;QADvD,4BAA4B;QAC5BA,IAAG,CAACsB,eAAe,GAAGqB,MAAM,CAACC,MAAM,CAAC5C,CAAAA,gBAAmB,GAAnBA,IAAG,CAACsB,eAAe,YAAnBtB,gBAAmB,GAAI,EAAE,EAAEwC,uBAAuB,CAAC,CAAC;KACzF;IAED,OAAO;QACLC,kBAAkB;QAClBC,qBAAqB;KACtB,CAAC;CACH;AAOM,SAASlD,qBAAqB,CAAC+B,YAAiB,EAAmB;IACxE,IAAI,OAAOA,YAAY,KAAK,QAAQ,EAAE;QACpC,MAAM,IAAIsB,KAAK,CAAC,CAAC,mDAAmD,EAAE,OAAOtB,YAAY,CAAC,CAAC,CAAC,CAAC;KAC9F,MAAM,IAAI,CAACA,YAAY,EAAE;QACxB,OAAO,EAAE,CAAC;KACX;IAED,MAAMuB,SAAS,GAAoB,EAAE,AAAC;IAEtC,KAAK,MAAMC,GAAG,IAAIJ,MAAM,CAACK,IAAI,CAACzB,YAAY,CAAC,CAAE;QAC3C,MAAM0B,KAAK,GAAG1B,YAAY,CAACwB,GAAG,CAAC,AAAC;QAChC,IAAI,OAAOE,KAAK,KAAK,QAAQ,EAAE;YAC7BH,SAAS,CAACC,GAAG,CAAC,GAAGE,KAAK,CAAC;SACxB,MAAM;YACL,MAAM,IAAIJ,KAAK,CACb,CAAC,qBAAqB,EAAEE,GAAG,CAAC,4CAA4C,EAAEA,GAAG,CAAC,EAAE,EAAElC,IAAI,CAACC,SAAS,CAC9FmC,KAAK,CACN,CAAC,IAAI,CAAC,CACR,CAAC;SACH;KACF;IACD,OAAOH,SAAS,CAAC;CAClB;AAED;;;GAGG,CACH,SAAS1B,gBAAgB,CAAC,EAAEpB,GAAG,CAAA,EAA8B,EAAE;QAIxDA,GAAiB,EAGjBA,IAAmB,EAGnBA,IAAe;IATpB,IAAI,CAACA,GAAG,CAACkD,OAAO,EAAE;QAChBlD,GAAG,CAACkD,OAAO,GAAG,EAAE,CAAC;KAClB;IACD,IAAI,EAAClD,CAAAA,GAAiB,GAAjBA,GAAG,CAACkD,OAAO,CAACC,KAAK,SAAU,GAA3BnD,KAAAA,CAA2B,GAA3BA,GAAiB,CAAEoC,QAAQ,CAAC,cAAc,CAAC,CAAA,EAAE;QAChDpC,GAAG,CAACkD,OAAO,CAACC,KAAK,GAAG,yBAAyB,CAAC;KAC/C;IACD,IAAI,EAACnD,CAAAA,IAAmB,GAAnBA,GAAG,CAACkD,OAAO,CAACE,OAAO,SAAU,GAA7BpD,KAAAA,CAA6B,GAA7BA,IAAmB,CAAEoC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAE;QACzCpC,GAAG,CAACkD,OAAO,CAACE,OAAO,GAAG,kBAAkB,CAAC;KAC1C;IACD,IAAI,EAACpD,CAAAA,IAAe,GAAfA,GAAG,CAACkD,OAAO,CAACG,GAAG,SAAU,GAAzBrD,KAAAA,CAAyB,GAAzBA,IAAe,CAAEoC,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAE;QACrCpC,GAAG,CAACkD,OAAO,CAACG,GAAG,GAAG,cAAc,CAAC;KAClC;CACF;AAED;;GAEG,CACH,SAAShC,aAAa,CAAC,EAAErB,GAAG,CAAA,EAA8B,EAAiB;IACzE,IAAIsD,cAAc,GAAkB,IAAI,AAAC;IACzC,yCAAyC;IACzC,iCAAiC;IACjC,oCAAoC;IACpC,kCAAkC;IAClC,qBAAqB;IACrB,kBAAkB;IAClB,IAAI1D,qBAAqB,CAACI,GAAG,CAACuD,IAAI,CAAC,EAAE;QACnC,kBAAkB;QAClBD,cAAc,GAAGtD,GAAG,CAACuD,IAAI,CAAC;QAC1B,OAAOvD,GAAG,CAACuD,IAAI,CAAC;KACjB;IAED,OAAOD,cAAc,CAAC;CACvB;AAaM,SAAS7D,qBAAqB,CAAC+D,KAAc,EAAW;IAC7D,MAAMD,IAAI,GAAGC,KAAK,IAAI,EAAE,AAAC;IACzB,IAAID,IAAI,CAACE,UAAU,CAAC,IAAI,CAAC,EAAE;QACzB,OAAOF,IAAI,CAACnB,QAAQ,CAAC,4BAA4B,CAAC,CAAC;KACpD;IACD,OAAOmB,IAAI,CAACnB,QAAQ,CAAC,eAAe,CAAC,CAAC;CACvC;AAED,SAASsB,sBAAsB,CAACC,IAAqB,EAAY;IAC/D,OAAOhB,MAAM,CAACK,IAAI,CAACW,IAAI,CAAC,CACrBrB,GAAG,CAAC,CAACsB,UAAU,GAAK,CAAC,EAAEA,UAAU,CAAC,CAAC,EAAED,IAAI,CAACC,UAAU,CAAC,CAAC,CAAC;IAAA,CAAC,CACxDC,IAAI,EAAE,CAAC;CACX;AAEM,SAASnE,oBAAoB,CAACiE,IAAqB,GAAG,EAAE,EAAU;IACvE,MAAMG,QAAQ,GAAGJ,sBAAsB,CAACC,IAAI,CAAC,AAAC;IAC9C,MAAMI,UAAU,GAAGD,QAAQ,CAACvB,IAAI,CAAC,IAAI,CAAC,AAAC;IACvC,OAAO5C,cAAc,CAACoE,UAAU,CAAC,CAAC;CACnC;AAEM,SAASpE,cAAc,CAACqE,QAAgB,EAAU;IACvD,0DAA0D;IAC1D,OAAOC,OAAM,QAAA,CAACC,UAAU,CAAC,MAAM,CAAC,CAACC,MAAM,CAACH,QAAQ,CAAC,CAACI,MAAM,CAAC,KAAK,CAAC,CAAC;CACjE;AAEM,SAASxE,qBAAqB,CAAC2D,IAAU,EAAW;IACzD,IAAI,CAACA,IAAI,IAAI,CAAC9D,qBAAqB,CAAC8D,IAAI,CAAC,EAAE;QACzC,OAAO,KAAK,CAAC;KACd;IAED,OAAO,EAACA,IAAI,QAAY,GAAhBA,KAAAA,CAAgB,GAAhBA,IAAI,CAAEE,UAAU,CAAC,QAAQ,CAAC,CAAA,CAAC;CACpC"}
|
|
@@ -5,44 +5,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
exports.resolveInstallApkNameAsync = resolveInstallApkNameAsync;
|
|
6
6
|
var _fs = _interopRequireDefault(require("fs"));
|
|
7
7
|
var _path = _interopRequireDefault(require("path"));
|
|
8
|
-
var Log = _interopRequireWildcard(require("../../log"));
|
|
9
8
|
var _adb = require("../../start/platforms/android/adb");
|
|
10
9
|
function _interopRequireDefault(obj) {
|
|
11
10
|
return obj && obj.__esModule ? obj : {
|
|
12
11
|
default: obj
|
|
13
12
|
};
|
|
14
13
|
}
|
|
15
|
-
|
|
16
|
-
if (obj && obj.__esModule) {
|
|
17
|
-
return obj;
|
|
18
|
-
} else {
|
|
19
|
-
var newObj = {};
|
|
20
|
-
if (obj != null) {
|
|
21
|
-
for(var key in obj){
|
|
22
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
23
|
-
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
24
|
-
if (desc.get || desc.set) {
|
|
25
|
-
Object.defineProperty(newObj, key, desc);
|
|
26
|
-
} else {
|
|
27
|
-
newObj[key] = obj[key];
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
newObj.default = obj;
|
|
33
|
-
return newObj;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
14
|
+
const debug = require("debug")("expo:run:android:resolveInstallApkName");
|
|
36
15
|
async function resolveInstallApkNameAsync(device, { appName , buildType , flavors , apkVariantDirectory }) {
|
|
37
16
|
const availableCPUs = await (0, _adb).getDeviceABIsAsync(device);
|
|
38
17
|
availableCPUs.push(_adb.DeviceABI.universal);
|
|
39
|
-
|
|
40
|
-
|
|
18
|
+
debug("Supported ABIs: " + availableCPUs.join(", "));
|
|
19
|
+
debug("Searching for APK: " + apkVariantDirectory);
|
|
41
20
|
// Check for cpu specific builds first
|
|
42
21
|
for (const availableCPU of availableCPUs){
|
|
43
22
|
const apkName = getApkFileName(appName, buildType, flavors, availableCPU);
|
|
44
23
|
const apkPath = _path.default.join(apkVariantDirectory, apkName);
|
|
45
|
-
|
|
24
|
+
debug("Checking for APK at:", apkPath);
|
|
46
25
|
if (_fs.default.existsSync(apkPath)) {
|
|
47
26
|
return apkName;
|
|
48
27
|
}
|
|
@@ -50,7 +29,7 @@ async function resolveInstallApkNameAsync(device, { appName , buildType , flavor
|
|
|
50
29
|
// Otherwise use the default apk named after the variant: app-debug.apk
|
|
51
30
|
const apkName = getApkFileName(appName, buildType, flavors);
|
|
52
31
|
const apkPath = _path.default.join(apkVariantDirectory, apkName);
|
|
53
|
-
|
|
32
|
+
debug("Checking for fallback APK at:", apkPath);
|
|
54
33
|
if (_fs.default.existsSync(apkPath)) {
|
|
55
34
|
return apkName;
|
|
56
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/run/android/resolveInstallApkName.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../src/run/android/resolveInstallApkName.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport { Device, DeviceABI, getDeviceABIsAsync } from '../../start/platforms/android/adb';\nimport { GradleProps } from './resolveGradleProps';\n\nconst debug = require('debug')('expo:run:android:resolveInstallApkName') as typeof console.log;\n\nexport async function resolveInstallApkNameAsync(\n device: Pick<Device, 'name' | 'pid'>,\n { appName, buildType, flavors, apkVariantDirectory }: GradleProps\n) {\n const availableCPUs = await getDeviceABIsAsync(device);\n availableCPUs.push(DeviceABI.universal);\n\n debug('Supported ABIs: ' + availableCPUs.join(', '));\n debug('Searching for APK: ' + apkVariantDirectory);\n\n // Check for cpu specific builds first\n for (const availableCPU of availableCPUs) {\n const apkName = getApkFileName(appName, buildType, flavors, availableCPU);\n const apkPath = path.join(apkVariantDirectory, apkName);\n debug('Checking for APK at:', apkPath);\n if (fs.existsSync(apkPath)) {\n return apkName;\n }\n }\n\n // Otherwise use the default apk named after the variant: app-debug.apk\n const apkName = getApkFileName(appName, buildType, flavors);\n const apkPath = path.join(apkVariantDirectory, apkName);\n debug('Checking for fallback APK at:', apkPath);\n if (fs.existsSync(apkPath)) {\n return apkName;\n }\n\n return null;\n}\n\nfunction getApkFileName(\n appName: string,\n buildType: string,\n flavors?: string[] | null,\n cpuArch?: string | null\n) {\n let apkName = `${appName}-`;\n if (flavors) {\n apkName += flavors.reduce((rest, flavor) => `${rest}${flavor}-`, '');\n }\n if (cpuArch) {\n apkName += `${cpuArch}-`;\n }\n apkName += `${buildType}.apk`;\n\n return apkName;\n}\n"],"names":["resolveInstallApkNameAsync","debug","require","device","appName","buildType","flavors","apkVariantDirectory","availableCPUs","getDeviceABIsAsync","push","DeviceABI","universal","join","availableCPU","apkName","getApkFileName","apkPath","path","fs","existsSync","cpuArch","reduce","rest","flavor"],"mappings":"AAAA;;;;QAQsBA,0BAA0B,GAA1BA,0BAA0B;AARjC,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACF,IAAA,KAAM,kCAAN,MAAM,EAAA;AAE+B,IAAA,IAAmC,WAAnC,mCAAmC,CAAA;;;;;;AAGzF,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,wCAAwC,CAAC,AAAsB,AAAC;AAExF,eAAeF,0BAA0B,CAC9CG,MAAoC,EACpC,EAAEC,OAAO,CAAA,EAAEC,SAAS,CAAA,EAAEC,OAAO,CAAA,EAAEC,mBAAmB,CAAA,EAAe,EACjE;IACA,MAAMC,aAAa,GAAG,MAAMC,CAAAA,GAAAA,IAAkB,AAAQ,CAAA,mBAAR,CAACN,MAAM,CAAC,AAAC;IACvDK,aAAa,CAACE,IAAI,CAACC,IAAS,UAAA,CAACC,SAAS,CAAC,CAAC;IAExCX,KAAK,CAAC,kBAAkB,GAAGO,aAAa,CAACK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrDZ,KAAK,CAAC,qBAAqB,GAAGM,mBAAmB,CAAC,CAAC;IAEnD,sCAAsC;IACtC,KAAK,MAAMO,YAAY,IAAIN,aAAa,CAAE;QACxC,MAAMO,OAAO,GAAGC,cAAc,CAACZ,OAAO,EAAEC,SAAS,EAAEC,OAAO,EAAEQ,YAAY,CAAC,AAAC;QAC1E,MAAMG,OAAO,GAAGC,KAAI,QAAA,CAACL,IAAI,CAACN,mBAAmB,EAAEQ,OAAO,CAAC,AAAC;QACxDd,KAAK,CAAC,sBAAsB,EAAEgB,OAAO,CAAC,CAAC;QACvC,IAAIE,GAAE,QAAA,CAACC,UAAU,CAACH,OAAO,CAAC,EAAE;YAC1B,OAAOF,OAAO,CAAC;SAChB;KACF;IAED,uEAAuE;IACvE,MAAMA,OAAO,GAAGC,cAAc,CAACZ,OAAO,EAAEC,SAAS,EAAEC,OAAO,CAAC,AAAC;IAC5D,MAAMW,OAAO,GAAGC,KAAI,QAAA,CAACL,IAAI,CAACN,mBAAmB,EAAEQ,OAAO,CAAC,AAAC;IACxDd,KAAK,CAAC,+BAA+B,EAAEgB,OAAO,CAAC,CAAC;IAChD,IAAIE,GAAE,QAAA,CAACC,UAAU,CAACH,OAAO,CAAC,EAAE;QAC1B,OAAOF,OAAO,CAAC;KAChB;IAED,OAAO,IAAI,CAAC;CACb;AAED,SAASC,cAAc,CACrBZ,OAAe,EACfC,SAAiB,EACjBC,OAAyB,EACzBe,OAAuB,EACvB;IACA,IAAIN,OAAO,GAAG,CAAC,EAAEX,OAAO,CAAC,CAAC,CAAC,AAAC;IAC5B,IAAIE,OAAO,EAAE;QACXS,OAAO,IAAIT,OAAO,CAACgB,MAAM,CAAC,CAACC,IAAI,EAAEC,MAAM,GAAK,CAAC,EAAED,IAAI,CAAC,EAAEC,MAAM,CAAC,CAAC,CAAC;QAAA,EAAE,EAAE,CAAC,CAAC;KACtE;IACD,IAAIH,OAAO,EAAE;QACXN,OAAO,IAAI,CAAC,EAAEM,OAAO,CAAC,CAAC,CAAC,CAAC;KAC1B;IACDN,OAAO,IAAI,CAAC,EAAEV,SAAS,CAAC,IAAI,CAAC,CAAC;IAE9B,OAAOU,OAAO,CAAC;CAChB"}
|
|
@@ -32,6 +32,7 @@ function _interopRequireWildcard(obj) {
|
|
|
32
32
|
return newObj;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
const debug = require("debug")("expo:doctor:apple:simulatorApp");
|
|
35
36
|
async function getSimulatorAppIdAsync() {
|
|
36
37
|
try {
|
|
37
38
|
return (await (0, _osascript).execAsync('id of app "Simulator"')).trim();
|
|
@@ -51,6 +52,7 @@ class SimulatorAppPrerequisite extends _prerequisite.Prerequisite {
|
|
|
51
52
|
if (result !== "com.apple.iphonesimulator" && result !== "com.apple.CoreSimulator.SimulatorTrampoline") {
|
|
52
53
|
throw new _prerequisite.PrerequisiteCommandError("SIMULATOR_APP", "Simulator is installed but is identified as '" + result + "'; don't know what that is.");
|
|
53
54
|
}
|
|
55
|
+
debug(`Simulator app id: ${result}`);
|
|
54
56
|
try {
|
|
55
57
|
// make sure we can run simctl
|
|
56
58
|
await (0, _spawnAsync).default("xcrun", [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/doctor/apple/SimulatorAppPrerequisite.ts"],"sourcesContent":["import { execAsync } from '@expo/osascript';\nimport spawnAsync from '@expo/spawn-async';\n\nimport * as Log from '../../../log';\nimport { Prerequisite, PrerequisiteCommandError } from '../Prerequisite';\n\nasync function getSimulatorAppIdAsync(): Promise<string | null> {\n try {\n return (await execAsync('id of app \"Simulator\"')).trim();\n } catch {\n // This error may occur in CI where the users intends to install just the simulators but no Xcode.\n }\n return null;\n}\n\nexport class SimulatorAppPrerequisite extends Prerequisite {\n static instance = new SimulatorAppPrerequisite();\n\n async assertImplementation(): Promise<void> {\n const result = await getSimulatorAppIdAsync();\n if (!result) {\n // This error may occur in CI where the users intends to install just the simulators but no Xcode.\n throw new PrerequisiteCommandError(\n 'SIMULATOR_APP',\n \"Can't determine id of Simulator app; the Simulator is most likely not installed on this machine. Run `sudo xcode-select -s /Applications/Xcode.app`\"\n );\n }\n if (\n result !== 'com.apple.iphonesimulator' &&\n result !== 'com.apple.CoreSimulator.SimulatorTrampoline'\n ) {\n throw new PrerequisiteCommandError(\n 'SIMULATOR_APP',\n \"Simulator is installed but is identified as '\" + result + \"'; don't know what that is.\"\n );\n }\n\n try {\n // make sure we can run simctl\n await spawnAsync('xcrun', ['simctl', 'help']);\n } catch (error: any) {\n Log.warn(`Unable to run simctl:\\n${error.toString()}`);\n throw new PrerequisiteCommandError(\n 'SIMCTL',\n 'xcrun is not configured correctly. Ensure `sudo xcode-select --reset` works before running this command again.'\n );\n }\n }\n}\n"],"names":["Log","getSimulatorAppIdAsync","execAsync","trim","SimulatorAppPrerequisite","Prerequisite","instance","assertImplementation","result","PrerequisiteCommandError","spawnAsync","error","warn","toString"],"mappings":"AAAA;;;;AAA0B,IAAA,UAAiB,WAAjB,iBAAiB,CAAA;AACpB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AAE9BA,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACwC,IAAA,aAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAExE,eAAeC,sBAAsB,GAA2B;IAC9D,IAAI;QACF,OAAO,CAAC,MAAMC,CAAAA,GAAAA,UAAS,AAAyB,CAAA,UAAzB,CAAC,uBAAuB,CAAC,CAAC,CAACC,IAAI,EAAE,CAAC;KAC1D,CAAC,OAAM;IACN,kGAAkG;KACnG;IACD,OAAO,IAAI,CAAC;CACb;AAEM,MAAMC,wBAAwB,SAASC,aAAY,aAAA;IACxD,OAAOC,QAAQ,GAAG,IAAIF,wBAAwB,EAAE,CAAC;IAEjD,MAAMG,oBAAoB,GAAkB;QAC1C,MAAMC,MAAM,GAAG,MAAMP,sBAAsB,EAAE,AAAC;QAC9C,IAAI,CAACO,MAAM,EAAE;YACX,kGAAkG;YAClG,MAAM,IAAIC,aAAwB,yBAAA,CAChC,eAAe,EACf,qJAAqJ,CACtJ,CAAC;SACH;QACD,IACED,MAAM,KAAK,2BAA2B,IACtCA,MAAM,KAAK,6CAA6C,EACxD;YACA,MAAM,IAAIC,aAAwB,yBAAA,CAChC,eAAe,EACf,+CAA+C,GAAGD,MAAM,GAAG,6BAA6B,CACzF,CAAC;SACH;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/apple/SimulatorAppPrerequisite.ts"],"sourcesContent":["import { execAsync } from '@expo/osascript';\nimport spawnAsync from '@expo/spawn-async';\n\nimport * as Log from '../../../log';\nimport { Prerequisite, PrerequisiteCommandError } from '../Prerequisite';\n\nconst debug = require('debug')('expo:doctor:apple:simulatorApp') as typeof console.log;\n\nasync function getSimulatorAppIdAsync(): Promise<string | null> {\n try {\n return (await execAsync('id of app \"Simulator\"')).trim();\n } catch {\n // This error may occur in CI where the users intends to install just the simulators but no Xcode.\n }\n return null;\n}\n\nexport class SimulatorAppPrerequisite extends Prerequisite {\n static instance = new SimulatorAppPrerequisite();\n\n async assertImplementation(): Promise<void> {\n const result = await getSimulatorAppIdAsync();\n if (!result) {\n // This error may occur in CI where the users intends to install just the simulators but no Xcode.\n throw new PrerequisiteCommandError(\n 'SIMULATOR_APP',\n \"Can't determine id of Simulator app; the Simulator is most likely not installed on this machine. Run `sudo xcode-select -s /Applications/Xcode.app`\"\n );\n }\n if (\n result !== 'com.apple.iphonesimulator' &&\n result !== 'com.apple.CoreSimulator.SimulatorTrampoline'\n ) {\n throw new PrerequisiteCommandError(\n 'SIMULATOR_APP',\n \"Simulator is installed but is identified as '\" + result + \"'; don't know what that is.\"\n );\n }\n debug(`Simulator app id: ${result}`);\n\n try {\n // make sure we can run simctl\n await spawnAsync('xcrun', ['simctl', 'help']);\n } catch (error: any) {\n Log.warn(`Unable to run simctl:\\n${error.toString()}`);\n throw new PrerequisiteCommandError(\n 'SIMCTL',\n 'xcrun is not configured correctly. Ensure `sudo xcode-select --reset` works before running this command again.'\n );\n }\n }\n}\n"],"names":["Log","debug","require","getSimulatorAppIdAsync","execAsync","trim","SimulatorAppPrerequisite","Prerequisite","instance","assertImplementation","result","PrerequisiteCommandError","spawnAsync","error","warn","toString"],"mappings":"AAAA;;;;AAA0B,IAAA,UAAiB,WAAjB,iBAAiB,CAAA;AACpB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AAE9BA,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACwC,IAAA,aAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAExE,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,gCAAgC,CAAC,AAAsB,AAAC;AAEvF,eAAeC,sBAAsB,GAA2B;IAC9D,IAAI;QACF,OAAO,CAAC,MAAMC,CAAAA,GAAAA,UAAS,AAAyB,CAAA,UAAzB,CAAC,uBAAuB,CAAC,CAAC,CAACC,IAAI,EAAE,CAAC;KAC1D,CAAC,OAAM;IACN,kGAAkG;KACnG;IACD,OAAO,IAAI,CAAC;CACb;AAEM,MAAMC,wBAAwB,SAASC,aAAY,aAAA;IACxD,OAAOC,QAAQ,GAAG,IAAIF,wBAAwB,EAAE,CAAC;IAEjD,MAAMG,oBAAoB,GAAkB;QAC1C,MAAMC,MAAM,GAAG,MAAMP,sBAAsB,EAAE,AAAC;QAC9C,IAAI,CAACO,MAAM,EAAE;YACX,kGAAkG;YAClG,MAAM,IAAIC,aAAwB,yBAAA,CAChC,eAAe,EACf,qJAAqJ,CACtJ,CAAC;SACH;QACD,IACED,MAAM,KAAK,2BAA2B,IACtCA,MAAM,KAAK,6CAA6C,EACxD;YACA,MAAM,IAAIC,aAAwB,yBAAA,CAChC,eAAe,EACf,+CAA+C,GAAGD,MAAM,GAAG,6BAA6B,CACzF,CAAC;SACH;QACDT,KAAK,CAAC,CAAC,kBAAkB,EAAES,MAAM,CAAC,CAAC,CAAC,CAAC;QAErC,IAAI;YACF,8BAA8B;YAC9B,MAAME,CAAAA,GAAAA,WAAU,AAA6B,CAAA,QAA7B,CAAC,OAAO,EAAE;gBAAC,QAAQ;gBAAE,MAAM;aAAC,CAAC,CAAC;SAC/C,CAAC,OAAOC,KAAK,EAAO;YACnBb,GAAG,CAACc,IAAI,CAAC,CAAC,uBAAuB,EAAED,KAAK,CAACE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,IAAIJ,aAAwB,yBAAA,CAChC,QAAQ,EACR,gHAAgH,CACjH,CAAC;SACH;KACF;CACF;QAlCYL,wBAAwB,GAAxBA,wBAAwB"}
|
|
@@ -36,6 +36,7 @@ function _interopRequireWildcard(obj) {
|
|
|
36
36
|
return newObj;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
const debug = require("debug")("expo:doctor:apple:xcode");
|
|
39
40
|
// Based on the RN docs (Aug 2020).
|
|
40
41
|
const MIN_XCODE_VERSION = 9.4;
|
|
41
42
|
const APP_STORE_ID = "497799835";
|
|
@@ -98,6 +99,7 @@ class XcodePrerequisite extends _prerequisite.Prerequisite {
|
|
|
98
99
|
* Ensure Xcode is installed and recent enough to be used with Expo.
|
|
99
100
|
*/ async assertImplementation() {
|
|
100
101
|
const version = (0, _profile).profile(getXcodeVersionAsync)();
|
|
102
|
+
debug(`Xcode version: ${version}`);
|
|
101
103
|
if (!version) {
|
|
102
104
|
// Almost certainly Xcode isn't installed.
|
|
103
105
|
await promptToOpenAppStoreAsync(`Xcode needs to be installed (don't worry, you won't have to use it), would you like to continue to the App Store?`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/doctor/apple/XcodePrerequisite.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport semver from 'semver';\n\nimport * as Log from '../../../log';\nimport { AbortCommandError } from '../../../utils/errors';\nimport { profile } from '../../../utils/profile';\nimport { confirmAsync } from '../../../utils/prompts';\nimport { Prerequisite } from '../Prerequisite';\n\n// Based on the RN docs (Aug 2020).\nconst MIN_XCODE_VERSION = 9.4;\nconst APP_STORE_ID = '497799835';\n\nconst SUGGESTED_XCODE_VERSION = `${MIN_XCODE_VERSION}.0`;\n\nconst promptToOpenAppStoreAsync = async (message: string) => {\n // This prompt serves no purpose accept informing the user what to do next, we could just open the App Store but it could be confusing if they don't know what's going on.\n const confirm = await confirmAsync({ initial: true, message });\n if (confirm) {\n Log.log(`Going to the App Store, re-run Expo when Xcode has finished installing.`);\n openAppStore(APP_STORE_ID);\n }\n};\n\n/** Exposed for testing, use `getXcodeVersion` */\nexport const getXcodeVersionAsync = (): string | null | false => {\n try {\n const last = execSync('xcodebuild -version', { stdio: 'pipe' })\n .toString()\n .match(/^Xcode (\\d+\\.\\d+)/)?.[1];\n // Convert to a semver string\n if (last) {\n const version = `${last}.0`;\n\n if (!semver.valid(version)) {\n // Not sure why this would happen, if it does we should add a more confident error message.\n Log.error(`Xcode version is in an unknown format: ${version}`);\n return false;\n }\n\n return version;\n }\n // not sure what's going on\n Log.error(\n 'Unable to check Xcode version. Command ran successfully but no version number was found.'\n );\n } catch {\n // not installed\n }\n return null;\n};\n\n/**\n * Open a link to the App Store. Just link in mobile apps, **never** redirect without prompting first.\n *\n * @param appId\n */\nfunction openAppStore(appId: string) {\n const link = getAppStoreLink(appId);\n execSync(`open ${link}`, { stdio: 'ignore' });\n}\n\nfunction getAppStoreLink(appId: string): string {\n if (process.platform === 'darwin') {\n // TODO: Is there ever a case where the macappstore isn't available on mac?\n return `macappstore://itunes.apple.com/app/id${appId}`;\n }\n return `https://apps.apple.com/us/app/id${appId}`;\n}\n\nexport class XcodePrerequisite extends Prerequisite {\n static instance = new XcodePrerequisite();\n\n /**\n * Ensure Xcode is installed and recent enough to be used with Expo.\n */\n async assertImplementation(): Promise<void> {\n const version = profile(getXcodeVersionAsync)();\n if (!version) {\n // Almost certainly Xcode isn't installed.\n await promptToOpenAppStoreAsync(\n `Xcode needs to be installed (don't worry, you won't have to use it), would you like to continue to the App Store?`\n );\n throw new AbortCommandError();\n }\n\n if (semver.lt(version, SUGGESTED_XCODE_VERSION)) {\n // Xcode version is too old.\n await promptToOpenAppStoreAsync(\n `Xcode (${version}) needs to be updated to at least version ${MIN_XCODE_VERSION}, would you like to continue to the App Store?`\n );\n throw new AbortCommandError();\n }\n }\n}\n"],"names":["Log","MIN_XCODE_VERSION","APP_STORE_ID","SUGGESTED_XCODE_VERSION","promptToOpenAppStoreAsync","message","confirm","confirmAsync","initial","log","openAppStore","getXcodeVersionAsync","execSync","last","stdio","toString","match","version","semver","valid","error","appId","link","getAppStoreLink","process","platform","XcodePrerequisite","Prerequisite","instance","assertImplementation","profile","AbortCommandError","lt"],"mappings":"AAAA;;;;;AAAyB,IAAA,aAAe,WAAf,eAAe,CAAA;AACrB,IAAA,OAAQ,kCAAR,QAAQ,EAAA;AAEfA,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACmB,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AACjC,IAAA,QAAwB,WAAxB,wBAAwB,CAAA;AACnB,IAAA,QAAwB,WAAxB,wBAAwB,CAAA;AACxB,IAAA,aAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE9C,mCAAmC;AACnC,MAAMC,iBAAiB,GAAG,GAAG,AAAC;AAC9B,MAAMC,YAAY,GAAG,WAAW,AAAC;AAEjC,MAAMC,uBAAuB,GAAG,CAAC,EAAEF,iBAAiB,CAAC,EAAE,CAAC,AAAC;AAEzD,MAAMG,yBAAyB,GAAG,OAAOC,OAAe,GAAK;IAC3D,0KAA0K;IAC1K,MAAMC,OAAO,GAAG,MAAMC,CAAAA,GAAAA,QAAY,AAA4B,CAAA,aAA5B,CAAC;QAAEC,OAAO,EAAE,IAAI;QAAEH,OAAO;KAAE,CAAC,AAAC;IAC/D,IAAIC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/apple/XcodePrerequisite.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport semver from 'semver';\n\nimport * as Log from '../../../log';\nimport { AbortCommandError } from '../../../utils/errors';\nimport { profile } from '../../../utils/profile';\nimport { confirmAsync } from '../../../utils/prompts';\nimport { Prerequisite } from '../Prerequisite';\n\nconst debug = require('debug')('expo:doctor:apple:xcode') as typeof console.log;\n\n// Based on the RN docs (Aug 2020).\nconst MIN_XCODE_VERSION = 9.4;\nconst APP_STORE_ID = '497799835';\n\nconst SUGGESTED_XCODE_VERSION = `${MIN_XCODE_VERSION}.0`;\n\nconst promptToOpenAppStoreAsync = async (message: string) => {\n // This prompt serves no purpose accept informing the user what to do next, we could just open the App Store but it could be confusing if they don't know what's going on.\n const confirm = await confirmAsync({ initial: true, message });\n if (confirm) {\n Log.log(`Going to the App Store, re-run Expo when Xcode has finished installing.`);\n openAppStore(APP_STORE_ID);\n }\n};\n\n/** Exposed for testing, use `getXcodeVersion` */\nexport const getXcodeVersionAsync = (): string | null | false => {\n try {\n const last = execSync('xcodebuild -version', { stdio: 'pipe' })\n .toString()\n .match(/^Xcode (\\d+\\.\\d+)/)?.[1];\n // Convert to a semver string\n if (last) {\n const version = `${last}.0`;\n\n if (!semver.valid(version)) {\n // Not sure why this would happen, if it does we should add a more confident error message.\n Log.error(`Xcode version is in an unknown format: ${version}`);\n return false;\n }\n\n return version;\n }\n // not sure what's going on\n Log.error(\n 'Unable to check Xcode version. Command ran successfully but no version number was found.'\n );\n } catch {\n // not installed\n }\n return null;\n};\n\n/**\n * Open a link to the App Store. Just link in mobile apps, **never** redirect without prompting first.\n *\n * @param appId\n */\nfunction openAppStore(appId: string) {\n const link = getAppStoreLink(appId);\n execSync(`open ${link}`, { stdio: 'ignore' });\n}\n\nfunction getAppStoreLink(appId: string): string {\n if (process.platform === 'darwin') {\n // TODO: Is there ever a case where the macappstore isn't available on mac?\n return `macappstore://itunes.apple.com/app/id${appId}`;\n }\n return `https://apps.apple.com/us/app/id${appId}`;\n}\n\nexport class XcodePrerequisite extends Prerequisite {\n static instance = new XcodePrerequisite();\n\n /**\n * Ensure Xcode is installed and recent enough to be used with Expo.\n */\n async assertImplementation(): Promise<void> {\n const version = profile(getXcodeVersionAsync)();\n debug(`Xcode version: ${version}`);\n if (!version) {\n // Almost certainly Xcode isn't installed.\n await promptToOpenAppStoreAsync(\n `Xcode needs to be installed (don't worry, you won't have to use it), would you like to continue to the App Store?`\n );\n throw new AbortCommandError();\n }\n\n if (semver.lt(version, SUGGESTED_XCODE_VERSION)) {\n // Xcode version is too old.\n await promptToOpenAppStoreAsync(\n `Xcode (${version}) needs to be updated to at least version ${MIN_XCODE_VERSION}, would you like to continue to the App Store?`\n );\n throw new AbortCommandError();\n }\n }\n}\n"],"names":["Log","debug","require","MIN_XCODE_VERSION","APP_STORE_ID","SUGGESTED_XCODE_VERSION","promptToOpenAppStoreAsync","message","confirm","confirmAsync","initial","log","openAppStore","getXcodeVersionAsync","execSync","last","stdio","toString","match","version","semver","valid","error","appId","link","getAppStoreLink","process","platform","XcodePrerequisite","Prerequisite","instance","assertImplementation","profile","AbortCommandError","lt"],"mappings":"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"}
|
|
@@ -36,16 +36,17 @@ function _interopRequireWildcard(obj) {
|
|
|
36
36
|
return newObj;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
const debug = require("debug")("expo:doctor:dependencies:bundledNativeModules");
|
|
39
40
|
async function getVersionedNativeModulesAsync(projectRoot, sdkVersion) {
|
|
40
41
|
if (sdkVersion !== "UNVERSIONED" && !_settings.APISettings.isOffline) {
|
|
41
42
|
try {
|
|
42
|
-
|
|
43
|
+
debug("Fetching bundled native modules from the server...");
|
|
43
44
|
return await (0, _getNativeModuleVersions).getNativeModuleVersionsAsync(sdkVersion);
|
|
44
45
|
} catch {
|
|
45
46
|
Log.warn(_chalk.default`Unable to reach Expo servers. Falling back to using the cached dependency map ({bold bundledNativeModules.json}) from the package "{bold expo}" installed in your project.`);
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
+
debug("Fetching bundled native modules from the local JSON file...");
|
|
49
50
|
return await getBundledNativeModulesAsync(projectRoot);
|
|
50
51
|
}
|
|
51
52
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/bundledNativeModules.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport chalk from 'chalk';\nimport resolveFrom from 'resolve-from';\n\nimport { getNativeModuleVersionsAsync } from '../../../api/getNativeModuleVersions';\nimport { APISettings } from '../../../api/settings';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\n\nexport type BundledNativeModules = Record<string, string>;\n\n/**\n * Gets the bundledNativeModules.json for a given SDK version:\n * - Tries to fetch the data from the /sdks/:sdkVersion/native-modules API endpoint.\n * - If the data is missing on the server (it can happen for SDKs that are yet fully released)\n * or there's a downtime, reads the local .json file from the \"expo\" package.\n * - For UNVERSIONED, returns the local .json file contents.\n */\nexport async function getVersionedNativeModulesAsync(\n projectRoot: string,\n sdkVersion: string\n): Promise<BundledNativeModules> {\n if (sdkVersion !== 'UNVERSIONED' && !APISettings.isOffline) {\n try {\n
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/bundledNativeModules.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport chalk from 'chalk';\nimport resolveFrom from 'resolve-from';\n\nimport { getNativeModuleVersionsAsync } from '../../../api/getNativeModuleVersions';\nimport { APISettings } from '../../../api/settings';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\n\nconst debug = require('debug')(\n 'expo:doctor:dependencies:bundledNativeModules'\n) as typeof console.log;\n\nexport type BundledNativeModules = Record<string, string>;\n\n/**\n * Gets the bundledNativeModules.json for a given SDK version:\n * - Tries to fetch the data from the /sdks/:sdkVersion/native-modules API endpoint.\n * - If the data is missing on the server (it can happen for SDKs that are yet fully released)\n * or there's a downtime, reads the local .json file from the \"expo\" package.\n * - For UNVERSIONED, returns the local .json file contents.\n */\nexport async function getVersionedNativeModulesAsync(\n projectRoot: string,\n sdkVersion: string\n): Promise<BundledNativeModules> {\n if (sdkVersion !== 'UNVERSIONED' && !APISettings.isOffline) {\n try {\n debug('Fetching bundled native modules from the server...');\n return await getNativeModuleVersionsAsync(sdkVersion);\n } catch {\n Log.warn(\n chalk`Unable to reach Expo servers. Falling back to using the cached dependency map ({bold bundledNativeModules.json}) from the package \"{bold expo}\" installed in your project.`\n );\n }\n }\n\n debug('Fetching bundled native modules from the local JSON file...');\n return await getBundledNativeModulesAsync(projectRoot);\n}\n\n/**\n * Get the legacy static `bundledNativeModules.json` file\n * that's shipped with the version of `expo` that the project has installed.\n */\nasync function getBundledNativeModulesAsync(projectRoot: string): Promise<BundledNativeModules> {\n // TODO: Revisit now that this code is in the `expo` package.\n const bundledNativeModulesPath = resolveFrom.silent(\n projectRoot,\n 'expo/bundledNativeModules.json'\n );\n if (!bundledNativeModulesPath) {\n Log.log();\n throw new CommandError(\n chalk`The dependency map {bold expo/bundledNativeModules.json} cannot be found, please ensure you have the package \"{bold expo}\" installed in your project.`\n );\n }\n return await JsonFile.readAsync<BundledNativeModules>(bundledNativeModulesPath);\n}\n"],"names":["getVersionedNativeModulesAsync","Log","debug","require","projectRoot","sdkVersion","APISettings","isOffline","getNativeModuleVersionsAsync","warn","chalk","getBundledNativeModulesAsync","bundledNativeModulesPath","resolveFrom","silent","log","CommandError","JsonFile","readAsync"],"mappings":"AAAA;;;;QAsBsBA,8BAA8B,GAA9BA,8BAA8B;AAtB/B,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACpB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACD,IAAA,YAAc,kCAAd,cAAc,EAAA;AAEO,IAAA,wBAAsC,WAAtC,sCAAsC,CAAA;AACvD,IAAA,SAAuB,WAAvB,uBAAuB,CAAA;AACvCC,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACc,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEpD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAC5B,+CAA+C,CAChD,AAAsB,AAAC;AAWjB,eAAeH,8BAA8B,CAClDI,WAAmB,EACnBC,UAAkB,EACa;IAC/B,IAAIA,UAAU,KAAK,aAAa,IAAI,CAACC,SAAW,YAAA,CAACC,SAAS,EAAE;QAC1D,IAAI;YACFL,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAC5D,OAAO,MAAMM,CAAAA,GAAAA,wBAA4B,AAAY,CAAA,6BAAZ,CAACH,UAAU,CAAC,CAAC;SACvD,CAAC,OAAM;YACNJ,GAAG,CAACQ,IAAI,CACNC,MAAK,QAAA,CAAC,0KAA0K,CAAC,CAClL,CAAC;SACH;KACF;IAEDR,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACrE,OAAO,MAAMS,4BAA4B,CAACP,WAAW,CAAC,CAAC;CACxD;AAED;;;GAGG,CACH,eAAeO,4BAA4B,CAACP,WAAmB,EAAiC;IAC9F,6DAA6D;IAC7D,MAAMQ,wBAAwB,GAAGC,YAAW,QAAA,CAACC,MAAM,CACjDV,WAAW,EACX,gCAAgC,CACjC,AAAC;IACF,IAAI,CAACQ,wBAAwB,EAAE;QAC7BX,GAAG,CAACc,GAAG,EAAE,CAAC;QACV,MAAM,IAAIC,OAAY,aAAA,CACpBN,MAAK,QAAA,CAAC,qJAAqJ,CAAC,CAC7J,CAAC;KACH;IACD,OAAO,MAAMO,SAAQ,QAAA,CAACC,SAAS,CAAuBN,wBAAwB,CAAC,CAAC;CACjF"}
|
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
exports.ensureDependenciesAsync = ensureDependenciesAsync;
|
|
6
6
|
exports.createInstallCommand = createInstallCommand;
|
|
7
7
|
var _config = require("@expo/config");
|
|
8
|
-
var PackageManager = _interopRequireWildcard(require("@expo/package-manager"));
|
|
9
8
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
10
9
|
var _wrapAnsi = _interopRequireDefault(require("wrap-ansi"));
|
|
10
|
+
var _installAsync = require("../../../install/installAsync");
|
|
11
11
|
var Log = _interopRequireWildcard(require("../../../log"));
|
|
12
12
|
var _env = require("../../../utils/env");
|
|
13
13
|
var _errors = require("../../../utils/errors");
|
|
@@ -55,7 +55,6 @@ skipPrompt =_env.env.CI }) {
|
|
|
55
55
|
version
|
|
56
56
|
].join("@") : pkg
|
|
57
57
|
).join(", ");
|
|
58
|
-
const isYarn = PackageManager.isUsingYarn(projectRoot);
|
|
59
58
|
let title = installMessage;
|
|
60
59
|
if (skipPrompt) {
|
|
61
60
|
title += "\n\n";
|
|
@@ -73,7 +72,6 @@ skipPrompt =_env.env.CI }) {
|
|
|
73
72
|
);
|
|
74
73
|
// Install packages with versions
|
|
75
74
|
await installPackagesAsync(projectRoot, {
|
|
76
|
-
isYarn,
|
|
77
75
|
packages
|
|
78
76
|
});
|
|
79
77
|
// Try again but skip prompting twice, simply fail if the packages didn't install correctly.
|
|
@@ -88,7 +86,6 @@ skipPrompt =_env.env.CI }) {
|
|
|
88
86
|
title = "";
|
|
89
87
|
}
|
|
90
88
|
const installCommand = createInstallCommand({
|
|
91
|
-
isYarn,
|
|
92
89
|
packages: missing
|
|
93
90
|
});
|
|
94
91
|
const disableMessage = warningMessage;
|
|
@@ -99,8 +96,8 @@ skipPrompt =_env.env.CI }) {
|
|
|
99
96
|
/** Wrap long messages to fit smaller terminals. */ function wrapForTerminal(message) {
|
|
100
97
|
return (0, _wrapAnsi).default(message, process.stdout.columns || 80);
|
|
101
98
|
}
|
|
102
|
-
function createInstallCommand({
|
|
103
|
-
return
|
|
99
|
+
function createInstallCommand({ packages }) {
|
|
100
|
+
return "npx expo install " + packages.map(({ pkg , version })=>{
|
|
104
101
|
if (version) {
|
|
105
102
|
return [
|
|
106
103
|
pkg,
|
|
@@ -110,17 +107,14 @@ function createInstallCommand({ isYarn , packages }) {
|
|
|
110
107
|
return pkg;
|
|
111
108
|
}).join(" ");
|
|
112
109
|
}
|
|
113
|
-
/** Install packages in the project. */ async function installPackagesAsync(projectRoot, {
|
|
114
|
-
const packageManager = PackageManager.createForProject(projectRoot, {
|
|
115
|
-
yarn: isYarn,
|
|
116
|
-
log: Log.log,
|
|
117
|
-
silent: !_env.env.EXPO_DEBUG
|
|
118
|
-
});
|
|
110
|
+
/** Install packages in the project. */ async function installPackagesAsync(projectRoot, { packages }) {
|
|
119
111
|
const packagesStr = _chalk.default.bold(packages.join(", "));
|
|
120
112
|
Log.log();
|
|
121
113
|
const installingPackageStep = (0, _ora).logNewSection(`Installing ${packagesStr}`);
|
|
122
114
|
try {
|
|
123
|
-
await
|
|
115
|
+
await (0, _installAsync).installAsync(packages, {
|
|
116
|
+
projectRoot
|
|
117
|
+
});
|
|
124
118
|
} catch (e) {
|
|
125
119
|
installingPackageStep.fail(`Failed to install ${packagesStr} with error: ${e.message}`);
|
|
126
120
|
throw e;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/ensureDependenciesAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/ensureDependenciesAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport wrapAnsi from 'wrap-ansi';\n\nimport { installAsync } from '../../../install/installAsync';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { logNewSection } from '../../../utils/ora';\nimport { confirmAsync } from '../../../utils/prompts';\nimport { getMissingPackagesAsync, ResolvedPackage } from './getMissingPackages';\n\nexport async function ensureDependenciesAsync(\n projectRoot: string,\n {\n exp = getConfig(projectRoot).exp,\n requiredPackages,\n warningMessage,\n installMessage,\n // Don't prompt in CI\n skipPrompt = env.CI,\n }: {\n exp?: ExpoConfig;\n installMessage: string;\n warningMessage: string;\n requiredPackages: ResolvedPackage[];\n skipPrompt?: boolean;\n }\n): Promise<boolean> {\n const { missing } = await getMissingPackagesAsync(projectRoot, {\n sdkVersion: exp.sdkVersion,\n requiredPackages,\n });\n if (!missing.length) {\n return true;\n }\n\n // Prompt to install or bail out...\n const readableMissingPackages = missing\n .map(({ pkg, version }) => (version ? [pkg, version].join('@') : pkg))\n .join(', ');\n\n let title = installMessage;\n\n if (skipPrompt) {\n title += '\\n\\n';\n } else {\n const confirm = await confirmAsync({\n message: wrapForTerminal(\n title + ` Would you like to install ${chalk.cyan(readableMissingPackages)}?`\n ),\n initial: true,\n });\n\n if (confirm) {\n // Format with version if available.\n const packages = missing.map(({ pkg, version }) =>\n version ? [pkg, version].join('@') : pkg\n );\n // Install packages with versions\n await installPackagesAsync(projectRoot, {\n packages,\n });\n // Try again but skip prompting twice, simply fail if the packages didn't install correctly.\n return await ensureDependenciesAsync(projectRoot, {\n skipPrompt: true,\n installMessage,\n warningMessage,\n requiredPackages,\n });\n }\n\n // Reset the title so it doesn't print twice in interactive mode.\n title = '';\n }\n\n const installCommand = createInstallCommand({\n packages: missing,\n });\n\n const disableMessage = warningMessage;\n\n const solution = `Please install ${chalk.bold(\n readableMissingPackages\n )} by running:\\n\\n ${chalk.reset.bold(installCommand)}\\n\\n`;\n\n // This prevents users from starting a misconfigured JS or TS project by default.\n throw new CommandError(wrapForTerminal(title + solution + disableMessage + '\\n'));\n}\n\n/** Wrap long messages to fit smaller terminals. */\nfunction wrapForTerminal(message: string): string {\n return wrapAnsi(message, process.stdout.columns || 80);\n}\n\n/** Create the bash install command from a given set of packages and settings. */\nexport function createInstallCommand({\n packages,\n}: {\n packages: {\n file: string;\n pkg: string;\n version?: string | undefined;\n }[];\n}) {\n return (\n 'npx expo install ' +\n packages\n .map(({ pkg, version }) => {\n if (version) {\n return [pkg, version].join('@');\n }\n return pkg;\n })\n .join(' ')\n );\n}\n\n/** Install packages in the project. */\nasync function installPackagesAsync(projectRoot: string, { packages }: { packages: string[] }) {\n const packagesStr = chalk.bold(packages.join(', '));\n Log.log();\n const installingPackageStep = logNewSection(`Installing ${packagesStr}`);\n try {\n await installAsync(packages, { projectRoot });\n } catch (e: any) {\n installingPackageStep.fail(`Failed to install ${packagesStr} with error: ${e.message}`);\n throw e;\n }\n installingPackageStep.succeed(`Installed ${packagesStr}`);\n}\n"],"names":["ensureDependenciesAsync","createInstallCommand","Log","projectRoot","exp","getConfig","requiredPackages","warningMessage","installMessage","skipPrompt","env","CI","missing","getMissingPackagesAsync","sdkVersion","length","readableMissingPackages","map","pkg","version","join","title","confirm","confirmAsync","message","wrapForTerminal","chalk","cyan","initial","packages","installPackagesAsync","installCommand","disableMessage","solution","bold","reset","CommandError","wrapAnsi","process","stdout","columns","packagesStr","log","installingPackageStep","logNewSection","installAsync","e","fail","succeed"],"mappings":"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"}
|
|
@@ -9,34 +9,13 @@ exports.mutatePackagesWithKnownVersionsAsync = mutatePackagesWithKnownVersionsAs
|
|
|
9
9
|
var _jsonFile = _interopRequireDefault(require("@expo/json-file"));
|
|
10
10
|
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
11
11
|
var _semver = _interopRequireDefault(require("semver"));
|
|
12
|
-
var Log = _interopRequireWildcard(require("../../../log"));
|
|
13
12
|
var _getVersionedPackages = require("./getVersionedPackages");
|
|
14
13
|
function _interopRequireDefault(obj) {
|
|
15
14
|
return obj && obj.__esModule ? obj : {
|
|
16
15
|
default: obj
|
|
17
16
|
};
|
|
18
17
|
}
|
|
19
|
-
|
|
20
|
-
if (obj && obj.__esModule) {
|
|
21
|
-
return obj;
|
|
22
|
-
} else {
|
|
23
|
-
var newObj = {};
|
|
24
|
-
if (obj != null) {
|
|
25
|
-
for(var key in obj){
|
|
26
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
27
|
-
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
28
|
-
if (desc.get || desc.set) {
|
|
29
|
-
Object.defineProperty(newObj, key, desc);
|
|
30
|
-
} else {
|
|
31
|
-
newObj[key] = obj[key];
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
newObj.default = obj;
|
|
37
|
-
return newObj;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
18
|
+
const debug = require("debug")("expo:doctor:dependencies:getMissingPackages");
|
|
40
19
|
function collectMissingPackages(projectRoot, requiredPackages) {
|
|
41
20
|
const resolutions = {};
|
|
42
21
|
const missingPackages = requiredPackages.filter((p)=>{
|
|
@@ -55,7 +34,7 @@ function collectMissingPackages(projectRoot, requiredPackages) {
|
|
|
55
34
|
function versionSatisfiesRequiredPackage(packageJsonFilePath, resolvedPackage) {
|
|
56
35
|
// If the version is specified, check that it satisfies the installed version.
|
|
57
36
|
if (!resolvedPackage.version) {
|
|
58
|
-
|
|
37
|
+
debug(`Required package "${resolvedPackage.pkg}" found (no version constraint specified).`);
|
|
59
38
|
return true;
|
|
60
39
|
}
|
|
61
40
|
const pkgJson = _jsonFile.default.read(packageJsonFilePath);
|
|
@@ -64,7 +43,7 @@ function versionSatisfiesRequiredPackage(packageJsonFilePath, resolvedPackage) {
|
|
|
64
43
|
_semver.default.satisfies(pkgJson.version, resolvedPackage.version)) {
|
|
65
44
|
return true;
|
|
66
45
|
}
|
|
67
|
-
|
|
46
|
+
debug(`Installed package "${resolvedPackage.pkg}" does not satisfy version constraint "${resolvedPackage.version}" (version: "${pkgJson.version}")`);
|
|
68
47
|
return false;
|
|
69
48
|
}
|
|
70
49
|
async function getMissingPackagesAsync(projectRoot, { sdkVersion , requiredPackages }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/getMissingPackages.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/getMissingPackages.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport { getCombinedKnownVersionsAsync } from './getVersionedPackages';\n\nconst debug = require('debug')('expo:doctor:dependencies:getMissingPackages') as typeof console.log;\n\nexport type ResolvedPackage = {\n /** Module ID pointing to the library `package.json`. */\n file: string;\n /** NPM package name. */\n pkg: string;\n /** Required version range. */\n version?: string;\n /** If the dependency should be installed as a `devDependency` */\n dev?: boolean;\n};\n\n/** Given a set of required packages, this method returns a list of missing packages. */\nexport function collectMissingPackages(\n projectRoot: string,\n requiredPackages: ResolvedPackage[]\n): {\n missing: ResolvedPackage[];\n resolutions: Record<string, string>;\n} {\n const resolutions: Record<string, string> = {};\n\n const missingPackages = requiredPackages.filter((p) => {\n const resolved = resolveFrom.silent(projectRoot, p.file);\n if (!resolved || !versionSatisfiesRequiredPackage(resolved, p)) {\n return true;\n }\n resolutions[p.pkg] = resolved;\n return false;\n });\n\n return { missing: missingPackages, resolutions };\n}\n\nexport function versionSatisfiesRequiredPackage(\n packageJsonFilePath: string,\n resolvedPackage: Pick<ResolvedPackage, 'version' | 'pkg'>\n): boolean {\n // If the version is specified, check that it satisfies the installed version.\n if (!resolvedPackage.version) {\n debug(`Required package \"${resolvedPackage.pkg}\" found (no version constraint specified).`);\n return true;\n }\n\n const pkgJson = JsonFile.read(packageJsonFilePath);\n if (\n // package.json has version.\n typeof pkgJson.version === 'string' &&\n // semver satisfaction.\n semver.satisfies(pkgJson.version, resolvedPackage.version)\n ) {\n return true;\n }\n debug(\n `Installed package \"${resolvedPackage.pkg}\" does not satisfy version constraint \"${resolvedPackage.version}\" (version: \"${pkgJson.version}\")`\n );\n return false;\n}\n\n/**\n * Collect missing packages given a list of required packages.\n * Any missing packages will be versioned to the known versions for the current SDK.\n *\n * @param projectRoot\n * @param props.requiredPackages list of required packages to check for\n * @returns list of missing packages and resolutions to existing packages.\n */\nexport async function getMissingPackagesAsync(\n projectRoot: string,\n {\n sdkVersion,\n requiredPackages,\n }: {\n sdkVersion?: string;\n requiredPackages: ResolvedPackage[];\n }\n): Promise<{\n missing: ResolvedPackage[];\n resolutions: Record<string, string>;\n}> {\n const results = collectMissingPackages(projectRoot, requiredPackages);\n if (!results.missing.length) {\n return results;\n }\n\n // Ensure the versions are right for the SDK that the project is currently using.\n await mutatePackagesWithKnownVersionsAsync(projectRoot, sdkVersion, results.missing);\n\n return results;\n}\n\nexport async function mutatePackagesWithKnownVersionsAsync(\n projectRoot: string,\n sdkVersion: string | undefined,\n packages: ResolvedPackage[]\n) {\n // Ensure the versions are right for the SDK that the project is currently using.\n const relatedPackages = await getCombinedKnownVersionsAsync({ projectRoot, sdkVersion });\n for (const pkg of packages) {\n if (\n // Only use the SDK versions if the package does not already have a hardcoded version.\n // We do this because some packages have API coded into the CLI which expects an exact version.\n !pkg.version &&\n pkg.pkg in relatedPackages\n ) {\n pkg.version = relatedPackages[pkg.pkg];\n }\n }\n return packages;\n}\n"],"names":["collectMissingPackages","versionSatisfiesRequiredPackage","getMissingPackagesAsync","mutatePackagesWithKnownVersionsAsync","debug","require","projectRoot","requiredPackages","resolutions","missingPackages","filter","p","resolved","resolveFrom","silent","file","pkg","missing","packageJsonFilePath","resolvedPackage","version","pkgJson","JsonFile","read","semver","satisfies","sdkVersion","results","length","packages","relatedPackages","getCombinedKnownVersionsAsync"],"mappings":"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"}
|
|
@@ -8,34 +8,13 @@ exports.getVersionedPackagesAsync = getVersionedPackagesAsync;
|
|
|
8
8
|
exports.getOperationLog = getOperationLog;
|
|
9
9
|
var _npmPackageArg = _interopRequireDefault(require("npm-package-arg"));
|
|
10
10
|
var _getVersions = require("../../../api/getVersions");
|
|
11
|
-
var Log = _interopRequireWildcard(require("../../../log"));
|
|
12
11
|
var _bundledNativeModules = require("./bundledNativeModules");
|
|
13
12
|
function _interopRequireDefault(obj) {
|
|
14
13
|
return obj && obj.__esModule ? obj : {
|
|
15
14
|
default: obj
|
|
16
15
|
};
|
|
17
16
|
}
|
|
18
|
-
|
|
19
|
-
if (obj && obj.__esModule) {
|
|
20
|
-
return obj;
|
|
21
|
-
} else {
|
|
22
|
-
var newObj = {};
|
|
23
|
-
if (obj != null) {
|
|
24
|
-
for(var key in obj){
|
|
25
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
26
|
-
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
27
|
-
if (desc.get || desc.set) {
|
|
28
|
-
Object.defineProperty(newObj, key, desc);
|
|
29
|
-
} else {
|
|
30
|
-
newObj[key] = obj[key];
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
newObj.default = obj;
|
|
36
|
-
return newObj;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
17
|
+
const debug = require("debug")("expo:doctor:dependencies:getVersionedPackages");
|
|
39
18
|
/** Adds `react-dom`, `react`, and `react-native` to the list of known package versions (`relatedPackages`) */ function normalizeSdkVersionObject(version) {
|
|
40
19
|
if (!version) {
|
|
41
20
|
return {};
|
|
@@ -68,7 +47,7 @@ async function getRemoteVersionsForSdkAsync({ sdkVersion , skipCache } = {}) {
|
|
|
68
47
|
});
|
|
69
48
|
// We only want versioned dependencies so skip if they cannot be found.
|
|
70
49
|
if (!sdkVersion || !(sdkVersion in sdkVersions)) {
|
|
71
|
-
|
|
50
|
+
debug(`Skipping versioned dependencies because the SDK version is not found. (sdkVersion: ${sdkVersion}, available: ${Object.keys(sdkVersions).join(", ")})`);
|
|
72
51
|
return {};
|
|
73
52
|
}
|
|
74
53
|
const version = sdkVersions[sdkVersion];
|