UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

114 lines 5.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const schema_1 = require("@sprucelabs/schema"); const spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils"); const lodash_1 = require("lodash"); const InFlightEntertainment_1 = __importDefault(require("../../../InFlightEntertainment")); const AbstractAction_1 = __importDefault(require("../../AbstractAction")); const optionsSchema = (0, schema_1.buildSchema)({ id: 'updateDependenciesAction', description: 'Clear lock files and node_modules and then reinstalls all modules.', fields: {}, }); class UpdateDependenciesAction extends AbstractAction_1.default { code = 'updateDependencies'; optionsSchema = optionsSchema; commandAliases = ['update.dependencies', 'upgrade.dependencies']; invocationMessage = 'Updating dependencies... 💪'; async execute(_options) { const files = ['package-lock.json', 'yarn.lock', 'node_modules']; for (const file of files) { spruce_skill_utils_1.diskUtil.deleteFile(spruce_skill_utils_1.diskUtil.resolvePath(this.cwd, file)); } try { InFlightEntertainment_1.default.start(['Here we go!', 'Good luck!']); const { totalDependencies, totalDevDependencies } = await this.installDependencies(); return { headline: 'Update Complete!', summaryLines: [ `${totalDependencies} dependencie${totalDependencies === 1 ? '' : 's'} updated! 💪`, `${totalDevDependencies} dev dependencie${totalDevDependencies === 1 ? '' : 's'} updated! 💪`, ], }; } finally { InFlightEntertainment_1.default.stop(); } } async installDependencies() { const features = this.features.isInSpruceModule() ? await this.features.getInstalledFeatures() : []; const pkg = this.Service('pkg'); pkg.unset(['dependencies', '@sprucelabs/resolve-path-aliases']); const pkgContents = pkg.readPackage(); let dependencies = Object.keys(pkgContents.dependencies ?? {}).map((d) => ({ stripped: d, name: d, })) ?? []; let devDependencies = Object.keys(pkgContents.devDependencies ?? {}).map((d) => ({ stripped: d, name: d, })) ?? []; for (const feature of features) { for (const dep of feature.packageDependencies) { const stripped = pkg.stripLatest(dep.name); const name = pkg.buildPackageName(dep); const isDev = (dep.isDev || devDependencies.find((d) => d.stripped === stripped)) && !dependencies.find((d) => d.stripped === stripped); if (isDev) { devDependencies.unshift({ stripped, name, }); } else { dependencies.unshift({ stripped, name, }); } } } dependencies = (0, lodash_1.uniqBy)(dependencies, 'stripped').filter((d) => !this.isBlockedFromUpgrade(d.stripped, pkg)); devDependencies = (0, lodash_1.uniqBy)(devDependencies, 'stripped').filter((d) => !this.isBlockedFromUpgrade(d.stripped, pkg)); pkg.deleteLockFile(); const namespace = pkg.getSkillNamespace(); if (dependencies.length > 0) { InFlightEntertainment_1.default.writeStatus(`Installing ${dependencies.length} dependenc${dependencies.length === 1 ? 'y' : 'ies'} for ${namespace}.`); await pkg.install(dependencies.map((d) => d.name), { shouldForceInstall: true, shouldCleanupLockFiles: false, }); } if (devDependencies.length > 0) { InFlightEntertainment_1.default.writeStatus(`Installing ${devDependencies.length} dev dependenc${dependencies.length === 1 ? 'y' : 'ies'} for ${namespace}.`); await pkg.install(devDependencies.map((d) => d.name), { shouldForceInstall: true, isDev: true, shouldCleanupLockFiles: false, }); } pkg.deleteLockFile(); return { totalDependencies: dependencies.length, totalDevDependencies: devDependencies.length, }; } blockUpgrade(name, pkg) { const content = pkg.get('skill.upgradeIgnoreList') ?? []; content.push(name); pkg.set({ path: 'skill.upgradeIgnoreList', value: content }); } isBlockedFromUpgrade(name, pkg) { const content = pkg.get('skill.upgradeIgnoreList') ?? []; const isBlocked = content.indexOf(name) > -1; return isBlocked; } } exports.default = UpdateDependenciesAction; //# sourceMappingURL=UpdateDependenciesAction.js.map