{"version":3,"file":"iter.cjs","names":["AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys"],"sources":["../../src/runnables/iter.ts"],"sourcesContent":["import type { RunnableConfig } from \"../runnables/types.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport { pickRunnableConfigKeys } from \"./config.js\";\n\nexport function isIterableIterator(\n  thing: unknown\n): thing is IterableIterator<unknown> {\n  return (\n    typeof thing === \"object\" &&\n    thing !== null &&\n    typeof (thing as Generator)[Symbol.iterator] === \"function\" &&\n    // avoid detecting array/set as iterator\n    typeof (thing as Generator).next === \"function\"\n  );\n}\n\nexport const isIterator = (x: unknown): x is Iterator<unknown> =>\n  x != null &&\n  typeof x === \"object\" &&\n  \"next\" in x &&\n  typeof x.next === \"function\";\n\nexport function isAsyncIterable(\n  thing: unknown\n): thing is AsyncIterable<unknown> {\n  return (\n    typeof thing === \"object\" &&\n    thing !== null &&\n    typeof (thing as AsyncIterable<unknown>)[Symbol.asyncIterator] ===\n      \"function\"\n  );\n}\n\nexport function isAsyncGenerator(x: unknown): x is AsyncGenerator {\n  return (\n    x != null &&\n    typeof x === \"object\" &&\n    typeof (x as AsyncGenerator).next === \"function\"\n  );\n}\n\nexport async function consumeAsyncGenerator<T, TReturn>(\n  generator: AsyncGenerator<T, TReturn>,\n  onYield?: (value: T) => Promise<void> | void\n): Promise<TReturn> {\n  try {\n    let iterResult = await generator.next();\n    while (!iterResult.done) {\n      await onYield?.(iterResult.value);\n      iterResult = await generator.next();\n    }\n    return iterResult.value;\n  } finally {\n    await generator.return?.(undefined as TReturn);\n  }\n}\n\nexport function* consumeIteratorInContext<T>(\n  context: Partial<RunnableConfig> | undefined,\n  iter: IterableIterator<T>\n): IterableIterator<T> {\n  while (true) {\n    const { value, done } = AsyncLocalStorageProviderSingleton.runWithConfig(\n      pickRunnableConfigKeys(context),\n      iter.next.bind(iter),\n      true\n    );\n    if (done) {\n      break;\n    } else {\n      yield value;\n    }\n  }\n}\n\nexport async function* consumeAsyncIterableInContext<T>(\n  context: Partial<RunnableConfig> | undefined,\n  iter: AsyncIterable<T>\n): AsyncIterableIterator<T> {\n  const iterator = iter[Symbol.asyncIterator]();\n  while (true) {\n    const { value, done } =\n      await AsyncLocalStorageProviderSingleton.runWithConfig(\n        pickRunnableConfigKeys(context),\n        iterator.next.bind(iter),\n        true\n      );\n    if (done) {\n      break;\n    } else {\n      yield value;\n    }\n  }\n}\n"],"mappings":";;;;AAIA,SAAgB,mBACd,OACoC;CACpC,OACE,OAAO,UAAU,YACjB,UAAU,QACV,OAAQ,MAAoB,OAAO,cAAc,cAEjD,OAAQ,MAAoB,SAAS;AAEzC;AAEA,MAAa,cAAc,MACzB,KAAK,QACL,OAAO,MAAM,YACb,UAAU,KACV,OAAO,EAAE,SAAS;AAEpB,SAAgB,gBACd,OACiC;CACjC,OACE,OAAO,UAAU,YACjB,UAAU,QACV,OAAQ,MAAiC,OAAO,mBAC9C;AAEN;AAEA,SAAgB,iBAAiB,GAAiC;CAChE,OACE,KAAK,QACL,OAAO,MAAM,YACb,OAAQ,EAAqB,SAAS;AAE1C;AAEA,eAAsB,sBACpB,WACA,SACkB;CAClB,IAAI;EACF,IAAI,aAAa,MAAM,UAAU,KAAK;EACtC,OAAO,CAAC,WAAW,MAAM;GACvB,MAAM,UAAU,WAAW,KAAK;GAChC,aAAa,MAAM,UAAU,KAAK;EACpC;EACA,OAAO,WAAW;CACpB,UAAU;EACR,MAAM,UAAU,SAAS,KAAA,CAAoB;CAC/C;AACF;AAEA,UAAiB,yBACf,SACA,MACqB;CACrB,OAAO,MAAM;EACX,MAAM,EAAE,OAAO,SAASA,cAAAA,mCAAmC,cACzDC,eAAAA,uBAAuB,OAAO,GAC9B,KAAK,KAAK,KAAK,IAAI,GACnB,IACF;EACA,IAAI,MACF;OAEA,MAAM;CAEV;AACF;AAEA,gBAAuB,8BACrB,SACA,MAC0B;CAC1B,MAAM,WAAW,KAAK,OAAO,cAAc,CAAC;CAC5C,OAAO,MAAM;EACX,MAAM,EAAE,OAAO,SACb,MAAMD,cAAAA,mCAAmC,cACvCC,eAAAA,uBAAuB,OAAO,GAC9B,SAAS,KAAK,KAAK,IAAI,GACvB,IACF;EACF,IAAI,MACF;OAEA,MAAM;CAEV;AACF"}