@azure/search-documents
Version:
Azure client library to use AI Search for node.js and browser.
144 lines (143 loc) • 4.98 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var pagingHelpers_exports = {};
__export(pagingHelpers_exports, {
buildPagedAsyncIterator: () => buildPagedAsyncIterator
});
module.exports = __toCommonJS(pagingHelpers_exports);
var import_core_client = require("@azure-rest/core-client");
var import_core_rest_pipeline = require("@azure/core-rest-pipeline");
function buildPagedAsyncIterator(client, getInitialResponse, processResponseBody, expectedStatuses, options = {}) {
const itemName = options.itemName ?? "value";
const nextLinkName = options.nextLinkName ?? "nextLink";
const nextLinkMethod = options.nextLinkMethod ?? "GET";
const apiVersion = options.apiVersion;
const pagedResult = {
getPage: async (pageLink) => {
let result;
if (pageLink === void 0) {
result = await getInitialResponse();
} else {
const resolvedPageLink = apiVersion ? addApiVersionToUrl(pageLink, apiVersion) : pageLink;
result = nextLinkMethod === "POST" ? await client.pathUnchecked(resolvedPageLink).post() : await client.pathUnchecked(resolvedPageLink).get();
}
checkPagingRequest(result, expectedStatuses);
const results = await processResponseBody(result);
const nextLink = getNextLink(results, nextLinkName);
const values = getElements(results, itemName);
return {
page: values,
nextPageLink: nextLink
};
},
byPage: (settings) => {
const { continuationToken } = settings ?? {};
return getPageAsyncIterator(pagedResult, {
pageLink: continuationToken
});
}
};
return getPagedAsyncIterator(pagedResult);
}
function getPagedAsyncIterator(pagedResult) {
const iter = getItemAsyncIterator(pagedResult);
return {
next() {
return iter.next();
},
[Symbol.asyncIterator]() {
return this;
},
byPage: pagedResult?.byPage ?? ((settings) => {
const { continuationToken } = settings ?? {};
return getPageAsyncIterator(pagedResult, {
pageLink: continuationToken
});
})
};
}
async function* getItemAsyncIterator(pagedResult) {
const pages = getPageAsyncIterator(pagedResult);
for await (const page of pages) {
yield* page;
}
}
async function* getPageAsyncIterator(pagedResult, options = {}) {
const { pageLink } = options;
let response = await pagedResult.getPage(pageLink ?? pagedResult.firstPageLink);
if (!response) {
return;
}
let result = response.page;
result.continuationToken = response.nextPageLink;
yield result;
while (response.nextPageLink) {
response = await pagedResult.getPage(response.nextPageLink);
if (!response) {
return;
}
result = response.page;
result.continuationToken = response.nextPageLink;
yield result;
}
}
function getNextLink(body, nextLinkName) {
if (!nextLinkName) {
return void 0;
}
const nextLink = body[nextLinkName];
if (typeof nextLink !== "string" && typeof nextLink !== "undefined" && nextLink !== null) {
throw new import_core_rest_pipeline.RestError(
`Body Property ${nextLinkName} should be a string or undefined or null but got ${typeof nextLink}`
);
}
if (nextLink === null) {
return void 0;
}
return nextLink;
}
function getElements(body, itemName) {
const value = body[itemName];
if (!Array.isArray(value)) {
throw new import_core_rest_pipeline.RestError(
`Couldn't paginate response
Body doesn't contain an array property with name: ${itemName}`
);
}
return value ?? [];
}
function checkPagingRequest(response, expectedStatuses) {
if (!expectedStatuses.includes(response.status)) {
throw (0, import_core_client.createRestError)(
`Pagination failed with unexpected statusCode ${response.status}`,
response
);
}
}
function addApiVersionToUrl(url, apiVersion) {
const urlObj = new URL(url, "https://microsoft.com");
if (!urlObj.searchParams.get("api-version")) {
return `${url}${Array.from(urlObj.searchParams.keys()).length > 0 ? "&" : "?"}api-version=${apiVersion}`;
}
return url;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
buildPagedAsyncIterator
});
//# sourceMappingURL=pagingHelpers.js.map