UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

94 lines (82 loc) 2.91 kB
import pathUtil from 'path' import { Schema, SchemaError, SchemaTemplateItem } from '@sprucelabs/schema' import { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils' import schemaGeneratorUtil from './schemaGenerator.utility' const schemaDiskUtil = { resolvePath(options: { destination: string schema: Schema shouldIncludeFileExtension?: boolean }) { const { destination, schema, shouldIncludeFileExtension: includeFileExtension, } = options if (!schema.namespace) { throw new SchemaError({ code: 'MISSING_PARAMETERS', parameters: ['namespace'], }) } return pathUtil.join( destination, namesUtil.toCamel(schema.namespace), schema.version ?? '', `${schema.id}.schema${includeFileExtension === false ? '' : '.ts'}` ) }, resolveTypeFilePaths(options: { cwd: string generateStandaloneTypesFile: boolean schemaTypesDestinationDirOrFile: string fieldTypesDestinationDir: string }) { const { cwd, generateStandaloneTypesFile, schemaTypesDestinationDirOrFile, fieldTypesDestinationDir, } = options const resolvedSchemaTypesDestination = diskUtil.resolvePath( cwd, generateStandaloneTypesFile && diskUtil.isDirPath(schemaTypesDestinationDirOrFile) ? diskUtil.resolvePath( cwd, schemaTypesDestinationDirOrFile, 'core.schemas.types.ts' ) : schemaTypesDestinationDirOrFile ) const resolvedSchemaTypesDestinationDirOrFile = diskUtil.isDirPath( resolvedSchemaTypesDestination ) ? resolvedSchemaTypesDestination : pathUtil.dirname(resolvedSchemaTypesDestination) const resolvedFieldTypesDestination = diskUtil.resolvePath( cwd, fieldTypesDestinationDir ?? resolvedSchemaTypesDestinationDirOrFile ) return { resolvedFieldTypesDestination, resolvedSchemaTypesDestinationDirOrFile, resolvedSchemaTypesDestination, } }, async deleteOrphanedSchemas( resolvedDestination: string, schemaTemplateItems: SchemaTemplateItem[] ) { const definitionsToDelete = await schemaGeneratorUtil.filterSchemaFilesBySchemaIds( resolvedDestination, schemaTemplateItems.map((item) => ({ ...item, version: item.schema.version, })) ) definitionsToDelete.forEach((def) => diskUtil.deleteFile(def)) }, } export default schemaDiskUtil