@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
JavaScript
;
// 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==