UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

74 lines (72 loc) 3.02 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_skill_utils_1 = require("@sprucelabs/spruce-skill-utils"); const AbstractAction_1 = __importDefault(require("../../AbstractAction")); const pullOptionsSchema = (0, schema_1.buildSchema)({ id: 'pullActionSchema', description: 'Pulls the event contracts from Mercury down to a single file for easy distribution.', fields: { destination: { type: 'text', label: 'Destination', hint: 'File is always named `events.contract.ts`.', }, }, }); class PullAction extends AbstractAction_1.default { commandAliases = ['pull.event.contracts']; optionsSchema = pullOptionsSchema; invocationMessage = 'Pulling combined event contract... 🜒'; async execute(options) { let { destination = '.' } = this.validateAndNormalizeOptions(options); const filename = 'events.contract.ts'; destination = spruce_skill_utils_1.diskUtil.resolvePath(this.cwd, destination, filename); const { contracts } = await this.Store('event').fetchEventContracts({ namespaces: ['core'], }); let buildEventContractImport = `import { buildEventContract } from '@sprucelabs/mercury-types' import '${'#spruce'}/permissions/permissions.types'`; const contents = `${buildEventContractImport} const eventContracts = [${contracts .map((c) => `buildEventContract(${JSON.stringify(c, null, 2)})`) .join(',\n')}] as const export default eventContracts export type CoreEventContract = ${contracts .map((_, idx) => `typeof eventContracts[${idx}]`) .join(' & ')} `; const action = spruce_skill_utils_1.diskUtil.doesFileExist(destination) ? 'updated' : 'generated'; spruce_skill_utils_1.diskUtil.writeFile(destination, contents); const typesFiles = await this.syncPermissions(); return { files: [ ...typesFiles, { name: filename, path: destination, action, description: 'All your Mercury core events ready for testing!', }, ], }; } async syncPermissions() { const permissions = this.Store('permission'); const coreMap = await permissions.fetchContracts({ shouldSyncCorePermissions: true, }); const heartwoodMap = await permissions.fetchContracts({ shouldSyncCorePermissions: true, }); const typesFiles = await this.Writer('permission').writeTypesFile(this.cwd, { ...coreMap, ...heartwoodMap }); return typesFiles; } } exports.default = PullAction; //# sourceMappingURL=PullAction.js.map