@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
JavaScript
;
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
});