"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. Object.defineProperty(exports, "__esModule", { value: true }); exports.getPagedAsyncIterator = void 0; const tslib_1 = require("tslib"); /** * returns an async iterator that iterates over results. It also has a `byPage` * method that returns pages of items at once. * * @param pagedResult - an object that specifies how to get pages. * @returns a paged async iterator that iterates over results. */ function getPagedAsyncIterator(pagedResult) { var _a; const iter = getItemAsyncIterator(pagedResult); return { next() { return iter.next(); }, [Symbol.asyncIterator]() { return this; }, byPage: (_a = pagedResult === null || pagedResult === void 0 ? void 0 : pagedResult.byPage) !== null && _a !== void 0 ? _a : ((settings) => { const { continuationToken, maxPageSize } = settings !== null && settings !== void 0 ? settings : {}; return getPageAsyncIterator(pagedResult, { pageLink: continuationToken, maxPageSize, }); }), }; } exports.getPagedAsyncIterator = getPagedAsyncIterator; function getItemAsyncIterator(pagedResult) { return tslib_1.__asyncGenerator(this, arguments, function* getItemAsyncIterator_1() { var _a, e_1, _b, _c, _d, e_2, _e, _f; const pages = getPageAsyncIterator(pagedResult); const firstVal = yield tslib_1.__await(pages.next()); // if the result does not have an array shape, i.e. TPage = TElement, then we return it as is if (!Array.isArray(firstVal.value)) { // can extract elements from this page const { toElements } = pagedResult; if (toElements) { yield tslib_1.__await(yield* tslib_1.__asyncDelegator(tslib_1.__asyncValues(toElements(firstVal.value)))); try { for (var _g = true, pages_1 = tslib_1.__asyncValues(pages), pages_1_1; pages_1_1 = yield tslib_1.__await(pages_1.next()), _a = pages_1_1.done, !_a; _g = true) { _c = pages_1_1.value; _g = false; const page = _c; yield tslib_1.__await(yield* tslib_1.__asyncDelegator(tslib_1.__asyncValues(toElements(page)))); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (!_g && !_a && (_b = pages_1.return)) yield tslib_1.__await(_b.call(pages_1)); } finally { if (e_1) throw e_1.error; } } } else { yield yield tslib_1.__await(firstVal.value); // `pages` is of type `AsyncIterableIterator` but TPage = TElement in this case yield tslib_1.__await(yield* tslib_1.__asyncDelegator(tslib_1.__asyncValues(pages))); } } else { yield tslib_1.__await(yield* tslib_1.__asyncDelegator(tslib_1.__asyncValues(firstVal.value))); try { for (var _h = true, pages_2 = tslib_1.__asyncValues(pages), pages_2_1; pages_2_1 = yield tslib_1.__await(pages_2.next()), _d = pages_2_1.done, !_d; _h = true) { _f = pages_2_1.value; _h = false; const page = _f; // pages is of type `AsyncIterableIterator` so `page` is of type `TPage`. In this branch, // it must be the case that `TPage = TElement[]` yield tslib_1.__await(yield* tslib_1.__asyncDelegator(tslib_1.__asyncValues(page))); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (!_h && !_d && (_e = pages_2.return)) yield tslib_1.__await(_e.call(pages_2)); } finally { if (e_2) throw e_2.error; } } } }); } function getPageAsyncIterator(pagedResult, options = {}) { return tslib_1.__asyncGenerator(this, arguments, function* getPageAsyncIterator_1() { const { pageLink, maxPageSize } = options; let response = yield tslib_1.__await(pagedResult.getPage(pageLink !== null && pageLink !== void 0 ? pageLink : pagedResult.firstPageLink, maxPageSize)); if (!response) { return yield tslib_1.__await(void 0); } yield yield tslib_1.__await(response.page); while (response.nextPageLink) { response = yield tslib_1.__await(pagedResult.getPage(response.nextPageLink, maxPageSize)); if (!response) { return yield tslib_1.__await(void 0); } yield yield tslib_1.__await(response.page); } }); } //# sourceMappingURL=getPagedAsyncIterator.js.map