UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

35 lines (30 loc) 1.18 kB
import {type Observable} from 'rxjs' export function memoize<T, Arg1>( fn: (arg1: Arg1) => Observable<T>, keyGen: (arg1: Arg1) => string, ): (arg1: Arg1) => Observable<T> export function memoize<T, Arg1, Arg2>( fn: (arg1: Arg1, arg2: Arg2) => Observable<T>, keyGen: (arg1: Arg1, arg2: Arg2) => string, ): (arg1: Arg1, arg2: Arg2) => Observable<T> export function memoize<T, Arg1, Arg2, Arg3>( fn: (arg1: Arg1, arg2: Arg2, arg3: Arg3) => Observable<T>, keyGen: (arg1: Arg1, arg2: Arg2, arg3: Arg3) => string, ): (arg1: Arg1, arg2: Arg2, arg3: Arg3) => Observable<T> export function memoize<T, Arg1, Arg2, Arg3, Arg4>( fn: (arg1: Arg1, arg2: Arg2, arg3: Arg3, arg4: Arg4) => Observable<T>, keyGen: (arg1: Arg1, arg2: Arg2, arg3: Arg3, arg4: Arg4) => string, ): (arg1: Arg1, arg2: Arg2, arg3: Arg3, arg4: Arg4) => Observable<T> export function memoize<T, Args>( fn: (...args: Args[]) => Observable<T>, keyGen: (...args: Args[]) => string, ) { const MEMO: {[key: string]: Observable<T>} = Object.create(null) return (...args: any[]) => { const key = keyGen(...args) if (!(key in MEMO)) { MEMO[key] = fn(...args) } return MEMO[key] } }