@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
74 lines (72 loc) • 3.02 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 AbstractAction_1 = __importDefault(require("../../AbstractAction"));
const pullOptionsSchema = (0, schema_1.buildSchema)({
id: 'pullActionSchema',
description: 'Pulls the event contracts from Mercury down to a single file for easy distribution.',
fields: {
destination: {
type: 'text',
label: 'Destination',
hint: 'File is always named `events.contract.ts`.',
},
},
});
class PullAction extends AbstractAction_1.default {
commandAliases = ['pull.event.contracts'];
optionsSchema = pullOptionsSchema;
invocationMessage = 'Pulling combined event contract... 🜒';
async execute(options) {
let { destination = '.' } = this.validateAndNormalizeOptions(options);
const filename = 'events.contract.ts';
destination = spruce_skill_utils_1.diskUtil.resolvePath(this.cwd, destination, filename);
const { contracts } = await this.Store('event').fetchEventContracts({
namespaces: ['core'],
});
let buildEventContractImport = `import { buildEventContract } from '@sprucelabs/mercury-types'
import '${'#spruce'}/permissions/permissions.types'`;
const contents = `${buildEventContractImport}
const eventContracts = [${contracts
.map((c) => `buildEventContract(${JSON.stringify(c, null, 2)})`)
.join(',\n')}] as const
export default eventContracts
export type CoreEventContract = ${contracts
.map((_, idx) => `typeof eventContracts[${idx}]`)
.join(' & ')}
`;
const action = spruce_skill_utils_1.diskUtil.doesFileExist(destination)
? 'updated'
: 'generated';
spruce_skill_utils_1.diskUtil.writeFile(destination, contents);
const typesFiles = await this.syncPermissions();
return {
files: [
...typesFiles,
{
name: filename,
path: destination,
action,
description: 'All your Mercury core events ready for testing!',
},
],
};
}
async syncPermissions() {
const permissions = this.Store('permission');
const coreMap = await permissions.fetchContracts({
shouldSyncCorePermissions: true,
});
const heartwoodMap = await permissions.fetchContracts({
shouldSyncCorePermissions: true,
});
const typesFiles = await this.Writer('permission').writeTypesFile(this.cwd, { ...coreMap, ...heartwoodMap });
return typesFiles;
}
}
exports.default = PullAction;
//# sourceMappingURL=PullAction.js.map