@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
55 lines (54 loc) • 2.28 kB
TypeScript
import { SpruceSchemas } from '@sprucelabs/mercury-types';
import { Schema, SchemaValues } from '@sprucelabs/schema';
import { Templates } from '@sprucelabs/spruce-templates';
import { GlobalEmitter } from '../GlobalEmitter';
import ServiceFactory from '../services/ServiceFactory';
import StoreFactory from '../stores/StoreFactory';
import { ApiClientFactory } from '../types/apiClient.types';
import { GeneratedFile, NpmPackage, InternalUpdateHandler } from '../types/cli.types';
import { GraphicsInterface } from '../types/cli.types';
import WriterFactory from '../writers/WriterFactory';
import AbstractFeature from './AbstractFeature';
import ActionExecuter from './ActionExecuter';
import FeatureInstaller from './FeatureInstaller';
export interface FeatureMap {
}
export interface FeatureOptionsMap {
}
export type InstallFeature<Keys extends keyof FeatureOptionsMap = keyof FeatureOptionsMap> = {
[Key in Keys]: Omit<{
code: Key;
options: FeatureOptionsMap[Key];
}, FeatureOptionsMap[Key] extends Record<string, any> ? never : 'options'>;
}[Keys];
export interface ActionOptions {
templates: Templates;
serviceFactory: ServiceFactory;
cwd: string;
parent: AbstractFeature;
storeFactory: StoreFactory;
featureInstaller: FeatureInstaller;
ui: GraphicsInterface;
writerFactory: WriterFactory;
emitter: GlobalEmitter;
actionExecuter: ActionExecuter;
apiClientFactory: ApiClientFactory;
}
export type FeatureCode = keyof FeatureMap;
export type FeatureExecuteOptions<F extends FeatureCode> = FeatureMap[F]['optionsSchema'] extends Schema ? SchemaValues<FeatureMap[F]['optionsSchema']> : undefined;
export interface InstallFeatureOptions {
features: InstallFeature[];
installFeatureDependencies?: boolean;
didUpdateHandler?: InternalUpdateHandler;
}
export interface FeatureInstallResponse {
files?: GeneratedFile[];
packagesInstalled?: NpmPackage[];
}
export type FeatureActionResponse = SpruceSchemas.SpruceCli.v2020_07_22.ActionResponse & FeatureInstallResponse;
export interface FeatureAction<S extends Schema = Schema> {
optionsSchema?: S;
commandAliases: string[];
invocationMessage: string;
execute: (options: SchemaValues<S>) => Promise<FeatureActionResponse>;
}