{"version":3,"sources":["asynciterable/fromnodestream.ts"],"names":[],"mappings":"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","file":"fromnodestream.js","sourcesContent":["import { AsyncIterableX } from './asynciterablex';\n\nconst NON_FLOWING = 0;\nconst READABLE = 1;\nconst ENDED = 2;\nconst ERRORED = 3;\n\nexport class ReadableStreamAsyncIterable extends AsyncIterableX<string | Buffer>\n  implements AsyncIterator<string | Buffer> {\n  private _stream: NodeJS.ReadableStream;\n  private _defaultSize?: number;\n  private _state: number;\n  private _error: any;\n  private _rejectFns: Set<(err: any) => void>;\n  private _endPromise: Promise<void> | undefined;\n\n  constructor(stream: NodeJS.ReadableStream, size?: number) {\n    super();\n    this._stream = stream;\n    this._defaultSize = size;\n    this._state = NON_FLOWING;\n    this._error = null;\n    this._rejectFns = new Set<(err: any) => void>();\n\n    const onError = (err: any) => {\n      this._state = ERRORED;\n      this._error = err;\n      for (const rejectFn of this._rejectFns) {\n        rejectFn(err);\n      }\n    };\n\n    const onEnd = () => {\n      this._state = ENDED;\n    };\n\n    this._stream['once']('error', onError);\n    this._stream['once']('end', onEnd);\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<string | Buffer> {\n    return this;\n  }\n\n  async next(size = this._defaultSize): Promise<IteratorResult<string | Buffer>> {\n    if (this._state === NON_FLOWING) {\n      await Promise.race([this._waitReadable(), this._waitEnd()]);\n      return await this.next(size);\n    }\n\n    if (this._state === ENDED) {\n      return ({ done: true, value: undefined } as any) as IteratorResult<string | Buffer>;\n    }\n\n    if (this._state === ERRORED) {\n      throw this._error;\n    }\n\n    const value = this._stream['read'](size);\n    if (value !== null) {\n      return { done: false, value };\n    } else {\n      this._state = NON_FLOWING;\n      return await this.next(size);\n    }\n  }\n\n  private _waitReadable(): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      const onReadable = () => {\n        this._state = READABLE;\n        this._rejectFns.delete(reject);\n        resolve();\n      };\n\n      this._rejectFns.add(reject);\n      this._stream['once']('readable', onReadable);\n    });\n  }\n\n  private _waitEnd(): Promise<void> {\n    if (!this._endPromise) {\n      this._endPromise = new Promise<void>((resolve, reject) => {\n        const onEnd = () => {\n          this._state = ENDED;\n          this._rejectFns.delete(reject);\n          resolve();\n        };\n\n        this._rejectFns.add(reject);\n        this._stream['once']('end', onEnd);\n      });\n    }\n    return this._endPromise;\n  }\n}\n\nexport function fromNodeStream(\n  stream: NodeJS.ReadableStream,\n  size?: number\n): AsyncIterableX<string | Buffer> {\n  return new ReadableStreamAsyncIterable(stream, size);\n}\n"]}