UNPKG

@furystack/repository

Version:

Repository implementation for FuryStack

102 lines 2.96 kB
import type { PhysicalStore, FindOptions, WithOptionalId } from '@furystack/core'; import type { Injector } from '@furystack/inject'; /** * The result model returned by authorizers */ export type AuthorizationResult = SuccessfullyValidationResult | FailedValidationResult; export interface SuccessfullyValidationResult { /** * Indicates if the validation was succesful */ isAllowed: true; } export interface FailedValidationResult { /** * Indicates if the validation was succesful */ isAllowed: false; /** * The error message string */ message: string; } /** * Model for authorizers */ export interface DataSetSettings<T, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>> { /** * An instance of a physical store */ physicalStore: PhysicalStore<T, TPrimaryKey, TWritableData>; /** * Authorizes the entity creation */ authorizeAdd?: (options: { injector: Injector; entity: TWritableData; }) => Promise<AuthorizationResult>; /** * modifies an entity before persisting on creation */ modifyOnAdd?: (options: { injector: Injector; entity: TWritableData; }) => Promise<TWritableData>; /** * Authorizes entity updates (before the entity gets loaded from the store) */ authorizeUpdate?: (options: { injector: Injector; change: Partial<T>; }) => Promise<AuthorizationResult>; /** * Authorizes entity updates per loaded entity */ authorizeUpdateEntity?: (options: { injector: Injector; entity: T; change: Partial<T>; }) => Promise<AuthorizationResult>; /** * modifies an entity before persisting on update */ modifyOnUpdate?: (options: { injector: Injector; id: T[keyof T]; entity: Partial<T>; }) => Promise<Partial<T>>; /** * Authorizes entity removal (before the entity gets loaded from the store) */ authorizeRemove?: (options: { injector: Injector; }) => Promise<AuthorizationResult>; /** * Authorizes entity removal per loaded entity */ authroizeRemoveEntity?: (options: { injector: Injector; entity: T; }) => Promise<AuthorizationResult>; /** * Authorizes entity retrival w/o entity loading */ authorizeGet?: (options: { injector: Injector; }) => Promise<AuthorizationResult>; /** * Authorizes entity retrival */ authorizeGetEntity?: (options: { injector: Injector; entity: T; }) => Promise<AuthorizationResult>; /** * Additional filter parsing to be appended per filter / query */ addFilter?: <TFields extends Array<keyof T>>(options: { injector: Injector; filter: FindOptions<T, TFields>; }) => Promise<FindOptions<T, TFields>>; } //# sourceMappingURL=data-set-setting.d.ts.map