{"version":3,"file":"index.js","sources":["../src/getPagedAsyncIterator.ts"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { PageSettings, PagedAsyncIterableIterator, PagedResult } from \"./models\";\n\n/**\n * returns an async iterator that iterates over results. It also has a `byPage`\n * method that returns pages of items at once.\n *\n * @param pagedResult - an object that specifies how to get pages.\n * @returns a paged async iterator that iterates over results.\n */\nexport function getPagedAsyncIterator<\n  TElement,\n  TPage = TElement[],\n  TPageSettings = PageSettings,\n  TLink = string\n>(\n  pagedResult: PagedResult<TPage, TPageSettings, TLink>\n): PagedAsyncIterableIterator<TElement, TPage, TPageSettings> {\n  const iter = getItemAsyncIterator<TElement, TPage, TLink, TPageSettings>(pagedResult);\n  return {\n    next() {\n      return iter.next();\n    },\n    [Symbol.asyncIterator]() {\n      return this;\n    },\n    byPage:\n      pagedResult?.byPage ??\n      ((settings?: PageSettings) => {\n        const { continuationToken, maxPageSize } = settings ?? {};\n        return getPageAsyncIterator(pagedResult as PagedResult<TPage, PageSettings, TLink>, {\n          pageLink: continuationToken as unknown as TLink | undefined,\n          maxPageSize,\n        });\n      }),\n  };\n}\n\nasync function* getItemAsyncIterator<TElement, TPage, TLink, TPageSettings>(\n  pagedResult: PagedResult<TPage, TPageSettings, TLink>\n): AsyncIterableIterator<TElement> {\n  const pages = getPageAsyncIterator(pagedResult);\n  const firstVal = await pages.next();\n  // if the result does not have an array shape, i.e. TPage = TElement, then we return it as is\n  if (!Array.isArray(firstVal.value)) {\n    yield firstVal.value;\n    // `pages` is of type `AsyncIterableIterator<TPage>` but TPage = TElement in this case\n    yield* pages as unknown as AsyncIterableIterator<TElement>;\n  } else {\n    yield* firstVal.value;\n    for await (const page of pages) {\n      // pages is of type `AsyncIterableIterator<TPage>` so `page` is of type `TPage`. In this branch,\n      // it must be the case that `TPage = TElement[]`\n      yield* page as unknown as TElement[];\n    }\n  }\n}\n\nasync function* getPageAsyncIterator<TPage, TLink, TPageSettings>(\n  pagedResult: PagedResult<TPage, TPageSettings, TLink>,\n  options: {\n    maxPageSize?: number;\n    pageLink?: TLink;\n  } = {}\n): AsyncIterableIterator<TPage> {\n  const { pageLink, maxPageSize } = options;\n  let response = await pagedResult.getPage(pageLink ?? pagedResult.firstPageLink, maxPageSize);\n  yield response.page;\n  while (response.nextPageLink) {\n    response = await pagedResult.getPage(response.nextPageLink, maxPageSize);\n    yield response.page;\n  }\n}\n"],"names":["__await","__asyncDelegator","__asyncValues"],"mappings":";;;;;;AAAA;AAKA;;;;;;AAMG;AACG,SAAU,qBAAqB,CAMnC,WAAqD,EAAA;;AAErD,IAAA,MAAM,IAAI,GAAG,oBAAoB,CAAwC,WAAW,CAAC,CAAC;IACtF,OAAO;QACL,IAAI,GAAA;AACF,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;SACpB;QACD,CAAC,MAAM,CAAC,aAAa,CAAC,GAAA;AACpB,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,MAAM,EACJ,CAAA,EAAA,GAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAX,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,WAAW,CAAE,MAAM,MACnB,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,CAAC,QAAuB,KAAI;AAC3B,YAAA,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAR,QAAQ,GAAI,EAAE,CAAC;YAC1D,OAAO,oBAAoB,CAAC,WAAsD,EAAE;AAClF,gBAAA,QAAQ,EAAE,iBAAiD;gBAC3D,WAAW;AACZ,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;KACL,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAClC,WAAqD,EAAA;;;AAErD,QAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAMA,aAAA,CAAA,KAAK,CAAC,IAAI,EAAE,CAAA,CAAC;;QAEpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAClC,YAAA,MAAA,MAAAA,aAAA,CAAM,QAAQ,CAAC,KAAK,CAAA,CAAC;;YAErB,MAAAA,aAAA,CAAA,OAAOC,sBAAA,CAAAC,oBAAA,KAAmD,CAAA,CAAA,CAAA,CAAC;AAC5D,SAAA;AAAM,aAAA;YACL,MAAAF,aAAA,CAAA,OAAOC,sBAAA,CAAAC,mBAAA,CAAA,QAAQ,CAAC,KAAK,CAAA,CAAA,CAAA,CAAC;;AACtB,gBAAA,KAAyB,IAAA,OAAA,GAAAA,mBAAA,CAAA,KAAK,CAAA,EAAA,SAAA,EAAA,SAAA,GAAA,MAAAF,aAAA,CAAA,OAAA,CAAA,IAAA,EAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,GAAA;oBAAnB,MAAM,IAAI,kBAAA,CAAA;;;oBAGnB,MAAAA,aAAA,CAAA,OAAOC,sBAAA,CAAAC,oBAAA,IAA6B,CAAA,CAAA,CAAA,CAAC;AACtC,iBAAA;;;;;;;;;AACF,SAAA;KACF,CAAA,CAAA;AAAA,CAAA;AAED,SAAgB,oBAAoB,CAClC,WAAqD,EACrD,UAGI,EAAE,EAAA;;AAEN,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAC1C,IAAI,QAAQ,GAAG,MAAMF,aAAA,CAAA,WAAW,CAAC,OAAO,CAAC,QAAQ,KAAR,IAAA,IAAA,QAAQ,cAAR,QAAQ,GAAI,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA,CAAC;AAC7F,QAAA,MAAA,MAAAA,aAAA,CAAM,QAAQ,CAAC,IAAI,CAAA,CAAC;QACpB,OAAO,QAAQ,CAAC,YAAY,EAAE;AAC5B,YAAA,QAAQ,GAAG,MAAAA,aAAA,CAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA,CAAC;AACzE,YAAA,MAAA,MAAAA,aAAA,CAAM,QAAQ,CAAC,IAAI,CAAA,CAAC;AACrB,SAAA;KACF,CAAA,CAAA;AAAA;;;;"}