@typescript-package/data
Version:
A lightweight TypeScript library for basic data management.
1 lines • 20 kB
Source Map (JSON)
{"version":3,"file":"typescript-package-data.mjs","sources":["../../../package/data/src/lib/immutability.abstract.ts","../../../package/data/src/lib/data-core.abstract.ts","../../../package/data/src/lib/value.class.ts","../../../package/data/src/lib/data.class.ts","../../../package/data/src/lib/named-weak-data.class.ts","../../../package/data/src/lib/weak-data.class.ts","../../../package/data/src/lib/index.ts","../../../package/data/src/public-api.ts","../../../package/data/src/typescript-package-data.ts"],"sourcesContent":["/**\n * @description Manages the immutability states of `this` current instance.\n * @export\n * @abstract\n * @class Immutability\n */\nexport abstract class Immutability {\n /**\n * @description\n * @template Type \n * @param {Type} object \n * @returns {Readonly<Type>} \n */\n public static deepFreeze<Type>(object: Type): Readonly<Type> {\n if (object && typeof object === \"object\" && !Object.isFrozen(object)) {\n Object.getOwnPropertyNames(object).forEach(prop => Immutability.deepFreeze((object as any)[prop]));\n Object.freeze(object);\n }\n return object;\n }\n\n /**\n * @description Privately stored locked state as `true` if locked, otherwise `false`.\n * @type {boolean}\n */\n #locked = false;\n\n /**\n * @description Deeply freezes current `this` instance.\n * @public\n * @returns {this} Returns current instance.\n */\n public deepFreeze(): this {\n if (this.isLocked()) {\n throw new Error('Cannot freeze a locked object.');\n }\n Immutability.deepFreeze(this);\n return this;\n }\n\n /**\n * @description \"Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\"\n * @public\n * @returns {this} Returns current instance.\n */\n public freeze(): this {\n if (this.isLocked()) {\n throw new Error('Cannot freeze a locked object.');\n }\n Object.freeze(this);\n return this;\n }\n\n /**\n * @description Checks whether `this` current instance is frozen.\n * @public\n * @returns {boolean}\n */\n public isFrozen(): boolean {\n return Object.isFrozen(this);\n }\n\n /**\n * @description Checks whether the current instance is locked.\n * @public\n * @returns {boolean} Returns a `boolean` indicating whether current instance is locked.\n */\n public isLocked() {\n return this.#locked === true;\n }\n\n /**\n * @description Checks whether the object is mutable.\n * @public\n * @returns {boolean} True if the object is mutable, otherwise `false`.\n */\n public isMutable(): boolean {\n return !this.isSealed() && !this.isFrozen() && !this.isLocked();\n }\n\n /**\n * @description Checks whether `this` current instance is sealed.\n * @public\n * @returns {boolean} Returns a `boolean` indicating whether current instance is sealed.\n */\n public isSealed(): boolean {\n return Object.isSealed(this);\n }\n\n /**\n * @description Locks the object, means deeply freezes and blocks the `set()`, ensuring deep immutability.\n * It combines the features of `Object.freeze`, but extends immutability to nested structures (deep immutability).\n * @public\n * @returns {this} Returns current instance.\n */\n public lock(): this {\n Immutability.deepFreeze(this);\n this.#locked = true;\n return this;\n }\n\n /**\n * @description \"Prevents the modification of attributes of existing properties, and prevents the addition of new properties.\"\n * @public\n * @returns {this} Returns current instance.\n */\n public seal(): this {\n if (this.isLocked()) {\n throw new Error('Cannot seal a locked object.');\n }\n Object.seal(this);\n return this;\n }\n\n /**\n * @description Validates the ability to set the value.\n * @protected\n * @returns {this} Returns current instance.\n */\n protected validate(): this {\n if (this.isLocked()) {\n throw new Error('Cannot set when data is locked.');\n }\n return this;\n }\n}\n","// Abstract.\nimport { Immutability } from './immutability.abstract';\n/**\n * @description The base abstraction with immutability for handling data-related classes.\n * @export\n * @abstract\n * @class DataCore\n * @template Type Represents the type of data value.\n * @extends {Immutability}\n */\nexport abstract class DataCore<Type> extends Immutability {\n /**\n * @description Returns the `string` tag representation of the `DataCore` class when used in `Object.prototype.toString.call(instance)`.\n * @public\n * @readonly\n * @type {string}\n */\n public get [Symbol.toStringTag](): string {\n return DataCore.name;\n }\n\n /**\n * @description Returns the value of generic type variable `Type`.\n * @public\n * @abstract\n * @readonly\n * @type {Type}\n */\n public abstract get value(): Type;\n\n /**\n * @description Abstract method to clear or remove the stored data value.\n * @public\n * @abstract\n * @returns {this} Returns current instance.\n */\n public abstract destroy(): this;\n\n /**\n * @inheritdoc\n * @public\n * @returns {this} \n */\n public override lock(): this {\n Immutability.deepFreeze(this.value);\n super.lock();\n return this;\n }\n\n /**\n * @description Sets the data value. Ensure `super.validate()` is called before invoking this method.\n * @public\n * @abstract\n * @param {Type} value The data of `Type` to set.\n * @returns {this} Returns current instance.\n */ \n public abstract set(value: Type): this;\n}\n","/**\n * @description The class to manage the value of generic type variable `Type`.\n * @export\n * @class Value\n * @template Type The type of the privately stored `#value`.\n */\nexport class Value<Type> {\n /**\n * @description Returns the `string` tag representation of the `Value` class when used in `Object.prototype.toString.call(instance)`.\n * The `tag` getter returns the actual class name defined with the `Symbol.toStringTag()` of the child class.\n * @public\n * @readonly\n * @type {string}\n */\n public get [Symbol.toStringTag]() {\n return Value.name;\n }\n\n /**\n * @description Returns the string tag of the current instance defined by the `Symbol.toStringTag`.\n * @public\n * @returns {string | undefined} The extracted class name, such as `'Value'`, or `undefined` if extraction fails.\n */\n public get tag(): string | undefined {\n const tag = Object.prototype.toString.call(this).slice(8, -1);\n return tag !== 'Object' ? tag : undefined;\n }\n\n /**\n * @description Returns the privately stored value of generic type variable `Type`.\n * @public\n * @readonly\n * @type {Type} \n */\n public get value() {\n return this.#value;\n }\n\n /**\n * @description Privately stored value of generic type variable `Type`.\n * @type {Type}\n */\n #value: Type;\n\n /**\n * Creates an instance of child class.\n * @constructor\n * @param {Type} value The value of generic type variable `Type`.\n */\n constructor(value: Type) {\n this.#value = value;\n }\n\n /**\n * @description Sets the value of generic type variable `Type`.\n * @protected\n * @returns {this} Returns `this` current instance.\n */\n public set(value: Type) {\n this.#value = value;\n return this;\n }\n}\n","// Abstract.\nimport { DataCore } from './data-core.abstract';\n// Class.\nimport { Value } from './value.class';\n/**\n * @description The `Data` class is a concrete class that wraps a value and provides methods for setting, retrieving, and destroying the value.\n * @export\n * @class Data\n * @template Type \n * @extends {DataCore<Type>}\n */\nexport class Data<Type> extends DataCore<Type> {\n /**\n * @description Returns the `string` tag representation of the `Data` class when used in `Object.prototype.toString.call(instance)`.\n * @public\n * @readonly\n * @type {string}\n */\n public override get [Symbol.toStringTag](): string {\n return Data.name;\n }\n \n /**\n * @description Returns the privately stored value of generic type variable `Type`.\n * @public\n * @readonly\n * @type {Type}\n */\n public get value(): Type {\n return this.#value.value;\n }\n\n /**\n * @description Privately stored value of class `Value`.\n * @type {Value<Type>}\n */\n #value;\n\n /**\n * Creates an instance of `Data` child class.\n * @constructor\n * @param {Type} value Initial data value of generic type variable `Type`.\n */\n constructor(value: Type) {\n super();\n this.#value = new Value(value);\n }\n\n /**\n * @description Destroys the `Value` object by setting it to `null`.\n * @public\n * @returns {this} Returns the current instance.\n */\n public destroy(): this {\n this.#value = null as any;\n return this;\n }\n\n /**\n * @description Sets the data value.\n * @public\n * @param {Type} value The data of `Type` to set.\n * @returns {this} Returns the current instance.\n */\n public set(value: Type) {\n super.validate();\n this.#value!.set(value);\n return this;\n }\n}\n","// Abstract.\nimport { DataCore } from './data-core.abstract';\n/**\n * @description The `NamedWeakData` class is a concrete class that manages data in a static `Map` where data is associated with a specified name.\n * @export\n * @class NamedWeakData\n * @template [Type=any] \n * @template {string} [Name='default'] \n * @extends {DataCore<Type>}\n */\nexport class NamedWeakData<Type = any, Name extends string = 'default'> extends DataCore<Type> {\n /**\n * @description Gets the data from another instance.\n * @public\n * @static\n * @template {string} Name \n * @template Type \n * @param {NamedWeakData<Name, Type>} instance Another instance from which to get the data.\n * @param {Name} name The name from which get the data.\n * @returns {Type} The value of the data stored in the given instance.\n */\n public static getFrom<Name extends string, Type>(instance: NamedWeakData<Type, Name>, name: Name): Type {\n return NamedWeakData.#value.get(name)?.get(instance);\n }\n\n /**\n * @description Returns the `string` tag representation of the `NamedWeakData` class when used in `Object.prototype.toString.call(instance)`.\n * @public\n * @readonly\n * @type {string}\n */\n public override get [Symbol.toStringTag](): string {\n return NamedWeakData.name;\n }\n\n\n /**\n * @description A private static `Map` stores under specified `string` type name the data value instance in `WeakMap`.\n * @static\n * @readonly\n * @type {Map<string, WeakMap<any, any>>}\n */\n static readonly #value: Map<string, WeakMap<any, any>> = new Map();\n\n /**\n * @description Returns the privately stored data value from the specified name of static `Map`.\n * @public\n * @readonly\n * @type {Type}\n */\n public get value(): Type {\n return NamedWeakData.#value.get(this.name)?.get(this);\n }\n\n /**\n * Creates an instance of `NamedWeakData` child class.\n * @constructor\n * @param {Type} value Initial data value of `Type`.\n * @param {string} [name='default'] The name under which the value is stored, defaults to `default`.\n */ \n constructor(value: Type, private name: Name = 'default' as Name) {\n super();\n NamedWeakData.#value.get(name) === undefined && NamedWeakData.#value.set(name, new WeakMap<any, any>());\n NamedWeakData.#value.get(name)!.set(this, value);\n }\n\n /**\n * @description \n * @public\n * @returns {this} Returns `this` current instance.\n */\n public clear(): this {\n NamedWeakData.#value.clear(); \n return this;\n }\n\n /**\n * @description \n * @public\n * @returns {this} Returns `this` current instance.\n */\n public destroy(): this {\n NamedWeakData.#value.get(this.name)?.delete(this);\n this.clear();\n return this;\n }\n\n /**\n * @description Sets the data value.\n * @public\n * @param {Type} value The data of `Type` to set.\n * @returns {this} Returns `this` current instance.\n */\n public set(value: Type): this {\n super.validate();\n NamedWeakData.#value.get(this.name)?.set(this, value);\n return this;\n }\n}\n","// Abstract.\nimport { DataCore } from './data-core.abstract';\n/**\n * @description The `WeakData` class is a concrete class that stores data in a static `WeakMap`.\n * @export\n * @class WeakData\n * @template Type \n * @extends {DataCore<Type>}\n */\nexport class WeakData<Type> extends DataCore<Type> {\n /**\n * @description Gets the data value from another instance.\n * @public\n * @static\n * @template Type \n * @param {DataStore<Type>} instance Another instance from which to get the data.\n * @returns {Type} The value of the data stored in the given instance.\n */\n public static get<Type>(instance: WeakData<Type>): Type {\n return WeakData.#value.get(instance);\n }\n\n /**\n * @description Returns the `string` tag representation of the `WeakData` class when used in `Object.prototype.toString.call(instance)`.\n * @public\n * @readonly\n * @type {string}\n */\n public override get [Symbol.toStringTag](): string {\n return WeakData.name;\n }\n\n /**\n * @description A static, privately stored `WeakMap` used for associating each instance with its value.\n * @readonly\n * @type {WeakMap}\n */\n static readonly #value = new WeakMap<any, any>();\n\n /**\n * @description\n * @public\n * @readonly\n * @type {Type}\n */\n public get value(): Type {\n return WeakData.#value.get(this) as Type;\n }\n\n /**\n * Creates an instance of `WeakData` child class.\n * @constructor\n * @param {Type} value Initial data value of `Type`.\n */ \n constructor(value: Type) {\n super();\n WeakData.#value.set(this, value);\n }\n\n /**\n * @description Destroys the value in a static `WeakMap`.\n * @public\n * @returns {this} Returns current instance.\n */\n public destroy(): this {\n WeakData.#value.delete(this);\n return this;\n }\n\n /**\n * @description Sets the data value in a static `WeakMap`.\n * @public\n * @param {Type} value The data of `Type` to set.\n * @returns {this} Returns current instance.\n */ \n public set(value: Type): this {\n super.validate();\n WeakData.#value.set(this, value);\n return this;\n }\n}\n","// Abstract class.\nexport { DataCore } from './data-core.abstract';\nexport { Immutability } from './immutability.abstract';\n// Class.\nexport { Data } from './data.class';\nexport { NamedWeakData } from './named-weak-data.class';\nexport { Value } from './value.class';\nexport { WeakData } from './weak-data.class';","/*\n * Public API Surface of data\n */\nexport {\n // Abstract.\n DataCore,\n Immutability,\n\n // Class.\n Data,\n NamedWeakData,\n WeakData,\n Value\n} from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}