BGASX3JPOPME4PSC34CHD5VLBZAQMXIAPZQ4DKCWZGEASXCKGW3AC PSY4Y3X4ZWLXR2FEDR2W5E4SW2ASS4BPBOT4W5TDLNU2NCFZISNAC TWWXXFP7B7ESYFOB5BOLLUSYTVPBDW33SISI4HZINYZ7ODRKPMPQC HXHNGFB2VCXB6YXDND35HJI22GBJC3QTSUR2TK3M3LXGJHVNXVHAC PEQNQJYNX7QOEM67QH2UF7VZ43AXHUBO76DN77L43MEFRHVDBO5QC GIDOI5BK3WYIDEQL7SZTJPR3Q5TDQ34YHDPDCUFFH6PX4POEDSQQC FLGWAOMMMGBO5ICWD3SXBOGJQA6LL2ZHTIQIMGY5VNFAETKDPPYAC B4JS4Z3VVAD5RJJ272S7GJM5BUNIHHMGNK2VSKVGZFPOVFP2YO4QC WPC667PRTGRE7BNP6E7ZCQIKXYMIHJT3LUTTQT7VX2HQVRBXNIKAC 5BA7VZ3D36S2TC7NZ64R3O364TGXPY5BJUJTGCFZHWZ6JWAXJMUQC DK5HGACGUWZGNYVDEX3CAOZV3NIWYT5EIXXPX3G3VD2TGYVJ5O2AC JG36CDUKVUWJT25PJVMWKWI4KFRHM24PFBKPXXRY3D2XVDKUVI7QC QDCUZEYTKURHBOP65DP5VYAPGHNXPTXIF3S3VTDZ3WGBZ3BI3DHQC ZHOSSPNKGFIKSFPDXCGLMSYMMX2J433VU2BUUWBKUH7TOLQUBSPQC DHO4JCJIELKX4R42XXAMAHVQTTE6OWULLP2QF4BXO3UWC5UTMSMAC TQ57VE45BHV7MOZ6GKTYZEAMAOTXLPQ3ROCWJ2FUCITQWOYVMUIAC ANA23YLFENNJU3UZDZKIKGZJLM46AM2LQEQ7SPRUVRMOQGDG4DFAC 3J7QNHQ4F2VBYCK6SWKPO3AW3YYAJZNWOW6XNSURSRDZOE2ZIGQAC 3J7UJFGYFKBWC3IBUP32XODZND5ZLHZQJGXSYXMAW4DCREUOEOQAC V7PGPHZNTW5HIJQBIM3W57YPS4LYID54XHZZXPFM6BRHLC3Z2B6QC DDJJXZKSQLXUXIMLKMKHY75JKC2IRA2A7SEVSUNL5FSCFH77T4IAC /**** @param fn an arbitrary callback which performs some operation with side effects.* @returns a tuple: [batchedFn, fireBatch].* batchedFn takes the same arguments as fn, but the side effects are delayed until fireBatch is called.* if batchedFn is called multiple times, those invocations are stored in order, and then popped off in order when fireBatch is called.*/export function batchify<A extends any[]>(fn: (...args: A)=> void): [((...args: A) => void), () => void] {let batch: A[] = [];return [(...args: A) => {batch.push(args);// console.log({ stack: new Error().stack, batchSize: batch.length });console.log({ batchSize: batch.length });}, (() => {if (batch.length !== 0) { console.log({ fired: batch.length }); }for (let a of batch) {fn(...a);}batch = [];})];}/*** Same use case and types as [batchify], however, specifically we expect [fn] to be a setState function which takes value-or-callback* as its single argument, and instead of calling [fn] repeatedly for each callback in the batch, we apply the callbacks in the batch* sequentially to get a single state update which we then provide to [fn].*/export function batchifySetState<T>(fn: (arg: T) => void): [((arg: T) => void), () => void] {let batch: T[] = [];return [(arg: T) => {batch.push(arg);console.log({ batchSize: batch.length });}, (() => {if (batch.length === 0) {return;}console.log({ fired: batch.length });let thisBatch = [...batch];batch = [];(fn as any)((prev: any) => {let next = prev;for (let valueOrCallback of thisBatch) {if (typeof valueOrCallback === 'function') {next = valueOrCallback(next);} else {next = valueOrCallback;}}return next;});})]}
}/**** @param fn an arbitrary callback which performs some operation with side effects.* @returns a tuple: [batchedFn, fireBatch].* batchedFn takes the same arguments as fn, but the side effects are delayed until fireBatch is called.* if batchedFn is called multiple times, those invocations are stored in order, and then popped off in order when fireBatch is called.*/export function batchify<A extends any[]>(fn: (...args: A)=> void): [((...args: A) => void), () => void] {let batch: A[] = [];return [(...args: A) => {batch.push(args);// console.log({ stack: new Error().stack, batchSize: batch.length });console.log({ batchSize: batch.length });}, (() => {if (batch.length !== 0) { console.log({ fired: batch.length }); }for (let a of batch) {fn(...a);}batch = [];})];}/*** Same use case and types as [batchify], however, specifically we expect [fn] to be a setState function which takes value-or-callback* as its single argument, and instead of calling [fn] repeatedly for each callback in the batch, we apply the callbacks in the batch* sequentially to get a single state update which we then provide to [fn].*/export function batchifySetState<T>(fn: (arg: T) => void): [((arg: T) => void), () => void] {let batch: T[] = [];return [(arg: T) => {batch.push(arg);console.log({ batchSize: batch.length });}, (() => {if (batch.length === 0) {return;}console.log({ fired: batch.length });let thisBatch = [...batch];batch = [];(fn as any)((prev: any) => {let next = prev;for (let valueOrCallback of thisBatch) {if (typeof valueOrCallback === 'function') {next = valueOrCallback(next);} else {next = valueOrCallback;}}return next;});})]