@dolittle/sdk.artifacts
Version:
Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.
160 lines • 10.4 kB
JavaScript
"use strict";
// Copyright (c) Dolittle. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NestedMap = void 0;
const CannotAccessMapsOfNestedMapWithNoMoreLevels_1 = require("./CannotAccessMapsOfNestedMapWithNoMoreLevels");
const CannotAccessValuesOfNestedMapWithMoreLevels_1 = require("./CannotAccessValuesOfNestedMapWithMoreLevels");
const IncorrectNumberOfPrimitiveKeysProvided_1 = require("./IncorrectNumberOfPrimitiveKeysProvided");
/**
* Represents a {@link Map} that handles a set of primitive keys in a recursive structure.
*/
class NestedMap {
/**
* Initialises a new instance of the {@link NestedMap} class.
* @param {number} depth - The number of keys from this map and down.
*/
constructor(depth) {
this.depth = depth;
this._map = new Map();
/** @inheritdoc */
this[_a] = 'NestedMap';
}
/** @inheritdoc */
get size() {
if (this.depth === 1) {
return this._map.size;
}
let size = 0;
for (const subMap of this._maps.values()) {
size += subMap.size;
}
return size;
}
/** @inheritdoc */
has(key) {
this.throwIfIncorrectNumberOfPrimitiveKeysProvided(key);
const [first, ...rest] = key;
if (!this._map.has(first))
return false;
if (this.depth === 1) {
return true;
}
else {
return this._maps.get(first).has(rest);
}
}
/** @inheritdoc */
get(key) {
var _b;
this.throwIfIncorrectNumberOfPrimitiveKeysProvided(key);
const [first, ...rest] = key;
if (this.depth === 1) {
return this._values.get(first);
}
else {
return (_b = this._maps.get(first)) === null || _b === void 0 ? void 0 : _b.get(rest);
}
}
/** @inheritdoc */
set(key, value) {
this.throwIfIncorrectNumberOfPrimitiveKeysProvided(key);
const [first, ...rest] = key;
if (this.depth === 1) {
this._values.set(first, value);
}
else {
let map = this._maps.get(first);
if (map === undefined) {
map = new NestedMap(this.depth - 1);
this._maps.set(first, map);
}
map.set(rest, value);
}
return this;
}
/** @inheritdoc */
delete(key) {
this.throwIfIncorrectNumberOfPrimitiveKeysProvided(key);
const [first, ...rest] = key;
if (this.depth === 1) {
return this._values.delete(first);
}
else {
if (!this._maps.has(first)) {
return false;
}
const map = this._maps.get(first);
const deleted = map.delete(rest);
if (deleted && map.internalMapSize === 0) {
this._map.delete(first);
}
return deleted;
}
}
/** @inheritdoc */
clear() {
this._map.clear();
}
/** @inheritdoc */
*entries() {
for (const [first, entry] of this._map.entries()) {
if (this.depth === 1) {
yield [[first], entry];
}
else {
for (const [rest, value] of entry) {
yield [[first, ...rest], value];
}
}
}
}
/** @inheritdoc */
[(_a = Symbol.toStringTag, Symbol.iterator)]() {
return this.entries();
}
/** @inheritdoc */
*keys() {
for (const [key, _] of this.entries()) {
yield key;
}
}
/** @inheritdoc */
*values() {
for (const [_, value] of this.entries()) {
yield value;
}
}
/** @inheritdoc */
forEach(callbackfn, thisArg) {
for (const [key, value] of this.entries()) {
callbackfn.call(thisArg, value, key, this);
}
}
/**
* Gets the actual size of the internal map without recursing down into nested maps.
*/
get internalMapSize() {
return this._map.size;
}
throwIfIncorrectNumberOfPrimitiveKeysProvided(keys) {
if (keys.length !== this.depth) {
throw new IncorrectNumberOfPrimitiveKeysProvided_1.IncorrectNumberOfPrimitiveKeysProvided(keys.length, this.depth);
}
}
get _maps() {
if (this.depth === 1) {
throw new CannotAccessMapsOfNestedMapWithNoMoreLevels_1.CannotAccessMapsOfNestedMapWithNoMoreLevels();
}
return this._map;
}
get _values() {
if (this.depth !== 1) {
throw new CannotAccessValuesOfNestedMapWithMoreLevels_1.CannotAccessValuesOfNestedMapWithMoreLevels(this.depth);
}
return this._map;
}
}
exports.NestedMap = NestedMap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmVzdGVkTWFwLmpzIiwic291cmNlUm9vdCI6Ii4uLyIsInNvdXJjZXMiOlsiTWFwcGluZ3MvTmVzdGVkTWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0MscUdBQXFHOzs7O0FBRXJHLCtHQUE0RztBQUM1RywrR0FBNEc7QUFDNUcscUdBQWtHO0FBT2xHOztHQUVHO0FBQ0gsTUFBYSxTQUFTO0lBR2xCOzs7T0FHRztJQUNILFlBQXFCLEtBQWtCO1FBQWxCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFOdEIsU0FBSSxHQUFnRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBUy9FLGtCQUFrQjtRQUNsQixRQUFvQixHQUFHLFdBQVcsQ0FBQztJQUhuQyxDQUFDO0lBS0Qsa0JBQWtCO0lBQ2xCLElBQUksSUFBSTtRQUNKLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN6QjtRQUVELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN0QyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztTQUN2QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsR0FBRyxDQUFDLEdBQU07UUFDTixJQUFJLENBQUMsNkNBQTZDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFeEQsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztT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