UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

85 lines 3.83 kB
"use strict"; 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