@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
111 lines (99 loc) • 3.52 kB
text/typescript
import { SettingsService } from '@sprucelabs/spruce-skill-utils'
import { Templates } from '@sprucelabs/spruce-templates'
import AgentWriter from '../features/agent/writers/AgentWriter'
import ConversationWriter from '../features/conversation/writers/ConversationWriter'
import DeployWriter from '../features/deploy/writers/DeployWriter'
import ErrorWriter from '../features/error/writers/ErrorWriter'
import EventWriter from '../features/event/writers/EventWriter'
import LogWriter from '../features/log/writers/LogWriter'
import NodeWriter from '../features/node/writers/NodeWriter'
import PermissionWriter from '../features/permission/writers/PermissionWriter'
import PolishWriter from '../features/polish/writers/PolishWriter'
import SandboxWriter from '../features/sandbox/writers/SandboxWriter'
import SchemaWriter from '../features/schema/writers/SchemaWriter'
import SkillGenerator from '../features/skill/writers/SkillWriter'
import StoreWriter from '../features/store/writers/StoreWriter'
import TestWriter from '../features/test/writers/TestWriter'
import ViewWriter from '../features/view/writers/ViewWriter'
import VsCodeWriter from '../features/vscode/writers/VsCodeWriter'
import LintService from '../services/LintService'
import { FileDescription } from '../types/cli.types'
import { GraphicsInterface } from '../types/cli.types'
import { WriterOptions } from './AbstractWriter'
const classMap = {
error: ErrorWriter,
event: EventWriter,
schema: SchemaWriter,
skill: SkillGenerator,
test: TestWriter,
agent: AgentWriter,
node: NodeWriter,
vscode: VsCodeWriter,
conversation: ConversationWriter,
deploy: DeployWriter,
sandbox: SandboxWriter,
store: StoreWriter,
view: ViewWriter,
log: LogWriter,
polish: PolishWriter,
permission: PermissionWriter,
}
export default class WriterFactory {
private templates: Templates
private ui: GraphicsInterface
private linter?: LintService
private settings: SettingsService<string>
private static classMap = classMap
public constructor(options: {
templates: Templates
ui: GraphicsInterface
linter?: LintService
settings: SettingsService
}) {
const { templates, ui, linter, settings } = options
this.templates = templates
this.ui = ui
this.linter = linter
this.settings = settings
}
public static reset() {
this.classMap = classMap
}
public static setWriterClass(code: WriterCode, writer: any) {
this.classMap[code] = writer
}
public Writer<C extends WriterCode>(
code: C,
options: Partial<WriterOptions> & {
fileDescriptions: FileDescription[]
}
): WriterMap[C] {
const Class = WriterFactory.classMap[code]
return new Class({
templates: this.templates,
term: this.ui,
linter: this.linter,
settings: this.settings,
...(options || {}),
}) as WriterMap[C]
}
}
export interface WriterMap {
error: ErrorWriter
event: EventWriter
schema: SchemaWriter
skill: SkillGenerator
test: TestWriter
node: NodeWriter
vscode: VsCodeWriter
conversation: ConversationWriter
deploy: DeployWriter
sandbox: SandboxWriter
store: StoreWriter
view: ViewWriter
log: LogWriter
polish: PolishWriter
permission: PermissionWriter
agent: AgentWriter
}
export type WriterCode = keyof WriterMap