{"version":3,"file":"Cache.js","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":["warn","convertToList","key"],"mappings":"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"}