{"version":3,"sources":["jsdelivr-header.js","/npm/@pixi/extensions@7.4.3/src/index.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,aCKA,IAAK,mBAGD,EAAA,SAAW,WACX,EAAA,YAAc,cACd,EAAA,eAAiB,wBACjB,EAAA,eAAiB,wBACjB,EAAA,qBAAuB,yBACvB,EAAA,qBAAuB,yBACvB,EAAA,MAAQ,QACR,EAAA,WAAa,cACb,EAAA,cAAgB,iBAChB,EAAA,YAAc,eACd,EAAA,gBAAkB,mBAbjB,mBAAA,IA2DC,MAAA,mBAAsB,IAGxB,GAAmB,mBAAR,GAAsC,iBAAR,GAAoB,EAAI,UACjE,CAGQ,IAAK,EAAI,UAEC,UAAI,MAAM,iDAOxB,EAAM,IAJ+D,iBAAlB,EAAI,UACjD,CAAE,KAAM,EAAI,WACZ,EAAI,UAEW,IAAK,EAC9B,CACA,GAAmB,iBAAR,EAMD,UAAI,MAAM,0BAGhB,MAAoB,iBAPd,EAAA,IAAK,IAOA,OAEX,EAAI,KAAO,CAAC,EAAI,OAGb,CAAA,EAUL,kBAAoB,CAAC,EAAiC,IACxD,mBAAmB,GAAK,UAAY,EAOlC,WAAa,CAGf,aAAc,CAAC,EAGf,gBAAiB,CAAC,EAGlB,OAAQ,CAAC,EAOT,MAAA,IAAU,GAEN,OAAA,EAAW,IAAI,oBAAoB,SAAS,IAEpC,EAAA,KAAK,SAAS,GAAS,KAAK,gBAAgB,KAAQ,IAAI,IAGzD,IACX,EAOA,GAAA,IAAO,GAGH,OAAA,EAAW,IAAI,oBAAoB,SAAS,IAEpC,EAAA,KAAK,SAAS,IAEd,MAAM,EAAW,KAAK,aAChB,EAAQ,KAAK,OAEd,EAAS,GAOV,EAAS,KAAQ,IALjB,EAAM,GAAQ,EAAM,IAAS,GAC7B,EAAM,IAAO,KAAK,GAAG,GAM5B,IAGE,IACX,EASA,MAAA,CAAO,EAAqB,EAAyB,GAEjD,MAAM,EAAc,KAAK,aACnB,EAAiB,KAAK,gBAIxB,GAAI,EAAY,IAAS,EAAe,GAEpC,MAAM,IAAI,MAAM,kBAAkB,2BAI1C,EAAY,GAAQ,EACpB,EAAe,GAAQ,EAGvB,MAAM,EAAQ,KAAK,OAGnB,OAAI,EAAM,KAEN,EAAM,IAAO,SAAS,GAAQ,EAAM,YAC7B,EAAM,IAGV,IACX,EAQA,WAAA,CAAY,EAAqB,GAE7B,OAAO,KAAK,OAAO,GACd,IAEO,EAAU,OAEV,EAAI,EAAU,MAAQ,EAAU,IAAA,IAGvC,IAEO,EAAU,aAEH,EAAI,EAAU,KAAI,GAIzC,EASA,YAAA,CAAa,EAAqB,EAAa,GAAkB,GAE7D,OAAO,KAAK,OACR,GACC,IAEO,EAAK,SAAS,EAAU,OAK5B,EAAK,KAAK,EAAU,KACpB,EAAK,MAAK,CAAC,EAAG,IAAM,kBAAkB,EAAG,GAAmB,kBAAkB,EAAG,KAAgB,IAEpG,IAEG,MAAM,EAAQ,EAAK,QAAQ,EAAU,MAEvB,IAAV,GAEA,EAAK,OAAO,EAAO,EAAC,GAIpC,G","file":"/npm/@pixi/extensions@7.4.3/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@pixi/extensions@7.4.3/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\n * Collection of valid extension types.\n * @memberof PIXI\n * @property {string} Application - Application plugins\n * @property {string} RendererPlugin - Plugins for Renderer\n * @property {string} CanvasRendererPlugin - Plugins for CanvasRenderer\n * @property {string} Loader - Plugins to use with Loader\n * @property {string} LoadParser - Parsers for Assets loader.\n * @property {string} ResolveParser - Parsers for Assets resolvers.\n * @property {string} CacheParser - Parsers for Assets cache.\n */\nenum ExtensionType\n// eslint-disable-next-line @typescript-eslint/indent\n{\n    Renderer = 'renderer',\n    Application = 'application',\n    RendererSystem = 'renderer-webgl-system',\n    RendererPlugin = 'renderer-webgl-plugin',\n    CanvasRendererSystem = 'renderer-canvas-system',\n    CanvasRendererPlugin = 'renderer-canvas-plugin',\n    Asset = 'asset',\n    LoadParser = 'load-parser',\n    ResolveParser = 'resolve-parser',\n    CacheParser = 'cache-parser',\n    DetectionParser = 'detection-parser',\n}\n\ninterface ExtensionMetadataDetails\n{\n    type: ExtensionType | ExtensionType[];\n    name?: string;\n    priority?: number;\n}\n\ntype ExtensionMetadata = ExtensionType | ExtensionMetadataDetails;\n\n/**\n * Format when registering an extension. Generally, the extension\n * should have these values as `extension` static property,\n * but you can override name or type by providing an object.\n * @memberof PIXI\n */\ninterface ExtensionFormatLoose\n{\n    /** The extension type, can be multiple types */\n    type: ExtensionType | ExtensionType[];\n    /** Optional. Some plugins provide an API name/property, such as Renderer plugins */\n    name?: string;\n    /** Optional, used for sorting the plugins in a particular order */\n    priority?: number;\n    /** Reference to the plugin object/class */\n    ref: any;\n}\n\n/**\n * Strict extension format that is used internally for registrations.\n * @memberof PIXI\n */\ninterface ExtensionFormat extends ExtensionFormatLoose\n{\n    /** The extension type, always expressed as multiple, even if a single */\n    type: ExtensionType[];\n}\n\ntype ExtensionHandler = (extension: ExtensionFormat) => void;\n\n/**\n * Convert input into extension format data.\n * @ignore\n */\nconst normalizeExtension = (ext: ExtensionFormatLoose | any): ExtensionFormat =>\n{\n    // Class/Object submission, use extension object\n    if (typeof ext === 'function' || (typeof ext === 'object' && ext.extension))\n    {\n        if (process.env.DEBUG)\n        {\n            if (!ext.extension)\n            {\n                throw new Error('Extension class must have an extension object');\n            }\n        }\n        const metadata: ExtensionMetadataDetails = (typeof ext.extension !== 'object')\n            ? { type: ext.extension }\n            : ext.extension;\n\n        ext = { ...metadata, ref: ext };\n    }\n    if (typeof ext === 'object')\n    {\n        ext = { ...ext };\n    }\n    else\n    {\n        throw new Error('Invalid extension type');\n    }\n\n    if (typeof ext.type === 'string')\n    {\n        ext.type = [ext.type];\n    }\n\n    return ext;\n};\n\n/**\n * Get the priority for an extension.\n * @ignore\n * @param ext - Any extension\n * @param defaultPriority - Fallback priority if none is defined.\n * @returns The priority for the extension.\n */\nconst normalizePriority = (ext: ExtensionFormatLoose | any, defaultPriority: number): number =>\n    normalizeExtension(ext).priority ?? defaultPriority;\n\n/**\n * Global registration of all PixiJS extensions. One-stop-shop for extensibility.\n * @memberof PIXI\n * @namespace extensions\n */\nconst extensions = {\n\n    /** @ignore */\n    _addHandlers: {} as Partial<Record<ExtensionType, ExtensionHandler>>,\n\n    /** @ignore */\n    _removeHandlers: {} as Partial<Record<ExtensionType, ExtensionHandler>>,\n\n    /** @ignore */\n    _queue: {} as Partial<Record<ExtensionType, ExtensionFormat[]>>,\n\n    /**\n     * Remove extensions from PixiJS.\n     * @param extensions - Extensions to be removed.\n     * @returns {PIXI.extensions} For chaining.\n     */\n    remove(...extensions: Array<ExtensionFormatLoose | any>)\n    {\n        extensions.map(normalizeExtension).forEach((ext) =>\n        {\n            ext.type.forEach((type) => this._removeHandlers[type]?.(ext));\n        });\n\n        return this;\n    },\n\n    /**\n     * Register new extensions with PixiJS.\n     * @param extensions - The spread of extensions to add to PixiJS.\n     * @returns {PIXI.extensions} For chaining.\n     */\n    add(...extensions: Array<ExtensionFormatLoose | any>)\n    {\n        // Handle any extensions either passed as class w/ data or as data\n        extensions.map(normalizeExtension).forEach((ext) =>\n        {\n            ext.type.forEach((type) =>\n            {\n                const handlers = this._addHandlers;\n                const queue = this._queue;\n\n                if (!handlers[type])\n                {\n                    queue[type] = queue[type] || [];\n                    queue[type]?.push(ext);\n                }\n                else\n                {\n                    handlers[type]?.(ext);\n                }\n            });\n        });\n\n        return this;\n    },\n\n    /**\n     * Internal method to handle extensions by name.\n     * @param type - The extension type.\n     * @param onAdd  - Function for handling when extensions are added/registered passes {@link PIXI.ExtensionFormat}.\n     * @param onRemove  - Function for handling when extensions are removed/unregistered passes {@link PIXI.ExtensionFormat}.\n     * @returns {PIXI.extensions} For chaining.\n     */\n    handle(type: ExtensionType, onAdd: ExtensionHandler, onRemove: ExtensionHandler)\n    {\n        const addHandlers = this._addHandlers;\n        const removeHandlers = this._removeHandlers;\n\n        if (process.env.DEBUG)\n        {\n            if (addHandlers[type] || removeHandlers[type])\n            {\n                throw new Error(`Extension type ${type} already has a handler`);\n            }\n        }\n\n        addHandlers[type] = onAdd;\n        removeHandlers[type] = onRemove;\n\n        // Process the queue\n        const queue = this._queue;\n\n        // Process any plugins that have been registered before the handler\n        if (queue[type])\n        {\n            queue[type]?.forEach((ext) => onAdd(ext));\n            delete queue[type];\n        }\n\n        return this;\n    },\n\n    /**\n     * Handle a type, but using a map by `name` property.\n     * @param type - Type of extension to handle.\n     * @param map - The object map of named extensions.\n     * @returns {PIXI.extensions} For chaining.\n     */\n    handleByMap(type: ExtensionType, map: Record<string, any>)\n    {\n        return this.handle(type,\n            (extension) =>\n            {\n                if (extension.name)\n                {\n                    map[extension.name] = extension.ref;\n                }\n            },\n            (extension) =>\n            {\n                if (extension.name)\n                {\n                    delete map[extension.name];\n                }\n            }\n        );\n    },\n\n    /**\n     * Handle a type, but using a list of extensions.\n     * @param type - Type of extension to handle.\n     * @param list - The list of extensions.\n     * @param defaultPriority - The default priority to use if none is specified.\n     * @returns {PIXI.extensions} For chaining.\n     */\n    handleByList(type: ExtensionType, list: any[], defaultPriority = -1)\n    {\n        return this.handle(\n            type,\n            (extension) =>\n            {\n                if (list.includes(extension.ref))\n                {\n                    return;\n                }\n\n                list.push(extension.ref);\n                list.sort((a, b) => normalizePriority(b, defaultPriority) - normalizePriority(a, defaultPriority));\n            },\n            (extension) =>\n            {\n                const index = list.indexOf(extension.ref);\n\n                if (index !== -1)\n                {\n                    list.splice(index, 1);\n                }\n            }\n        );\n    },\n};\n\nexport {\n    extensions,\n    ExtensionType,\n};\nexport type {\n    ExtensionFormat,\n    ExtensionFormatLoose,\n    ExtensionHandler,\n    ExtensionMetadata,\n};\n"]}