UNPKG

@azure/cosmos

Version:
119 lines (118 loc) 5.2 kB
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 QueryControlFetchImplementation_exports = {}; __export(QueryControlFetchImplementation_exports, { QueryControlFetchImplementation: () => QueryControlFetchImplementation }); module.exports = __toCommonJS(QueryControlFetchImplementation_exports); var import_headerUtils = require("./headerUtils.js"); var import_ContinuationTokenManagerFactory = require("./ContinuationTokenManager/ContinuationTokenManagerFactory.js"); var import_common = require("../common/index.js"); class QueryControlFetchImplementation { constructor(endpoint, pageSize, collectionLink, continuationToken, isOrderByQuery, querySupportsTokens) { this.endpoint = endpoint; this.pageSize = pageSize; this.querySupportsTokens = querySupportsTokens; this.continuationTokenManager = import_ContinuationTokenManagerFactory.ContinuationTokenManagerFactory.create( collectionLink, continuationToken, isOrderByQuery ); } // Required fields for query control - not optional continuationTokenManager; querySupportsTokens; async fetchMore(diagnosticNode, fetchBuffer) { const fetchMoreRespHeaders = (0, import_headerUtils.getInitialHeader)(); if (this.querySupportsTokens) { return this._handleQueryFetch(diagnosticNode, fetchBuffer, fetchMoreRespHeaders); } else { return this._handleSimpleBufferFetch(diagnosticNode, fetchBuffer, fetchMoreRespHeaders); } } async _handleSimpleBufferFetch(diagnosticNode, fetchBuffer, fetchMoreRespHeaders) { if (fetchBuffer.length > 0) { const temp2 = fetchBuffer.slice(0, this.pageSize); fetchBuffer.splice(0, this.pageSize); return { result: temp2, headers: fetchMoreRespHeaders }; } const response = await this.endpoint.fetchMore(diagnosticNode); (0, import_headerUtils.mergeHeaders)(fetchMoreRespHeaders, response.headers); if (!response?.result?.buffer?.length) { return this._createEmptyResult(response?.headers); } fetchBuffer.length = 0; fetchBuffer.push(...response.result.buffer); const temp = fetchBuffer.slice(0, this.pageSize); fetchBuffer.splice(0, this.pageSize); return { result: temp, headers: fetchMoreRespHeaders }; } async _handleQueryFetch(diagnosticNode, fetchBuffer, fetchMoreRespHeaders) { if (fetchBuffer.length > 0) { const { endIndex: endIndex2, continuationToken: continuationToken2 } = this.continuationTokenManager.paginateResults( this.pageSize, false ); const temp2 = fetchBuffer.slice(0, endIndex2); fetchBuffer.splice(0, endIndex2); this._setContinuationTokenInHeaders(continuationToken2, fetchMoreRespHeaders); return { result: temp2, headers: fetchMoreRespHeaders }; } fetchBuffer.length = 0; const response = await this.endpoint.fetchMore(diagnosticNode); (0, import_headerUtils.mergeHeaders)(fetchMoreRespHeaders, response.headers); if (!response?.result?.buffer || response.result.buffer.length === 0) { const { continuationToken: continuationToken2 } = this.continuationTokenManager.paginateResults( this.pageSize, true, // isResponseEmpty = true response?.result // Pass response data for processing ); this._setContinuationTokenInHeaders(continuationToken2, fetchMoreRespHeaders); return this._createEmptyResult(fetchMoreRespHeaders); } fetchBuffer.push(...response.result.buffer); const { endIndex, continuationToken } = this.continuationTokenManager.paginateResults( this.pageSize, false, // isResponseEmpty = false response.result // Pass response data for processing ); const temp = fetchBuffer.slice(0, endIndex); fetchBuffer.splice(0, endIndex); this._setContinuationTokenInHeaders(continuationToken, fetchMoreRespHeaders); return { result: temp, headers: fetchMoreRespHeaders }; } _setContinuationTokenInHeaders(continuationToken, fetchMoreRespHeaders) { if (continuationToken) { Object.assign(fetchMoreRespHeaders, { [import_common.Constants.HttpHeaders.Continuation]: continuationToken }); } } _createEmptyResult(headers) { const hdrs = headers || (0, import_headerUtils.getInitialHeader)(); return { result: [], headers: hdrs }; } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { QueryControlFetchImplementation });