UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

88 lines 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const schema_1 = require("@sprucelabs/schema"); const spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils"); class VersionResolver { ui; pkg; constructor(ui, pkg) { this.ui = ui; this.pkg = pkg; } static Resolver(ui, pkg) { (0, schema_1.assertOptions)({ ui, pkg }, ['ui', 'pkg']); return new this(ui, pkg); } async resolveVersion(resolvedDestination, userSuppliedVersion) { if (userSuppliedVersion) { spruce_skill_utils_1.versionUtil.assertValidVersion(userSuppliedVersion); } let resolvedVersion = spruce_skill_utils_1.versionUtil.generateVersion(userSuppliedVersion ?? undefined).constValue; if (!userSuppliedVersion) { resolvedVersion = await this.askForVersionIfTodaysVersionDoesNotExist(resolvedDestination, resolvedVersion); } const version = spruce_skill_utils_1.versionUtil.generateVersion(resolvedVersion).dirValue; this.persistVersion(version); return version; } persistVersion(version) { this.pkg.set({ path: 'skill.version', value: version, }); } async askForVersionIfTodaysVersionDoesNotExist(resolvedDestination, fallbackVersion) { const versions = this.loadVersions(resolvedDestination); const choices = this.buildChoices(versions); if (versions.length > 0) { return await this.ui.prompt({ type: 'select', label: 'Version', hint: 'Confirm which version you want to use?', isRequired: true, options: { choices, }, }); } return fallbackVersion; } buildChoices(versions) { const todaysVersion = spruce_skill_utils_1.versionUtil.generateVersion(); const alreadyHasToday = !!versions.find((version) => version.dirValue === todaysVersion.dirValue); const choices = []; if (!alreadyHasToday) { choices.push({ label: 'New Version', value: todaysVersion.dirValue, }); } choices.push(...versions .sort((a, b) => { return a.intValue > b.intValue ? -1 : 1; }) .map((version) => ({ value: version.dirValue, label: version.dirValue, }))); return choices; } loadVersions(resolvedDestination) { const versions = spruce_skill_utils_1.versionUtil.getAllVersions(resolvedDestination); const persistedVersion = this.pkg.get('skill.version'); const todaysVersion = spruce_skill_utils_1.versionUtil.generateVersion().dirValue; if (persistedVersion && todaysVersion !== persistedVersion && !versions.find((v) => v.dirValue === persistedVersion)) { versions.push({ intValue: spruce_skill_utils_1.versionUtil.generateVersion(persistedVersion).intValue, dirValue: persistedVersion, constValue: persistedVersion, }); } return versions; } } exports.default = VersionResolver; //# sourceMappingURL=VersionResolver.js.map