UNPKG

@getanthill/datastore

Version:

Event-Sourced Datastore

186 lines 6.98 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.graph = exports.models = exports.upsertModel = void 0; const assert_1 = require("assert"); const fs_1 = __importDefault(require("fs")); const commander_1 = require("commander"); const utils = __importStar(require("./utils")); const js_yaml_1 = __importDefault(require("js-yaml")); function upsertModel(services) { return async (modelPath, cmd) => { try { const datastore = services.datastores.get(cmd.datastore); if (!datastore) { return; } let modelConfigs = null; if (cmd.yaml === true) { modelConfigs = js_yaml_1.default.load(fs_1.default.readFileSync(modelPath, 'utf8')); } else { modelConfigs = require(modelPath); if ('default' in modelConfigs) { // @ts-ignore modelConfigs = modelConfigs.default; } } (0, assert_1.ok)(modelConfigs !== null, 'Invalid model configuration'); (0, assert_1.ok)(cmd.multi !== true || cmd.name === undefined, 'Model name can not be used in conjunction of --multi'); (0, assert_1.ok)(cmd.multi !== true || cmd.description === undefined, 'Model description can not be used in conjunction of --multi'); const models = []; if (cmd.multi === false) { models.push(modelConfigs); } else if (Array.isArray(modelConfigs)) { models.push(...modelConfigs); } else { models.push(...Object.values(modelConfigs)); } for (const modelConfig of models) { if (cmd.name) { modelConfig.name = cmd.name; modelConfig?.indexes?.forEach((index) => { index.collection = cmd.name; }); } if (cmd.description) { modelConfig.description = cmd.description; } let model; try { const { data } = await datastore.createModel(modelConfig); model = data; } catch (err) { if (err.response && err.response.status === 409) { const { data } = await datastore.updateModel(modelConfig); model = data; } else { throw err; } } utils.log(model, cmd.format); if (cmd.withIndexes !== true) { continue; } const { data: indexes } = await datastore.createModelIndexes(modelConfig); utils.log(indexes, cmd.format); } } catch (err) { if (err.response) { utils.log(err.response.data, cmd.format); return; } utils.log(err, cmd.format); } }; } exports.upsertModel = upsertModel; function models(services) { return async (cmd) => { try { const datastore = services.datastores.get(cmd.datastore); if (!datastore) { return; } const { data } = await datastore.getModels(); utils.log(Object.keys(data), cmd.format); } catch (err) { if (err.response) { utils.log(err.response.data, cmd.format); return; } utils.log(err, cmd.format); } }; } exports.models = models; function graph(services) { return async (cmd) => { try { const datastore = services.datastores.get(cmd.datastore); if (!datastore) { return; } const { data } = await datastore.getGraph(); utils.log(data, cmd.format); } catch (err) { if (err.response) { utils.log(err.response.data, cmd.format); return; } utils.log(err, cmd.format); } }; } exports.graph = graph; function register(services, name = 'admin') { const program = new commander_1.Command(name); program.summary('Administration commands'); // Upsert let c = program.command('upsert <model_path>'); utils.addDatastoreOptions(c, services); c.option('--name <name>', 'Model name') .option('--description <description>', 'Model description') .option('--with-indexes', 'Update indexes', false) .option('--yaml', 'Is model in YAML format', false) .option('--multi', 'Do we import multiple models at once', false) .addOption(new commander_1.Option('--format <format>', 'Response format').choices([ 'json', 'yaml', ])) .description('Admin create or update a model') .action(upsertModel(services)); // Models c = program.command('models'); utils.addDatastoreOptions(c, services); c.addOption(new commander_1.Option('--format <format>', 'Response format').choices([ 'json', 'yaml', ])) .description('Get models available in the Datastore') .action(models(services)); // Graph c = program.command('graph'); utils.addDatastoreOptions(c, services); c.addOption(new commander_1.Option('--format <format>', 'Response format').choices([ 'json', 'yaml', ])) .description('Get the entities dependency graph') .action(graph(services)); return program; } exports.default = register; //# sourceMappingURL=admin.js.map