UNPKG

@dolittle/sdk.artifacts

Version:

Dolittle is a decentralized, distributed, event-driven microservice platform built to harness the power of events.

91 lines 6.79 kB
"use strict"; // Copyright (c) Dolittle. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. Object.defineProperty(exports, "__esModule", { value: true }); exports.TypeMap = void 0; const CannotHaveMultipleKeysAssociatedWithType_1 = require("./CannotHaveMultipleKeysAssociatedWithType"); const CannotHaveMultipleTypesAssociatedWithKey_1 = require("./CannotHaveMultipleTypesAssociatedWithKey"); const ComplexValueMap_1 = require("./ComplexValueMap"); const ITypeMap_1 = require("./ITypeMap"); const KeyNotAssociatedWithType_1 = require("./KeyNotAssociatedWithType"); const TypeNotAssociatedWithKey_1 = require("./TypeNotAssociatedWithKey"); const UnableToResolveKey_1 = require("./UnableToResolveKey"); /** * Represents a system for associating complex valued keys to a type. * @template K The type of the key. * @template D The type of the decomposed complex key type. */ class TypeMap extends ITypeMap_1.ITypeMap { /** * Initialises a new instance of the {@link TypeMap} class. * @param {Constructor} _keyType - The type of the complex valued key. * @param {(K) => D} decomposer - The callback to use for decomposing the complex valye key to primitive types. * @param {number} depth - The length of a decomposed key. */ constructor(_keyType, decomposer, depth) { super(); this._keyType = _keyType; this._keysToTypes = new ComplexValueMap_1.ComplexValueMap(_keyType, decomposer, depth); this._typesToKeys = new Map(); } /** @inheritdoc */ hasFor(type) { return this._typesToKeys.has(type); } /** @inheritdoc */ getFor(type) { if (!this.hasFor(type)) { throw new TypeNotAssociatedWithKey_1.TypeNotAssociatedWithKey(type, this._keyType); } return this._typesToKeys.get(type); } /** @inheritdoc */ getAll() { return Array.from(this._typesToKeys.values()); } /** @inheritdoc */ hasTypeFor(key) { return this._keysToTypes.has(key); } /** @inheritdoc */ getTypeFor(key) { if (!this.hasTypeFor(key)) { throw new KeyNotAssociatedWithType_1.KeyNotAssociatedWithType(key); } return this._keysToTypes.get(key); } /** @inheritdoc */ getAllTypes() { return Array.from(this._typesToKeys.keys()); } /** @inheritdoc */ resolveFrom(object, input) { if (input !== undefined) { return input; } const type = Object.getPrototypeOf(object).constructor; if (this.hasFor(type)) { return this.getFor(type); } throw new UnableToResolveKey_1.UnableToResolveKey(object, this._keyType); } /** @inheritdoc */ associate(type, key) { this.throwIfTypeAlreadyAssociatedWithKey(type, key); this.throwIfKeyAlreadyAssociatedWithType(key, type); this._typesToKeys.set(type, key); this._keysToTypes.set(key, type); } throwIfTypeAlreadyAssociatedWithKey(type, key) { if (this.hasFor(type)) { throw new CannotHaveMultipleKeysAssociatedWithType_1.CannotHaveMultipleKeysAssociatedWithType(type, key, this.getFor(type), this._keyType); } } throwIfKeyAlreadyAssociatedWithType(key, type) { if (this.hasTypeFor(key)) { throw new CannotHaveMultipleTypesAssociatedWithKey_1.CannotHaveMultipleTypesAssociatedWithKey(key, type, this.getTypeFor(key), this._keyType); } } } exports.TypeMap = TypeMap; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZU1hcC5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzIjpbIk1hcHBpbmdzL1R5cGVNYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxxR0FBcUc7OztBQUdyRyx5R0FBc0c7QUFDdEcseUdBQXNHO0FBRXRHLHVEQUFtRTtBQUNuRSx5Q0FBc0M7QUFDdEMseUVBQXNFO0FBQ3RFLHlFQUFzRTtBQUN0RSw2REFBMEQ7QUFFMUQ7Ozs7R0FJRztBQUNILE1BQWEsT0FBb0MsU0FBUSxtQkFBVztJQUloRTs7Ozs7T0FLRztJQUNILFlBQ3FCLFFBQXdCLEVBQ3pDLFVBQXlCLEVBQ3pCLEtBQWtCO1FBRWxCLEtBQUssRUFBRSxDQUFDO1FBSlMsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFLekMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGlDQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNLENBQUMsSUFBc0I7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBQyxJQUFzQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQixNQUFNLElBQUksbURBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzRDtRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNO1FBQ0YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFVBQVUsQ0FBQyxHQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFVBQVUsQ0FBQyxHQUFNO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLG1EQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVc7UUFDUCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLE1BQVcsRUFBRSxLQUFTO1FBQzlCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7UUFFRCxNQUFNLElBQUksdUNBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFNBQVMsQ0FBQyxJQUFzQixFQUFFLEdBQU07UUFDcEMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsbUNBQW1DLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLElBQXNCLEVBQUUsR0FBTTtRQUN0RSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsTUFBTSxJQUFJLG1GQUF3QyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkc7SUFDTCxDQUFDO0lBRU8sbUNBQW1DLENBQUMsR0FBTSxFQUFFLElBQXNCO1FBQ3RFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksbUZBQXdDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0RztJQUNMLENBQUM7Q0FDSjtBQTFGRCwwQkEwRkMifQ==