UNPKG

@rstore/nuxt-drizzle

Version:
58 lines (57 loc) 2.11 kB
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(); }