@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
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.
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWRlbnRpZmllci5qcyIsInNvdXJjZVJvb3QiOiIuLi8iLCJzb3VyY2VzIjpbIk1vZGVsL0lkZW50aWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxxR0FBcUc7OztBQWNyRzs7OztHQUlHO0FBQ0gsTUFBc0IsVUFBVTtJQUM1Qjs7Ozs7T0FLRztJQUNILFlBQ2EsRUFBSyxFQUNMLElBQU8sRUFDUCxRQUFXO1FBRlgsT0FBRSxHQUFGLEVBQUUsQ0FBRztRQUNMLFNBQUksR0FBSixJQUFJLENBQUc7UUFDUCxhQUFRLEdBQVIsUUFBUSxDQUFHO0lBRXhCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLEtBQVU7UUFDYixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzlELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLFVBQXlCO1FBQ3BDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsUUFBUTtRQUNKLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUM7SUFDbkcsQ0FBQztJQUtEOzs7O09BSUc7SUFDTyxjQUFjLENBQUMsTUFBUztRQUM5QixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFM0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxJQUFJLGlCQUFpQixLQUFLLFNBQVM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUUvQyxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDeEIsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUMvRCxjQUFjLElBQUksS0FBSyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7U0FDL0M7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVU7UUFDM0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDdEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFeEMsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxTQUFTO1lBQUUsT0FBTyxVQUFVLEtBQUssV0FBVyxDQUFDO1FBQzdGLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEUsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksV0FBVyxLQUFLLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUxRSxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN4RCxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUNsRixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7U0FDMUQ7UUFDRCxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQW9CLEVBQUU7WUFDNUUsSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDbEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQ3pEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBbkZELGdDQW1GQztBQXFDTSxNQUFNLGtCQUFrQixHQUF1QixDQUNsRCxJQUFvQixFQUNwQixJQUF3QyxFQUN4QyxjQUF5QixFQUN6QixRQUF5QyxFQUNiLEVBQUU7SUFDOUIsT0FBTyxDQUFDLE1BQU0sRUFBZSxFQUFFO1FBQzNCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFaEUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM1QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssY0FBYztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RFLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUN4QixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDaEUsSUFBSSxDQUFFLGVBQTRDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDO2FBQ3hGO1NBQ0o7UUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0RSxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUxRSxJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFakUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBeEJXLFFBQUEsa0JBQWtCLHNCQXdCN0IifQ==