@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
81 lines • 4.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const schema_1 = require("@sprucelabs/schema");
const spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils");
const spruce_skill_utils_2 = require("@sprucelabs/spruce-skill-utils");
const syncErrorOptions_schema_1 = __importDefault(require("./../../../.spruce/schemas/spruceCli/v2020_07_22/syncErrorOptions.schema"));
const syncSchemasOptions_schema_1 = __importDefault(require("./../../../.spruce/schemas/spruceCli/v2020_07_22/syncSchemasOptions.schema"));
const AbstractAction_1 = __importDefault(require("../../AbstractAction"));
class SyncAction extends AbstractAction_1.default {
optionsSchema = syncErrorOptions_schema_1.default;
commandAliases = ['sync.errors'];
invocationMessage = 'Generating error types... 🤾♀️';
async execute(options) {
const normalizedOptions = this.validateAndNormalizeOptions(options);
const { errorTypesDestinationDir, errorClassDestinationDir } = normalizedOptions;
const schemaSyncAction = this.Action('schema', 'sync');
const errorSyncResults = await this.syncErrors(schemaSyncAction, normalizedOptions);
if (errorSyncResults.errors) {
return errorSyncResults;
}
if (this.areSyncResultsEmpty(errorSyncResults)) {
this.deleteOrphanedDirs(errorTypesDestinationDir);
return {};
}
const { schemaTemplateItems } = errorSyncResults.meta;
const errorTemplateItems = schemaTemplateItems.map((item) => ({
...item,
code: spruce_skill_utils_1.namesUtil.toConst(item.namePascal),
}));
const errorWriter = this.Writer('error');
const optionsResults = await this.generateOptionTypes(errorWriter, errorTemplateItems, errorTypesDestinationDir);
const errorClassGeneratedFiles = await errorWriter.writeOrAppendErrorsToClass(spruce_skill_utils_2.diskUtil.resolvePath(this.cwd, errorClassDestinationDir), errorTemplateItems);
return {
files: [
...(errorSyncResults.files ?? []),
...errorClassGeneratedFiles,
...optionsResults,
],
};
}
deleteOrphanedDirs(errorTypesDestinationDir) {
spruce_skill_utils_2.diskUtil.deleteDir(spruce_skill_utils_2.diskUtil.resolvePath(this.cwd, errorTypesDestinationDir));
}
async syncErrors(schemaSyncAction, normalizedOptions) {
const resolvedErrorTypesDestinationDir = spruce_skill_utils_2.diskUtil.resolvePath(this.cwd, normalizedOptions.errorTypesDestinationDir, 'errors.types.ts');
const syncOptions = (0, schema_1.normalizeSchemaValues)(syncSchemasOptions_schema_1.default, {
...normalizedOptions,
schemaTypesDestinationDirOrFile: resolvedErrorTypesDestinationDir,
schemaLookupDir: normalizedOptions.errorLookupDir,
shouldEnableVersioning: false,
globalSchemaNamespace: 'SpruceErrors',
shouldFetchRemoteSchemas: false,
generateFieldTypes: true,
generateStandaloneTypesFile: true,
deleteDestinationDirIfNoSchemas: true,
shouldFetchCoreSchemas: false,
syncingMessage: 'Syncing errors...',
});
const errorSyncResults = await schemaSyncAction.execute(syncOptions);
return errorSyncResults;
}
areSyncResultsEmpty(errorSyncResults) {
return (!errorSyncResults.meta ||
!errorSyncResults.files ||
errorSyncResults.files.length === 0);
}
async generateOptionTypes(errorGenerator, errorTemplateItems, errorTypesDestinationDir) {
if (errorTemplateItems.length === 0) {
return [];
}
const resolvedTypesDestination = spruce_skill_utils_2.diskUtil.resolvePath(this.cwd, errorTypesDestinationDir);
const topLevelItems = errorTemplateItems.filter((i) => !i.isNested);
const optionsResults = await errorGenerator.writeOptionsTypesFile(resolvedTypesDestination, topLevelItems);
return optionsResults;
}
}
exports.default = SyncAction;
//# sourceMappingURL=SyncAction.js.map