@serafin/pipeline
Version:
CRUD data access library with a functional approach
321 lines (305 loc) • 7.63 kB
text/typescript
import { PipelineAbstract } from "./PipelineAbstract"
import * as _ from "lodash"
import { IdentityInterface } from "./IdentityInterface"
import { SchemaBuildersInterface } from "./SchemaBuildersInterface"
import { ResultsInterface } from "./ResultsInterface"
import { PipelineInterface } from "./PipelineInterface"
export interface PipePropsInterface<
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,
> extends SchemaBuildersInterface<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX> {}
export type PipeCreateNext<M extends IdentityInterface = IdentityInterface, CV = any, CO = any, CM = any, CTX = any> = (
resources: CV[],
options: CO,
context: CTX,
) => Promise<ResultsInterface<M, CM>>
export type PipeReadNext<M extends IdentityInterface = IdentityInterface, RQ = any, RM = any, CTX = any> = (
query: RQ,
context: CTX,
) => Promise<ResultsInterface<M, RM>>
export type PipePatchNext<M extends IdentityInterface = IdentityInterface, PQ = any, PV = any, PM = any, CTX = any> = (
query: PQ,
values: PV,
context: CTX,
) => Promise<ResultsInterface<M, PM>>
export type PipeDeleteNext<M extends IdentityInterface = IdentityInterface, DQ = any, DM = any, CTX = any> = (
query: DQ,
context: CTX,
) => Promise<ResultsInterface<M, DM>>
export type PipeCreateAction<
M extends IdentityInterface = IdentityInterface,
CV = any,
CO = any,
CM = any,
CTX = any,
M2 extends IdentityInterface = M,
CV2 = CV,
CO2 = CO,
CM2 = CM,
CTX2 = CTX,
RQ = any,
PQ = any,
PV = any,
DQ = any,
RM = any,
PM = any,
DM = any,
> = (
next: PipeCreateNext<M, CV, CO, CM>,
resources: CV2[],
options: CO2,
context: CTX2,
pipeline: PipelineInterface<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX>,
) => Promise<ResultsInterface<M2, CM2>>
export type PipeReadAction<
M extends IdentityInterface = IdentityInterface,
RQ = any,
RM = any,
CTX = any,
M2 extends IdentityInterface = M,
RQ2 = RQ,
RM2 = RM,
CTX2 = CTX,
CV = any,
CO = any,
PQ = any,
PV = any,
DQ = any,
CM = any,
PM = any,
DM = any,
> = (
next: PipeReadNext<M, RQ, RM>,
query: RQ2,
context: CTX2,
pipeline: PipelineInterface<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX>,
) => Promise<ResultsInterface<M2, RM2>>
export type PipePatchAction<
M extends IdentityInterface = IdentityInterface,
PQ = any,
PV = any,
PM = any,
CTX = any,
M2 extends IdentityInterface = M,
PQ2 = PQ,
PV2 = PV,
PM2 = PM,
CTX2 = CTX,
CV = any,
CO = any,
RQ = any,
DQ = any,
CM = any,
RM = any,
DM = any,
> = (
next: PipePatchNext<M, PQ, PV, PM>,
query: PQ2,
values: PV2,
context: CTX2,
pipeline: PipelineInterface<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX>,
) => Promise<ResultsInterface<M2, PM2>>
export type PipeDeleteAction<
M extends IdentityInterface = IdentityInterface,
DQ = any,
DM = any,
CTX = any,
M2 extends IdentityInterface = M,
DQ2 = DQ,
DM2 = DM,
CTX2 = CTX,
CV = any,
CO = any,
RQ = any,
PQ = any,
PV = any,
CM = any,
RM = any,
PM = any,
> = (
next: PipeReadNext<M, DQ, DM>,
query: DQ2,
context: CTX2,
pipeline: PipelineInterface<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX>,
) => Promise<ResultsInterface<M2, DM2>>
export interface PipeActionsInterface<
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,
M2 extends IdentityInterface = M,
CV2 = CV,
CO2 = CO,
RQ2 = RQ,
PQ2 = PQ,
PV2 = PV,
DQ2 = DQ,
CM2 = CM,
RM2 = RM,
PM2 = PM,
DM2 = DM,
CTX2 = CTX,
> {
create?: PipeCreateAction<M, CV, CO, CM, CTX, M2, CV2, CO2, CM2, CTX2, RQ, PQ, PV, DQ, RM, PM, DM>
read?: PipeReadAction<M, RQ, RM, CTX, M2, RQ2, RM2, CTX2, CV, CO, PQ, PV, DQ, CM, PM, DM>
patch?: PipePatchAction<M, PQ, PV, PM, CTX, M2, PQ2, PV2, PM2, CTX2, CV, CO, RQ, DQ, CM, RM, DM>
delete?: PipeDeleteAction<M, DQ, DM, CTX, M2, DQ2, DM2, CTX2, CV, CO, RQ, PQ, PV, CM, RM, PM>
}
export interface PipeResultsInterface<
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,
M2 extends IdentityInterface = M,
CV2 = CV,
CO2 = CO,
RQ2 = RQ,
PQ2 = PQ,
PV2 = PV,
DQ2 = DQ,
CM2 = CM,
RM2 = RM,
PM2 = PM,
DM2 = DM,
CTX2 = CTX,
> extends Partial<SchemaBuildersInterface<M2, CV2, CO2, RQ2, PQ2, PV2, DQ2, CM2, RM2, PM2, DM2, CTX2>>,
PipeActionsInterface<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX, M2, CV2, CO2, RQ2, PQ2, PV2, DQ2, CM2, RM2, PM2, DM2, CTX2> {}
export type PipeFunction<
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,
M2 extends IdentityInterface = M,
CV2 = CV,
CO2 = CO,
RQ2 = RQ,
PQ2 = PQ,
PV2 = PV,
DQ2 = DQ,
CM2 = CM,
RM2 = RM,
PM2 = PM,
DM2 = DM,
CTX2 = any,
> = (
p: PipePropsInterface<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX>,
) => PipeResultsInterface<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX, M2, CV2, CO2, RQ2, PQ2, PV2, DQ2, CM2, RM2, PM2, DM2, CTX2>
export type PipeClassInstance<
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,
M2 extends IdentityInterface = M,
CV2 = CV,
CO2 = CO,
RQ2 = RQ,
PQ2 = PQ,
PV2 = PV,
DQ2 = DQ,
CM2 = CM,
RM2 = RM,
PM2 = PM,
DM2 = DM,
CTX2 = CTX,
> = {
transform: PipeFunction<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX, M2, CV2, CO2, RQ2, PQ2, PV2, DQ2, CM2, RM2, PM2, DM2, CTX2>
}
export interface PipeClass<
P extends any[],
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,
M2 extends IdentityInterface = M,
CV2 = CV,
CO2 = CO,
RQ2 = RQ,
PQ2 = PQ,
PV2 = PV,
DQ2 = DQ,
CM2 = CM,
RM2 = RM,
PM2 = PM,
DM2 = DM,
CTX2 = CTX,
> {
new (...params: P): PipeClassInstance<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX, M2, CV2, CO2, RQ2, PQ2, PV2, DQ2, CM2, RM2, PM2, DM2, CTX2>
}
export type Pipe<
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,
M2 extends IdentityInterface = M,
CV2 = CV,
CO2 = CO,
RQ2 = RQ,
PQ2 = PQ,
PV2 = PV,
DQ2 = DQ,
CM2 = CM,
RM2 = RM,
PM2 = PM,
DM2 = DM,
CTX2 = CTX,
> =
| PipeFunction<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX, M2, CV2, CO2, RQ2, PQ2, PV2, DQ2, CM2, RM2, PM2, DM2, CTX2>
| PipeClassInstance<M, CV, CO, RQ, PQ, PV, DQ, CM, RM, PM, DM, CTX, M2, CV2, CO2, RQ2, PQ2, PV2, DQ2, CM2, RM2, PM2, DM2, CTX2>