UNPKG

@node-in-layers/core

Version:

The core library for the Node In Layers rapid web development framework.

102 lines (101 loc) 3.5 kB
import { DataDescription, OrmModel, OrmModelInstance, OrmSearch, OrmSearchResult, PrimaryKeyType, ToObjectResult } from 'functional-models'; import { Config, ServicesContext } from '../types.js'; /** * The CRUDS functions for a model * @interface */ type ModelCrudsFunctions<TData extends DataDescription, TModelExtensions extends object = object, TModelInstanceExtensions extends object = object> = Readonly<{ /** * Gets the underlying model */ getModel: () => OrmModel<TData, TModelExtensions, TModelInstanceExtensions>; /** * The create function */ create: CreateFunction<TData>; /** * The retrieve function */ retrieve: RetrieveFunction<TData>; /** * The update function */ update: UpdateFunction<TData>; /** * The delete function */ delete: DeleteFunction; /** * The search function */ search: SearchFunction<TData>; /** * The bulk insert function */ bulkInsert: BulkInsertFunction<TData>; /** * The bulk delete function */ bulkDelete: BulkDeleteFunction; }>; /** * Core Model Services */ type ModelServices = Readonly<{ /** * Creates service level CRUDS functions for a model. * @param model - The model. * @param options */ createModelCruds: <TData extends DataDescription>(model: OrmModel<TData>, options?: CrudsOptions<TData>) => ModelCrudsFunctions<TData>; }>; /** * A function that creates */ type CreateFunction<TData extends DataDescription> = <IgnoreProperties extends string = ''>(data: Omit<TData, IgnoreProperties> | ToObjectResult<TData>) => Promise<OrmModelInstance<TData>>; /** * A function that retrieves */ type RetrieveFunction<TData extends DataDescription> = (primaryKey: PrimaryKeyType) => Promise<OrmModelInstance<TData> | undefined>; /** * A function that updates */ type UpdateFunction<TData extends DataDescription> = (primaryKey: PrimaryKeyType, data: TData | ToObjectResult<TData>) => Promise<OrmModelInstance<TData>>; /** * A function that deletes */ type DeleteFunction = (primaryKey: PrimaryKeyType) => Promise<void>; /** * A function that searches. */ type SearchFunction<TData extends DataDescription> = (ormSearch: OrmSearch) => Promise<OrmSearchResult<TData>>; /** * A function that bulk inserts */ type BulkInsertFunction<TData extends DataDescription> = (data: readonly TData[]) => Promise<void>; /** * A function that bulk deletes */ type BulkDeleteFunction = (primaryKeys: readonly PrimaryKeyType[]) => Promise<void>; /** * An object that provides overrides for default behavior. * @interface */ type CrudsOverrides<TData extends DataDescription> = Partial<Omit<ModelCrudsFunctions<TData>, 'getModel'>>; /** * Options for building CRUDS interfaces with a model * @interface */ type CrudsOptions<TData extends DataDescription> = Readonly<{ /** * Override any individual function. */ overrides?: CrudsOverrides<TData>; }>; /** * A services context, that exposes CRUDS models services. */ type ModelCrudsServicesContext<TModels extends Record<string, ModelCrudsFunctions<any>>, TConfig extends Config = Config, TServices extends object = object, TContext extends object = object> = ServicesContext<TConfig, TServices & { cruds: TModels; }, TContext>; export { UpdateFunction, DeleteFunction, SearchFunction, CreateFunction, CrudsOptions, RetrieveFunction, ModelCrudsFunctions, ModelServices, CrudsOverrides, ModelCrudsServicesContext, };