UNPKG

kysely-mapper

Version:

Flexible Kysely-based utility for mapping between tables and objects

153 lines 8.56 kB
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _AbstractTableMapper_baseDeleteQB, _AbstractTableMapper_baseInsertQB, _AbstractTableMapper_baseSelectQB, _AbstractTableMapper_baseUpdateQB; import { QueryParameterMaker } from 'kysely-params'; import { applyQueryFilter } from '../lib/apply-query-filter.js'; import { MappingDeleteQuery } from '../queries/delete-query.js'; import { MappingSelectQuery } from '../queries/select-query.js'; import { AnyColumnsMappingInsertQuery } from '../queries/any-insert-query.js'; import { AnyColumnsMappingUpdateQuery } from '../queries/any-update-query.js'; /** * Abstract base class for table mappers. It is abstract because it does not * provide a way to specify query input and output transforms. Custom table * mappers should extend this class with means for providing transforms. * @typeParam DB Interface whose fields are table names defining tables. * @typeParam TB Name of the table. * @typeParam KeyColumns Tuple of the names of the table's key columns. * Defaults to `[]`, indicating no key columns. Supports up to 4 columns. * @typeParam SelectedColumns Columns to return from selection queries. * Defaults to `['*']`, returning all columns. May specify aliases. * @typeParam SelectedObject Type of objects returned by select queries. * @typeParam InsertedObject Type of objects inserted into the table. * @typeParam UpdatingObject Type of objects used to update rows of the table. * @typeParam ReturnCount Type of the count of the number of affected rows. * @typeParam InsertReturnColumns Columns to return from the table on insert * queries that return columns. `['*']` returns all columns; `[]` returns * none. May specify aliases. Defaults to `KeyColumns`. * @typeParam UpdateReturnColumns Columns to return from the table on update * queries that return columns. `['*']` returns all columns; `[]` returns * none and is the default. May specify aliases. * @typeParam InsertReturn Type returned from inserts. Defaults to an object * whose properties are the columns of `InsertReturnColumns`. * @typeParam UpdateReturn Type returned from updates. Defaults to an object * whose properties are the columns of `UpdateReturnColumns`. */ export class AbstractTableMapper { constructor(db, tableNameOrMapper, settings = {}) { var _a, _b, _c, _d; _AbstractTableMapper_baseDeleteQB.set(this, null); _AbstractTableMapper_baseInsertQB.set(this, null); _AbstractTableMapper_baseSelectQB.set(this, null); _AbstractTableMapper_baseUpdateQB.set(this, null); if (tableNameOrMapper instanceof AbstractTableMapper) { Object.assign(this, tableNameOrMapper); } else { this.tableName = tableNameOrMapper; this.settings = settings; this.keyColumns = (_a = settings.keyColumns) !== null && _a !== void 0 ? _a : []; this.selectedColumns = settings.selectedColumns === undefined ? [] : settings.selectedColumns[0] === '*' ? [] : settings.selectedColumns; this.insertReturnColumns = (_c = (_b = settings.insertReturnColumns) !== null && _b !== void 0 ? _b : this.keyColumns) !== null && _c !== void 0 ? _c : []; this.updateReturnColumns = (_d = settings.updateReturnColumns) !== null && _d !== void 0 ? _d : []; this.transforms = {}; } this.db = db; } delete(filterOrLHS, op, rhs) { return new MappingDeleteQuery(this.db, filterOrLHS === undefined ? this.getDeleteQB() : applyQueryFilter(this.db, this.getDeleteQB(), this.keyColumns, filterOrLHS, op, rhs), this.transforms); } /** * Returns a query for inserting rows into the table. * @returns A mapping query for inserting rows. */ insert() { return new AnyColumnsMappingInsertQuery(this.db, this.getInsertQB(), this.transforms, this.insertReturnColumns); } parameterize(factory) { const parameterMaker = new QueryParameterMaker(); return factory({ mapper: this, param: parameterMaker.param.bind(parameterMaker), }).compile(); } /** * Returns a reference to a column, which can be a generated string. * (Shorthand for `db.dynamic.ref(column)`.) * @param column The column name being referenced. * @returns A reference to the given column. */ ref(column) { return this.db.dynamic.ref(column); } select(filterOrLHS, op, rhs) { return new MappingSelectQuery(this.db, filterOrLHS === undefined ? this.getSelectQB() : applyQueryFilter(this.db, this.getSelectQB(), this.keyColumns, filterOrLHS, op, rhs), this.transforms); } update(filterOrLHS, op, rhs) { return new AnyColumnsMappingUpdateQuery(this.db, filterOrLHS === undefined ? this.getUpdateQB() : applyQueryFilter(this.db, this.getUpdateQB(), this.keyColumns, filterOrLHS, op, rhs), this.transforms, this.updateReturnColumns); } /** * Returns a query builder for deleting rows from the table, caching the * query builder for use with future deletions. * @returns A query builder for deleting rows from the table. */ getDeleteQB() { if (__classPrivateFieldGet(this, _AbstractTableMapper_baseDeleteQB, "f") === null) { __classPrivateFieldSet(this, _AbstractTableMapper_baseDeleteQB, this.db.deleteFrom(this.tableName), "f"); } return __classPrivateFieldGet(this, _AbstractTableMapper_baseDeleteQB, "f"); } /** * Returns a query builder for inserting rows into the table, caching the * query builder for use with future insertions. * @returns A query builder for inserting rows into the table. */ getInsertQB() { if (__classPrivateFieldGet(this, _AbstractTableMapper_baseInsertQB, "f") === null) { __classPrivateFieldSet(this, _AbstractTableMapper_baseInsertQB, this.db.insertInto(this.tableName), "f"); } return __classPrivateFieldGet(this, _AbstractTableMapper_baseInsertQB, "f"); } getSelectQB() { if (__classPrivateFieldGet(this, _AbstractTableMapper_baseSelectQB, "f") === null) { const selectQB = this.db.selectFrom(this.tableName); __classPrivateFieldSet(this, _AbstractTableMapper_baseSelectQB, this.selectedColumns.length == 0 ? selectQB.selectAll() : selectQB.select(this.selectedColumns), "f"); } return __classPrivateFieldGet(this, _AbstractTableMapper_baseSelectQB, "f"); } /** * Returns a query builder for updating rows from the table, caching the * query builder for use with future updates. * @returns A query builder for updating rows from the table. */ getUpdateQB() { if (__classPrivateFieldGet(this, _AbstractTableMapper_baseUpdateQB, "f") === null) { __classPrivateFieldSet(this, _AbstractTableMapper_baseUpdateQB, this.db.updateTable(this.tableName), "f"); } return __classPrivateFieldGet(this, _AbstractTableMapper_baseUpdateQB, "f"); } } _AbstractTableMapper_baseDeleteQB = new WeakMap(), _AbstractTableMapper_baseInsertQB = new WeakMap(), _AbstractTableMapper_baseSelectQB = new WeakMap(), _AbstractTableMapper_baseUpdateQB = new WeakMap(); //# sourceMappingURL=abstract-table-mapper.js.map