{"version":3,"file":"stream.cjs","names":["e: any","stream: ReadableStream<T>","generator: AsyncGenerator<T>","iter: AsyncGenerator<T>","buffer","first: T","second: T","params: {\n    generator: AsyncGenerator<T>;\n    startSetup?: () => Promise<S>;\n    config?: unknown;\n    signal?: AbortSignal;\n  }","AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys","raceWithSignal","value?: TReturn | PromiseLike<TReturn>","e: Error","to: (\n    g: AsyncGenerator<T, TReturn, TNext>,\n    s: S,\n    ...args: A\n  ) => AsyncGenerator<U, UReturn, UNext>","generator: AsyncGenerator<T, TReturn, TNext>","startSetup: () => Promise<S>","signal: AbortSignal | undefined"],"sources":["../../src/utils/stream.ts"],"sourcesContent":["import { pickRunnableConfigKeys } from \"../runnables/config.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { IterableReadableStreamInterface } from \"../types/_internal.js\";\nimport { raceWithSignal } from \"./signal.js\";\n\n// Re-exported for backwards compatibility\n// Do NOT import this type from this file inside the project. Instead, always import from `types/_internal.js`\n// when using internally\nexport type { IterableReadableStreamInterface };\n\n/*\n * Support async iterator syntax for ReadableStreams in all environments.\n * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport class IterableReadableStream<T>\n  extends ReadableStream<T>\n  implements IterableReadableStreamInterface<T>\n{\n  public reader: ReadableStreamDefaultReader<T>;\n\n  ensureReader() {\n    if (!this.reader) {\n      this.reader = this.getReader();\n    }\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    this.ensureReader();\n    try {\n      const result = await this.reader.read();\n      if (result.done) {\n        this.reader.releaseLock(); // release lock when stream becomes closed\n        return {\n          done: true,\n          value: undefined,\n        };\n      } else {\n        return {\n          done: false,\n          value: result.value,\n        };\n      }\n    } catch (e) {\n      this.reader.releaseLock(); // release lock when stream becomes errored\n      throw e;\n    }\n  }\n\n  async return(): Promise<IteratorResult<T>> {\n    this.ensureReader();\n    // If wrapped in a Node stream, cancel is already called.\n    if (this.locked) {\n      const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n      this.reader.releaseLock(); // release lock first\n      await cancelPromise; // now await it\n    }\n    return { done: true, value: undefined };\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  async throw(e: any): Promise<IteratorResult<T>> {\n    this.ensureReader();\n    if (this.locked) {\n      const cancelPromise = this.reader.cancel(); // cancel first, but don't await yet\n      this.reader.releaseLock(); // release lock first\n      await cancelPromise; // now await it\n    }\n    throw e;\n  }\n\n  [Symbol.asyncIterator]() {\n    return this;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore Not present in Node 18 types, required in latest Node 22\n  async [Symbol.asyncDispose]() {\n    await this.return();\n  }\n\n  static fromReadableStream<T>(stream: ReadableStream<T>) {\n    // From https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#reading_the_stream\n    const reader = stream.getReader();\n    return new IterableReadableStream<T>({\n      start(controller) {\n        return pump();\n        function pump(): Promise<T | undefined> {\n          return reader.read().then(({ done, value }) => {\n            // When no more data needs to be consumed, close the stream\n            if (done) {\n              controller.close();\n              return;\n            }\n            // Enqueue the next data chunk into our target stream\n            controller.enqueue(value);\n            return pump();\n          });\n        }\n      },\n      cancel() {\n        reader.releaseLock();\n      },\n    });\n  }\n\n  static fromAsyncGenerator<T>(generator: AsyncGenerator<T>) {\n    return new IterableReadableStream<T>({\n      async pull(controller) {\n        const { value, done } = await generator.next();\n        // When no more data needs to be consumed, close the stream\n        if (done) {\n          controller.close();\n        }\n        // Fix: `else if (value)` will hang the streaming when nullish value (e.g. empty string) is pulled\n        controller.enqueue(value);\n      },\n      async cancel(reason) {\n        await generator.return(reason);\n      },\n    });\n  }\n}\n\nexport function atee<T>(\n  iter: AsyncGenerator<T>,\n  length = 2\n): AsyncGenerator<T>[] {\n  const buffers = Array.from(\n    { length },\n    () => [] as Array<IteratorResult<T> | IteratorReturnResult<T>>\n  );\n  return buffers.map(async function* makeIter(buffer) {\n    while (true) {\n      if (buffer.length === 0) {\n        const result = await iter.next();\n        for (const buffer of buffers) {\n          buffer.push(result);\n        }\n      } else if (buffer[0].done) {\n        return;\n      } else {\n        yield buffer.shift()!.value;\n      }\n    }\n  });\n}\n\nexport function concat<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T extends Array<any> | string | number | Record<string, any> | any\n>(first: T, second: T): T {\n  if (Array.isArray(first) && Array.isArray(second)) {\n    return first.concat(second) as T;\n  } else if (typeof first === \"string\" && typeof second === \"string\") {\n    return (first + second) as T;\n  } else if (typeof first === \"number\" && typeof second === \"number\") {\n    return (first + second) as T;\n  } else if (\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    \"concat\" in (first as any) &&\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    typeof (first as any).concat === \"function\"\n  ) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return (first as any).concat(second) as T;\n  } else if (typeof first === \"object\" && typeof second === \"object\") {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const chunk = { ...first } as Record<string, any>;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    for (const [key, value] of Object.entries(second as Record<string, any>)) {\n      if (key in chunk && !Array.isArray(chunk[key])) {\n        chunk[key] = concat(chunk[key], value);\n      } else {\n        chunk[key] = value;\n      }\n    }\n    return chunk as T;\n  } else {\n    throw new Error(`Cannot concat ${typeof first} and ${typeof second}`);\n  }\n}\n\nexport class AsyncGeneratorWithSetup<\n  S = unknown,\n  T = unknown,\n  TReturn = unknown,\n  TNext = unknown\n> implements AsyncGenerator<T, TReturn, TNext>\n{\n  private generator: AsyncGenerator<T>;\n\n  public setup: Promise<S>;\n\n  public config?: unknown;\n\n  public signal?: AbortSignal;\n\n  private firstResult: Promise<IteratorResult<T>>;\n\n  private firstResultUsed = false;\n\n  constructor(params: {\n    generator: AsyncGenerator<T>;\n    startSetup?: () => Promise<S>;\n    config?: unknown;\n    signal?: AbortSignal;\n  }) {\n    this.generator = params.generator;\n    this.config = params.config;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    this.signal = params.signal ?? (this.config as any)?.signal;\n    // setup is a promise that resolves only after the first iterator value\n    // is available. this is useful when setup of several piped generators\n    // needs to happen in logical order, ie. in the order in which input to\n    // to each generator is available.\n    this.setup = new Promise((resolve, reject) => {\n      // eslint-disable-next-line no-void\n      void AsyncLocalStorageProviderSingleton.runWithConfig(\n        pickRunnableConfigKeys(\n          params.config as Record<string, unknown> | undefined\n        ),\n        async () => {\n          this.firstResult = params.generator.next();\n          if (params.startSetup) {\n            this.firstResult.then(params.startSetup).then(resolve, reject);\n          } else {\n            this.firstResult.then((_result) => resolve(undefined as S), reject);\n          }\n        },\n        true\n      );\n    });\n  }\n\n  async next(...args: [] | [TNext]): Promise<IteratorResult<T>> {\n    this.signal?.throwIfAborted();\n\n    if (!this.firstResultUsed) {\n      this.firstResultUsed = true;\n      return this.firstResult;\n    }\n\n    return AsyncLocalStorageProviderSingleton.runWithConfig(\n      pickRunnableConfigKeys(\n        this.config as Record<string, unknown> | undefined\n      ),\n      this.signal\n        ? async () => {\n            return raceWithSignal(this.generator.next(...args), this.signal);\n          }\n        : async () => {\n            return this.generator.next(...args);\n          },\n      true\n    );\n  }\n\n  async return(\n    value?: TReturn | PromiseLike<TReturn>\n  ): Promise<IteratorResult<T>> {\n    return this.generator.return(value);\n  }\n\n  async throw(e: Error): Promise<IteratorResult<T>> {\n    return this.generator.throw(e);\n  }\n\n  [Symbol.asyncIterator]() {\n    return this;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore Not present in Node 18 types, required in latest Node 22\n  async [Symbol.asyncDispose]() {\n    await this.return();\n  }\n}\n\nexport async function pipeGeneratorWithSetup<\n  S,\n  A extends unknown[],\n  T,\n  TReturn,\n  TNext,\n  U,\n  UReturn,\n  UNext\n>(\n  to: (\n    g: AsyncGenerator<T, TReturn, TNext>,\n    s: S,\n    ...args: A\n  ) => AsyncGenerator<U, UReturn, UNext>,\n  generator: AsyncGenerator<T, TReturn, TNext>,\n  startSetup: () => Promise<S>,\n  signal: AbortSignal | undefined,\n  ...args: A\n) {\n  const gen = new AsyncGeneratorWithSetup({\n    generator,\n    startSetup,\n    signal,\n  });\n  const setup = await gen.setup;\n  return { output: to(gen, setup, ...args), setup };\n}\n"],"mappings":"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"}