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