wtfgif 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BENCHMARKS.md +185 -0
- package/CHANGELOG.md +54 -0
- package/CONTRIBUTING.md +27 -0
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/dist/compiled.d.ts +77 -0
- package/dist/constants/gif.d.ts +17 -0
- package/dist/decoder/pool.d.ts +2 -0
- package/dist/decoder/reader.d.ts +80 -0
- package/dist/encoder/writer.d.ts +59 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/native/oneOff.d.ts +1 -0
- package/dist/native/runtime.d.ts +27 -0
- package/dist/types.d.ts +171 -0
- package/dist/utils/netscape.d.ts +16 -0
- package/dist/utils/palette.d.ts +4 -0
- package/dist/utils/subblocks.d.ts +4 -0
- package/dist/wasm/coreBackend.d.ts +2 -0
- package/dist/wasm/runtime.d.ts +24 -0
- package/dist/wasm-core/package.json +3 -0
- package/dist/wasm-core/wtfgif_core.d.ts +81 -0
- package/dist/wasm-core/wtfgif_core.js +1326 -0
- package/dist/wasm-core/wtfgif_core_bg.wasm +0 -0
- package/dist/wasm-core/wtfgif_core_bg.wasm.d.ts +51 -0
- package/dist/wasm-web/package.json +3 -0
- package/dist/wasm-web/wtfgif_core.d.ts +157 -0
- package/dist/wasm-web/wtfgif_core.js +1392 -0
- package/dist/wasm-web/wtfgif_core_bg.wasm +0 -0
- package/dist/wasm-web/wtfgif_core_bg.wasm.d.ts +51 -0
- package/package.json +125 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/wasm/runtime.ts","../src/native/runtime.ts","../src/utils/netscape.ts","../src/utils/palette.ts","../src/encoder/writer.ts","../src/utils/subblocks.ts","../src/decoder/pool.ts","../src/decoder/reader.ts","../src/wasm/coreBackend.ts","../src/compiled.ts","../src/index.ts"],"names":["cachedWasmCoreModule","wasmInitPromise","WASM_REENCODE_PRIMER","WASM_PREPARE_ITERATIONS","getSynchronousRequire","createRequire","__require","tryRequire","id","asWasmCoreModule","value","prepareWasmModule","module","representativePrimers","primer","iteration","loadWasmCoreModule","loaded","setWasmCoreModule","getWasmCoreModule","loadBrowserWasmCoreModule","moduleOrPath","initializeGlobalWasm","providedModule","providedWebModule","browserModule","initializeWasmModule","wasm","getWasmFeatures","getWasmStatus","cleanupWasm","nativeAddonModule","preparedWasmRemux","unavailable","operation","decodeGifFramesRgba","gifData","core","words","reencodeGifPixelPerfect","remuxGifWithDiscoveredBackend","remuxGifPixelPerfect","prepareWasmOneOffApi","setNativeAddonModule","getNativeAddonModule","getNativeAddonStatus","getFastBackendStatus","NETSCAPE_APPLICATION_ID","writeNetscapeLoopCount","buf","p","loopCount","i","readNetscapeLoopCount","SHIFT_0","SHIFT_8","SHIFT_16","SHIFT_24","log2Pow2","n","checkPalette","pal","pow2","buildPal32","paletteOffset","paletteSize","order","transparentIndex","pal32","limit","r","g","b","WASM_LZW_MIN_INDEX_COUNT","TRANSPARENT_ALPHA_THRESHOLD","encodeIndexedGifFrames","options","width","height","colorCount","frameSize","frameCount","getIndexedFrameCount","delays","normalizeFrameDelays","loop","checkedU16","backend","wasmCore","fastCompression","nativeAddon","flatFrames","flattenIndexedFrames","paletteToUint32Array","delayArray","encodeIndexedGif","encodeIndexedGifWithDelays","encodeIndexedGifFramesJavascript","encodeRgbaGifFrames","frameByteSize","getRgbaFrameCount","alphaThreshold","normalizeAlphaThreshold","rgbaFrames","flattenRgbaFrames","encodeRgbaGif","encodeRgbaLiteralGifWithOptions","encodeRgbaGifWithOptions","indexed","palette","indexRgbaFramesJavascript","GifWriter","gopts","go","gpPow2Bits","gctFlag","rgb","lc","x","y","w","h","indexedPixels","opts","createIndexedSourceRect","previous","rect","findChangedIndexedRect","source","lzwSource","previousSource","indexedSourceLength","o","usingLocal","numColors","colorTableSizeBits","minCodeSize","delay","disposal","useTrans","GifWriterOutputLZWCodeStream_fast","v","row","src","dst","col","index","frames","delta","estimatedSize","output","writer","frameIndex","frame","getIndexedFrame","frameOptions","frameDelay","count","isRgbaFrame","validateUint8Frames","validateIndexedFramePixels","asUint8Array","start","rgba","hasTransparentPixels","rgbaHasTransparentPixels","indexRgbaFramesToPaletteJavascript","tryIndexRgbaFramesExactJavascript","indexRgbaFrames332Javascript","colorToIndex","offset","color","rgbKey","exact","nearestPaletteIndex","usedIndexes","outputPalette","rgb332Index","fixed332Palette","bestIndex","bestDistance","dr","dg","db","distance","paletteData","message","checked","normalized","checkedU8","current","top","bottom","changed","left","right","data","stride","isIndexedSourceRect","indexStream","p0","wasmEncoded","tryEncodeLzwWithWasm","subLenPos","subLen","CLEAR","EOI","nextCode","codeSize","codeMask","bits","bitCount","CAP","keys","vals","gen","epoch","EPOCH","tableReset","emit","code","stridedData","stridedIndex","stridedRowRemaining","stridedRowWidth","stridedRowSkip","ib","k","key","slot","found","encodeIndexedLzw","concatSubBlocks","mcs","q","total","len","out","createDecoderTables","_GifReader","_usePooling","readByte","readUint16","pf0","gctColors","transparent_index","noEOF","block","label","netscape","size","pf1","t","pf2","lctFlag","interlace","lctColors","palette_offset","palette_size","has_local_palette","data_offset","outputIndices","bytes","pixelIndex","table","stack","sp","prevCode","outFirst","cur","entry","base","indexData","tempIndices","pass","yStart","yStride","yInPass","frameNum","pixels","pixelCount","buffer","format","expectedSize","frameIndices","backendResult","all","seen","available","prepared","disposeBackendResult","disposed","result","requested","maxFrame","canvas","dedupe","byteLength","previousPixels","previousPreparedPixels","restore","bucket","hash","changedRect","changedPixels","frameBytes","deltaBytes","indices","colors","spans","positions","composited","maxBytes","byIndex","target","target32","currentIndex","drawFrame","previousFrame","changedPixelCount","fullPixelCount","nextIndex","length","j","rowStride","requiredPixels","sourceWidth","targetWidth","nextByteLength","candidate","match","a","out32","trans","typedPixels","compatible","canvasWidth","existing","fw","fh","opaqueCount","spanCount","spanOut","dstRow","colorStart","xStart","_codeStream","_dataOffset","fx","fy","hasTrans","framePixels","dst32","xleft","rowStride32","GifReader","COMPOSITED_DELTA_MAGIC","COMPOSITED_DELTA_VERSION","COMPOSITED_DELTA_HEADER_LEN","COMPOSITED_DELTA_ENTRY_LEN","createWasmCoreDecodeBackend","prepareWasmCoreFrames","wasmModule","metadata","normalizeFrameIndices","prepareWasmCoreCompositedFrames","transparentByIndex","metadataFrame","toUint8Array","frameByteLength","enforceByteBudget","createPreparedFramesResult","error","requestedFrames","createRequestedFrameFlags","canvasPixels","nativeFrames","readNativeCompositedDeltaFrames","toUint32Array","readNativeCompositedFullFrames","dedupeMode","nativeFrame","hashPixels","findMatchingPixels","pixelsEqual","preparedPixels","stream","fullStart","fullLength","changedX","changedY","changedWidth","changedHeight","deltaStart","deltaLength","maxIndex","copyFrame","copyPreparedFrame","createPreparedPlayer","getTarget32","blitRectPixels","copyPreparedFrame32","transparent","_","ANIMEXTS_APPLICATION_ID","CompiledGif","_CompiledGif","layout","requestedDelays","requestedLoopCount","hasLoopOverride","input","parseGif","normalizeDelays","assertUint16","normalizedOrder","normalizeFrameOrder","compileGif","materializeFrameOrder","patches","insertions","insertedExtension","addInsertion","createNetscapeLoopExtension","patchUint16","createGraphicControlExtension","materialize","retimeGifPixelPerfect","reverseGifPixelPerfect","boomerangGifPixelPerfect","isGif87a","isGif89a","packed","position","ensureRange","extensionInsertionOffset","loopCountOffsets","pendingDelayOffset","pendingDelay","pendingControlOffset","pendingControlEndOffset","pendingDisposal","pendingHasTransparency","hasPlainText","hasDuplicateControl","sawTrailer","blockOffset","blockType","controlPacked","app","readNetscapeLoopExtension","skipSubBlocks","imagePacked","localColorTableLength","imageEndOffset","frameWidth","frameHeight","frameReorderError","getFrameReorderError","matchesApplicationId","applicationId","byte","subBlockOffset","lastFrame","everyFrameOpaque","everyFrameRestoresBase","patchedSource","outputLength","groups","outputPosition","sourcePosition","insertionOffsets","insertionOffset","sourceSpan","firstFrame","prefixEnd","suffixStart","atom","PUBLIC_API_PRIMER","preparePublicFastPath","generatedPrimer","representativePrimer","bindPublicWasmApi","browserExports","initializeWasmGlobally","installWasmCoreBackend"],"mappings":"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","file":"index.cjs","sourcesContent":["import { WasmCoreModule } from \"../types\";\n\nlet cachedWasmCoreModule: WasmCoreModule | null | undefined;\nlet wasmInitPromise: Promise<void> | null = null;\nconst WASM_REENCODE_PRIMER = new Uint8Array([\n\t71, 73, 70, 56, 57, 97, 2, 0, 2, 0, 128, 0, 0, 0, 0, 0, 255, 255, 255,\n\t44, 0, 0, 0, 0, 2, 0, 2, 0, 0, 2, 3, 68, 24, 20, 0, 59,\n]);\nconst WASM_PREPARE_ITERATIONS = 64;\n\nexport type WasmWebModule = WasmCoreModule & {\n\tdefault?: (moduleOrPath?: unknown) => Promise<unknown>;\n};\n\ntype NodeModuleBuiltin = {\n\tcreateRequire?: (filename: string | URL) => NodeRequire;\n};\n\ntype ProcessWithBuiltinModule = NodeJS.Process & {\n\tgetBuiltinModule?: (id: string) => NodeModuleBuiltin | undefined;\n};\n\nconst getSynchronousRequire = (): NodeRequire | null => {\n\tconst processWithBuiltins =\n\t\ttypeof process === \"undefined\"\n\t\t\t? undefined\n\t\t\t: (process as ProcessWithBuiltinModule);\n\tconst createRequire =\n\t\tprocessWithBuiltins?.getBuiltinModule?.(\"node:module\")?.createRequire;\n\tif (createRequire) {\n\t\treturn createRequire(import.meta.url);\n\t}\n\treturn typeof require === \"function\" ? require : null;\n};\n\nconst tryRequire = (id: string): unknown => {\n\ttry {\n\t\treturn getSynchronousRequire()?.(id) ?? null;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nconst asWasmCoreModule = (value: unknown): WasmCoreModule | null => {\n\tif (!value || typeof (value as WasmCoreModule).WtfGifCore !== \"function\") {\n\t\treturn null;\n\t}\n\treturn value as WasmCoreModule;\n};\n\nconst prepareWasmModule = (module: WasmCoreModule): void => {\n\tmodule.prepare_reencode_hot_path?.();\n\tconst representativePrimers = module.reencode_hot_path_primer\n\t\t? [\n\t\t\t\tmodule.reencode_hot_path_primer(16, 2),\n\t\t\t\tmodule.reencode_hot_path_primer(32, 8),\n\t\t\t\t...(module.remux_hot_path_primer\n\t\t\t\t\t? [module.remux_hot_path_primer()]\n\t\t\t\t\t: []),\n\t\t\t]\n\t\t: [];\n\tif (module.reencode_gif_pixel_perfect) {\n\t\tfor (const primer of representativePrimers) {\n\t\t\tfor (let iteration = 0; iteration < 32; iteration++) {\n\t\t\t\tmodule.reencode_gif_pixel_perfect(primer);\n\t\t\t\tmodule.remux_gif_pixel_perfect?.(primer);\n\t\t\t}\n\t\t}\n\t}\n\tfor (let iteration = 0; iteration < WASM_PREPARE_ITERATIONS; iteration++) {\n\t\tmodule.reencode_gif_pixel_perfect?.(WASM_REENCODE_PRIMER);\n\t\tmodule.remux_gif_pixel_perfect?.(WASM_REENCODE_PRIMER);\n\t\tmodule.decode_all_rgba?.(WASM_REENCODE_PRIMER);\n\t}\n};\n\nconst loadWasmCoreModule = (): WasmCoreModule | null => {\n\tif (cachedWasmCoreModule !== undefined) {\n\t\treturn cachedWasmCoreModule;\n\t}\n\n\tconst loaded =\n\t\ttryRequire(\"../../crates/wtfgif-core/pkg/wtfgif_core.js\") ??\n\t\ttryRequire(\"../crates/wtfgif-core/pkg/wtfgif_core.js\") ??\n\t\ttryRequire(\"wtfgif/wasm-core\");\n\tcachedWasmCoreModule = asWasmCoreModule(loaded);\n\treturn cachedWasmCoreModule;\n};\n\nexport function setWasmCoreModule(module: WasmCoreModule | null): void {\n\tcachedWasmCoreModule = module;\n}\n\nexport function getWasmCoreModule(): WasmCoreModule | null {\n\treturn loadWasmCoreModule();\n}\n\nconst loadBrowserWasmCoreModule = async (\n\tmoduleOrPath?: unknown,\n): Promise<WasmCoreModule | null> => {\n\tif (typeof WebAssembly === \"undefined\") {\n\t\treturn null;\n\t}\n\n\tconst moduleUrl = new URL(\n\t\t\"./wasm-web/wtfgif_core.js\",\n\t\timport.meta.url,\n\t).href;\n\tconst loaded = (await import(/* @vite-ignore */ moduleUrl)) as WasmWebModule;\n\tif (typeof loaded.default === \"function\") {\n\t\tawait loaded.default(moduleOrPath);\n\t}\n\treturn asWasmCoreModule(loaded);\n};\n\nexport const initializeGlobalWasm = (\n\tmoduleOrPath?: unknown,\n): Promise<void> => {\n\tif (wasmInitPromise) {\n\t\treturn wasmInitPromise;\n\t}\n\n\twasmInitPromise = (async () => {\n\t\tconst providedModule = asWasmCoreModule(moduleOrPath);\n\t\tif (providedModule) {\n\t\t\tconst providedWebModule = moduleOrPath as WasmWebModule;\n\t\t\tif (typeof providedWebModule.default === \"function\") {\n\t\t\t\tawait providedWebModule.default();\n\t\t\t}\n\t\t\tsetWasmCoreModule(providedModule);\n\t\t\tprepareWasmModule(providedModule);\n\t\t\treturn;\n\t\t}\n\t\tif (cachedWasmCoreModule === null) {\n\t\t\tcachedWasmCoreModule = undefined;\n\t\t}\n\t\tif (moduleOrPath !== undefined) {\n\t\t\tconst browserModule = await loadBrowserWasmCoreModule(moduleOrPath);\n\t\t\tif (browserModule) {\n\t\t\t\tsetWasmCoreModule(browserModule);\n\t\t\t\tprepareWasmModule(browserModule);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (getWasmCoreModule()) {\n\t\t\treturn;\n\t\t}\n\t\tconst browserModule = await loadBrowserWasmCoreModule(moduleOrPath);\n\t\tif (browserModule) {\n\t\t\tsetWasmCoreModule(browserModule);\n\t\t\tprepareWasmModule(browserModule);\n\t\t}\n\t})().finally(() => {\n\t\twasmInitPromise = null;\n\t});\n\n\treturn wasmInitPromise;\n};\n\nexport async function initializeWasmModule(\n\tmodule: WasmWebModule,\n\tmoduleOrPath?: unknown,\n): Promise<void> {\n\tif (typeof module.default === \"function\") {\n\t\tawait module.default(\n\t\t\tmoduleOrPath === undefined ? undefined : { module_or_path: moduleOrPath },\n\t\t);\n\t}\n\tconst wasm = asWasmCoreModule(module);\n\tif (!wasm) {\n\t\tthrow new Error(\"The supplied module is not a wtfgif WebAssembly module\");\n\t}\n\tsetWasmCoreModule(wasm);\n\tprepareWasmModule(wasm);\n}\n\nexport function getWasmFeatures(): {\n\tsupported: boolean;\n\tsimd: boolean;\n\tthreads: boolean;\n} {\n\treturn {\n\t\tsupported: typeof WebAssembly !== \"undefined\",\n\t\tsimd: false,\n\t\tthreads:\n\t\t\ttypeof SharedArrayBuffer !== \"undefined\" &&\n\t\t\t(typeof crossOriginIsolated === \"undefined\" || crossOriginIsolated),\n\t};\n}\n\nexport function getWasmStatus(): {\n\tsupported: boolean;\n\tsimd: boolean;\n\tthreads: boolean;\n\tinitialized: boolean;\n\tworkerPoolAvailable: boolean;\n} {\n\treturn {\n\t\t...getWasmFeatures(),\n\t\tinitialized: getWasmCoreModule() !== null,\n\t\tworkerPoolAvailable: false,\n\t};\n}\n\nexport function getWasmInitPromise(): Promise<void> | null {\n\treturn wasmInitPromise;\n}\n\nexport function setWasmInitPromise(promise: Promise<void> | null): void {\n\twasmInitPromise = promise;\n}\n\nexport function isWasmReady(): boolean {\n\treturn getWasmCoreModule() !== null;\n}\n\nexport function cleanupWasm(): void {\n\tcachedWasmCoreModule = null;\n\twasmInitPromise = null;\n}\n","import { getWasmCoreModule } from \"../wasm/runtime\";\nimport type { WasmCoreModule } from \"../types\";\n\nexport interface NativeDecodedRgbaFrames {\n\twidth: number;\n\theight: number;\n\tframeCount: number;\n\tpixels: Uint8Array;\n}\n\nexport interface NativeAddonModule {\n\tdecodeFramesRgba: (gifData: Uint8Array) => NativeDecodedRgbaFrames;\n\tencodeIndexedFast: (\n\t\tindexedFrames: Uint8Array,\n\t\twidth: number,\n\t\theight: number,\n\t\tframeCount: number,\n\t\tpalette: Uint32Array,\n\t\tdelays: Uint16Array,\n\t\tloopCount: number,\n\t\tdelta: boolean,\n\t) => Uint8Array;\n\tencodeRgbaFast: (\n\t\trgbaFrames: Uint8Array,\n\t\twidth: number,\n\t\theight: number,\n\t\tframeCount: number,\n\t\tpalette: Uint32Array,\n\t\tdelays: Uint16Array,\n\t\tloopCount: number,\n\t\tdelta: boolean,\n\t) => Uint8Array;\n\treencodeGifFast: (gifData: Uint8Array) => Uint8Array;\n}\n\nlet nativeAddonModule: NativeAddonModule | null = null;\nlet preparedWasmRemux:\n\t| ((gifData: Uint8Array) => Uint8Array)\n\t| null = null;\n\nconst unavailable = (operation: string): never => {\n\tthrow new Error(\n\t\t`Fast Rust backend unavailable. Initialize WebAssembly or install the native addon before ${operation}.`,\n\t);\n};\n\nexport function decodeGifFramesRgba(\n\tgifData: Uint8Array,\n): NativeDecodedRgbaFrames {\n\tif (nativeAddonModule) {\n\t\treturn nativeAddonModule.decodeFramesRgba(gifData);\n\t}\n\tconst wasm = getWasmCoreModule();\n\tif (!wasm) {\n\t\treturn unavailable(\"decoding\");\n\t}\n\tconst core = new wasm.WtfGifCore(gifData);\n\ttry {\n\t\tconst words = core.decode_all_rgba?.();\n\t\tif (!words) {\n\t\t\treturn unavailable(\"decoding\");\n\t\t}\n\t\treturn {\n\t\t\twidth: core.width(),\n\t\t\theight: core.height(),\n\t\t\tframeCount: core.frame_count(),\n\t\t\tpixels: new Uint8Array(\n\t\t\t\twords.buffer,\n\t\t\t\twords.byteOffset,\n\t\t\t\twords.byteLength,\n\t\t\t),\n\t\t};\n\t} finally {\n\t\tcore.free();\n\t}\n}\n\nexport function reencodeGifPixelPerfect(gifData: Uint8Array): Uint8Array {\n\tif (nativeAddonModule) {\n\t\treturn nativeAddonModule.reencodeGifFast(gifData);\n\t}\n\tconst wasm = getWasmCoreModule();\n\tif (!wasm) {\n\t\treturn unavailable(\"reencoding\");\n\t}\n\tif (wasm.reencode_gif_pixel_perfect) {\n\t\treturn wasm.reencode_gif_pixel_perfect(gifData);\n\t}\n\tconst core = new wasm.WtfGifCore(gifData);\n\ttry {\n\t\treturn (\n\t\t\tcore.reencode_gif_pixel_perfect?.() ??\n\t\t\tunavailable(\"reencoding\")\n\t\t);\n\t} finally {\n\t\tcore.free();\n\t}\n}\n\nconst remuxGifWithDiscoveredBackend = (gifData: Uint8Array): Uint8Array => {\n\tconst wasm = getWasmCoreModule();\n\tif (!wasm?.remux_gif_pixel_perfect) {\n\t\treturn unavailable(\"losslessly remuxing\");\n\t}\n\treturn wasm.remux_gif_pixel_perfect(gifData);\n};\n\nexport let remuxGifPixelPerfect = remuxGifWithDiscoveredBackend;\n\nexport function prepareWasmOneOffApi(module: WasmCoreModule | null): void {\n\tpreparedWasmRemux = module?.remux_gif_pixel_perfect ?? null;\n\tremuxGifPixelPerfect =\n\t\tpreparedWasmRemux ?? remuxGifWithDiscoveredBackend;\n}\n\nexport function setNativeAddonModule(module: NativeAddonModule | null): void {\n\tnativeAddonModule = module;\n}\n\nexport function getNativeAddonModule(): NativeAddonModule | null {\n\treturn nativeAddonModule;\n}\n\nexport function getNativeAddonStatus(): {\n\tname: string;\n\tavailable: boolean;\n} {\n\treturn {\n\t\tname: \"wtfgif-rust-native\",\n\t\tavailable: nativeAddonModule !== null,\n\t};\n}\n\nexport function getFastBackendStatus(): {\n\tname: \"wtfgif-rust-native\" | \"wtfgif-rust-wasm\" | null;\n\tavailable: boolean;\n} {\n\tif (nativeAddonModule) {\n\t\treturn { name: \"wtfgif-rust-native\", available: true };\n\t}\n\tif (getWasmCoreModule()) {\n\t\treturn { name: \"wtfgif-rust-wasm\", available: true };\n\t}\n\treturn { name: null, available: false };\n}\n","import { GIF } from \"../constants/gif\";\nimport { GifBinary } from \"../types\";\n\n// Identifier for the Netscape application extension: \"NETSCAPE2.0\"\nexport const NETSCAPE_APPLICATION_ID = new Uint8Array([\n 0x4e, 0x45, 0x54, 0x53, 0x43, 0x41, 0x50, 0x45, 0x32, 0x2e, 0x30,\n]);\n\n/**\n * Write a Netscape loop count application extension to the buffer.\n * Returns the new buffer position after the extension.\n */\nexport function writeNetscapeLoopCount(\n buf: GifBinary,\n p: number,\n loopCount: number,\n): number {\n buf[p++] = GIF.EXT;\n buf[p++] = GIF.APPLICATION;\n buf[p++] = GIF.NETSCAPE_LEN;\n for (let i = 0; i < NETSCAPE_APPLICATION_ID.length; i++) {\n buf[p++] = NETSCAPE_APPLICATION_ID[i]!;\n }\n buf[p++] = 0x03;\n buf[p++] = 0x01;\n buf[p++] = loopCount & 0xff;\n buf[p++] = (loopCount >> 8) & 0xff;\n buf[p++] = 0x00;\n return p;\n}\n\n/**\n * Attempt to read a Netscape loop count application extension starting\n * at the given position. If the extension matches, returns the loop count\n * and the next buffer position; otherwise returns null.\n */\nexport function readNetscapeLoopCount(\n buf: Uint8Array,\n p: number,\n): { loopCount: number; nextPos: number } | null {\n if (buf[p] !== GIF.NETSCAPE_LEN) return null;\n for (let i = 0; i < NETSCAPE_APPLICATION_ID.length; i++) {\n if (buf[p + 1 + i] !== NETSCAPE_APPLICATION_ID[i]) return null;\n }\n if (buf[p + 12] !== 0x03 || buf[p + 13] !== 0x01 || buf[p + 16] !== 0x00) {\n return null;\n }\n const loopCount = (buf[p + 14]! | (buf[p + 15]! << 8)) >>> 0;\n return { loopCount, nextPos: p + 17 };\n}\n","import { PaletteRGB } from \"../types\";\n\n// Precompute Uint32 representations for channel shifts to avoid per-entry math\nconst SHIFT_0 = new Uint32Array(256);\nconst SHIFT_8 = new Uint32Array(256);\nconst SHIFT_16 = new Uint32Array(256);\nconst SHIFT_24 = new Uint32Array(256);\n\nfor (let i = 0; i < 256; i++) {\n SHIFT_0[i] = i;\n SHIFT_8[i] = i << 8;\n SHIFT_16[i] = i << 16;\n SHIFT_24[i] = i << 24;\n}\n\nexport function log2Pow2(n: number): number {\n return 31 - Math.clz32(n);\n}\n\nexport function checkPalette(pal: PaletteRGB): number {\n const n = pal.length >>> 0;\n if (n === 0 || n > 256)\n throw new Error(\"Invalid palette size (must be 1..256).\");\n let pow2 = 1;\n while (pow2 < n) pow2 <<= 1;\n if (pow2 < 2) pow2 = 2;\n if (pow2 > 256) throw new Error(\"Invalid palette size (must be 1..256).\");\n return pow2;\n}\n\nexport function buildPal32(\n buf: Uint8Array,\n paletteOffset: number,\n paletteSize: number,\n order: \"rgba\" | \"bgra\",\n transparentIndex: number | null = null\n): Uint32Array {\n const pal32 = new Uint32Array(256);\n const limit = Math.min(paletteSize, 256);\n if (order === \"rgba\") {\n for (let i = 0; i < limit; i++) {\n const r = buf[paletteOffset + i * 3]! | 0;\n const g = buf[paletteOffset + i * 3 + 1]! | 0;\n const b = buf[paletteOffset + i * 3 + 2]! | 0;\n if (transparentIndex !== null && i === transparentIndex) {\n pal32[i] = SHIFT_16[b]! | SHIFT_8[g]! | SHIFT_0[r]!;\n } else {\n pal32[i] = SHIFT_24[255]! | SHIFT_16[b]! | SHIFT_8[g]! | SHIFT_0[r]!;\n }\n }\n } else {\n for (let i = 0; i < limit; i++) {\n const r = buf[paletteOffset + i * 3]! | 0;\n const g = buf[paletteOffset + i * 3 + 1]! | 0;\n const b = buf[paletteOffset + i * 3 + 2]! | 0;\n if (transparentIndex !== null && i === transparentIndex) {\n pal32[i] = SHIFT_16[r]! | SHIFT_8[g]! | SHIFT_0[b]!;\n } else {\n pal32[i] = SHIFT_24[255]! | SHIFT_16[r]! | SHIFT_8[g]! | SHIFT_0[b]!;\n }\n }\n }\n return pal32;\n}\n","import { GIF } from \"../constants/gif\";\nimport { getNativeAddonModule } from \"../native/runtime\";\nimport {\n\tFrameOptions,\n\tGifBinary,\n\tGifOptions,\n\tPaletteRGB,\n} from \"../types\";\nimport { writeNetscapeLoopCount } from \"../utils/netscape\";\nimport { checkPalette, log2Pow2 } from \"../utils/palette\";\nimport { getWasmCoreModule } from \"../wasm/runtime\";\n\nconst WASM_LZW_MIN_INDEX_COUNT = 8192;\nconst TRANSPARENT_ALPHA_THRESHOLD = 128;\n\nexport type IndexedGifFrame = Uint8Array | number[];\nexport type IndexedGifFrames = Uint8Array | IndexedGifFrame[];\nexport type EncodeIndexedGifFramesBackend =\n\t| \"auto\"\n\t| \"rust\"\n\t| \"wasm\"\n\t| \"native\"\n\t| \"javascript\";\nexport type RgbaGifFrame = Uint8Array | Uint8ClampedArray;\nexport type RgbaGifFrames = Uint8Array | Uint8ClampedArray | RgbaGifFrame[];\nexport type GifFrameDelay = number | readonly number[] | Uint16Array;\nexport type GifCompressionMode = \"balanced\" | \"fast\";\n\nexport interface EncodeIndexedGifFramesOptions {\n\twidth: number;\n\theight: number;\n\tframes: IndexedGifFrames;\n\tframeCount?: number;\n\tpalette: PaletteRGB;\n\tdelay?: GifFrameDelay;\n\tloop?: number | null;\n\tbackend?: EncodeIndexedGifFramesBackend;\n\tdelta?: boolean;\n\tcompression?: GifCompressionMode;\n}\n\nexport interface EncodeRgbaGifFramesOptions {\n\twidth: number;\n\theight: number;\n\tframes: RgbaGifFrames;\n\tframeCount?: number;\n\tpalette?: PaletteRGB;\n\tdelay?: GifFrameDelay;\n\tloop?: number | null;\n\tbackend?: EncodeIndexedGifFramesBackend;\n\tdelta?: boolean;\n\talphaThreshold?: number;\n\tcompression?: GifCompressionMode;\n}\n\ntype IndexedPixels = IndexedGifFrame;\n\ntype IndexedSourceRect = {\n\tdata: IndexedPixels;\n\toffset: number;\n\twidth: number;\n\theight: number;\n\tstride: number;\n\tlength: number;\n};\n\ntype LzwIndexStream = IndexedPixels | IndexedSourceRect;\n\nexport function encodeIndexedGifFrames(\n\toptions: EncodeIndexedGifFramesOptions,\n): Uint8Array {\n\tconst width = options.width | 0;\n\tconst height = options.height | 0;\n\tif (width <= 0 || height <= 0 || width > 65535 || height > 65535) {\n\t\tthrow new Error(\"Width/Height invalid.\");\n\t}\n\n\tconst colorCount = checkPalette(options.palette);\n\tconst frameSize = width * height;\n\tconst frameCount = getIndexedFrameCount(\n\t\toptions.frames,\n\t\tframeSize,\n\t\toptions.frameCount,\n\t);\n\tconst delays = normalizeFrameDelays(options.delay, frameCount);\n\tconst loop =\n\t\toptions.loop === undefined || options.loop === null\n\t\t\t? null\n\t\t\t: checkedU16(options.loop, \"Loop count invalid.\");\n\n\tconst backend = options.backend ?? \"auto\";\n\tconst wasmCore = backend === \"javascript\" ? null : getWasmCoreModule();\n\tconst fastCompression = options.compression === \"fast\";\n\tconst nativeAddon =\n\t\tbackend === \"javascript\" || backend === \"wasm\"\n\t\t\t? null\n\t\t\t: getNativeAddonModule();\n\tif ((backend === \"rust\" || backend === \"wasm\") && !nativeAddon && !wasmCore) {\n\t\tthrow new Error(\n\t\t\t\"Fast Rust backend unavailable. Initialize WebAssembly or install the native addon before encoding.\",\n\t\t);\n\t}\n\tif (fastCompression && nativeAddon) {\n\t\tconst flatFrames = flattenIndexedFrames(\n\t\t\toptions.frames,\n\t\t\tframeSize,\n\t\t\tframeCount,\n\t\t\tcolorCount,\n\t\t\tfalse,\n\t\t);\n\t\treturn nativeAddon.encodeIndexedFast(\n\t\t\tflatFrames,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframeCount,\n\t\t\tpaletteToUint32Array(options.palette),\n\t\t\tdelayArray(delays, frameCount),\n\t\t\tloop === null ? -1 : loop,\n\t\t\toptions.delta === true,\n\t\t);\n\t}\n\tif (typeof delays === \"number\") {\n\t\tconst encodeIndexedGif = fastCompression\n\t\t\t? options.delta\n\t\t\t\t? wasmCore?.encode_indexed_literal_delta_gif\n\t\t\t\t: wasmCore?.encode_indexed_literal_gif\n\t\t\t: options.delta\n\t\t\t\t? wasmCore?.encode_indexed_delta_gif\n\t\t\t\t: wasmCore?.encode_indexed_gif;\n\t\tif (encodeIndexedGif) {\n\t\t\tconst flatFrames = flattenIndexedFrames(\n\t\t\t\toptions.frames,\n\t\t\t\tframeSize,\n\t\t\t\tframeCount,\n\t\t\t\tcolorCount,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\treturn encodeIndexedGif(\n\t\t\t\tflatFrames,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tframeCount,\n\t\t\t\tpaletteToUint32Array(options.palette),\n\t\t\t\tdelays,\n\t\t\t\tloop === null ? -1 : loop,\n\t\t\t);\n\t\t}\n\t} else {\n\t\tconst encodeIndexedGifWithDelays = fastCompression\n\t\t\t? options.delta\n\t\t\t\t? wasmCore?.encode_indexed_literal_delta_gif_with_delays\n\t\t\t\t: wasmCore?.encode_indexed_literal_gif_with_delays\n\t\t\t: options.delta\n\t\t\t\t? wasmCore?.encode_indexed_delta_gif_with_delays\n\t\t\t\t: wasmCore?.encode_indexed_gif_with_delays;\n\t\tif (encodeIndexedGifWithDelays) {\n\t\t\tconst flatFrames = flattenIndexedFrames(\n\t\t\t\toptions.frames,\n\t\t\t\tframeSize,\n\t\t\t\tframeCount,\n\t\t\t\tcolorCount,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\treturn encodeIndexedGifWithDelays(\n\t\t\t\tflatFrames,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tframeCount,\n\t\t\t\tpaletteToUint32Array(options.palette),\n\t\t\t\tdelays,\n\t\t\t\tloop === null ? -1 : loop,\n\t\t\t);\n\t\t}\n\t}\n\tif (backend === \"native\") {\n\t\tthrow new Error(\"Rust/Wasm GIF encoder unavailable.\");\n\t}\n\n\treturn encodeIndexedGifFramesJavascript(\n\t\toptions.frames,\n\t\twidth,\n\t\theight,\n\t\tframeSize,\n\t\tframeCount,\n\t\toptions.palette,\n\t\tdelays,\n\t\tloop,\n\t\toptions.delta === true,\n\t);\n}\n\nexport function encodeRgbaGifFrames(\n\toptions: EncodeRgbaGifFramesOptions,\n): Uint8Array {\n\tconst width = options.width | 0;\n\tconst height = options.height | 0;\n\tif (width <= 0 || height <= 0 || width > 65535 || height > 65535) {\n\t\tthrow new Error(\"Width/Height invalid.\");\n\t}\n\n\tif (options.palette !== undefined) {\n\t\tcheckPalette(options.palette);\n\t}\n\n\tconst frameSize = width * height;\n\tconst frameByteSize = frameSize * 4;\n\tconst frameCount = getRgbaFrameCount(\n\t\toptions.frames,\n\t\tframeByteSize,\n\t\toptions.frameCount,\n\t);\n\tconst delays = normalizeFrameDelays(options.delay, frameCount);\n\tconst alphaThreshold = normalizeAlphaThreshold(options.alphaThreshold);\n\tconst loop =\n\t\toptions.loop === undefined || options.loop === null\n\t\t\t? null\n\t\t\t: checkedU16(options.loop, \"Loop count invalid.\");\n\n\tconst rgbaFrames = flattenRgbaFrames(\n\t\toptions.frames,\n\t\tframeByteSize,\n\t\tframeCount,\n\t);\n\tconst backend = options.backend ?? \"auto\";\n\tconst wasmCore = backend === \"javascript\" ? null : getWasmCoreModule();\n\tconst fastCompression = options.compression === \"fast\";\n\tconst nativeAddon =\n\t\tbackend === \"javascript\" || backend === \"wasm\"\n\t\t\t? null\n\t\t\t: getNativeAddonModule();\n\tif ((backend === \"rust\" || backend === \"wasm\") && !nativeAddon && !wasmCore) {\n\t\tthrow new Error(\n\t\t\t\"Fast Rust backend unavailable. Initialize WebAssembly or install the native addon before encoding.\",\n\t\t);\n\t}\n\tif (\n\t\tfastCompression &&\n\t\talphaThreshold === TRANSPARENT_ALPHA_THRESHOLD &&\n\t\tnativeAddon\n\t) {\n\t\treturn nativeAddon.encodeRgbaFast(\n\t\t\trgbaFrames,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframeCount,\n\t\t\tpaletteToUint32Array(options.palette ?? []),\n\t\t\tdelayArray(delays, frameCount),\n\t\t\tloop === null ? -1 : loop,\n\t\t\toptions.delta === true,\n\t\t);\n\t}\n\tif (\n\t\ttypeof delays === \"number\" &&\n\t\talphaThreshold === TRANSPARENT_ALPHA_THRESHOLD\n\t) {\n\t\tif (fastCompression) {\n\t\t\tconst encodeRgbaGif = options.delta\n\t\t\t\t? wasmCore?.encode_rgba_literal_delta_gif\n\t\t\t\t: wasmCore?.encode_rgba_literal_gif;\n\t\t\tif (encodeRgbaGif) {\n\t\t\t\treturn encodeRgbaGif(\n\t\t\t\t\trgbaFrames,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tframeCount,\n\t\t\t\t\tpaletteToUint32Array(options.palette ?? []),\n\t\t\t\t\tdelays,\n\t\t\t\t\tloop === null ? -1 : loop,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (wasmCore?.encode_rgba_gif) {\n\t\t\treturn wasmCore.encode_rgba_gif(\n\t\t\t\trgbaFrames,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tframeCount,\n\t\t\t\tpaletteToUint32Array(options.palette ?? []),\n\t\t\t\tdelays,\n\t\t\t\tloop === null ? -1 : loop,\n\t\t\t\toptions.delta === true,\n\t\t\t);\n\t\t}\n\t}\n\tif (fastCompression) {\n\t\tconst encodeRgbaLiteralGifWithOptions = options.delta\n\t\t\t? wasmCore?.encode_rgba_literal_delta_gif_with_options\n\t\t\t: wasmCore?.encode_rgba_literal_gif_with_options;\n\t\tif (encodeRgbaLiteralGifWithOptions) {\n\t\t\treturn encodeRgbaLiteralGifWithOptions(\n\t\t\t\trgbaFrames,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tframeCount,\n\t\t\t\tpaletteToUint32Array(options.palette ?? []),\n\t\t\t\tdelayArray(delays, frameCount),\n\t\t\t\tloop === null ? -1 : loop,\n\t\t\t\talphaThreshold,\n\t\t\t);\n\t\t}\n\t}\n\tconst encodeRgbaGifWithOptions = wasmCore?.encode_rgba_gif_with_options;\n\tif (encodeRgbaGifWithOptions) {\n\t\treturn encodeRgbaGifWithOptions(\n\t\t\trgbaFrames,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframeCount,\n\t\t\tpaletteToUint32Array(options.palette ?? []),\n\t\t\tdelayArray(delays, frameCount),\n\t\t\tloop === null ? -1 : loop,\n\t\t\toptions.delta === true,\n\t\t\talphaThreshold,\n\t\t);\n\t}\n\tif (backend === \"native\") {\n\t\tthrow new Error(\"Rust/Wasm GIF encoder unavailable.\");\n\t}\n\n\tconst { indexed, palette, transparentIndex } = indexRgbaFramesJavascript(\n\t\trgbaFrames,\n\t\toptions.palette,\n\t\talphaThreshold,\n\t);\n\treturn encodeIndexedGifFramesJavascript(\n\t\tindexed,\n\t\twidth,\n\t\theight,\n\t\tframeSize,\n\t\tframeCount,\n\t\tpalette,\n\t\tdelays,\n\t\tloop,\n\t\toptions.delta === true,\n\t\ttransparentIndex,\n\t);\n}\n\nexport class GifWriter {\n\tprivate p = 0;\n\tprivate ended = false;\n\n\tprivate loopCount: number | null;\n\tprivate globalPalette: PaletteRGB | null;\n\tprivate background = 0;\n\tprivate globalColorCount = 0;\n\tprivate previousIndexedFrame: Uint8Array | null = null;\n\n\tconstructor(\n\t\tprivate buf: GifBinary,\n\t\tpublic readonly width: number,\n\t\tpublic readonly height: number,\n\t\tgopts?: GifOptions,\n\t) {\n\t\tconst go = gopts ?? {};\n\t\tthis.loopCount = go.loop === undefined ? null : go.loop;\n\t\tthis.globalPalette = go.palette === undefined ? null : go.palette;\n\n\t\tif (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n\t\t\tthrow new Error(\"Width/Height invalid.\");\n\n\t\tthis.buf[this.p++] = GIF.G;\n\t\tthis.buf[this.p++] = GIF.I;\n\t\tthis.buf[this.p++] = GIF.F;\n\t\tthis.buf[this.p++] = GIF._8;\n\t\tthis.buf[this.p++] = GIF._9;\n\t\tthis.buf[this.p++] = GIF.A;\n\n\t\tlet gpPow2Bits = 0;\n\t\tif (this.globalPalette !== null) {\n\t\t\tconst n = checkPalette(this.globalPalette);\n\t\t\tthis.globalColorCount = n;\n\t\t\tconst pow = log2Pow2(n); // 1..8\n\t\t\tgpPow2Bits = (pow - 1) & 7; // 0..7 per spec\n\n\t\t\tif (go.background !== undefined) {\n\t\t\t\tthis.background = go.background | 0;\n\t\t\t\tif (this.background < 0 || this.background >= n)\n\t\t\t\t\tthrow new Error(\"Background index out of range.\");\n\t\t\t}\n\t\t}\n\n\t\t/* Logical Screen Descriptor */\n\t\tthis.buf[this.p++] = width & 0xff;\n\t\tthis.buf[this.p++] = (width >> 8) & 0xff;\n\t\tthis.buf[this.p++] = height & 0xff;\n\t\tthis.buf[this.p++] = (height >> 8) & 0xff;\n\n\t\tconst gctFlag = this.globalPalette !== null ? 0x80 : 0x00;\n\t\tthis.buf[this.p++] = gctFlag | gpPow2Bits;\n\t\tthis.buf[this.p++] = this.background & 0xff; // background color index\n\t\tthis.buf[this.p++] = 0; // pixel aspect ratio\n\n\t\t// Global Color Table\n\t\tif (this.globalPalette !== null) {\n\t\t\tfor (let i = 0; i < this.globalColorCount; i++) {\n\t\t\t\tconst rgb = (this.globalPalette[i] ?? 0) >>> 0;\n\t\t\t\tthis.buf[this.p++] = (rgb >> 16) & 0xff;\n\t\t\t\tthis.buf[this.p++] = (rgb >> 8) & 0xff;\n\t\t\t\tthis.buf[this.p++] = rgb & 0xff;\n\t\t\t}\n\t\t}\n\n\t\t// Netscape loop count\n\t\tif (this.loopCount !== null) {\n\t\t\tconst lc = this.loopCount | 0;\n\t\t\tif (lc < 0 || lc > 65535) throw new Error(\"Loop count invalid.\");\n\t\t\tthis.p = writeNetscapeLoopCount(this.buf, this.p, lc);\n\t\t}\n\t}\n\n\taddFrame(\n\t\tx: number,\n\t\ty: number,\n\t\tw: number,\n\t\th: number,\n\t\tindexedPixels: IndexedPixels,\n\t\topts?: FrameOptions,\n\t): number {\n\t\tx |= 0;\n\t\ty |= 0;\n\t\tw |= 0;\n\t\th |= 0;\n\n\t\tif (x < 0 || y < 0 || x > 65535 || y > 65535)\n\t\t\tthrow new Error(\"x/y invalid.\");\n\t\tif (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n\t\t\tthrow new Error(\"Width/Height invalid.\");\n\t\tif (indexedPixels.length < w * h)\n\t\t\tthrow new Error(\"Not enough pixels for the frame size.\");\n\n\t\treturn this.writeFrame(\n\t\t\tx,\n\t\t\ty,\n\t\t\tw,\n\t\t\th,\n\t\t\tindexedPixels,\n\t\t\tcreateIndexedSourceRect(indexedPixels, 0, w, h, w),\n\t\t\topts,\n\t\t);\n\t}\n\n\taddFrameDelta(\n\t\tindexedPixels: IndexedPixels,\n\t\topts?: FrameOptions,\n\t): number {\n\t\tif (indexedPixels.length < this.width * this.height) {\n\t\t\tthrow new Error(\"Not enough pixels for the frame size.\");\n\t\t}\n\n\t\tif (opts?.palette !== undefined && opts.palette !== null) {\n\t\t\treturn this.addFrame(0, 0, this.width, this.height, indexedPixels, opts);\n\t\t}\n\n\t\tconst previous = this.previousIndexedFrame;\n\t\tif (!previous) {\n\t\t\treturn this.addFrame(0, 0, this.width, this.height, indexedPixels, opts);\n\t\t}\n\n\t\tconst rect = findChangedIndexedRect(\n\t\t\tprevious,\n\t\t\tindexedPixels,\n\t\t\tthis.width,\n\t\t\tthis.height,\n\t\t);\n\t\tif (!rect) {\n\t\t\tconst source = createIndexedSourceRect(\n\t\t\t\tindexedPixels,\n\t\t\t\t0,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\tthis.width,\n\t\t\t);\n\t\t\treturn this.writeFrame(0, 0, 1, 1, source, source, opts);\n\t\t}\n\n\t\tif (rect.width === this.width && rect.height === this.height) {\n\t\t\treturn this.addFrame(0, 0, this.width, this.height, indexedPixels, opts);\n\t\t}\n\n\t\tconst source = createIndexedSourceRect(\n\t\t\tindexedPixels,\n\t\t\trect.y * this.width + rect.x,\n\t\t\trect.width,\n\t\t\trect.height,\n\t\t\tthis.width,\n\t\t);\n\t\treturn this.writeFrame(\n\t\t\trect.x,\n\t\t\trect.y,\n\t\t\trect.width,\n\t\t\trect.height,\n\t\t\tsource,\n\t\t\tsource,\n\t\t\topts,\n\t\t);\n\t}\n\n\tprivate writeFrame(\n\t\tx: number,\n\t\ty: number,\n\t\tw: number,\n\t\th: number,\n\t\tlzwSource: LzwIndexStream,\n\t\tpreviousSource: IndexedSourceRect,\n\t\topts?: FrameOptions,\n\t): number {\n\t\tif (this.ended) {\n\t\t\tthis.p--;\n\t\t\tthis.ended = false;\n\t\t} // un-end if user adds more frames\n\n\t\tif (indexedSourceLength(lzwSource) < w * h) {\n\t\t\tthrow new Error(\"Not enough pixels for the frame size.\");\n\t\t}\n\n\t\tconst o = opts ?? {};\n\t\tlet usingLocal = true;\n\t\tlet palette: PaletteRGB | null | undefined = o.palette;\n\t\tif (palette == null) {\n\t\t\tusingLocal = false;\n\t\t\tpalette = this.globalPalette;\n\t\t}\n\t\tif (palette == null)\n\t\t\tthrow new Error(\"Must supply either a local or global palette.\");\n\n\t\tconst numColors = checkPalette(palette);\n\t\tconst colorTableSizeBits = (log2Pow2(numColors) - 1) & 7;\n\t\tconst minCodeSize = Math.max(2, log2Pow2(numColors));\n\n\t\tconst delay = (o.delay ?? 0) | 0;\n\t\tlet disposal = (o.disposal ?? 0) | 0;\n\t\tif (disposal < 0 || disposal > 3) throw new Error(\"Disposal out of range.\");\n\n\t\tlet useTrans = false;\n\t\tlet transparentIndex = 0;\n\t\tif (o.transparent !== undefined && o.transparent !== null) {\n\t\t\tuseTrans = true;\n\t\t\ttransparentIndex = (o.transparent as number) | 0;\n\t\t\tif (transparentIndex < 0 || transparentIndex >= numColors)\n\t\t\t\tthrow new Error(\"Transparent color index out of range.\");\n\t\t}\n\n\t\t// Graphics Control Extension (only when needed)\n\t\tif (disposal !== 0 || useTrans || delay !== 0) {\n\t\t\tthis.buf[this.p++] = GIF.EXT;\n\t\t\tthis.buf[this.p++] = GIF.GCE;\n\t\t\tthis.buf[this.p++] = 4; // block size\n\t\t\tthis.buf[this.p++] = (disposal << 2) | (useTrans ? 1 : 0);\n\t\t\tthis.buf[this.p++] = delay & 0xff;\n\t\t\tthis.buf[this.p++] = (delay >> 8) & 0xff;\n\t\t\tthis.buf[this.p++] = transparentIndex & 0xff;\n\t\t\tthis.buf[this.p++] = 0; // terminator\n\t\t}\n\n\t\t// Image Descriptor\n\t\tthis.buf[this.p++] = GIF.IMG;\n\t\tthis.buf[this.p++] = x & 0xff;\n\t\tthis.buf[this.p++] = (x >> 8) & 0xff;\n\t\tthis.buf[this.p++] = y & 0xff;\n\t\tthis.buf[this.p++] = (y >> 8) & 0xff;\n\t\tthis.buf[this.p++] = w & 0xff;\n\t\tthis.buf[this.p++] = (w >> 8) & 0xff;\n\t\tthis.buf[this.p++] = h & 0xff;\n\t\tthis.buf[this.p++] = (h >> 8) & 0xff;\n\t\t// local color table flag + size (no sort, non-interlaced)\n\t\tthis.buf[this.p++] = usingLocal ? 0x80 | colorTableSizeBits : 0x00;\n\n\t\tif (usingLocal) {\n\t\t\tfor (let i = 0; i < numColors; i++) {\n\t\t\t\tconst rgb = (palette[i] ?? 0) >>> 0;\n\t\t\t\tthis.buf[this.p++] = (rgb >> 16) & 0xff;\n\t\t\t\tthis.buf[this.p++] = (rgb >> 8) & 0xff;\n\t\t\t\tthis.buf[this.p++] = rgb & 0xff;\n\t\t\t}\n\t\t}\n\n\t\tthis.p = GifWriterOutputLZWCodeStream_fast(\n\t\t\tthis.buf,\n\t\t\tthis.p,\n\t\t\tminCodeSize,\n\t\t\tlzwSource,\n\t\t\tnumColors,\n\t\t);\n\n\t\tthis.updatePreviousIndexedFrame(\n\t\t\tx,\n\t\t\ty,\n\t\t\tw,\n\t\t\th,\n\t\t\tpreviousSource,\n\t\t\tuseTrans ? transparentIndex : null,\n\t\t\tdisposal,\n\t\t);\n\n\t\treturn this.p;\n\t}\n\n\tend(): number {\n\t\tif (!this.ended) {\n\t\t\tthis.buf[this.p++] = GIF.TRAILER;\n\t\t\tthis.ended = true;\n\t\t}\n\t\treturn this.p;\n\t}\n\tgetOutputBuffer(): GifBinary {\n\t\treturn this.buf;\n\t}\n\tsetOutputBuffer(v: GifBinary): void {\n\t\tthis.buf = v;\n\t}\n\tgetOutputBufferPosition(): number {\n\t\treturn this.p;\n\t}\n\tsetOutputBufferPosition(v: number) {\n\t\tthis.p = v | 0;\n\t}\n\n\tprivate updatePreviousIndexedFrame(\n\t\tx: number,\n\t\ty: number,\n\t\tw: number,\n\t\th: number,\n\t\tsource: IndexedSourceRect,\n\t\ttransparentIndex: number | null,\n\t\tdisposal: number,\n\t): void {\n\t\tif (!this.previousIndexedFrame) {\n\t\t\tthis.previousIndexedFrame = new Uint8Array(this.width * this.height);\n\t\t}\n\n\t\tconst previous = this.previousIndexedFrame;\n\t\tif (transparentIndex === null && source.data instanceof Uint8Array) {\n\t\t\tif (\n\t\t\t\tx === 0 &&\n\t\t\t\ty === 0 &&\n\t\t\t\tw === this.width &&\n\t\t\t\th === this.height &&\n\t\t\t\tsource.offset === 0 &&\n\t\t\t\tsource.stride === this.width\n\t\t\t) {\n\t\t\t\tprevious.set(source.data.subarray(0, this.width * this.height));\n\t\t\t} else {\n\t\t\t\tfor (let row = 0; row < h; row++) {\n\t\t\t\t\tconst src = source.offset + row * source.stride;\n\t\t\t\t\tconst dst = (y + row) * this.width + x;\n\t\t\t\t\tprevious.set(source.data.subarray(src, src + w), dst);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (disposal === 2 || disposal === 3) {\n\t\t\t\tthis.previousIndexedFrame = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let row = 0; row < h; row++) {\n\t\t\tlet src = source.offset + row * source.stride;\n\t\t\tlet dst = (y + row) * this.width + x;\n\t\t\tfor (let col = 0; col < w; col++) {\n\t\t\t\tconst index = source.data[src++]! | 0;\n\t\t\t\tif (transparentIndex === null || index !== transparentIndex) {\n\t\t\t\t\tprevious[dst] = index;\n\t\t\t\t}\n\t\t\t\tdst++;\n\t\t\t}\n\t\t}\n\n\t\tif (disposal === 2 || disposal === 3) {\n\t\t\tthis.previousIndexedFrame = null;\n\t\t}\n\t}\n}\n\nfunction encodeIndexedGifFramesJavascript(\n\tframes: IndexedGifFrames,\n\twidth: number,\n\theight: number,\n\tframeSize: number,\n\tframeCount: number,\n\tpalette: PaletteRGB,\n\tdelays: NormalizedFrameDelays,\n\tloop: number | null,\n\tdelta: boolean,\n\ttransparentIndex: number | null = null,\n): Uint8Array {\n\tconst colorCount = checkPalette(palette);\n\tconst estimatedSize =\n\t\t13 + colorCount * 3 + 20 + frameCount * (frameSize * 2 + 32) + 1;\n\tconst output = new Uint8Array(estimatedSize);\n\tconst writer = new GifWriter(output, width, height, { palette, loop });\n\tfor (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n\t\tconst frame = getIndexedFrame(frames, frameSize, frameIndex);\n\t\tconst frameOptions = {\n\t\t\tdelay: frameDelay(delays, frameIndex),\n\t\t\t...(transparentIndex === null ? {} : { transparent: transparentIndex }),\n\t\t};\n\t\tif (delta) {\n\t\t\twriter.addFrameDelta(frame, frameOptions);\n\t\t} else {\n\t\t\twriter.addFrame(0, 0, width, height, frame, frameOptions);\n\t\t}\n\t}\n\treturn output.slice(0, writer.end());\n}\n\nfunction getIndexedFrameCount(\n\tframes: IndexedGifFrames,\n\tframeSize: number,\n\tframeCount: number | undefined,\n): number {\n\tif (frames instanceof Uint8Array) {\n\t\tif (frameCount !== undefined) {\n\t\t\tconst count = frameCount | 0;\n\t\t\tif (count <= 0 || frames.length !== frameSize * count) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Indexed frame stream length does not match dimensions.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn count;\n\t\t}\n\t\tif (frames.length === 0 || frames.length % frameSize !== 0) {\n\t\t\tthrow new Error(\"Indexed frame stream length does not match dimensions.\");\n\t\t}\n\t\treturn frames.length / frameSize;\n\t}\n\n\tif (frameCount !== undefined && frameCount !== frames.length) {\n\t\tthrow new Error(\"Frame count does not match frames length.\");\n\t}\n\tif (frames.length === 0) {\n\t\tthrow new Error(\"Frame count must be greater than zero.\");\n\t}\n\tfor (const frame of frames) {\n\t\tif (frame.length < frameSize) {\n\t\t\tthrow new Error(\"Not enough pixels for the frame size.\");\n\t\t}\n\t}\n\treturn frames.length;\n}\n\nfunction getRgbaFrameCount(\n\tframes: RgbaGifFrames,\n\tframeByteSize: number,\n\tframeCount: number | undefined,\n): number {\n\tif (isRgbaFrame(frames)) {\n\t\tif (frameCount !== undefined) {\n\t\t\tconst count = frameCount | 0;\n\t\t\tif (count <= 0 || frames.length !== frameByteSize * count) {\n\t\t\t\tthrow new Error(\"RGBA frame stream length does not match dimensions.\");\n\t\t\t}\n\t\t\treturn count;\n\t\t}\n\t\tif (frames.length === 0 || frames.length % frameByteSize !== 0) {\n\t\t\tthrow new Error(\"RGBA frame stream length does not match dimensions.\");\n\t\t}\n\t\treturn frames.length / frameByteSize;\n\t}\n\n\tif (frameCount !== undefined && frameCount !== frames.length) {\n\t\tthrow new Error(\"Frame count does not match frames length.\");\n\t}\n\tif (frames.length === 0) {\n\t\tthrow new Error(\"Frame count must be greater than zero.\");\n\t}\n\tfor (const frame of frames) {\n\t\tif (frame.length < frameByteSize) {\n\t\t\tthrow new Error(\"Not enough pixels for the frame size.\");\n\t\t}\n\t}\n\treturn frames.length;\n}\n\nfunction flattenIndexedFrames(\n\tframes: IndexedGifFrames,\n\tframeSize: number,\n\tframeCount: number,\n\tcolorCount: number,\n\tvalidateUint8Frames = true,\n): Uint8Array {\n\tif (frames instanceof Uint8Array) {\n\t\tif (validateUint8Frames) {\n\t\t\tvalidateIndexedFramePixels(frames, colorCount);\n\t\t}\n\t\treturn frames;\n\t}\n\n\tconst flatFrames = new Uint8Array(frameSize * frameCount);\n\tfor (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n\t\tconst frame = frames[frameIndex]!;\n\t\tconst dst = frameIndex * frameSize;\n\t\tif (frame instanceof Uint8Array) {\n\t\t\tif (validateUint8Frames) {\n\t\t\t\tvalidateIndexedFramePixels(frame.subarray(0, frameSize), colorCount);\n\t\t\t}\n\t\t\tflatFrames.set(frame.subarray(0, frameSize), dst);\n\t\t\tcontinue;\n\t\t}\n\t\tfor (let i = 0; i < frameSize; i++) {\n\t\t\tconst index = frame[i]! | 0;\n\t\t\tif (index >>> 0 >= colorCount) {\n\t\t\t\tthrow new Error(\"Pixel index out of range.\");\n\t\t\t}\n\t\t\tflatFrames[dst + i] = index;\n\t\t}\n\t}\n\treturn flatFrames;\n}\n\nfunction flattenRgbaFrames(\n\tframes: RgbaGifFrames,\n\tframeByteSize: number,\n\tframeCount: number,\n): Uint8Array {\n\tif (isRgbaFrame(frames)) {\n\t\treturn asUint8Array(frames);\n\t}\n\n\tconst flatFrames = new Uint8Array(frameByteSize * frameCount);\n\tfor (let frameIndex = 0; frameIndex < frameCount; frameIndex++) {\n\t\tconst frame = asUint8Array(frames[frameIndex]!);\n\t\tflatFrames.set(\n\t\t\tframe.subarray(0, frameByteSize),\n\t\t\tframeIndex * frameByteSize,\n\t\t);\n\t}\n\treturn flatFrames;\n}\n\nfunction isRgbaFrame(value: RgbaGifFrames): value is RgbaGifFrame {\n\treturn value instanceof Uint8Array || value instanceof Uint8ClampedArray;\n}\n\nfunction asUint8Array(frame: RgbaGifFrame): Uint8Array {\n\treturn frame instanceof Uint8Array\n\t\t? frame\n\t\t: new Uint8Array(frame.buffer, frame.byteOffset, frame.byteLength);\n}\n\nfunction validateIndexedFramePixels(\n\tframe: Uint8Array,\n\tcolorCount: number,\n): void {\n\tfor (let i = 0; i < frame.length; i++) {\n\t\tif (frame[i]! >= colorCount) {\n\t\t\tthrow new Error(\"Pixel index out of range.\");\n\t\t}\n\t}\n}\n\nfunction getIndexedFrame(\n\tframes: IndexedGifFrames,\n\tframeSize: number,\n\tframeIndex: number,\n): IndexedGifFrame {\n\tif (frames instanceof Uint8Array) {\n\t\tconst start = frameIndex * frameSize;\n\t\treturn frames.subarray(start, start + frameSize);\n\t}\n\treturn frames[frameIndex]!;\n}\n\nfunction indexRgbaFramesJavascript(\n\trgba: Uint8Array,\n\tpalette: PaletteRGB | undefined,\n\talphaThreshold: number,\n): {\n\tindexed: Uint8Array;\n\tpalette: PaletteRGB;\n\ttransparentIndex: number | null;\n} {\n\tconst hasTransparentPixels = rgbaHasTransparentPixels(rgba, alphaThreshold);\n\tif (palette !== undefined) {\n\t\treturn indexRgbaFramesToPaletteJavascript(\n\t\t\trgba,\n\t\t\tpalette,\n\t\t\thasTransparentPixels,\n\t\t\talphaThreshold,\n\t\t);\n\t}\n\n\tconst exact = tryIndexRgbaFramesExactJavascript(\n\t\trgba,\n\t\thasTransparentPixels,\n\t\talphaThreshold,\n\t);\n\treturn (\n\t\texact ??\n\t\tindexRgbaFrames332Javascript(rgba, hasTransparentPixels, alphaThreshold)\n\t);\n}\n\nfunction tryIndexRgbaFramesExactJavascript(\n\trgba: Uint8Array,\n\thasTransparentPixels: boolean,\n\talphaThreshold: number,\n): {\n\tindexed: Uint8Array;\n\tpalette: PaletteRGB;\n\ttransparentIndex: number | null;\n} | null {\n\tconst palette: number[] = [];\n\tconst colorToIndex = new Map<number, number>();\n\tconst indexed = new Uint8Array(rgba.length >> 2);\n\n\tif (!hasTransparentPixels) {\n\t\tlet output = 0;\n\t\tfor (let offset = 0; offset < rgba.length; offset += 4) {\n\t\t\tconst color = rgbKey(rgba[offset]!, rgba[offset + 1]!, rgba[offset + 2]!);\n\t\t\tlet index = colorToIndex.get(color);\n\t\t\tif (index === undefined) {\n\t\t\t\tif (palette.length === 256) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tindex = palette.length;\n\t\t\t\tcolorToIndex.set(color, index);\n\t\t\t\tpalette.push(color);\n\t\t\t}\n\t\t\tindexed[output++] = index;\n\t\t}\n\t\treturn { indexed, palette, transparentIndex: null };\n\t}\n\n\tfor (let offset = 0; offset < rgba.length; offset += 4) {\n\t\tif (rgba[offset + 3]! < alphaThreshold) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst color = rgbKey(rgba[offset]!, rgba[offset + 1]!, rgba[offset + 2]!);\n\t\tlet index = colorToIndex.get(color);\n\t\tif (index === undefined) {\n\t\t\tif (palette.length === (hasTransparentPixels ? 255 : 256)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tindex = palette.length;\n\t\t\tcolorToIndex.set(color, index);\n\t\t\tpalette.push(color);\n\t\t}\n\t}\n\n\tif (hasTransparentPixels && palette.length === 256) {\n\t\treturn null;\n\t}\n\n\tconst transparentIndex = hasTransparentPixels ? palette.length : null;\n\tif (transparentIndex !== null) {\n\t\tpalette.push(0);\n\t}\n\n\tlet output = 0;\n\tfor (let offset = 0; offset < rgba.length; offset += 4) {\n\t\tif (rgba[offset + 3]! < alphaThreshold) {\n\t\t\tindexed[output++] = transparentIndex!;\n\t\t\tcontinue;\n\t\t}\n\t\tconst color = rgbKey(rgba[offset]!, rgba[offset + 1]!, rgba[offset + 2]!);\n\t\tindexed[output++] = colorToIndex.get(color)!;\n\t}\n\n\treturn { indexed, palette, transparentIndex };\n}\n\nfunction indexRgbaFramesToPaletteJavascript(\n\trgba: Uint8Array,\n\tpalette: PaletteRGB,\n\thasTransparentPixels: boolean,\n\talphaThreshold: number,\n): {\n\tindexed: Uint8Array;\n\tpalette: PaletteRGB;\n\ttransparentIndex: number | null;\n} {\n\tconst exact = new Map<number, number>();\n\tfor (let index = 0; index < palette.length; index++) {\n\t\tconst color = (palette[index] ?? 0) & 0x00ff_ffff;\n\t\tif (!exact.has(color)) {\n\t\t\texact.set(color, index);\n\t\t}\n\t}\n\n\tif (!hasTransparentPixels) {\n\t\tconst indexed = new Uint8Array(rgba.length >> 2);\n\t\tlet output = 0;\n\t\tfor (let offset = 0; offset < rgba.length; offset += 4) {\n\t\t\tconst r = rgba[offset]!;\n\t\t\tconst g = rgba[offset + 1]!;\n\t\t\tconst b = rgba[offset + 2]!;\n\t\t\tconst color = rgbKey(r, g, b);\n\t\t\tindexed[output++] =\n\t\t\t\texact.get(color) ?? nearestPaletteIndex(r, g, b, palette);\n\t\t}\n\t\treturn { indexed, palette, transparentIndex: null };\n\t}\n\n\tconst usedIndexes = new Set<number>();\n\tfor (let offset = 0; offset < rgba.length; offset += 4) {\n\t\tif (rgba[offset + 3]! < alphaThreshold) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst r = rgba[offset]!;\n\t\tconst g = rgba[offset + 1]!;\n\t\tconst b = rgba[offset + 2]!;\n\t\tconst color = rgbKey(r, g, b);\n\t\tusedIndexes.add(exact.get(color) ?? nearestPaletteIndex(r, g, b, palette));\n\t}\n\n\tlet outputPalette = palette;\n\tlet transparentIndex: number | null = null;\n\tif (hasTransparentPixels) {\n\t\tif (palette.length < 256) {\n\t\t\toutputPalette = palette.slice();\n\t\t\ttransparentIndex = outputPalette.length;\n\t\t\toutputPalette.push(0);\n\t\t} else {\n\t\t\tfor (let index = 0; index < palette.length; index++) {\n\t\t\t\tif (!usedIndexes.has(index)) {\n\t\t\t\t\ttransparentIndex = index;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (transparentIndex === null) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"RGBA frames contain transparent pixels, but the palette has no unused transparent slot.\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst indexed = new Uint8Array(rgba.length >> 2);\n\tlet output = 0;\n\tfor (let offset = 0; offset < rgba.length; offset += 4) {\n\t\tif (rgba[offset + 3]! < alphaThreshold) {\n\t\t\tindexed[output++] = transparentIndex!;\n\t\t\tcontinue;\n\t\t}\n\t\tconst r = rgba[offset]!;\n\t\tconst g = rgba[offset + 1]!;\n\t\tconst b = rgba[offset + 2]!;\n\t\tconst color = rgbKey(r, g, b);\n\t\tindexed[output++] =\n\t\t\texact.get(color) ?? nearestPaletteIndex(r, g, b, palette);\n\t}\n\n\treturn { indexed, palette: outputPalette, transparentIndex };\n}\n\nfunction indexRgbaFrames332Javascript(\n\trgba: Uint8Array,\n\thasTransparentPixels: boolean,\n\talphaThreshold: number,\n): {\n\tindexed: Uint8Array;\n\tpalette: PaletteRGB;\n\ttransparentIndex: number | null;\n} {\n\tconst indexed = new Uint8Array(rgba.length >> 2);\n\tlet output = 0;\n\tif (hasTransparentPixels) {\n\t\tconst transparentIndex = 255;\n\t\tfor (let offset = 0; offset < rgba.length; offset += 4) {\n\t\t\tindexed[output++] =\n\t\t\t\trgba[offset + 3]! < alphaThreshold\n\t\t\t\t\t? transparentIndex\n\t\t\t\t\t: Math.min(\n\t\t\t\t\t\t\trgb332Index(rgba[offset]!, rgba[offset + 1]!, rgba[offset + 2]!),\n\t\t\t\t\t\t\ttransparentIndex - 1,\n\t\t\t\t\t\t);\n\t\t}\n\t\tconst palette = fixed332Palette();\n\t\tpalette[transparentIndex] = 0;\n\t\treturn { indexed, palette, transparentIndex };\n\t}\n\n\tfor (let offset = 0; offset < rgba.length; offset += 4) {\n\t\tindexed[output++] = rgb332Index(\n\t\t\trgba[offset]!,\n\t\t\trgba[offset + 1]!,\n\t\t\trgba[offset + 2]!,\n\t\t);\n\t}\n\treturn { indexed, palette: fixed332Palette(), transparentIndex: null };\n}\n\nfunction rgbaHasTransparentPixels(\n\trgba: Uint8Array,\n\talphaThreshold: number,\n): boolean {\n\tfor (let offset = 3; offset < rgba.length; offset += 4) {\n\t\tif (rgba[offset]! < alphaThreshold) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction rgbKey(r: number, g: number, b: number): number {\n\treturn ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff);\n}\n\nfunction rgb332Index(r: number, g: number, b: number): number {\n\treturn (r & 0xe0) | ((g >> 3) & 0x1c) | (b >> 6);\n}\n\nfunction fixed332Palette(): PaletteRGB {\n\tconst palette = new Array<number>(256);\n\tfor (let index = 0; index < 256; index++) {\n\t\tconst r = ((((index >> 5) & 7) * 255 + 3) / 7) | 0;\n\t\tconst g = ((((index >> 2) & 7) * 255 + 3) / 7) | 0;\n\t\tconst b = (((index & 3) * 255 + 1) / 3) | 0;\n\t\tpalette[index] = (r << 16) | (g << 8) | b;\n\t}\n\treturn palette;\n}\n\nfunction nearestPaletteIndex(\n\tr: number,\n\tg: number,\n\tb: number,\n\tpalette: PaletteRGB,\n): number {\n\tlet bestIndex = 0;\n\tlet bestDistance = Number.MAX_SAFE_INTEGER;\n\tfor (let index = 0; index < palette.length; index++) {\n\t\tconst color = (palette[index] ?? 0) >>> 0;\n\t\tconst dr = r - ((color >> 16) & 0xff);\n\t\tconst dg = g - ((color >> 8) & 0xff);\n\t\tconst db = b - (color & 0xff);\n\t\tconst distance = dr * dr + dg * dg + db * db;\n\t\tif (distance < bestDistance) {\n\t\t\tbestDistance = distance;\n\t\t\tbestIndex = index;\n\t\t\tif (distance === 0) break;\n\t\t}\n\t}\n\treturn bestIndex;\n}\n\nfunction paletteToUint32Array(palette: PaletteRGB): Uint32Array {\n\tconst paletteData = new Uint32Array(palette.length);\n\tfor (let i = 0; i < palette.length; i++) {\n\t\tpaletteData[i] = (palette[i] ?? 0) >>> 0;\n\t}\n\treturn paletteData;\n}\n\nfunction checkedU16(value: number, message: string): number {\n\tconst checked = value | 0;\n\tif (checked < 0 || checked > 65535) {\n\t\tthrow new Error(message);\n\t}\n\treturn checked;\n}\n\ntype NormalizedFrameDelays = number | Uint16Array;\n\nfunction normalizeFrameDelays(\n\tdelay: GifFrameDelay | undefined,\n\tframeCount: number,\n): NormalizedFrameDelays {\n\tif (delay === undefined) {\n\t\treturn 0;\n\t}\n\tif (typeof delay === \"number\") {\n\t\treturn checkedU16(delay, \"Delay invalid.\");\n\t}\n\tif (delay.length !== frameCount) {\n\t\tthrow new Error(\"Delay count does not match frame count.\");\n\t}\n\tconst normalized = new Uint16Array(frameCount);\n\tfor (let i = 0; i < frameCount; i++) {\n\t\tnormalized[i] = checkedU16(delay[i] ?? 0, \"Delay invalid.\");\n\t}\n\treturn normalized;\n}\n\nfunction delayArray(\n\tdelays: NormalizedFrameDelays,\n\tframeCount: number,\n): Uint16Array {\n\tif (delays instanceof Uint16Array) {\n\t\treturn delays;\n\t}\n\tconst normalized = new Uint16Array(frameCount);\n\tnormalized.fill(delays);\n\treturn normalized;\n}\n\nfunction frameDelay(delays: NormalizedFrameDelays, frameIndex: number): number {\n\treturn delays instanceof Uint16Array ? delays[frameIndex]! : delays;\n}\n\nfunction normalizeAlphaThreshold(alphaThreshold: number | undefined): number {\n\treturn checkedU8(\n\t\talphaThreshold ?? TRANSPARENT_ALPHA_THRESHOLD,\n\t\t\"Alpha threshold invalid.\",\n\t);\n}\n\nfunction checkedU8(value: number, message: string): number {\n\tconst checked = value | 0;\n\tif (checked < 0 || checked > 255) {\n\t\tthrow new Error(message);\n\t}\n\treturn checked;\n}\n\ntype IndexedRect = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nfunction findChangedIndexedRect(\n\tprevious: Uint8Array,\n\tcurrent: IndexedPixels,\n\twidth: number,\n\theight: number,\n): IndexedRect | null {\n\tlet top = 0;\n\tlet bottom = height - 1;\n\n\twhile (top < height) {\n\t\tconst row = top * width;\n\t\tlet changed = false;\n\t\tfor (let x = 0; x < width; x++) {\n\t\t\tif (previous[row + x] !== current[row + x]) {\n\t\t\t\tchanged = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (changed) break;\n\t\ttop++;\n\t}\n\n\tif (top === height) {\n\t\treturn null;\n\t}\n\n\twhile (bottom > top) {\n\t\tconst row = bottom * width;\n\t\tlet changed = false;\n\t\tfor (let x = 0; x < width; x++) {\n\t\t\tif (previous[row + x] !== current[row + x]) {\n\t\t\t\tchanged = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (changed) break;\n\t\tbottom--;\n\t}\n\n\tlet left = width - 1;\n\tlet right = 0;\n\tfor (let y = top; y <= bottom; y++) {\n\t\tconst row = y * width;\n\t\tfor (let x = 0; x < width; x++) {\n\t\t\tif (previous[row + x] !== current[row + x]) {\n\t\t\t\tif (x < left) left = x;\n\t\t\t\tif (x > right) right = x;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tx: left,\n\t\ty: top,\n\t\twidth: right - left + 1,\n\t\theight: bottom - top + 1,\n\t};\n}\n\nfunction createIndexedSourceRect(\n\tdata: IndexedPixels,\n\toffset: number,\n\twidth: number,\n\theight: number,\n\tstride: number,\n): IndexedSourceRect {\n\toffset |= 0;\n\twidth |= 0;\n\theight |= 0;\n\tstride |= 0;\n\n\tif (offset < 0 || width <= 0 || height <= 0 || stride < width) {\n\t\tthrow new Error(\"Not enough pixels for the frame size.\");\n\t}\n\tconst lastPixelEnd = offset + (height - 1) * stride + width;\n\tif (lastPixelEnd > data.length) {\n\t\tthrow new Error(\"Not enough pixels for the frame size.\");\n\t}\n\treturn {\n\t\tdata,\n\t\toffset,\n\t\twidth,\n\t\theight,\n\t\tstride,\n\t\tlength: width * height,\n\t};\n}\n\nfunction isIndexedSourceRect(\n\tindexStream: LzwIndexStream,\n): indexStream is IndexedSourceRect {\n\treturn !(indexStream instanceof Uint8Array) && !Array.isArray(indexStream);\n}\n\nfunction indexedSourceLength(indexStream: LzwIndexStream): number {\n\treturn indexStream.length | 0;\n}\n\n/* ===== Encoder internals: typed-array hash + tight bit packer ===== */\n\n/** Emit LZW code stream for indexed pixels. */\nfunction GifWriterOutputLZWCodeStream_fast(\n\tbuf: GifBinary,\n\tp0: number,\n\tminCodeSize: number,\n\tindexStream: LzwIndexStream,\n\tcolorCount: number,\n): number {\n\tconst wasmEncoded = tryEncodeLzwWithWasm(\n\t\tminCodeSize,\n\t\tindexStream,\n\t\tcolorCount,\n\t);\n\tif (wasmEncoded) {\n\t\tfor (let i = 0; i < wasmEncoded.length; i++) {\n\t\t\tbuf[p0 + i] = wasmEncoded[i]!;\n\t\t}\n\t\treturn p0 + wasmEncoded.length;\n\t}\n\n\tlet p = p0;\n\n\t// Write LZW min code size and set up first sub-block\n\tbuf[p++] = minCodeSize & 0xff;\n\tlet subLenPos = p++; // reserve length\n\tlet subLen = 0;\n\n\tconst CLEAR = 1 << minCodeSize;\n\tconst EOI = CLEAR + 1;\n\tlet nextCode = EOI + 1;\n\tlet codeSize = minCodeSize + 1;\n\tlet codeMask = (1 << codeSize) - 1;\n\n\t// Bit buffer\n\tlet bits = 0 >>> 0;\n\tlet bitCount = 0;\n\n\t// ---- typed-array open addressing hash ----\n\t// Key space is 20 bits: (prefix<<8)|k, values up to 12 bits.\n\t// Capacity: power-of-two above the 4096-code GIF dictionary keeps probe\n\t// counts low on patterned frames while still fitting comfortably in cache.\n\tconst CAP = 16384;\n\tconst keys = (GifWriterOutputLZWCodeStream_fast._keys ??= new Int32Array(\n\t\tCAP,\n\t)) as Int32Array;\n\tconst vals = (GifWriterOutputLZWCodeStream_fast._vals ??= new Int16Array(\n\t\tCAP,\n\t)) as Int16Array;\n\tconst gen = (GifWriterOutputLZWCodeStream_fast._gen ??= new Int32Array(\n\t\tCAP,\n\t)) as Int32Array;\n\tlet epoch = ((GifWriterOutputLZWCodeStream_fast._epoch ?? 0) + 1) | 0;\n\tGifWriterOutputLZWCodeStream_fast._epoch = epoch;\n\tif (epoch <= 0) {\n\t\tgen.fill(0);\n\t\tepoch = 1;\n\t\tGifWriterOutputLZWCodeStream_fast._epoch = epoch;\n\t}\n\tlet EPOCH = epoch;\n\n\tfunction tableReset() {\n\t\t// Instead of clearing arrays, bump generation.\n\t\tEPOCH = (EPOCH + 1) | 0;\n\t\tif (EPOCH <= 0) {\n\t\t\tgen.fill(0);\n\t\t\tEPOCH = 1;\n\t\t}\n\t}\n\n\tfunction emit(code: number) {\n\t\tbits |= (code & 0xffff) << bitCount;\n\t\tbitCount += codeSize;\n\t\twhile (bitCount >= 8) {\n\t\t\tbuf[p++] = bits & 0xff;\n\t\t\tbits >>>= 8;\n\t\t\tbitCount -= 8;\n\t\t\t// sub-block manage\n\t\t\tif (++subLen === 255) {\n\t\t\t\tbuf[subLenPos] = 255;\n\t\t\t\tsubLenPos = p++;\n\t\t\t\tsubLen = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Ensure fresh dictionary per image\n\ttableReset();\n\n\t// Emit initial clear\n\temit(CLEAR);\n\n\tconst n = indexedSourceLength(indexStream);\n\tif (n <= 0) throw new Error(\"Not enough pixels for the frame size.\");\n\n\tlet stridedData: IndexedPixels | null = null;\n\tlet stridedIndex = 0;\n\tlet stridedRowRemaining = 0;\n\tlet stridedRowWidth = 0;\n\tlet stridedRowSkip = 0;\n\tlet ib: number;\n\tif (isIndexedSourceRect(indexStream)) {\n\t\tstridedData = indexStream.data;\n\t\tstridedIndex = indexStream.offset + 1;\n\t\tstridedRowWidth = indexStream.width;\n\t\tstridedRowRemaining = indexStream.width - 1;\n\t\tstridedRowSkip = indexStream.stride - indexStream.width;\n\t\tib = (stridedData[indexStream.offset] as number) | 0;\n\t} else {\n\t\tib = ((indexStream as IndexedPixels)[0] as number) | 0;\n\t}\n\tif (ib >>> 0 >= colorCount) throw new Error(\"Pixel index out of range.\");\n\n\tfor (let i = 1; i < n; i++) {\n\t\tlet k: number;\n\t\tif (stridedData !== null) {\n\t\t\tif (stridedRowRemaining === 0) {\n\t\t\t\tstridedIndex += stridedRowSkip;\n\t\t\t\tstridedRowRemaining = stridedRowWidth;\n\t\t\t}\n\t\t\tk = (stridedData[stridedIndex++] as number) | 0;\n\t\t\tstridedRowRemaining--;\n\t\t} else {\n\t\t\tk = ((indexStream as IndexedPixels)[i] as number) | 0;\n\t\t}\n\t\tif (k >>> 0 >= colorCount) throw new Error(\"Pixel index out of range.\");\n\t\tconst key = (ib << 8) | k;\n\t\tlet slot = key & (CAP - 1);\n\t\tlet found = -1;\n\t\twhile (gen[slot] === EPOCH) {\n\t\t\tif (keys[slot] === key) {\n\t\t\t\tfound = vals[slot]! | 0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tslot = (slot + 1) & (CAP - 1);\n\t\t}\n\t\tif (found >= 0 && found < nextCode) {\n\t\t\tib = found;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// emit buffer\n\t\temit(ib);\n\n\t\tif (nextCode === GIF.MAX_CODE) {\n\t\t\t// Clear\n\t\t\temit(CLEAR);\n\t\t\tnextCode = EOI + 1;\n\t\t\tcodeSize = (minCodeSize + 1) | 0;\n\t\t\tcodeMask = (1 << codeSize) - 1;\n\t\t\ttableReset();\n\t\t} else {\n\t\t\tif (minCodeSize === 1) {\n\t\t\t\t// For 1-bit palettes, codes 0 and 1 use 2-bit code size. We should\n\t\t\t\t// only increase code size after adding a new dictionary entry.\n\t\t\t\tgen[slot] = EPOCH;\n\t\t\t\tkeys[slot] = key | 0;\n\t\t\t\tvals[slot] = nextCode | 0;\n\t\t\t\tnextCode++;\n\t\t\t\tif (nextCode > codeMask && codeSize < 12) {\n\t\t\t\t\tcodeSize++;\n\t\t\t\t\tcodeMask = (1 << codeSize) - 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// For larger palettes, match omggif's timing by growing the code size\n\t\t\t\t// before inserting the entry that would overflow the current mask.\n\t\t\t\tif (nextCode >= codeMask + 1 && codeSize < 12) {\n\t\t\t\t\tcodeSize++;\n\t\t\t\t\tcodeMask = (1 << codeSize) - 1;\n\t\t\t\t}\n\t\t\t\tgen[slot] = EPOCH;\n\t\t\t\tkeys[slot] = key | 0;\n\t\t\t\tvals[slot] = nextCode | 0;\n\t\t\t\tnextCode++;\n\t\t\t}\n\t\t}\n\n\t\tib = k;\n\t}\n\n\temit(ib);\n\temit(EOI);\n\n\t// flush remaining bits\n\tif (bitCount > 0) {\n\t\tbuf[p++] = bits & 0xff;\n\t\tif (++subLen === 255) {\n\t\t\tbuf[subLenPos] = 255;\n\t\t\tsubLenPos = p++;\n\t\t\tsubLen = 0;\n\t\t}\n\t\tbits = 0;\n\t\tbitCount = 0;\n\t}\n\n\t// finalize sub-blocks\n\tbuf[subLenPos] = subLen & 0xff;\n\t// Only write a terminating zero-length block if the last sub-block\n\t// actually contained data. Otherwise the zero-length at subLenPos is\n\t// itself the terminator (avoids emitting an extra empty block).\n\tif (subLen > 0) {\n\t\tbuf[p++] = 0; // terminator\n\t}\n\n\treturn p;\n}\nnamespace GifWriterOutputLZWCodeStream_fast {\n\texport let _keys: Int32Array | undefined;\n\texport let _vals: Int16Array | undefined;\n\texport let _gen: Int32Array | undefined;\n\texport let _epoch: number | undefined;\n}\n\nfunction tryEncodeLzwWithWasm(\n\tminCodeSize: number,\n\tindexStream: LzwIndexStream,\n\tcolorCount: number,\n): Uint8Array | null {\n\tif (!(indexStream instanceof Uint8Array)) {\n\t\treturn null;\n\t}\n\tif (indexStream.length < WASM_LZW_MIN_INDEX_COUNT) {\n\t\treturn null;\n\t}\n\n\tconst encodeIndexedLzw = getWasmCoreModule()?.encode_indexed_lzw;\n\treturn encodeIndexedLzw\n\t\t? encodeIndexedLzw(indexStream, minCodeSize, colorCount)\n\t\t: null;\n}\n","export function concatSubBlocks(\n buf: Uint8Array,\n offset: number\n): { bytes: Uint8Array; mcs: number } {\n const mcs = buf[offset]! | 0;\n let q = (offset + 1) | 0;\n let total = 0;\n while (true) {\n const len = buf[q++]! | 0;\n if (len === 0) break;\n total += len;\n q += len;\n }\n const out = new Uint8Array(total);\n q = (offset + 1) | 0;\n let w = 0;\n while (true) {\n const len = buf[q++]! | 0;\n if (len === 0) break;\n out.set(buf.subarray(q, q + len), w);\n w += len;\n q += len;\n }\n return { bytes: out, mcs };\n}\n","import { PooledDecoderTables } from \"../types\";\nimport { GIF } from \"../constants/gif\";\n\nexport function createDecoderTables(): PooledDecoderTables {\n return {\n decTable: new Int32Array(GIF.MAX_CODE),\n stack: new Uint8Array(GIF.MAX_CODE),\n firstByte: new Int16Array(GIF.MAX_CODE)\n };\n}\n","import {\n FrameInfo,\n GifBinary,\n GifDecodeBackend,\n GifDecodeBackendStatus,\n GifPixelBuffer,\n PreparedFrameBackendPreference,\n PooledDecoderTables,\n PreparedFrameCacheMode,\n PreparedFrameDedupeMode,\n PreparedFrameFormat,\n PreparedGifFrame,\n PreparedGifFrames,\n PreparedGifPlayer,\n PrepareFramesOptions,\n} from \"../types\";\nimport { GIF } from \"../constants/gif\";\nimport { buildPal32 } from \"../utils/palette\";\nimport { concatSubBlocks } from \"../utils/subblocks\";\nimport { readNetscapeLoopCount } from \"../utils/netscape\";\nimport {\n createDecoderTables,\n} from \"./pool\";\n\ntype NormalizedPrepareFramesOptions = PrepareFramesOptions & {\n format: PreparedFrameFormat;\n composited: boolean;\n cache: PreparedFrameCacheMode;\n backend: PreparedFrameBackendPreference;\n deltas: boolean;\n dedupe: PreparedFrameDedupeMode;\n};\n\ntype ChangedRect = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\n/* ====== Reader (Decoder) ====== */\n// moved to types.ts\n\nexport class GifReader {\n private buf!: Uint8Array;\n private width_!: number;\n private height_!: number;\n\n private globalPaletteOffset!: number | null;\n private globalPaletteSize!: number | null;\n\n private frames!: FrameInfo[];\n private loop_count!: number | null;\n\n // Decoder scratch tables owned by this one reader/job.\n private pooledTables!: PooledDecoderTables | null;\n\n // Aliases for easier access\n private decTable!: Int32Array;\n private stack!: Uint8Array;\n private firstByte!: Int16Array;\n private activePreparedFrames!: Set<PreparedGifFrames>;\n private static decodeBackend: GifDecodeBackend | null = null;\n\n static createPooled(buf: GifBinary): GifReader {\n return new GifReader(buf, false);\n }\n\n static createUnpooled(buf: GifBinary): GifReader {\n return new GifReader(buf, false);\n }\n\n static setDecodeBackend(backend: GifDecodeBackend | null): void {\n GifReader.decodeBackend = backend;\n }\n\n static getDecodeBackendStatus(): GifDecodeBackendStatus {\n const backend = GifReader.decodeBackend;\n if (!backend) {\n return { name: \"javascript\", available: false };\n }\n\n try {\n return { name: backend.name, available: backend.isAvailable() };\n } catch {\n return { name: backend.name, available: false };\n }\n }\n\n constructor(buf: GifBinary, _usePooling: boolean = false) {\n const data = buf instanceof Uint8Array ? buf : Uint8Array.from(buf);\n this.buf = data;\n this.width_ = 0;\n this.height_ = 0;\n this.globalPaletteOffset = null;\n this.globalPaletteSize = null;\n this.frames = [];\n this.loop_count = null;\n this.pooledTables = null;\n this.decTable = new Int32Array(0);\n this.stack = new Uint8Array(0);\n this.firstByte = new Int16Array(0);\n this.activePreparedFrames = new Set();\n\n let p = 0;\n const readByte = (): number => {\n const value = data[p++];\n if (value === undefined) {\n throw new Error(\"Unexpected end of GIF data.\");\n }\n return value;\n };\n const readUint16 = (): number => (readByte() | (readByte() << 8)) >>> 0;\n\n // Header: GIF87a / GIF89a\n if (\n data[p++] !== GIF.G ||\n data[p++] !== GIF.I ||\n data[p++] !== GIF.F ||\n data[p++] !== GIF._8 ||\n ((data[p++]! + 1) & 0xfd) !== GIF._8 ||\n data[p++] !== GIF.A\n ) {\n throw new Error(\"Invalid GIF 87a/89a header.\");\n }\n\n const width = (data[p++]! | (data[p++]! << 8)) >>> 0;\n const height = (data[p++]! | (data[p++]! << 8)) >>> 0;\n this.width_ = width;\n this.height_ = height;\n\n const pf0 = data[p++]!; // packed fields\n const gctFlag = (pf0 >>> 7) & 1;\n const gctSizeBits = pf0 & 0x7;\n const gctColors = 1 << (gctSizeBits + 1);\n readByte(); // background color index\n p++; // pixel aspect ratio\n\n if (gctFlag) {\n this.globalPaletteOffset = p;\n this.globalPaletteSize = gctColors;\n p += gctColors * 3;\n }\n\n let delay = 0;\n let transparent_index: number | null = null;\n let disposal = 0;\n\n // Parse blocks\n let noEOF = true;\n while (noEOF && p < buf.length) {\n const block = readByte();\n switch (block) {\n case GIF.EXT: {\n const label = readByte();\n switch (label) {\n case GIF.APPLICATION: {\n const netscape = readNetscapeLoopCount(data, p);\n if (netscape) {\n this.loop_count = netscape.loopCount;\n p = netscape.nextPos;\n } else {\n // skip unknown app extension\n p += 12;\n while (true) {\n const size = readByte();\n if (size === 0) break;\n p += size;\n }\n }\n break;\n }\n case GIF.GCE: {\n if (readByte() !== 0x4 || data[p + 4] !== 0)\n throw new Error(\"Invalid graphics extension block.\");\n const pf1 = readByte();\n delay = readUint16();\n const t = readByte();\n transparent_index = pf1 & 1 ? t : null;\n disposal = (pf1 >> 2) & 0x7;\n p++; // terminator\n break;\n }\n case GIF.PLAINTEXT:\n case GIF.COMMENT: {\n while (true) {\n const size = readByte();\n if (size === 0) break;\n p += size;\n }\n break;\n }\n default:\n throw new Error(\n \"Unknown graphic control label: 0x\" +\n (label as number).toString(16)\n );\n }\n break;\n }\n\n case GIF.IMG: {\n const x = readUint16();\n const y = readUint16();\n const w = readUint16();\n const h = readUint16();\n const pf2 = readByte();\n const lctFlag = (pf2 >>> 7) & 1;\n const interlace = ((pf2 >>> 6) & 1) !== 0;\n const lctSizeBits = pf2 & 0x7;\n const lctColors = 1 << (lctSizeBits + 1);\n let palette_offset = this.globalPaletteOffset;\n let palette_size = this.globalPaletteSize;\n let has_local_palette = false;\n if (lctFlag) {\n has_local_palette = true;\n palette_offset = p;\n palette_size = lctColors;\n p += lctColors * 3;\n }\n\n const data_offset = p;\n p++; // codesize\n while (true) {\n const size = readByte();\n if (size === 0) break;\n p += size;\n }\n\n this.frames.push({\n x,\n y,\n width: w,\n height: h,\n has_local_palette,\n palette_offset,\n palette_size,\n data_offset, // keep for compatibility\n data_length: p - data_offset,\n transparent_index,\n interlaced: interlace,\n delay,\n disposal,\n min_code_size: data[data_offset]! | 0,\n });\n\n // Reset GCE state for next frame\n delay = 0;\n transparent_index = null;\n disposal = 0;\n break;\n }\n\n case GIF.TRAILER:\n noEOF = false;\n break;\n\n default:\n throw new Error(\n \"Unknown gif block: 0x\" + (block as number).toString(16)\n );\n }\n }\n }\n\n get width(): number {\n return this.width_;\n }\n get height(): number {\n return this.height_;\n }\n\n /**\n * Simplified LZW decoder that outputs palette indices instead of RGBA\n */\n private lzwDecodeToIndices(\n frame: FrameInfo,\n outputIndices: Uint8Array\n ): void {\n this.ensureDecoderTables();\n const bytes = this.getFrameCodes(frame);\n const minCodeSize = frame.min_code_size | 0;\n let q = 0;\n\n const CLEAR = 1 << minCodeSize;\n const EOI = CLEAR + 1;\n let nextCode = EOI + 1;\n let codeSize = (minCodeSize + 1) | 0;\n let codeMask = (1 << codeSize) - 1;\n\n // Initialize firstByte table for base codes\n for (let i = 0; i < CLEAR; i++) {\n this.firstByte[i] = i;\n }\n\n let bits = 0;\n let bitCount = 0;\n let pixelIndex = 0;\n\n const table = this.decTable;\n const stack = this.stack;\n let sp = 0;\n let prevCode: number | null = null;\n\n while (true) {\n // Fill bit buffer\n while (bitCount < codeSize && q < bytes.length) {\n bits |= (bytes[q++]! | 0) << bitCount;\n bitCount += 8;\n }\n\n if (bitCount < codeSize) break;\n\n let code = bits & codeMask;\n bits >>>= codeSize;\n bitCount -= codeSize;\n\n if (code === CLEAR) {\n nextCode = EOI + 1;\n codeSize = (minCodeSize + 1) | 0;\n codeMask = (1 << codeSize) - 1;\n prevCode = null;\n for (let i = 0; i < CLEAR; i++) {\n this.firstByte[i] = i;\n }\n continue;\n } else if (code === EOI) {\n break;\n }\n\n let outFirst: number;\n let cur = code;\n\n if (cur < CLEAR) {\n // Single byte\n outFirst = cur;\n if (pixelIndex < outputIndices.length) {\n outputIndices[pixelIndex++] = outFirst & 0xff;\n }\n } else {\n // Multi-byte sequence\n sp = 0;\n if (cur >= nextCode) {\n if (prevCode === null) break;\n outFirst = this.firstByte[prevCode]! | 0;\n stack[sp++] = outFirst;\n cur = prevCode;\n } else {\n outFirst = this.firstByte[cur]! | 0;\n }\n\n while (cur >= CLEAR) {\n const entry = table[cur]! | 0;\n stack[sp++] = entry & 0xff;\n cur = entry >>> 8;\n }\n\n // Output base symbol\n const base = cur & 0xff;\n if (pixelIndex < outputIndices.length) {\n outputIndices[pixelIndex++] = base;\n }\n\n // Output stack in reverse\n while (sp && pixelIndex < outputIndices.length) {\n outputIndices[pixelIndex++] = stack[--sp]! & 0xff;\n }\n }\n\n // Add new table entry\n if (prevCode !== null && nextCode < GIF.MAX_CODE) {\n table[nextCode] = ((prevCode & 0xfff) << 8) | (outFirst & 0xff);\n this.firstByte[nextCode] = this.firstByte[prevCode]!;\n nextCode++;\n\n if (nextCode >= codeMask + 1 && codeSize < 12) {\n codeSize++;\n codeMask = (1 << codeSize) - 1;\n }\n }\n\n prevCode = code;\n }\n }\n\n numFrames(): number {\n return this.frames.length;\n }\n loopCount(): number | null {\n return this.loop_count;\n }\n\n frameInfo(i: number): FrameInfo {\n if (i < 0 || i >= this.frames.length)\n throw new Error(\"Frame index out of range.\");\n return this.frames[i]!;\n }\n\n private ensureDecoderTables(): void {\n if (this.pooledTables) return;\n\n this.pooledTables = createDecoderTables();\n this.decTable = this.pooledTables.decTable;\n this.stack = this.pooledTables.stack;\n this.firstByte = this.pooledTables.firstByte;\n }\n\n private getFrameCodes(frame: FrameInfo): Uint8Array {\n if (!frame.codes) {\n const { bytes, mcs } = concatSubBlocks(this.buf, frame.data_offset);\n frame.codes = bytes;\n frame.min_code_size = mcs;\n }\n return frame.codes;\n }\n\n private getFramePalette(\n frame: FrameInfo,\n order: \"rgba\" | \"bgra\"\n ): Uint32Array {\n if (frame.palette_offset === null || frame.palette_size === null) {\n throw new Error(\"GIF frame has no color palette.\");\n }\n\n if (order === \"rgba\") {\n frame.pal32rgba ??= buildPal32(\n this.buf,\n frame.palette_offset,\n frame.palette_size,\n \"rgba\",\n frame.transparent_index\n );\n return frame.pal32rgba;\n }\n\n frame.pal32bgra ??= buildPal32(\n this.buf,\n frame.palette_offset,\n frame.palette_size,\n \"bgra\",\n frame.transparent_index\n );\n return frame.pal32bgra;\n }\n\n private getFrameIndices(frame: FrameInfo): Uint8Array {\n if (frame.indices) {\n return frame.indices;\n }\n\n const frameSize = frame.width * frame.height;\n const indexData = new Uint8Array(frameSize);\n\n if (!frame.interlaced) {\n this.lzwDecodeToIndices(frame, indexData);\n frame.indices = indexData;\n return indexData;\n }\n\n const tempIndices = new Uint8Array(frameSize);\n this.lzwDecodeToIndices(frame, tempIndices);\n\n let pixelIndex = 0;\n for (let pass = 0; pass < 4; pass++) {\n let yStart = 0;\n let yStride = 8;\n if (pass === 1) {\n yStart = 4;\n } else if (pass === 2) {\n yStart = 2;\n yStride = 4;\n } else if (pass === 3) {\n yStart = 1;\n yStride = 2;\n }\n\n for (let yInPass = 0; ; yInPass++) {\n const row = yStart + yInPass * yStride;\n if (row >= frame.height) break;\n\n let dst = row * frame.width;\n for (let x = 0; x < frame.width && pixelIndex < frameSize; x++) {\n indexData[dst++] = tempIndices[pixelIndex++]!;\n }\n }\n }\n\n frame.indices = indexData;\n return indexData;\n }\n\n /* Public API mirrors omggif, including plain arrays and clamped arrays. */\n decodeAndBlitFrameBGRA(frameNum: number, pixels: GifPixelBuffer): void {\n this.decodeAndBlitCompatibleFrame(frameNum, pixels, \"bgra\");\n }\n decodeAndBlitFrameRGBA(frameNum: number, pixels: GifPixelBuffer): void {\n this.decodeAndBlitCompatibleFrame(frameNum, pixels, \"rgba\");\n }\n\n /* Transferable-friendly API: decode into an ArrayBuffer that can be transferred between workers */\n decodeFrameToTransferableRGBA(frameNum: number): ArrayBuffer {\n const pixelCount = this.width_ * this.height_;\n const buffer = new ArrayBuffer(pixelCount * 4);\n const pixels = new Uint8Array(buffer);\n this.decodeAndBlitFrame32(frameNum, pixels, \"rgba\");\n return buffer;\n }\n\n decodeFrameToTransferableBGRA(frameNum: number): ArrayBuffer {\n const pixelCount = this.width_ * this.height_;\n const buffer = new ArrayBuffer(pixelCount * 4);\n const pixels = new Uint8Array(buffer);\n this.decodeAndBlitFrame32(frameNum, pixels, \"bgra\");\n return buffer;\n }\n\n /* Decode into a pre-allocated transferable buffer (for worker scenarios) */\n decodeFrameIntoBuffer(\n frameNum: number,\n buffer: ArrayBuffer,\n format: \"rgba\" | \"bgra\" = \"rgba\"\n ): void {\n const expectedSize = this.width_ * this.height_ * 4;\n if (buffer.byteLength < expectedSize) {\n throw new Error(\n `Buffer too small: need ${expectedSize} bytes, got ${buffer.byteLength}`\n );\n }\n const pixels = new Uint8Array(buffer, 0, expectedSize);\n this.decodeAndBlitFrame32(frameNum, pixels, format);\n }\n\n preparePlayback(\n options: Omit<PrepareFramesOptions, \"composited\"> = {}\n ): PreparedGifFrames {\n return this.prepareFrames({\n ...options,\n composited: true,\n cache: \"composited\",\n });\n }\n\n prepareFrames(options: PrepareFramesOptions = {}): PreparedGifFrames {\n this.clearFrameCaches();\n try {\n const normalized = this.normalizePrepareFramesOptions(options);\n const frameIndices = this.normalizeFrameIndices(normalized.frameIndices);\n\n if (normalized.backend !== \"javascript\") {\n const backendResult = this.prepareFramesWithBackend(normalized);\n if (backendResult) {\n return this.createBackendPreparedFramesResult(backendResult);\n }\n if (normalized.backend === \"native\") {\n throw new Error(\"Native GIF decode backend is not available.\");\n }\n }\n\n return normalized.composited\n ? this.prepareCompositedFrames(normalized, frameIndices)\n : this.prepareUncompositedFrames(normalized, frameIndices);\n } finally {\n this.clearFrameCaches();\n }\n }\n\n async prepareFramesAsync(\n options: PrepareFramesOptions = {}\n ): Promise<PreparedGifFrames> {\n return this.prepareFrames(options);\n }\n\n decodeAndBlitCompositedFrameRGBA(frameNum: number, pixels: Uint8Array): void {\n this.preparePlayback({ format: \"rgba\" }).copyFrame(frameNum, pixels);\n }\n\n decodeAndBlitCompositedFrameBGRA(frameNum: number, pixels: Uint8Array): void {\n this.preparePlayback({ format: \"bgra\" }).copyFrame(frameNum, pixels);\n }\n\n private normalizePrepareFramesOptions(\n options: PrepareFramesOptions\n ): NormalizedPrepareFramesOptions {\n return {\n ...options,\n format: options.format ?? \"rgba\",\n composited: options.composited ?? false,\n cache: options.cache ?? (options.composited ? \"composited\" : \"auto\"),\n backend: options.backend ?? \"auto\",\n deltas: options.deltas ?? false,\n dedupe: options.dedupe ?? \"adjacent\",\n };\n }\n\n private normalizeFrameIndices(frameIndices?: readonly number[]): number[] {\n if (!frameIndices) {\n const all = new Array<number>(this.frames.length);\n for (let i = 0; i < this.frames.length; i++) {\n all[i] = i;\n }\n return all;\n }\n\n const seen = new Set<number>();\n const normalized: number[] = [];\n for (const frameIndex of frameIndices) {\n if (!Number.isInteger(frameIndex)) {\n throw new Error(\"Frame index out of range.\");\n }\n const index = frameIndex | 0;\n if (index < 0 || index >= this.frames.length) {\n throw new Error(\"Frame index out of range.\");\n }\n if (!seen.has(index)) {\n seen.add(index);\n normalized.push(index);\n }\n }\n return normalized;\n }\n\n private prepareFramesWithBackend(\n options: NormalizedPrepareFramesOptions\n ): PreparedGifFrames | null {\n const backend = GifReader.decodeBackend;\n if (!backend || !backend.prepareFrames) {\n return null;\n }\n\n let available = false;\n try {\n available = backend.isAvailable();\n } catch {\n available = false;\n }\n\n if (!available) {\n return null;\n }\n\n return backend.prepareFrames(this.buf, options) ?? null;\n }\n\n private createBackendPreparedFramesResult(\n prepared: PreparedGifFrames\n ): PreparedGifFrames {\n const disposeBackendResult = prepared.dispose;\n let disposed = false;\n const result: PreparedGifFrames = {\n ...prepared,\n dispose: () => {\n if (disposed) {\n return;\n }\n disposed = true;\n this.activePreparedFrames.delete(result);\n disposeBackendResult();\n },\n };\n this.activePreparedFrames.add(result);\n return result;\n }\n\n private prepareCompositedFrames(\n options: NormalizedPrepareFramesOptions,\n frameIndices: readonly number[]\n ): PreparedGifFrames {\n const requested = new Set(frameIndices);\n const maxFrame = frameIndices.length > 0 ? Math.max(...frameIndices) : -1;\n const canvas = new Uint32Array(this.width_ * this.height_);\n const frames: PreparedGifFrame[] = [];\n const dedupe =\n options.dedupe === \"all\" ? new Map<number, Uint32Array[]>() : null;\n let byteLength = 0;\n let previousPixels: Uint32Array | null = null;\n let previousPreparedPixels: Uint32Array | null = null;\n\n for (let frameIndex = 0; frameIndex <= maxFrame; frameIndex++) {\n const frame = this.frames[frameIndex]!;\n const restore =\n frame.disposal === 3 ? new Uint32Array(canvas) : null;\n\n this.blitFrameIndicesToCanvas(frame, canvas, this.width_, options.format);\n\n if (requested.has(frameIndex)) {\n let pixels: Uint32Array | null = null;\n let bucket: Uint32Array[] | undefined;\n let hash = 0;\n if (dedupe) {\n hash = GifReader.hashPixels(canvas);\n bucket = dedupe.get(hash);\n pixels = GifReader.findMatchingPixels(canvas, bucket);\n } else if (\n options.dedupe === \"adjacent\" &&\n previousPreparedPixels &&\n GifReader.pixelsEqual(previousPreparedPixels, canvas)\n ) {\n pixels = previousPreparedPixels;\n }\n const changedRect =\n options.deltas && previousPixels\n ? GifReader.findChangedRect(\n previousPixels,\n canvas,\n this.width_,\n this.height_\n )\n : null;\n const changedPixels = changedRect\n ? GifReader.copyRectPixels(canvas, this.width_, changedRect)\n : undefined;\n let frameBytes = 0;\n const deltaBytes = changedPixels?.byteLength ?? 0;\n\n if (!pixels) {\n this.enforcePreparedByteBudget(\n byteLength + canvas.byteLength + deltaBytes,\n options.maxBytes\n );\n pixels = new Uint32Array(canvas);\n frameBytes = pixels.byteLength;\n byteLength += frameBytes + deltaBytes;\n\n if (dedupe) {\n if (bucket) {\n bucket.push(pixels);\n } else {\n dedupe.set(hash, [pixels]);\n }\n }\n } else {\n this.enforcePreparedByteBudget(\n byteLength + deltaBytes,\n options.maxBytes\n );\n byteLength += deltaBytes;\n }\n\n frames.push({\n index: frameIndex,\n x: 0,\n y: 0,\n width: this.width_,\n height: this.height_,\n delay: frame.delay,\n disposal: frame.disposal,\n byteLength: frameBytes + deltaBytes,\n isFullCanvas: true,\n ...(changedRect\n ? {\n changedX: changedRect.x,\n changedY: changedRect.y,\n changedWidth: changedRect.width,\n changedHeight: changedRect.height,\n changedPixels,\n }\n : {}),\n pixels,\n });\n previousPixels = pixels;\n previousPreparedPixels = pixels;\n }\n\n this.applyFrameDisposal(frame, canvas, restore);\n }\n\n return this.createPreparedFramesResult(\n options.format,\n true,\n frames,\n byteLength,\n options.maxBytes ?? null\n );\n }\n\n private prepareUncompositedFrames(\n options: NormalizedPrepareFramesOptions,\n frameIndices: readonly number[]\n ): PreparedGifFrames {\n const frames: PreparedGifFrame[] = [];\n let byteLength = 0;\n\n for (const frameIndex of frameIndices) {\n const frame = this.frames[frameIndex]!;\n let prepared: PreparedGifFrame;\n\n if (options.cache === \"indices\") {\n const indices = this.getFrameIndices(frame);\n const palette = this.getFramePalette(frame, options.format);\n prepared = {\n index: frameIndex,\n x: frame.x,\n y: frame.y,\n width: frame.width,\n height: frame.height,\n delay: frame.delay,\n disposal: frame.disposal,\n byteLength: indices.byteLength + palette.byteLength,\n isFullCanvas: false,\n indices,\n palette,\n };\n } else {\n const colors = this.getFrameColors(frame, options.format, this.width_);\n const spans = frame.opaqueSpans;\n const positions = spans ? undefined : frame.opaquePositions;\n prepared = {\n index: frameIndex,\n x: frame.x,\n y: frame.y,\n width: frame.width,\n height: frame.height,\n delay: frame.delay,\n disposal: frame.disposal,\n byteLength:\n colors.byteLength +\n (spans?.byteLength ?? positions?.byteLength ?? 0),\n isFullCanvas: false,\n colors,\n };\n if (spans) {\n prepared.spans = spans;\n } else if (positions) {\n prepared.positions = positions;\n }\n }\n\n byteLength += prepared.byteLength;\n this.enforcePreparedByteBudget(byteLength, options.maxBytes);\n frames.push(prepared);\n }\n\n return this.createPreparedFramesResult(\n options.format,\n false,\n frames,\n byteLength,\n options.maxBytes ?? null\n );\n }\n\n private createPreparedFramesResult(\n format: PreparedFrameFormat,\n composited: boolean,\n frames: PreparedGifFrame[],\n byteLength: number,\n maxBytes: number | null\n ): PreparedGifFrames {\n const byIndex = new Array<PreparedGifFrame | undefined>(this.frames.length);\n for (const frame of frames) {\n byIndex[frame.index] = frame;\n }\n\n const result: PreparedGifFrames = {\n width: this.width_,\n height: this.height_,\n format,\n composited,\n frames,\n byteLength,\n maxBytes,\n getFrame: (index: number) => byIndex[index],\n getFramePixels: (index: number) => byIndex[index]?.pixels,\n getFrameBytes: (index: number) => {\n const pixels = byIndex[index]?.pixels;\n return pixels\n ? new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength)\n : undefined;\n },\n copyFrame: (index: number, target: Uint8Array | Uint32Array) => {\n const frame = byIndex[index];\n if (!frame) {\n throw new Error(\"Frame index out of range.\");\n }\n this.copyPreparedFrame(frame, target);\n },\n createPlayer: (target?: Uint8Array | Uint32Array) =>\n this.createPreparedPlayer(byIndex, target),\n dispose: () => {\n this.activePreparedFrames.delete(result);\n byIndex.length = 0;\n frames.length = 0;\n },\n };\n this.activePreparedFrames.add(result);\n return result;\n }\n\n private createPreparedPlayer(\n byIndex: readonly (PreparedGifFrame | undefined)[],\n target?: Uint8Array | Uint32Array\n ): PreparedGifPlayer {\n const target32 = target\n ? this.getPreparedTarget32(target)\n : new Uint32Array(this.width_ * this.height_);\n let currentIndex = -1;\n const drawFrame = (index: number): Uint32Array => {\n const frame = byIndex[index];\n if (!frame) {\n throw new Error(\"Frame index out of range.\");\n }\n\n const previousFrame = byIndex[currentIndex];\n if (currentIndex === index - 1 && previousFrame?.pixels === frame.pixels) {\n currentIndex = index;\n return target32;\n }\n\n const changedPixelCount = frame.changedPixels?.length ?? 0;\n const fullPixelCount = frame.pixels?.length ?? target32.length;\n if (\n frame.changedPixels &&\n frame.changedX !== undefined &&\n frame.changedY !== undefined &&\n frame.changedWidth !== undefined &&\n frame.changedHeight !== undefined &&\n changedPixelCount <= (fullPixelCount >>> 3) &&\n currentIndex === index - 1\n ) {\n GifReader.blitRectPixels(\n frame.changedPixels,\n target32,\n this.width_,\n frame.changedX,\n frame.changedY,\n frame.changedWidth,\n frame.changedHeight\n );\n } else {\n this.copyPreparedFrame32(frame, target32);\n }\n\n currentIndex = index;\n return target32;\n };\n\n return {\n target: target32,\n get currentIndex() {\n return currentIndex;\n },\n drawFrame,\n next: () => {\n const nextIndex = currentIndex + 1;\n return byIndex[nextIndex] ? drawFrame(nextIndex) : target32;\n },\n reset: () => {\n currentIndex = -1;\n target32.fill(0);\n },\n };\n }\n\n private copyPreparedFrame(\n frame: PreparedGifFrame,\n target: Uint8Array | Uint32Array\n ): void {\n const target32 = this.getPreparedTarget32(target);\n this.copyPreparedFrame32(frame, target32);\n }\n\n private copyPreparedFrame32(\n frame: PreparedGifFrame,\n target32: Uint32Array\n ): void {\n if (frame.pixels) {\n target32.set(frame.pixels);\n return;\n }\n\n if (frame.colors) {\n this.blitPreparedColors(frame, target32);\n return;\n }\n\n if (frame.indices && frame.palette) {\n this.blitPreparedIndices(frame, target32);\n return;\n }\n }\n\n private blitPreparedColors(\n frame: PreparedGifFrame,\n target32: Uint32Array\n ): void {\n const colors = frame.colors!;\n if (frame.spans) {\n const spans = frame.spans;\n for (let i = 0; i < spans.length; i += 3) {\n const dst = spans[i]!;\n const length = spans[i + 1]!;\n const src = spans[i + 2]!;\n if (length >= 8) {\n target32.set(colors.subarray(src, src + length), dst);\n } else {\n for (let j = 0; j < length; j++) {\n target32[dst + j] = colors[src + j]!;\n }\n }\n }\n return;\n }\n\n if (frame.positions) {\n const positions = frame.positions;\n for (let i = 0; i < colors.length; i++) {\n target32[positions[i]!] = colors[i]!;\n }\n return;\n }\n\n let src = 0;\n let dst = (frame.y * this.width_ + frame.x) | 0;\n if (frame.x === 0 && frame.width === this.width_) {\n target32.set(colors, dst);\n return;\n }\n\n const rowStride = this.width_ - frame.width;\n for (let y = 0; y < frame.height; y++) {\n for (let x = 0; x < frame.width; x++) {\n target32[dst++] = colors[src++]!;\n }\n dst += rowStride;\n }\n }\n\n private blitPreparedIndices(\n frame: PreparedGifFrame,\n target32: Uint32Array\n ): void {\n const indices = frame.indices!;\n const palette = frame.palette!;\n const sourceFrame = this.frames[frame.index]!;\n const transparentIndex = sourceFrame.transparent_index ?? 256;\n let src = 0;\n let dst = (frame.y * this.width_ + frame.x) | 0;\n const rowStride = this.width_ - frame.width;\n\n for (let y = 0; y < frame.height; y++) {\n for (let x = 0; x < frame.width; x++) {\n const index = indices[src++]!;\n if (index !== transparentIndex) {\n target32[dst] = palette[index]!;\n }\n dst++;\n }\n dst += rowStride;\n }\n }\n\n private getPreparedTarget32(target: Uint8Array | Uint32Array): Uint32Array {\n const requiredPixels = this.width_ * this.height_;\n if (target instanceof Uint32Array) {\n if (target.length < requiredPixels) {\n throw new Error(\n `Buffer too small: need ${requiredPixels * 4} bytes, got ${\n target.byteLength\n }`\n );\n }\n return target;\n }\n\n if (target.byteLength < requiredPixels * 4) {\n throw new Error(\n `Buffer too small: need ${requiredPixels * 4} bytes, got ${\n target.byteLength\n }`\n );\n }\n\n if ((target.byteOffset & 3) !== 0) {\n throw new Error(\"Pixel buffer byteOffset must be aligned to 4 bytes.\");\n }\n\n return new Uint32Array(\n target.buffer,\n target.byteOffset,\n requiredPixels\n );\n }\n\n private applyFrameDisposal(\n frame: FrameInfo,\n canvas: Uint32Array,\n restore: Uint32Array | null\n ): void {\n if (frame.disposal === 2) {\n this.clearFrameRect(canvas, frame);\n } else if (frame.disposal === 3 && restore) {\n canvas.set(restore);\n }\n }\n\n private clearFrameRect(canvas: Uint32Array, frame: FrameInfo): void {\n const x = Math.max(0, frame.x | 0);\n const y = Math.max(0, frame.y | 0);\n const right = Math.min(this.width_, x + (frame.width | 0));\n const bottom = Math.min(this.height_, y + (frame.height | 0));\n const width = right - x;\n if (width <= 0) {\n return;\n }\n\n for (let row = y; row < bottom; row++) {\n const start = row * this.width_ + x;\n canvas.fill(0, start, start + width);\n }\n }\n\n private static findChangedRect(\n previous: Uint32Array,\n current: Uint32Array,\n width: number,\n height: number\n ): ChangedRect | null {\n let top = 0;\n let bottom = height - 1;\n\n while (top < height) {\n const row = top * width;\n let changed = false;\n for (let x = 0; x < width; x++) {\n if (previous[row + x] !== current[row + x]) {\n changed = true;\n break;\n }\n }\n if (changed) break;\n top++;\n }\n\n if (top === height) {\n return null;\n }\n\n while (bottom > top) {\n const row = bottom * width;\n let changed = false;\n for (let x = 0; x < width; x++) {\n if (previous[row + x] !== current[row + x]) {\n changed = true;\n break;\n }\n }\n if (changed) break;\n bottom--;\n }\n\n let left = width - 1;\n let right = 0;\n for (let y = top; y <= bottom; y++) {\n const row = y * width;\n for (let x = 0; x < width; x++) {\n if (previous[row + x] !== current[row + x]) {\n if (x < left) left = x;\n if (x > right) right = x;\n }\n }\n }\n\n return {\n x: left,\n y: top,\n width: right - left + 1,\n height: bottom - top + 1,\n };\n }\n\n private static copyRectPixels(\n source: Uint32Array,\n sourceWidth: number,\n rect: ChangedRect\n ): Uint32Array {\n const pixels = new Uint32Array(rect.width * rect.height);\n for (let y = 0; y < rect.height; y++) {\n const src = (rect.y + y) * sourceWidth + rect.x;\n pixels.set(source.subarray(src, src + rect.width), y * rect.width);\n }\n return pixels;\n }\n\n private static blitRectPixels(\n source: Uint32Array,\n target: Uint32Array,\n targetWidth: number,\n x: number,\n y: number,\n width: number,\n height: number\n ): void {\n for (let row = 0; row < height; row++) {\n const src = row * width;\n const dst = (y + row) * targetWidth + x;\n target.set(source.subarray(src, src + width), dst);\n }\n }\n\n private enforcePreparedByteBudget(\n nextByteLength: number,\n maxBytes: number | undefined\n ): void {\n if (maxBytes !== undefined && nextByteLength > maxBytes) {\n throw new Error(\n `Prepared frame output exceeds maxBytes (${nextByteLength} > ${maxBytes}).`\n );\n }\n }\n\n private static hashPixels(pixels: Uint32Array): number {\n let hash = 2166136261;\n for (let i = 0; i < pixels.length; i++) {\n hash ^= pixels[i]!;\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n }\n\n private static findMatchingPixels(\n pixels: Uint32Array,\n bucket: Uint32Array[] | undefined\n ): Uint32Array | null {\n if (!bucket) {\n return null;\n }\n\n for (const candidate of bucket) {\n if (candidate.length !== pixels.length) {\n continue;\n }\n\n let match = true;\n for (let i = 0; i < pixels.length; i++) {\n if (candidate[i] !== pixels[i]) {\n match = false;\n break;\n }\n }\n if (match) {\n return candidate;\n }\n }\n return null;\n }\n\n private static pixelsEqual(a: Uint32Array, b: Uint32Array): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n /* Return decoder tables to pool for reuse (call when done with this GifReader) */\n dispose(): void {\n for (const prepared of Array.from(this.activePreparedFrames)) {\n prepared.dispose();\n }\n this.activePreparedFrames.clear();\n this.clearFrameCaches();\n\n this.pooledTables = null;\n this.decTable = new Int32Array(0);\n this.stack = new Uint8Array(0);\n this.firstByte = new Int16Array(0);\n }\n\n private clearFrameCaches(): void {\n for (const frame of this.frames) {\n delete frame.codes;\n delete frame.indices;\n delete frame.pal32rgba;\n delete frame.pal32bgra;\n delete frame.rgbaColors;\n delete frame.bgraColors;\n delete frame.opaqueSpans;\n delete frame.opaquePositions;\n delete frame.decodeCount;\n }\n }\n\n /* Alias for dispose() to match expected pooling API */\n returnToPool(): void {\n this.dispose();\n }\n\n /* Get statistics about decoder table pool usage */\n static getPoolStats(): {\n available: number;\n totalCreated: number;\n hits: number;\n misses: number;\n } {\n return {\n available: 0,\n totalCreated: 0,\n hits: 0,\n misses: 0,\n };\n }\n\n /* Fused LZW decode → Uint32 blit with precomputed pal32, transparency, interlace. */\n private decodeAndBlitFrame32(\n frameNum: number,\n pixels: Uint8Array,\n order: \"rgba\" | \"bgra\"\n ) {\n if (frameNum < 0 || frameNum >= this.frames.length)\n throw new Error(\"Frame index out of range.\");\n\n this.clearFrameCaches();\n try {\n this.ensureDecoderTables();\n\n const out32 = new Uint32Array(\n pixels.buffer,\n pixels.byteOffset,\n pixels.byteLength >>> 2\n );\n\n const frame = this.frames[frameNum]!;\n const pal32 = this.getFramePalette(frame, order);\n const trans = frame.transparent_index ?? 256;\n this.lzwDecodeToPixels(\n this.buf,\n frame.data_offset,\n out32,\n this.width_,\n frame,\n pal32,\n trans\n );\n } finally {\n this.clearFrameCaches();\n }\n }\n\n private decodeAndBlitCompatibleFrame(\n frameNum: number,\n pixels: GifPixelBuffer,\n order: \"rgba\" | \"bgra\",\n ): void {\n let typedPixels: Uint8Array | null = null;\n if (pixels instanceof Uint8Array) {\n typedPixels = pixels;\n } else if (pixels instanceof Uint8ClampedArray) {\n typedPixels = new Uint8Array(\n pixels.buffer,\n pixels.byteOffset,\n pixels.byteLength,\n );\n }\n\n if (\n typedPixels &&\n (typedPixels.byteOffset & 3) === 0 &&\n (typedPixels.byteLength & 3) === 0\n ) {\n this.decodeAndBlitFrame32(frameNum, typedPixels, order);\n return;\n }\n\n const compatible = Uint8Array.from(pixels);\n this.decodeAndBlitFrame32(frameNum, compatible, order);\n for (let i = 0; i < compatible.length; i++) {\n pixels[i] = compatible[i]!;\n }\n }\n\n private getFrameColors(\n frame: FrameInfo,\n order: \"rgba\" | \"bgra\",\n canvasWidth: number,\n ): Uint32Array {\n const existing = order === \"rgba\" ? frame.rgbaColors : frame.bgraColors;\n if (existing) {\n return existing;\n }\n\n const indices = this.getFrameIndices(frame);\n const pal32 = this.getFramePalette(frame, order);\n const fw = frame.width | 0;\n const fh = frame.height | 0;\n const trans = frame.transparent_index ?? 256;\n const total = fw * fh;\n let colors: Uint32Array;\n\n if (trans === 256) {\n colors = new Uint32Array(total);\n for (let i = 0; i < total; i++) {\n colors[i] = pal32[indices[i]!]! >>> 0;\n }\n } else {\n let spans = frame.opaqueSpans;\n let positions = frame.opaquePositions;\n let opaqueCount = 0;\n if (spans) {\n for (let i = 1; i < spans.length; i += 3) {\n opaqueCount += spans[i]!;\n }\n } else if (positions) {\n opaqueCount = positions.length;\n } else {\n let spanCount = 0;\n for (let y = 0; y < fh; y++) {\n const row = y * fw;\n let x = 0;\n while (x < fw) {\n while (x < fw && indices[row + x] === trans) {\n x++;\n }\n if (x >= fw) break;\n spanCount++;\n while (x < fw && indices[row + x] !== trans) {\n opaqueCount++;\n x++;\n }\n }\n }\n\n if (spanCount === 0 || opaqueCount / spanCount >= 4) {\n spans = new Uint32Array(spanCount * 3);\n frame.opaqueSpans = spans;\n } else {\n positions = new Uint32Array(opaqueCount);\n frame.opaquePositions = positions;\n }\n }\n\n colors = new Uint32Array(opaqueCount);\n if (spans) {\n let out = 0;\n let spanOut = 0;\n for (let y = 0; y < fh; y++) {\n const row = y * fw;\n const dstRow = ((frame.y + y) | 0) * canvasWidth + (frame.x | 0);\n let x = 0;\n while (x < fw) {\n while (x < fw && indices[row + x] === trans) {\n x++;\n }\n if (x >= fw) break;\n\n const dst = dstRow + x;\n const colorStart = out;\n const xStart = x;\n while (x < fw) {\n const index = indices[row + x]!;\n if (index === trans) break;\n colors[out++] = pal32[index]! >>> 0;\n x++;\n }\n\n if (spanOut < spans.length) {\n spans[spanOut++] = dst;\n spans[spanOut++] = x - xStart;\n spans[spanOut++] = colorStart;\n }\n }\n }\n } else if (positions) {\n let out = 0;\n for (let y = 0; y < fh; y++) {\n const row = y * fw;\n let dst = ((frame.y + y) | 0) * canvasWidth + (frame.x | 0);\n for (let x = 0; x < fw; x++) {\n const index = indices[row + x]!;\n if (index !== trans) {\n positions[out] = dst;\n colors[out++] = pal32[index]! >>> 0;\n }\n dst++;\n }\n }\n }\n }\n\n if (order === \"rgba\") {\n frame.rgbaColors = colors;\n } else {\n frame.bgraColors = colors;\n }\n\n return colors;\n }\n\n private blitFrameIndicesToCanvas(\n frame: FrameInfo,\n out32: Uint32Array,\n canvasWidth: number,\n order: \"rgba\" | \"bgra\"\n ): void {\n const indices = this.getFrameIndices(frame);\n const pal32 = this.getFramePalette(frame, order);\n const fw = frame.width | 0;\n const fh = frame.height | 0;\n const trans = frame.transparent_index ?? 256;\n const rowStride = canvasWidth - fw;\n let src = 0;\n let dst = ((frame.y | 0) * canvasWidth + (frame.x | 0)) | 0;\n\n if (trans === 256) {\n for (let y = 0; y < fh; y++) {\n for (let x = 0; x < fw; x++) {\n out32[dst++] = pal32[indices[src++]!]!;\n }\n dst += rowStride;\n }\n return;\n }\n\n for (let y = 0; y < fh; y++) {\n for (let x = 0; x < fw; x++) {\n const index = indices[src++]!;\n if (index !== trans) {\n out32[dst] = pal32[index]!;\n }\n dst++;\n }\n dst += rowStride;\n }\n }\n\n /* Optimized LZW decoder that streams symbols directly to destination pixels. */\n private lzwDecodeToPixels(\n _codeStream: Uint8Array,\n _dataOffset: number,\n out32: Uint32Array,\n canvasWidth: number,\n frame: FrameInfo,\n pal32: Uint32Array,\n transparentIndex: number\n ) {\n this.ensureDecoderTables();\n const bytes = this.getFrameCodes(frame);\n const minCodeSize = frame.min_code_size | 0;\n let q = 0; // cursor into contiguous bytes\n\n const CLEAR = 1 << minCodeSize;\n const EOI = CLEAR + 1;\n let nextCode = EOI + 1;\n\n let codeSize = (minCodeSize + 1) | 0;\n let codeMask = (1 << codeSize) - 1;\n\n // Initialize firstByte table for base codes at start\n for (let i = 0; i < CLEAR; i++) this.firstByte[i] = i;\n\n // Bit buffer\n let bits = 0;\n let bitCount = 0;\n\n // Output cursor state (handles interlace & row wraps)\n const fw = frame.width | 0;\n const fh = frame.height | 0;\n const fx = frame.x | 0;\n const fy = frame.y | 0;\n\n // Decoder tables\n const table = this.decTable;\n\n // Stack for sequence unwind (single-pass)\n const stack = this.stack;\n let sp = 0;\n\n let prevCode: number | null = null;\n\n // NEW: Split \"no transparency\" vs \"has transparency\" decode loops\n const hasTrans = transparentIndex !== 256; // 256 is sentinel\n\n if (!frame.interlaced) {\n // Fast path for non-interlaced frames\n let xleft = fw;\n const rowStride32 = (canvasWidth - fw) >>> 0;\n let dst32 = (fy * canvasWidth + fx) >>> 0;\n\n if (!hasTrans) {\n // Fast path: no transparency checks while writing pixels.\n while (true) {\n // Fill bit buffer to have at least codeSize bits\n while (bitCount < codeSize && q < bytes.length) {\n bits |= (bytes[q++]! | 0) << bitCount;\n bitCount += 8;\n }\n if (bitCount < codeSize) break;\n\n let code = bits & codeMask;\n bits >>>= codeSize;\n bitCount -= codeSize;\n\n if (code === CLEAR) {\n nextCode = EOI + 1;\n codeSize = (minCodeSize + 1) | 0;\n codeMask = (1 << codeSize) - 1;\n prevCode = null;\n // Initialize firstByte table for base codes\n for (let i = 0; i < CLEAR; i++) this.firstByte[i] = i;\n continue;\n } else if (code === EOI) {\n break;\n }\n\n // Decode sequence for 'code'\n let outFirst: number;\n let cur = code;\n\n if (cur < CLEAR) {\n // Single byte - always write (no transparency check)\n outFirst = cur;\n const b = outFirst & 0xff;\n out32[dst32] = pal32[b]! >>> 0;\n dst32++;\n if (--xleft === 0) {\n dst32 += rowStride32;\n xleft = fw;\n }\n } else {\n // Chase with stack\n sp = 0;\n if (cur >= nextCode) {\n // KwKwK case\n if (prevCode === null) break;\n outFirst = this.firstByte[prevCode]! | 0; // O(1) instead of chasing\n stack[sp++] = outFirst;\n cur = prevCode;\n } else {\n outFirst = this.firstByte[cur]! | 0; // O(1) instead of chasing\n }\n // unwind sequence\n while (cur >= CLEAR) {\n const entry = table[cur]! | 0;\n stack[sp++] = entry & 0xff;\n cur = entry >>> 8;\n }\n // Write first base - always write (no transparency check)\n const base = cur & 0xff;\n out32[dst32] = pal32[base]! >>> 0;\n dst32++;\n if (--xleft === 0) {\n dst32 += rowStride32;\n xleft = fw;\n }\n // Write stack backwards - always write (no transparency check)\n while (sp) {\n const b = stack[--sp]! & 0xff;\n out32[dst32] = pal32[b]! >>> 0;\n dst32++;\n if (--xleft === 0) {\n dst32 += rowStride32;\n xleft = fw;\n }\n }\n }\n\n // Add new table entry\n if (prevCode !== null && nextCode < GIF.MAX_CODE) {\n table[nextCode] = ((prevCode & 0xfff) << 8) | (outFirst & 0xff);\n this.firstByte[nextCode] = this.firstByte[prevCode]!; // O(1) instead of chasing\n nextCode++;\n if (nextCode >= codeMask + 1 && codeSize < 12) {\n codeSize++;\n codeMask = (codeMask << 1) | 1;\n }\n }\n\n prevCode = code;\n }\n } else {\n // HAS TRANSPARENCY: Check each pixel\n while (true) {\n // Fill bit buffer to have at least codeSize bits\n while (bitCount < codeSize && q < bytes.length) {\n bits |= (bytes[q++]! | 0) << bitCount;\n bitCount += 8;\n }\n if (bitCount < codeSize) break;\n\n let code = bits & codeMask;\n bits >>>= codeSize;\n bitCount -= codeSize;\n\n if (code === CLEAR) {\n nextCode = EOI + 1;\n codeSize = (minCodeSize + 1) | 0;\n codeMask = (1 << codeSize) - 1;\n prevCode = null;\n // Initialize firstByte table for base codes\n for (let i = 0; i < CLEAR; i++) this.firstByte[i] = i;\n continue;\n } else if (code === EOI) {\n break;\n }\n\n // Decode sequence for 'code'\n let outFirst: number;\n let cur = code;\n\n if (cur < CLEAR) {\n // Single byte - transparent pixels leave the caller's buffer as-is.\n outFirst = cur;\n const b = outFirst & 0xff;\n if (b !== transparentIndex) {\n out32[dst32] = pal32[b]! >>> 0;\n }\n dst32++;\n if (--xleft === 0) {\n dst32 += rowStride32;\n xleft = fw;\n }\n } else {\n // Chase with stack\n sp = 0;\n if (cur >= nextCode) {\n // KwKwK case\n if (prevCode === null) break;\n outFirst = this.firstByte[prevCode]! | 0; // O(1) instead of chasing\n stack[sp++] = outFirst;\n cur = prevCode;\n } else {\n outFirst = this.firstByte[cur]! | 0; // O(1) instead of chasing\n }\n // unwind sequence\n while (cur >= CLEAR) {\n const entry = table[cur]! | 0;\n stack[sp++] = entry & 0xff;\n cur = entry >>> 8;\n }\n // Write first base - transparent pixels leave the caller's buffer as-is.\n const base = cur & 0xff;\n if (base !== transparentIndex) {\n out32[dst32] = pal32[base]! >>> 0;\n }\n dst32++;\n if (--xleft === 0) {\n dst32 += rowStride32;\n xleft = fw;\n }\n // Write stack backwards - transparent pixels leave the caller's buffer as-is.\n while (sp) {\n const b = stack[--sp]! & 0xff;\n if (b !== transparentIndex) {\n out32[dst32] = pal32[b]! >>> 0;\n }\n dst32++;\n if (--xleft === 0) {\n dst32 += rowStride32;\n xleft = fw;\n }\n }\n }\n\n // Add new table entry\n if (prevCode !== null && nextCode < GIF.MAX_CODE) {\n table[nextCode] = ((prevCode & 0xfff) << 8) | (outFirst & 0xff);\n this.firstByte[nextCode] = this.firstByte[prevCode]!; // O(1) instead of chasing\n nextCode++;\n if (nextCode >= codeMask + 1 && codeSize < 12) {\n codeSize++;\n codeMask = (codeMask << 1) | 1;\n }\n }\n\n prevCode = code;\n }\n }\n } else {\n // INTERLACED PATH: Use pass-loops with inline pixel positioning\n // First decode all pixels into a job-local temporary buffer.\n const frameSize = fw * fh;\n const framePixels = new Uint8Array(frameSize);\n\n let pixelIndex = 0;\n\n // Decode all LZW symbols into linear pixel array\n while (true) {\n // Fill bit buffer\n while (bitCount < codeSize && q < bytes.length) {\n bits |= (bytes[q++]! | 0) << bitCount;\n bitCount += 8;\n }\n if (bitCount < codeSize) break;\n\n let code = bits & codeMask;\n bits >>>= codeSize;\n bitCount -= codeSize;\n\n if (code === CLEAR) {\n nextCode = EOI + 1;\n codeSize = (minCodeSize + 1) | 0;\n codeMask = (1 << codeSize) - 1;\n prevCode = null;\n // Initialize firstByte table for base codes\n for (let i = 0; i < CLEAR; i++) this.firstByte[i] = i;\n continue;\n } else if (code === EOI) {\n break;\n }\n\n let outFirst: number;\n let cur = code;\n\n if (cur < CLEAR) {\n // Single byte\n outFirst = cur;\n if (pixelIndex < framePixels.length) {\n framePixels[pixelIndex++] = outFirst & 0xff;\n }\n } else {\n // Chase with stack\n sp = 0;\n if (cur >= nextCode) {\n if (prevCode === null) break;\n outFirst = this.firstByte[prevCode]! | 0; // O(1) instead of chasing\n stack[sp++] = outFirst;\n cur = prevCode;\n } else {\n outFirst = this.firstByte[cur]! | 0; // O(1) instead of chasing\n }\n while (cur >= CLEAR) {\n const entry = table[cur]! | 0;\n stack[sp++] = entry & 0xff;\n cur = entry >>> 8;\n }\n // Write first base\n const base = cur & 0xff;\n if (pixelIndex < framePixels.length) {\n framePixels[pixelIndex++] = base & 0xff;\n }\n // Write stack backwards\n while (sp && pixelIndex < framePixels.length) {\n framePixels[pixelIndex++] = stack[--sp]! & 0xff;\n }\n }\n\n if (prevCode !== null && nextCode < GIF.MAX_CODE) {\n table[nextCode] = ((prevCode & 0xfff) << 8) | (outFirst & 0xff);\n this.firstByte[nextCode] = this.firstByte[prevCode]!; // O(1) instead of chasing\n nextCode++;\n if (nextCode >= codeMask + 1 && codeSize < 12) {\n codeSize++;\n codeMask = (codeMask << 1) | 1;\n }\n }\n\n prevCode = code;\n }\n\n // NEW: Pass-loops with inline pixel positioning - no callback overhead\n pixelIndex = 0;\n for (let pass = 0, yStart = 0, yStride = 8; pass < 4; pass++) {\n // Set pass parameters: pass 0: start=0, stride=8; pass 1: start=4, stride=8; pass 2: start=2, stride=4; pass 3: start=1, stride=2\n if (pass === 1) {\n yStart = 4;\n yStride = 8;\n } else if (pass === 2) {\n yStart = 2;\n yStride = 4;\n } else if (pass === 3) {\n yStart = 1;\n yStride = 2;\n }\n\n for (let yInPass = 0; ; yInPass++) {\n const row = fy + yStart + yInPass * yStride;\n if (row >= fy + fh) break;\n\n let dst32 = (row * canvasWidth + fx) >>> 0;\n\n // Emit exactly fw pixels on this row\n for (let x = 0; x < fw && pixelIndex < framePixels.length; x++) {\n const b = framePixels[pixelIndex++]! & 0xff;\n if (b !== transparentIndex) {\n out32[dst32] = pal32[b]! >>> 0;\n }\n dst32++;\n }\n }\n }\n }\n\n // Done\n }\n\n}\n","import {\n\tGifDecodeBackend,\n\tPreparedFrameFormat,\n\tPreparedGifFrame,\n\tPreparedGifFrames,\n\tPreparedGifPlayer,\n\tPrepareFramesOptions,\n\tWasmCoreInstance,\n} from \"../types\";\nimport { buildPal32 } from \"../utils/palette\";\nimport { getWasmCoreModule } from \"./runtime\";\n\ntype WasmFrameMetadata = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\tpalette_offset: number;\n\tpalette_size: number;\n\ttransparent_index: number | null;\n\tdelay: number;\n\tdisposal: number;\n};\n\ntype WasmMetadata = {\n\twidth: number;\n\theight: number;\n\tframe_count: number;\n\tframes: WasmFrameMetadata[];\n};\n\ntype NativeCompositedFrame = {\n\tindex: number;\n\tpixels: Uint32Array;\n\tchangedRect: ChangedRect | null;\n\tchangedPixels?: Uint32Array | undefined;\n};\n\ntype NormalizedBackendOptions = Required<\n\tPick<PrepareFramesOptions, \"format\" | \"composited\">\n> &\n\tPrepareFramesOptions;\n\nconst COMPOSITED_DELTA_MAGIC = 0x31444757;\nconst COMPOSITED_DELTA_VERSION = 1;\nconst COMPOSITED_DELTA_HEADER_LEN = 4;\nconst COMPOSITED_DELTA_ENTRY_LEN = 9;\n\nexport function createWasmCoreDecodeBackend(): GifDecodeBackend {\n\treturn {\n\t\tname: \"wtfgif-rust-wasm\",\n\t\tisAvailable: () => getWasmCoreModule() !== null,\n\t\tprepareFrames: (gifData, options) =>\n\t\t\tprepareWasmCoreFrames(gifData, options),\n\t};\n}\n\nfunction prepareWasmCoreFrames(\n\tgifData: Uint8Array,\n\toptions: NormalizedBackendOptions,\n): PreparedGifFrames | null {\n\tconst wasmModule = getWasmCoreModule();\n\tif (!wasmModule) {\n\t\treturn null;\n\t}\n\n\tconst core = new wasmModule.WtfGifCore(gifData);\n\ttry {\n\t\tconst metadata = JSON.parse(core.metadata_json()) as WasmMetadata;\n\t\tconst frameIndices = normalizeFrameIndices(\n\t\t\toptions.frameIndices,\n\t\t\tmetadata.frame_count,\n\t\t);\n\t\tif (options.composited) {\n\t\t\treturn prepareWasmCoreCompositedFrames(\n\t\t\t\tcore,\n\t\t\t\tmetadata,\n\t\t\t\toptions,\n\t\t\t\tframeIndices,\n\t\t\t);\n\t\t}\n\n\t\tconst frames: PreparedGifFrame[] = [];\n\t\tconst transparentByIndex = new Map<number, number | null>();\n\t\tlet byteLength = 0;\n\n\t\tfor (const frameIndex of frameIndices) {\n\t\t\tconst metadataFrame = metadata.frames[frameIndex];\n\t\t\tif (!metadataFrame) {\n\t\t\t\tthrow new Error(\"Frame index out of range.\");\n\t\t\t}\n\n\t\t\tconst indices = toUint8Array(core.decode_frame_indices(frameIndex));\n\t\t\tconst palette = buildPal32(\n\t\t\t\tgifData,\n\t\t\t\tmetadataFrame.palette_offset,\n\t\t\t\tmetadataFrame.palette_size,\n\t\t\t\toptions.format,\n\t\t\t\tmetadataFrame.transparent_index,\n\t\t\t);\n\t\t\tconst frameByteLength = indices.byteLength + palette.byteLength;\n\t\t\tbyteLength += frameByteLength;\n\t\t\tenforceByteBudget(byteLength, options.maxBytes);\n\t\t\ttransparentByIndex.set(frameIndex, metadataFrame.transparent_index);\n\t\t\tframes.push({\n\t\t\t\tindex: frameIndex,\n\t\t\t\tx: metadataFrame.x,\n\t\t\t\ty: metadataFrame.y,\n\t\t\t\twidth: metadataFrame.width,\n\t\t\t\theight: metadataFrame.height,\n\t\t\t\tdelay: metadataFrame.delay,\n\t\t\t\tdisposal: metadataFrame.disposal,\n\t\t\t\tbyteLength: frameByteLength,\n\t\t\t\tisFullCanvas: false,\n\t\t\t\tindices,\n\t\t\t\tpalette,\n\t\t\t});\n\t\t}\n\n\t\treturn createPreparedFramesResult(\n\t\t\tmetadata.width,\n\t\t\tmetadata.height,\n\t\t\toptions.format,\n\t\t\tfalse,\n\t\t\tframes,\n\t\t\tbyteLength,\n\t\t\toptions.maxBytes ?? null,\n\t\t\ttransparentByIndex,\n\t\t\tcore,\n\t\t);\n\t} catch (error) {\n\t\tcore.free();\n\t\tthrow error;\n\t}\n}\n\nfunction prepareWasmCoreCompositedFrames(\n\tcore: WasmCoreInstance,\n\tmetadata: WasmMetadata,\n\toptions: NormalizedBackendOptions,\n\tframeIndices: readonly number[],\n): PreparedGifFrames {\n\tconst requestedFrames = createRequestedFrameFlags(\n\t\tframeIndices,\n\t\tmetadata.frame_count,\n\t);\n\tconst canvasPixels = metadata.width * metadata.height;\n\tconst nativeFrames = options.deltas\n\t\t? readNativeCompositedDeltaFrames(\n\t\t\t\ttoUint32Array(\n\t\t\t\t\toptions.format === \"rgba\"\n\t\t\t\t\t\t? core.prepare_composited_delta_rgba(requestedFrames)\n\t\t\t\t\t\t: core.prepare_composited_delta_bgra(requestedFrames),\n\t\t\t\t),\n\t\t\t\tcanvasPixels,\n\t\t\t)\n\t\t: readNativeCompositedFullFrames(\n\t\t\t\ttoUint32Array(\n\t\t\t\t\toptions.format === \"rgba\"\n\t\t\t\t\t\t? core.prepare_composited_rgba(requestedFrames)\n\t\t\t\t\t\t: core.prepare_composited_bgra(requestedFrames),\n\t\t\t\t),\n\t\t\t\trequestedFrames,\n\t\t\t\tcanvasPixels,\n\t\t\t);\n\tconst frames: PreparedGifFrame[] = [];\n\tconst dedupe =\n\t\toptions.dedupe === \"all\" ? new Map<number, Uint32Array[]>() : null;\n\tconst dedupeMode = options.dedupe ?? \"adjacent\";\n\tconst transparentByIndex = new Map<number, number | null>();\n\tlet byteLength = 0;\n\tlet previousPreparedPixels: Uint32Array | null = null;\n\n\tfor (const nativeFrame of nativeFrames) {\n\t\tconst frameIndex = nativeFrame.index;\n\t\tconst metadataFrame = metadata.frames[frameIndex];\n\t\tif (!metadataFrame) {\n\t\t\tthrow new Error(\"Frame index out of range.\");\n\t\t}\n\n\t\tconst canvas = nativeFrame.pixels;\n\n\t\tif (canvas.length !== canvasPixels) {\n\t\t\tthrow new Error(\"Prepared frame buffer is shorter than expected.\");\n\t\t}\n\n\t\tlet pixels: Uint32Array | null = null;\n\t\tlet bucket: Uint32Array[] | undefined;\n\t\tlet hash = 0;\n\t\tif (dedupe) {\n\t\t\thash = hashPixels(canvas);\n\t\t\tbucket = dedupe.get(hash);\n\t\t\tpixels = findMatchingPixels(canvas, bucket);\n\t\t} else if (\n\t\t\tdedupeMode === \"adjacent\" &&\n\t\t\tpreviousPreparedPixels &&\n\t\t\t(options.deltas\n\t\t\t\t? nativeFrame.changedRect === null\n\t\t\t\t: pixelsEqual(previousPreparedPixels, canvas))\n\t\t) {\n\t\t\tpixels = previousPreparedPixels;\n\t\t}\n\n\t\tconst changedRect = nativeFrame.changedRect;\n\t\tconst changedPixels = nativeFrame.changedPixels;\n\t\tconst deltaBytes = changedPixels?.byteLength ?? 0;\n\t\tlet frameBytes = 0;\n\n\t\tif (!pixels) {\n\t\t\tenforceByteBudget(\n\t\t\t\tbyteLength + canvas.byteLength + deltaBytes,\n\t\t\t\toptions.maxBytes,\n\t\t\t);\n\t\t\tpixels = canvas;\n\t\t\tframeBytes = pixels.byteLength;\n\t\t\tbyteLength += frameBytes + deltaBytes;\n\n\t\t\tif (dedupe) {\n\t\t\t\tif (bucket) {\n\t\t\t\t\tbucket.push(pixels);\n\t\t\t\t} else {\n\t\t\t\t\tdedupe.set(hash, [pixels]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tenforceByteBudget(byteLength + deltaBytes, options.maxBytes);\n\t\t\tbyteLength += deltaBytes;\n\t\t}\n\n\t\tframes.push({\n\t\t\tindex: frameIndex,\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: metadata.width,\n\t\t\theight: metadata.height,\n\t\t\tdelay: metadataFrame.delay,\n\t\t\tdisposal: metadataFrame.disposal,\n\t\t\tbyteLength: frameBytes + deltaBytes,\n\t\t\tisFullCanvas: true,\n\t\t\t...(changedRect\n\t\t\t\t? {\n\t\t\t\t\t\tchangedX: changedRect.x,\n\t\t\t\t\t\tchangedY: changedRect.y,\n\t\t\t\t\t\tchangedWidth: changedRect.width,\n\t\t\t\t\t\tchangedHeight: changedRect.height,\n\t\t\t\t\t\tchangedPixels,\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\tpixels,\n\t\t});\n\t\tpreviousPreparedPixels = pixels;\n\t}\n\n\treturn createPreparedFramesResult(\n\t\tmetadata.width,\n\t\tmetadata.height,\n\t\toptions.format,\n\t\ttrue,\n\t\tframes,\n\t\tbyteLength,\n\t\toptions.maxBytes ?? null,\n\t\ttransparentByIndex,\n\t\tcore,\n\t);\n}\n\nfunction readNativeCompositedFullFrames(\n\tpreparedPixels: Uint32Array,\n\trequestedFrames: Uint8Array,\n\tcanvasPixels: number,\n): NativeCompositedFrame[] {\n\tconst frames: NativeCompositedFrame[] = [];\n\tlet offset = 0;\n\n\tfor (let frameIndex = 0; frameIndex < requestedFrames.length; frameIndex++) {\n\t\tif (requestedFrames[frameIndex] === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst pixels = preparedPixels.subarray(offset, offset + canvasPixels);\n\t\toffset += canvasPixels;\n\t\tframes.push({ index: frameIndex, pixels, changedRect: null });\n\t}\n\n\tif (offset !== preparedPixels.length) {\n\t\tthrow new Error(\"Prepared frame buffer has unused pixels.\");\n\t}\n\n\treturn frames;\n}\n\nfunction readNativeCompositedDeltaFrames(\n\tstream: Uint32Array,\n\tcanvasPixels: number,\n): NativeCompositedFrame[] {\n\tif (stream.length < COMPOSITED_DELTA_HEADER_LEN) {\n\t\tthrow new Error(\"Native composited delta buffer is too short.\");\n\t}\n\tif (stream[0] !== COMPOSITED_DELTA_MAGIC) {\n\t\tthrow new Error(\"Native composited delta buffer has an invalid header.\");\n\t}\n\tif (stream[1] !== COMPOSITED_DELTA_VERSION) {\n\t\tthrow new Error(\"Unsupported native composited delta buffer version.\");\n\t}\n\tconst frameCount = stream[2] ?? 0;\n\tconst encodedCanvasPixels = stream[3] ?? 0;\n\tif (encodedCanvasPixels !== canvasPixels) {\n\t\tthrow new Error(\"Native composited delta canvas size mismatch.\");\n\t}\n\n\tconst tableEnd =\n\t\tCOMPOSITED_DELTA_HEADER_LEN + frameCount * COMPOSITED_DELTA_ENTRY_LEN;\n\tif (tableEnd > stream.length) {\n\t\tthrow new Error(\"Native composited delta frame table is truncated.\");\n\t}\n\n\tconst frames: NativeCompositedFrame[] = [];\n\tfor (let i = 0; i < frameCount; i++) {\n\t\tconst entry = COMPOSITED_DELTA_HEADER_LEN + i * COMPOSITED_DELTA_ENTRY_LEN;\n\t\tconst frameIndex = stream[entry] ?? 0;\n\t\tconst fullStart = stream[entry + 1] ?? 0;\n\t\tconst fullLength = stream[entry + 2] ?? 0;\n\t\tconst changedX = stream[entry + 3] ?? 0;\n\t\tconst changedY = stream[entry + 4] ?? 0;\n\t\tconst changedWidth = stream[entry + 5] ?? 0;\n\t\tconst changedHeight = stream[entry + 6] ?? 0;\n\t\tconst deltaStart = stream[entry + 7] ?? 0;\n\t\tconst deltaLength = stream[entry + 8] ?? 0;\n\n\t\tif (fullLength !== canvasPixels || fullStart + fullLength > stream.length) {\n\t\t\tthrow new Error(\"Native composited delta full frame is invalid.\");\n\t\t}\n\t\tif (deltaStart + deltaLength > stream.length) {\n\t\t\tthrow new Error(\"Native composited delta pixels are invalid.\");\n\t\t}\n\t\tif (deltaLength !== changedWidth * changedHeight) {\n\t\t\tthrow new Error(\"Native composited delta rectangle is invalid.\");\n\t\t}\n\n\t\tframes.push({\n\t\t\tindex: frameIndex,\n\t\t\tpixels: stream.subarray(fullStart, fullStart + fullLength),\n\t\t\tchangedRect:\n\t\t\t\tdeltaLength > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tx: changedX,\n\t\t\t\t\t\t\ty: changedY,\n\t\t\t\t\t\t\twidth: changedWidth,\n\t\t\t\t\t\t\theight: changedHeight,\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\tchangedPixels:\n\t\t\t\tdeltaLength > 0\n\t\t\t\t\t? stream.subarray(deltaStart, deltaStart + deltaLength)\n\t\t\t\t\t: undefined,\n\t\t});\n\t}\n\n\treturn frames;\n}\n\nfunction createPreparedFramesResult(\n\twidth: number,\n\theight: number,\n\tformat: PreparedFrameFormat,\n\tcomposited: boolean,\n\tframes: PreparedGifFrame[],\n\tbyteLength: number,\n\tmaxBytes: number | null,\n\ttransparentByIndex: Map<number, number | null>,\n\tcore: WasmCoreInstance,\n): PreparedGifFrames {\n\tlet maxIndex = -1;\n\tfor (const frame of frames) {\n\t\tif (frame.index > maxIndex) {\n\t\t\tmaxIndex = frame.index;\n\t\t}\n\t}\n\tconst byIndex = new Array<PreparedGifFrame | undefined>(maxIndex + 1);\n\tfor (const frame of frames) {\n\t\tbyIndex[frame.index] = frame;\n\t}\n\n\tconst copyFrame = (index: number, target: Uint8Array | Uint32Array): void => {\n\t\tconst frame = byIndex[index];\n\t\tif (!frame) {\n\t\t\tthrow new Error(\"Frame index out of range.\");\n\t\t}\n\t\tcopyPreparedFrame(\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframe,\n\t\t\ttransparentByIndex.get(index),\n\t\t\ttarget,\n\t\t);\n\t};\n\tlet disposed = false;\n\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tformat,\n\t\tcomposited,\n\t\tframes,\n\t\tbyteLength,\n\t\tmaxBytes,\n\t\tgetFrame: (index) => byIndex[index],\n\t\tgetFramePixels: (index) => byIndex[index]?.pixels,\n\t\tgetFrameBytes: (index) => {\n\t\t\tconst pixels = byIndex[index]?.pixels;\n\t\t\treturn pixels\n\t\t\t\t? new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength)\n\t\t\t\t: undefined;\n\t\t},\n\t\tcopyFrame,\n\t\tcreatePlayer: (target?: Uint8Array | Uint32Array) =>\n\t\t\tcreatePreparedPlayer(width, height, byIndex, transparentByIndex, target),\n\t\tdispose: () => {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdisposed = true;\n\t\t\tbyIndex.length = 0;\n\t\t\tframes.length = 0;\n\t\t\tcore.free();\n\t\t},\n\t};\n}\n\nfunction createPreparedPlayer(\n\twidth: number,\n\theight: number,\n\tbyIndex: readonly (PreparedGifFrame | undefined)[],\n\ttransparentByIndex: Map<number, number | null>,\n\ttarget?: Uint8Array | Uint32Array,\n): PreparedGifPlayer {\n\tconst target32 = target\n\t\t? getTarget32(target, width, height)\n\t\t: new Uint32Array(width * height);\n\tlet currentIndex = -1;\n\tconst drawFrame = (index: number): Uint32Array => {\n\t\tconst frame = byIndex[index];\n\t\tif (!frame) {\n\t\t\tthrow new Error(\"Frame index out of range.\");\n\t\t}\n\n\t\tconst previousFrame = byIndex[currentIndex];\n\t\tif (currentIndex === index - 1 && previousFrame?.pixels === frame.pixels) {\n\t\t\tcurrentIndex = index;\n\t\t\treturn target32;\n\t\t}\n\n\t\tconst changedPixelCount = frame.changedPixels?.length ?? 0;\n\t\tconst fullPixelCount = frame.pixels?.length ?? target32.length;\n\t\tif (\n\t\t\tframe.changedPixels &&\n\t\t\tframe.changedX !== undefined &&\n\t\t\tframe.changedY !== undefined &&\n\t\t\tframe.changedWidth !== undefined &&\n\t\t\tframe.changedHeight !== undefined &&\n\t\t\tchangedPixelCount <= fullPixelCount >>> 3 &&\n\t\t\tcurrentIndex === index - 1\n\t\t) {\n\t\t\tblitRectPixels(\n\t\t\t\tframe.changedPixels,\n\t\t\t\ttarget32,\n\t\t\t\twidth,\n\t\t\t\tframe.changedX,\n\t\t\t\tframe.changedY,\n\t\t\t\tframe.changedWidth,\n\t\t\t\tframe.changedHeight,\n\t\t\t);\n\t\t} else {\n\t\t\tcopyPreparedFrame32(\n\t\t\t\twidth,\n\t\t\t\tframe,\n\t\t\t\ttransparentByIndex.get(index),\n\t\t\t\ttarget32,\n\t\t\t);\n\t\t}\n\t\tcurrentIndex = index;\n\t\treturn target32;\n\t};\n\n\treturn {\n\t\ttarget: target32,\n\t\tget currentIndex() {\n\t\t\treturn currentIndex;\n\t\t},\n\t\tdrawFrame,\n\t\tnext: () => {\n\t\t\tconst nextIndex = currentIndex + 1;\n\t\t\treturn byIndex[nextIndex] ? drawFrame(nextIndex) : target32;\n\t\t},\n\t\treset: () => {\n\t\t\tcurrentIndex = -1;\n\t\t\ttarget32.fill(0);\n\t\t},\n\t};\n}\n\nfunction copyPreparedFrame(\n\twidth: number,\n\theight: number,\n\tframe: PreparedGifFrame,\n\ttransparentIndex: number | null | undefined,\n\ttarget: Uint8Array | Uint32Array,\n): void {\n\tconst target32 = getTarget32(target, width, height);\n\tcopyPreparedFrame32(width, frame, transparentIndex, target32);\n}\n\nfunction copyPreparedFrame32(\n\twidth: number,\n\tframe: PreparedGifFrame,\n\ttransparentIndex: number | null | undefined,\n\ttarget32: Uint32Array,\n): void {\n\tif (frame.pixels) {\n\t\ttarget32.set(frame.pixels);\n\t\treturn;\n\t}\n\n\tconst indices = frame.indices!;\n\tconst palette = frame.palette!;\n\tconst transparent = transparentIndex ?? 256;\n\tlet src = 0;\n\tlet dst = frame.y * width + frame.x;\n\tconst rowStride = width - frame.width;\n\n\tfor (let y = 0; y < frame.height; y++) {\n\t\tfor (let x = 0; x < frame.width; x++) {\n\t\t\tconst index = indices[src++]!;\n\t\t\tif (index !== transparent) {\n\t\t\t\ttarget32[dst] = palette[index]!;\n\t\t\t}\n\t\t\tdst++;\n\t\t}\n\t\tdst += rowStride;\n\t}\n}\n\nfunction getTarget32(\n\ttarget: Uint8Array | Uint32Array,\n\twidth: number,\n\theight: number,\n): Uint32Array {\n\tconst requiredPixels = width * height;\n\tif (target instanceof Uint32Array) {\n\t\tif (target.length < requiredPixels) {\n\t\t\tthrow new Error(\n\t\t\t\t`Buffer too small: need ${requiredPixels * 4} bytes, got ${\n\t\t\t\t\ttarget.byteLength\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\t\treturn target;\n\t}\n\n\tif (target.byteLength < requiredPixels * 4) {\n\t\tthrow new Error(\n\t\t\t`Buffer too small: need ${requiredPixels * 4} bytes, got ${\n\t\t\t\ttarget.byteLength\n\t\t\t}`,\n\t\t);\n\t}\n\n\treturn new Uint32Array(target.buffer, target.byteOffset, requiredPixels);\n}\n\ntype ChangedRect = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nfunction blitRectPixels(\n\tsource: Uint32Array,\n\ttarget: Uint32Array,\n\ttargetWidth: number,\n\tx: number,\n\ty: number,\n\twidth: number,\n\theight: number,\n): void {\n\tfor (let row = 0; row < height; row++) {\n\t\tconst src = row * width;\n\t\tconst dst = (y + row) * targetWidth + x;\n\t\ttarget.set(source.subarray(src, src + width), dst);\n\t}\n}\n\nfunction hashPixels(pixels: Uint32Array): number {\n\tlet hash = 2166136261;\n\tfor (let i = 0; i < pixels.length; i++) {\n\t\thash ^= pixels[i]!;\n\t\thash = Math.imul(hash, 16777619);\n\t}\n\treturn hash >>> 0;\n}\n\nfunction findMatchingPixels(\n\tpixels: Uint32Array,\n\tbucket: Uint32Array[] | undefined,\n): Uint32Array | null {\n\tif (!bucket) {\n\t\treturn null;\n\t}\n\n\tfor (const candidate of bucket) {\n\t\tif (candidate.length !== pixels.length) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (pixelsEqual(candidate, pixels)) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction pixelsEqual(a: Uint32Array, b: Uint32Array): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction createRequestedFrameFlags(\n\tframeIndices: readonly number[],\n\tframeCount: number,\n): Uint8Array {\n\tif (frameIndices.length === 0) {\n\t\treturn new Uint8Array(0);\n\t}\n\n\tconst maxFrame = Math.max(...frameIndices);\n\tif (maxFrame >= frameCount) {\n\t\tthrow new Error(\"Frame index out of range.\");\n\t}\n\n\tconst requestedFrames = new Uint8Array(maxFrame + 1);\n\tfor (const frameIndex of frameIndices) {\n\t\trequestedFrames[frameIndex] = 1;\n\t}\n\treturn requestedFrames;\n}\n\nfunction normalizeFrameIndices(\n\tframeIndices: readonly number[] | undefined,\n\tframeCount: number,\n): number[] {\n\tif (!frameIndices) {\n\t\treturn Array.from({ length: frameCount }, (_, index) => index);\n\t}\n\n\tconst seen = new Set<number>();\n\tconst normalized: number[] = [];\n\tfor (const frameIndex of frameIndices) {\n\t\tif (!Number.isInteger(frameIndex)) {\n\t\t\tthrow new Error(\"Frame index out of range.\");\n\t\t}\n\t\tconst index = frameIndex | 0;\n\t\tif (index < 0 || index >= frameCount) {\n\t\t\tthrow new Error(\"Frame index out of range.\");\n\t\t}\n\t\tif (!seen.has(index)) {\n\t\t\tseen.add(index);\n\t\t\tnormalized.push(index);\n\t\t}\n\t}\n\treturn normalized;\n}\n\nfunction enforceByteBudget(byteLength: number, maxBytes?: number): void {\n\tif (maxBytes !== undefined && byteLength > maxBytes) {\n\t\tthrow new Error(\n\t\t\t`Prepared frame cache exceeds maxBytes (${byteLength} > ${maxBytes}).`,\n\t\t);\n\t}\n}\n\nfunction toUint8Array(value: Uint8Array | number[]): Uint8Array {\n\treturn value instanceof Uint8Array ? value : Uint8Array.from(value);\n}\n\nfunction toUint32Array(value: Uint32Array | number[]): Uint32Array {\n\treturn value instanceof Uint32Array ? value : Uint32Array.from(value);\n}\n","import type { GifBinary } from \"./types\";\n\nconst GIF_EXTENSION = 0x21;\nconst GIF_IMAGE = 0x2c;\nconst GIF_TRAILER = 0x3b;\nconst GRAPHIC_CONTROL_LABEL = 0xf9;\nconst APPLICATION_LABEL = 0xff;\nconst PLAIN_TEXT_LABEL = 0x01;\n\nconst NETSCAPE_APPLICATION_ID = [\n\t0x4e, 0x45, 0x54, 0x53, 0x43, 0x41, 0x50, 0x45, 0x32, 0x2e, 0x30,\n] as const;\nconst ANIMEXTS_APPLICATION_ID = [\n\t0x41, 0x4e, 0x49, 0x4d, 0x45, 0x58, 0x54, 0x53, 0x31, 0x2e, 0x30,\n] as const;\n\ninterface CompiledFrameLayout {\n\treadonly imageOffset: number;\n\treadonly imageEndOffset: number;\n\treadonly controlOffset: number | null;\n\treadonly controlEndOffset: number | null;\n\treadonly delayOffset: number | null;\n\treadonly delay: number;\n\treadonly disposal: number;\n\treadonly hasTransparency: boolean;\n\treadonly isFullCanvas: boolean;\n}\n\ninterface CompiledLayout {\n\treadonly source: Uint8Array;\n\treadonly width: number;\n\treadonly height: number;\n\treadonly frames: readonly CompiledFrameLayout[];\n\treadonly loopCount: number | null;\n\treadonly loopCountOffsets: readonly number[];\n\treadonly extensionInsertionOffset: number;\n\treadonly isGif87a: boolean;\n\treadonly frameReorderError: string | null;\n}\n\ntype ByteInsertions = Map<number, Uint8Array[]>;\n\n/**\n * A delay in GIF centiseconds, or one delay for every image frame.\n */\nexport type GifFrameDelays = number | ArrayLike<number>;\n\n/**\n * A parsed GIF whose compressed image data and unrelated metadata can be\n * copied without decoding or re-encoding pixels.\n *\n * Instances are immutable. Transformations share the parsed source layout;\n * bytes are copied only when `toUint8Array()` is called.\n */\nexport class CompiledGif {\n\treadonly width: number;\n\treadonly height: number;\n\treadonly frameCount: number;\n\treadonly delays: readonly number[];\n\treadonly loopCount: number | null;\n\treadonly canReorderFrames: boolean;\n\n\tprivate readonly layout: CompiledLayout;\n\tprivate readonly requestedDelays: readonly number[] | null;\n\tprivate readonly requestedLoopCount: number | null;\n\tprivate readonly hasLoopOverride: boolean;\n\n\tprivate constructor(\n\t\tlayout: CompiledLayout,\n\t\trequestedDelays: readonly number[] | null = null,\n\t\trequestedLoopCount: number | null = null,\n\t\thasLoopOverride = false,\n\t) {\n\t\tthis.layout = layout;\n\t\tthis.width = layout.width;\n\t\tthis.height = layout.height;\n\t\tthis.frameCount = layout.frames.length;\n\t\tthis.requestedDelays = requestedDelays;\n\t\tthis.requestedLoopCount = requestedLoopCount;\n\t\tthis.hasLoopOverride = hasLoopOverride;\n\t\tthis.delays =\n\t\t\trequestedDelays ??\n\t\t\tObject.freeze(layout.frames.map((frame) => frame.delay));\n\t\tthis.loopCount = hasLoopOverride ? requestedLoopCount : layout.loopCount;\n\t\tthis.canReorderFrames = layout.frameReorderError === null;\n\t}\n\n\t/** Parse a GIF into an immutable compiled representation. */\n\tstatic from(input: GifBinary): CompiledGif {\n\t\treturn new CompiledGif(parseGif(input));\n\t}\n\n\t/**\n\t * Return a compiled view with new per-frame delays.\n\t *\n\t * A scalar applies to every frame. An array-like value must have exactly\n\t * one entry per image frame. Values are integer centiseconds in\n\t * the GIF range 0...65535.\n\t */\n\twithDelays(delays: GifFrameDelays): CompiledGif {\n\t\tconst normalized = normalizeDelays(delays, this.frameCount);\n\t\treturn new CompiledGif(\n\t\t\tthis.layout,\n\t\t\tnormalized,\n\t\t\tthis.requestedLoopCount,\n\t\t\tthis.hasLoopOverride,\n\t\t);\n\t}\n\n\t/**\n\t * Return a compiled view with a Netscape loop count.\n\t *\n\t * `0` means loop forever. If the source has no Netscape extension, a\n\t * canonical extension is inserted without touching image data.\n\t */\n\twithLoop(loopCount: number): CompiledGif {\n\t\tassertUint16(loopCount, \"Loop count\");\n\t\treturn new CompiledGif(this.layout, this.requestedDelays, loopCount, true);\n\t}\n\n\t/**\n\t * Reorder or duplicate structurally independent frames without decoding.\n\t *\n\t * This strict fast path accepts full-canvas frames that are either all\n\t * opaque or all restore a canonical base with disposal 2/3. It throws for\n\t * GIFs whose frame composition could depend on the original order.\n\t */\n\treorderFrames(order: ArrayLike<number>): Uint8Array {\n\t\tconst normalizedOrder = normalizeFrameOrder(order, this.frameCount);\n\t\tif (this.requestedDelays !== null || this.hasLoopOverride) {\n\t\t\treturn compileGif(this.toUint8Array()).reorderFrames(normalizedOrder);\n\t\t}\n\t\tif (this.layout.frameReorderError !== null) {\n\t\t\tthrow new Error(\n\t\t\t\t`GIF frames cannot be reordered pixel-perfectly: ${this.layout.frameReorderError}`,\n\t\t\t);\n\t\t}\n\t\treturn materializeFrameOrder(this.layout, normalizedOrder);\n\t}\n\n\t/** Reverse all frames through the proven-safe structural fast path. */\n\treverseFrames(): Uint8Array {\n\t\treturn this.reorderFrames(\n\t\t\tArray.from(\n\t\t\t\t{ length: this.frameCount },\n\t\t\t\t(_, index) => this.frameCount - index - 1,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * Append the complete reverse sequence, matching MakeEmoji's boomerang\n\t * semantics: `[A, B, C, C, B, A]`.\n\t */\n\tboomerangFrames(): Uint8Array {\n\t\treturn this.reorderFrames(\n\t\t\tArray.from({ length: this.frameCount * 2 }, (_, index) =>\n\t\t\t\tindex < this.frameCount ? index : this.frameCount * 2 - index - 1,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * Materialize the transformed GIF.\n\t *\n\t * Existing delays and loop counts are patched in place. A frame without a\n\t * graphic-control extension receives the minimal eight-byte extension.\n\t */\n\ttoUint8Array(): Uint8Array {\n\t\tconst { layout } = this;\n\t\tif (this.requestedDelays === null && !this.hasLoopOverride) {\n\t\t\treturn layout.source.slice();\n\t\t}\n\n\t\tconst patches = new Map<number, number>();\n\t\tconst insertions: ByteInsertions = new Map();\n\t\tlet insertedExtension = false;\n\n\t\tif (this.hasLoopOverride) {\n\t\t\tconst loopCount = this.requestedLoopCount!;\n\t\t\tif (layout.loopCountOffsets.length === 0) {\n\t\t\t\taddInsertion(\n\t\t\t\t\tinsertions,\n\t\t\t\t\tlayout.extensionInsertionOffset,\n\t\t\t\t\tcreateNetscapeLoopExtension(loopCount),\n\t\t\t\t);\n\t\t\t\tinsertedExtension = true;\n\t\t\t} else {\n\t\t\t\tfor (const offset of layout.loopCountOffsets) {\n\t\t\t\t\tpatchUint16(patches, offset, loopCount);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.requestedDelays !== null) {\n\t\t\tfor (let index = 0; index < layout.frames.length; index++) {\n\t\t\t\tconst frame = layout.frames[index]!;\n\t\t\t\tconst delay = this.requestedDelays[index]!;\n\t\t\t\tif (frame.delayOffset === null) {\n\t\t\t\t\taddInsertion(\n\t\t\t\t\t\tinsertions,\n\t\t\t\t\t\tframe.imageOffset,\n\t\t\t\t\t\tcreateGraphicControlExtension(delay),\n\t\t\t\t\t);\n\t\t\t\t\tinsertedExtension = true;\n\t\t\t\t} else {\n\t\t\t\t\tpatchUint16(patches, frame.delayOffset, delay);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (insertedExtension && layout.isGif87a) {\n\t\t\t// A graphic-control or application extension requires GIF89a.\n\t\t\tpatches.set(4, 0x39);\n\t\t}\n\n\t\treturn materialize(layout.source, patches, insertions);\n\t}\n}\n\n/**\n * Parse a GIF once so metadata-only transformations can reuse its original\n * palettes, image descriptors, extensions, and compressed LZW sub-blocks.\n */\nexport function compileGif(input: GifBinary): CompiledGif {\n\treturn CompiledGif.from(input);\n}\n\n/**\n * Rewrite frame delays without decoding or recompressing a single pixel.\n */\nexport function retimeGifPixelPerfect(\n\tinput: GifBinary,\n\tdelays: GifFrameDelays,\n): Uint8Array {\n\treturn compileGif(input).withDelays(delays).toUint8Array();\n}\n\n/** Reverse structurally independent GIF frames without touching pixel data. */\nexport function reverseGifPixelPerfect(input: GifBinary): Uint8Array {\n\treturn compileGif(input).reverseFrames();\n}\n\n/** Create a MakeEmoji-style forward-then-reverse GIF without pixel work. */\nexport function boomerangGifPixelPerfect(input: GifBinary): Uint8Array {\n\treturn compileGif(input).boomerangFrames();\n}\n\nfunction parseGif(input: GifBinary): CompiledLayout {\n\tconst source = new Uint8Array(input.length);\n\tsource.set(input as ArrayLike<number>);\n\tconst length = source.length;\n\tif (length < 13) {\n\t\tthrow new Error(\"Unexpected end of GIF data.\");\n\t}\n\n\tconst isGif87a =\n\t\tsource[0] === 0x47 &&\n\t\tsource[1] === 0x49 &&\n\t\tsource[2] === 0x46 &&\n\t\tsource[3] === 0x38 &&\n\t\tsource[4] === 0x37 &&\n\t\tsource[5] === 0x61;\n\tconst isGif89a =\n\t\tsource[0] === 0x47 &&\n\t\tsource[1] === 0x49 &&\n\t\tsource[2] === 0x46 &&\n\t\tsource[3] === 0x38 &&\n\t\tsource[4] === 0x39 &&\n\t\tsource[5] === 0x61;\n\tif (!isGif87a && !isGif89a) {\n\t\tthrow new Error(\"Invalid GIF 87a/89a header.\");\n\t}\n\n\tconst width = readUint16(source, 6);\n\tconst height = readUint16(source, 8);\n\tconst packed = source[10]!;\n\tconst globalColorTableLength =\n\t\tpacked & 0x80 ? 3 * (1 << ((packed & 0x07) + 1)) : 0;\n\tlet position = 13 + globalColorTableLength;\n\tensureRange(source, position, 0);\n\tconst extensionInsertionOffset = position;\n\n\tconst frames: CompiledFrameLayout[] = [];\n\tconst loopCountOffsets: number[] = [];\n\tlet loopCount: number | null = null;\n\tlet pendingDelayOffset: number | null = null;\n\tlet pendingDelay = 0;\n\tlet pendingControlOffset: number | null = null;\n\tlet pendingControlEndOffset: number | null = null;\n\tlet pendingDisposal = 0;\n\tlet pendingHasTransparency = false;\n\tlet hasPlainText = false;\n\tlet hasDuplicateControl = false;\n\tlet sawTrailer = false;\n\n\twhile (position < length) {\n\t\tconst blockOffset = position;\n\t\tconst blockType = source[position++]!;\n\n\t\tif (blockType === GIF_TRAILER) {\n\t\t\tsawTrailer = true;\n\t\t\tbreak;\n\t\t}\n\n\t\tif (blockType === GIF_EXTENSION) {\n\t\t\tensureRange(source, position, 1);\n\t\t\tconst label = source[position++]!;\n\n\t\t\tif (label === GRAPHIC_CONTROL_LABEL) {\n\t\t\t\tensureRange(source, position, 6);\n\t\t\t\tif (source[position] !== 0x04 || source[position + 5] !== 0x00) {\n\t\t\t\t\tthrow new Error(\"Invalid graphics extension block.\");\n\t\t\t\t}\n\t\t\t\tif (pendingControlOffset !== null) {\n\t\t\t\t\thasDuplicateControl = true;\n\t\t\t\t}\n\t\t\t\tpendingControlOffset = blockOffset;\n\t\t\t\tpendingControlEndOffset = position + 6;\n\t\t\t\tpendingDelayOffset = position + 2;\n\t\t\t\tpendingDelay = readUint16(source, pendingDelayOffset);\n\t\t\t\tconst controlPacked = source[position + 1]!;\n\t\t\t\tpendingDisposal = (controlPacked >>> 2) & 0x07;\n\t\t\t\tpendingHasTransparency = (controlPacked & 0x01) !== 0;\n\t\t\t\tposition += 6;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (label === APPLICATION_LABEL) {\n\t\t\t\tconst app = readNetscapeLoopExtension(source, position);\n\t\t\t\tif (app !== null) {\n\t\t\t\t\tloopCountOffsets.push(app.loopCountOffset);\n\t\t\t\t\tloopCount = readUint16(source, app.loopCountOffset);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tposition = skipSubBlocks(source, position);\n\t\t\tif (label === PLAIN_TEXT_LABEL) {\n\t\t\t\t// A GCE scopes the next graphic-rendering block. Plain text is\n\t\t\t\t// such a block, even though it is not one of our image frames.\n\t\t\t\thasPlainText = true;\n\t\t\t\tpendingControlOffset = null;\n\t\t\t\tpendingControlEndOffset = null;\n\t\t\t\tpendingDelayOffset = null;\n\t\t\t\tpendingDelay = 0;\n\t\t\t\tpendingDisposal = 0;\n\t\t\t\tpendingHasTransparency = false;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (blockType === GIF_IMAGE) {\n\t\t\tensureRange(source, position, 9);\n\t\t\tconst imagePacked = source[position + 8]!;\n\t\t\tposition += 9;\n\t\t\tif (imagePacked & 0x80) {\n\t\t\t\tconst localColorTableLength = 3 * (1 << ((imagePacked & 0x07) + 1));\n\t\t\t\tensureRange(source, position, localColorTableLength);\n\t\t\t\tposition += localColorTableLength;\n\t\t\t}\n\n\t\t\t// LZW minimum code size followed by data sub-blocks.\n\t\t\tensureRange(source, position, 1);\n\t\t\tposition++;\n\t\t\tposition = skipSubBlocks(source, position);\n\t\t\tconst imageEndOffset = position;\n\t\t\tconst x = readUint16(source, blockOffset + 1);\n\t\t\tconst y = readUint16(source, blockOffset + 3);\n\t\t\tconst frameWidth = readUint16(source, blockOffset + 5);\n\t\t\tconst frameHeight = readUint16(source, blockOffset + 7);\n\t\t\tframes.push({\n\t\t\t\timageOffset: blockOffset,\n\t\t\t\timageEndOffset,\n\t\t\t\tcontrolOffset: pendingControlOffset,\n\t\t\t\tcontrolEndOffset: pendingControlEndOffset,\n\t\t\t\tdelayOffset: pendingDelayOffset,\n\t\t\t\tdelay: pendingDelay,\n\t\t\t\tdisposal: pendingDisposal,\n\t\t\t\thasTransparency: pendingHasTransparency,\n\t\t\t\tisFullCanvas:\n\t\t\t\t\tx === 0 &&\n\t\t\t\t\ty === 0 &&\n\t\t\t\t\tframeWidth === width &&\n\t\t\t\t\tframeHeight === height,\n\t\t\t});\n\t\t\tpendingControlOffset = null;\n\t\t\tpendingControlEndOffset = null;\n\t\t\tpendingDelayOffset = null;\n\t\t\tpendingDelay = 0;\n\t\t\tpendingDisposal = 0;\n\t\t\tpendingHasTransparency = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Unknown GIF block at byte ${blockOffset}: 0x${blockType.toString(16)}`,\n\t\t);\n\t}\n\tif (!sawTrailer) {\n\t\tthrow new Error(\"GIF data is missing its trailer.\");\n\t}\n\n\tconst frameReorderError = getFrameReorderError(\n\t\tsource,\n\t\tframes,\n\t\thasPlainText,\n\t\thasDuplicateControl,\n\t);\n\n\treturn {\n\t\tsource,\n\t\twidth,\n\t\theight,\n\t\tframes,\n\t\tloopCount,\n\t\tloopCountOffsets,\n\t\textensionInsertionOffset,\n\t\tisGif87a,\n\t\tframeReorderError,\n\t};\n}\n\nfunction readNetscapeLoopExtension(\n\tsource: Uint8Array,\n\tposition: number,\n): { loopCountOffset: number } | null {\n\tif (source[position] !== NETSCAPE_APPLICATION_ID.length) {\n\t\treturn null;\n\t}\n\tensureRange(source, position, 12);\n\tconst matchesApplicationId = (\n\t\tapplicationId: readonly number[],\n\t) =>\n\t\tapplicationId.every(\n\t\t\t(byte, index) => source[position + 1 + index] === byte,\n\t\t);\n\tif (\n\t\t!matchesApplicationId(NETSCAPE_APPLICATION_ID) &&\n\t\t!matchesApplicationId(ANIMEXTS_APPLICATION_ID)\n\t) {\n\t\treturn null;\n\t}\n\n\tconst subBlockOffset = position + 12;\n\tensureRange(source, subBlockOffset, 5);\n\tif (\n\t\tsource[subBlockOffset] !== 0x03 ||\n\t\tsource[subBlockOffset + 1] !== 0x01 ||\n\t\tsource[subBlockOffset + 4] !== 0x00\n\t) {\n\t\treturn null;\n\t}\n\treturn { loopCountOffset: subBlockOffset + 2 };\n}\n\nfunction skipSubBlocks(source: Uint8Array, position: number): number {\n\twhile (true) {\n\t\tensureRange(source, position, 1);\n\t\tconst size = source[position++]!;\n\t\tif (size === 0) {\n\t\t\treturn position;\n\t\t}\n\t\tensureRange(source, position, size);\n\t\tposition += size;\n\t}\n}\n\nfunction ensureRange(\n\tsource: Uint8Array,\n\tposition: number,\n\tbyteLength: number,\n): void {\n\tif (position < 0 || byteLength < 0 || position > source.length - byteLength) {\n\t\tthrow new Error(\"Unexpected end of GIF data.\");\n\t}\n}\n\nfunction readUint16(source: Uint8Array, offset: number): number {\n\tensureRange(source, offset, 2);\n\treturn (source[offset]! | (source[offset + 1]! << 8)) >>> 0;\n}\n\nfunction assertUint16(value: number, label: string): void {\n\tif (!Number.isInteger(value) || value < 0 || value > 0xffff) {\n\t\tthrow new RangeError(`${label} must be an integer from 0 to 65535.`);\n\t}\n}\n\nfunction normalizeDelays(\n\tdelays: GifFrameDelays,\n\tframeCount: number,\n): readonly number[] {\n\tif (typeof delays === \"number\") {\n\t\tassertUint16(delays, \"Frame delay\");\n\t\treturn Object.freeze(Array.from({ length: frameCount }, () => delays));\n\t}\n\tif (delays.length !== frameCount) {\n\t\tthrow new RangeError(\n\t\t\t`Expected ${frameCount} frame delays, received ${delays.length}.`,\n\t\t);\n\t}\n\tconst normalized = Array.from(delays);\n\tfor (const delay of normalized) {\n\t\tassertUint16(delay, \"Frame delay\");\n\t}\n\treturn Object.freeze(normalized);\n}\n\nfunction normalizeFrameOrder(\n\torder: ArrayLike<number>,\n\tframeCount: number,\n): readonly number[] {\n\tif (!Number.isInteger(order.length) || order.length < 1) {\n\t\tthrow new RangeError(\"Frame order must contain at least one frame.\");\n\t}\n\tconst normalized = Array.from(order);\n\tfor (const frameIndex of normalized) {\n\t\tif (\n\t\t\t!Number.isInteger(frameIndex) ||\n\t\t\tframeIndex < 0 ||\n\t\t\tframeIndex >= frameCount\n\t\t) {\n\t\t\tthrow new RangeError(\n\t\t\t\t`Frame index ${frameIndex} is outside 0...${Math.max(0, frameCount - 1)}.`,\n\t\t\t);\n\t\t}\n\t}\n\treturn normalized;\n}\n\nfunction getFrameReorderError(\n\tsource: Uint8Array,\n\tframes: readonly CompiledFrameLayout[],\n\thasPlainText: boolean,\n\thasDuplicateControl: boolean,\n): string | null {\n\tif (frames.length === 0) {\n\t\treturn \"the GIF has no image frames\";\n\t}\n\tif (hasPlainText) {\n\t\treturn \"Plain Text is a rendering block and cannot be moved safely\";\n\t}\n\tif (hasDuplicateControl) {\n\t\treturn \"multiple graphic controls target one rendering block\";\n\t}\n\n\tfor (let index = 0; index < frames.length; index++) {\n\t\tconst frame = frames[index]!;\n\t\tif (frame.controlOffset === null || frame.controlEndOffset === null) {\n\t\t\treturn `frame ${index} has no graphic control block`;\n\t\t}\n\t\tif (frame.controlEndOffset !== frame.imageOffset) {\n\t\t\treturn `frame ${index} has extensions between its control and image`;\n\t\t}\n\t\tif (!frame.isFullCanvas) {\n\t\t\treturn `frame ${index} is not an exact full-canvas image`;\n\t\t}\n\t\tif (frame.disposal > 3) {\n\t\t\treturn `frame ${index} uses reserved disposal ${frame.disposal}`;\n\t\t}\n\t\tif (\n\t\t\tindex > 0 &&\n\t\t\tframes[index - 1]!.imageEndOffset !== frame.controlOffset\n\t\t) {\n\t\t\treturn `frame ${index} is separated by anchored metadata`;\n\t\t}\n\t}\n\n\tconst lastFrame = frames[frames.length - 1]!;\n\tif (source[lastFrame.imageEndOffset] !== GIF_TRAILER) {\n\t\treturn \"metadata follows the last image before the trailer\";\n\t}\n\n\tconst everyFrameOpaque = frames.every((frame) => !frame.hasTransparency);\n\tconst everyFrameRestoresBase = frames.every(\n\t\t(frame) => frame.disposal === 2 || frame.disposal === 3,\n\t);\n\tif (!everyFrameOpaque && !everyFrameRestoresBase) {\n\t\treturn \"transparent frames depend on the original canvas order\";\n\t}\n\treturn null;\n}\n\nfunction createGraphicControlExtension(delay: number): Uint8Array {\n\treturn Uint8Array.of(\n\t\tGIF_EXTENSION,\n\t\tGRAPHIC_CONTROL_LABEL,\n\t\t0x04,\n\t\t0x00,\n\t\tdelay & 0xff,\n\t\t(delay >>> 8) & 0xff,\n\t\t0x00,\n\t\t0x00,\n\t);\n}\n\nfunction createNetscapeLoopExtension(loopCount: number): Uint8Array {\n\treturn Uint8Array.of(\n\t\tGIF_EXTENSION,\n\t\tAPPLICATION_LABEL,\n\t\t0x0b,\n\t\t...NETSCAPE_APPLICATION_ID,\n\t\t0x03,\n\t\t0x01,\n\t\tloopCount & 0xff,\n\t\t(loopCount >>> 8) & 0xff,\n\t\t0x00,\n\t);\n}\n\nfunction patchUint16(\n\tpatches: Map<number, number>,\n\toffset: number,\n\tvalue: number,\n): void {\n\tpatches.set(offset, value & 0xff);\n\tpatches.set(offset + 1, (value >>> 8) & 0xff);\n}\n\nfunction addInsertion(\n\tinsertions: ByteInsertions,\n\toffset: number,\n\tbytes: Uint8Array,\n): void {\n\tconst existing = insertions.get(offset);\n\tif (existing) {\n\t\texisting.push(bytes);\n\t} else {\n\t\tinsertions.set(offset, [bytes]);\n\t}\n}\n\nfunction materialize(\n\tsource: Uint8Array,\n\tpatches: ReadonlyMap<number, number>,\n\tinsertions: ByteInsertions,\n): Uint8Array {\n\tconst patchedSource = source.slice();\n\tfor (const [offset, byte] of patches) {\n\t\tpatchedSource[offset] = byte;\n\t}\n\tif (insertions.size === 0) {\n\t\treturn patchedSource;\n\t}\n\n\tlet outputLength = source.length;\n\tfor (const groups of insertions.values()) {\n\t\tfor (const bytes of groups) {\n\t\t\toutputLength += bytes.length;\n\t\t}\n\t}\n\n\tconst output = new Uint8Array(outputLength);\n\tlet outputPosition = 0;\n\tlet sourcePosition = 0;\n\tconst insertionOffsets = [...insertions.keys()].sort(\n\t\t(left, right) => left - right,\n\t);\n\tfor (const insertionOffset of insertionOffsets) {\n\t\tconst sourceSpan = patchedSource.subarray(sourcePosition, insertionOffset);\n\t\toutput.set(sourceSpan, outputPosition);\n\t\toutputPosition += sourceSpan.length;\n\t\tfor (const bytes of insertions.get(insertionOffset)!) {\n\t\t\toutput.set(bytes, outputPosition);\n\t\t\toutputPosition += bytes.length;\n\t\t}\n\t\tsourcePosition = insertionOffset;\n\t}\n\toutput.set(patchedSource.subarray(sourcePosition), outputPosition);\n\treturn output;\n}\n\nfunction materializeFrameOrder(\n\tlayout: CompiledLayout,\n\torder: readonly number[],\n): Uint8Array {\n\tconst firstFrame = layout.frames[0]!;\n\tconst lastFrame = layout.frames[layout.frames.length - 1]!;\n\tconst prefixEnd = firstFrame.controlOffset!;\n\tconst suffixStart = lastFrame.imageEndOffset;\n\tlet outputLength = prefixEnd + (layout.source.length - suffixStart);\n\tfor (const frameIndex of order) {\n\t\tconst frame = layout.frames[frameIndex]!;\n\t\toutputLength += frame.imageEndOffset - frame.controlOffset!;\n\t\tif (!Number.isSafeInteger(outputLength)) {\n\t\t\tthrow new RangeError(\"Reordered GIF would be too large.\");\n\t\t}\n\t}\n\n\tconst output = new Uint8Array(outputLength);\n\tlet outputPosition = 0;\n\toutput.set(layout.source.subarray(0, prefixEnd), outputPosition);\n\toutputPosition += prefixEnd;\n\tfor (const frameIndex of order) {\n\t\tconst frame = layout.frames[frameIndex]!;\n\t\tconst atom = layout.source.subarray(\n\t\t\tframe.controlOffset!,\n\t\t\tframe.imageEndOffset,\n\t\t);\n\t\toutput.set(atom, outputPosition);\n\t\toutputPosition += atom.length;\n\t}\n\toutput.set(layout.source.subarray(suffixStart), outputPosition);\n\treturn output;\n}\n","import {\n\tencodeIndexedGifFrames,\n\tencodeRgbaGifFrames,\n\tGifWriter,\n} from \"./encoder/writer\";\nimport { GifReader } from \"./decoder/reader\";\nimport {\n\tcleanupWasm as cleanupWasmRuntime,\n\tgetWasmCoreModule,\n\tgetWasmStatus,\n\tinitializeGlobalWasm,\n\tinitializeWasmModule as initializeStaticWasmModule,\n\tsetWasmCoreModule as setWasmCoreModuleRuntime,\n} from \"./wasm/runtime\";\nimport { createWasmCoreDecodeBackend } from \"./wasm/coreBackend\";\nimport {\n\tgetFastBackendStatus,\n\tgetNativeAddonStatus,\n\tprepareWasmOneOffApi,\n\tsetNativeAddonModule,\n} from \"./native/runtime\";\nimport {\n\tdecodeGifFramesRgba,\n\tremuxGifPixelPerfect,\n\treencodeGifPixelPerfect,\n} from \"./native/oneOff\";\nimport {\n\tboomerangGifPixelPerfect,\n\tCompiledGif,\n\tcompileGif,\n\treverseGifPixelPerfect,\n\tretimeGifPixelPerfect,\n} from \"./compiled\";\n\nconst PUBLIC_API_PRIMER = new Uint8Array([\n\t71, 73, 70, 56, 57, 97, 2, 0, 2, 0, 128, 0, 0, 0, 0, 0, 255, 255, 255,\n\t44, 0, 0, 0, 0, 2, 0, 2, 0, 0, 2, 3, 68, 24, 20, 0, 59,\n]);\n\nconst preparePublicFastPath = () => {\n\tconst generatedPrimer =\n\t\tgetWasmCoreModule()?.remux_hot_path_primer?.();\n\tconst representativePrimer = generatedPrimer\n\t\t? new Uint8Array(generatedPrimer)\n\t\t: undefined;\n\tfor (let iteration = 0; iteration < 64; iteration++) {\n\t\treencodeGifPixelPerfect(PUBLIC_API_PRIMER);\n\t\tremuxGifPixelPerfect(PUBLIC_API_PRIMER);\n\t\tif (representativePrimer) {\n\t\t\tremuxGifPixelPerfect(representativePrimer);\n\t\t}\n\t}\n};\n\nconst bindPublicWasmApi = () => {\n\tprepareWasmOneOffApi(getWasmCoreModule());\n\tbrowserExports.remuxGifPixelPerfect = remuxGifPixelPerfect;\n};\n\nconst initializeWasmGlobally = async (moduleOrPath?: unknown): Promise<void> => {\n\tawait initializeGlobalWasm(moduleOrPath);\n\tbindPublicWasmApi();\n\tpreparePublicFastPath();\n};\n\nconst initializeWasmModule = async (\n\tmodule: Parameters<typeof initializeStaticWasmModule>[0],\n\tmoduleOrPath?: unknown,\n): Promise<void> => {\n\tawait initializeStaticWasmModule(module, moduleOrPath);\n\tbindPublicWasmApi();\n\tpreparePublicFastPath();\n};\n\nconst setWasmCoreModule = (\n\tmodule: Parameters<typeof setWasmCoreModuleRuntime>[0],\n): void => {\n\tsetWasmCoreModuleRuntime(module);\n\tbindPublicWasmApi();\n};\n\nconst cleanupWasm = (): void => {\n\tcleanupWasmRuntime();\n\tbindPublicWasmApi();\n};\n\nconst installWasmCoreBackend = () => {\n\tconst backend = createWasmCoreDecodeBackend();\n\tGifReader.setDecodeBackend(backend);\n\treturn GifReader.getDecodeBackendStatus();\n};\n\nexport {\n\tencodeIndexedGifFrames,\n\tencodeRgbaGifFrames,\n\tGifWriter,\n\tGifReader,\n\tinitializeWasmGlobally,\n\tinitializeWasmModule,\n\tgetWasmStatus,\n\tcleanupWasm,\n\tsetWasmCoreModule,\n\tcreateWasmCoreDecodeBackend,\n\tinstallWasmCoreBackend,\n\tsetNativeAddonModule,\n\tgetNativeAddonStatus,\n\tgetFastBackendStatus,\n\tdecodeGifFramesRgba,\n\tremuxGifPixelPerfect,\n\treencodeGifPixelPerfect,\n\tCompiledGif,\n\tcompileGif,\n\treverseGifPixelPerfect,\n\tboomerangGifPixelPerfect,\n\tretimeGifPixelPerfect,\n};\n\nexport type {\n\tEncodeIndexedGifFramesBackend,\n\tEncodeIndexedGifFramesOptions,\n\tEncodeRgbaGifFramesOptions,\n\tGifCompressionMode,\n\tGifFrameDelay,\n\tIndexedGifFrame,\n\tIndexedGifFrames,\n\tRgbaGifFrame,\n\tRgbaGifFrames,\n} from \"./encoder/writer\";\n\nexport type {\n\tNativeAddonModule,\n\tNativeDecodedRgbaFrames,\n} from \"./native/runtime\";\n\nexport type { WasmWebModule } from \"./wasm/runtime\";\nexport type { GifFrameDelays } from \"./compiled\";\n\nexport type {\n\tGifDecodeBackend,\n\tGifDecodeBackendStatus,\n\tGifBinary,\n\tGifOptions,\n\tGifPixelBuffer,\n\tFrame,\n\tFrameInfo,\n\tFrameOptions,\n\tPreparedFrameBackendPreference,\n\tPreparedFrameCacheMode,\n\tPreparedFrameDedupeMode,\n\tPreparedFrameFormat,\n\tPreparedGifFrame,\n\tPreparedGifFrames,\n\tPreparedGifPlayer,\n\tPrepareFramesOptions,\n\tWasmCoreInstance,\n\tWasmCoreModule,\n} from \"./types\";\n\nconst browserExports = {\n\tencodeIndexedGifFrames,\n\tencodeRgbaGifFrames,\n\tGifWriter,\n\tGifReader,\n\tinitializeWasmGlobally,\n\tinitializeWasmModule,\n\tgetWasmStatus,\n\tcleanupWasm,\n\tsetWasmCoreModule,\n\tcreateWasmCoreDecodeBackend,\n\tinstallWasmCoreBackend,\n\tsetNativeAddonModule,\n\tgetNativeAddonStatus,\n\tgetFastBackendStatus,\n\tdecodeGifFramesRgba,\n\tremuxGifPixelPerfect,\n\treencodeGifPixelPerfect,\n\tCompiledGif,\n\tcompileGif,\n\treverseGifPixelPerfect,\n\tboomerangGifPixelPerfect,\n\tretimeGifPixelPerfect,\n};\n\nif (typeof window !== \"undefined\") {\n\t(window as Window & { wtfgif: typeof browserExports }).wtfgif =\n\t\tbrowserExports;\n}\n\ndeclare global {\n\tinterface Window {\n\t\twtfgif: typeof browserExports;\n\t}\n}\n"]}
|