UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

176 lines (172 loc) 6.41 kB
import { AbstractEventEmitter } from '@sprucelabs/mercury-event-emitter' import { buildEventContract, MercuryEventEmitter, } from '@sprucelabs/mercury-types' import { buildSchema } from '@sprucelabs/schema' import actionResponseSchema from '#spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema' import watcherDidDetectChangesEmitPayloadSchema from '#spruce/schemas/spruceCli/v2020_07_22/watcherDidDetectChangesEmitPayload.schema' export const globalContract = buildEventContract({ eventSignatures: { 'watcher.did-detect-change': { emitPayloadSchema: watcherDidDetectChangesEmitPayloadSchema, }, 'schema.did-fetch-schemas': { emitPayloadSchema: buildSchema({ id: 'didFetchSchemasEmitPayload', fields: { schemas: { type: 'raw', isArray: true, options: { valueType: 'Schema', }, }, }, }), responsePayloadSchema: buildSchema({ id: 'didFetchSchemasResponsePayload', fields: { schemas: { type: 'raw', isArray: true, options: { valueType: 'Schema', }, }, }, }), }, 'skill.register-dashboard-widgets': {}, 'test.register-abstract-test-classes': { responsePayloadSchema: buildSchema({ id: 'registerAbstractTestClassResponsePayload', fields: { abstractClasses: { type: 'schema', isRequired: true, isArray: true, options: { schema: buildSchema({ id: 'abstractClassRegistration', fields: { name: { type: 'text', isRequired: true, }, label: { type: 'text', isRequired: true, }, import: { type: 'text', isRequired: true, }, featureCode: { type: 'text', }, }, }), }, }, }, }), }, 'feature.will-execute': { emitPayloadSchema: buildSchema({ id: 'willExecuteEmitPayload', importsWhenLocal: [ 'import { FeatureActionResponse } from #spruce/../features/features/features.types', ], fields: { featureCode: { type: 'text', isRequired: true, }, actionCode: { type: 'text', isRequired: true, }, options: { type: 'raw', options: { valueType: 'Record<string, any>', }, }, }, }), responsePayloadSchema: actionResponseSchema, }, 'feature.did-execute': { emitPayloadSchema: buildSchema({ id: 'didExecuteEmitPayload', importsWhenLocal: [ 'import { FeatureActionResponse } from #spruce/../features/features/features.types', ], fields: { featureCode: { type: 'text', isRequired: true, }, actionCode: { type: 'text', isRequired: true, }, results: { type: 'raw', isRequired: true, options: { valueType: 'FeatureActionResponse', }, }, options: { type: 'raw', options: { valueType: 'Record<string, any>', }, }, }, }), responsePayloadSchema: buildSchema({ id: 'didExecuteResponsePayload', fields: { ...actionResponseSchema.fields, }, }), }, 'test.reporter-did-boot': { emitPayloadSchema: buildSchema({ id: 'testReporterDidBootEmitPayload', fields: { reporter: { type: 'raw', isRequired: true, options: { valueType: 'TestAction', }, }, }, }), }, 'skill.will-write-directory-template': { responsePayloadSchema: buildSchema({ id: 'wilLWriteDirectoryTemplateResponsePayload', fields: { filesToSkip: { type: 'text', isArray: true, }, }, }), }, }, }) export type GlobalEventContract = typeof globalContract export type GlobalEmitter = MercuryEventEmitter<GlobalEventContract> export default class CliGlobalEmitter extends AbstractEventEmitter<GlobalEventContract> { public static Emitter() { return new CliGlobalEmitter(globalContract, { shouldEmitSequentally: true, }) as GlobalEmitter } }