UNPKG

@azure/cosmos

Version:
78 lines (77 loc) 3.59 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 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 });