UNPKG

@palmares/drizzle-engine

Version:

This is the engine that wraps the hole drizzle interface in a way palmares can understand and have full control of

167 lines (165 loc) 8.28 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc2) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc2 = __getOwnPropDesc(from, key)) || desc2.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/query.ts var query_exports = {}; __export(query_exports, { query: () => query }); module.exports = __toCommonJS(query_exports); var import_databases = require("@palmares/databases"); var import_drizzle_orm = require("drizzle-orm"); var getQuery = (0, import_databases.adapterGetQuery)({ // eslint-disable-next-line ts/require-await queryData: /* @__PURE__ */ __name(async (engine, args) => { const selectArgs = Array.isArray(args.fields) && args.fields.length > 0 ? [ args.fields.reduce((acc, field) => ({ ...acc, [field]: args.modelOfEngineInstance[field] }), {}) ] : []; let query2 = engine.instance.instance.select(...selectArgs).from(args.modelOfEngineInstance); if (args.search) { const searchAsObjectValues = Object.values(args.search); if (searchAsObjectValues.length > 0) query2 = query2.where((0, import_drizzle_orm.and)(...searchAsObjectValues)); } if (typeof args.limit === "number") query2 = query2.limit(args.limit); if (typeof args.offset === "number") query2 = query2.offset(args.offset); if ((args.ordering || []).length > 0) query2 = query2.orderBy(...args.ordering || []); return query2; }, "queryData") }); var setQuery = (0, import_databases.adapterSetQuery)({ queryData: /* @__PURE__ */ __name(async (engine, args) => { const engineInstanceOrTransaction = args.transaction || engine.instance.instance; if (args.search && Object.keys(args.search).length > 0) { if (engine.instance.mainType === "sqlite" || engine.instance.mainType === "postgres") { return (await engineInstanceOrTransaction.update(args.modelOfEngineInstance).set(args.data[0]).where((0, import_drizzle_orm.and)(...Object.values(args.search))).returning() || []).map((data) => [ false, data ]); } else { await engineInstanceOrTransaction.update(args.modelOfEngineInstance).set(args.data[0]).where((0, import_drizzle_orm.and)(...Object.values(args.search))); const search2 = await engineInstanceOrTransaction.select().from(args.modelOfEngineInstance).where((0, import_drizzle_orm.and)(...Object.values(args.search))); return search2.map((each) => [ false, each ]); } } const inserts = await Promise.all(args.data.map(async (eachData) => { if (engine.instance.mainType === "sqlite" || engine.instance.mainType === "postgres") { return [ true, (await engineInstanceOrTransaction.insert(args.modelOfEngineInstance).values(eachData).returning())[0] ]; } const results = await engineInstanceOrTransaction.insert(args.modelOfEngineInstance).values(eachData).$returningId(); const insertedData = results?.[0]; if (!insertedData) return void 0; const primaryKey = Object.keys(insertedData)[0]; const primaryKeyValue = insertedData[primaryKey]; const searchForInsertedData = (0, import_drizzle_orm.eq)(args.modelOfEngineInstance[primaryKey], primaryKeyValue); const searchResult = await engineInstanceOrTransaction.select().from(args.modelOfEngineInstance).where(searchForInsertedData); if ((searchResult?.length || []) <= 0) return void 0; return [ true, searchResult[0] ]; })); return inserts.filter((insert) => Array.isArray(insert)); }, "queryData") }); var removeQuery = (0, import_databases.adapterRemoveQuery)({ queryData: /* @__PURE__ */ __name(async (engine, args) => { const engineInstanceOrTransaction = args.transaction || engine.instance.instance; if (engine.instance.mainType === "sqlite" || engine.instance.mainType === "postgres") return engineInstanceOrTransaction.delete(args.modelOfEngineInstance).where((0, import_drizzle_orm.and)(...Object.values(args.search))).returning(); const dataToBeDeleted = await engine.instance.instance.select().from(args.modelOfEngineInstance).where((0, import_drizzle_orm.and)(...Object.values(args.search))); await engineInstanceOrTransaction.delete(args.modelOfEngineInstance).where((0, import_drizzle_orm.and)(...Object.values(args.search))); return dataToBeDeleted; }, "queryData") }); var order = (0, import_databases.adapterOrderingQuery)({ // eslint-disable-next-line ts/require-await parseOrdering: /* @__PURE__ */ __name(async (model, ordering) => { return ordering.map((order2) => { const isDescending = order2.startsWith("-"); return isDescending ? (0, import_drizzle_orm.desc)(model[order2.slice(1)]) : (0, import_drizzle_orm.asc)(model[order2]); }); }, "parseOrdering") }); var search = (0, import_databases.adapterSearchQuery)({ // eslint-disable-next-line ts/require-await parseSearchFieldValue: /* @__PURE__ */ __name(async (operationType, key, model, value, result, options) => { switch (operationType) { case "like": { if (options?.ignoreCase) result[key] = (0, import_drizzle_orm.ilike)(model[key], value); else if (options?.isNot && options.ignoreCase) result[key] = (0, import_drizzle_orm.notIlike)(model[key], value); else if (options?.isNot) result[key] = (0, import_drizzle_orm.notLike)(model[key], value); else result[key] = (0, import_drizzle_orm.like)(model[key], value); return; } case "is": if (value === null && options?.isNot) { result[key] = (0, import_drizzle_orm.isNotNull)(model[key]); return; } else if (value === null) { result[key] = (0, import_drizzle_orm.isNull)(model[key]); return; } else if (options?.isNot) result[key] = (0, import_drizzle_orm.not)((0, import_drizzle_orm.eq)(model[key], value)); else result[key] = (0, import_drizzle_orm.eq)(model[key], value); return; case "in": if (options?.isNot) result[key] = (0, import_drizzle_orm.notInArray)(model[key], value); else result[key] = (0, import_drizzle_orm.inArray)(model[key], value); return; case "between": if (options?.isNot) result[key] = (0, import_drizzle_orm.notBetween)(model[key], value, value); else result[key] = (0, import_drizzle_orm.between)(model[key], value, value); return; case "and": result[key] = (0, import_drizzle_orm.and)((0, import_drizzle_orm.eq)(model[key], value), (0, import_drizzle_orm.eq)(model[key], value)); return; case "or": result[key] = (0, import_drizzle_orm.or)((0, import_drizzle_orm.eq)(model[key], value), (0, import_drizzle_orm.eq)(model[key], value)); return; case "greaterThan": if (options?.equals) result[key] = (0, import_drizzle_orm.gte)(model[key], value); else result[key] = (0, import_drizzle_orm.gt)(model[key], value); return; case "lessThan": if (options?.equals) result[key] = (0, import_drizzle_orm.lte)(model[key], value); else result[key] = (0, import_drizzle_orm.lt)(model[key], value); return; default: result[key] = (0, import_drizzle_orm.eq)(model[key], value); } }, "parseSearchFieldValue") }); var query = (0, import_databases.adapterQuery)({ search: new search(), ordering: new order(), get: new getQuery(), set: new setQuery(), remove: new removeQuery() }); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { query });