148 lines
4.5 KiB
JavaScript
148 lines
4.5 KiB
JavaScript
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
var _AbstractPage_client;
|
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "../internal/tslib.mjs";
|
|
import { OpenAIError } from "./error.mjs";
|
|
import { defaultParseResponse } from "../internal/parse.mjs";
|
|
import { APIPromise } from "./api-promise.mjs";
|
|
import { maybeObj } from "../internal/utils/values.mjs";
|
|
export class AbstractPage {
|
|
constructor(client, response, body, options) {
|
|
_AbstractPage_client.set(this, void 0);
|
|
__classPrivateFieldSet(this, _AbstractPage_client, client, "f");
|
|
this.options = options;
|
|
this.response = response;
|
|
this.body = body;
|
|
}
|
|
hasNextPage() {
|
|
const items = this.getPaginatedItems();
|
|
if (!items.length)
|
|
return false;
|
|
return this.nextPageRequestOptions() != null;
|
|
}
|
|
async getNextPage() {
|
|
const nextOptions = this.nextPageRequestOptions();
|
|
if (!nextOptions) {
|
|
throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');
|
|
}
|
|
return await __classPrivateFieldGet(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions);
|
|
}
|
|
async *iterPages() {
|
|
let page = this;
|
|
yield page;
|
|
while (page.hasNextPage()) {
|
|
page = await page.getNextPage();
|
|
yield page;
|
|
}
|
|
}
|
|
async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {
|
|
for await (const page of this.iterPages()) {
|
|
for (const item of page.getPaginatedItems()) {
|
|
yield item;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* This subclass of Promise will resolve to an instantiated Page once the request completes.
|
|
*
|
|
* It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:
|
|
*
|
|
* for await (const item of client.items.list()) {
|
|
* console.log(item)
|
|
* }
|
|
*/
|
|
export class PagePromise extends APIPromise {
|
|
constructor(client, request, Page) {
|
|
super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));
|
|
}
|
|
/**
|
|
* Allow auto-paginating iteration on an unawaited list call, eg:
|
|
*
|
|
* for await (const item of client.items.list()) {
|
|
* console.log(item)
|
|
* }
|
|
*/
|
|
async *[Symbol.asyncIterator]() {
|
|
const page = await this;
|
|
for await (const item of page) {
|
|
yield item;
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Note: no pagination actually occurs yet, this is for forwards-compatibility.
|
|
*/
|
|
export class Page extends AbstractPage {
|
|
constructor(client, response, body, options) {
|
|
super(client, response, body, options);
|
|
this.data = body.data || [];
|
|
this.object = body.object;
|
|
}
|
|
getPaginatedItems() {
|
|
return this.data ?? [];
|
|
}
|
|
nextPageRequestOptions() {
|
|
return null;
|
|
}
|
|
}
|
|
export class CursorPage extends AbstractPage {
|
|
constructor(client, response, body, options) {
|
|
super(client, response, body, options);
|
|
this.data = body.data || [];
|
|
this.has_more = body.has_more || false;
|
|
}
|
|
getPaginatedItems() {
|
|
return this.data ?? [];
|
|
}
|
|
hasNextPage() {
|
|
if (this.has_more === false) {
|
|
return false;
|
|
}
|
|
return super.hasNextPage();
|
|
}
|
|
nextPageRequestOptions() {
|
|
const data = this.getPaginatedItems();
|
|
const id = data[data.length - 1]?.id;
|
|
if (!id) {
|
|
return null;
|
|
}
|
|
return {
|
|
...this.options,
|
|
query: {
|
|
...maybeObj(this.options.query),
|
|
after: id,
|
|
},
|
|
};
|
|
}
|
|
}
|
|
export class ConversationCursorPage extends AbstractPage {
|
|
constructor(client, response, body, options) {
|
|
super(client, response, body, options);
|
|
this.data = body.data || [];
|
|
this.has_more = body.has_more || false;
|
|
this.last_id = body.last_id || '';
|
|
}
|
|
getPaginatedItems() {
|
|
return this.data ?? [];
|
|
}
|
|
hasNextPage() {
|
|
if (this.has_more === false) {
|
|
return false;
|
|
}
|
|
return super.hasNextPage();
|
|
}
|
|
nextPageRequestOptions() {
|
|
const cursor = this.last_id;
|
|
if (!cursor) {
|
|
return null;
|
|
}
|
|
return {
|
|
...this.options,
|
|
query: {
|
|
...maybeObj(this.options.query),
|
|
after: cursor,
|
|
},
|
|
};
|
|
}
|
|
}
|
|
//# sourceMappingURL=pagination.mjs.map
|