UNPKG

@stencila/jesta

Version:

Stencila plugin for executable documents using JavaScript

109 lines (108 loc) 4.84 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.dispatch = void 0; const ajv_1 = __importDefault(require("ajv")); const ajv_formats_1 = __importDefault(require("ajv-formats")); const types_1 = require("./types"); const errors_1 = require("./util/errors"); const validators = ajv_formats_1.default(new ajv_1.default({ strict: false })); function dispatch(method, params) { var _a; // Check this is a known method if (types_1.Method[method] === undefined) throw new errors_1.MethodNotFoundError(method); // Get the validation function for the method let validator = validators.getSchema(method); if (validator === undefined) { // @ts-expect-error because indexing `Jesta` // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const { schema } = this[method]; if (schema !== undefined) { validator = validators.addSchema(schema, method).getSchema(method); } } // Validate the supplied parameter against the method's schema (if any) if (validator) { if (validator(params) !== true) { const errors = (_a = validator.errors) !== null && _a !== void 0 ? _a : []; let messages = []; for (const error of errors) { // Convert error message into something that is more easily digestible // by humans const { instancePath, message, params } = error; if (instancePath !== '' && message !== undefined) { messages = [ ...messages, `Parameter '${instancePath.slice(1)}' is invalid: ${message}.`, ]; } else if (params.missingProperty !== undefined) { messages = [ ...messages, `Parameter '${params.missingProperty}' is required.`, ]; } else { messages = [...messages, `Parameters are invalid`]; } } throw new errors_1.InvalidParamError(messages.join(' '), errors); } } // Dispatch to the method switch (method) { // case Method.build: // return this.build(params.node as Node, params.force as boolean) case types_1.Method.call: return this.call(params.name, params.args); case types_1.Method.clean: return this.clean(params.node); case types_1.Method.compile: return this.compile(params.node, params.force); case types_1.Method.convert: return this.convert(params.input, params.output, params.from, params.to, params.cache, params.upcast, params.downcast, params.validate); case types_1.Method.decode: return this.decode(params.content, params.format); case types_1.Method.delete: return this.delete(params.name); case types_1.Method.downcast: return this.downcast(params.node); case types_1.Method.encode: return this.encode(params.node, params.format); case types_1.Method.enrich: return this.enrich(params.node, params.force); case types_1.Method.execute: return this.execute(params.node, params.force); case types_1.Method.export: return this.export(params.node, params.output, params.format, params.downcast, params.validate); case types_1.Method.funcs: return this.funcs(); case types_1.Method.get: return this.get(params.name); case types_1.Method.import: return this.import(params.input, params.format, params.cache, params.upcast, params.validate); case types_1.Method.pipe: return this.pipe(params.node, params.calls); case types_1.Method.pull: return this.pull(params.input, params.output); case types_1.Method.read: return this.read(params.input, params.cache); case types_1.Method.select: return this.select(params.node, params.query, params.lang); case types_1.Method.set: return this.set(params.name, params.value); case types_1.Method.upcast: return this.upcast(params.node); case types_1.Method.validate: return this.validate(params.node, params.force); case types_1.Method.vars: return this.vars(); case types_1.Method.write: return this.write(params.content, params.output); } return Promise.resolve(undefined); } exports.dispatch = dispatch;