UNPKG

@dolittle/sdk.common

Version:

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

118 lines 8.93 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.createIsIdentifier = exports.Identifier = void 0; /** * Defines an identifier in an application model. * @template I The type of the globally unique id of the identifier. * @template E The type of the extra data of the identifier. */ class Identifier { /** * Initialises a new instance of the {@link Identifier} class. * @param {I} id - The globally unique id for the identifier. * @param {string} type - The unique name of the identifier. * @param {E} __extras - The extra data for the identifier. */ constructor(id, type, __extras) { this.id = id; this.type = type; this.__extras = __extras; } /** @inheritdoc */ equals(other) { if (typeof other !== 'object' || other === null) return false; if (this.type !== other.type) return false; if (!this.id.equals(other.id)) return false; if (!this.extrasEquals(other)) return false; return true; } /** * Determines whether or not this identifier can coexist with another identifier. * By default identifiers with a similar id cannot coexist, but subtypes can implement custom logic. * @param {AnyIdentifier} identifier - The other identifier to check if can coexist with. * @returns {boolean} True if this identifier can coexist with the other identifier, false if not. */ canCoexistWith(identifier) { return false; } /** @inheritdoc */ toString() { return `${this[Symbol.toStringTag]}(${this.id.value.toString()}${this.createExtraToString()})`; } /** * Selects properties from the extra data to include while computing {@link Identifier.toString}. * @param {Extras} extras - The extra data of the identifier. * @returns {object | undefined} An object with the properties to include, or undefined. */ toStringExtras(extras) { return extras; } createExtraToString() { if (this.__extras === undefined) return ''; const extraToStringData = this.toStringExtras(this.__extras); if (extraToStringData === undefined) return ''; let extrasToString = ''; for (const [property, value] of Object.entries(extraToStringData)) { extrasToString += `, ${property}: ${value}`; } return extrasToString; } extrasEquals(other) { const { __extras: thisExtras } = this; const { __extras: otherExtras } = other; if (thisExtras === undefined || otherExtras === undefined) return thisExtras === otherExtras; if (typeof thisExtras !== 'object' || thisExtras === null) return false; if (typeof otherExtras !== 'object' || otherExtras === null) return false; for (const [property, value] of Object.entries(thisExtras)) { if (typeof value.equals !== 'function' || value.equals.length !== 1) return false; if (!value.equals(otherExtras[property])) return false; } for (const [property, value] of Object.entries(otherExtras)) { if (typeof value.equals !== 'function' || value.equals.length !== 1) return false; if (!value.equals(thisExtras[property])) return false; } return true; } } exports.Identifier = Identifier; const createIsIdentifier = (type, isId, identifierType, isExtras) => { return (object) => { if (typeof object !== 'object' || object === null) return false; const { type, id, __extras, equals, toString } = object; if (!isId(id)) return false; if (typeof type !== 'string' || type !== identifierType) return false; if (isExtras !== undefined) { for (const [property, isExtraProperty] of Object.entries(isExtras)) { if (!isExtraProperty(__extras[property])) return false; } } if (typeof equals !== 'function' || equals.length !== 1) return false; if (typeof toString !== 'function' || toString.length !== 0) return false; if (typeof object[Symbol.toStringTag] !== 'string') return false; return true; }; }; exports.createIsIdentifier = createIsIdentifier; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWRlbnRpZmllci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzIjpbIk1vZGVsL0lkZW50aWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxxR0FBcUc7OztBQWNyRzs7OztHQUlHO0FBQ0gsTUFBc0IsVUFBVTtJQUM1Qjs7Ozs7T0FLRztJQUNILFlBQ2EsRUFBSyxFQUNMLElBQU8sRUFDUCxRQUFXO1FBRlgsT0FBRSxHQUFGLEVBQUUsQ0FBRztRQUNMLFNBQUksR0FBSixJQUFJLENBQUc7UUFDUCxhQUFRLEdBQVIsUUFBUSxDQUFHO0lBRXhCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLEtBQVU7UUFDYixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzlELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLFVBQXlCO1FBQ3BDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsUUFBUTtRQUNKLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUM7SUFDbkcsQ0FBQztJQUtEOzs7O09BSUc7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