UNPKG

@naturalcycles/db-lib

Version:

Lowest Common Denominator API to supported Databases

37 lines (36 loc) 1.64 kB
import { j, JsonSchemaAnyBuilder, } from '@naturalcycles/nodejs-lib/ajv'; import { dbQueryFilterOperatorValues, } from '../query/dbQuery.js'; // oxlint-disable typescript/explicit-function-return-type // DBTransaction schema - validates presence without deep validation const dbTransactionSchema = j.object.any().castAs(); // Schema that accepts any value (string, number, boolean, object, array, null) const anyValueSchema = new JsonSchemaAnyBuilder({}); export const commonDBOptionsSchema = () => j.object({ tx: dbTransactionSchema.optional(), }); export const commonDBSaveOptionsSchema = () => j.object({ tx: dbTransactionSchema.optional(), excludeFromIndexes: j.array(j.string().castAs()).optional(), saveMethod: j.enum(['upsert', 'insert', 'update']).optional(), assignGeneratedIds: j.boolean().optional(), }); export const dbQueryFilterOperatorSchema = j.enum(dbQueryFilterOperatorValues); export const dbQueryFilterSchema = () => j.object({ name: j.string().castAs(), op: dbQueryFilterOperatorSchema, val: anyValueSchema, }); export const dbQueryOrderSchema = () => j.object({ name: j.string().castAs(), descending: j.boolean().optional(), }); export const dbQuerySchema = () => j.object.infer({ table: j.string(), _filters: j.array(dbQueryFilterSchema()).optional(), _limitValue: j.number().integer().min(0).optional(), _offsetValue: j.number().integer().min(0).optional(), _orders: j.array(dbQueryOrderSchema()).optional(), _startCursor: j.string().optional(), _endCursor: j.string().optional(), _selectedFieldNames: j.array(j.string().castAs()).optional(), });