{"version":3,"file":"Cache.mjs","sources":["../../../src/assets/cache/Cache.ts"],"sourcesContent":["import { warn } from '../../utils/logging/warn';\nimport { convertToList } from '../utils/convertToList';\n\nimport type { CacheParser } from './CacheParser';\n\n/** @internal */\nclass CacheClass\n{\n    private readonly _parsers: CacheParser[] = [];\n\n    private readonly _cache: Map<any, any> = new Map();\n    private readonly _cacheMap: Map<string, {\n        keys: string[],\n        cacheKeys: string[],\n    }> = new Map();\n\n    /** Clear all entries. */\n    public reset(): void\n    {\n        this._cacheMap.clear();\n        this._cache.clear();\n    }\n\n    /**\n     * Check if the key exists\n     * @param key - The key to check\n     */\n    public has(key: any): boolean\n    {\n        return this._cache.has(key);\n    }\n\n    /**\n     * Fetch entry by key\n     * @param key - The key of the entry to get\n     */\n    public get<T = any>(key: any): T\n    {\n        const result = this._cache.get(key);\n\n        if (!result)\n        {\n            // #if _DEBUG\n            warn(`[Assets] Asset id ${key} was not found in the Cache`);\n            // #endif\n        }\n\n        return result as T;\n    }\n\n    /**\n     * Set a value by key or keys name\n     * @param key - The key or keys to set\n     * @param value - The value to store in the cache or from which cacheable assets will be derived.\n     */\n    public set<T = any>(key: any | any[], value: T): void\n    {\n        const keys = convertToList<string>(key);\n\n        let cacheableAssets: Record<string, any>;\n\n        for (let i = 0; i < this.parsers.length; i++)\n        {\n            const parser = this.parsers[i];\n\n            if (parser.test(value))\n            {\n                cacheableAssets = parser.getCacheableAssets(keys, value);\n\n                break;\n            }\n        }\n\n        // convert cacheable assets to a map of key-value pairs\n        const cacheableMap = new Map(Object.entries(cacheableAssets || {}));\n\n        if (!cacheableAssets)\n        {\n            keys.forEach((key) =>\n            {\n                cacheableMap.set(key, value);\n            });\n        }\n\n        const cacheKeys = [...cacheableMap.keys()];\n\n        const cachedAssets = {\n            cacheKeys,\n            keys\n        };\n\n        // this is so we can remove them later..\n        keys.forEach((key) =>\n        {\n            this._cacheMap.set(key, cachedAssets as any);\n        });\n\n        cacheKeys.forEach((key) =>\n        {\n            const val = cacheableAssets ? cacheableAssets[key] : value;\n\n            if (this._cache.has(key) && this._cache.get(key) !== val)\n            {\n                // #if _DEBUG\n                warn('[Cache] already has key:', key);\n                // #endif\n            }\n\n            this._cache.set(key, cacheableMap.get(key));\n        });\n    }\n\n    /**\n     * Remove entry by key\n     *\n     * This function will also remove any associated alias from the cache also.\n     * @param key - The key of the entry to remove\n     */\n    public remove(key: any): void\n    {\n        if (!this._cacheMap.has(key))\n        {\n            // #if _DEBUG\n            warn(`[Assets] Asset id ${key} was not found in the Cache`);\n            // #endif\n\n            return;\n        }\n\n        const cacheMap = this._cacheMap.get(key);\n\n        const cacheKeys = cacheMap.cacheKeys;\n\n        cacheKeys.forEach((key) =>\n        {\n            this._cache.delete(key);\n        });\n\n        cacheMap.keys.forEach((key: string) =>\n        {\n            this._cacheMap.delete(key);\n        });\n    }\n\n    /**\n     * All loader parsers registered\n     * @advanced\n     */\n    public get parsers(): CacheParser[]\n    {\n        return this._parsers;\n    }\n}\n\n/**\n * A global cache for all assets in your PixiJS application. The cache system provides fast\n * access to loaded assets and prevents duplicate loading.\n *\n * Key Features:\n * - Automatic caching of loaded assets\n * - Support for custom cache parsers\n * - Automatic parsing of complex assets (e.g., spritesheets)\n * - Memory management utilities\n * > [!IMPORTANT] You typically do not need to use this class directly.\n * > Use the main {@link Assets} class for high-level asset management.\n * > `Assets.get(key)` will automatically use the cache.\n * @example\n * ```ts\n * import { Cache } from 'pixi.js';\n *\n * // Store an asset in the cache\n * Cache.set('myTexture', texture);\n *\n * // Retrieve an asset\n * const texture = Cache.get('myTexture');\n *\n * // Check if an asset exists\n * if (Cache.has('myTexture')) {\n *     // Use the cached asset\n *     const sprite = new Sprite(Cache.get('myTexture'));\n * }\n *\n * // Remove an asset from cache\n * Cache.remove('myTexture');\n *\n * // Clear all cached assets\n * Cache.reset();\n * ```\n * @remarks\n * The Cache is a core component of PixiJS' asset management system:\n * - Used internally by the {@link Assets} class\n * - Supports automatic parsing via {@link CacheParser}\n * - Handles complex asset types like spritesheets\n * - Manages memory through asset removal\n *\n * > [!IMPORTANT]\n * > This is a singleton class and should not be instantiated directly.\n * > Use the exported `Cache` instance instead.\n * @see {@link Assets} For high-level asset management\n * @see {@link CacheParser} For custom cache parsing\n * @category assets\n * @class\n * @advanced\n */\nexport const Cache = new CacheClass();\n"],"names":["key"],"mappings":"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"}