@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
56 lines (44 loc) • 1.79 kB
text/typescript
import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'
import { SpruceSchemas } from '#spruce/schemas/schemas.types'
import SpruceError from '../../../errors/SpruceError'
import { GlobalEmitter } from '../../../GlobalEmitter'
import AbstractFeature from '../../AbstractFeature'
import { NODE_FILES_TO_UPGRADE } from '../../node/writers/NodeWriter'
type UpgradeOptions = SpruceSchemas.SpruceCli.v2020_07_22.UpgradeSkillOptions
type Feature =
AbstractFeature<SpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema>
export default class Updater {
private feature: Feature
private emitter: GlobalEmitter
public constructor(skill: Feature, emitter: GlobalEmitter) {
this.emitter = emitter
this.feature = skill
}
public async updateFiles(normalizedOptions: UpgradeOptions) {
const skillWriter = this.feature.Writer('skill', {
upgradeMode: normalizedOptions.upgradeMode,
})
const pkgService = this.feature.Service('pkg')
const name = pkgService.get('name')
const description = pkgService.get('description')
const results = await this.emitter.emit(
'skill.will-write-directory-template'
)
const { payloads } = eventResponseUtil.getAllResponsePayloadsAndErrors(
results,
SpruceError
)
const filesToSkip = [...NODE_FILES_TO_UPGRADE, 'package.json']
for (const payload of payloads) {
if (payload.filesToSkip) {
filesToSkip.push(...payload.filesToSkip)
}
}
const generatedFiles = await skillWriter.writeSkill(this.feature.cwd, {
name,
description,
filesToSkip,
})
return generatedFiles
}
}