UNPKG

@vulcan-sql/build

Version:

VulcanSQL package for building projects

55 lines 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResponseSampler = void 0; const tslib_1 = require("tslib"); const inversify_1 = require("inversify"); const middleware_1 = require("./middleware"); const core_1 = require("@vulcan-sql/core"); const lodash_1 = require("lodash"); let ResponseSampler = class ResponseSampler extends middleware_1.SchemaParserMiddleware { constructor(templateEngine) { super(); this.templateEngine = templateEngine; } handle(rawSchema, next) { var _a; return tslib_1.__awaiter(this, void 0, void 0, function* () { yield next(); const schema = rawSchema; if (!schema.sample) return; if (!schema.sample.profile) { throw new core_1.ConfigurationError(`Schema ${schema.urlPath} misses the required property: sample.profile`); } const response = yield this.templateEngine.execute(schema.templateSource, { parameters: schema.sample.parameters, profileName: schema.sample.profile, req: (_a = schema.sample) === null || _a === void 0 ? void 0 : _a.req, }, // We only need the columns of this query, so we set offset=0 and limit=1 here. // Some drivers guess the column types by data, so we should at least query 1 rows. { limit: 1, offset: 0, }); const columns = response.getColumns(); const responseColumns = this.normalizeResponseColumns(columns); schema.response = this.mergeResponse(schema.response || [], responseColumns); }); } normalizeResponseColumns(columns) { return columns.map((column) => ({ name: column.name, type: column.type.toUpperCase(), })); } mergeResponse(source, target) { return (0, lodash_1.unionBy)(source, target, (response) => response.name); } }; ResponseSampler = tslib_1.__decorate([ tslib_1.__param(0, (0, inversify_1.inject)(core_1.TYPES.TemplateEngine)), tslib_1.__metadata("design:paramtypes", [core_1.TemplateEngine]) ], ResponseSampler); exports.ResponseSampler = ResponseSampler; //# sourceMappingURL=responseSampler.js.map