@expo/cli 0.14.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +13 -5
- package/build/bin/cli.map +1 -1
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/rest/cache/response.js.map +1 -1
- package/build/src/api/rest/client.js +2 -2
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/user/actions.js +1 -1
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/customize/typescript.js +3 -1
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/export/createMetadataJson.js +5 -3
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +92 -18
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +3 -3
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/embed/xcodeCompilerLogger.js +97 -0
- package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -0
- package/build/src/export/exportApp.js +106 -130
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +93 -38
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +1 -1
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportHermes.js +0 -90
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +165 -101
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +13 -5
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +84 -57
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/index.js +9 -7
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +101 -0
- package/build/src/export/metroAssetLocalPath.js.map +1 -0
- package/build/src/export/persistMetroAssets.js +115 -31
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/publicFolder.js +7 -0
- package/build/src/export/publicFolder.js.map +1 -1
- package/build/src/export/resolveOptions.js +1 -1
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +168 -43
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +1 -1
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/writeContents.js +8 -106
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/applyPlugins.js +52 -0
- package/build/src/install/applyPlugins.js.map +1 -0
- package/build/src/install/checkPackages.js +2 -2
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js +84 -0
- package/build/src/install/fixPackages.js.map +1 -0
- package/build/src/install/installAsync.js +50 -60
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js +79 -0
- package/build/src/install/installExpoPackage.js.map +1 -0
- package/build/src/prebuild/clearNativeFolder.js +1 -1
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +3 -3
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +21 -30
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +45 -16
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +2 -2
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +6 -6
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +49 -36
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js +2 -2
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/run/hints.js +4 -0
- package/build/src/run/hints.js.map +1 -1
- package/build/src/run/index.js +101 -0
- package/build/src/run/index.js.map +1 -0
- package/build/src/start/doctor/dependencies/bundledNativeModules.js +2 -2
- package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +22 -7
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/resolvePackages.js +66 -0
- package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -0
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +22 -33
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +54 -19
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +14 -10
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +6 -1
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +63 -0
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -0
- package/build/src/start/server/getStaticRenderFunctions.js +25 -23
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +76 -69
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +6 -2
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js +18 -1
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/bundleApiRoutes.js +5 -3
- package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
- package/build/src/start/server/metro/createExpoMetroResolver.js +80 -46
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
- package/build/src/start/server/metro/createJResolver.js +152 -0
- package/build/src/start/server/metro/createJResolver.js.map +1 -0
- package/build/src/start/server/metro/createServerRouteMiddleware.js +15 -2
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/{inspector-proxy/device.js → debugging/InspectorDevice.js} +10 -38
- package/build/src/start/server/metro/debugging/InspectorDevice.js.map +1 -0
- package/build/src/start/server/metro/debugging/InspectorProxy.js +116 -0
- package/build/src/start/server/metro/debugging/InspectorProxy.js.map +1 -0
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +45 -0
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -0
- package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/NetworkResponse.js +3 -4
- package/build/src/start/server/metro/debugging/inspectorHandlers/NetworkResponse.js.map +1 -0
- package/build/src/start/server/metro/debugging/inspectorHandlers/PageReload.js.map +1 -0
- package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerGetPossibleBreakpoints.js +5 -6
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -0
- package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerScriptParsed.js +3 -2
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerScriptParsed.js.map +1 -0
- package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerSetBreakpointByUrl.js +3 -2
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -0
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js +24 -0
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
- package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeRuntimeGetProperties.js +5 -4
- package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeGetProperties.js.map +1 -0
- package/build/src/start/server/metro/debugging/inspectorHandlers/types.js.map +1 -0
- package/build/src/start/server/metro/debugging/inspectorHandlers/utils.js +20 -0
- package/build/src/start/server/metro/debugging/inspectorHandlers/utils.js.map +1 -0
- package/build/src/start/server/metro/externals.js +25 -3
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +40 -15
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +3 -2
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/router.js +5 -6
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +17 -27
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +59 -0
- package/build/src/start/server/metro/serializeHtml.js.map +1 -0
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +1 -2
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +237 -214
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +114 -40
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +61 -0
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ExpoMiddleware.js +2 -2
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +22 -66
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +23 -2
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js +30 -26
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +7 -7
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +5 -2
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +3 -2
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +8 -7
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +176 -0
- package/build/src/start/server/middleware/metroOptions.js.map +1 -0
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
- package/build/src/start/server/type-generation/__typetests__/route.test.js +11 -3
- package/build/src/start/server/type-generation/__typetests__/route.test.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +6 -4
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/utils/analytics/getMetroDebugProperties.js +1 -2
- package/build/src/utils/analytics/getMetroDebugProperties.js.map +1 -1
- package/build/src/utils/analytics/getMetroProperties.js +1 -2
- package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/args.js +4 -2
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/cocoapods.js +1 -1
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +11 -1
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/dir.js +18 -8
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/env.js +10 -1
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +2 -4
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/prompts.js +1 -28
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +3 -11
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +22 -12
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -1
- package/package.json +19 -18
- package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
- package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
- package/static/template/index.html +14 -95
- package/build/src/export/printBundleSizes.js +0 -101
- package/build/src/export/printBundleSizes.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/device.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/index.js +0 -27
- package/build/src/start/server/metro/inspector-proxy/index.js.map +0 -1
- package/build/src/start/server/metro/inspector-proxy/proxy.js +0 -169
- package/build/src/start/server/metro/inspector-proxy/proxy.js.map +0 -1
- package/build/src/start/server/metro/resolveFromProject.js +0 -90
- package/build/src/start/server/metro/resolveFromProject.js.map +0 -1
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +0 -64
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +0 -1
- /package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/PageReload.js +0 -0
- /package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/types.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/export/web/exportWebAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { Options } from './resolveOptions';\nimport { Log } from '../../log';\nimport { WebSupportProjectPrerequisite } from '../../start/doctor/web/WebSupportProjectPrerequisite';\nimport { getPlatformBundlers } from '../../start/server/platformBundlers';\nimport { WebpackBundlerDevServer } from '../../start/server/webpack/WebpackBundlerDevServer';\nimport { CommandError } from '../../utils/errors';\nimport { setNodeEnv } from '../../utils/nodeEnv';\n\nexport async function exportWebAsync(projectRoot: string, options: Options) {\n // Ensure webpack is available\n await new WebSupportProjectPrerequisite(projectRoot).assertAsync();\n\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const { exp } = getConfig(projectRoot);\n const platformBundlers = getPlatformBundlers(exp);\n // Create a bundler interface\n const bundler = new WebpackBundlerDevServer(projectRoot, platformBundlers
|
|
1
|
+
{"version":3,"sources":["../../../../src/export/web/exportWebAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { Options } from './resolveOptions';\nimport { Log } from '../../log';\nimport { WebSupportProjectPrerequisite } from '../../start/doctor/web/WebSupportProjectPrerequisite';\nimport { getPlatformBundlers } from '../../start/server/platformBundlers';\nimport { WebpackBundlerDevServer } from '../../start/server/webpack/WebpackBundlerDevServer';\nimport { CommandError } from '../../utils/errors';\nimport { setNodeEnv } from '../../utils/nodeEnv';\n\nexport async function exportWebAsync(projectRoot: string, options: Options) {\n // Ensure webpack is available\n await new WebSupportProjectPrerequisite(projectRoot).assertAsync();\n\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const { exp } = getConfig(projectRoot);\n const platformBundlers = getPlatformBundlers(exp);\n // Create a bundler interface\n const bundler = new WebpackBundlerDevServer(projectRoot, platformBundlers);\n\n // If the user set `web.bundler: 'metro'` then they should use `expo export` instead.\n if (!bundler.isTargetingWeb()) {\n throw new CommandError(\n chalk`{bold expo export:web} can only be used with Webpack. Use {bold expo export} for other bundlers.`\n );\n }\n\n Log.log(`Exporting with Webpack...`);\n\n // Bundle the app\n await bundler.bundleAsync({\n mode: options.dev ? 'development' : 'production',\n clear: options.clear,\n });\n}\n"],"names":["exportWebAsync","projectRoot","options","WebSupportProjectPrerequisite","assertAsync","setNodeEnv","dev","require","load","exp","getConfig","platformBundlers","getPlatformBundlers","bundler","WebpackBundlerDevServer","isTargetingWeb","CommandError","chalk","Log","log","bundleAsync","mode","clear"],"mappings":"AAAA;;;;QAWsBA,cAAc,GAAdA,cAAc;AAXV,IAAA,OAAc,WAAd,cAAc,CAAA;AACtB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAGL,IAAA,IAAW,WAAX,WAAW,CAAA;AACe,IAAA,8BAAsD,WAAtD,sDAAsD,CAAA;AAChE,IAAA,iBAAqC,WAArC,qCAAqC,CAAA;AACjC,IAAA,wBAAoD,WAApD,oDAAoD,CAAA;AAC/D,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AACtB,IAAA,QAAqB,WAArB,qBAAqB,CAAA;;;;;;AAEzC,eAAeA,cAAc,CAACC,WAAmB,EAAEC,OAAgB,EAAE;IAC1E,8BAA8B;IAC9B,MAAM,IAAIC,8BAA6B,8BAAA,CAACF,WAAW,CAAC,CAACG,WAAW,EAAE,CAAC;IAEnEC,CAAAA,GAAAA,QAAU,AAA4C,CAAA,WAA5C,CAACH,OAAO,CAACI,GAAG,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;IACvDC,OAAO,CAAC,WAAW,CAAC,CAACC,IAAI,CAACP,WAAW,CAAC,CAAC;IAEvC,MAAM,EAAEQ,GAAG,CAAA,EAAE,GAAGC,CAAAA,GAAAA,OAAS,AAAa,CAAA,UAAb,CAACT,WAAW,CAAC,AAAC;IACvC,MAAMU,gBAAgB,GAAGC,CAAAA,GAAAA,iBAAmB,AAAK,CAAA,oBAAL,CAACH,GAAG,CAAC,AAAC;IAClD,6BAA6B;IAC7B,MAAMI,OAAO,GAAG,IAAIC,wBAAuB,wBAAA,CAACb,WAAW,EAAEU,gBAAgB,CAAC,AAAC;IAE3E,qFAAqF;IACrF,IAAI,CAACE,OAAO,CAACE,cAAc,EAAE,EAAE;QAC7B,MAAM,IAAIC,OAAY,aAAA,CACpBC,MAAK,QAAA,CAAC,gGAAgG,CAAC,CACxG,CAAC;KACH;IAEDC,IAAG,IAAA,CAACC,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAErC,iBAAiB;IACjB,MAAMN,OAAO,CAACO,WAAW,CAAC;QACxBC,IAAI,EAAEnB,OAAO,CAACI,GAAG,GAAG,aAAa,GAAG,YAAY;QAChDgB,KAAK,EAAEpB,OAAO,CAACoB,KAAK;KACrB,CAAC,CAAC;CACJ"}
|
|
@@ -2,123 +2,25 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
exports.
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
exports.writeAssetMapAsync = writeAssetMapAsync;
|
|
9
|
-
exports.writeDebugHtmlAsync = writeDebugHtmlAsync;
|
|
10
|
-
var _crypto = _interopRequireDefault(require("crypto"));
|
|
11
|
-
var _promises = _interopRequireDefault(require("fs/promises"));
|
|
12
|
-
var _path = _interopRequireDefault(require("path"));
|
|
13
|
-
var _createMetadataJson = require("./createMetadataJson");
|
|
14
|
-
function _interopRequireDefault(obj) {
|
|
15
|
-
return obj && obj.__esModule ? obj : {
|
|
16
|
-
default: obj
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const debug = require("debug")("expo:export:write");
|
|
20
|
-
/**
|
|
21
|
-
* @param props.platform native platform for the bundle
|
|
22
|
-
* @param props.format extension to use for the name
|
|
23
|
-
* @param props.hash crypto hash for the bundle contents
|
|
24
|
-
* @returns filename for the JS bundle.
|
|
25
|
-
*/ function createBundleFileName({ platform , format , hash }) {
|
|
26
|
-
return `${platform}-${hash}.${format === "javascript" ? "js" : "hbc"}`;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* @param bundle JS bundle as a string
|
|
30
|
-
* @returns crypto hash for the provided bundle
|
|
31
|
-
*/ function createBundleHash(bundle) {
|
|
32
|
-
return _crypto.default.createHash("md5").update(bundle).digest("hex");
|
|
33
|
-
}
|
|
34
|
-
async function writeBundlesAsync({ bundles , outputDir , useServerRendering }) {
|
|
35
|
-
const hashes = {};
|
|
36
|
-
const fileNames = {};
|
|
37
|
-
for (const [platform, bundleOutput] of Object.entries(bundles)){
|
|
38
|
-
// TODO: Move native to use the newer `_expo/...` bundle writing system.
|
|
39
|
-
if (platform === "web" && useServerRendering) {
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
var _hermesBytecodeBundle;
|
|
43
|
-
const bundle = (_hermesBytecodeBundle = bundleOutput.hermesBytecodeBundle) != null ? _hermesBytecodeBundle : bundleOutput.code;
|
|
44
|
-
const hash = createBundleHash(bundle);
|
|
45
|
-
const fileName = createBundleFileName({
|
|
46
|
-
platform,
|
|
47
|
-
format: bundleOutput.hermesBytecodeBundle ? "bytecode" : "javascript",
|
|
48
|
-
hash
|
|
49
|
-
});
|
|
50
|
-
hashes[platform] = hash;
|
|
51
|
-
fileNames[platform] = fileName;
|
|
52
|
-
await _promises.default.writeFile(_path.default.join(outputDir, fileName), bundle);
|
|
53
|
-
}
|
|
54
|
-
return {
|
|
55
|
-
hashes,
|
|
56
|
-
fileNames
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
async function writeSourceMapsAsync({ bundles , hashes , fileNames , outputDir }) {
|
|
60
|
-
return (await Promise.all(Object.entries(bundles).map(async ([platform, bundle])=>{
|
|
61
|
-
if (!bundle) return null;
|
|
62
|
-
var _hermesSourcemap;
|
|
63
|
-
const sourceMap = (_hermesSourcemap = bundle.hermesSourcemap) != null ? _hermesSourcemap : bundle.map;
|
|
64
|
-
if (!sourceMap) {
|
|
65
|
-
debug(`Skip writing sourcemap (platform: ${platform})`);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
var _hermesBytecodeBundle, ref;
|
|
69
|
-
const hash = (ref = hashes == null ? void 0 : hashes[platform]) != null ? ref : createBundleHash((_hermesBytecodeBundle = bundle.hermesBytecodeBundle) != null ? _hermesBytecodeBundle : bundle.code);
|
|
70
|
-
const mapName = `${platform}-${hash}.map`;
|
|
71
|
-
await _promises.default.writeFile(_path.default.join(outputDir, mapName), sourceMap);
|
|
72
|
-
var ref1;
|
|
73
|
-
const jsBundleFileName = (ref1 = fileNames == null ? void 0 : fileNames[platform]) != null ? ref1 : createBundleFileName({
|
|
74
|
-
platform,
|
|
75
|
-
format: bundle.hermesBytecodeBundle ? "bytecode" : "javascript",
|
|
76
|
-
hash
|
|
77
|
-
});
|
|
78
|
-
const jsPath = _path.default.join(outputDir, jsBundleFileName);
|
|
79
|
-
// Add correct mapping to sourcemap paths
|
|
80
|
-
const mappingComment = `\n//# sourceMappingURL=${mapName}`;
|
|
81
|
-
await _promises.default.appendFile(jsPath, mappingComment);
|
|
82
|
-
return {
|
|
83
|
-
platform,
|
|
84
|
-
fileName: mapName,
|
|
85
|
-
hash,
|
|
86
|
-
map: sourceMap,
|
|
87
|
-
comment: mappingComment
|
|
88
|
-
};
|
|
89
|
-
}))).filter(Boolean);
|
|
90
|
-
}
|
|
91
|
-
async function writeMetadataJsonAsync({ outputDir , bundles , fileNames }) {
|
|
92
|
-
const contents = (0, _createMetadataJson).createMetadataJson({
|
|
93
|
-
bundles,
|
|
94
|
-
fileNames
|
|
95
|
-
});
|
|
96
|
-
const metadataPath = _path.default.join(outputDir, "metadata.json");
|
|
97
|
-
debug(`Writing metadata.json to ${metadataPath}`);
|
|
98
|
-
await _promises.default.writeFile(metadataPath, JSON.stringify(contents));
|
|
99
|
-
return contents;
|
|
100
|
-
}
|
|
101
|
-
async function writeAssetMapAsync({ outputDir , assets }) {
|
|
5
|
+
exports.createAssetMap = createAssetMap;
|
|
6
|
+
exports.createSourceMapDebugHtml = createSourceMapDebugHtml;
|
|
7
|
+
function createAssetMap({ assets }) {
|
|
102
8
|
// Convert the assets array to a k/v pair where the asset hash is the key and the asset is the value.
|
|
103
|
-
|
|
9
|
+
return Object.fromEntries(assets.map((asset)=>[
|
|
104
10
|
asset.hash,
|
|
105
11
|
asset
|
|
106
12
|
]
|
|
107
13
|
));
|
|
108
|
-
await _promises.default.writeFile(_path.default.join(outputDir, "assetmap.json"), JSON.stringify(contents));
|
|
109
|
-
return contents;
|
|
110
14
|
}
|
|
111
|
-
|
|
15
|
+
function createSourceMapDebugHtml({ fileNames }) {
|
|
112
16
|
// Make a debug html so user can debug their bundles
|
|
113
|
-
|
|
114
|
-
${
|
|
115
|
-
).map((fileName)=>`<script src="${
|
|
17
|
+
return `
|
|
18
|
+
${fileNames.filter((value)=>value != null
|
|
19
|
+
).map((fileName)=>`<script src="${fileName}"></script>`
|
|
116
20
|
).join("\n ")}
|
|
117
21
|
Open up this file in Chrome. In the JavaScript developer console, navigate to the Source tab.
|
|
118
22
|
You can see a red colored folder containing the original source code from your bundle.
|
|
119
23
|
`;
|
|
120
|
-
await _promises.default.writeFile(_path.default.join(outputDir, "debug.html"), contents);
|
|
121
|
-
return contents;
|
|
122
24
|
}
|
|
123
25
|
|
|
124
26
|
//# sourceMappingURL=writeContents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/writeContents.ts"],"sourcesContent":["import { Platform } from '@expo/config';\nimport crypto from 'crypto';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { createMetadataJson } from './createMetadataJson';\nimport { BundleOutput } from './fork-bundleAsync';\nimport { Asset } from './saveAssets';\n\nconst debug = require('debug')('expo:export:write') as typeof console.log;\n\n/**\n * @param props.platform native platform for the bundle\n * @param props.format extension to use for the name\n * @param props.hash crypto hash for the bundle contents\n * @returns filename for the JS bundle.\n */\nfunction createBundleFileName({\n platform,\n format,\n hash,\n}: {\n platform: string;\n format: 'javascript' | 'bytecode';\n hash: string;\n}): string {\n return `${platform}-${hash}.${format === 'javascript' ? 'js' : 'hbc'}`;\n}\n\n/**\n * @param bundle JS bundle as a string\n * @returns crypto hash for the provided bundle\n */\nfunction createBundleHash(bundle: string | Uint8Array): string {\n return crypto.createHash('md5').update(bundle).digest('hex');\n}\n\nexport async function writeBundlesAsync({\n bundles,\n outputDir,\n useServerRendering,\n}: {\n bundles: Partial<Record<Platform, Pick<BundleOutput, 'hermesBytecodeBundle' | 'code'>>>;\n outputDir: string;\n useServerRendering?: boolean;\n}) {\n const hashes: Partial<Record<Platform, string>> = {};\n const fileNames: Partial<Record<Platform, string>> = {};\n\n for (const [platform, bundleOutput] of Object.entries(bundles) as [\n Platform,\n Pick<BundleOutput, 'hermesBytecodeBundle' | 'code'>,\n ][]) {\n // TODO: Move native to use the newer `_expo/...` bundle writing system.\n if (platform === 'web' && useServerRendering) {\n continue;\n }\n const bundle = bundleOutput.hermesBytecodeBundle ?? bundleOutput.code;\n const hash = createBundleHash(bundle);\n const fileName = createBundleFileName({\n platform,\n format: bundleOutput.hermesBytecodeBundle ? 'bytecode' : 'javascript',\n hash,\n });\n\n hashes[platform] = hash;\n fileNames[platform] = fileName;\n await fs.writeFile(path.join(outputDir, fileName), bundle);\n }\n\n return { hashes, fileNames };\n}\n\ntype SourceMapWriteResult = {\n platform: string;\n fileName: string;\n hash: string;\n map: string;\n comment: string;\n};\n\nexport async function writeSourceMapsAsync({\n bundles,\n hashes,\n fileNames,\n outputDir,\n}: {\n bundles: Partial<\n Record<string, Pick<BundleOutput, 'hermesSourcemap' | 'map' | 'hermesBytecodeBundle' | 'code'>>\n >;\n hashes?: Record<string, string | undefined>;\n fileNames?: Record<string, string | undefined>;\n outputDir: string;\n}): Promise<SourceMapWriteResult[]> {\n return (\n await Promise.all(\n Object.entries(bundles).map(async ([platform, bundle]) => {\n if (!bundle) return null;\n const sourceMap = bundle.hermesSourcemap ?? bundle.map;\n if (!sourceMap) {\n debug(`Skip writing sourcemap (platform: ${platform})`);\n return null;\n }\n\n const hash =\n hashes?.[platform] ?? createBundleHash(bundle.hermesBytecodeBundle ?? bundle.code!);\n const mapName = `${platform}-${hash}.map`;\n await fs.writeFile(path.join(outputDir, mapName), sourceMap);\n\n const jsBundleFileName =\n fileNames?.[platform] ??\n createBundleFileName({\n platform,\n format: bundle.hermesBytecodeBundle ? 'bytecode' : 'javascript',\n hash,\n });\n const jsPath = path.join(outputDir, jsBundleFileName);\n\n // Add correct mapping to sourcemap paths\n const mappingComment = `\\n//# sourceMappingURL=${mapName}`;\n await fs.appendFile(jsPath, mappingComment);\n return {\n platform,\n fileName: mapName,\n hash,\n map: sourceMap,\n comment: mappingComment,\n };\n })\n )\n ).filter(Boolean) as SourceMapWriteResult[];\n}\n\nexport async function writeMetadataJsonAsync({\n outputDir,\n bundles,\n fileNames,\n}: {\n outputDir: string;\n bundles: Record<string, Pick<BundleOutput, 'assets'> | undefined>;\n fileNames: Record<string, string | undefined>;\n}) {\n const contents = createMetadataJson({\n bundles,\n fileNames,\n });\n const metadataPath = path.join(outputDir, 'metadata.json');\n debug(`Writing metadata.json to ${metadataPath}`);\n await fs.writeFile(metadataPath, JSON.stringify(contents));\n return contents;\n}\n\nexport async function writeAssetMapAsync({\n outputDir,\n assets,\n}: {\n outputDir: string;\n assets: Asset[];\n}) {\n // Convert the assets array to a k/v pair where the asset hash is the key and the asset is the value.\n const contents = Object.fromEntries(assets.map((asset) => [asset.hash, asset]));\n await fs.writeFile(path.join(outputDir, 'assetmap.json'), JSON.stringify(contents));\n return contents;\n}\n\nexport async function writeDebugHtmlAsync({\n outputDir,\n fileNames,\n}: {\n outputDir: string;\n fileNames: Record<string, string | undefined>;\n}) {\n // Make a debug html so user can debug their bundles\n const contents = `\n ${Object.values(fileNames)\n .filter((value) => value != null)\n .map((fileName) => `<script src=\"${path.join('bundles', fileName!)}\"></script>`)\n .join('\\n ')}\n Open up this file in Chrome. In the JavaScript developer console, navigate to the Source tab.\n You can see a red colored folder containing the original source code from your bundle.\n `;\n\n await fs.writeFile(path.join(outputDir, 'debug.html'), contents);\n return contents;\n}\n"],"names":["writeBundlesAsync","writeSourceMapsAsync","writeMetadataJsonAsync","writeAssetMapAsync","writeDebugHtmlAsync","debug","require","createBundleFileName","platform","format","hash","createBundleHash","bundle","crypto","createHash","update","digest","bundles","outputDir","useServerRendering","hashes","fileNames","bundleOutput","Object","entries","hermesBytecodeBundle","code","fileName","fs","writeFile","path","join","Promise","all","map","sourceMap","hermesSourcemap","mapName","jsBundleFileName","jsPath","mappingComment","appendFile","comment","filter","Boolean","contents","createMetadataJson","metadataPath","JSON","stringify","assets","fromEntries","asset","values","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/writeContents.ts"],"sourcesContent":["import { Asset } from './saveAssets';\n\nexport function createAssetMap({ assets }: { assets: Asset[] }) {\n // Convert the assets array to a k/v pair where the asset hash is the key and the asset is the value.\n return Object.fromEntries(assets.map((asset) => [asset.hash, asset]));\n}\n\nexport function createSourceMapDebugHtml({ fileNames }: { fileNames: string[] }) {\n // Make a debug html so user can debug their bundles\n return `\n ${fileNames\n .filter((value) => value != null)\n .map((fileName) => `<script src=\"${fileName}\"></script>`)\n .join('\\n ')}\n Open up this file in Chrome. In the JavaScript developer console, navigate to the Source tab.\n You can see a red colored folder containing the original source code from your bundle.\n `;\n}\n"],"names":["createAssetMap","createSourceMapDebugHtml","assets","Object","fromEntries","map","asset","hash","fileNames","filter","value","fileName","join"],"mappings":"AAAA;;;;QAEgBA,cAAc,GAAdA,cAAc;QAKdC,wBAAwB,GAAxBA,wBAAwB;AALjC,SAASD,cAAc,CAAC,EAAEE,MAAM,CAAA,EAAuB,EAAE;IAC9D,qGAAqG;IACrG,OAAOC,MAAM,CAACC,WAAW,CAACF,MAAM,CAACG,GAAG,CAAC,CAACC,KAAK,GAAK;YAACA,KAAK,CAACC,IAAI;YAAED,KAAK;SAAC;IAAA,CAAC,CAAC,CAAC;CACvE;AAEM,SAASL,wBAAwB,CAAC,EAAEO,SAAS,CAAA,EAA2B,EAAE;IAC/E,oDAAoD;IACpD,OAAO,CAAC;MACJ,EAAEA,SAAS,CACRC,MAAM,CAAC,CAACC,KAAK,GAAKA,KAAK,IAAI,IAAI;IAAA,CAAC,CAChCL,GAAG,CAAC,CAACM,QAAQ,GAAK,CAAC,aAAa,EAAEA,QAAQ,CAAC,WAAW,CAAC;IAAA,CAAC,CACxDC,IAAI,CAAC,UAAU,CAAC,CAAC;;;MAGpB,CAAC,CAAC;CACP"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.applyPluginsAsync = applyPluginsAsync;
|
|
6
|
+
var _config = require("@expo/config");
|
|
7
|
+
var Log = _interopRequireWildcard(require("../log"));
|
|
8
|
+
function _interopRequireWildcard(obj) {
|
|
9
|
+
if (obj && obj.__esModule) {
|
|
10
|
+
return obj;
|
|
11
|
+
} else {
|
|
12
|
+
var newObj = {};
|
|
13
|
+
if (obj != null) {
|
|
14
|
+
for(var key in obj){
|
|
15
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
16
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
17
|
+
if (desc.get || desc.set) {
|
|
18
|
+
Object.defineProperty(newObj, key, desc);
|
|
19
|
+
} else {
|
|
20
|
+
newObj[key] = obj[key];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
newObj.default = obj;
|
|
26
|
+
return newObj;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function applyPluginsAsync(projectRoot, packages) {
|
|
30
|
+
const { autoAddConfigPluginsAsync } = await Promise.resolve().then(function() {
|
|
31
|
+
return _interopRequireWildcard(require("./utils/autoAddConfigPlugins.js"));
|
|
32
|
+
});
|
|
33
|
+
try {
|
|
34
|
+
const { exp } = (0, _config).getConfig(projectRoot, {
|
|
35
|
+
skipSDKVersionRequirement: true
|
|
36
|
+
});
|
|
37
|
+
// Only auto add plugins if the plugins array is defined or if the project is using SDK +42.
|
|
38
|
+
await autoAddConfigPluginsAsync(projectRoot, exp, // Split any possible NPM tags. i.e. `expo@latest` -> `expo`
|
|
39
|
+
packages.map((pkg)=>pkg.split("@")[0]
|
|
40
|
+
).filter(Boolean));
|
|
41
|
+
} catch (error) {
|
|
42
|
+
// If we fail to apply plugins, the log a warning and continue.
|
|
43
|
+
if (error.isPluginError) {
|
|
44
|
+
Log.warn(`Skipping config plugin check: ` + error.message);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Any other error, rethrow.
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=applyPlugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/install/applyPlugins.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\n\nimport * as Log from '../log';\n\n/**\n * A convenience feature for automatically applying Expo Config Plugins to the `app.json` after installing them.\n * This should be dropped in favor of autolinking in the future.\n */\nexport async function applyPluginsAsync(projectRoot: string, packages: string[]) {\n const { autoAddConfigPluginsAsync } = await import('./utils/autoAddConfigPlugins.js');\n\n try {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n\n // Only auto add plugins if the plugins array is defined or if the project is using SDK +42.\n await autoAddConfigPluginsAsync(\n projectRoot,\n exp,\n // Split any possible NPM tags. i.e. `expo@latest` -> `expo`\n packages.map((pkg) => pkg.split('@')[0]).filter(Boolean)\n );\n } catch (error: any) {\n // If we fail to apply plugins, the log a warning and continue.\n if (error.isPluginError) {\n Log.warn(`Skipping config plugin check: ` + error.message);\n return;\n }\n // Any other error, rethrow.\n throw error;\n }\n}\n"],"names":["applyPluginsAsync","Log","projectRoot","packages","autoAddConfigPluginsAsync","exp","getConfig","skipSDKVersionRequirement","map","pkg","split","filter","Boolean","error","isPluginError","warn","message"],"mappings":"AAAA;;;;QAQsBA,iBAAiB,GAAjBA,iBAAiB;AARb,IAAA,OAAc,WAAd,cAAc,CAAA;AAE5BC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;;;;;;;;;;;;;;;;;;;;;;AAMR,eAAeD,iBAAiB,CAACE,WAAmB,EAAEC,QAAkB,EAAE;IAC/E,MAAM,EAAEC,yBAAyB,CAAA,EAAE,GAAG,MAAM;+CAAO,iCAAiC;MAAC,AAAC;IAEtF,IAAI;QACF,MAAM,EAAEC,GAAG,CAAA,EAAE,GAAGC,CAAAA,GAAAA,OAAS,AAAkD,CAAA,UAAlD,CAACJ,WAAW,EAAE;YAAEK,yBAAyB,EAAE,IAAI;SAAE,CAAC,AAAC;QAE5E,4FAA4F;QAC5F,MAAMH,yBAAyB,CAC7BF,WAAW,EACXG,GAAG,EACH,4DAA4D;QAC5DF,QAAQ,CAACK,GAAG,CAAC,CAACC,GAAG,GAAKA,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAA,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC,CACzD,CAAC;KACH,CAAC,OAAOC,KAAK,EAAO;QACnB,+DAA+D;QAC/D,IAAIA,KAAK,CAACC,aAAa,EAAE;YACvBb,GAAG,CAACc,IAAI,CAAC,CAAC,8BAA8B,CAAC,GAAGF,KAAK,CAACG,OAAO,CAAC,CAAC;YAC3D,OAAO;SACR;QACD,4BAA4B;QAC5B,MAAMH,KAAK,CAAC;KACb;CACF"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
exports.checkPackagesAsync = checkPackagesAsync;
|
|
6
6
|
var _config = require("@expo/config");
|
|
7
7
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
8
|
-
var
|
|
8
|
+
var _fixPackages = require("./fixPackages");
|
|
9
9
|
var Log = _interopRequireWildcard(require("../log"));
|
|
10
10
|
var _validateDependenciesVersions = require("../start/doctor/dependencies/validateDependenciesVersions");
|
|
11
11
|
var _interactive = require("../utils/interactive");
|
|
@@ -64,7 +64,7 @@ async function checkPackagesAsync(projectRoot, { packages , packageManager , opt
|
|
|
64
64
|
if (value) {
|
|
65
65
|
debug("Installing fixed dependencies:", dependencies);
|
|
66
66
|
// Install the corrected dependencies.
|
|
67
|
-
return (0,
|
|
67
|
+
return (0, _fixPackages).fixPackagesAsync(projectRoot, {
|
|
68
68
|
packageManager,
|
|
69
69
|
packages: dependencies,
|
|
70
70
|
packageManagerArguments,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/install/checkPackages.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { fixPackagesAsync } from './
|
|
1
|
+
{"version":3,"sources":["../../../src/install/checkPackages.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { fixPackagesAsync } from './fixPackages';\nimport { Options } from './resolveOptions';\nimport * as Log from '../log';\nimport {\n getVersionedDependenciesAsync,\n logIncorrectDependencies,\n} from '../start/doctor/dependencies/validateDependenciesVersions';\nimport { isInteractive } from '../utils/interactive';\nimport { learnMore } from '../utils/link';\nimport { confirmAsync } from '../utils/prompts';\nimport { joinWithCommasAnd } from '../utils/strings';\n\nconst debug = require('debug')('expo:install:check') as typeof console.log;\n\n/**\n * Handles `expo install --fix|check'.\n * Checks installed dependencies against bundledNativeModules and versions endpoints to find any incompatibilities.\n * If `--fix` is passed, it will install the correct versions of the dependencies.\n * If `--check` is passed, it will prompt the user to install the correct versions of the dependencies (on interactive terminal).\n */\nexport async function checkPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n options: { fix },\n packageManagerArguments,\n }: {\n /**\n * List of packages to version\n * @example ['uuid', 'react-native-reanimated@latest']\n */\n packages: string[];\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n\n /** How the check should resolve */\n options: Pick<Options, 'fix'>;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n) {\n // Read the project Expo config without plugins.\n const { exp, pkg } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n if (pkg.expo?.install?.exclude?.length) {\n Log.log(\n chalk`Skipped ${fix ? 'fixing' : 'checking'} dependencies: ${joinWithCommasAnd(\n pkg.expo.install.exclude\n )}. These dependencies are listed in {bold expo.install.exclude} in package.json. ${learnMore(\n 'https://expo.dev/more/expo-cli/#configuring-dependency-validation'\n )}`\n );\n }\n\n const dependencies = await getVersionedDependenciesAsync(projectRoot, exp, pkg, packages);\n\n if (!dependencies.length) {\n Log.exit(chalk.greenBright('Dependencies are up to date'), 0);\n }\n\n logIncorrectDependencies(dependencies);\n\n const value =\n // If `--fix` then always fix.\n fix ||\n // Otherwise prompt to fix when not running in CI.\n (isInteractive() && (await confirmAsync({ message: 'Fix dependencies?' }).catch(() => false)));\n\n if (value) {\n debug('Installing fixed dependencies:', dependencies);\n // Install the corrected dependencies.\n return fixPackagesAsync(projectRoot, {\n packageManager,\n packages: dependencies,\n packageManagerArguments,\n sdkVersion: exp.sdkVersion!,\n });\n }\n // Exit with non-zero exit code if any of the dependencies are out of date.\n Log.exit(chalk.red('Found outdated dependencies'), 1);\n}\n"],"names":["checkPackagesAsync","Log","debug","require","projectRoot","packages","packageManager","options","fix","packageManagerArguments","pkg","exp","getConfig","skipPlugins","expo","install","exclude","length","log","chalk","joinWithCommasAnd","learnMore","dependencies","getVersionedDependenciesAsync","exit","greenBright","logIncorrectDependencies","value","isInteractive","confirmAsync","message","catch","fixPackagesAsync","sdkVersion","red"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.fixPackagesAsync = fixPackagesAsync;
|
|
6
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
7
|
+
var _applyPlugins = require("./applyPlugins");
|
|
8
|
+
var _installExpoPackage = require("./installExpoPackage");
|
|
9
|
+
var Log = _interopRequireWildcard(require("../log"));
|
|
10
|
+
var _getVersionedPackages = require("../start/doctor/dependencies/getVersionedPackages");
|
|
11
|
+
var _array = require("../utils/array");
|
|
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
|
+
async function fixPackagesAsync(projectRoot, { packages , packageManager , sdkVersion , packageManagerArguments }) {
|
|
39
|
+
if (!packages.length) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const { dependencies =[] , devDependencies =[] } = (0, _array).groupBy(packages, (dep)=>dep.packageType
|
|
43
|
+
);
|
|
44
|
+
const versioningMessages = (0, _getVersionedPackages).getOperationLog({
|
|
45
|
+
othersCount: 0,
|
|
46
|
+
nativeModulesCount: packages.length,
|
|
47
|
+
sdkVersion
|
|
48
|
+
});
|
|
49
|
+
// display all packages to update, including expo package
|
|
50
|
+
Log.log(_chalk.default`\u203A Installing ${versioningMessages.length ? versioningMessages.join(" and ") + " " : ""}using {bold ${packageManager.name}}`);
|
|
51
|
+
// if updating expo package, install this first, then run expo install --fix again under new version
|
|
52
|
+
const expoDep = dependencies.find((dep)=>dep.packageName === "expo"
|
|
53
|
+
);
|
|
54
|
+
if (expoDep) {
|
|
55
|
+
await (0, _installExpoPackage).installExpoPackageAsync(projectRoot, {
|
|
56
|
+
packageManager,
|
|
57
|
+
packageManagerArguments,
|
|
58
|
+
expoPackageToInstall: `expo@${expoDep.expectedVersionOrRange}`,
|
|
59
|
+
followUpCommandArgs: [
|
|
60
|
+
"--fix"
|
|
61
|
+
]
|
|
62
|
+
});
|
|
63
|
+
// follow-up commands will be spawned in a detached process, so return immediately
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (dependencies.length) {
|
|
67
|
+
const versionedPackages = dependencies.map((dep)=>`${dep.packageName}@${dep.expectedVersionOrRange}`
|
|
68
|
+
);
|
|
69
|
+
await packageManager.addAsync([
|
|
70
|
+
...packageManagerArguments,
|
|
71
|
+
...versionedPackages
|
|
72
|
+
]);
|
|
73
|
+
await (0, _applyPlugins).applyPluginsAsync(projectRoot, versionedPackages);
|
|
74
|
+
}
|
|
75
|
+
if (devDependencies.length) {
|
|
76
|
+
await packageManager.addDevAsync([
|
|
77
|
+
...packageManagerArguments,
|
|
78
|
+
...devDependencies.map((dep)=>`${dep.packageName}@${dep.expectedVersionOrRange}`
|
|
79
|
+
),
|
|
80
|
+
]);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=fixPackages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/install/fixPackages.ts"],"sourcesContent":["import * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { applyPluginsAsync } from './applyPlugins';\nimport { installExpoPackageAsync } from './installExpoPackage';\nimport * as Log from '../log';\nimport { getOperationLog } from '../start/doctor/dependencies/getVersionedPackages';\nimport { getVersionedDependenciesAsync } from '../start/doctor/dependencies/validateDependenciesVersions';\nimport { groupBy } from '../utils/array';\n\n/**\n * Given a list of incompatible packages, installs the correct versions of the packages with the package manager used for the project.\n */\nexport async function fixPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n packages: Awaited<ReturnType<typeof getVersionedDependenciesAsync>>;\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n if (!packages.length) {\n return;\n }\n\n const { dependencies = [], devDependencies = [] } = groupBy(packages, (dep) => dep.packageType);\n const versioningMessages = getOperationLog({\n othersCount: 0, // All fixable packages are versioned\n nativeModulesCount: packages.length,\n sdkVersion,\n });\n\n // display all packages to update, including expo package\n Log.log(\n chalk`\\u203A Installing ${\n versioningMessages.length ? versioningMessages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n // if updating expo package, install this first, then run expo install --fix again under new version\n const expoDep = dependencies.find((dep) => dep.packageName === 'expo');\n if (expoDep) {\n await installExpoPackageAsync(projectRoot, {\n packageManager,\n packageManagerArguments,\n expoPackageToInstall: `expo@${expoDep.expectedVersionOrRange}`,\n followUpCommandArgs: ['--fix'],\n });\n // follow-up commands will be spawned in a detached process, so return immediately\n return;\n }\n\n if (dependencies.length) {\n const versionedPackages = dependencies.map(\n (dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`\n );\n\n await packageManager.addAsync([...packageManagerArguments, ...versionedPackages]);\n\n await applyPluginsAsync(projectRoot, versionedPackages);\n }\n\n if (devDependencies.length) {\n await packageManager.addDevAsync([\n ...packageManagerArguments,\n ...devDependencies.map((dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`),\n ]);\n }\n}\n"],"names":["fixPackagesAsync","Log","projectRoot","packages","packageManager","sdkVersion","packageManagerArguments","length","dependencies","devDependencies","groupBy","dep","packageType","versioningMessages","getOperationLog","othersCount","nativeModulesCount","log","chalk","join","name","expoDep","find","packageName","installExpoPackageAsync","expoPackageToInstall","expectedVersionOrRange","followUpCommandArgs","versionedPackages","map","addAsync","applyPluginsAsync","addDevAsync"],"mappings":"AAAA;;;;QAasBA,gBAAgB,GAAhBA,gBAAgB;AAZpB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAES,IAAA,aAAgB,WAAhB,gBAAgB,CAAA;AACV,IAAA,mBAAsB,WAAtB,sBAAsB,CAAA;AAClDC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACiB,IAAA,qBAAmD,WAAnD,mDAAmD,CAAA;AAE3D,IAAA,MAAgB,WAAhB,gBAAgB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKjC,eAAeD,gBAAgB,CACpCE,WAAmB,EACnB,EACEC,QAAQ,CAAA,EACRC,cAAc,CAAA,EACdC,UAAU,CAAA,EACVC,uBAAuB,CAAA,EAexB,EACc;IACf,IAAI,CAACH,QAAQ,CAACI,MAAM,EAAE;QACpB,OAAO;KACR;IAED,MAAM,EAAEC,YAAY,EAAG,EAAE,CAAA,EAAEC,eAAe,EAAG,EAAE,CAAA,EAAE,GAAGC,CAAAA,GAAAA,MAAO,AAAoC,CAAA,QAApC,CAACP,QAAQ,EAAE,CAACQ,GAAG,GAAKA,GAAG,CAACC,WAAW;IAAA,CAAC,AAAC;IAChG,MAAMC,kBAAkB,GAAGC,CAAAA,GAAAA,qBAAe,AAIxC,CAAA,gBAJwC,CAAC;QACzCC,WAAW,EAAE,CAAC;QACdC,kBAAkB,EAAEb,QAAQ,CAACI,MAAM;QACnCF,UAAU;KACX,CAAC,AAAC;IAEH,yDAAyD;IACzDJ,GAAG,CAACgB,GAAG,CACLC,MAAK,QAAA,CAAC,kBAAkB,EACtBL,kBAAkB,CAACN,MAAM,GAAGM,kBAAkB,CAACM,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,CACxE,YAAY,EAAEf,cAAc,CAACgB,IAAI,CAAC,CAAC,CAAC,CACtC,CAAC;IAEF,oGAAoG;IACpG,MAAMC,OAAO,GAAGb,YAAY,CAACc,IAAI,CAAC,CAACX,GAAG,GAAKA,GAAG,CAACY,WAAW,KAAK,MAAM;IAAA,CAAC,AAAC;IACvE,IAAIF,OAAO,EAAE;QACX,MAAMG,CAAAA,GAAAA,mBAAuB,AAK3B,CAAA,wBAL2B,CAACtB,WAAW,EAAE;YACzCE,cAAc;YACdE,uBAAuB;YACvBmB,oBAAoB,EAAE,CAAC,KAAK,EAAEJ,OAAO,CAACK,sBAAsB,CAAC,CAAC;YAC9DC,mBAAmB,EAAE;gBAAC,OAAO;aAAC;SAC/B,CAAC,CAAC;QACH,kFAAkF;QAClF,OAAO;KACR;IAED,IAAInB,YAAY,CAACD,MAAM,EAAE;QACvB,MAAMqB,iBAAiB,GAAGpB,YAAY,CAACqB,GAAG,CACxC,CAAClB,GAAG,GAAK,CAAC,EAAEA,GAAG,CAACY,WAAW,CAAC,CAAC,EAAEZ,GAAG,CAACe,sBAAsB,CAAC,CAAC;QAAA,CAC5D,AAAC;QAEF,MAAMtB,cAAc,CAAC0B,QAAQ,CAAC;eAAIxB,uBAAuB;eAAKsB,iBAAiB;SAAC,CAAC,CAAC;QAElF,MAAMG,CAAAA,GAAAA,aAAiB,AAAgC,CAAA,kBAAhC,CAAC7B,WAAW,EAAE0B,iBAAiB,CAAC,CAAC;KACzD;IAED,IAAInB,eAAe,CAACF,MAAM,EAAE;QAC1B,MAAMH,cAAc,CAAC4B,WAAW,CAAC;eAC5B1B,uBAAuB;eACvBG,eAAe,CAACoB,GAAG,CAAC,CAAClB,GAAG,GAAK,CAAC,EAAEA,GAAG,CAACY,WAAW,CAAC,CAAC,EAAEZ,GAAG,CAACe,sBAAsB,CAAC,CAAC;YAAA,CAAC;SACpF,CAAC,CAAC;KACJ;CACF"}
|
|
@@ -4,14 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
exports.installAsync = installAsync;
|
|
6
6
|
exports.installPackagesAsync = installPackagesAsync;
|
|
7
|
-
exports.fixPackagesAsync = fixPackagesAsync;
|
|
8
7
|
var _config = require("@expo/config");
|
|
9
8
|
var PackageManager = _interopRequireWildcard(require("@expo/package-manager"));
|
|
10
9
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
10
|
+
var _applyPlugins = require("./applyPlugins");
|
|
11
11
|
var _checkPackages = require("./checkPackages");
|
|
12
|
+
var _installExpoPackage = require("./installExpoPackage");
|
|
12
13
|
var Log = _interopRequireWildcard(require("../log"));
|
|
13
14
|
var _getVersionedPackages = require("../start/doctor/dependencies/getVersionedPackages");
|
|
14
|
-
var
|
|
15
|
+
var _errors = require("../utils/errors");
|
|
15
16
|
var _findUp = require("../utils/findUp");
|
|
16
17
|
var _link = require("../utils/link");
|
|
17
18
|
var _nodeEnv = require("../utils/nodeEnv");
|
|
@@ -58,7 +59,15 @@ async function installAsync(packages, options, packageManagerArguments = []) {
|
|
|
58
59
|
silent: options.silent,
|
|
59
60
|
log: Log.log
|
|
60
61
|
});
|
|
61
|
-
|
|
62
|
+
const expoVersion = findPackageByName(packages, "expo");
|
|
63
|
+
const otherPackages = packages.filter((pkg)=>pkg !== expoVersion
|
|
64
|
+
);
|
|
65
|
+
// Abort early when installing `expo@<version>` and other packages with `--fix/--check`
|
|
66
|
+
if (packageHasVersion(expoVersion) && otherPackages.length && (options.check || options.fix)) {
|
|
67
|
+
throw new _errors.CommandError("BAD_ARGS", `Cannot install other packages with ${expoVersion} and --fix or --check`);
|
|
68
|
+
}
|
|
69
|
+
// Only check/fix packages if `expo@<version>` is not requested
|
|
70
|
+
if (!packageHasVersion(expoVersion) && (options.check || options.fix)) {
|
|
62
71
|
return await (0, _checkPackages).checkPackagesAsync(projectRoot, {
|
|
63
72
|
packages,
|
|
64
73
|
options,
|
|
@@ -74,15 +83,16 @@ async function installAsync(packages, options, packageManagerArguments = []) {
|
|
|
74
83
|
});
|
|
75
84
|
// Resolve the versioned packages, then install them.
|
|
76
85
|
return installPackagesAsync(projectRoot, {
|
|
86
|
+
...options,
|
|
77
87
|
packageManager,
|
|
78
88
|
packages,
|
|
79
89
|
packageManagerArguments,
|
|
80
90
|
sdkVersion: exp.sdkVersion
|
|
81
91
|
});
|
|
82
92
|
}
|
|
83
|
-
async function installPackagesAsync(projectRoot, { packages , packageManager , sdkVersion , packageManagerArguments }) {
|
|
93
|
+
async function installPackagesAsync(projectRoot, { packages , packageManager , sdkVersion , packageManagerArguments , fix , check }) {
|
|
84
94
|
// Read the project Expo config without plugins.
|
|
85
|
-
const { pkg } = (0, _config).getConfig(projectRoot, {
|
|
95
|
+
const { pkg: pkg1 } = (0, _config).getConfig(projectRoot, {
|
|
86
96
|
// Sometimes users will add a plugin to the config before installing the library,
|
|
87
97
|
// this wouldn't work unless we dangerously disable plugin serialization.
|
|
88
98
|
skipPlugins: true
|
|
@@ -92,72 +102,52 @@ async function installPackagesAsync(projectRoot, { packages , packageManager , s
|
|
|
92
102
|
packages,
|
|
93
103
|
// sdkVersion is always defined because we don't skipSDKVersionRequirement in getConfig.
|
|
94
104
|
sdkVersion,
|
|
95
|
-
pkg
|
|
105
|
+
pkg: pkg1
|
|
96
106
|
});
|
|
97
107
|
Log.log(_chalk.default`\u203A Installing ${versioning.messages.length ? versioning.messages.join(" and ") + " " : ""}using {bold ${packageManager.name}}`);
|
|
98
108
|
if (versioning.excludedNativeModules.length) {
|
|
99
|
-
|
|
100
|
-
)
|
|
109
|
+
const alreadyExcluded = versioning.excludedNativeModules.filter((module)=>module.isExcludedFromValidation
|
|
110
|
+
);
|
|
111
|
+
const specifiedExactVersion = versioning.excludedNativeModules.filter((module)=>!module.isExcludedFromValidation
|
|
112
|
+
);
|
|
113
|
+
if (alreadyExcluded.length) {
|
|
114
|
+
Log.log(_chalk.default`\u203A Using ${(0, _strings).joinWithCommasAnd(alreadyExcluded.map(({ bundledNativeVersion , name , specifiedVersion })=>`${specifiedVersion || "latest"} instead of ${bundledNativeVersion} for ${name}`
|
|
115
|
+
))} because ${alreadyExcluded.length > 1 ? "they are" : "it is"} listed in {bold expo.install.exclude} in package.json. ${(0, _link).learnMore("https://expo.dev/more/expo-cli/#configuring-dependency-validation")}`);
|
|
116
|
+
}
|
|
117
|
+
if (specifiedExactVersion.length) {
|
|
118
|
+
Log.log(_chalk.default`\u203A Using ${(0, _strings).joinWithCommasAnd(specifiedExactVersion.map(({ bundledNativeVersion , name , specifiedVersion })=>`${specifiedVersion} instead of ${bundledNativeVersion} for ${name}`
|
|
119
|
+
))} because ${specifiedExactVersion.length > 1 ? "these versions" : "this version"} was explicitly provided. Packages excluded from dependency validation should be listed in {bold expo.install.exclude} in package.json. ${(0, _link).learnMore("https://expo.dev/more/expo-cli/#configuring-dependency-validation")}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// `expo` needs to be installed before installing other packages
|
|
123
|
+
const expoPackage = findPackageByName(packages, "expo");
|
|
124
|
+
if (expoPackage) {
|
|
125
|
+
const postInstallCommand = packages.filter((pkg)=>pkg !== expoPackage
|
|
126
|
+
);
|
|
127
|
+
// Pipe options to the next command
|
|
128
|
+
if (fix) postInstallCommand.push("--fix");
|
|
129
|
+
if (check) postInstallCommand.push("--check");
|
|
130
|
+
// Abort after installing `expo`, follow up command is spawn in a new process
|
|
131
|
+
return await (0, _installExpoPackage).installExpoPackageAsync(projectRoot, {
|
|
132
|
+
packageManager,
|
|
133
|
+
packageManagerArguments,
|
|
134
|
+
expoPackageToInstall: versioning.packages.find((pkg)=>pkg.startsWith("expo@")
|
|
135
|
+
),
|
|
136
|
+
followUpCommandArgs: postInstallCommand
|
|
137
|
+
});
|
|
101
138
|
}
|
|
102
139
|
await packageManager.addAsync([
|
|
103
140
|
...packageManagerArguments,
|
|
104
141
|
...versioning.packages
|
|
105
142
|
]);
|
|
106
|
-
await applyPluginsAsync(projectRoot, versioning.packages);
|
|
143
|
+
await (0, _applyPlugins).applyPluginsAsync(projectRoot, versioning.packages);
|
|
107
144
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const { dependencies =[] , devDependencies =[] } = (0, _array).groupBy(packages, (dep)=>dep.packageType
|
|
145
|
+
/** Find a package, by name, in the requested packages list (`expo` -> `expo`/`expo@<version>`) */ function findPackageByName(packages, name) {
|
|
146
|
+
return packages.find((pkg)=>pkg === name || pkg.startsWith(`${name}@`)
|
|
113
147
|
);
|
|
114
|
-
const versioningMessages = (0, _getVersionedPackages).getOperationLog({
|
|
115
|
-
othersCount: 0,
|
|
116
|
-
nativeModulesCount: packages.length,
|
|
117
|
-
sdkVersion
|
|
118
|
-
});
|
|
119
|
-
Log.log(_chalk.default`\u203A Installing ${versioningMessages.length ? versioningMessages.join(" and ") + " " : ""}using {bold ${packageManager.name}}`);
|
|
120
|
-
if (dependencies.length) {
|
|
121
|
-
const versionedPackages = dependencies.map((dep)=>`${dep.packageName}@${dep.expectedVersionOrRange}`
|
|
122
|
-
);
|
|
123
|
-
await packageManager.addAsync([
|
|
124
|
-
...packageManagerArguments,
|
|
125
|
-
...versionedPackages
|
|
126
|
-
]);
|
|
127
|
-
await applyPluginsAsync(projectRoot, versionedPackages);
|
|
128
|
-
}
|
|
129
|
-
if (devDependencies.length) {
|
|
130
|
-
await packageManager.addDevAsync([
|
|
131
|
-
...packageManagerArguments,
|
|
132
|
-
...devDependencies.map((dep)=>`${dep.packageName}@${dep.expectedVersionOrRange}`
|
|
133
|
-
),
|
|
134
|
-
]);
|
|
135
|
-
}
|
|
136
148
|
}
|
|
137
|
-
/**
|
|
138
|
-
|
|
139
|
-
* This should be dropped in favor of autolinking in the future.
|
|
140
|
-
*/ async function applyPluginsAsync(projectRoot, packages) {
|
|
141
|
-
const { autoAddConfigPluginsAsync } = await Promise.resolve().then(function() {
|
|
142
|
-
return _interopRequireWildcard(require("./utils/autoAddConfigPlugins.js"));
|
|
143
|
-
});
|
|
144
|
-
try {
|
|
145
|
-
const { exp } = (0, _config).getConfig(projectRoot, {
|
|
146
|
-
skipSDKVersionRequirement: true
|
|
147
|
-
});
|
|
148
|
-
// Only auto add plugins if the plugins array is defined or if the project is using SDK +42.
|
|
149
|
-
await autoAddConfigPluginsAsync(projectRoot, exp, // Split any possible NPM tags. i.e. `expo@latest` -> `expo`
|
|
150
|
-
packages.map((pkg)=>pkg.split("@")[0]
|
|
151
|
-
).filter(Boolean));
|
|
152
|
-
} catch (error) {
|
|
153
|
-
// If we fail to apply plugins, the log a warning and continue.
|
|
154
|
-
if (error.isPluginError) {
|
|
155
|
-
Log.warn(`Skipping config plugin check: ` + error.message);
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
// Any other error, rethrow.
|
|
159
|
-
throw error;
|
|
160
|
-
}
|
|
149
|
+
/** Determine if a specific version is requested for a package */ function packageHasVersion(name = "") {
|
|
150
|
+
return name.includes("@");
|
|
161
151
|
}
|
|
162
152
|
|
|
163
153
|
//# sourceMappingURL=installAsync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/install/installAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { checkPackagesAsync } from './checkPackages';\nimport { Options } from './resolveOptions';\nimport * as Log from '../log';\nimport {\n getOperationLog,\n getVersionedPackagesAsync,\n} from '../start/doctor/dependencies/getVersionedPackages';\nimport { getVersionedDependenciesAsync } from '../start/doctor/dependencies/validateDependenciesVersions';\nimport { groupBy } from '../utils/array';\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { learnMore } from '../utils/link';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { joinWithCommasAnd } from '../utils/strings';\n\nexport async function installAsync(\n packages: string[],\n options: Options & { projectRoot?: string },\n packageManagerArguments: string[] = []\n) {\n setNodeEnv('development');\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo install` from a subdirectory of the project.\n const projectRoot = options.projectRoot ?? findUpProjectRootOrAssert(process.cwd());\n require('@expo/env').load(projectRoot);\n\n // Resolve the package manager used by the project, or based on the provided arguments.\n const packageManager = PackageManager.createForProject(projectRoot, {\n npm: options.npm,\n yarn: options.yarn,\n bun: options.bun,\n pnpm: options.pnpm,\n silent: options.silent,\n log: Log.log,\n });\n\n if (options.check || options.fix) {\n return await checkPackagesAsync(projectRoot, {\n packages,\n options,\n packageManager,\n packageManagerArguments,\n });\n }\n\n // Read the project Expo config without plugins.\n const { exp } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n // Resolve the versioned packages, then install them.\n return installPackagesAsync(projectRoot, {\n packageManager,\n packages,\n packageManagerArguments,\n sdkVersion: exp.sdkVersion!,\n });\n}\n\n/** Version packages and install in a project. */\nexport async function installPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n /**\n * List of packages to version, grouped by the type of dependency.\n * @example ['uuid', 'react-native-reanimated@latest']\n */\n packages: string[];\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n // Read the project Expo config without plugins.\n const { pkg } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n //assertNotInstallingExcludedPackages(projectRoot, packages, pkg);\n\n const versioning = await getVersionedPackagesAsync(projectRoot, {\n packages,\n // sdkVersion is always defined because we don't skipSDKVersionRequirement in getConfig.\n sdkVersion,\n pkg,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioning.messages.length ? versioning.messages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n if (versioning.excludedNativeModules.length) {\n Log.log(\n chalk`\\u203A Using latest version instead of ${joinWithCommasAnd(\n versioning.excludedNativeModules.map(\n ({ bundledNativeVersion, name }) => `${bundledNativeVersion} for ${name}`\n )\n )} because ${\n versioning.excludedNativeModules.length > 1 ? 'they are' : 'it is'\n } listed in {bold expo.install.exclude} in package.json. ${learnMore(\n 'https://expo.dev/more/expo-cli/#configuring-dependency-validation'\n )}`\n );\n }\n\n await packageManager.addAsync([...packageManagerArguments, ...versioning.packages]);\n\n await applyPluginsAsync(projectRoot, versioning.packages);\n}\n\nexport async function fixPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n packages: Awaited<ReturnType<typeof getVersionedDependenciesAsync>>;\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n if (!packages.length) {\n return;\n }\n\n const { dependencies = [], devDependencies = [] } = groupBy(packages, (dep) => dep.packageType);\n const versioningMessages = getOperationLog({\n othersCount: 0, // All fixable packages are versioned\n nativeModulesCount: packages.length,\n sdkVersion,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioningMessages.length ? versioningMessages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n if (dependencies.length) {\n const versionedPackages = dependencies.map(\n (dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`\n );\n\n await packageManager.addAsync([...packageManagerArguments, ...versionedPackages]);\n\n await applyPluginsAsync(projectRoot, versionedPackages);\n }\n\n if (devDependencies.length) {\n await packageManager.addDevAsync([\n ...packageManagerArguments,\n ...devDependencies.map((dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`),\n ]);\n }\n}\n\n/**\n * A convenience feature for automatically applying Expo Config Plugins to the `app.json` after installing them.\n * This should be dropped in favor of autolinking in the future.\n */\nasync function applyPluginsAsync(projectRoot: string, packages: string[]) {\n const { autoAddConfigPluginsAsync } = await import('./utils/autoAddConfigPlugins.js');\n\n try {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n\n // Only auto add plugins if the plugins array is defined or if the project is using SDK +42.\n await autoAddConfigPluginsAsync(\n projectRoot,\n exp,\n // Split any possible NPM tags. i.e. `expo@latest` -> `expo`\n packages.map((pkg) => pkg.split('@')[0]).filter(Boolean)\n );\n } catch (error: any) {\n // If we fail to apply plugins, the log a warning and continue.\n if (error.isPluginError) {\n Log.warn(`Skipping config plugin check: ` + error.message);\n return;\n }\n // Any other error, rethrow.\n throw error;\n }\n}\n"],"names":["installAsync","installPackagesAsync","fixPackagesAsync","PackageManager","Log","packages","options","packageManagerArguments","setNodeEnv","projectRoot","findUpProjectRootOrAssert","process","cwd","require","load","packageManager","createForProject","npm","yarn","bun","pnpm","silent","log","check","fix","checkPackagesAsync","exp","getConfig","skipPlugins","sdkVersion","pkg","versioning","getVersionedPackagesAsync","chalk","messages","length","join","name","excludedNativeModules","joinWithCommasAnd","map","bundledNativeVersion","learnMore","addAsync","applyPluginsAsync","dependencies","devDependencies","groupBy","dep","packageType","versioningMessages","getOperationLog","othersCount","nativeModulesCount","versionedPackages","packageName","expectedVersionOrRange","addDevAsync","autoAddConfigPluginsAsync","skipSDKVersionRequirement","split","filter","Boolean","error","isPluginError","warn","message"],"mappings":"AAAA;;;;QAkBsBA,YAAY,GAAZA,YAAY;QA+CZC,oBAAoB,GAApBA,oBAAoB;QAoEpBC,gBAAgB,GAAhBA,gBAAgB;AArIZ,IAAA,OAAc,WAAd,cAAc,CAAA;AAC5BC,IAAAA,cAAc,mCAAM,uBAAuB,EAA7B;AACR,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEU,IAAA,cAAiB,WAAjB,iBAAiB,CAAA;AAExCC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AAIR,IAAA,qBAAmD,WAAnD,mDAAmD,CAAA;AAElC,IAAA,MAAgB,WAAhB,gBAAgB,CAAA;AACE,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;AACjC,IAAA,KAAe,WAAf,eAAe,CAAA;AACd,IAAA,QAAkB,WAAlB,kBAAkB,CAAA;AACX,IAAA,QAAkB,WAAlB,kBAAkB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,eAAeJ,YAAY,CAChCK,QAAkB,EAClBC,OAA2C,EAC3CC,uBAAiC,GAAG,EAAE,EACtC;IACAC,CAAAA,GAAAA,QAAU,AAAe,CAAA,WAAf,CAAC,aAAa,CAAC,CAAC;QAGNF,YAAmB;IAFvC,0EAA0E;IAC1E,mFAAmF;IACnF,MAAMG,WAAW,GAAGH,CAAAA,YAAmB,GAAnBA,OAAO,CAACG,WAAW,YAAnBH,YAAmB,GAAII,CAAAA,GAAAA,OAAyB,AAAe,CAAA,0BAAf,CAACC,OAAO,CAACC,GAAG,EAAE,CAAC,AAAC;IACpFC,OAAO,CAAC,WAAW,CAAC,CAACC,IAAI,CAACL,WAAW,CAAC,CAAC;IAEvC,uFAAuF;IACvF,MAAMM,cAAc,GAAGZ,cAAc,CAACa,gBAAgB,CAACP,WAAW,EAAE;QAClEQ,GAAG,EAAEX,OAAO,CAACW,GAAG;QAChBC,IAAI,EAAEZ,OAAO,CAACY,IAAI;QAClBC,GAAG,EAAEb,OAAO,CAACa,GAAG;QAChBC,IAAI,EAAEd,OAAO,CAACc,IAAI;QAClBC,MAAM,EAAEf,OAAO,CAACe,MAAM;QACtBC,GAAG,EAAElB,GAAG,CAACkB,GAAG;KACb,CAAC,AAAC;IAEH,IAAIhB,OAAO,CAACiB,KAAK,IAAIjB,OAAO,CAACkB,GAAG,EAAE;QAChC,OAAO,MAAMC,CAAAA,GAAAA,cAAkB,AAK7B,CAAA,mBAL6B,CAAChB,WAAW,EAAE;YAC3CJ,QAAQ;YACRC,OAAO;YACPS,cAAc;YACdR,uBAAuB;SACxB,CAAC,CAAC;KACJ;IAED,gDAAgD;IAChD,MAAM,EAAEmB,GAAG,CAAA,EAAE,GAAGC,CAAAA,GAAAA,OAAS,AAIvB,CAAA,UAJuB,CAAClB,WAAW,EAAE;QACrC,iFAAiF;QACjF,yEAAyE;QACzEmB,WAAW,EAAE,IAAI;KAClB,CAAC,AAAC;IAEH,qDAAqD;IACrD,OAAO3B,oBAAoB,CAACQ,WAAW,EAAE;QACvCM,cAAc;QACdV,QAAQ;QACRE,uBAAuB;QACvBsB,UAAU,EAAEH,GAAG,CAACG,UAAU;KAC3B,CAAC,CAAC;CACJ;AAGM,eAAe5B,oBAAoB,CACxCQ,WAAmB,EACnB,EACEJ,QAAQ,CAAA,EACRU,cAAc,CAAA,EACdc,UAAU,CAAA,EACVtB,uBAAuB,CAAA,EAmBxB,EACc;IACf,gDAAgD;IAChD,MAAM,EAAEuB,GAAG,CAAA,EAAE,GAAGH,CAAAA,GAAAA,OAAS,AAIvB,CAAA,UAJuB,CAAClB,WAAW,EAAE;QACrC,iFAAiF;QACjF,yEAAyE;QACzEmB,WAAW,EAAE,IAAI;KAClB,CAAC,AAAC;IAEH,kEAAkE;IAElE,MAAMG,UAAU,GAAG,MAAMC,CAAAA,GAAAA,qBAAyB,AAKhD,CAAA,0BALgD,CAACvB,WAAW,EAAE;QAC9DJ,QAAQ;QACR,wFAAwF;QACxFwB,UAAU;QACVC,GAAG;KACJ,CAAC,AAAC;IAEH1B,GAAG,CAACkB,GAAG,CACLW,MAAK,QAAA,CAAC,kBAAkB,EACtBF,UAAU,CAACG,QAAQ,CAACC,MAAM,GAAGJ,UAAU,CAACG,QAAQ,CAACE,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,CAC1E,YAAY,EAAErB,cAAc,CAACsB,IAAI,CAAC,CAAC,CAAC,CACtC,CAAC;IAEF,IAAIN,UAAU,CAACO,qBAAqB,CAACH,MAAM,EAAE;QAC3C/B,GAAG,CAACkB,GAAG,CACLW,MAAK,QAAA,CAAC,uCAAuC,EAAEM,CAAAA,GAAAA,QAAiB,AAI/D,CAAA,kBAJ+D,CAC9DR,UAAU,CAACO,qBAAqB,CAACE,GAAG,CAClC,CAAC,EAAEC,oBAAoB,CAAA,EAAEJ,IAAI,CAAA,EAAE,GAAK,CAAC,EAAEI,oBAAoB,CAAC,KAAK,EAAEJ,IAAI,CAAC,CAAC;QAAA,CAC1E,CACF,CAAC,SAAS,EACTN,UAAU,CAACO,qBAAqB,CAACH,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,OAAO,CACnE,wDAAwD,EAAEO,CAAAA,GAAAA,KAAS,AAEnE,CAAA,UAFmE,CAClE,mEAAmE,CACpE,CAAC,CAAC,CACJ,CAAC;KACH;IAED,MAAM3B,cAAc,CAAC4B,QAAQ,CAAC;WAAIpC,uBAAuB;WAAKwB,UAAU,CAAC1B,QAAQ;KAAC,CAAC,CAAC;IAEpF,MAAMuC,iBAAiB,CAACnC,WAAW,EAAEsB,UAAU,CAAC1B,QAAQ,CAAC,CAAC;CAC3D;AAEM,eAAeH,gBAAgB,CACpCO,WAAmB,EACnB,EACEJ,QAAQ,CAAA,EACRU,cAAc,CAAA,EACdc,UAAU,CAAA,EACVtB,uBAAuB,CAAA,EAexB,EACc;IACf,IAAI,CAACF,QAAQ,CAAC8B,MAAM,EAAE;QACpB,OAAO;KACR;IAED,MAAM,EAAEU,YAAY,EAAG,EAAE,CAAA,EAAEC,eAAe,EAAG,EAAE,CAAA,EAAE,GAAGC,CAAAA,GAAAA,MAAO,AAAoC,CAAA,QAApC,CAAC1C,QAAQ,EAAE,CAAC2C,GAAG,GAAKA,GAAG,CAACC,WAAW;IAAA,CAAC,AAAC;IAChG,MAAMC,kBAAkB,GAAGC,CAAAA,GAAAA,qBAAe,AAIxC,CAAA,gBAJwC,CAAC;QACzCC,WAAW,EAAE,CAAC;QACdC,kBAAkB,EAAEhD,QAAQ,CAAC8B,MAAM;QACnCN,UAAU;KACX,CAAC,AAAC;IAEHzB,GAAG,CAACkB,GAAG,CACLW,MAAK,QAAA,CAAC,kBAAkB,EACtBiB,kBAAkB,CAACf,MAAM,GAAGe,kBAAkB,CAACd,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,CACxE,YAAY,EAAErB,cAAc,CAACsB,IAAI,CAAC,CAAC,CAAC,CACtC,CAAC;IAEF,IAAIQ,YAAY,CAACV,MAAM,EAAE;QACvB,MAAMmB,iBAAiB,GAAGT,YAAY,CAACL,GAAG,CACxC,CAACQ,GAAG,GAAK,CAAC,EAAEA,GAAG,CAACO,WAAW,CAAC,CAAC,EAAEP,GAAG,CAACQ,sBAAsB,CAAC,CAAC;QAAA,CAC5D,AAAC;QAEF,MAAMzC,cAAc,CAAC4B,QAAQ,CAAC;eAAIpC,uBAAuB;eAAK+C,iBAAiB;SAAC,CAAC,CAAC;QAElF,MAAMV,iBAAiB,CAACnC,WAAW,EAAE6C,iBAAiB,CAAC,CAAC;KACzD;IAED,IAAIR,eAAe,CAACX,MAAM,EAAE;QAC1B,MAAMpB,cAAc,CAAC0C,WAAW,CAAC;eAC5BlD,uBAAuB;eACvBuC,eAAe,CAACN,GAAG,CAAC,CAACQ,GAAG,GAAK,CAAC,EAAEA,GAAG,CAACO,WAAW,CAAC,CAAC,EAAEP,GAAG,CAACQ,sBAAsB,CAAC,CAAC;YAAA,CAAC;SACpF,CAAC,CAAC;KACJ;CACF;AAED;;;GAGG,CACH,eAAeZ,iBAAiB,CAACnC,WAAmB,EAAEJ,QAAkB,EAAE;IACxE,MAAM,EAAEqD,yBAAyB,CAAA,EAAE,GAAG,MAAM;+CAAO,iCAAiC;MAAC,AAAC;IAEtF,IAAI;QACF,MAAM,EAAEhC,GAAG,CAAA,EAAE,GAAGC,CAAAA,GAAAA,OAAS,AAAkD,CAAA,UAAlD,CAAClB,WAAW,EAAE;YAAEkD,yBAAyB,EAAE,IAAI;SAAE,CAAC,AAAC;QAE5E,4FAA4F;QAC5F,MAAMD,yBAAyB,CAC7BjD,WAAW,EACXiB,GAAG,EACH,4DAA4D;QAC5DrB,QAAQ,CAACmC,GAAG,CAAC,CAACV,GAAG,GAAKA,GAAG,CAAC8B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAA,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC,CACzD,CAAC;KACH,CAAC,OAAOC,KAAK,EAAO;QACnB,+DAA+D;QAC/D,IAAIA,KAAK,CAACC,aAAa,EAAE;YACvB5D,GAAG,CAAC6D,IAAI,CAAC,CAAC,8BAA8B,CAAC,GAAGF,KAAK,CAACG,OAAO,CAAC,CAAC;YAC3D,OAAO;SACR;QACD,4BAA4B;QAC5B,MAAMH,KAAK,CAAC;KACb;CACF"}
|
|
1
|
+
{"version":3,"sources":["../../../src/install/installAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { applyPluginsAsync } from './applyPlugins';\nimport { checkPackagesAsync } from './checkPackages';\nimport { installExpoPackageAsync } from './installExpoPackage';\nimport { Options } from './resolveOptions';\nimport * as Log from '../log';\nimport { getVersionedPackagesAsync } from '../start/doctor/dependencies/getVersionedPackages';\nimport { CommandError } from '../utils/errors';\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { learnMore } from '../utils/link';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { joinWithCommasAnd } from '../utils/strings';\n\n/**\n * Installs versions of specified packages compatible with the current Expo SDK version, or\n * checks/ fixes dependencies in project if they don't match compatible versions specified in bundledNativeModules or versions endpoints.\n *\n * @param packages list of packages to install, if installing specific packages and not checking/ fixing\n * @param options options, including check or fix\n * @param packageManagerArguments arguments to forward to the package manager invoked while installing\n * @returns Promise<void>\n */\nexport async function installAsync(\n packages: string[],\n options: Options & { projectRoot?: string },\n packageManagerArguments: string[] = []\n) {\n setNodeEnv('development');\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo install` from a subdirectory of the project.\n const projectRoot = options.projectRoot ?? findUpProjectRootOrAssert(process.cwd());\n require('@expo/env').load(projectRoot);\n\n // Resolve the package manager used by the project, or based on the provided arguments.\n const packageManager = PackageManager.createForProject(projectRoot, {\n npm: options.npm,\n yarn: options.yarn,\n bun: options.bun,\n pnpm: options.pnpm,\n silent: options.silent,\n log: Log.log,\n });\n\n const expoVersion = findPackageByName(packages, 'expo');\n const otherPackages = packages.filter((pkg) => pkg !== expoVersion);\n\n // Abort early when installing `expo@<version>` and other packages with `--fix/--check`\n if (packageHasVersion(expoVersion) && otherPackages.length && (options.check || options.fix)) {\n throw new CommandError(\n 'BAD_ARGS',\n `Cannot install other packages with ${expoVersion} and --fix or --check`\n );\n }\n\n // Only check/fix packages if `expo@<version>` is not requested\n if (!packageHasVersion(expoVersion) && (options.check || options.fix)) {\n return await checkPackagesAsync(projectRoot, {\n packages,\n options,\n packageManager,\n packageManagerArguments,\n });\n }\n\n // Read the project Expo config without plugins.\n const { exp } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n // Resolve the versioned packages, then install them.\n return installPackagesAsync(projectRoot, {\n ...options,\n packageManager,\n packages,\n packageManagerArguments,\n sdkVersion: exp.sdkVersion!,\n });\n}\n\n/** Version packages and install in a project. */\nexport async function installPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n fix,\n check,\n }: Options & {\n /**\n * List of packages to version, grouped by the type of dependency.\n * @example ['uuid', 'react-native-reanimated@latest']\n */\n packages: string[];\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n // Read the project Expo config without plugins.\n const { pkg } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n //assertNotInstallingExcludedPackages(projectRoot, packages, pkg);\n\n const versioning = await getVersionedPackagesAsync(projectRoot, {\n packages,\n // sdkVersion is always defined because we don't skipSDKVersionRequirement in getConfig.\n sdkVersion,\n pkg,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioning.messages.length ? versioning.messages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n if (versioning.excludedNativeModules.length) {\n const alreadyExcluded = versioning.excludedNativeModules.filter(\n (module) => module.isExcludedFromValidation\n );\n const specifiedExactVersion = versioning.excludedNativeModules.filter(\n (module) => !module.isExcludedFromValidation\n );\n\n if (alreadyExcluded.length) {\n Log.log(\n chalk`\\u203A Using ${joinWithCommasAnd(\n alreadyExcluded.map(\n ({ bundledNativeVersion, name, specifiedVersion }) =>\n `${specifiedVersion || 'latest'} instead of ${bundledNativeVersion} for ${name}`\n )\n )} because ${\n alreadyExcluded.length > 1 ? 'they are' : 'it is'\n } listed in {bold expo.install.exclude} in package.json. ${learnMore(\n 'https://expo.dev/more/expo-cli/#configuring-dependency-validation'\n )}`\n );\n }\n\n if (specifiedExactVersion.length) {\n Log.log(\n chalk`\\u203A Using ${joinWithCommasAnd(\n specifiedExactVersion.map(\n ({ bundledNativeVersion, name, specifiedVersion }) =>\n `${specifiedVersion} instead of ${bundledNativeVersion} for ${name}`\n )\n )} because ${\n specifiedExactVersion.length > 1 ? 'these versions' : 'this version'\n } was explicitly provided. Packages excluded from dependency validation should be listed in {bold expo.install.exclude} in package.json. ${learnMore(\n 'https://expo.dev/more/expo-cli/#configuring-dependency-validation'\n )}`\n );\n }\n }\n\n // `expo` needs to be installed before installing other packages\n const expoPackage = findPackageByName(packages, 'expo');\n if (expoPackage) {\n const postInstallCommand = packages.filter((pkg) => pkg !== expoPackage);\n\n // Pipe options to the next command\n if (fix) postInstallCommand.push('--fix');\n if (check) postInstallCommand.push('--check');\n\n // Abort after installing `expo`, follow up command is spawn in a new process\n return await installExpoPackageAsync(projectRoot, {\n packageManager,\n packageManagerArguments,\n expoPackageToInstall: versioning.packages.find((pkg) => pkg.startsWith('expo@'))!,\n followUpCommandArgs: postInstallCommand,\n });\n }\n\n await packageManager.addAsync([...packageManagerArguments, ...versioning.packages]);\n\n await applyPluginsAsync(projectRoot, versioning.packages);\n}\n\n/** Find a package, by name, in the requested packages list (`expo` -> `expo`/`expo@<version>`) */\nfunction findPackageByName(packages: string[], name: string) {\n return packages.find((pkg) => pkg === name || pkg.startsWith(`${name}@`));\n}\n\n/** Determine if a specific version is requested for a package */\nfunction packageHasVersion(name = '') {\n return name.includes('@');\n}\n"],"names":["installAsync","installPackagesAsync","PackageManager","Log","packages","options","packageManagerArguments","setNodeEnv","projectRoot","findUpProjectRootOrAssert","process","cwd","require","load","packageManager","createForProject","npm","yarn","bun","pnpm","silent","log","expoVersion","findPackageByName","otherPackages","filter","pkg","packageHasVersion","length","check","fix","CommandError","checkPackagesAsync","exp","getConfig","skipPlugins","sdkVersion","versioning","getVersionedPackagesAsync","chalk","messages","join","name","excludedNativeModules","alreadyExcluded","module","isExcludedFromValidation","specifiedExactVersion","joinWithCommasAnd","map","bundledNativeVersion","specifiedVersion","learnMore","expoPackage","postInstallCommand","push","installExpoPackageAsync","expoPackageToInstall","find","startsWith","followUpCommandArgs","addAsync","applyPluginsAsync","includes"],"mappings":"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"}
|