UNPKG

@sqb/builder

Version:

Extensible multi-dialect SQL query builder written with TypeScript

37 lines (36 loc) 1.19 kB
import { EventEmitter } from 'events'; import flattenText from 'putil-flattentext'; import merge from 'putil-merge'; import { Serializable } from '../serializable.js'; import { SerializeContext } from '../serialize-context.js'; export class Query extends Serializable { _params; constructor() { super(); EventEmitter.call(this); } /** * Generates Sql script */ generate(options) { const ctx = new SerializeContext(options); if (this._params) ctx.params = { ...ctx.params, ...this._params }; ctx.serializeHooks = this.listeners('serialize'); /* generate output */ const sql = this._serialize(ctx); return { sql: flattenText(sql, { noWrap: !ctx.prettyPrint }), params: ctx.preparedParams, paramOptions: ctx.paramOptions, returningFields: ctx.returningFields, }; } values(obj) { if (typeof obj !== 'object' || Array.isArray(obj)) throw new TypeError('Invalid argument'); this._params = obj; return this; } } merge(Query.prototype, EventEmitter.prototype, { descriptor: true });