@naturalcycles/db-lib
Version:
Lowest Common Denominator API to supported Databases
37 lines (36 loc) • 1.64 kB
JavaScript
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(),
});