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":
70 lines (66 loc) • 2.56 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const change_case = require("change-case");
const handlebars = require("handlebars");
const TEMPLATE = `/**
* Autogenerated, do not modify
*/
/* tslint:disable */
import Knex = require("knex");
import { IDatabaseSchema } from "typescript-mysql-model/lib/mysql-database-definition";
import { SchemaOperator } from "typescript-mysql-model";
{{#each imports}}{{{this}}}
{{/each}}
export default class Updater extends SchemaOperator {
public constructor(private knex: Knex, definition: IDatabaseSchema) {
super();
this.definition = definition;
}
protected async runQuery(q: Knex.QueryBuilder) {
await q;
}
protected async update<T extends { [key: string]: any }>(tableName: string,
data: T, fn?: (knex: Knex.QueryBuilder) => Knex.QueryBuilder): Promise<T> {
const criterions: { [key: string]: any } = this.retainPrimaryKeys(tableName, data);
data = this.removePrimaryKeys(tableName, data);
if (Object.keys(data).length > 0) {
let query = this.knex(tableName).where(criterions).update(data);
if (fn) {
query = fn(query);
}
await this.runQuery(query);
}
return data;
}
{{#each updaters}}{{{this}}}{{/each}}
}`;
const UPDATE_TEMPLATE = `
public update{{fnName}}(item: {{prefixedClassName}}, fn?: (knex: Knex.QueryBuilder) => Knex.QueryBuilder): Promise<{{prefixedClassName}}> {
return this.update("{{tableName}}", item, fn);
}
`;
class UpdateBuilder {
constructor() {
this.compiledTemplate = handlebars.compile(TEMPLATE);
this.compiledUpdateTemplate = handlebars.compile(UPDATE_TEMPLATE);
}
renderUpdater(tables, relativePath = "./") {
tables = JSON.parse(JSON.stringify(tables));
tables.forEach(t => {
t.fnName = change_case.upperCaseFirst(t.fnName);
t.fnPlural = change_case.upperCaseFirst(t.fnPlural);
});
const input = {
updaters: tables.map(t => this.compiledUpdateTemplate(t)),
imports: tables.map(t => this.renderImportRow(t, relativePath))
};
return this.compiledTemplate(input);
}
renderImportRow(table, relativePath) {
table = JSON.parse(JSON.stringify(table));
table.filename = table.filename.replace(".ts", "");
return `import {${table.prefixedClassName}} from "${relativePath}${table.filename}"`;
}
}
exports.UpdateBuilder = UpdateBuilder;
//# sourceMappingURL=update-builder.js.map