{"version":3,"file":"ngx-base-state.mjs","sources":["../../../projects/library/src/lib/classes/config.ts","../../../projects/library/src/lib/tokens/config.token.ts","../../../projects/library/src/lib/constants/wrapped-at-ngx-state-decorator.const.ts","../../../projects/library/src/lib/functions/patched-action.function.ts","../../../projects/library/src/lib/decorators/ngx-state.decorator.ts","../../../projects/library/src/lib/decorators/action.decorator.ts","../../../projects/library/src/lib/enums/metadata-key.enum.ts","../../../projects/library/src/lib/enums/metadata-operation-type.enum.ts","../../../projects/library/src/lib/helpers/is-object.helper.ts","../../../projects/library/src/lib/helpers/metadata-storage.helper.ts","../../../projects/library/src/lib/helpers/stack-trace.helper.ts","../../../projects/library/src/lib/states/base.state.ts","../../../projects/library/src/lib/states/array.state.ts","../../../projects/library/src/lib/states/object.state.ts","../../../projects/library/src/lib/states/primitive.state.ts","../../../projects/library/src/lib/states/record.state.ts","../../../projects/library/src/lib/devtools.module.ts","../../../projects/library/src/ngx-base-state.ts"],"sourcesContent":["import { ɵNgxBaseStateConfigParams } from '../interfaces';\r\n\r\nexport class NgxBaseStateDevtoolsConfig implements ɵNgxBaseStateConfigParams {\r\n    public readonly isEnabled: boolean = false;\r\n\r\n    constructor(params: ɵNgxBaseStateConfigParams) {\r\n        Object.assign(this, params);\r\n    }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { NgxBaseStateDevtoolsConfig } from '../classes';\r\n\r\nexport const NGX_BASE_STATE_DEVTOOLS_CONFIG = new InjectionToken('NGX_BASE_STATE_DEVTOOLS_CONFIG', {\r\n    providedIn: 'root',\r\n    factory: () => new NgxBaseStateDevtoolsConfig({\r\n        isEnabled: false\r\n    })\r\n});\r\n","export const ɵNGX_STATE_DECORATOR_METADATA_FIELD = 'ɵNgxState';\r\n","const tryDoActionMethodName = 'tryDoAction';\r\nconst actionLikeInvokedMethodName = '_onActionLikeInvoked';\r\nconst actionLikeInvokeEndMethodName = '_onActionLikeInvokeEnd';\r\n\r\nexport function patchedActionFunction(actionName: string, actionFunction: Function): unknown {\r\n    return function innerFunction(this: typeof innerFunction, ...args: unknown[]): unknown {\r\n        return this[tryDoActionMethodName](actionName, () => {\r\n            this[actionLikeInvokedMethodName](actionName);\r\n\r\n            const originalMethodResult = actionFunction.apply(this, args);\r\n\r\n            this[actionLikeInvokeEndMethodName]();\r\n\r\n            return originalMethodResult;\r\n        });\r\n    };\r\n}\r\n","import { ɵNGX_STATE_DECORATOR_METADATA_FIELD } from '../constants';\r\nimport { patchedActionFunction } from '../functions';\r\n\r\nconst forbiddenMethodNamesToPatch = [\r\n    'constructor',\r\n    'ngOnDestroy'\r\n];\r\n\r\nexport function NgxState(): any {\r\n    return function InnerFunction(targetClass: any): any {\r\n        const prototype = targetClass.prototype;\r\n\r\n        markTargetClassWithMetadata(prototype);\r\n\r\n        Object.getOwnPropertyNames(prototype).forEach((fieldName) => {\r\n            const isFieldNameForbidden = forbiddenMethodNamesToPatch.includes(fieldName);\r\n\r\n            if (!isFieldNameForbidden && isFieldHaveTypeFunction(prototype, fieldName)) {\r\n                markMethodOfStateAsAction(prototype, fieldName, prototype[fieldName]);\r\n            }\r\n        });\r\n    };\r\n}\r\n\r\nfunction markTargetClassWithMetadata(stateClass: any): void {\r\n    stateClass[ɵNGX_STATE_DECORATOR_METADATA_FIELD] = true;\r\n}\r\n\r\nfunction markMethodOfStateAsAction(\r\n    stateClass: any,\r\n    fieldName: string,\r\n    originalMethod: Function\r\n): void {\r\n    stateClass[fieldName] = patchedActionFunction(fieldName, originalMethod);\r\n}\r\n\r\nfunction isFieldHaveTypeFunction(stateClass: any, fieldName: string): boolean {\r\n    return (\r\n        !Object.getOwnPropertyDescriptor(stateClass, fieldName)?.get &&\r\n        !Object.getOwnPropertyDescriptor(stateClass, fieldName)?.set &&\r\n        (typeof stateClass[fieldName] === 'function')\r\n    );\r\n}\r\n","import { patchedActionFunction } from '../functions';\r\n\r\nexport function ɵAction(targetClass: any, fieldName: string, descriptor: any): any {\r\n    const originalMethod = descriptor.value;\r\n\r\n    descriptor.value = patchedActionFunction(fieldName, originalMethod);\r\n}\r\n","export enum ɵMetadataKeyEnum {\r\n    DevtoolsEnabled = '__NGX_BASE_STATE_DEVTOOLS_ENABLED',\r\n    MetadataOperation = '__NGX_BASE_STATE_METADATA_OPERATION'\r\n}\r\n","export enum ɵMetadataOperationTypeEnum {\r\n    Init = 1,\r\n    Update,\r\n    Destroy\r\n}\r\n","export function isObject(data: unknown): data is object {\r\n    return (\r\n        (typeof data === 'object') &&\r\n        !Array.isArray(data) &&\r\n        (data !== null)\r\n    );\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ɵMetadataKeyEnum } from '../enums';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class ɵMetadataStorage {\r\n    private get window(): any {\r\n        return window;\r\n    }\r\n\r\n    public get<R = unknown>(key: ɵMetadataKeyEnum): R {\r\n        return this.window[key];\r\n    }\r\n\r\n    public set<T>(key: ɵMetadataKeyEnum, data: T): void {\r\n        this.window[key] = data;\r\n    }\r\n}\r\n","export abstract class ɵStackTrace {\r\n    public static capture(): string[] {\r\n        // FIXME: Refactor and investigate\r\n        const stackTrace = new Error().stack!;\r\n        const rawMethods = stackTrace.split('at ');\r\n        const methods = rawMethods\r\n            .map((rawMethod) => rawMethod.slice(0, rawMethod.indexOf(' (')))\r\n            .filter((method) => !method.startsWith('http'));\r\n\r\n        return methods;\r\n    }\r\n}\r\n","import { Inject, inject, Injectable, InjectionToken, OnDestroy, Optional } from '@angular/core';\r\nimport { BehaviorSubject, Observable, ReplaySubject } from 'rxjs';\r\nimport { ɵNGX_STATE_DECORATOR_METADATA_FIELD } from '../constants';\r\nimport { ɵAction as Action } from '../decorators';\r\nimport { ɵMetadataKeyEnum, ɵMetadataOperationTypeEnum } from '../enums';\r\nimport { ɵMetadataStorage, ɵStackTrace } from '../helpers';\r\nimport { ɵInitialConfig, ɵMetadataOperation } from '../interfaces';\r\nimport { NGX_BASE_STATE_DEVTOOLS_CONFIG } from '../tokens';\r\n\r\nconst INITIAL_DATA = new InjectionToken('__NGX_BASE_STATE_INITIAL_DATA');\r\nconst INITIAL_CONFIG = new InjectionToken('__NGX_BASE_STATE_INITIAL_CONFIG');\r\nconst CLASS_ID_FIELD = '_ɵID';\r\n\r\n/**\r\n *\t@class\r\n *\t@classdes This is a base class that used for creating hight level state classes\r\n */\r\n@Injectable()\r\nexport abstract class BaseState<T> implements OnDestroy {\r\n    /**\r\n     * \tGet `Observable` with state data.\r\n     *  @public\r\n     *\t@return {Generic} Observable with the state data.\r\n     */\r\n    public get data$(): Observable<T | null> {\r\n        return this._data$.asObservable();\r\n    }\r\n\r\n    /**\r\n     * \tGet state data.\r\n     *  @public\r\n     *\t@return {Generic} State data.\r\n     */\r\n    public get data(): T | null {\r\n        return this._data$.value;\r\n    }\r\n\r\n    /**\r\n     * \tMain `BehaviorSubject` with state data.\r\n     *  @private\r\n     */\r\n    private readonly _data$: BehaviorSubject<T | null>;\r\n\r\n    private readonly _devtoolsConfig = inject(NGX_BASE_STATE_DEVTOOLS_CONFIG);\r\n    private readonly _metadataStorage = inject(ɵMetadataStorage);\r\n\r\n    private _currentlyInvokedAction: string | null = null;\r\n    private _stackTraceOfCurrentlyInvokedAction: string[] | null = null;\r\n\r\n    constructor(\r\n        /** Initial data should be passed via the `super` method call. */\r\n        @Inject(INITIAL_DATA) @Optional()\r\n        protected readonly initialData: T | null = null,\r\n        /** Initial config should be passed via the `super` method call. */\r\n        @Inject(INITIAL_CONFIG) @Optional()\r\n        private readonly initialConfig: ɵInitialConfig | null = null\r\n    ) {\r\n        this.validateNullableDataType(this.initialData);\r\n\r\n        this._data$ = new BehaviorSubject(this.initialData);\r\n\r\n        this.initClassIdIfAbsent();\r\n        this.showConsoleWarningIfClassHaveNotDecorator();\r\n        this.init();\r\n    }\r\n\r\n    /**\r\n     *  Base implementation of `ngOnDestroy`.\r\n     *  Don't forget to call `super.ngOnDestroy` in case of override.\r\n     *  @public\r\n     */\r\n    public ngOnDestroy(): void {\r\n        this.emitMetadataOperation(ɵMetadataOperationTypeEnum.Destroy);\r\n        this._data$.complete();\r\n    }\r\n\r\n    /**\r\n     *  Set new value to state\r\n     *  @public\r\n     *\t@param {Generic} value - the value that should be set to update `BehaviorSubject`.\r\n     */\r\n    @Action\r\n    public set(value: T): void {\r\n        this.setNewValue(value);\r\n    }\r\n\r\n    /**\r\n     *  Clear state value. (Will be set `null`)\r\n     *  @public\r\n     */\r\n    @Action\r\n    public clear(): void {\r\n        this.setNewValue(null);\r\n    }\r\n\r\n    /**\r\n     *  Restore initial data from constructor.\r\n     *  @public\r\n     */\r\n    @Action\r\n    public restoreInitialData(): void {\r\n        this.setNewValue(this.initialData);\r\n    }\r\n\r\n    /**\r\n     *  Method for set data functionality. It may be expanded.\r\n     *  The idea is to process the creation of new instances of complex structures.\r\n     *  @protected\r\n     *\t@param {Generic | null} value - the value that should be set to update `BehaviorSubject`.\r\n     */\r\n    protected setNewValue(value: T | null): void {\r\n        this.validateNullableDataType(value);\r\n        this._data$.next(value);\r\n        this.emitMetadataOperation(ɵMetadataOperationTypeEnum.Update);\r\n    }\r\n\r\n    /**\r\n     * \tMethod used for try to work out any method\r\n     *  @protected\r\n     *\t@param {string} actionName - Action you try to fire. Used to show in Error text when something went wrong.\r\n     *\t@param {Function} actionFunc - Callback with logic. When something goes wrong - Error will be created.\r\n     *\t@return {Generic} result of the callback call.\r\n     */\r\n    protected tryDoAction<V>(actionName: string, actionFunc: () => any): V | undefined {\r\n        try {\r\n            return actionFunc();\r\n        } catch (error) {\r\n            this.catchError(error as Error, actionName);\r\n\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Method that\tprocessed error for user friendly error messages\r\n     *  @protected\r\n     *\t@param {Error} error - Error.\r\n     *\t@param {string} actionName - Name of the action where error happened.\r\n     */\r\n    protected catchError(error: Error, actionName: string): void {\r\n        throw new Error(`\\n${this.constructor.name} [${actionName}]: ${error.message}`);\r\n    }\r\n\r\n    /**\r\n     *  Define data type validation for runtime. Throw an error if the data type is incorrect.\r\n     *  @protected\r\n     */\r\n    protected validateDataType?(data: unknown): void;\r\n\r\n    @Action\r\n    private init(): void {\r\n        this.emitMetadataOperation(ɵMetadataOperationTypeEnum.Init);\r\n    }\r\n\r\n    // Using by decorators\r\n    private _onActionLikeInvoked(actionName: string): void {\r\n        if (this._devtoolsConfig.isEnabled && !this._currentlyInvokedAction) {\r\n            this._currentlyInvokedAction = actionName;\r\n            this._stackTraceOfCurrentlyInvokedAction = ɵStackTrace.capture();\r\n        }\r\n    }\r\n\r\n    // Using by decorators\r\n    private _onActionLikeInvokeEnd(): void {\r\n        if (this._devtoolsConfig.isEnabled) {\r\n            this._currentlyInvokedAction = null;\r\n            this._stackTraceOfCurrentlyInvokedAction = null;\r\n        }\r\n    }\r\n\r\n    private showConsoleWarningIfClassHaveNotDecorator(): void {\r\n        if (this._devtoolsConfig.isEnabled && !this[ɵNGX_STATE_DECORATOR_METADATA_FIELD]) {\r\n            console.warn(\r\n                `${this.constructor.name} class is missed @NgxState() decorator. ` +\r\n                `Some features of DevTools will work incorrectly!`\r\n            );\r\n        }\r\n    }\r\n\r\n    private initClassIdIfAbsent(): void {\r\n        if (!this.constructor[CLASS_ID_FIELD]) {\r\n            this.constructor[CLASS_ID_FIELD] = Math.random();\r\n        }\r\n    }\r\n\r\n    private validateNullableDataType(data: unknown | null): void {\r\n        if (data !== null) {\r\n            this.validateDataType?.(data);\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  Emits information about state changes into `ReplaySubject` at the `window`.\r\n     *  Extension use this information to visually represent current state and history of states changes.\r\n     *  @private\r\n     */\r\n    private emitMetadataOperation(type: ɵMetadataOperationTypeEnum): void {\r\n        if (this._devtoolsConfig.isEnabled) {\r\n            const operationEmitter$ = this._metadataStorage\r\n                .get<ReplaySubject<ɵMetadataOperation>>(ɵMetadataKeyEnum.MetadataOperation);\r\n\r\n            operationEmitter$.next({\r\n                type,\r\n                classId: this.constructor[CLASS_ID_FIELD],\r\n                className: this.constructor.name,\r\n                classContext: this.initialConfig?.context,\r\n                actionName: this._currentlyInvokedAction!,\r\n                date: new Date().toJSON(),\r\n                data: this.data,\r\n                stackTrace: this._stackTraceOfCurrentlyInvokedAction!\r\n            });\r\n        }\r\n    }\r\n}\r\n","import { ɵAction as Action } from '../decorators';\r\nimport { BaseState } from './base.state';\r\n\r\n/**\r\n *\t@class\r\n *\t@abstract\r\n *\t@classdes Array state class. Implementing base array functionality.\r\n */\r\nexport abstract class ArrayState<T> extends BaseState<T[]> {\r\n    /**\r\n     * \tReturn item by quired index.\r\n     *\t@public\r\n     *\t@param {Number} index - Quired index\r\n     *  @deprecated use `this.data[index]` instead\r\n     *\t@return {Generic} quired item.\r\n     */\r\n    public getByIndex(index: number): T | undefined {\r\n        const items = this.data;\r\n\r\n        return items![index];\r\n    }\r\n\r\n    /**\r\n     * \tUnshift item to array in state.\r\n     *\t@public\r\n     *\t@param {Generic} item - Item needs to unshift.\r\n     */\r\n    @Action\r\n    public unshiftItem(item: T): void {\r\n        const items = this.data;\r\n\r\n        items!.unshift(item);\r\n\r\n        this.setNewValue(items);\r\n    }\r\n\r\n    /**\r\n     * \tShift array in state.\r\n     *\t@public\r\n     */\r\n    @Action\r\n    public shift(): void {\r\n        const items = this.data;\r\n\r\n        items!.shift();\r\n\r\n        this.setNewValue(items);\r\n    }\r\n\r\n    /**\r\n     * \tPop array in state.\r\n     *\t@public\r\n     */\r\n    @Action\r\n    public pop(): void {\r\n        const items = this.data;\r\n\r\n        items!.pop();\r\n\r\n        this.setNewValue(items);\r\n    }\r\n\r\n    /**\r\n     * \tConcat current state with another array.\r\n     *\t@param {T[]} array - Another array to concat with the current state.\r\n     *\t@public\r\n     */\r\n    @Action\r\n    public concatWith(array: T[]): void {\r\n        const items = this.data;\r\n        const newItems = items!.concat(array);\r\n\r\n        this.setNewValue(newItems);\r\n    }\r\n\r\n    /**\r\n     * \tPush item to array in state.\r\n     *\t@public\r\n     *\t@param {Generic} item - Item needs to push\r\n     */\r\n    @Action\r\n    public pushItem(item: T): void {\r\n        const items = this.data;\r\n\r\n        items!.push(item);\r\n\r\n        this.setNewValue(items);\r\n    }\r\n\r\n    /**\r\n     * \tInsert item in array by index.\r\n     *\t@public\r\n     *\t@param {number} index - Index where to insert new item.\r\n     *\t@param {Generic} item - Item need to insert.\r\n     */\r\n    @Action\r\n    public insertItemByIndex(index: number, item: T): void {\r\n        const items = this.data;\r\n\r\n        items!.splice(index, 0, item);\r\n        this.setNewValue(items);\r\n    }\r\n\r\n    /**\r\n     * \tRemove item in array by item identify param (using `compareItems` method).\r\n     *\t@public\r\n     *\t@param {Generic} itemId - Id of item you want to remove.\r\n     */\r\n    @Action\r\n    public removeItem(item: T): T | undefined {\r\n        const index = this.data!.findIndex((_item) =>\r\n            this.compareItems(item, _item)\r\n        );\r\n\r\n        return this.removeItemByIndex(index);\r\n    }\r\n\r\n    /**\r\n     * \tRemove item in array by item id (using `getItemId` method).\r\n     *\t@public\r\n     *\t@param {Generic} itemId - Id of item you want to remove.\r\n     */\r\n    @Action\r\n    public removeItemById(itemId: unknown): T | undefined {\r\n        const index = this.data!.findIndex(\r\n            (_item) => itemId === this.getItemId(_item)\r\n        );\r\n\r\n        return this.removeItemByIndex(index);\r\n    }\r\n\r\n    /**\r\n     * \tRemove item in array by index.\r\n     *\t@public\r\n     *\t@param {number} index - Index of item you want to remove.\r\n     */\r\n    @Action\r\n    public removeItemByIndex(index: number): T | undefined {\r\n        const items = this.data;\r\n        const removedItem = this.data![index];\r\n\r\n        items!.splice(index, 1);\r\n\r\n        this.setNewValue(items);\r\n\r\n        return removedItem;\r\n    }\r\n\r\n    /**\r\n     * \tUpdate item in array by item identify param (using `compareItems` method).\r\n     *\t@public\r\n    *\t@param {Generic} itemToUpdate - item that will be update.\r\n    */\r\n    @Action\r\n    public updateItem(itemToUpdate: T): void {\r\n        const items = this.data;\r\n        const newItemToUpdate = { ...itemToUpdate };\r\n\r\n        const itemIndex = items!.findIndex((_currentItem) =>\r\n            this.compareItems(_currentItem, newItemToUpdate)\r\n        );\r\n\r\n        items![itemIndex] = newItemToUpdate;\r\n\r\n        this.setNewValue(items);\r\n    }\r\n\r\n    /**\r\n     * \tUpdate item in array by index.\r\n     *\t@public\r\n     *\t@param {Generic} itemToUpdate - item that will be update.\r\n     *\t@param {Generic} index - index of item that need to update.\r\n     */\r\n    @Action\r\n    public updateItemByIndex(itemToUpdate: T, index: number): void {\r\n        const items = this.data;\r\n\r\n        items![index] = itemToUpdate;\r\n\r\n        this.setNewValue(items);\r\n    }\r\n\r\n    protected override setNewValue(value: T[] | null): void {\r\n        if (value) {\r\n            this.validateDataType(value);\r\n            super.setNewValue([...value]);\r\n        } else {\r\n            super.setNewValue(null);\r\n        }\r\n    }\r\n\r\n    protected override catchError(error: Error | TypeError, actionName: string): void {\r\n        if (error instanceof TypeError) {\r\n            throw new Error(\r\n                `\\n${this.constructor.name} [${actionName}]: ` +\r\n                `Firstly set Array.\\n\\n${error.message}`\r\n            );\r\n        }\r\n\r\n        super.catchError(error, actionName);\r\n    }\r\n\r\n    /**\r\n     *\tMust return identify param of item.\r\n     *\tMethod must be filled in child classes.\r\n     *\tUsed for compare two any items.\r\n     *  @protected\r\n     *\t@param {Generic} item - item of your state.\r\n     *\t@return {any} identify param of item.\r\n     */\r\n    protected getItemId(item: T): any {\r\n        return item;\r\n    }\r\n\r\n    protected override validateDataType(data: unknown): void {\r\n        if (!Array.isArray(data)) {\r\n            throw new Error(`${this.constructor.name}: Expected data in Array format!`);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * \tCompare two items via `getItemId`\r\n     *\t@private\r\n     *\t@param {Generic} itemToUpdate - item that will be update.\r\n     *\t@return {boolean} result of comparing two items via `getItemId`.\r\n     */\r\n    private compareItems(firstItem: T, secondItem: T): boolean {\r\n        return (this.getItemId(firstItem) === this.getItemId(secondItem));\r\n    }\r\n}\r\n","import { ɵAction as Action } from '../decorators';\r\nimport { isObject } from '../helpers';\r\nimport { BaseState } from './base.state';\r\n\r\n/**\r\n *\t@class\r\n *\t@classdes Object state class. Used for save state with Object type.\r\n */\r\nexport abstract class ObjectState<T extends object> extends BaseState<T> {\r\n    /**\r\n     *  Updates state by merging new partial object with the existing one.\r\n     *  @public\r\n     *  @param {T | null} value - the value that should be set to update `BehaviorSubject`.\r\n     */\r\n    @Action\r\n    public updateWithPartial(value: Partial<T>): void {\r\n        this.set({ ...this.data!, ...value });\r\n    }\r\n\r\n    protected override setNewValue(value: T | null): void {\r\n        if (value) {\r\n            super.setNewValue({ ...value });\r\n        } else {\r\n            super.setNewValue(null);\r\n        }\r\n    }\r\n\r\n    protected override catchError(error: Error | TypeError, actionName: string): void {\r\n        if (error instanceof TypeError) {\r\n            throw new Error(\r\n                `\\n${this.constructor.name} [${actionName}]:` +\r\n                `Firstly set Object.\\n\\n${error.message}`\r\n            );\r\n        }\r\n\r\n        super.catchError(error, actionName);\r\n    }\r\n\r\n    protected override validateDataType(data: unknown): void {\r\n        if (!isObject(data)) {\r\n            throw new Error(`${this.constructor.name}: Expected data in Object format!`);\r\n        }\r\n    }\r\n}\r\n","import { BaseState } from './base.state';\r\n\r\ntype Primitive = number | string | boolean | bigint | symbol;\r\n\r\n/**\r\n *\t@class\r\n *\t@classdes Primitive state class. Used for save state with Primitive type (Like boolean, number or string).\r\n */\r\nexport class PrimitiveState<T extends Primitive> extends BaseState<T> {\r\n    protected override validateDataType(data: unknown): void {\r\n        const isDataValid = (\r\n            (typeof data === 'number') ||\r\n            (typeof data === 'string') ||\r\n            (typeof data === 'boolean') ||\r\n            (typeof data === 'bigint') ||\r\n            (typeof data === 'symbol')\r\n        );\r\n\r\n        if (!isDataValid) {\r\n            throw new Error(`${this.constructor.name}: Expected data in Primitive format!`);\r\n        }\r\n    }\r\n}\r\n","import { map, Observable, shareReplay } from 'rxjs';\r\nimport { ɵAction as Action } from '../decorators';\r\nimport { isObject } from '../helpers';\r\nimport { BaseState } from './base.state';\r\n\r\n/**\r\n *\t@class\r\n *\t@classdes Record state class. Used for save state with Record type.\r\n */\r\nexport abstract class RecordState<TKey extends string, TValue>\r\n    extends BaseState<Record<TKey, TValue>> {\r\n    /**\r\n\t *  Get all `keys` of your `Record` object state.\r\n     *  @public\r\n\t */\r\n    public get keys(): TKey[] {\r\n        return (this.data) ? Object.keys(this.data) as TKey[] : [];\r\n    }\r\n\r\n    /**\r\n\t *  Get all `values` of your `Record` object state.\r\n     *  @public\r\n\t */\r\n    public get values(): TValue[] {\r\n        return (this.data) ? Object.values(this.data) : [];\r\n    }\r\n\r\n    /**\r\n\t *  Get `Observable` with all `keys` of your `Record` object state.\r\n     *  @public\r\n\t */\r\n    public readonly keys$: Observable<TKey[]> = this.data$\r\n        .pipe(\r\n            map(() => this.keys),\r\n            shareReplay(1)\r\n        );\r\n\r\n    /**\r\n\t *  Get `Observable` with all `values` of your `Record` object state.\r\n     *  @public\r\n\t */\r\n    public readonly values$: Observable<TValue[]> = this.data$\r\n        .pipe(\r\n            map(() => this.values),\r\n            shareReplay(1)\r\n        );\r\n\r\n    /**\r\n     * \tSet item to object in state.\r\n     *\t@public\r\n     *\t@param {TKey} key - Key to set into.\r\n     *\t@param {TValue} value - Value to set within `key`.\r\n     */\r\n    @Action\r\n    public setItem(key: TKey, value: TValue): void {\r\n        this.data![key] = value;\r\n\r\n        this.setNewValue(this.data);\r\n    }\r\n\r\n    /**\r\n     * \tRemove item from object in state.\r\n     *\t@public\r\n     *\t@param {TKey} key - Key to remove item within.\r\n     */\r\n    @Action\r\n    public removeItem(key: TKey): void {\r\n        delete this.data![key];\r\n\r\n        this.setNewValue(this.data);\r\n    }\r\n\r\n    /**\r\n     * \tRemove all items from object in state.\r\n     *\t@public\r\n     */\r\n    @Action\r\n    public removeAllItems(): void {\r\n        this.set({} as Record<TKey, TValue>);\r\n    }\r\n\r\n    protected override setNewValue(value: Record<TKey, TValue> | null): void {\r\n        if (value) {\r\n            super.setNewValue({ ...value });\r\n        } else {\r\n            super.setNewValue(null);\r\n        }\r\n    }\r\n\r\n    protected override catchError(error: Error | TypeError, actionName: string): void {\r\n        if (error instanceof TypeError) {\r\n            throw new Error(\r\n                `\\n${this.constructor.name} [${actionName}]: ` +\r\n                `Firstly set Object [Record].\\n\\n${error.message}`\r\n            );\r\n        }\r\n\r\n        super.catchError(error, actionName);\r\n    }\r\n\r\n    protected override validateDataType(data: unknown): void {\r\n        if (!isObject(data)) {\r\n            throw new Error(`${this.constructor.name}: Expected data in Object (Record) format!`);\r\n        }\r\n    }\r\n}\r\n","import { Inject, ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { NgxBaseStateDevtoolsConfig } from './classes';\r\nimport { ɵMetadataKeyEnum } from './enums';\r\nimport { ɵMetadataStorage } from './helpers';\r\nimport { ɵMetadataOperation } from './interfaces';\r\nimport { NGX_BASE_STATE_DEVTOOLS_CONFIG } from './tokens';\r\n\r\n@NgModule({})\r\nexport class NgxBaseStateDevtoolsModule {\r\n    constructor(\r\n        @Inject(NGX_BASE_STATE_DEVTOOLS_CONFIG) private readonly config: NgxBaseStateDevtoolsConfig,\r\n        private readonly metadataStorage: ɵMetadataStorage\r\n    ) {\r\n        if (this.config.isEnabled) {\r\n            this.metadataStorage.set(ɵMetadataKeyEnum.DevtoolsEnabled, true);\r\n            this.metadataStorage.set(\r\n                ɵMetadataKeyEnum.MetadataOperation,\r\n                new ReplaySubject<ɵMetadataOperation>()\r\n            );\r\n        }\r\n    }\r\n\r\n    public static forRoot(\r\n        options: NgxBaseStateDevtoolsConfig\r\n    ): ModuleWithProviders<NgxBaseStateDevtoolsModule> {\r\n        return {\r\n            ngModule: NgxBaseStateDevtoolsModule,\r\n            providers: [\r\n                {\r\n                    provide: NGX_BASE_STATE_DEVTOOLS_CONFIG,\r\n                    useValue: options\r\n                }\r\n            ]\r\n        };\r\n    }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Action","i1.ɵMetadataStorage"],"mappings":"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"}