@fantastic-utils/memo
Version:
powerful memorization lib, which inspired by memoize-one, proxy-memoize
54 lines (53 loc) • 1.8 kB
TypeScript
declare enum AFFECTED_TYPES {
KEYS = "k",
HAS_KEY = "h",
HAS_OWN_KEY = "o",
ALL_KEYS = "a"
}
export interface MemoConfig {
objectShallowCompare?: boolean;
shouldCompare?: (args?: any[], cachedArgsCfg?: NormalizeArgCfg[]) => boolean;
isChanged?: (args?: any[], cachedArgsCfg?: NormalizeArgCfg[]) => boolean;
}
/**
* @param t The Type
* @param v The normalized value
* @param r The raw value
* @param a The affected info
*/
export interface NormalizeArgCfg {
t: string;
v: any;
r: unknown;
a: Affected;
}
export interface HasKeyArgCfg {
v: boolean;
}
export interface HasOwnKeyArgCfg {
v: boolean;
}
export declare type RecordKey = string | symbol;
export declare type AffectedKey = Map<RecordKey, NormalizeArgCfg>;
export declare type AffectedHasKey = Map<RecordKey, HasKeyArgCfg>;
export declare type AffectedHasOwnKey = Map<RecordKey, HasOwnKeyArgCfg>;
export declare type AffectedAllKey = [boolean, Array<RecordKey>];
/**
* @param k The key map which used
* @param h The key which used in has
* @param a The key which used in all keys
*/
export interface Used {
p?: ProxyHandler<any>;
[AFFECTED_TYPES.KEYS]: AffectedKey;
[AFFECTED_TYPES.HAS_KEY]: AffectedHasKey;
[AFFECTED_TYPES.HAS_OWN_KEY]: AffectedHasOwnKey;
[AFFECTED_TYPES.ALL_KEYS]: AffectedAllKey;
}
export declare type Affected = WeakMap<object, Used>;
export declare type PathSet = string;
export declare const original: (proxyTarget: any) => any;
export declare const getUsed: (arg: any, affected: Affected) => Used;
export declare const memo: (fn: (...args: any[]) => any, memoCfg?: MemoConfig) => (...args: any[]) => any;
export declare const memoAsync: (fn: (...args: any[]) => any, memoCfg?: MemoConfig) => (...args: any[]) => Promise<any>;
export {};