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