{"version":3,"file":"mapAsyncIterable.js","sourceRoot":"","sources":["../../src/execution/mapAsyncIterable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iCAAgC;AAGpD,OAAO,EAAE,yBAAyB,EAAE,wCAAuC;AAQ3E,MAAM,UAAU,gBAAgB,CAC9B,QAA8C,EAC9C,QAAyC;IAEzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,QAAQ;QACvB,CAAC,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACpC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAG,OAAO;QACrB,CAAC,CAAC,CAAC,MAAgB,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC,CAAC,QAAQ,CAAC;IAEb,OAAO,yBAAyB,CAC9B,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACxC,QAAQ,EACR,OAAO,CACR,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,EAA0B;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;AACH,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,oBAAoB,CAClC,QAAuD,EACvD,KAAsC;IAEtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,MAAM,MAAM,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["import { isPromise } from '../jsutils/isPromise.ts';\nimport type { PromiseOrValue } from '../jsutils/PromiseOrValue.ts';\n\nimport { withConcurrentAbruptClose } from './withConcurrentAbruptClose.ts';\n\n/**\n * Given an AsyncIterable and a callback function, return an AsyncIterator\n * which produces values mapped via calling the callback function.\n *\n * @internal\n */\nexport function mapAsyncIterable<T, U>(\n  iterable: AsyncGenerator<T> | AsyncIterable<T>,\n  callback: (value: T) => PromiseOrValue<U>,\n): AsyncGenerator<U, void, void> {\n  const iterator = iterable[Symbol.asyncIterator]();\n  const returnFn = iterator.return?.bind(iterator);\n  const throwFn = iterator.throw?.bind(iterator);\n\n  const onReturn = returnFn\n    ? () => callIgnoringErrors(returnFn)\n    : () => Promise.resolve();\n\n  const onThrow = throwFn\n    ? (reason?: unknown) => callIgnoringErrors(() => throwFn(reason))\n    : onReturn;\n\n  return withConcurrentAbruptClose(\n    mapAsyncIterableImpl(iterable, callback),\n    onReturn,\n    onThrow,\n  );\n}\n\nasync function callIgnoringErrors(fn: () => Promise<unknown>): Promise<void> {\n  try {\n    await fn();\n  } catch {\n    // ignore error\n  }\n}\n\nasync function* mapAsyncIterableImpl<T, U, R = undefined>(\n  iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>,\n  mapFn: (value: T) => PromiseOrValue<U>,\n): AsyncGenerator<U, void, void> {\n  for await (const value of iterable) {\n    const result = mapFn(value);\n    if (isPromise(result)) {\n      yield await result;\n      continue;\n    }\n    yield result;\n  }\n}\n"]}