UNPKG

@rx-mind/entity-component-store

Version:
50 lines (49 loc) 3.47 kB
export interface EntityState<Entity extends Record<string, any>, Id extends string | number = string | number> { ids: Id[]; entities: Record<Id, Entity>; } export interface EntityStateAdapter<Entity extends Record<string, any>, Id extends string | number> { addOne<State extends EntityState<Entity, Id>>(entity: Entity, state: State): State; addMany<State extends EntityState<Entity, Id>>(entities: Entity[], state: State): State; setOne<State extends EntityState<Entity, Id>>(entity: Entity, state: State): State; setMany<State extends EntityState<Entity, Id>>(entities: Entity[], state: State): State; setAll<State extends EntityState<Entity, Id>>(entities: Entity[], state: State): State; removeOne<State extends EntityState<Entity, Id>>(id: Id, state: State): State; removeMany<State extends EntityState<Entity, Id>>(ids: Id[], state: State): State; removeMany<State extends EntityState<Entity, Id>>(predicate: Predicate<Entity>, state: State): State; removeAll<State extends EntityState<Entity, Id>>(state: State): State; updateOne<State extends EntityState<Entity, Id>>(update: Update<Entity, Id>, state: State): State; updateMany<State extends EntityState<Entity, Id>>(updates: Update<Entity, Id>[], state: State): State; upsertOne<State extends EntityState<Entity, Id>>(entity: Entity, state: State): State; upsertMany<State extends EntityState<Entity, Id>>(entities: Entity[], state: State): State; mapOne<State extends EntityState<Entity, Id>>(map: EntityMapOne<Entity, Id>, state: State): State; map<State extends EntityState<Entity, Id>>(map: EntityMap<Entity>, state: State): State; } export interface EntityStateAdapterConfig<Entity extends Record<string, any>, Id extends string | number> { selectId?: SelectId<Entity, Id>; sortComparer?: SortComparer<Entity>; } export interface EntityComponentStoreConfig<State extends EntityState<Entity, Id>, Entity extends Record<string, any> = ExtractEntity<State>, Id extends string | number = ExtractId<State>> extends EntityStateAdapterConfig<Entity, Id> { initialState?: State; } export declare type EntityStateOperator<Arg, Entity extends Record<string, any>, Id extends string | number> = <State extends EntityState<Entity, Id>>(arg: Arg, state: State) => State; export interface EntityMapOne<Entity extends Record<string, any>, Id extends string | number = string | number> { id: Id; map: EntityMap<Entity>; } export declare type EntityMap<Entity extends Record<string, any>> = (entity: Entity) => Entity; export declare type Predicate<Entity extends Record<string, any>> = (entity: Entity) => boolean; export declare type SelectId<Entity extends Record<string, any>, Id extends string | number = string | number> = (entity: Entity) => Id; export declare type SortComparer<Entity extends Record<string, any>> = (e1: Entity, e2: Entity) => number; export interface Update<Entity extends Record<string, any>, Id extends string | number = string | number> { id: Id; changes: Partial<Entity>; } export declare type PartialUpdater<State> = (state: State) => Partial<State>; export declare type ExtractEntity<State> = State extends EntityState<infer Entity> ? Entity : never; export declare type ExtractId<State> = State extends EntityState<Record<string, any>, infer Id> ? Id : never; export declare enum DidMutate { EntitiesOnly = 0, Both = 1, None = 2 }