UNPKG

@fantastic-utils/memo

Version:

powerful memorization lib, which inspired by memoize-one, proxy-memoize

54 lines (53 loc) 1.8 kB
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 {};