UNPKG

2.82 kBSource Map (JSON)View Raw
1{"version":3,"sources":["asynciterable/intersect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,KAAK,UAAU,WAAW,CACxB,KAAU,EACV,IAAO,EACP,QAAoD;IAEpD,IAAI,GAAG,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;QACd,OAAO,KAAK,CAAC;KACd;IACD,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,sBAAgC,SAAQ,cAAuB;IAK1E,YACE,KAA6B,EAC7B,MAA8B,EAC9B,QAAgE;QAEhE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,GAAG,GAAG,EAAe,CAAC;QAC1B,IAAI,KAAK,EAAE,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;YACzC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACtB;QAED,IAAI,KAAK,EAAE,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;YACvC,IAAI,MAAM,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;gBACrD,MAAM,SAAS,CAAC;aACjB;SACF;IACH,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CACvB,KAA6B,EAC7B,MAA8B,EAC9B,WAAmE,aAAa;IAEhF,OAAO,IAAI,sBAAsB,CAAU,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC","file":"intersect.js","sourcesContent":["import { AsyncIterableX } from './asynciterablex';\nimport { arrayIndexOfAsync } from '../internal/arrayindexof';\nimport { comparerAsync } from '../internal/comparer';\n\nasync function arrayRemove<T>(\n array: T[],\n item: T,\n comparer: (x: T, y: T) => boolean | Promise<boolean>\n): Promise<boolean> {\n let idx = await arrayIndexOfAsync(array, item, comparer);\n if (idx === -1) {\n return false;\n }\n array.splice(idx, 1);\n return true;\n}\n\nexport class IntersectAsyncIterable<TSource> extends AsyncIterableX<TSource> {\n private _first: AsyncIterable<TSource>;\n private _second: AsyncIterable<TSource>;\n private _comparer: (x: TSource, y: TSource) => boolean | Promise<boolean>;\n\n constructor(\n first: AsyncIterable<TSource>,\n second: AsyncIterable<TSource>,\n comparer: (x: TSource, y: TSource) => boolean | Promise<boolean>\n ) {\n super();\n this._first = first;\n this._second = second;\n this._comparer = comparer;\n }\n\n async *[Symbol.asyncIterator]() {\n let map = [] as TSource[];\n for await (let secondItem of this._second) {\n map.push(secondItem);\n }\n\n for await (let firstItem of this._first) {\n if (await arrayRemove(map, firstItem, this._comparer)) {\n yield firstItem;\n }\n }\n }\n}\n\nexport function intersect<TSource>(\n first: AsyncIterable<TSource>,\n second: AsyncIterable<TSource>,\n comparer: (x: TSource, y: TSource) => boolean | Promise<boolean> = comparerAsync\n): AsyncIterableX<TSource> {\n return new IntersectAsyncIterable<TSource>(first, second, comparer);\n}\n"]}
\No newline at end of file