@vulcan-sql/build
Version:
VulcanSQL package for building projects
66 lines • 2.79 kB
JavaScript
;
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