18d3f3824SCedric van Putten"use strict"; 28d3f3824SCedric van Puttenvar __importDefault = (this && this.__importDefault) || function (mod) { 38d3f3824SCedric van Putten return (mod && mod.__esModule) ? mod : { "default": mod }; 48d3f3824SCedric van Putten}; 58d3f3824SCedric van PuttenObject.defineProperty(exports, "__esModule", { value: true }); 68d3f3824SCedric van Puttenexports.NpmPackageManager = void 0; 78d3f3824SCedric van Puttenconst json_file_1 = __importDefault(require("@expo/json-file")); 88d3f3824SCedric van Puttenconst npm_package_arg_1 = __importDefault(require("npm-package-arg")); 98d3f3824SCedric van Puttenconst path_1 = __importDefault(require("path")); 108a424bebSJames Ideconst BasePackageManager_1 = require("./BasePackageManager"); 118d3f3824SCedric van Puttenconst nodeWorkspaces_1 = require("../utils/nodeWorkspaces"); 128d3f3824SCedric van Puttenconst spawn_1 = require("../utils/spawn"); 138d3f3824SCedric van Puttenclass NpmPackageManager extends BasePackageManager_1.BasePackageManager { 14*1a3a1db5SEvan Bacon name = 'npm'; 15*1a3a1db5SEvan Bacon bin = 'npm'; 16*1a3a1db5SEvan Bacon lockFile = nodeWorkspaces_1.NPM_LOCK_FILE; 178d3f3824SCedric van Putten workspaceRoot() { 188d3f3824SCedric van Putten const root = (0, nodeWorkspaces_1.findYarnOrNpmWorkspaceRoot)(this.ensureCwdDefined('workspaceRoot')); 198d3f3824SCedric van Putten if (root) { 208d3f3824SCedric van Putten return new NpmPackageManager({ 218d3f3824SCedric van Putten ...this.options, 228d3f3824SCedric van Putten silent: this.silent, 238d3f3824SCedric van Putten log: this.log, 248d3f3824SCedric van Putten cwd: root, 258d3f3824SCedric van Putten }); 268d3f3824SCedric van Putten } 278d3f3824SCedric van Putten return null; 288d3f3824SCedric van Putten } 298d3f3824SCedric van Putten addAsync(namesOrFlags = []) { 308d3f3824SCedric van Putten if (!namesOrFlags.length) { 318d3f3824SCedric van Putten return this.installAsync(); 328d3f3824SCedric van Putten } 338d3f3824SCedric van Putten const { flags, versioned, unversioned } = this.parsePackageSpecs(namesOrFlags); 348d3f3824SCedric van Putten return (0, spawn_1.createPendingSpawnAsync)(() => this.updatePackageFileAsync(versioned, 'dependencies'), () => !unversioned.length 358d3f3824SCedric van Putten ? this.runAsync(['install', ...flags]) 368d3f3824SCedric van Putten : this.runAsync(['install', '--save', ...flags, ...unversioned.map((spec) => spec.raw)])); 378d3f3824SCedric van Putten } 388d3f3824SCedric van Putten addDevAsync(namesOrFlags = []) { 398d3f3824SCedric van Putten if (!namesOrFlags.length) { 408d3f3824SCedric van Putten return this.installAsync(); 418d3f3824SCedric van Putten } 428d3f3824SCedric van Putten const { flags, versioned, unversioned } = this.parsePackageSpecs(namesOrFlags); 438d3f3824SCedric van Putten return (0, spawn_1.createPendingSpawnAsync)(() => this.updatePackageFileAsync(versioned, 'devDependencies'), () => !unversioned.length 448d3f3824SCedric van Putten ? this.runAsync(['install', ...flags]) 458d3f3824SCedric van Putten : this.runAsync([ 468d3f3824SCedric van Putten 'install', 478d3f3824SCedric van Putten '--save-dev', 488d3f3824SCedric van Putten ...flags, 498d3f3824SCedric van Putten ...unversioned.map((spec) => spec.raw), 508d3f3824SCedric van Putten ])); 518d3f3824SCedric van Putten } 528d3f3824SCedric van Putten addGlobalAsync(namesOrFlags = []) { 538d3f3824SCedric van Putten if (!namesOrFlags.length) { 548d3f3824SCedric van Putten return this.installAsync(); 558d3f3824SCedric van Putten } 568d3f3824SCedric van Putten return this.runAsync(['install', '--global', ...namesOrFlags]); 578d3f3824SCedric van Putten } 588d3f3824SCedric van Putten removeAsync(namesOrFlags) { 598d3f3824SCedric van Putten return this.runAsync(['uninstall', ...namesOrFlags]); 608d3f3824SCedric van Putten } 618d3f3824SCedric van Putten removeDevAsync(namesOrFlags) { 628d3f3824SCedric van Putten return this.runAsync(['uninstall', '--save-dev', ...namesOrFlags]); 638d3f3824SCedric van Putten } 648d3f3824SCedric van Putten removeGlobalAsync(namesOrFlags) { 658d3f3824SCedric van Putten return this.runAsync(['uninstall', '--global', ...namesOrFlags]); 668d3f3824SCedric van Putten } 678d3f3824SCedric van Putten /** 688d3f3824SCedric van Putten * Parse all package specifications from the names or flag list. 698d3f3824SCedric van Putten * The result from this method can be used for `.updatePackageFileAsync`. 708d3f3824SCedric van Putten */ 718d3f3824SCedric van Putten parsePackageSpecs(namesOrFlags) { 728d3f3824SCedric van Putten const result = { flags: [], versioned: [], unversioned: [] }; 738d3f3824SCedric van Putten namesOrFlags 748d3f3824SCedric van Putten .map((name) => { 758d3f3824SCedric van Putten if (name.trim().startsWith('-')) { 768d3f3824SCedric van Putten result.flags.push(name); 778d3f3824SCedric van Putten return null; 788d3f3824SCedric van Putten } 798d3f3824SCedric van Putten return (0, npm_package_arg_1.default)(name); 808d3f3824SCedric van Putten }) 818d3f3824SCedric van Putten .forEach((spec) => { 828d3f3824SCedric van Putten // When using a dist-tag version of a library, we need to consider it as "unversioned". 838d3f3824SCedric van Putten // Doing so will install that version with `npm install --save(-dev)`, and resolve the dist-tag properly. 848d3f3824SCedric van Putten if (spec && spec.rawSpec && spec.type !== 'tag') { 858d3f3824SCedric van Putten result.versioned.push(spec); 868d3f3824SCedric van Putten } 878d3f3824SCedric van Putten else if (spec) { 888d3f3824SCedric van Putten result.unversioned.push(spec); 898d3f3824SCedric van Putten } 908d3f3824SCedric van Putten }); 918d3f3824SCedric van Putten return result; 928d3f3824SCedric van Putten } 938d3f3824SCedric van Putten /** 948d3f3824SCedric van Putten * Older npm versions have issues with mismatched nested dependencies when adding exact versions. 958d3f3824SCedric van Putten * This propagates as issues like mismatched `@expo/config-pugins` versions. 968d3f3824SCedric van Putten * As a workaround, we update the `package.json` directly and run `npm install`. 978d3f3824SCedric van Putten */ 988d3f3824SCedric van Putten async updatePackageFileAsync(packageSpecs, packageType) { 998d3f3824SCedric van Putten if (!packageSpecs.length) { 1008d3f3824SCedric van Putten return; 1018d3f3824SCedric van Putten } 1028d3f3824SCedric van Putten const pkgPath = path_1.default.join(this.options.cwd?.toString() || '.', 'package.json'); 1038d3f3824SCedric van Putten const pkg = await json_file_1.default.readAsync(pkgPath); 1048d3f3824SCedric van Putten packageSpecs.forEach((spec) => { 1058d3f3824SCedric van Putten pkg[packageType] = pkg[packageType] || {}; 1068d3f3824SCedric van Putten pkg[packageType][spec.name] = spec.rawSpec; 1078d3f3824SCedric van Putten }); 1088d3f3824SCedric van Putten await json_file_1.default.writeAsync(pkgPath, pkg, { json5: false }); 1098d3f3824SCedric van Putten } 1108d3f3824SCedric van Putten} 1118d3f3824SCedric van Puttenexports.NpmPackageManager = NpmPackageManager; 1128d3f3824SCedric van Putten//# sourceMappingURL=NpmPackageManager.js.map