{"version":3,"file":"BlobResource.mjs","sources":["../../src/resources/BlobResource.ts"],"sourcesContent":["import { BufferResource, ViewableBuffer } from 'pixijs/core';\n\nimport type { Resource } from 'pixijs/core';\n\ninterface IBlobOptions\n{\n    autoLoad?: boolean;\n    width: number;\n    height: number;\n}\n\n/**\n * Resource that fetches texture data over the network and stores it in a buffer.\n * @class\n * @extends PIXI.Resource\n * @memberof PIXI\n */\nexport abstract class BlobResource extends BufferResource\n{\n    protected origin: string;\n    protected buffer: ViewableBuffer;\n    protected loaded: boolean;\n\n    /**\n     * @param {string} source - the URL of the texture file\n     * @param {PIXI.IBlobOptions} options\n     * @param {boolean}[options.autoLoad] - whether to fetch the data immediately;\n     *  you can fetch it later via {@link BlobResource#load}\n     * @param {boolean}[options.width] - the width in pixels.\n     * @param {boolean}[options.height] - the height in pixels.\n     */\n    constructor(source: string | Uint8Array | Uint32Array | Float32Array,\n        options: IBlobOptions = { width: 1, height: 1, autoLoad: true })\n    {\n        let origin: string;\n        let data: Uint8Array | Uint32Array | Float32Array;\n\n        if (typeof source === 'string')\n        {\n            origin = source;\n            data = new Uint8Array();\n        }\n        else\n        {\n            origin = null;\n            data = source;\n        }\n\n        super(data, options);\n\n        /**\n         * The URL of the texture file\n         * @member {string}\n         */\n        this.origin = origin;\n\n        /**\n         * The viewable buffer on the data\n         * @member {ViewableBuffer}\n         */\n        // HINT: BlobResource allows \"null\" sources, assuming the child class provides an alternative\n        this.buffer = data ? new ViewableBuffer(data) : null;\n\n        // Allow autoLoad = \"undefined\" still load the resource by default\n        if (this.origin && options.autoLoad !== false)\n        {\n            this.load();\n        }\n        if (data?.length)\n        {\n            this.loaded = true;\n            this.onBlobLoaded(this.buffer.rawBinaryData);\n        }\n    }\n\n    protected onBlobLoaded(_data: ArrayBuffer): void\n    {\n        // TODO: Override this method\n    }\n\n    /** Loads the blob */\n    async load(): Promise<Resource>\n    {\n        const response = await fetch(this.origin);\n        const blob = await response.blob();\n        const arrayBuffer = await blob.arrayBuffer();\n\n        this.data = new Uint32Array(arrayBuffer);\n        this.buffer = new ViewableBuffer(arrayBuffer);\n        this.loaded = true;\n\n        this.onBlobLoaded(arrayBuffer);\n        this.update();\n\n        return this;\n    }\n}\n"],"names":[],"mappings":";;AAiBO,MAAe,qBAAqB,cAC3C,CAAA;AAAA,EAaI,WAAA,CAAY,MACR,EAAA,OAAA,GAAwB,EAAE,KAAA,EAAO,GAAG,MAAQ,EAAA,CAAA,EAAG,QAAU,EAAA,IAAA,EAC7D,EAAA;AACI,IAAI,IAAA,MAAA,CAAA;AACJ,IAAI,IAAA,IAAA,CAAA;AAEJ,IAAI,IAAA,OAAO,WAAW,QACtB,EAAA;AACI,MAAS,MAAA,GAAA,MAAA,CAAA;AACT,MAAA,IAAA,GAAO,IAAI,UAAW,EAAA,CAAA;AAAA,KAG1B,MAAA;AACI,MAAS,MAAA,GAAA,IAAA,CAAA;AACT,MAAO,IAAA,GAAA,MAAA,CAAA;AAAA,KACX;AAEA,IAAA,KAAA,CAAM,MAAM,OAAO,CAAA,CAAA;AAMnB,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA,CAAA;AAOd,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA,GAAO,IAAI,cAAA,CAAe,IAAI,CAAI,GAAA,IAAA,CAAA;AAGhD,IAAA,IAAI,IAAK,CAAA,MAAA,IAAU,OAAQ,CAAA,QAAA,KAAa,KACxC,EAAA;AACI,MAAA,IAAA,CAAK,IAAK,EAAA,CAAA;AAAA,KACd;AACA,IAAA,IAAI,MAAM,MACV,EAAA;AACI,MAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AACd,MAAK,IAAA,CAAA,YAAA,CAAa,IAAK,CAAA,MAAA,CAAO,aAAa,CAAA,CAAA;AAAA,KAC/C;AAAA,GACJ;AAAA,EAEU,aAAa,KACvB,EAAA;AAAA,GAEA;AAAA,EAGA,MAAM,IACN,GAAA;AACI,IAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AACxC,IAAM,MAAA,IAAA,GAAO,MAAM,QAAA,CAAS,IAAK,EAAA,CAAA;AACjC,IAAM,MAAA,WAAA,GAAc,MAAM,IAAA,CAAK,WAAY,EAAA,CAAA;AAE3C,IAAK,IAAA,CAAA,IAAA,GAAO,IAAI,WAAA,CAAY,WAAW,CAAA,CAAA;AACvC,IAAK,IAAA,CAAA,MAAA,GAAS,IAAI,cAAA,CAAe,WAAW,CAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AAEd,IAAA,IAAA,CAAK,aAAa,WAAW,CAAA,CAAA;AAC7B,IAAA,IAAA,CAAK,MAAO,EAAA,CAAA;AAEZ,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AACJ;;;;"}