@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
62 lines (61 loc) • 2.53 kB
TypeScript
import { INormalizeDelegate, Mergeable } from '../interface.js';
import { ImmDelegate } from '../delegate/Delegate.imm.js';
/** ImmutableJS state table that supports setIn with variable path lengths */
export interface ImmutableJSMutableTable {
get(key: string): any;
getIn(k: readonly (string | number)[]): any;
setIn(k: readonly (string | number)[], value: any): ImmutableJSMutableTable;
hasIn?(k: readonly (string | number)[]): boolean;
}
/** Full normalize() logic for ImmutableJS state */
export declare class ImmNormalizeDelegate extends ImmDelegate implements INormalizeDelegate {
entities: ImmutableJSMutableTable;
indexes: ImmutableJSMutableTable;
entitiesMeta: ImmutableJSMutableTable;
readonly meta: {
fetchedAt: number;
date: number;
expiresAt: number;
};
checkLoop: (entityKey: string, pk: string, input: object) => boolean;
protected newEntities: Map<string, Map<string, any>>;
protected newIndexes: Map<string, Map<string, any>>;
constructor(state: {
entities: ImmutableJSMutableTable;
indexes: ImmutableJSMutableTable;
entitiesMeta: ImmutableJSMutableTable;
}, actionMeta: {
fetchedAt: number;
date: number;
expiresAt: number;
});
protected getNewEntity(key: string, pk: string): any;
protected getNewEntities(key: string): Map<string, any>;
protected getNewIndexes(key: string): Map<string, any>;
/** Updates an entity using merge lifecycles when it has previously been set */
mergeEntity(schema: Mergeable & {
indexes?: any;
}, pk: string, incomingEntity: any): void;
/** Sets an entity overwriting any previously set values */
setEntity(schema: {
key: string;
indexes?: any;
}, pk: string, entity: any, meta?: {
fetchedAt: number;
date: number;
expiresAt: number;
}): void;
/** Invalidates an entity, potentially triggering suspense */
invalidate({ key }: {
key: string;
}, pk: string): void;
protected _setEntity(key: string, pk: string, entity: any): void;
protected _setMeta(key: string, pk: string, meta: {
fetchedAt: number;
date: number;
expiresAt: number;
}): void;
getMeta(key: string, pk: string): any;
protected handleIndexes(id: string, entityKey: string, schemaIndexes: string[], entity: any): void;
}
//# sourceMappingURL=NormalizeDelegate.imm.d.ts.map