UNPKG

@vulcan-sql/build

Version:

VulcanSQL package for building projects

66 lines 2.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SchemaParser = void 0; const tslib_1 = require("tslib"); const core_1 = require("@vulcan-sql/core"); const models_1 = require("../../models/index"); const yaml = require("js-yaml"); const compose = require("koa-compose"); const inversify_1 = require("inversify"); const containers_1 = require("../../containers/index"); let SchemaParser = class SchemaParser { constructor(schemaReader, middlewares = []) { this.middleware = []; this.schemaReader = schemaReader; // Load middleware middlewares.forEach(this.use.bind(this)); } parse({ metadata, } = {}) { var e_1, _a; return tslib_1.__awaiter(this, void 0, void 0, function* () { const execute = compose(this.middleware); const schemas = []; try { for (var _b = tslib_1.__asyncValues(this.schemaReader.readSchema()), _c; _c = yield _b.next(), !_c.done;) { const schemaData = _c.value; const schema = yield this.parseContent(schemaData); schema.metadata = metadata === null || metadata === void 0 ? void 0 : metadata[schema.templateSource || schema.sourceName]; // execute middleware yield execute(schema); schemas.push(schema); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b); } finally { if (e_1) throw e_1.error; } } return { schemas }; }); } use(middleware) { this.middleware.push(middleware.handle.bind(middleware)); return this; } parseContent(schemaData) { return tslib_1.__awaiter(this, void 0, void 0, function* () { switch (schemaData.type) { case models_1.SchemaFormat.YAML: return Object.assign({ sourceName: schemaData.sourceName }, yaml.load(schemaData.content)); default: throw new core_1.InternalError(`Unsupported schema type: ${schemaData.type}`); } }); } }; SchemaParser = tslib_1.__decorate([ (0, inversify_1.injectable)(), tslib_1.__param(0, (0, inversify_1.inject)(containers_1.TYPES.SchemaReader)), tslib_1.__param(1, (0, inversify_1.multiInject)(containers_1.TYPES.SchemaParserMiddleware)), tslib_1.__param(1, (0, inversify_1.optional)()), tslib_1.__metadata("design:paramtypes", [models_1.SchemaReader, Array]) ], SchemaParser); exports.SchemaParser = SchemaParser; //# sourceMappingURL=schemaParser.js.map