@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
42 lines (41 loc) • 2.72 kB
TypeScript
import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema';
import { GraphicsInterface } from '../types/cli.types';
import AbstractFeature from './AbstractFeature';
import FeatureInstaller from './FeatureInstaller';
import { FeatureCode, FeatureInstallResponse, FeatureAction, FeatureMap } from './features.types';
export default class ActionQuestionAskerImpl<F extends FeatureCode = FeatureCode> implements ActionQuestionAsker<F> {
private ui;
static Class?: new (options: ActionQuestionAskerOptions) => ActionQuestionAsker<any>;
private featureInstaller;
private actionCode;
private feature;
private shouldAutoHandleDependencies;
protected constructor(options: ActionQuestionAskerOptions);
static Asker(options: ActionQuestionAskerOptions): ActionQuestionAsker<any>;
installOrMarkAsSkippedMissingDependencies(): Promise<FeatureInstallResponse>;
private getDependenciesNotInstalled;
askAboutMissingFeatureOptionsIfFeatureIsNotInstalled(isInstalled: boolean, options?: Record<string, any> & FeatureCommandExecuteOptions<F>): Promise<Record<string, any> & FeatureCommandExecuteOptions<F>>;
askAboutMissingActionOptions<S extends Schema>(action: FeatureAction<S>, options?: Record<string, any> & FeatureCommandExecuteOptions<F>): Promise<SchemaValues<S> | undefined>;
installOurFeature(installOptions: Record<string, any>): Promise<FeatureInstallResponse>;
private renderHeading;
private installOrMarkAsSkippedMissingDependency;
private collectAnswers;
private getCommandName;
private generateConfirmInstallMessage;
}
type FeatureCommandExecuteOptions<F extends FeatureCode, S extends Schema | undefined = FeatureMap[F]['optionsSchema']> = S extends Schema ? SchemaPartialValues<S> : undefined;
interface ActionQuestionAskerOptions {
ui: GraphicsInterface;
featureInstaller: FeatureInstaller;
actionCode: string;
feature: AbstractFeature;
shouldAutoHandleDependencies: boolean;
}
export type QuestionAskerOptionsOptions<F extends FeatureCode> = Record<string, any> & FeatureCommandExecuteOptions<F>;
export interface ActionQuestionAsker<F extends FeatureCode = FeatureCode> {
installOrMarkAsSkippedMissingDependencies(): Promise<FeatureInstallResponse>;
askAboutMissingFeatureOptionsIfFeatureIsNotInstalled(isInstalled: boolean, options?: QuestionAskerOptionsOptions<F>): Promise<Record<string, any> & FeatureCommandExecuteOptions<F>>;
askAboutMissingActionOptions<S extends Schema>(action: FeatureAction<S>, options?: QuestionAskerOptionsOptions<F>): Promise<SchemaValues<S> | undefined>;
installOurFeature(installOptions: Record<string, any>): Promise<FeatureInstallResponse>;
}
export {};