typescript-mysql-model
Version:
{ "version": "1.2.46", "name": "typescript-mysql-model", "description": "", "main": "index.js", "types": "index.d.ts", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url":
79 lines (77 loc) • 2.62 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const change_case = require("change-case");
const handlebars = require("handlebars");
const LINE = "let query = `CALL ${name}(${questionMarks});`; ";
const template = `/**
* Auto generated, do not modify!
*/
/* tslint:disable */
import * as Knex from "knex";
export default class StoredProcedures {
constructor(private knex:Knex){
}
async callSp(name: string, ...args:any[]):Promise<any>{
let questionMarks = args.map(() => "?").join(", ");
${LINE}
let resp = await this.knex.raw(query,args);
return resp[0][0];
}
{{#each strFunctions}}{{{this}}}{{/each}}
}
`;
const fnTemplate = `
async {{{fnName}}}({{{typeNameList}}}):Promise<any>{
return await this.callSp("{{{name}}}"{{{commaSepParamNames}}});
}
`;
class SpBuilder {
constructor(procedures, types) {
this.procedures = procedures;
this.types = types;
this.compiledTemplate = handlebars.compile(template);
this.compiledFunctionTemplate = handlebars.compile(fnTemplate);
}
renderTemplate() {
const strFunctions = [];
for (const key in this.procedures) {
strFunctions.push(this.renderFunction(this.procedures[key]));
}
const input = { strFunctions: strFunctions };
const output = this.compiledTemplate(input);
return output;
}
getMySqlType(param) {
return this.types[param.dataType];
}
toTsParamNotation(param) {
return param.parameterName + ": " + this.getMySqlType(param);
}
renderFunction(procedure) {
let params = [];
for (const key in procedure.parameters) {
params.push(procedure.parameters[key]);
}
params = params.filter(p => p.parameterMode === "IN");
params.sort((a, b) => {
return a.ordinalPosition - b.ordinalPosition;
});
let commaSepParamNames = params.map(p => p.parameterName).join(", ");
if (params.length === 0) {
commaSepParamNames = "";
}
else {
commaSepParamNames = ", " + commaSepParamNames;
}
const typeNameList = params.map(p => this.toTsParamNotation(p)).join(", ");
const input = {
commaSepParamNames: commaSepParamNames,
fnName: change_case.camelCase(procedure.name),
name: procedure.name,
typeNameList: typeNameList
};
return this.compiledFunctionTemplate(input);
}
}
exports.default = SpBuilder;
//# sourceMappingURL=sp-builder.js.map