UNPKG

3.62 kBSource Map (JSON)View Raw
1{"version":3,"sources":["asynciterable/debounce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,KAAK,UAAU,OAAO,CACpB,MAAwB,EACxB,EAAqC;IAErC,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,EAAE;QAC/B,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;KAChB;AACH,CAAC;AAED,MAAM,OAAO,qBAA+B,SAAQ,cAAuB;IAIzE,YAAY,MAA8B,EAAE,IAAY;QACtD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,OAAgB,CAAC;QACrB,IAAI,QAA6B,CAAC;QAClC,IAAI,QAA0B,CAAC;QAC/B,IAAI,QAAsE,CAAC;QAC3E,IAAI,IAAI,GAAY,KAAK,CAAC;QAC1B,IAAI,QAAQ,GAAY,KAAK,CAAC;QAC9B,IAAI,KAAU,CAAC;QAEf,MAAM,KAAK,GAAG,CAAC,UAAmB,EAAE,EAAE;YACpC,OAAO,GAAG,UAAU,CAAC;YACrB,QAAQ,GAAG,SAAS,CAAC;YACrB,QAAQ,GAAG,IAAI,OAAO,CAAU,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,GAAG,EAAE;YACf,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC1B,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO;aACR;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC;YACtB,MAAM,GAAG,GAAG,QAAQ,CAAC;YACrB,KAAK,CAAC,KAAK,CAAC,CAAC;YACb,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,CAAC;QACZ,CAAC,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YAC3B,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,OAAO,EAAE;gBACX,GAAG,EAAE,CAAC;aACP;QACH,CAAC,CAAC;aACC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;aACzB,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,GAAG,GAAG,CAAC;QACd,CAAC,CAAC,CAAC;QAEL,OAAO,CAAC,EAAE;YACR,IAAI,IAAI,EAAE;gBACR,MAAM;aACP;YACD,IAAI,QAAQ,EAAE;gBACZ,MAAM,KAAK,CAAC;aACb;YACD,MAAM,MAAM,QAAS,CAAC;SACvB;IACH,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CACtB,MAA8B,EAC9B,IAAY;IAEZ,OAAO,IAAI,qBAAqB,CAAU,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC","file":"debounce.js","sourcesContent":["import { AsyncIterableX } from './asynciterablex';\n\nasync function forEach<T>(\n source: AsyncIterable<T>,\n fn: (item: T) => void | Promise<void>\n): Promise<void> {\n for await (const item of source) {\n await fn(item);\n }\n}\n\nexport class DebounceAsyncIterable<TSource> extends AsyncIterableX<TSource> {\n private _source: AsyncIterable<TSource>;\n private _time: number;\n\n constructor(source: AsyncIterable<TSource>, time: number) {\n super();\n this._source = source;\n this._time = time;\n }\n\n async *[Symbol.asyncIterator]() {\n let noValue: boolean;\n let lastItem: TSource | undefined;\n let deferred: Promise<TSource>;\n let resolver: (value?: TSource | PromiseLike<TSource> | undefined) => void;\n let done: boolean = false;\n let hasError: boolean = false;\n let error: any;\n\n const reset = (hasNoValue: boolean) => {\n noValue = hasNoValue;\n lastItem = undefined;\n deferred = new Promise<TSource>(r => (resolver = r));\n };\n\n const run = () => {\n if (lastItem === undefined) {\n noValue = true;\n return;\n }\n\n const item = lastItem;\n const res = resolver;\n reset(false);\n setTimeout(run, this._time);\n res(item);\n };\n\n reset(true);\n forEach(this._source, item => {\n lastItem = item;\n if (noValue) {\n run();\n }\n })\n .then(() => (done = true))\n .catch(err => {\n hasError = true;\n error = err;\n });\n\n while (1) {\n if (done) {\n break;\n }\n if (hasError) {\n throw error;\n }\n yield await deferred!;\n }\n }\n}\n\nexport function debounce<TSource>(\n source: AsyncIterable<TSource>,\n time: number\n): AsyncIterableX<TSource> {\n return new DebounceAsyncIterable<TSource>(source, time);\n}\n"]}
\No newline at end of file