{"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   * @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 set<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 set(...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 set(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 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 ? this.#adapter.value : 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   * 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  }\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((this.#adapter ? this.#adapter.clear() : this) as AsyncReturn<R, 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 destroy(): AsyncReturn<R, this> {\n    return this.#returnThis((this.#adapter ? this.#adapter.destroy() : this) as AsyncReturn<R, 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 set(value: T): AsyncReturn<R, this> {\n    return super.validate(),\n      this.#returnThis((this.#adapter ? this.#adapter.set(value) : this) as AsyncReturn<R, this>);\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, this>} result The result of the adapter operation if provided, or `this`.\n   * @returns {AsyncReturn<R, this>} The `this` current instance.\n   */\n  #returnThis(result: AsyncReturn<R, this>): AsyncReturn<R, this> {\n    return (result instanceof Promise ? result.then(() => this) : this) 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.adapter.clear()\n      : (this.#value = undefined as unknown as T),\n      this as AsyncReturn<R, 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.adapter.destroy()\n      : (this.#value = null as unknown as T),\n      this as AsyncReturn<R, 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 set(value: T): AsyncReturn<R, this> {\n    return super.validate(),\n      super.adapter\n        ? super.adapter.set(value)\n        : (this.#value = value),\n        this as AsyncReturn<R, 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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"}