@vulcan-sql/core
Version:
Core package of VulcanSQL
64 lines • 2.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RuntimeCompilerEnvironment = void 0;
const tslib_1 = require("tslib");
const models_1 = require("../../../models/index");
const types_1 = require("../../../containers/types");
const inversify_1 = require("inversify");
const lodash_1 = require("lodash");
const errors_1 = require("../../utils/errors");
const extension_utils_1 = require("../extension-utils");
const base_1 = require("./base");
/**
* Runtime environment is used when we executing templates.
*/
let RuntimeCompilerEnvironment = class RuntimeCompilerEnvironment extends base_1.BaseCompilerEnvironment {
constructor(compilerLoader, extensions = [], validatorLoader) {
super(compilerLoader);
this.extensions = [];
// We only need runtime extensions like filterRunner, tagRunner ...etc.
this.extensions = extensions.filter((extension) => extension instanceof models_1.RuntimeExtension);
this.validatorLoader = validatorLoader;
this.loadExtensions();
}
getExtensions() {
return this.extensions;
}
loadExtensions() {
this.extensions.forEach(this.loadExtension.bind(this));
// Validator filters
for (const validator of this.validatorLoader.getValidators()) {
this.addFilter((0, extension_utils_1.getValidationFilterName)(validator), (value, rawArgs) => {
const args = (0, lodash_1.omit)(rawArgs, '__keywords'); // Remove the additional property from template engine.
try {
validator.validateSchema(args);
}
catch (e) {
throw new errors_1.InternalError(`Validation filter ${validator.getExtensionId()} has invalid argument`, { nestedError: e });
}
validator.validateData(value, args);
return value;
}, false);
}
}
loadExtension(extension) {
if (extension instanceof models_1.TagRunner) {
this.addExtension(extension.getName(), extension);
}
else if (extension instanceof models_1.FilterRunner) {
this.addFilter(extension.filterName, function (value, ...args) {
// use classic function to receive context
extension.__transform(this, value, ...args);
}, true);
}
}
};
RuntimeCompilerEnvironment = tslib_1.__decorate([
tslib_1.__param(0, (0, inversify_1.inject)(types_1.TYPES.CompilerLoader)),
tslib_1.__param(1, (0, inversify_1.multiInject)(types_1.TYPES.Extension_TemplateEngine)),
tslib_1.__param(1, (0, inversify_1.optional)()),
tslib_1.__param(2, (0, inversify_1.inject)(types_1.TYPES.ValidatorLoader)),
tslib_1.__metadata("design:paramtypes", [models_1.CodeLoader, Array, Object])
], RuntimeCompilerEnvironment);
exports.RuntimeCompilerEnvironment = RuntimeCompilerEnvironment;
//# sourceMappingURL=runtime.js.map