@rstore/nuxt-drizzle
Version:
Rstore + Nuxt + Drizzle
58 lines (57 loc) • 2.11 kB
JavaScript
import { dialect, modelMetas, tables, useDrizzles } from "$rstore-drizzle-server-utils.js";
import * as drizzle from "drizzle-orm";
import { createError } from "h3";
export function getDrizzleTableFromModel(modelName) {
const { table: tableKey, primaryKeys } = modelMetas[modelName];
const table = tables[tableKey];
if (!table) {
throw createError({
statusCode: 404,
statusMessage: `Table ${tableKey} not found for model ${modelName}`
});
}
return {
table,
tableKey,
primaryKeys: primaryKeys ?? ["id"]
};
}
export function getDrizzleCondition(table, condition) {
if (condition == null) {
return void 0;
}
if ("field" in condition) {
if ("value" in condition) {
if (condition.operator !== "arrayContained" && condition.operator !== "arrayContains" && condition.operator !== "arrayOverlaps" && condition.operator !== "inArray" && condition.operator !== "notInArray") {
return drizzle[condition.operator](table[condition.field], condition.value);
} else {
return drizzle[condition.operator](table[condition.field], condition.value);
}
} else if ("value1" in condition) {
return drizzle[condition.operator](table[condition.field], condition.value1, condition.value2);
}
} else if ("condition" in condition) {
return drizzle[condition.operator](getDrizzleCondition(table, condition.condition));
} else if ("conditions" in condition) {
return drizzle[condition.operator](...condition.conditions.map((c) => getDrizzleCondition(table, c)));
}
}
export function getDrizzleDialect() {
return dialect;
}
export function getDrizzleKeyWhere(key, primaryKeys, table) {
const keys = key.split(" + ");
if (primaryKeys.length > 1) {
return drizzle.and(...primaryKeys.map((pk, i) => drizzle.eq(table[pk], keys[i])));
} else if (primaryKeys[0]) {
return drizzle.eq(table[primaryKeys[0]], keys[0]);
} else {
throw createError({
statusCode: 400,
statusMessage: "No key in route parameters"
});
}
}
export function rstoreUseDrizzle() {
return useDrizzles.default();
}