UNPKG

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
"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