@sqb/builder
Version:
Extensible multi-dialect SQL query builder written with TypeScript
37 lines (36 loc) • 1.19 kB
JavaScript
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 });