UNPKG

2.28 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../lib/coalesced-function.ts"],"names":["globalInvokeCache","Map","withCoalescedInvoke","func","key","args","entry","get","then","res","isOrigin","value","__wrapper","apply","undefined","future","delete","catch","err","Promise","reject","set"],"mappings":"qFAOA,KAAMA,CAAAA,iBAAiB,CAAG,GAAIC,CAAAA,GAAJ,EAA1B,CAEO,QAASC,CAAAA,mBAAT,CACLC,IADK,CAKqD,CAC1D,MAAO,gBAAgBC,GAAhB,CAA6BC,IAA7B,CAAkD,CACvD,KAAMC,CAAAA,KAAK,CAAGN,iBAAiB,CAACO,GAAlB,CAAsBH,GAAtB,CAAd,CACA,GAAIE,KAAJ,CAAW,CACT,MAAOA,CAAAA,KAAK,CAACE,IAAN,CAAYC,GAAD,GAAU,CAC1BC,QAAQ,CAAE,KADgB,CAE1BC,KAAK,CAAEF,GAAG,CAACE,KAFe,CAAV,CAAX,CAAP,CAID,CAED,cAAeC,CAAAA,SAAf,EAA2B,CACzB,MAAO,MAAMT,CAAAA,IAAI,CAACU,KAAL,CAAWC,SAAX,CAAsBT,IAAtB,CAAb,CACD,CAED,KAAMU,CAAAA,MAAM,CAAGH,SAAS,GACrBJ,IADY,CACNC,GAAD,EAAS,CACbT,iBAAiB,CAACgB,MAAlB,CAAyBZ,GAAzB,EACA,MAAO,CAAEM,QAAQ,CAAE,IAAZ,CAAkBC,KAAK,CAAEF,GAAzB,CAAP,CACD,CAJY,EAKZQ,KALY,CAKLC,GAAD,EAAS,CACdlB,iBAAiB,CAACgB,MAAlB,CAAyBZ,GAAzB,EACA,MAAOe,CAAAA,OAAO,CAACC,MAAR,CAAeF,GAAf,CAAP,CACD,CARY,CAAf,CASAlB,iBAAiB,CAACqB,GAAlB,CAAsBjB,GAAtB,CAA2BW,MAA3B,EACA,MAAOA,CAAAA,MAAP,CACD,CAxBD,CAyBD","sourcesContent":["type CoalescedInvoke<T> = {\n isOrigin: boolean\n value: T\n}\n\nexport type UnwrapPromise<T> = T extends Promise<infer U> ? U : T\n\nconst globalInvokeCache = new Map<string, Promise<CoalescedInvoke<unknown>>>()\n\nexport function withCoalescedInvoke<F extends (...args: any) => any>(\n func: F\n): (\n key: string,\n args: Parameters<F>\n) => Promise<CoalescedInvoke<UnwrapPromise<ReturnType<F>>>> {\n return async function (key: string, args: Parameters<F>) {\n const entry = globalInvokeCache.get(key)\n if (entry) {\n return entry.then((res) => ({\n isOrigin: false,\n value: res.value as UnwrapPromise<ReturnType<F>>,\n }))\n }\n\n async function __wrapper() {\n return await func.apply(undefined, args)\n }\n\n const future = __wrapper()\n .then((res) => {\n globalInvokeCache.delete(key)\n return { isOrigin: true, value: res as UnwrapPromise<ReturnType<F>> }\n })\n .catch((err) => {\n globalInvokeCache.delete(key)\n return Promise.reject(err)\n })\n globalInvokeCache.set(key, future)\n return future\n }\n}\n"]}
\No newline at end of file