in packages/azure-services/src/azure-cosmos/cosmos-client-wrapper.ts [125:175]
public async readItems<T>(
dbName: string,
collectionName: string,
query: cosmos.SqlQuerySpec | string,
continuationToken?: string,
throwIfNotSuccess: boolean = true,
): Promise<CosmosOperationResponse<T[]>> {
const container = await this.getContainer(dbName, collectionName);
try {
const itemsT: T[] = [];
const feedOptions: cosmos.FeedOptions = {
maxItemCount: CosmosClientWrapper.MAXIMUM_ITEM_COUNT,
continuation: continuationToken,
};
const queryIterator = container.items.query(query, feedOptions);
let partitionQueryResult;
do {
partitionQueryResult = await queryIterator.fetchNext();
} while (
partitionQueryResult !== undefined &&
partitionQueryResult.resources !== undefined &&
partitionQueryResult.resources.length === 0
);
if (partitionQueryResult.resources === undefined) {
return {
item: itemsT,
statusCode: 204, // HTTP NO CONTENT
};
}
const continuationTokenResponse = partitionQueryResult.continuationToken;
partitionQueryResult.resources.forEach((item) => {
itemsT.push(<T>(<unknown>item));
});
return {
item: itemsT,
statusCode: 200,
continuationToken: continuationTokenResponse,
};
} catch (error) {
this.logFailedResponse('queryItems', error, { db: dbName, collection: collectionName, query: JSON.stringify(query) });
return this.handleFailedOperationResponse('queryItems', error, throwIfNotSuccess);
}
}