@azure/cosmos
Version:
Microsoft Azure Cosmos DB Service Node.js SDK for NOSQL API
119 lines (118 loc) • 5.2 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 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
});