UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

110 lines 4.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils"); const nodeFeatureOptions_schema_1 = __importDefault(require("./../../.spruce/schemas/spruceCli/v2020_07_22/nodeFeatureOptions.schema")); const ScriptUpdater_1 = __importDefault(require("../../updaters/ScriptUpdater")); const AbstractFeature_1 = __importDefault(require("../AbstractFeature")); const universalDevDependencies_1 = __importDefault(require("../universalDevDependencies")); const universalFileDescriptions_1 = __importDefault(require("../universalFileDescriptions")); const universalScripts_1 = __importDefault(require("../universalScripts")); class NodeFeature extends AbstractFeature_1.default { code = 'node'; nameReadable = 'nodejs support'; description = ''; dependencies = []; optionsSchema = nodeFeatureOptions_schema_1.default; packageDependencies = [...universalDevDependencies_1.default]; scripts = { ...universalScripts_1.default, }; fileDescriptions = [ ...universalFileDescriptions_1.default, ]; actionsDir = spruce_skill_utils_1.diskUtil.resolvePath(__dirname, 'actions'); constructor(options) { super(options); void this.emitter.on('feature.did-execute', async (payload) => { const { featureCode, actionCode, options } = payload; const shouldUpgrade = featureCode === 'node' && actionCode === 'upgrade' && options?.shouldBuild !== false && this.features.isInSpruceModule(); if (shouldUpgrade) { return this.handleUpgrade(); } return {}; }); } async handleUpgrade() { try { this.ui.clear(); this.ui.renderHero('Upgrade'); this.ui.startLoading('Cleaning build...'); await this.Service('command').execute('yarn clean.build'); const pkg = this.Service('pkg'); const namespace = pkg.getSkillNamespace(); this.ui.startLoading(`Building ${namespace} for development...`); await this.Service('build').build(); return { summaryLines: [ 'Old built files cleared.', 'Lint rules applied to source.', 'Code rebuilt successfully.', ], }; } catch (err) { return { errors: [err], }; } } async beforePackageInstall(options) { const destination = this.resolveDestination(options); if (!spruce_skill_utils_1.diskUtil.doesDirExist(destination)) { spruce_skill_utils_1.diskUtil.createDir(destination); } const files = [ { name: 'package.json', path: spruce_skill_utils_1.diskUtil.resolvePath(destination, 'package.json'), action: 'generated', }, ]; await this.Service('command', destination).execute('yarn init -y'); const written = await this.Writer('node').writeNodeModule(destination); files.push(...written); await this.installScripts(destination); return { files, cwd: destination }; } resolveDestination(options) { return spruce_skill_utils_1.diskUtil.resolvePath(this.cwd, options.destination ?? ''); } async afterPackageInstall(options) { const cwd = this.resolveDestination(options); const pkg = this.Service('pkg', cwd); pkg.set({ path: 'name', value: spruce_skill_utils_1.namesUtil.toKebab(options.name) }); pkg.set({ path: 'description', value: options.description }); pkg.set({ path: 'version', value: '0.0.1' }); pkg.unset('main'); pkg.unset('license'); await this.Store('skill', { cwd, }).setCurrentSkillsNamespace(options.name); return {}; } async installScripts(destination = this.cwd) { const scriptUpdater = ScriptUpdater_1.default.FromFeature(this, { cwd: destination, }); await scriptUpdater.update(); } isInstalled = async () => { return spruce_skill_utils_1.diskUtil.doesFileExist(spruce_skill_utils_1.diskUtil.resolvePath(this.cwd, 'package.json')); }; } exports.default = NodeFeature; //# sourceMappingURL=NodeFeature.js.map