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
 |