@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
85 lines • 3.83 kB
JavaScript
;
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_event_utils_1 = require("@sprucelabs/spruce-event-utils");
const spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils");
const namedTemplateItem_schema_1 = __importDefault(require("./../../../.spruce/schemas/spruceCli/v2020_07_22/namedTemplateItem.schema"));
const syncEventOptions_schema_1 = __importDefault(require("./../../../.spruce/schemas/spruceCli/v2020_07_22/syncEventOptions.schema"));
const SpruceError_1 = __importDefault(require("../../../errors/SpruceError"));
const action_utility_1 = __importDefault(require("../../../utilities/action.utility"));
const AbstractAction_1 = __importDefault(require("../../AbstractAction"));
const optionsSchema = (0, schema_1.buildSchema)({
id: 'createEventAction',
description: "Create a new event and I'll register it with Mercury when you boot the skill!",
fields: {
nameReadable: {
...namedTemplateItem_schema_1.default.fields.nameReadable,
isRequired: true,
},
nameKebab: {
...namedTemplateItem_schema_1.default.fields.nameKebab,
label: 'Event name',
hint: `kebab-case`,
isRequired: true,
},
nameCamel: {
...namedTemplateItem_schema_1.default.fields.nameCamel,
isRequired: true,
},
isGlobal: {
type: 'boolean',
label: 'Is this a global event?',
hint: "This will allow skills to listen without being installed at the same organization. You'll need permission to make this happen.",
},
version: {
type: 'text',
label: 'Version',
isPrivate: true,
},
...syncEventOptions_schema_1.default.fields,
},
});
class CreateAction extends AbstractAction_1.default {
optionsSchema = optionsSchema;
invocationMessage = 'Creating a new event signature... 🜒';
async execute(options) {
let { nameKebab, nameReadable, nameCamel, version, isGlobal } = this.validateAndNormalizeOptions(options);
const skill = await this.Store('skill').loadCurrentSkill();
if (!skill.id || !skill.slug) {
return {
errors: [new SpruceError_1.default({ code: 'SKILL_NOT_REGISTERED' })],
};
}
try {
const destinationDir = spruce_skill_utils_1.diskUtil.resolvePath(this.cwd, 'src', 'events');
const resolvedVersion = await this.resolveVersion(version, spruce_skill_utils_1.diskUtil.resolvePath(destinationDir, '**', '*'));
const files = await this.Writer('event').writeEvent(destinationDir, {
nameKebab,
nameCamel,
version: resolvedVersion,
nameReadable,
isGlobal,
});
const syncOptions = (0, schema_1.normalizeSchemaValues)(syncEventOptions_schema_1.default, options, {
shouldIncludePrivateFields: true,
});
const syncResponse = await this.Action('event', 'sync').execute(syncOptions);
const fqen = spruce_event_utils_1.eventNameUtil.join({
eventName: nameKebab,
eventNamespace: skill.slug,
version: resolvedVersion,
});
return action_utility_1.default.mergeActionResults({ files, meta: { fqen } }, syncResponse);
}
catch (err) {
return {
errors: [err],
};
}
}
}
exports.default = CreateAction;
//# sourceMappingURL=CreateAction.js.map