UNPKG

graphql

Version:

A Query Language and Runtime which can target any service.

1 lines 2.83 kB
{"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"]}