@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
110 lines • 4.6 kB
JavaScript
"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