UNPKG

4 kBSource Map (JSON)View Raw
1{"version":3,"sources":["iterable/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,eAAmB,SAAQ,SAAY;IAM3C,YAAY,MAAmB;QAC7B,KAAK,EAAE,CAAC;QAHF,aAAQ,GAAY,KAAK,CAAC;QAIhC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAEO,CAAC,YAAY,CAAC,CAAS;QAC7B,IAAI;YACF,OAAO,CAAC,EAAE;gBACR,IAAI,QAAQ,GAAG,KAAK,EAClB,OAAO,GAAM,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;wBAClB,IAAI;4BACF,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;4BAC/B,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;4BACtB,IAAI,QAAQ,EAAE;gCACZ,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;6BACtB;yBACF;wBAAC,OAAO,CAAC,EAAE;4BACV,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;4BAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;yBACtB;qBACF;oBAED,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACjB,IAAI,IAAI,CAAC,MAAM,EAAE;4BACf,MAAM,IAAI,CAAC,MAAM,CAAC;yBACnB;6BAAM;4BACL,MAAM;yBACP;qBACF;oBAED,IAAI,QAAQ,EAAE;wBACZ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAC5B;iBACF;qBAAM;oBACL,QAAQ,GAAG,IAAI,CAAC;iBACjB;gBAED,IAAI,QAAQ,EAAE;oBACZ,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC3B;qBAAM;oBACL,MAAM;iBACP;gBAED,CAAC,EAAE,CAAC;aACL;SACF;gBAAS;YACR,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;IACH,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClE,CAAC;CACF;AAOD,MAAM,UAAU,OAAO,CACrB,MAAyB,EACzB,QAA0D;IAE1D,OAAO,QAAQ;QACb,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,CAAC,CAAC,IAAI,eAAe,CAAU,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9D,CAAC","file":"publish.js","sourcesContent":["import { IterableX } from './iterablex';\nimport { RefCountList } from './_refcountlist';\nimport { create } from './create';\n\nclass PublishedBuffer<T> extends IterableX<T> {\n private _buffer: RefCountList<T>;\n private _source: Iterator<T>;\n private _error: any;\n private _stopped: boolean = false;\n\n constructor(source: Iterator<T>) {\n super();\n this._source = source;\n this._buffer = new RefCountList<T>(0);\n }\n\n private *_getIterable(i: number): Iterable<T> {\n try {\n while (1) {\n let hasValue = false,\n current = <T>{};\n if (i >= this._buffer.count) {\n if (!this._stopped) {\n try {\n let next = this._source.next();\n hasValue = !next.done;\n if (hasValue) {\n current = next.value;\n }\n } catch (e) {\n this._error = e;\n this._stopped = true;\n }\n }\n\n if (this._stopped) {\n if (this._error) {\n throw this._error;\n } else {\n break;\n }\n }\n\n if (hasValue) {\n this._buffer.push(current);\n }\n } else {\n hasValue = true;\n }\n\n if (hasValue) {\n yield this._buffer.get(i);\n } else {\n break;\n }\n\n i++;\n }\n } finally {\n this._buffer.done();\n }\n }\n\n [Symbol.iterator](): Iterator<T> {\n this._buffer.readerCount++;\n return this._getIterable(this._buffer.count)[Symbol.iterator]();\n }\n}\n\nexport function publish<TSource>(source: Iterable<TSource>): IterableX<TSource>;\nexport function publish<TSource, TResult>(\n source: Iterable<TSource>,\n selector?: (value: Iterable<TSource>) => Iterable<TResult>\n): IterableX<TResult>;\nexport function publish<TSource, TResult>(\n source: Iterable<TSource>,\n selector?: (value: Iterable<TSource>) => Iterable<TResult>\n): IterableX<TSource | TResult> {\n return selector\n ? create(() => selector(publish(source))[Symbol.iterator]())\n : new PublishedBuffer<TSource>(source[Symbol.iterator]());\n}\n"]}
\No newline at end of file