export function getStringRefCounter()

in packages/redux-dynamic-modules-core/src/Utils/RefCounter.ts [98:146]


export function getStringRefCounter(): IRefCounter<string> {
    const values: { [key: string]: number } = {};
    return {
        /**
         * Returns current ref count for the key
         */
        getCount: (key: string): number => {
            if (key === undefined || key === null) {
                return 0;
            }

            return values[key] || 0;
        },
        /**
         * Adds given key for ref counting or increments ref count
         */
        add: (key: string): void => {
            if (key === undefined || key === null) {
                return;
            }

            if (!values[key]) {
                values[key] = 1;
            } else {
                values[key]++;
            }
        },
        /**
         * Decreases ref count for the given key, if the ref count reaches 0 removes the key and returns true
         */
        remove: (key: string): boolean => {
            if (key === undefined || key === null) {
                return false;
            }

            if (!values[key]) {
                return false;
            }

            if (values[key] === 1) {
                delete values[key];
                return true;
            }

            values[key]--;
            return false;
        },
    };
}