@serafin/pipeline
Version:
CRUD data access library with a functional approach
63 lines (59 loc) • 1.93 kB
text/typescript
import { SchemaBuilder } from "@serafin/schema-builder"
import { IdentityInterface } from "./IdentityInterface"
export interface SchemaBuildersInterface<
M extends IdentityInterface = IdentityInterface,
CV = any,
CO = any,
RQ = any,
PQ = any,
PV = any,
DQ = any,
CM = any,
RM = any,
PM = any,
DM = any,
CTX = any,
> {
model: SchemaBuilder<M>
createValues: SchemaBuilder<CV>
createOptions: SchemaBuilder<CO>
readQuery: SchemaBuilder<RQ>
patchQuery: SchemaBuilder<PQ>
patchValues: SchemaBuilder<PV>
deleteQuery: SchemaBuilder<DQ>
createMeta: SchemaBuilder<CM>
readMeta: SchemaBuilder<RM>
patchMeta: SchemaBuilder<PM>
deleteMeta: SchemaBuilder<DM>
context: SchemaBuilder<CTX>
}
export const schemaBuildersInterfaceKeys = [
"model",
"createValues",
"createOptions",
"readQuery",
"patchQuery",
"patchValues",
"deleteQuery",
"createMeta",
"readMeta",
"patchMeta",
"deleteMeta",
"context",
] as const
export function defaultSchemaBuilders<M extends IdentityInterface>(modelSchemaBuilder: SchemaBuilder<M>) {
return {
model: modelSchemaBuilder,
createValues: modelSchemaBuilder.setOptionalProperties(["id"]),
createOptions: SchemaBuilder.emptySchema(),
readQuery: modelSchemaBuilder.transformPropertiesToArray().toOptionals(),
patchQuery: modelSchemaBuilder.pickProperties(["id"]).transformPropertiesToArray(),
patchValues: modelSchemaBuilder.omitProperties(["id"]).toNullable().toDeepOptionals(),
deleteQuery: modelSchemaBuilder.pickProperties(["id"]).transformPropertiesToArray(),
readMeta: SchemaBuilder.emptySchema(),
createMeta: SchemaBuilder.emptySchema(),
patchMeta: SchemaBuilder.emptySchema(),
deleteMeta: SchemaBuilder.emptySchema(),
context: SchemaBuilder.emptySchema(),
}
}