UNPKG

@vulcan-sql/core

Version:
73 lines 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BuildTimeCompilerEnvironment = 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 extension_utils_1 = require("../extension-utils"); const base_1 = require("./base"); /** * Build phase environment is used when we compiling templates. */ let BuildTimeCompilerEnvironment = class BuildTimeCompilerEnvironment extends base_1.BaseCompilerEnvironment { constructor(extensions = [], validatorLoader) { super(); this.extensions = []; this.astVisitors = []; this.metadataProviders = []; // We only need compile time extensions like filterBuilder, tagBuilder ...etc. this.extensions = extensions.filter((extension) => extension instanceof models_1.CompileTimeExtension); this.validatorLoader = validatorLoader; this.loadExtensions(); } getExtensions() { return this.extensions; } traverseAst(ast) { (0, extension_utils_1.walkAst)(ast, this.astVisitors.map((astVisitor) => (node) => { astVisitor.onVisit(node, this); })); // After finished traverse, call finish() function for every single visitor this.astVisitors.forEach((visitor) => { var _a; return (_a = visitor.finish) === null || _a === void 0 ? void 0 : _a.call(visitor); }); } /** Get some metadata from the AST tree, e.g. the errors defined by templates. * It'll help use to validate templates, validate schema ...etc. */ getMetadata() { return (0, extension_utils_1.generateMetadata)(this.metadataProviders); } 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), () => null, // We don't need to implement transform function in compile time false); } } loadExtension(extension) { // Extends if (extension instanceof models_1.TagBuilder) { this.addExtension(extension.getName(), extension); } else if (extension instanceof models_1.FilterBuilder) { this.addFilter(extension.filterName, () => null, // We don't need to implement transform function in compile time true); } // Implement if ((0, extension_utils_1.implementedOnAstVisit)(extension)) { this.astVisitors.push(extension); } if ((0, extension_utils_1.implementedProvideMetadata)(extension)) { this.metadataProviders.push(extension); } } }; BuildTimeCompilerEnvironment = tslib_1.__decorate([ (0, inversify_1.injectable)(), tslib_1.__param(0, (0, inversify_1.multiInject)(types_1.TYPES.Extension_TemplateEngine)), tslib_1.__param(0, (0, inversify_1.optional)()), tslib_1.__param(1, (0, inversify_1.inject)(types_1.TYPES.ValidatorLoader)), tslib_1.__metadata("design:paramtypes", [Array, Object]) ], BuildTimeCompilerEnvironment); exports.BuildTimeCompilerEnvironment = BuildTimeCompilerEnvironment; //# sourceMappingURL=buildTime.js.map