@azure/cosmos
Version:
Microsoft Azure Cosmos DB Service Node.js SDK for NOSQL API
78 lines (77 loc) • 3.59 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 CollectionRoutingMapFactory_exports = {};
__export(CollectionRoutingMapFactory_exports, {
createCompleteRoutingMap: () => createCompleteRoutingMap
});
module.exports = __toCommonJS(CollectionRoutingMapFactory_exports);
var import_constants = require("../common/constants.js");
var import_inMemoryCollectionRoutingMap = require("./inMemoryCollectionRoutingMap.js");
function compareRanges(a, b) {
const aVal = a[0][import_constants.Constants.PartitionKeyRange.MinInclusive];
const bVal = b[0][import_constants.Constants.PartitionKeyRange.MinInclusive];
if (aVal > bVal) {
return 1;
}
if (aVal < bVal) {
return -1;
}
return 0;
}
function createCompleteRoutingMap(partitionKeyRangeInfoTuppleList) {
const rangeById = {};
const rangeByInfo = {};
let sortedRanges = [];
for (const r of partitionKeyRangeInfoTuppleList) {
rangeById[r[0][import_constants.Constants.PartitionKeyRange.Id]] = r;
rangeByInfo[r[1]] = r[0];
sortedRanges.push(r);
}
sortedRanges = sortedRanges.sort(compareRanges);
const partitionKeyOrderedRange = sortedRanges.map((r) => r[0]);
const orderedPartitionInfo = sortedRanges.map((r) => r[1]);
if (!isCompleteSetOfRange(partitionKeyOrderedRange)) {
return void 0;
}
return new import_inMemoryCollectionRoutingMap.InMemoryCollectionRoutingMap(partitionKeyOrderedRange, orderedPartitionInfo);
}
function isCompleteSetOfRange(partitionKeyOrderedRange) {
let isComplete = false;
if (partitionKeyOrderedRange.length > 0) {
const firstRange = partitionKeyOrderedRange[0];
const lastRange = partitionKeyOrderedRange[partitionKeyOrderedRange.length - 1];
isComplete = firstRange[import_constants.Constants.PartitionKeyRange.MinInclusive] === import_constants.Constants.EffectivePartitionKeyConstants.MinimumInclusiveEffectivePartitionKey;
isComplete = isComplete && lastRange[import_constants.Constants.PartitionKeyRange.MaxExclusive] === import_constants.Constants.EffectivePartitionKeyConstants.MaximumExclusiveEffectivePartitionKey;
for (let i = 1; i < partitionKeyOrderedRange.length; i++) {
const previousRange = partitionKeyOrderedRange[i - 1];
const currentRange = partitionKeyOrderedRange[i];
isComplete = isComplete && previousRange[import_constants.Constants.PartitionKeyRange.MaxExclusive] === currentRange[import_constants.Constants.PartitionKeyRange.MinInclusive];
if (!isComplete) {
if (previousRange[import_constants.Constants.PartitionKeyRange.MaxExclusive] > currentRange[import_constants.Constants.PartitionKeyRange.MinInclusive]) {
throw Error("Ranges overlap");
}
break;
}
}
}
return isComplete;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createCompleteRoutingMap
});