@typescript-package/data
Version:
A lightweight TypeScript library for basic data management.
1 lines • 24.6 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/adapter-data.abstract.ts","../../../package/data/src/lib/base-data.abstract.ts","../../../package/data/src/lib/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 { [key: string]: unknown })[prop]));\n Object.freeze(object);\n }\n return object;\n }\n\n /**\n * @description\n * @public\n * @readonly\n * @type {boolean}\n */\n public get frozen() {\n return this.isFrozen();\n }\n\n /**\n * @description\n * @public\n * @readonly\n * @type {boolean}\n */\n public get locked() {\n return this.#locked;\n }\n\n /**\n * @description\n * @public\n * @readonly\n * @type {boolean}\n */\n public get mutable() {\n return this.isMutable();\n }\n\n /**\n * @description\n * @public\n * @readonly\n * @type {boolean}\n */\n public get sealed() {\n return this.isSealed();\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()) throw new Error('Cannot freeze a locked object.');\n return Immutability.deepFreeze(this), 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 return Object.freeze(this), 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 return Immutability.deepFreeze(this),\n this.#locked = true,\n 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()) throw new Error('Cannot seal a locked object.');\n return Object.seal(this), 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()) throw new Error('Cannot set when data is locked.');\n return this;\n }\n}\n","// Abstract.\nimport { Immutability } from './immutability.abstract';\nimport {\n // Type.\n AsyncReturn,\n IterValue,\n // Interface.\n DataShape\n} from '@typedly/data';\n/**\n * @description The core abstraction with immutability for handling data-related classes.\n * @export\n * @abstract\n * @class DataCore\n * @template T Represents the type of data value.\n * @template Async Indicates whether the operations are asynchronous.\n * @extends {Immutability}\n * @implements {DataShape<T>}\n */\nexport abstract class DataCore<T, Async extends boolean = false>\n // For immutability features.\n extends Immutability\n // For data shape contract, to use instead of `DataCore`.\n implements DataShape<T, Async> {\n /**\n * @description Symbol key for accessing the value of the data instance.\n * @public\n * @static \n * @type {*}\n */\n public static valueSymbol = Symbol.for('value');\n\n /**\n * @description The `string` tag representation of the `DataCore` class when used in `Object.prototype.toString.call(instance)`.\n * @public\n * @static\n * @type {string}\n */\n public static toStringTag = 'DataCore';\n\n /**\n * @description Checks whether the provided value implements the iterable interface.\n * @param {unknown} value The value to inspect.\n * @returns {value is Iterable<unknown>} True when value exposes an iterator function.\n */\n public static isIterable(value: unknown): value is Iterable<unknown> {\n return value != null && typeof (value as { [Symbol.iterator]?: unknown })[Symbol.iterator] === 'function';\n }\n\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.toStringTag;\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 `'DataCore'`, 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 value of generic type variable `T`.\n * @public\n * @abstract\n * @readonly\n * @type {T}\n */\n public abstract get value(): T;\n\n /**\n * @description Clears the value by setting to `undefined` or `null`.\n * @public\n * @abstract\n * @returns {this} Returns `this` current instance.\n */\n public abstract clear(): AsyncReturn<Async, this>;\n\n /**\n * @description Abstract method to clear or remove the stored data value.\n * @public\n * @abstract\n * @returns {this} Returns `this` current instance.\n */\n public abstract destroy(): AsyncReturn<Async, this>;\n\n /**\n * @description Gets the value either asynchronously or synchronously based on the `Async` generic type variable.\n * @public\n * @abstract\n * @returns {AsyncReturn<Async, T>} \n */\n public abstract getValue(): AsyncReturn<Async, T>;\n\n /**\n * @inheritdoc\n * @public\n * @returns {this} \n */\n public override lock(): this {\n return Immutability.deepFreeze(this.value),\n super.lock(),\n this;\n }\n\n /**\n * @description Sets the value of `T` in arbitrary parameter array.\n * @public\n * @abstract\n * @template {unknown[]} V The type of the values array.\n * @param {...V} values The arbitrary values array of type `V`.\n * @returns {this} \n */\n public abstract setValue<V extends unknown[]>(...values: V): AsyncReturn<Async, this>;\n\n /**\n * @description Sets the value of `T` in arbitrary parameter.\n * @public\n * @abstract\n * @param {...T[]} value Arbitrary number of values of type `T`.\n * @returns {this} \n */\n public abstract setValue(...value: T[]): AsyncReturn<Async, this>;\n\n /**\n * @description Sets the data value. Ensure `super.validate()` is called before invoking this method.\n * @public\n * @abstract\n * @param {T} value The data value of `T` to set.\n * @returns {this} Returns `this` current instance.\n */\n public abstract setValue(value: T): AsyncReturn<Async, this>;\n\n /**\n * @description Returns an iterator for the data value.\n * @public\n * @returns {IterableIterator<T>} \n */\n *[Symbol.iterator](): IterableIterator<IterValue<T>> {\n const value = this.value;\n DataCore.isIterable(value)\n ? yield* value as Iterable<IterValue<T>>\n : yield value as IterValue<T>;\n }\n}\n","// Abstract.\nimport { DataCore } from './data-core.abstract';\nimport {\n // Type.\n AsyncReturn,\n // Interface.\n DataAdapter\n} from '@typedly/data';\n/**\n * @description The abstract `AdapterData` class extends `DataCore` adding functionality for managing data value by adapter with arguments.\n * Designed to create data containers of `T` type managed by adapters that require constructor arguments.\n * @export\n * @abstract\n * @class AdapterData\n * @template T \n * @template {unknown[]} [G=unknown[]] Arguments type for the adapter constructor.\n * @template {boolean} [R=false] Indicates if the adapter operations are asynchronous.\n * @template {DataAdapter<T, R> | undefined} [A=DataAdapter<T, R>] The adapter type.\n * @extends {DataCore<T, R>}\n */\nexport abstract class AdapterData<\n T,\n G extends unknown[] = unknown[],\n R extends boolean = false,\n A extends DataAdapter<T, R> | undefined = DataAdapter<T, R>,\n> extends DataCore<T, R> {\n /**\n * @description Returns the `string` tag representation of the `BaseData` 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 AdapterData.toStringTag;\n }\n\n /**\n * @description The underlying adapter to handle the data value.\n * @public\n * @readonly\n * @type {(A | undefined)}\n */\n public get adapter(): A | undefined {\n return this.#adapter;\n }\n\n /**\n * @description Indicates if the adapter operations are asynchronous.\n * @public\n * @readonly\n * @type {R}\n */\n public get async(): R {\n return this.#async;\n }\n\n /**\n * @description Returns the privately stored value of generic type variable `T`.\n * @public\n * @readonly\n * @type {T}\n */\n public get value(): T {\n return this.#adapter\n ? this.#adapter.value\n : undefined as T;\n }\n\n /**\n * @description Optional privately stored adapter of type `A`.\n * @type {?A}\n */\n #adapter?: A;\n\n /**\n * @description Indicates if the adapter operations are asynchronous.\n * @type {R}\n */\n #async: R;\n \n /**\n * Creates an instance of `AdapterData`.\n * @constructor\n * @param {R} async Async switch for the adapter operations.\n * @param {?{new (...args: G): A}} [adapter] The adapter constructor.\n * @param {...G} args The arguments passed to the adapter constructor.\n */\n constructor(\n async: R,\n adapter?: {new (...args: G): A},\n ...args: G\n ) {\n super();\n adapter && (this.#adapter = new adapter(...args));\n this.#async = async ?? false as R;\n }\n\n /**\n * @description Clears the value to `undefined`.\n * @public\n * @returns {AsyncReturn<R, this>} The `this` current instance.\n */\n public clear(): AsyncReturn<R, this> {\n return this.returnThis(\n this.#adapter\n ? this.#adapter.clear() as AsyncReturn<R, A>\n : this\n );\n }\n\n /**\n * @description Destroys the value by setting it to `null`.\n * @public\n * @returns {AsyncReturn<R, this>} The `this` current instance.\n */\n public destroy(): AsyncReturn<R, this> {\n return this.returnThis(this.#adapter\n ? this.#adapter.destroy() as AsyncReturn<R, A>\n : this\n );\n }\n\n /**\n * @description Gets the value either asynchronously or synchronously based on the `R` generic type variable.\n * @public\n * @returns {AsyncReturn<R, T>} \n */\n public getValue(): AsyncReturn<R, T> {\n return this.#adapter\n ? this.#adapter.getValue()\n : (this.#async\n ? Promise.resolve(this.value)\n : this.value\n ) as AsyncReturn<R, T>;\n }\n\n /**\n * @description Sets the data value.\n * @public\n * @param {T} value The data value of `T` to set.\n * @returns {AsyncReturn<R, this>} The `this` current instance.\n */\n public setValue(value: T): AsyncReturn<R, this> {\n return super.validate(),\n this.returnThis(\n this.#adapter\n ? this.#adapter.setValue(value) as AsyncReturn<R, A>\n : this\n );\n }\n\n /**\n * @description The helper method to return conditional `this` based on async type `R`, and returned `result` of adapter.\n * @param {AsyncReturn<R, A> | this} result The result of the adapter operation if provided, or `this`.\n * @returns {AsyncReturn<R, this>} The `this` current instance.\n */\n protected returnThis(result: AsyncReturn<R, A> | this): AsyncReturn<R, this> {\n return (result instanceof Promise\n ? result.then(() => this)\n : this.#async ? Promise.resolve(this) : this\n ) as AsyncReturn<R, this>;\n }\n}\n","// Abstract.\nimport {\n // Type.\n AsyncReturn,\n // Interface.\n DataAdapter\n} from '@typedly/data';\nimport { AdapterData } from './adapter-data.abstract';\n/**\n * @description The `BaseData` is an abstract class that extends core features, adding functionality for managing the data value directly or through the adapter.\n * @export\n * @abstract\n * @class BaseData\n * @template T Type of the data value.\n * @template {unknown[]} [G=unknown[]] The arguments parameter type. \n * @template {boolean} [R=false] Indicates if the data operations are asynchronous.\n * @template {DataAdapter<T, R> | undefined} [A=undefined] Adapter type extending `DataAdapter` for handling the data value with it.\n * @extends {AdapterData<T, G, R, A>}\n */\nexport abstract class BaseData<\n T,\n G extends unknown[] = unknown[],\n R extends boolean = false,\n A extends DataAdapter<T, R> | undefined = undefined,\n> extends AdapterData<T, G, R, A> {\n /**\n * @description Returns the `string` tag representation of the `BaseData` 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 BaseData.toStringTag;\n }\n\n /**\n * @description Returns the privately stored value of generic type variable `T`.\n * @public\n * @readonly\n * @type {T}\n */\n public override get value(): T {\n return super.adapter ? super.adapter.value : this.#value!;\n }\n\n /**\n * @description Privately stored value of type `T`.\n * @type {T}\n */\n #value?: T;\n\n /**\n * Creates an instance of `BaseData`.\n * @constructor\n * @param {R} async Indicates if the data operations are asynchronous.\n * @param {T} value Initial data value of generic type variable `T`.\n * @param {?{new (value: T, ...args: G): A}} [adapter] Optional adapter class constructor for handling the data value.\n * @param {...G} args Arguments passed to the adapter class constructor, after the `value` parameter.\n */\n constructor(\n async: R,\n value: T,\n adapter?: {new (value: T, ...args: G): A},\n ...args: G\n ) {\n super(async, adapter as {new (...args: G): A} | undefined, ...[value, ...args] as G);\n !adapter && (this.#value = value);\n }\n\n /**\n * @description Clears the value to `undefined`.\n * @public\n * @returns {AsyncReturn<R, this>} The `this` current instance.\n */\n public override clear(): AsyncReturn<R, this> {\n return super.adapter\n ? super.clear()\n : ((this.#value = undefined as unknown as T), super.returnThis(this)) ;\n }\n\n /**\n * @description Destroys the value by setting it to `null`.\n * @public\n * @returns {AsyncReturn<R, this>} The `this` current instance.\n */\n public override destroy(): AsyncReturn<R, this> {\n return super.adapter\n ? super.destroy()\n : ((this.#value = null as unknown as T), super.returnThis(this));\n }\n\n /**\n * @description Sets the data value.\n * @public\n * @param {T} value The data value of `T` to set.\n * @returns {AsyncReturn<R, this>} The `this` current instance.\n */\n public override setValue(value: T): AsyncReturn<R, this> {\n return super.adapter\n ? super.setValue(value)\n : (super.validate(), (this.#value = value), super.returnThis(this));\n }\n}\n","// Abstract.\nimport { BaseData } from './base-data.abstract';\n// Interface.\nimport { DataAdapter } from '@typedly/data';\n/**\n * @description The `Data` class is a concrete class that extends the `BaseData` abstract class for instantiate base functionality.\n * @public\n * @export\n * @class Data\n * @template T Type of the data value.\n * @template {unknown[]} [G=unknown[]] Arguments passed to the adapter class constructor, after the `value` parameter.\n * @template {boolean} [R=false] Indicates whether the data operations are asynchronous.\n * @template {DataAdapter<T, R> | undefined} [A=DataAdapter<T, R>] Adapter type extending `DataAdapter` for handling the data value.\n * @extends {BaseData<T, G, R, A>}\n */\nexport class Data<\n T,\n G extends unknown[] = unknown[],\n R extends boolean = false,\n A extends DataAdapter<T, R> | undefined = DataAdapter<T, R>,\n> extends BaseData<T, G, R, A> {\n /**\n * @inheritdoc\n * @public\n * @readonly\n * @type {string}\n */\n public static override toStringTag: string = 'Data';\n\n /**\n * @inheritdoc\n * @public\n * @readonly\n * @type {string}\n */\n public override get [Symbol.toStringTag](): string {\n return Data.toStringTag;\n }\n}\n","// Abstract class\nexport { AdapterData } from './adapter-data.abstract';\nexport { BaseData } from './base-data.abstract';\nexport { DataCore } from './data-core.abstract';\nexport { Immutability } from './immutability.abstract';\n// Class.\nexport { Data } from './data.class';\n","/*\n * Public API Surface of data\n */\nexport {\n // Abstract.\n AdapterData,\n BaseData,\n DataCore,\n Immutability,\n // Class.\n Data,\n} from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}