@poe-platform/safe-bash 0.1.726 → 0.1.727
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/dist/safe-bash/chunks/{chunk-6VZX7ESE.js → chunk-26N7BLXE.js} +3 -3
- package/dist/safe-bash/chunks/{chunk-ZZ7JQBPX.js → chunk-4A2OLEML.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-LTREB3HX.js → chunk-54MC6XF5.js} +4 -4
- package/dist/safe-bash/chunks/{chunk-Z3CCN6Y2.js → chunk-6J5FUESH.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-YR5RZBWS.js → chunk-6TBFZ5JE.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-6HJNJ625.js → chunk-7MMYQG3P.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-WTZZX4LV.js → chunk-A4MB2KXV.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-EM2JW7ZH.js → chunk-ATYJKRBZ.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-VV24PRPB.js → chunk-AZQOEGP3.js} +1050 -101
- package/dist/safe-bash/chunks/chunk-AZQOEGP3.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-EFMXWUYE.js → chunk-B6JEJ6AT.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-JFGGQUYP.js → chunk-BFXGHT3R.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-RP5IZOOR.js → chunk-BJYV5J65.js} +1050 -101
- package/dist/safe-bash/chunks/chunk-BJYV5J65.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-HNHOPD3P.js → chunk-DIEFWGXO.js} +46 -26
- package/dist/safe-bash/chunks/{chunk-HNHOPD3P.js.map → chunk-DIEFWGXO.js.map} +2 -2
- package/dist/safe-bash/chunks/{chunk-SME47P4B.js → chunk-DV6EZOKM.js} +46 -26
- package/dist/safe-bash/chunks/{chunk-SME47P4B.js.map → chunk-DV6EZOKM.js.map} +2 -2
- package/dist/safe-bash/chunks/{chunk-646RTREQ.js → chunk-EEDOYIPC.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-OFAAHWL5.js → chunk-GCQ5A2T2.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-MJW4KSKV.js → chunk-GLPJEDLY.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-FOOJWH7J.js → chunk-GO5OKPBO.js} +4 -4
- package/dist/safe-bash/chunks/{chunk-5JANWFJ3.js → chunk-GWYXCCGO.js} +4 -4
- package/dist/safe-bash/chunks/{chunk-DPHRNHPT.js → chunk-H6KJ4L22.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-FLX2BZBF.js → chunk-HGBYIDAK.js} +4 -4
- package/dist/safe-bash/chunks/{chunk-VGJIDLZM.js → chunk-KS5VSJYM.js} +15 -8
- package/dist/safe-bash/chunks/chunk-KS5VSJYM.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-PO3Z7W3A.js → chunk-MUHYGUFD.js} +4 -4
- package/dist/safe-bash/chunks/{chunk-5DLGYPGJ.js → chunk-PDSTXORC.js} +126 -58
- package/dist/safe-bash/chunks/chunk-PDSTXORC.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-TIHMU25L.js → chunk-PQ37GDJF.js} +3 -3
- package/dist/safe-bash/chunks/{chunk-OTM5RCWZ.js → chunk-QNEDWYC2.js} +15 -8
- package/dist/safe-bash/chunks/chunk-QNEDWYC2.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-LZ7FUN6K.js → chunk-RHHDOA67.js} +5 -5
- package/dist/safe-bash/chunks/{chunk-DSCL3VA2.js → chunk-SJ3B26XV.js} +4 -4
- package/dist/safe-bash/chunks/{chunk-6JBTVWHH.js → chunk-SWACYEIT.js} +5 -5
- package/dist/safe-bash/chunks/{chunk-7UJW7TYR.js → chunk-TD6NWAUK.js} +126 -58
- package/dist/safe-bash/chunks/chunk-TD6NWAUK.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-Q4I754TV.js → chunk-THOBFD5C.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-XELW5O3R.js → chunk-U2STHT7S.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-5X4SOSTT.js → chunk-UJHE5PTK.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-B6YFFKYG.js → chunk-X4I3RHTC.js} +5 -1
- package/dist/safe-bash/chunks/chunk-X4I3RHTC.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-YOK5UHA7.js → chunk-XKXFX3RH.js} +5 -1
- package/dist/safe-bash/chunks/chunk-XKXFX3RH.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-PLCYP2E5.js → chunk-XV4K3UUF.js} +2 -2
- package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
- package/dist/safe-bash/commands/factor/index.browser.js +2 -2
- package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
- package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
- package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
- package/dist/safe-bash/commands/internal.d.ts.map +1 -1
- package/dist/safe-bash/commands/internal.js +4 -3
- package/dist/safe-bash/commands/internal.js.map +1 -1
- package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
- package/dist/safe-bash/commands/llm/index.browser.js +4 -4
- package/dist/safe-bash/commands/network/index.browser.js +4 -4
- package/dist/safe-bash/commands/node/index.browser.js +4 -4
- package/dist/safe-bash/commands/pandoc/index.js.map +1 -1
- package/dist/safe-bash/commands/pr/index.browser.js +3 -3
- package/dist/safe-bash/commands/python/index.browser.js +2 -2
- package/dist/safe-bash/commands/record-buffer.d.ts.map +1 -1
- package/dist/safe-bash/commands/record-buffer.js +12 -4
- package/dist/safe-bash/commands/record-buffer.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/bounded-provider.d.ts.map +1 -1
- package/dist/safe-bash/commands/regex-execution/bounded-provider.js +75 -8
- package/dist/safe-bash/commands/regex-execution/bounded-provider.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/ere/limits.d.ts +1 -1
- package/dist/safe-bash/commands/regex-execution/ere/limits.d.ts.map +1 -1
- package/dist/safe-bash/commands/regex-execution/ere/limits.js +6 -4
- package/dist/safe-bash/commands/regex-execution/ere/limits.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/portable.d.ts.map +1 -1
- package/dist/safe-bash/commands/regex-execution/portable.js +7 -2
- package/dist/safe-bash/commands/regex-execution/portable.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/protocol.d.ts +2 -0
- package/dist/safe-bash/commands/regex-execution/protocol.d.ts.map +1 -1
- package/dist/safe-bash/commands/regex-execution/protocol.js +26 -0
- package/dist/safe-bash/commands/regex-execution/protocol.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/utf8.d.ts +1 -1
- package/dist/safe-bash/commands/regex-execution/utf8.d.ts.map +1 -1
- package/dist/safe-bash/commands/regex-execution/utf8.js +26 -2
- package/dist/safe-bash/commands/regex-execution/utf8.js.map +1 -1
- package/dist/safe-bash/commands/search/grep.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/grep.js +109 -15
- package/dist/safe-bash/commands/search/grep.js.map +1 -1
- package/dist/safe-bash/commands/search/matcher.d.ts +1 -1
- package/dist/safe-bash/commands/search/matcher.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/matcher.js +2 -0
- package/dist/safe-bash/commands/search/matcher.js.map +1 -1
- package/dist/safe-bash/commands/search/shared.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/shared.js +23 -12
- package/dist/safe-bash/commands/search/shared.js.map +1 -1
- package/dist/safe-bash/commands/standard.d.ts.map +1 -1
- package/dist/safe-bash/commands/standard.js +22 -0
- package/dist/safe-bash/commands/standard.js.map +1 -1
- package/dist/safe-bash/commands/streams.d.ts.map +1 -1
- package/dist/safe-bash/commands/streams.js +54 -10
- package/dist/safe-bash/commands/streams.js.map +1 -1
- package/dist/safe-bash/commands/structured/input.d.ts.map +1 -1
- package/dist/safe-bash/commands/structured/input.js +484 -55
- package/dist/safe-bash/commands/structured/input.js.map +1 -1
- package/dist/safe-bash/commands/structured/interpreter.d.ts +3 -0
- package/dist/safe-bash/commands/structured/interpreter.d.ts.map +1 -1
- package/dist/safe-bash/commands/structured/interpreter.js +157 -1
- package/dist/safe-bash/commands/structured/interpreter.js.map +1 -1
- package/dist/safe-bash/commands/structured/jq.d.ts.map +1 -1
- package/dist/safe-bash/commands/structured/jq.js +50 -24
- package/dist/safe-bash/commands/structured/jq.js.map +1 -1
- package/dist/safe-bash/commands/structured/limits.d.ts +5 -0
- package/dist/safe-bash/commands/structured/limits.d.ts.map +1 -1
- package/dist/safe-bash/commands/structured/limits.js +51 -36
- package/dist/safe-bash/commands/structured/limits.js.map +1 -1
- package/dist/safe-bash/commands/structured/numbers.d.ts +1 -0
- package/dist/safe-bash/commands/structured/numbers.d.ts.map +1 -1
- package/dist/safe-bash/commands/structured/numbers.js +32 -0
- package/dist/safe-bash/commands/structured/numbers.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-reader.d.ts +1 -0
- package/dist/safe-bash/commands/text-programs/awk-reader.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-reader.js +41 -5
- package/dist/safe-bash/commands/text-programs/awk-reader.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-retention.d.ts +1 -0
- package/dist/safe-bash/commands/text-programs/awk-retention.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-retention.js +9 -0
- package/dist/safe-bash/commands/text-programs/awk-retention.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts +13 -0
- package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-runtime.js +421 -83
- package/dist/safe-bash/commands/text-programs/awk-runtime.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-values.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-values.js +21 -0
- package/dist/safe-bash/commands/text-programs/awk-values.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/regex.d.ts +15 -2
- package/dist/safe-bash/commands/text-programs/regex.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/regex.js +501 -13
- package/dist/safe-bash/commands/text-programs/regex.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/sed.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/sed.js +242 -102
- package/dist/safe-bash/commands/text-programs/sed.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/shared.d.ts +2 -0
- package/dist/safe-bash/commands/text-programs/shared.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/shared.js +36 -0
- package/dist/safe-bash/commands/text-programs/shared.js.map +1 -1
- package/dist/safe-bash/commands/text.d.ts.map +1 -1
- package/dist/safe-bash/commands/text.js +136 -19
- package/dist/safe-bash/commands/text.js.map +1 -1
- package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
- package/dist/safe-bash/commands/xml/index.browser.js +5 -5
- package/dist/safe-bash/commands/yq/index.browser.js +5 -5
- package/dist/safe-bash/contracts/yield.d.ts +1 -0
- package/dist/safe-bash/contracts/yield.d.ts.map +1 -1
- package/dist/safe-bash/contracts/yield.js +3 -0
- package/dist/safe-bash/contracts/yield.js.map +1 -1
- package/dist/safe-bash/core.browser.js +1052 -256
- package/dist/safe-bash/core.browser.js.map +3 -3
- package/dist/safe-bash/plugins/composition.d.ts +1 -0
- package/dist/safe-bash/plugins/composition.d.ts.map +1 -1
- package/dist/safe-bash/plugins/composition.js +80 -2
- package/dist/safe-bash/plugins/composition.js.map +1 -1
- package/dist/safe-bash/plugins/index.d.ts.map +1 -1
- package/dist/safe-bash/plugins/index.js +2 -2
- package/dist/safe-bash/plugins/index.js.map +1 -1
- package/dist/safe-bash-command-fold/arguments.d.ts +1 -1
- package/dist/safe-bash-command-fold/contracts.d.ts +2 -1
- package/dist/safe-bash-command-fold/engine.d.ts +1 -1
- package/dist/safe-bash-command-fold/index.js +10 -8
- package/dist/safe-bash-command-fold/index.js.map +2 -2
- package/dist/safe-bash-command-sips/index.js +231 -67
- package/dist/safe-bash-command-sips/index.js.map +2 -2
- package/dist/safe-bash-command-unrtf/contracts.d.ts +5 -2
- package/dist/safe-bash-command-unrtf/index.js +6 -5
- package/dist/safe-bash-command-unrtf/index.js.map +2 -2
- package/dist/safe-playwright-cloudflare/browser-run-code.js +22 -6
- package/package.json +2 -2
- package/dist/safe-bash/chunks/chunk-5DLGYPGJ.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-7UJW7TYR.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-B6YFFKYG.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-OTM5RCWZ.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-RP5IZOOR.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-VGJIDLZM.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-VV24PRPB.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-YOK5UHA7.js.map +0 -7
- /package/dist/safe-bash/chunks/{chunk-6VZX7ESE.js.map → chunk-26N7BLXE.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-ZZ7JQBPX.js.map → chunk-4A2OLEML.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-LTREB3HX.js.map → chunk-54MC6XF5.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-Z3CCN6Y2.js.map → chunk-6J5FUESH.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-YR5RZBWS.js.map → chunk-6TBFZ5JE.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-6HJNJ625.js.map → chunk-7MMYQG3P.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-WTZZX4LV.js.map → chunk-A4MB2KXV.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-EM2JW7ZH.js.map → chunk-ATYJKRBZ.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-EFMXWUYE.js.map → chunk-B6JEJ6AT.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-JFGGQUYP.js.map → chunk-BFXGHT3R.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-646RTREQ.js.map → chunk-EEDOYIPC.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-OFAAHWL5.js.map → chunk-GCQ5A2T2.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-MJW4KSKV.js.map → chunk-GLPJEDLY.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-FOOJWH7J.js.map → chunk-GO5OKPBO.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-5JANWFJ3.js.map → chunk-GWYXCCGO.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-DPHRNHPT.js.map → chunk-H6KJ4L22.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-FLX2BZBF.js.map → chunk-HGBYIDAK.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-PO3Z7W3A.js.map → chunk-MUHYGUFD.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-TIHMU25L.js.map → chunk-PQ37GDJF.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-LZ7FUN6K.js.map → chunk-RHHDOA67.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-DSCL3VA2.js.map → chunk-SJ3B26XV.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-6JBTVWHH.js.map → chunk-SWACYEIT.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-Q4I754TV.js.map → chunk-THOBFD5C.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-XELW5O3R.js.map → chunk-U2STHT7S.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-5X4SOSTT.js.map → chunk-UJHE5PTK.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-PLCYP2E5.js.map → chunk-XV4K3UUF.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["index.js", "../../image-ast/src/ast.ts", "../../image-ast/src/codecs/exif.ts", "../../image-ast/src/codecs/png.ts", "../../image-ast/src/codecs/jpeg.ts", "../../image-ast/src/codecs/webp.ts", "../../image-ast/src/codecs/heif.ts", "../../image-ast/src/codecs/gif.ts", "../../image-ast/src/codecs/netpbm.ts", "../../image-ast/src/codecs/svg-pdf.ts", "../../image-ast/src/codecs/index.ts", "../../image-ast/src/ops/resize.ts", "../../image-ast/src/ops/transform.ts", "../../image-ast/src/sharp.ts"],
|
|
4
|
-
"sourcesContent": ["import { commandRuntimeIdentity, getCommandArguments } from \"safe-bash-contracts/command\";\nimport { writeBytes } from \"safe-bash-contracts/io\";\nimport { createOutputOperation } from \"safe-bash-contracts/output\";\nimport sharp from \"@poe-code/image-ast\";\nfunction formatToTypeIdentifier(fmt) {\n switch (fmt) {\n case \"png\":\n return \"public.png\";\n case \"jpeg\":\n return \"public.jpeg\";\n case \"webp\":\n return \"org.webmproject.webp\";\n case \"heic\":\n return \"public.heic\";\n case \"heif\":\n return \"public.heif\";\n case \"avif\":\n return \"public.avif\";\n case \"gif\":\n return \"com.compuserve.gif\";\n case \"ppm\":\n case \"pgm\":\n case \"pbm\":\n return \"public.pbm\";\n case \"bmp\":\n return \"com.microsoft.bmp\";\n case \"tiff\":\n return \"public.tiff\";\n case \"pdf\":\n return \"com.adobe.pdf\";\n case \"svg\":\n return \"public.svg-image\";\n default:\n return \"public.image\";\n }\n}\nfunction formatSipsPropertyValue(meta, key) {\n switch (key) {\n case \"pixelWidth\":\n return String(meta.width);\n case \"pixelHeight\":\n return String(meta.height);\n case \"typeIdentifier\":\n return formatToTypeIdentifier(meta.format);\n case \"format\":\n return meta.format;\n case \"formatOptions\":\n return \"default\";\n case \"dpiWidth\":\n return `${(meta.density ?? 72).toFixed(3)}`;\n case \"dpiHeight\":\n return `${(meta.density ?? 72).toFixed(3)}`;\n case \"samplesPerPixel\":\n return String(meta.channels);\n case \"bitsPerSample\":\n return meta.depth === \"ushort\" ? \"16\" : meta.depth === \"bit\" ? \"1\" : \"8\";\n case \"hasAlpha\":\n return meta.hasAlpha ? \"yes\" : \"no\";\n case \"space\":\n return meta.space === \"b-w\" ? \"Gray\" : meta.space === \"cmyk\" ? \"CMYK\" : \"RGB\";\n default:\n return undefined;\n }\n}\nconst ALL_SIPS_KEYS = [\n \"pixelWidth\",\n \"pixelHeight\",\n \"typeIdentifier\",\n \"format\",\n \"formatOptions\",\n \"dpiWidth\",\n \"dpiHeight\",\n \"samplesPerPixel\",\n \"bitsPerSample\",\n \"hasAlpha\",\n \"space\"\n];\nfunction resolveQualityOption(opt) {\n if (!opt)\n return 85;\n const lower = opt.toLowerCase().trim();\n if (lower === \"low\")\n return 30;\n if (lower === \"normal\")\n return 60;\n if (lower === \"default\")\n return 85;\n if (lower === \"high\")\n return 85;\n if (lower === \"best\")\n return 95;\n const num = Number(lower);\n if (Number.isFinite(num) && num >= 1 && num <= 100)\n return Math.round(num);\n return 85;\n}\nfunction normalizeTargetFormat(fmt) {\n const lower = fmt.toLowerCase().trim();\n if (lower === \"png\")\n return \"png\";\n if (lower === \"jpeg\" || lower === \"jpg\")\n return \"jpeg\";\n if (lower === \"webp\")\n return \"webp\";\n if (lower === \"heic\" || lower === \"public.heic\")\n return \"heic\";\n if (lower === \"heif\" || lower === \"public.heif\")\n return \"heif\";\n if (lower === \"avif\" || lower === \"public.avif\")\n return \"avif\";\n if (lower === \"gif\")\n return \"gif\";\n if (lower === \"ppm\")\n return \"ppm\";\n if (lower === \"pgm\")\n return \"pgm\";\n if (lower === \"pbm\")\n return \"pbm\";\n if (lower === \"bmp\")\n return \"bmp\";\n if (lower === \"tiff\" || lower === \"tif\")\n return \"tiff\";\n return undefined;\n}\nexport async function runSipsCli(argv, files) {\n if (argv.length === 0) {\n return {\n exitCode: 1,\n stdout: \"\",\n stderr: \"sips: no arguments specified. Try 'sips --help' for help.\\n\"\n };\n }\n let singleLine = false;\n let outTarget;\n let padColor = \"000000\";\n let cropOffsetY;\n let cropOffsetX;\n let targetFormat;\n let formatOptionsStr;\n let targetDpi;\n const getProperties = [];\n const actions = [];\n const inputPaths = [];\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"-h\" || arg === \"--help\") {\n return {\n exitCode: 0,\n stdout: \"sips - scriptable image processing system\\n\" +\n \"Usage: sips [options] file ...\\n\" +\n \" -g, --getProperty <key>\\n\" +\n \" -s, --setProperty <key> <value>\\n\" +\n \" -Z, --resampleHeightWidthMax <size>\\n\" +\n \" -z, --resampleHeightWidth <height> <width>\\n\" +\n \" --resampleWidth <width>\\n\" +\n \" --resampleHeight <height>\\n\" +\n \" -c, --cropToHeightWidth <height> <width>\\n\" +\n \" --cropOffset <offsetY> <offsetX>\\n\" +\n \" -p, --padToHeightWidth <height> <width>\\n\" +\n \" --padColor <hexColor>\\n\" +\n \" -r, --rotate <degrees>\\n\" +\n \" -f, --flip horizontal|vertical\\n\" +\n \" -o, --out <file-or-directory>\\n\",\n stderr: \"\"\n };\n }\n if (arg === \"-H\" || arg === \"--helpProperties\") {\n return {\n exitCode: 0,\n stdout: ALL_SIPS_KEYS.join(\"\\n\") + \"\\nall\\nallxml\\n\",\n stderr: \"\"\n };\n }\n if (arg === \"-v\" || arg === \"--version\") {\n return { exitCode: 0, stdout: \"sips 10.4.4\\n\", stderr: \"\" };\n }\n if (arg === \"-1\") {\n singleLine = true;\n }\n else if (arg === \"-g\" || arg === \"--getProperty\") {\n const key = argv[++i];\n if (!key) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: missing argument for -g\\n\" };\n }\n getProperties.push(key);\n }\n else if (arg === \"-s\" || arg === \"--setProperty\") {\n const key = argv[++i];\n const val = argv[++i];\n if (!key || val === undefined) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: missing argument for -s\\n\" };\n }\n if (key === \"format\") {\n const parsed = normalizeTargetFormat(val);\n if (!parsed) {\n return {\n exitCode: 1,\n stdout: \"\",\n stderr: `Error:Unsupported format: ${val}\\n`\n };\n }\n targetFormat = parsed;\n }\n else if (key === \"formatOptions\") {\n formatOptionsStr = val;\n }\n else if (key === \"dpiWidth\" || key === \"dpiHeight\") {\n const num = Number(val);\n if (Number.isFinite(num) && num > 0)\n targetDpi = Math.round(num);\n }\n }\n else if (arg === \"-Z\" || arg === \"--resampleHeightWidthMax\") {\n const maxDim = Number(argv[++i]);\n if (!Number.isFinite(maxDim) || maxDim <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid size for -Z\\n\" };\n }\n actions.push({ kind: \"resampleMax\", maxDim: Math.round(maxDim) });\n }\n else if (arg === \"-z\" || arg === \"--resampleHeightWidth\") {\n const h = Number(argv[++i]);\n const w = Number(argv[++i]);\n if (!Number.isFinite(h) || !Number.isFinite(w) || h <= 0 || w <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid dimensions for -z\\n\" };\n }\n actions.push({ kind: \"resampleHW\", height: Math.round(h), width: Math.round(w) });\n }\n else if (arg === \"--resampleWidth\") {\n const w = Number(argv[++i]);\n if (!Number.isFinite(w) || w <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid width for --resampleWidth\\n\" };\n }\n actions.push({ kind: \"resampleW\", width: Math.round(w) });\n }\n else if (arg === \"--resampleHeight\") {\n const h = Number(argv[++i]);\n if (!Number.isFinite(h) || h <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid height for --resampleHeight\\n\" };\n }\n actions.push({ kind: \"resampleH\", height: Math.round(h) });\n }\n else if (arg === \"-c\" || arg === \"--cropToHeightWidth\") {\n const h = Number(argv[++i]);\n const w = Number(argv[++i]);\n if (!Number.isFinite(h) || !Number.isFinite(w) || h <= 0 || w <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid dimensions for -c\\n\" };\n }\n actions.push({ kind: \"crop\", height: Math.round(h), width: Math.round(w) });\n }\n else if (arg === \"--cropOffset\") {\n const oy = Number(argv[++i]);\n const ox = Number(argv[++i]);\n if (!Number.isFinite(oy) || !Number.isFinite(ox)) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid offset for --cropOffset\\n\" };\n }\n cropOffsetY = Math.round(oy);\n cropOffsetX = Math.round(ox);\n }\n else if (arg === \"-p\" || arg === \"--padToHeightWidth\") {\n const h = Number(argv[++i]);\n const w = Number(argv[++i]);\n if (!Number.isFinite(h) || !Number.isFinite(w) || h <= 0 || w <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid dimensions for -p\\n\" };\n }\n actions.push({ kind: \"pad\", height: Math.round(h), width: Math.round(w) });\n }\n else if (arg === \"--padColor\") {\n padColor = argv[++i] ?? \"000000\";\n }\n else if (arg === \"-r\" || arg === \"--rotate\") {\n const deg = Number(argv[++i]);\n if (!Number.isFinite(deg)) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid degrees for -r\\n\" };\n }\n actions.push({ kind: \"rotate\", degrees: deg });\n }\n else if (arg === \"-f\" || arg === \"--flip\") {\n const dir = (argv[++i] ?? \"\").toLowerCase();\n if (dir !== \"horizontal\" && dir !== \"vertical\") {\n return {\n exitCode: 1,\n stdout: \"\",\n stderr: \"sips: flip direction must be 'horizontal' or 'vertical'\\n\"\n };\n }\n actions.push({ kind: \"flip\", direction: dir });\n }\n else if (arg === \"-o\" || arg === \"--out\") {\n outTarget = argv[++i];\n if (!outTarget) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: missing argument for --out\\n\" };\n }\n }\n else if (!arg.startsWith(\"-\")) {\n inputPaths.push(arg);\n }\n else {\n return { exitCode: 1, stdout: \"\", stderr: `sips: unknown option: ${arg}\\n` };\n }\n }\n if (inputPaths.length === 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: no input files specified\\n\" };\n }\n const hasMutation = actions.length > 0 ||\n targetFormat !== undefined ||\n formatOptionsStr !== undefined ||\n targetDpi !== undefined ||\n outTarget !== undefined;\n const outLines = [];\n const errLines = [];\n let exitCode = 0;\n for (const inPath of inputPaths) {\n const inBytes = files.get(inPath);\n if (!inBytes) {\n errLines.push(`Error: ${inPath}: file does not exist`);\n exitCode = 1;\n continue;\n }\n try {\n let inst = sharp(inBytes);\n let meta = await inst.metadata();\n let curW = meta.width;\n let curH = meta.height;\n if (hasMutation) {\n for (const act of actions) {\n if (act.kind === \"rotate\") {\n inst = inst.rotate(act.degrees, { background: padColor });\n meta = await inst.metadata();\n curW = meta.width;\n curH = meta.height;\n }\n else if (act.kind === \"flip\") {\n if (act.direction === \"horizontal\")\n inst = inst.flop();\n else\n inst = inst.flip();\n }\n else if (act.kind === \"resampleMax\") {\n const scale = act.maxDim / Math.max(curW, curH, 1);\n const nw = Math.max(1, Math.round(curW * scale));\n const nh = Math.max(1, Math.round(curH * scale));\n inst = inst.resize(nw, nh, { fit: \"fill\" });\n curW = nw;\n curH = nh;\n }\n else if (act.kind === \"resampleHW\") {\n inst = inst.resize(act.width, act.height, { fit: \"fill\" });\n curW = act.width;\n curH = act.height;\n }\n else if (act.kind === \"resampleW\") {\n const nh = Math.max(1, Math.round((curH * act.width) / Math.max(1, curW)));\n inst = inst.resize(act.width, nh, { fit: \"fill\" });\n curW = act.width;\n curH = nh;\n }\n else if (act.kind === \"resampleH\") {\n const nw = Math.max(1, Math.round((curW * act.height) / Math.max(1, curH)));\n inst = inst.resize(nw, act.height, { fit: \"fill\" });\n curW = nw;\n curH = act.height;\n }\n else if (act.kind === \"crop\") {\n const cw = Math.min(curW, act.width);\n const ch = Math.min(curH, act.height);\n const left = cropOffsetX !== undefined\n ? Math.max(0, Math.min(curW - cw, cropOffsetX))\n : Math.max(0, Math.floor((curW - cw) / 2));\n const top = cropOffsetY !== undefined\n ? Math.max(0, Math.min(curH - ch, cropOffsetY))\n : Math.max(0, Math.floor((curH - ch) / 2));\n inst = inst.extract({ left, top, width: cw, height: ch });\n curW = cw;\n curH = ch;\n if (act.width > curW || act.height > curH) {\n const padX = Math.max(0, act.width - curW);\n const padY = Math.max(0, act.height - curH);\n const padLeft = Math.floor(padX / 2);\n const padRight = padX - padLeft;\n const padTop = Math.floor(padY / 2);\n const padBottom = padY - padTop;\n inst = inst.extend({\n top: padTop,\n bottom: padBottom,\n left: padLeft,\n right: padRight,\n background: padColor\n });\n curW = act.width;\n curH = act.height;\n }\n }\n else if (act.kind === \"pad\") {\n if (act.width < curW || act.height < curH) {\n const cw = Math.min(curW, act.width);\n const ch = Math.min(curH, act.height);\n const left = Math.max(0, Math.floor((curW - cw) / 2));\n const top = Math.max(0, Math.floor((curH - ch) / 2));\n inst = inst.extract({ left, top, width: cw, height: ch });\n curW = cw;\n curH = ch;\n }\n const padX = Math.max(0, act.width - curW);\n const padY = Math.max(0, act.height - curH);\n const left = Math.floor(padX / 2);\n const right = padX - left;\n const top = Math.floor(padY / 2);\n const bottom = padY - top;\n inst = inst.extend({\n top,\n bottom,\n left,\n right,\n background: padColor\n });\n curW = act.width;\n curH = act.height;\n }\n }\n if (targetDpi !== undefined) {\n inst = inst.withMetadata({ density: targetDpi });\n }\n const outFmt = targetFormat ?? (meta.format === \"pdf\" || meta.format === \"svg\" ? \"png\" : meta.format);\n const quality = resolveQualityOption(formatOptionsStr);\n inst = inst.toFormat(outFmt, { quality });\n const outBytes = await inst.toBuffer();\n let finalOutPath = inPath;\n if (outTarget) {\n if (inputPaths.length > 1 || outTarget.endsWith(\"/\")) {\n const base = inPath.split(\"/\").pop() ?? inPath;\n const dir = outTarget.endsWith(\"/\") ? outTarget.slice(0, -1) : outTarget;\n finalOutPath = `${dir}/${base}`;\n }\n else {\n finalOutPath = outTarget;\n }\n }\n files.set(finalOutPath, outBytes);\n meta = await sharp(outBytes).metadata();\n if (getProperties.length === 0) {\n outLines.push(inPath);\n outLines.push(` ${finalOutPath}`);\n }\n }\n if (getProperties.length > 0) {\n if (getProperties.includes(\"allxml\")) {\n const xmlEntries = ALL_SIPS_KEYS.map(k => {\n const val = formatSipsPropertyValue(meta, k) ?? \"\";\n return ` <key>${k}</key>\\n <string>${val}</string>`;\n }).join(\"\\n\");\n outLines.push(`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\\n<plist version=\"1.0\">\\n<dict>\\n${xmlEntries}\\n</dict>\\n</plist>`);\n }\n else {\n const expandedKeys = [];\n for (const k of getProperties) {\n if (k === \"all\")\n expandedKeys.push(...ALL_SIPS_KEYS);\n else\n expandedKeys.push(k);\n }\n const propLines = [inPath];\n for (const k of expandedKeys) {\n const val = formatSipsPropertyValue(meta, k);\n if (val !== undefined) {\n propLines.push(singleLine ? `${k}: ${val}` : ` ${k}: ${val}`);\n }\n else {\n propLines.push(singleLine ? `${k}: <nil>` : ` ${k}: <nil>`);\n }\n }\n if (singleLine) {\n outLines.push(propLines.join(\"|\") + \"|\");\n }\n else {\n outLines.push(...propLines);\n }\n }\n }\n }\n catch (err) {\n errLines.push(`Error: ${inPath}: ${err.message}`);\n exitCode = 1;\n }\n }\n return {\n exitCode,\n stdout: outLines.length > 0 ? outLines.join(\"\\n\") + \"\\n\" : \"\",\n stderr: errLines.length > 0 ? errLines.join(\"\\n\") + \"\\n\" : \"\"\n };\n}\nfunction formatIdentifyCustom(fmt, filePath, meta, byteSize) {\n const lastSlash = filePath.lastIndexOf(\"/\");\n const dirName = lastSlash > 0 ? filePath.slice(0, lastSlash) : lastSlash === 0 ? \"/\" : \".\";\n const fileName = lastSlash >= 0 ? filePath.slice(lastSlash + 1) : filePath;\n const dotIdx = fileName.lastIndexOf(\".\");\n const basename = dotIdx > 0 ? fileName.slice(0, dotIdx) : fileName;\n const ext = dotIdx > 0 ? fileName.slice(dotIdx + 1) : \"\";\n const bitDepth = meta.depth === \"ushort\" ? \"16\" : meta.depth === \"bit\" ? \"1\" : \"8\";\n const spaceLabel = meta.space === \"b-w\" ? \"Gray\" : meta.space === \"cmyk\" ? \"CMYK\" : \"sRGB\";\n let out = \"\";\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt[i];\n if (c === \"\\\\\" && i + 1 < fmt.length) {\n const next = fmt[++i];\n if (next === \"n\")\n out += \"\\n\";\n else if (next === \"t\")\n out += \"\\t\";\n else if (next === \"r\")\n out += \"\\r\";\n else\n out += next;\n }\n else if (c === \"%\" && i + 1 < fmt.length) {\n if (fmt[i + 1] === \"[\") {\n const closeIdx = fmt.indexOf(\"]\", i + 2);\n if (closeIdx !== -1) {\n const expr = fmt.slice(i + 2, closeIdx).toLowerCase();\n i = closeIdx;\n switch (expr) {\n case \"width\":\n case \"fx:w\":\n out += String(meta.width);\n break;\n case \"height\":\n case \"fx:h\":\n out += String(meta.height);\n break;\n case \"channels\":\n out += String(meta.channels);\n break;\n case \"colorspace\":\n out += spaceLabel;\n break;\n case \"bit-depth\":\n case \"depth\":\n out += bitDepth;\n break;\n case \"orientation\":\n out += String(meta.orientation ?? 1);\n break;\n case \"size\":\n out += `${byteSize}B`;\n break;\n case \"format\":\n out += meta.format.toUpperCase();\n break;\n default:\n out += \"\";\n break;\n }\n continue;\n }\n }\n const spec = fmt[++i];\n switch (spec) {\n case \"%\":\n out += \"%\";\n break;\n case \"w\":\n out += String(meta.width);\n break;\n case \"h\":\n out += String(meta.height);\n break;\n case \"m\":\n out += meta.format.toUpperCase();\n break;\n case \"z\":\n out += bitDepth;\n break;\n case \"k\":\n out += String(meta.channels);\n break;\n case \"r\":\n out += `DirectClass ${spaceLabel}`;\n break;\n case \"b\":\n case \"B\":\n out += `${byteSize}B`;\n break;\n case \"d\":\n out += dirName;\n break;\n case \"f\":\n out += fileName;\n break;\n case \"i\":\n out += filePath;\n break;\n case \"n\":\n out += String(meta.pages ?? 1);\n break;\n case \"p\":\n out += String(meta.pagePrimary ?? 0);\n break;\n case \"t\":\n out += basename;\n break;\n case \"e\":\n out += ext;\n break;\n case \"x\":\n case \"y\":\n out += String(meta.density ?? 72);\n break;\n case \"Q\":\n out += \"85\";\n break;\n default:\n out += `%${spec}`;\n break;\n }\n }\n else {\n out += c;\n }\n }\n return out;\n}\nexport async function runIdentifyCli(argv, files) {\n let customFormat;\n let verbose = false;\n const inputPaths = [];\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"-h\" || arg === \"-help\" || arg === \"--help\") {\n return {\n exitCode: 0,\n stdout: \"Usage: identify [options] input-file ...\\n\" +\n \" -ping\\n\" +\n \" -format <string>\\n\" +\n \" -verbose\\n\",\n stderr: \"\"\n };\n }\n if (arg === \"-version\" || arg === \"--version\") {\n return { exitCode: 0, stdout: \"Version: ImageMagick 7.1.1-38 (safe-bash image-ast)\\n\", stderr: \"\" };\n }\n if (arg === \"-ping\") {\n // metadata-only mode (default unless -verbose)\n }\n else if (arg === \"-verbose\") {\n verbose = true;\n }\n else if (arg === \"-format\") {\n customFormat = argv[++i] ?? \"\";\n }\n else if (!arg.startsWith(\"-\")) {\n inputPaths.push(arg);\n }\n }\n if (inputPaths.length === 0) {\n return {\n exitCode: 1,\n stdout: \"\",\n stderr: \"identify: missing an image filename\\n\"\n };\n }\n const outParts = [];\n const errParts = [];\n let exitCode = 0;\n for (const inPath of inputPaths) {\n const bracketMatch = /^(.*)\\[(\\d+)\\]$/.exec(inPath);\n const baseInPath = bracketMatch ? bracketMatch[1] : inPath;\n const pageIdx = bracketMatch ? parseInt(bracketMatch[2], 10) : undefined;\n const bytes = files.get(inPath) ?? files.get(baseInPath);\n if (!bytes) {\n errParts.push(`identify: unable to open image '${inPath}': No such file or directory\\n`);\n exitCode = 1;\n continue;\n }\n try {\n const inst = sharp(bytes, pageIdx !== undefined ? { page: pageIdx } : undefined);\n const meta = await inst.metadata();\n const bitDepth = meta.depth === \"ushort\" ? \"16\" : meta.depth === \"bit\" ? \"1\" : \"8\";\n const spaceLabel = meta.space === \"b-w\" ? \"Gray\" : meta.space === \"cmyk\" ? \"CMYK\" : \"sRGB\";\n if (customFormat !== undefined) {\n outParts.push(formatIdentifyCustom(customFormat, baseInPath, meta, bytes.byteLength));\n }\n else if (verbose) {\n const stats = await inst.stats();\n outParts.push(`Image: ${inPath}\\n` +\n ` Format: ${meta.format.toUpperCase()}\\n` +\n ` Geometry: ${meta.width}x${meta.height}+0+0\\n` +\n ` Resolution: ${meta.density}x${meta.density}\\n` +\n ` Colorspace: ${spaceLabel}\\n` +\n ` Depth: ${bitDepth}-bit\\n` +\n ` Channels: ${meta.channels}\\n` +\n ` Alpha: ${meta.hasAlpha ? \"True\" : \"False\"}\\n` +\n ` Filesize: ${bytes.byteLength}B\\n` +\n ` Entropy: ${stats.entropy.toFixed(4)}\\n`);\n }\n else {\n outParts.push(`${inPath} ${meta.format.toUpperCase()} ${meta.width}x${meta.height} ${meta.width}x${meta.height}+0+0 ${bitDepth}-bit ${spaceLabel} ${bytes.byteLength}B 0.000u 0:00.000\\n`);\n }\n }\n catch (err) {\n errParts.push(`identify: improper image header '${inPath}': ${err.message}\\n`);\n exitCode = 1;\n }\n }\n return {\n exitCode,\n stdout: outParts.join(\"\"),\n stderr: errParts.join(\"\")\n };\n}\nasync function executeVfsImageTool(context, runner) {\n const invocation = createOutputOperation(context, { write: async () => { } });\n try {\n const carrier = getCommandArguments(context);\n const argv = [...carrier.args];\n const vfsFiles = new Map();\n const resolveVfsPath = (p) => p.startsWith(\"/\") ? p : `${context.cwd === \"/\" ? \"\" : context.cwd}/${p}`;\n const normalizedArgv = [...argv];\n for (let i = 0; i < normalizedArgv.length; i++) {\n const token = normalizedArgv[i];\n if (token === \"-o\" || token === \"--out\") {\n const next = normalizedArgv[i + 1];\n if (next && !next.endsWith(\"/\")) {\n try {\n const st = await context.fs.stat(resolveVfsPath(next), { signal: invocation.signal });\n if (st.type === \"directory\") {\n normalizedArgv[i + 1] = next + \"/\";\n }\n }\n catch {\n // Target does not exist yet\n }\n }\n continue;\n }\n if (token.startsWith(\"-\"))\n continue;\n const bracketMatch = /^(.*)\\[(\\d+)\\]$/.exec(token);\n const fileToken = bracketMatch ? bracketMatch[1] : token;\n try {\n const bytes = await context.fs.readFile(resolveVfsPath(fileToken), {\n signal: invocation.signal\n });\n vfsFiles.set(fileToken, bytes);\n }\n catch {\n // Output path or non-existent file\n }\n }\n const existingSnap = new Map(vfsFiles);\n const res = await runner(normalizedArgv, vfsFiles);\n if (res.stderr) {\n await writeBytes(context.stderr, new TextEncoder().encode(res.stderr), invocation.signal);\n }\n if (res.stdout) {\n const stdout = invocation.child(context.stdout);\n await writeBytes(stdout.output, new TextEncoder().encode(res.stdout), invocation.signal);\n }\n for (const [key, val] of vfsFiles.entries()) {\n if (existingSnap.get(key) !== val) {\n const abs = resolveVfsPath(key);\n const parentDir = abs.slice(0, abs.lastIndexOf(\"/\")) || \"/\";\n try {\n await context.fs.mkdir(parentDir, { recursive: true, signal: invocation.signal });\n }\n catch {\n // Directory already exists\n }\n await context.fs.writeFile(abs, val, { signal: invocation.signal });\n }\n }\n return { exitCode: res.exitCode };\n }\n finally {\n await invocation.close();\n }\n}\nexport function createSipsCommand(_options = {}) {\n return Object.freeze({\n name: \"sips\",\n runtimeIdentity: commandRuntimeIdentity,\n description: \"Scriptable image processing system powered by @poe-code/image-ast\",\n execute(context) {\n return executeVfsImageTool(context, runSipsCli);\n }\n });\n}\nexport const sipsCommand = createSipsCommand();\nexport function createIdentifyCommand(_options = {}) {\n return Object.freeze({\n name: \"identify\",\n runtimeIdentity: commandRuntimeIdentity,\n description: \"Inspect image format, dimensions, and metadata via @poe-code/image-ast\",\n execute(context) {\n return executeVfsImageTool(context, runIdentifyCli);\n }\n });\n}\nexport const identifyCommand = createIdentifyCommand();\nexport function sipsPlugin(options = {}) {\n const sips = createSipsCommand(options);\n const identify = createIdentifyCommand(options);\n const replace = options.replace ?? false;\n return {\n name: \"sips\",\n setup(host) {\n host.commands.register(sips, { replace });\n host.commands.register(identify, { replace });\n }\n };\n}\nexport const sipsCommands = sipsPlugin;\n", "export type ImageFormat =\n | \"png\"\n | \"jpeg\"\n | \"webp\"\n | \"heic\"\n | \"heif\"\n | \"avif\"\n | \"gif\"\n | \"ppm\"\n | \"pgm\"\n | \"pbm\"\n | \"bmp\"\n | \"tiff\"\n | \"svg\"\n | \"pdf\"\n | \"raw\";\n\nexport type ColorSpace = \"srgb\" | \"b-w\" | \"cmyk\";\n\nexport interface RgbaColor {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly a: number;\n}\n\nexport type ColorInput =\n | string\n | {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly alpha?: number;\n };\n\nexport interface RgbaImage {\n readonly width: number;\n readonly height: number;\n readonly data: Uint8Array;\n readonly format: ImageFormat;\n readonly space: ColorSpace;\n readonly channels: 1 | 2 | 3 | 4;\n readonly depth: \"uchar\" | \"ushort\" | \"bit\";\n readonly density: number;\n readonly hasAlpha: boolean;\n readonly orientation?: number;\n readonly pages?: number;\n readonly isProgressive?: boolean;\n}\n\nexport interface ImageMetadata {\n readonly format: ImageFormat;\n readonly width: number;\n readonly height: number;\n readonly space: ColorSpace;\n readonly channels: 1 | 2 | 3 | 4;\n readonly depth: \"uchar\" | \"ushort\" | \"bit\";\n readonly density: number;\n readonly hasAlpha: boolean;\n readonly compression?: \"hevc\" | \"av1\";\n readonly orientation?: number;\n readonly pages?: number;\n readonly pagePrimary?: number;\n readonly isProgressive?: boolean;\n readonly size?: number;\n}\n\nexport interface ChannelStats {\n readonly min: number;\n readonly max: number;\n readonly sum: number;\n readonly squaresSum: number;\n readonly mean: number;\n readonly stdev: number;\n readonly minX: number;\n readonly minY: number;\n readonly maxX: number;\n readonly maxY: number;\n}\n\nexport interface ImageStats {\n readonly channels: ChannelStats[];\n readonly isOpaque: boolean;\n readonly entropy: number;\n readonly sharpness: number;\n readonly dominant: { readonly r: number; readonly g: number; readonly b: number };\n}\n\nexport interface OutputInfo {\n readonly format: string;\n readonly width: number;\n readonly height: number;\n readonly channels: number;\n readonly premultiplied: boolean;\n readonly size: number;\n}\n\nexport type ResizeFit = \"cover\" | \"contain\" | \"fill\" | \"inside\" | \"outside\";\nexport type ResizeKernel = \"nearest\" | \"bilinear\" | \"cubic\" | \"mitchell\" | \"lanczos2\" | \"lanczos3\";\nexport type GravityPosition =\n | \"center\"\n | \"centre\"\n | \"north\"\n | \"northeast\"\n | \"east\"\n | \"southeast\"\n | \"south\"\n | \"southwest\"\n | \"west\"\n | \"northwest\"\n | \"top\"\n | \"right top\"\n | \"right\"\n | \"right bottom\"\n | \"bottom\"\n | \"left bottom\"\n | \"left\"\n | \"left top\";\n\nexport interface ResizeOptions {\n readonly width?: number | null;\n readonly height?: number | null;\n readonly fit?: ResizeFit;\n readonly position?: GravityPosition;\n readonly kernel?: ResizeKernel;\n readonly background?: ColorInput;\n readonly withoutEnlargement?: boolean;\n readonly withoutReduction?: boolean;\n readonly fastShrinkOnLoad?: boolean;\n}\n\nexport type BlendMode =\n | \"clear\"\n | \"source\"\n | \"over\"\n | \"in\"\n | \"out\"\n | \"atop\"\n | \"dest\"\n | \"dest-over\"\n | \"dest-in\"\n | \"dest-out\"\n | \"dest-atop\"\n | \"xor\"\n | \"add\"\n | \"saturate\"\n | \"multiply\"\n | \"screen\"\n | \"overlay\"\n | \"darken\"\n | \"lighten\"\n | \"color-dodge\"\n | \"colour-dodge\"\n | \"color-burn\"\n | \"colour-burn\"\n | \"hard-light\"\n | \"soft-light\"\n | \"difference\"\n | \"exclusion\";\n\nexport interface CompositeLayer {\n readonly input:\n | Uint8Array\n | string\n | {\n readonly create: {\n readonly width: number;\n readonly height: number;\n readonly channels: 3 | 4;\n readonly background: ColorInput;\n };\n };\n readonly top?: number;\n readonly left?: number;\n readonly gravity?: GravityPosition;\n readonly blend?: BlendMode;\n readonly tile?: boolean;\n readonly premultiplied?: boolean;\n readonly density?: number;\n readonly raw?: {\n readonly width: number;\n readonly height: number;\n readonly channels: 1 | 2 | 3 | 4;\n };\n}\n\nexport interface SharpInputOptions {\n readonly density?: number;\n readonly page?: number;\n readonly pages?: number;\n readonly limitInputPixels?: number | false;\n readonly failOn?: \"none\" | \"truncated\" | \"error\" | \"warning\";\n readonly raw?: {\n readonly width: number;\n readonly height: number;\n readonly channels: 1 | 2 | 3 | 4;\n readonly premultiplied?: boolean;\n };\n readonly create?: {\n readonly width: number;\n readonly height: number;\n readonly channels: 3 | 4;\n readonly background: ColorInput;\n };\n}\n\nexport type ImageAstNode =\n | { readonly kind: \"autoOrient\" }\n | { readonly kind: \"rotate\"; readonly angle: number; readonly background: RgbaColor }\n | { readonly kind: \"flip\" }\n | { readonly kind: \"flop\" }\n | {\n readonly kind: \"extract\";\n readonly left: number;\n readonly top: number;\n readonly width: number;\n readonly height: number;\n }\n | {\n readonly kind: \"trim\";\n readonly threshold: number;\n readonly background?: RgbaColor;\n }\n | {\n readonly kind: \"resize\";\n readonly width: number | null;\n readonly height: number | null;\n readonly fit: ResizeFit;\n readonly position: GravityPosition;\n readonly kernel: ResizeKernel;\n readonly background: RgbaColor;\n readonly withoutEnlargement: boolean;\n readonly withoutReduction: boolean;\n }\n | {\n readonly kind: \"extend\";\n readonly top: number;\n readonly bottom: number;\n readonly left: number;\n readonly right: number;\n readonly background: RgbaColor;\n readonly extendWith: \"background\" | \"copy\" | \"repeat\" | \"mirror\";\n }\n | {\n readonly kind: \"composite\";\n readonly layers: readonly CompositeLayer[];\n }\n | { readonly kind: \"grayscale\" }\n | { readonly kind: \"flatten\"; readonly background: RgbaColor }\n | { readonly kind: \"unflatten\" }\n | { readonly kind: \"negate\"; readonly alpha: boolean }\n | {\n readonly kind: \"modulate\";\n readonly brightness: number;\n readonly saturation: number;\n readonly hue: number;\n readonly lightness: number;\n }\n | { readonly kind: \"tint\"; readonly color: RgbaColor }\n | { readonly kind: \"gamma\"; readonly gamma: number; readonly gammaOut: number }\n | { readonly kind: \"linear\"; readonly a: readonly number[]; readonly b: readonly number[] }\n | { readonly kind: \"normalize\"; readonly lower: number; readonly upper: number }\n | { readonly kind: \"threshold\"; readonly value: number; readonly grayscale: boolean }\n | { readonly kind: \"blur\"; readonly sigma: number }\n | { readonly kind: \"sharpen\"; readonly sigma: number; readonly m1: number; readonly m2: number }\n | { readonly kind: \"median\"; readonly size: number }\n | {\n readonly kind: \"convolve\";\n readonly width: number;\n readonly height: number;\n readonly kernel: readonly number[];\n readonly scale: number;\n readonly offset: number;\n }\n | { readonly kind: \"ensureAlpha\"; readonly alpha: number }\n | { readonly kind: \"removeAlpha\" }\n | { readonly kind: \"extractChannel\"; readonly channel: 0 | 1 | 2 | 3 }\n | { readonly kind: \"recomb\"; readonly matrix: readonly (readonly number[])[] }\n | { readonly kind: \"toColorspace\"; readonly space: ColorSpace }\n | { readonly kind: \"bandbool\"; readonly op: \"and\" | \"or\" | \"eor\" }\n | {\n readonly kind: \"joinChannel\";\n readonly inputs: ReadonlyArray<{\n readonly data: Uint8Array;\n readonly options?: SharpInputOptions;\n }>;\n }\n | {\n readonly kind: \"clahe\";\n readonly width: number;\n readonly height: number;\n readonly maxSlope: number;\n }\n | {\n readonly kind: \"affine\";\n readonly matrix: readonly [number, number, number, number];\n readonly background: RgbaColor;\n readonly idx: number;\n readonly idy: number;\n readonly odx: number;\n readonly ody: number;\n }\n | {\n readonly kind: \"withMetadata\";\n readonly density?: number;\n readonly orientation?: number;\n };\n\nexport interface OutputEncodeOptions {\n readonly format?: ImageFormat;\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly compressionLevel?: number;\n readonly palette?: boolean;\n readonly lossless?: boolean;\n readonly density?: number;\n readonly orientation?: number;\n}\n\nconst NAMED_COLORS: Record<string, [number, number, number, number]> = {\n black: [0, 0, 0, 255],\n white: [255, 255, 255, 255],\n transparent: [0, 0, 0, 0],\n none: [0, 0, 0, 0],\n red: [255, 0, 0, 255],\n green: [0, 128, 0, 255],\n lime: [0, 255, 0, 255],\n blue: [0, 0, 255, 255],\n yellow: [255, 255, 0, 255],\n cyan: [0, 255, 255, 255],\n aqua: [0, 255, 255, 255],\n magenta: [255, 0, 255, 255],\n fuchsia: [255, 0, 255, 255],\n gray: [128, 128, 128, 255],\n grey: [128, 128, 128, 255],\n silver: [192, 192, 192, 255],\n maroon: [128, 0, 0, 255],\n olive: [128, 128, 0, 255],\n purple: [128, 0, 128, 255],\n teal: [0, 128, 128, 255],\n navy: [0, 0, 128, 255],\n orange: [255, 165, 0, 255]\n};\n\nfunction clampByte(n: number): number {\n if (!Number.isFinite(n)) return 0;\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\nexport function parseColor(input?: ColorInput, defaultAlpha = 255): RgbaColor {\n if (!input) {\n return { r: 0, g: 0, b: 0, a: defaultAlpha };\n }\n if (typeof input === \"object\") {\n const alpha =\n input.alpha === undefined\n ? defaultAlpha\n : input.alpha <= 1 && input.alpha >= 0 && !Number.isInteger(input.alpha)\n ? Math.round(input.alpha * 255)\n : input.alpha <= 1 && (input.r > 1 || input.g > 1 || input.b > 1)\n ? Math.round(input.alpha * 255)\n : input.alpha <= 1\n ? Math.round(input.alpha * 255)\n : input.alpha;\n return {\n r: clampByte(input.r),\n g: clampByte(input.g),\n b: clampByte(input.b),\n a: clampByte(alpha)\n };\n }\n const trimmed = input.trim().toLowerCase();\n if (NAMED_COLORS[trimmed]) {\n const [r, g, b, a] = NAMED_COLORS[trimmed]!;\n return { r, g, b, a };\n }\n const hexRaw = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n if (/^[0-9a-f]{3}$/.test(hexRaw)) {\n const r = parseInt(hexRaw[0]! + hexRaw[0]!, 16);\n const g = parseInt(hexRaw[1]! + hexRaw[1]!, 16);\n const b = parseInt(hexRaw[2]! + hexRaw[2]!, 16);\n return { r, g, b, a: defaultAlpha };\n }\n if (/^[0-9a-f]{4}$/.test(hexRaw)) {\n const r = parseInt(hexRaw[0]! + hexRaw[0]!, 16);\n const g = parseInt(hexRaw[1]! + hexRaw[1]!, 16);\n const b = parseInt(hexRaw[2]! + hexRaw[2]!, 16);\n const a = parseInt(hexRaw[3]! + hexRaw[3]!, 16);\n return { r, g, b, a };\n }\n if (/^[0-9a-f]{6}$/.test(hexRaw)) {\n const r = parseInt(hexRaw.slice(0, 2), 16);\n const g = parseInt(hexRaw.slice(2, 4), 16);\n const b = parseInt(hexRaw.slice(4, 6), 16);\n return { r, g, b, a: defaultAlpha };\n }\n if (/^[0-9a-f]{8}$/.test(hexRaw)) {\n const r = parseInt(hexRaw.slice(0, 2), 16);\n const g = parseInt(hexRaw.slice(2, 4), 16);\n const b = parseInt(hexRaw.slice(4, 6), 16);\n const a = parseInt(hexRaw.slice(6, 8), 16);\n return { r, g, b, a };\n }\n const rgbMatch = /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/.exec(\n trimmed\n );\n if (rgbMatch) {\n const r = clampByte(Number(rgbMatch[1]));\n const g = clampByte(Number(rgbMatch[2]));\n const b = clampByte(Number(rgbMatch[3]));\n const alphaRaw = rgbMatch[4] !== undefined ? Number(rgbMatch[4]) : undefined;\n const a =\n alphaRaw === undefined\n ? defaultAlpha\n : alphaRaw <= 1\n ? clampByte(alphaRaw * 255)\n : clampByte(alphaRaw);\n return { r, g, b, a };\n }\n throw new Error(`Unsupported color value: ${input}`);\n}\n", "export interface ExifMetadata {\n readonly orientation?: number;\n readonly density?: number;\n}\n\nexport function parseExifBuffer(raw: Uint8Array): ExifMetadata {\n let offset = 0;\n if (\n raw.length >= 6 &&\n raw[0] === 0x45 && // E\n raw[1] === 0x78 && // x\n raw[2] === 0x69 && // i\n raw[3] === 0x66 && // f\n raw[4] === 0x00 &&\n raw[5] === 0x00\n ) {\n offset = 6;\n }\n if (raw.length < offset + 8) return {};\n const sub = raw.subarray(offset);\n const view = new DataView(sub.buffer, sub.byteOffset, sub.byteLength);\n const littleEndian = sub[0] === 0x49 && sub[1] === 0x49;\n const bigEndian = sub[0] === 0x4d && sub[1] === 0x4d;\n if (!littleEndian && !bigEndian) return {};\n\n const magic = view.getUint16(2, littleEndian);\n if (magic !== 0x002a) return {};\n const ifdOffset = view.getUint32(4, littleEndian);\n if (ifdOffset + 2 > sub.length) return {};\n\n const numEntries = view.getUint16(ifdOffset, littleEndian);\n let orientation: number | undefined;\n let xRes: number | undefined;\n let resUnit = 2; // 2 = inches (DPI), 3 = cm (DPCM)\n\n for (let i = 0; i < numEntries; i++) {\n const entryPos = ifdOffset + 2 + i * 12;\n if (entryPos + 12 > sub.length) break;\n const tag = view.getUint16(entryPos, littleEndian);\n const type = view.getUint16(entryPos + 2, littleEndian);\n const valueOffset = view.getUint32(entryPos + 8, littleEndian);\n\n if (tag === 0x0112) {\n // Orientation (SHORT = 3)\n const val = type === 3 ? view.getUint16(entryPos + 8, littleEndian) : valueOffset;\n if (val >= 1 && val <= 8) orientation = val;\n } else if (tag === 0x0128) {\n const val = type === 3 ? view.getUint16(entryPos + 8, littleEndian) : valueOffset;\n if (val === 2 || val === 3) resUnit = val;\n } else if (tag === 0x011a && type === 5) {\n // RATIONAL (two uint32s at valueOffset)\n if (valueOffset + 8 <= sub.length) {\n const num = view.getUint32(valueOffset, littleEndian);\n const den = view.getUint32(valueOffset + 4, littleEndian);\n if (den > 0) xRes = num / den;\n }\n }\n }\n\n let density: number | undefined;\n if (xRes !== undefined && xRes > 0) {\n density = resUnit === 3 ? Math.round(xRes * 2.54) : Math.round(xRes);\n }\n\n return {\n ...(orientation !== undefined ? { orientation } : {}),\n ...(density !== undefined ? { density } : {})\n };\n}\n\nexport function buildExifApp1Segment(options: {\n readonly orientation?: number;\n readonly density?: number;\n}): Uint8Array {\n const orientation = options.orientation ?? 1;\n const density = Math.max(1, Math.round(options.density ?? 72));\n // Exif\\0\\0 (6) + TIFF header (8) + count (2) + 4 entries (48) + nextIFD (4) + 2 rationals (16) = 84 bytes\n const payload = new Uint8Array(84);\n const view = new DataView(payload.buffer);\n // \"Exif\\0\\0\"\n payload[0] = 0x45;\n payload[1] = 0x78;\n payload[2] = 0x69;\n payload[3] = 0x66;\n payload[4] = 0x00;\n payload[5] = 0x00;\n // Little-endian TIFF header at offset 6\n const tiff = 6;\n payload[tiff] = 0x49;\n payload[tiff + 1] = 0x49;\n view.setUint16(tiff + 2, 0x002a, true);\n view.setUint32(tiff + 4, 8, true); // IFD0 starts at offset 8 from tiff\n\n const ifd = tiff + 8;\n view.setUint16(ifd, 4, true); // 4 entries\n\n const writeEntry = (idx: number, tag: number, type: number, count: number, valueOrOffset: number) => {\n const p = ifd + 2 + idx * 12;\n view.setUint16(p, tag, true);\n view.setUint16(p + 2, type, true);\n view.setUint32(p + 4, count, true);\n if (type === 3 && count === 1) {\n view.setUint16(p + 8, valueOrOffset, true);\n view.setUint16(p + 10, 0, true);\n } else {\n view.setUint32(p + 8, valueOrOffset, true);\n }\n };\n\n const ratOffsetX = 8 + 2 + 4 * 12 + 4; // 62\n const ratOffsetY = ratOffsetX + 8; // 70\n writeEntry(0, 0x0112, 3, 1, orientation); // Orientation\n writeEntry(1, 0x011a, 5, 1, ratOffsetX); // XResolution\n writeEntry(2, 0x011b, 5, 1, ratOffsetY); // YResolution\n writeEntry(3, 0x0128, 3, 1, 2); // ResolutionUnit = inches\n\n view.setUint32(ifd + 2 + 4 * 12, 0, true); // next IFD = 0\n view.setUint32(tiff + ratOffsetX, density, true);\n view.setUint32(tiff + ratOffsetX + 4, 1, true);\n view.setUint32(tiff + ratOffsetY, density, true);\n view.setUint32(tiff + ratOffsetY + 4, 1, true);\n\n return payload;\n}\n", "import { deflate, inflate } from \"pako\";\nimport type { ImageMetadata, RgbaImage } from \"../ast.js\";\nimport { buildExifApp1Segment, parseExifBuffer } from \"./exif.js\";\n\nconst PNG_SIGNATURE = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst CRC_TABLE = (() => {\n const table = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[n] = c >>> 0;\n }\n return table;\n})();\n\nfunction crc32(typeBytes: Uint8Array, data: Uint8Array): number {\n let c = 0xffffffff;\n for (let i = 0; i < typeBytes.length; i++) {\n c = CRC_TABLE[(c ^ typeBytes[i]!) & 0xff]! ^ (c >>> 8);\n }\n for (let i = 0; i < data.length; i++) {\n c = CRC_TABLE[(c ^ data[i]!) & 0xff]! ^ (c >>> 8);\n }\n return (c ^ 0xffffffff) >>> 0;\n}\n\nfunction paethPredictor(a: number, b: number, c: number): number {\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n if (pa <= pb && pa <= pc) return a;\n if (pb <= pc) return b;\n return c;\n}\n\nexport function isPngBytes(bytes: Uint8Array): boolean {\n if (bytes.length < 8) return false;\n for (let i = 0; i < 8; i++) {\n if (bytes[i] !== PNG_SIGNATURE[i]) return false;\n }\n return true;\n}\n\nexport function readPngMetadata(bytes: Uint8Array): ImageMetadata {\n if (!isPngBytes(bytes) || bytes.length < 24) {\n throw new Error(\"Invalid PNG header\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let width = 0;\n let height = 0;\n let bitDepth = 8;\n let colorType = 6;\n let interlace = 0;\n let density = 72;\n let hasTrns = false;\n let orientation: number | undefined;\n\n let pos = 8;\n while (pos + 8 <= bytes.length) {\n const len = view.getUint32(pos, false);\n const type = String.fromCharCode(\n bytes[pos + 4]!,\n bytes[pos + 5]!,\n bytes[pos + 6]!,\n bytes[pos + 7]!\n );\n const dataStart = pos + 8;\n if (dataStart + len > bytes.length) break;\n const chunk = bytes.subarray(dataStart, dataStart + len);\n\n if (type === \"IHDR\" && len >= 13) {\n width = view.getUint32(dataStart, false);\n height = view.getUint32(dataStart + 4, false);\n bitDepth = chunk[8]!;\n colorType = chunk[9]!;\n interlace = chunk[12]!;\n } else if (type === \"pHYs\" && len >= 9) {\n const ppuX = view.getUint32(dataStart, false);\n const unit = chunk[8]!;\n if (unit === 1 && ppuX > 0) {\n density = Math.max(1, Math.round(ppuX * 0.0254));\n } else if (ppuX > 0) {\n density = ppuX;\n }\n } else if (type === \"tRNS\") {\n hasTrns = true;\n } else if (type === \"eXIf\" && len >= 8) {\n const exif = parseExifBuffer(chunk);\n if (exif.orientation !== undefined) orientation = exif.orientation;\n if (exif.density !== undefined) density = exif.density;\n } else if (type === \"IDAT\" || type === \"IEND\") {\n if (type === \"IEND\") break;\n }\n pos = dataStart + len + 4;\n }\n\n const channels: 1 | 2 | 3 | 4 =\n colorType === 6\n ? 4\n : colorType === 4\n ? 2\n : colorType === 2\n ? hasTrns\n ? 4\n : 3\n : colorType === 3\n ? hasTrns\n ? 4\n : 3\n : hasTrns\n ? 2\n : 1;\n\n const hasAlpha = colorType === 6 || colorType === 4 || hasTrns;\n const space = colorType === 0 || colorType === 4 ? \"b-w\" : \"srgb\";\n const depth = bitDepth === 16 ? \"ushort\" : bitDepth < 8 ? \"bit\" : \"uchar\";\n\n return {\n format: \"png\",\n width,\n height,\n space,\n channels,\n depth,\n density,\n hasAlpha,\n ...(orientation !== undefined ? { orientation } : {}),\n isProgressive: interlace === 1,\n size: bytes.byteLength\n };\n}\n\nexport function decodePngImage(bytes: Uint8Array): RgbaImage {\n const meta = readPngMetadata(bytes);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const width = meta.width;\n const height = meta.height;\n if (width <= 0 || height <= 0) {\n throw new Error(`Invalid PNG dimensions: ${width}x${height}`);\n }\n\n let bitDepth = 8;\n let colorType = 6;\n let palette: Uint8Array | undefined;\n let trns: Uint8Array | undefined;\n const idatChunks: Uint8Array[] = [];\n\n let pos = 8;\n while (pos + 8 <= bytes.length) {\n const len = view.getUint32(pos, false);\n const type = String.fromCharCode(\n bytes[pos + 4]!,\n bytes[pos + 5]!,\n bytes[pos + 6]!,\n bytes[pos + 7]!\n );\n const dataStart = pos + 8;\n if (dataStart + len > bytes.length) break;\n const chunk = bytes.subarray(dataStart, dataStart + len);\n if (type === \"IHDR\" && len >= 13) {\n bitDepth = chunk[8]!;\n colorType = chunk[9]!;\n } else if (type === \"PLTE\") {\n palette = chunk;\n } else if (type === \"tRNS\") {\n trns = chunk;\n } else if (type === \"IDAT\") {\n idatChunks.push(chunk);\n } else if (type === \"IEND\") {\n break;\n }\n pos = dataStart + len + 4;\n }\n\n const totalIdat = idatChunks.reduce((sum, c) => sum + c.length, 0);\n const compressed = new Uint8Array(totalIdat);\n let offset = 0;\n for (const c of idatChunks) {\n compressed.set(c, offset);\n offset += c.length;\n }\n const inflated = inflate(compressed);\n\n const samplesPerPixel =\n colorType === 6 ? 4 : colorType === 4 ? 2 : colorType === 2 ? 3 : 1;\n const bitsPerPixel = samplesPerPixel * bitDepth;\n const bytesPerPixel = Math.max(1, Math.ceil(bitsPerPixel / 8));\n const rgba = new Uint8Array(width * height * 4);\n\n const decodePass = (\n subW: number,\n subH: number,\n inOffset: number,\n x0: number,\n y0: number,\n dx: number,\n dy: number\n ): number => {\n if (subW <= 0 || subH <= 0) return inOffset;\n const rowBytes = Math.ceil((subW * bitsPerPixel) / 8);\n const rawData = new Uint8Array(subH * rowBytes);\n let curOffset = inOffset;\n\n for (let y = 0; y < subH; y++) {\n const filterType = inflated[curOffset++] ?? 0;\n const dstRowOffset = y * rowBytes;\n const prevRowOffset = (y - 1) * rowBytes;\n for (let x = 0; x < rowBytes; x++) {\n const raw = inflated[curOffset++] ?? 0;\n const a = x >= bytesPerPixel ? rawData[dstRowOffset + x - bytesPerPixel]! : 0;\n const b = y > 0 ? rawData[prevRowOffset + x]! : 0;\n const c = y > 0 && x >= bytesPerPixel ? rawData[prevRowOffset + x - bytesPerPixel]! : 0;\n let recon = raw;\n if (filterType === 1) recon = (raw + a) & 0xff;\n else if (filterType === 2) recon = (raw + b) & 0xff;\n else if (filterType === 3) recon = (raw + ((a + b) >>> 1)) & 0xff;\n else if (filterType === 4) recon = (raw + paethPredictor(a, b, c)) & 0xff;\n rawData[dstRowOffset + x] = recon;\n }\n }\n\n for (let y = 0; y < subH; y++) {\n const rowStart = y * rowBytes;\n const dstY = y0 + y * dy;\n for (let x = 0; x < subW; x++) {\n const dstX = x0 + x * dx;\n const outIdx = (dstY * width + dstX) * 4;\n if (bitDepth === 8) {\n if (colorType === 6) {\n const idx = rowStart + x * 4;\n rgba[outIdx] = rawData[idx]!;\n rgba[outIdx + 1] = rawData[idx + 1]!;\n rgba[outIdx + 2] = rawData[idx + 2]!;\n rgba[outIdx + 3] = rawData[idx + 3]!;\n } else if (colorType === 2) {\n const idx = rowStart + x * 3;\n const r = rawData[idx]!;\n const g = rawData[idx + 1]!;\n const b = rawData[idx + 2]!;\n let a = 255;\n if (trns && trns.length >= 6 && r === trns[1] && g === trns[3] && b === trns[5]) a = 0;\n rgba[outIdx] = r;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = b;\n rgba[outIdx + 3] = a;\n } else if (colorType === 4) {\n const idx = rowStart + x * 2;\n const g = rawData[idx]!;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = rawData[idx + 1]!;\n } else if (colorType === 0) {\n const g = rawData[rowStart + x]!;\n const a = trns && trns.length >= 2 && g === trns[1] ? 0 : 255;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = a;\n } else if (colorType === 3) {\n const pIdx = rawData[rowStart + x]!;\n rgba[outIdx] = palette ? (palette[pIdx * 3] ?? 0) : 0;\n rgba[outIdx + 1] = palette ? (palette[pIdx * 3 + 1] ?? 0) : 0;\n rgba[outIdx + 2] = palette ? (palette[pIdx * 3 + 2] ?? 0) : 0;\n rgba[outIdx + 3] = trns && pIdx < trns.length ? trns[pIdx]! : 255;\n }\n } else if (bitDepth === 16) {\n if (colorType === 6) {\n const idx = rowStart + x * 8;\n rgba[outIdx] = rawData[idx]!;\n rgba[outIdx + 1] = rawData[idx + 2]!;\n rgba[outIdx + 2] = rawData[idx + 4]!;\n rgba[outIdx + 3] = rawData[idx + 6]!;\n } else if (colorType === 2) {\n const idx = rowStart + x * 6;\n let a = 255;\n if (\n trns &&\n trns.length >= 6 &&\n rawData[idx] === trns[0] &&\n rawData[idx + 1] === trns[1] &&\n rawData[idx + 2] === trns[2] &&\n rawData[idx + 3] === trns[3] &&\n rawData[idx + 4] === trns[4] &&\n rawData[idx + 5] === trns[5]\n ) {\n a = 0;\n }\n rgba[outIdx] = rawData[idx]!;\n rgba[outIdx + 1] = rawData[idx + 2]!;\n rgba[outIdx + 2] = rawData[idx + 4]!;\n rgba[outIdx + 3] = a;\n } else if (colorType === 4) {\n const idx = rowStart + x * 4;\n const g = rawData[idx]!;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = rawData[idx + 2]!;\n } else {\n const idx = rowStart + x * 2;\n const g = rawData[idx]!;\n const a =\n trns && trns.length >= 2 && rawData[idx] === trns[0] && rawData[idx + 1] === trns[1]\n ? 0\n : 255;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = a;\n }\n } else {\n const pixelsPerByte = 8 / bitDepth;\n const byteIndex = rowStart + Math.floor(x / pixelsPerByte);\n const shift = (pixelsPerByte - 1 - (x % pixelsPerByte)) * bitDepth;\n const mask = (1 << bitDepth) - 1;\n const sample = (rawData[byteIndex]! >>> shift) & mask;\n if (colorType === 3) {\n rgba[outIdx] = palette ? (palette[sample * 3] ?? 0) : 0;\n rgba[outIdx + 1] = palette ? (palette[sample * 3 + 1] ?? 0) : 0;\n rgba[outIdx + 2] = palette ? (palette[sample * 3 + 2] ?? 0) : 0;\n rgba[outIdx + 3] = trns && sample < trns.length ? trns[sample]! : 255;\n } else {\n const scaled = Math.round((sample * 255) / mask);\n const a = trns && trns.length >= 2 && sample === trns[1] ? 0 : 255;\n rgba[outIdx] = scaled;\n rgba[outIdx + 1] = scaled;\n rgba[outIdx + 2] = scaled;\n rgba[outIdx + 3] = a;\n }\n }\n }\n }\n return curOffset;\n };\n\n if (meta.isProgressive) {\n const passes = [\n { x0: 0, y0: 0, dx: 8, dy: 8 },\n { x0: 4, y0: 0, dx: 8, dy: 8 },\n { x0: 0, y0: 4, dx: 4, dy: 8 },\n { x0: 2, y0: 0, dx: 4, dy: 4 },\n { x0: 0, y0: 2, dx: 2, dy: 4 },\n { x0: 1, y0: 0, dx: 2, dy: 2 },\n { x0: 0, y0: 1, dx: 1, dy: 2 }\n ];\n let inOff = 0;\n for (const p of passes) {\n const pw = Math.ceil((width - p.x0) / p.dx);\n const ph = Math.ceil((height - p.y0) / p.dy);\n inOff = decodePass(pw, ph, inOff, p.x0, p.y0, p.dx, p.dy);\n }\n } else {\n decodePass(width, height, 0, 0, 0, 1, 1);\n }\n\n return {\n width,\n height,\n data: rgba,\n format: \"png\",\n space: meta.space,\n channels: meta.channels,\n depth: meta.depth,\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {}),\n ...(meta.isProgressive !== undefined ? { isProgressive: meta.isProgressive } : {})\n };\n}\n\nfunction makeChunk(type: string, data: Uint8Array): Uint8Array {\n const typeBytes = new Uint8Array([\n type.charCodeAt(0),\n type.charCodeAt(1),\n type.charCodeAt(2),\n type.charCodeAt(3)\n ]);\n const out = new Uint8Array(12 + data.length);\n const view = new DataView(out.buffer);\n view.setUint32(0, data.length, false);\n out.set(typeBytes, 4);\n out.set(data, 8);\n view.setUint32(8 + data.length, crc32(typeBytes, data), false);\n return out;\n}\n\nexport function encodePngImage(\n img: RgbaImage,\n options?: {\n readonly compressionLevel?: number;\n readonly density?: number;\n readonly orientation?: number;\n readonly forceOpaque?: boolean;\n }\n): Uint8Array {\n const { width, height, data } = img;\n const density = options?.density ?? img.density ?? 72;\n let hasAlpha = Boolean(img.hasAlpha || img.channels === 4 || img.channels === 2);\n if (options?.forceOpaque) {\n hasAlpha = false;\n } else if (!hasAlpha) {\n for (let i = 3; i < data.length; i += 4) {\n if (data[i]! < 255) {\n hasAlpha = true;\n break;\n }\n }\n }\n\n const isBw = img.space === \"b-w\" || img.channels === 1 || img.channels === 2;\n const colorType = isBw ? (hasAlpha ? 4 : 0) : (hasAlpha ? 6 : 2);\n const bpp = isBw ? (hasAlpha ? 2 : 1) : (hasAlpha ? 4 : 3);\n const rowBytes = width * bpp;\n const raw = new Uint8Array(height * (rowBytes + 1));\n\n for (let y = 0; y < height; y++) {\n const dstRow = y * (rowBytes + 1);\n raw[dstRow] = 1;\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n const prevIdx = x > 0 ? (y * width + (x - 1)) * 4 : -1;\n const outCol = dstRow + 1 + x * bpp;\n if (isBw) {\n const g = data[srcIdx]!;\n const pg = prevIdx >= 0 ? data[prevIdx]! : 0;\n raw[outCol] = (g - pg) & 0xff;\n if (hasAlpha) {\n const a = data[srcIdx + 3]!;\n const pa = prevIdx >= 0 ? data[prevIdx + 3]! : 0;\n raw[outCol + 1] = (a - pa) & 0xff;\n }\n } else {\n const r = data[srcIdx]!;\n const g = data[srcIdx + 1]!;\n const b = data[srcIdx + 2]!;\n const pr = prevIdx >= 0 ? data[prevIdx]! : 0;\n const pg = prevIdx >= 0 ? data[prevIdx + 1]! : 0;\n const pb = prevIdx >= 0 ? data[prevIdx + 2]! : 0;\n raw[outCol] = (r - pr) & 0xff;\n raw[outCol + 1] = (g - pg) & 0xff;\n raw[outCol + 2] = (b - pb) & 0xff;\n if (hasAlpha) {\n const a = data[srcIdx + 3]!;\n const pa = prevIdx >= 0 ? data[prevIdx + 3]! : 0;\n raw[outCol + 3] = (a - pa) & 0xff;\n }\n }\n }\n }\n\n const level = Math.max(0, Math.min(9, options?.compressionLevel ?? 6)) as\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9;\n const compressed = deflate(raw, { level });\n\n const ihdr = new Uint8Array(13);\n const ihdrView = new DataView(ihdr.buffer);\n ihdrView.setUint32(0, width, false);\n ihdrView.setUint32(4, height, false);\n ihdr[8] = 8;\n ihdr[9] = colorType;\n ihdr[10] = 0;\n ihdr[11] = 0;\n ihdr[12] = 0;\n\n const phys = new Uint8Array(9);\n const physView = new DataView(phys.buffer);\n const ppu = Math.round(density / 0.0254);\n physView.setUint32(0, ppu, false);\n physView.setUint32(4, ppu, false);\n phys[8] = 1; // meter\n\n const orientation = options?.orientation ?? img.orientation;\n const exifChunk = orientation !== undefined\n ? [makeChunk(\"eXIf\", buildExifApp1Segment({ orientation, density }).subarray(6))]\n : [];\n const chunks = [\n PNG_SIGNATURE,\n makeChunk(\"IHDR\", ihdr),\n makeChunk(\"pHYs\", phys),\n ...exifChunk,\n makeChunk(\"IDAT\", compressed),\n makeChunk(\"IEND\", new Uint8Array(0))\n ];\n\n const totalLength = chunks.reduce((s, c) => s + c.length, 0);\n const out = new Uint8Array(totalLength);\n let pos = 0;\n for (const c of chunks) {\n out.set(c, pos);\n pos += c.length;\n }\n return out;\n}\n", "import type { ImageMetadata, RgbaImage } from \"../ast.js\";\nimport { buildExifApp1Segment, parseExifBuffer } from \"./exif.js\";\n\nconst ZIGZAG = new Uint8Array([\n 0, 1, 8, 16, 9, 2, 3, 10,\n 17, 24, 32, 25, 18, 11, 4, 5,\n 12, 19, 26, 33, 40, 48, 41, 34,\n 27, 20, 13, 6, 7, 14, 21, 28,\n 35, 42, 49, 56, 57, 50, 43, 36,\n 29, 22, 15, 23, 30, 37, 44, 51,\n 58, 59, 52, 45, 38, 31, 39, 46,\n 53, 60, 61, 54, 47, 55, 62, 63\n]);\n\nconst STD_LUMA_QUANT = new Uint8Array([\n 16, 11, 10, 16, 24, 40, 51, 61,\n 12, 12, 14, 19, 26, 58, 60, 55,\n 14, 13, 16, 24, 40, 57, 69, 56,\n 14, 17, 22, 29, 51, 87, 80, 62,\n 18, 22, 37, 56, 68, 109, 103, 77,\n 24, 35, 55, 64, 81, 104, 113, 92,\n 49, 64, 78, 87, 103, 121, 120, 101,\n 72, 92, 95, 98, 112, 100, 103, 99\n]);\n\nconst STD_CHROMA_QUANT = new Uint8Array([\n 17, 18, 24, 47, 99, 99, 99, 99,\n 18, 21, 26, 66, 99, 99, 99, 99,\n 24, 26, 56, 99, 99, 99, 99, 99,\n 47, 66, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99\n]);\n\nconst STD_DC_LUMA_NRCODES = new Uint8Array([0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]);\nconst STD_DC_LUMA_VALUES = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);\nconst STD_DC_CHROMA_NRCODES = new Uint8Array([0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]);\nconst STD_DC_CHROMA_VALUES = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);\n\nconst STD_AC_LUMA_NRCODES = new Uint8Array([0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d]);\nconst STD_AC_LUMA_VALUES = new Uint8Array([\n 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,\n 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,\n 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,\n 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,\n 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,\n 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,\n 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,\n 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,\n 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,\n 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n 0xf9, 0xfa\n]);\n\nconst STD_AC_CHROMA_NRCODES = new Uint8Array([0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77]);\nconst STD_AC_CHROMA_VALUES = new Uint8Array([\n 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,\n 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,\n 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,\n 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,\n 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,\n 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,\n 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,\n 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,\n 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,\n 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n 0xf9, 0xfa\n]);\n\nconst COS_TABLE = (() => {\n const table = new Float64Array(64);\n for (let u = 0; u < 8; u++) {\n const cu = u === 0 ? Math.SQRT1_2 : 1;\n for (let x = 0; x < 8; x++) {\n table[u * 8 + x] = cu * Math.cos(((2 * x + 1) * u * Math.PI) / 16);\n }\n }\n return table;\n})();\n\nexport function isJpegBytes(bytes: Uint8Array): boolean {\n return bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff;\n}\n\nexport function readJpegMetadata(bytes: Uint8Array): ImageMetadata {\n if (!isJpegBytes(bytes)) {\n throw new Error(\"Invalid JPEG signature\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let width = 0;\n let height = 0;\n let channels: 1 | 2 | 3 | 4 = 3;\n let isProgressive = false;\n let density = 72;\n let orientation: number | undefined;\n\n let pos = 2;\n while (pos + 4 <= bytes.length) {\n if (bytes[pos] !== 0xff) {\n pos++;\n continue;\n }\n while (pos < bytes.length && bytes[pos] === 0xff) pos++;\n if (pos >= bytes.length) break;\n const marker = bytes[pos]!;\n pos++;\n if (marker === 0xd8 || marker === 0xd9 || (marker >= 0xd0 && marker <= 0xd7) || marker === 0x01) {\n if (marker === 0xd9) break;\n continue;\n }\n if (pos + 2 > bytes.length) break;\n const segLen = view.getUint16(pos, false);\n if (segLen < 2 || pos + segLen > bytes.length) break;\n const payload = bytes.subarray(pos + 2, pos + segLen);\n\n if (marker === 0xe0 && payload.length >= 12) {\n // JFIF APP0\n if (\n payload[0] === 0x4a &&\n payload[1] === 0x46 &&\n payload[2] === 0x49 &&\n payload[3] === 0x46 &&\n payload[4] === 0x00\n ) {\n const units = payload[7]!;\n const xDensity = (payload[8]! << 8) | payload[9]!;\n if (xDensity > 0) {\n if (units === 1) density = xDensity;\n else if (units === 2) density = Math.round(xDensity * 2.54);\n }\n }\n } else if (marker === 0xe1 && payload.length >= 8) {\n // EXIF APP1\n const exif = parseExifBuffer(payload);\n if (exif.orientation !== undefined) orientation = exif.orientation;\n if (exif.density !== undefined) density = exif.density;\n } else if (\n marker === 0xc0 ||\n marker === 0xc1 ||\n marker === 0xc2\n ) {\n isProgressive = marker === 0xc2;\n height = (payload[1]! << 8) | payload[2]!;\n width = (payload[3]! << 8) | payload[4]!;\n const comps = payload[5]!;\n channels = comps === 1 ? 1 : comps === 4 ? 4 : 3;\n break;\n }\n pos += segLen;\n }\n\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid JPEG dimensions\");\n }\n\n return {\n format: \"jpeg\",\n width,\n height,\n space: channels === 1 ? \"b-w\" : channels === 4 ? \"cmyk\" : \"srgb\",\n channels,\n depth: \"uchar\",\n density,\n hasAlpha: false,\n ...(orientation !== undefined ? { orientation } : {}),\n isProgressive,\n size: bytes.byteLength\n };\n}\n\ninterface HuffmanNode {\n children?: [HuffmanNode | undefined, HuffmanNode | undefined];\n symbol?: number;\n}\n\nfunction buildHuffmanTree(counts: Uint8Array, symbols: Uint8Array): HuffmanNode {\n const root: HuffmanNode = { children: [undefined, undefined] };\n let symbolIdx = 0;\n let level: HuffmanNode[] = [root];\n for (let len = 0; len < 16; len++) {\n const nextLevel: HuffmanNode[] = [];\n for (const node of level) {\n if (!node.children) node.children = [undefined, undefined];\n for (let b = 0; b < 2; b++) {\n const child: HuffmanNode = {};\n node.children[b] = child;\n nextLevel.push(child);\n }\n }\n const count = counts[len] ?? 0;\n for (let i = 0; i < count && i < nextLevel.length; i++) {\n nextLevel[i]!.symbol = symbols[symbolIdx++]!;\n }\n level = nextLevel.slice(count);\n }\n return root;\n}\n\nfunction idct8x8(coeffs: Int32Array, quant: Uint16Array, out: Uint8Array): void {\n const dequant = new Float64Array(64);\n for (let i = 0; i < 64; i++) {\n dequant[ZIGZAG[i]!] = coeffs[i]! * quant[i]!;\n }\n const temp = new Float64Array(64);\n for (let y = 0; y < 8; y++) {\n for (let x = 0; x < 8; x++) {\n let sum = 0;\n for (let u = 0; u < 8; u++) {\n sum += dequant[y * 8 + u]! * COS_TABLE[u * 8 + x]!;\n }\n temp[y * 8 + x] = sum * 0.5;\n }\n }\n for (let x = 0; x < 8; x++) {\n for (let y = 0; y < 8; y++) {\n let sum = 0;\n for (let v = 0; v < 8; v++) {\n sum += temp[v * 8 + x]! * COS_TABLE[v * 8 + y]!;\n }\n const val = Math.round(sum * 0.5 + 128);\n out[y * 8 + x] = val < 0 ? 0 : val > 255 ? 255 : val;\n }\n }\n}\n\ninterface ComponentSpec {\n id: number;\n h: number;\n v: number;\n qId: number;\n dcId: number;\n acId: number;\n dcPred: number;\n blocksX: number;\n blocksY: number;\n blocks: Int32Array[];\n}\n\nexport function decodeJpegImage(bytes: Uint8Array): RgbaImage {\n const meta = readJpegMetadata(bytes);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\n const quantTables: Uint16Array[] = [\n new Uint16Array(STD_LUMA_QUANT),\n new Uint16Array(STD_CHROMA_QUANT),\n new Uint16Array(STD_CHROMA_QUANT),\n new Uint16Array(STD_CHROMA_QUANT)\n ];\n const dcTrees: HuffmanNode[] = [\n buildHuffmanTree(STD_DC_LUMA_NRCODES.subarray(1), STD_DC_LUMA_VALUES),\n buildHuffmanTree(STD_DC_CHROMA_NRCODES.subarray(1), STD_DC_CHROMA_VALUES),\n buildHuffmanTree(STD_DC_CHROMA_NRCODES.subarray(1), STD_DC_CHROMA_VALUES),\n buildHuffmanTree(STD_DC_CHROMA_NRCODES.subarray(1), STD_DC_CHROMA_VALUES)\n ];\n const acTrees: HuffmanNode[] = [\n buildHuffmanTree(STD_AC_LUMA_NRCODES.subarray(1), STD_AC_LUMA_VALUES),\n buildHuffmanTree(STD_AC_CHROMA_NRCODES.subarray(1), STD_AC_CHROMA_VALUES),\n buildHuffmanTree(STD_AC_CHROMA_NRCODES.subarray(1), STD_AC_CHROMA_VALUES),\n buildHuffmanTree(STD_AC_CHROMA_NRCODES.subarray(1), STD_AC_CHROMA_VALUES)\n ];\n\n let width = 0;\n let height = 0;\n let maxH = 1;\n let maxV = 1;\n let mcusX = 0;\n let mcusY = 0;\n let restartInterval = 0;\n const components: ComponentSpec[] = [];\n\n let pos = 2;\n while (pos + 2 <= bytes.length) {\n if (bytes[pos] !== 0xff) {\n pos++;\n continue;\n }\n while (pos < bytes.length && bytes[pos] === 0xff) pos++;\n if (pos >= bytes.length) break;\n const marker = bytes[pos]!;\n pos++;\n if (marker === 0xd9) break;\n if (marker === 0xd8 || (marker >= 0xd0 && marker <= 0xd7) || marker === 0x01) continue;\n if (pos + 2 > bytes.length) break;\n const segLen = view.getUint16(pos, false);\n if (segLen < 2 || pos + segLen > bytes.length) break;\n const payload = bytes.subarray(pos + 2, pos + segLen);\n\n if (marker === 0xdb) {\n // DQT\n let qPos = 0;\n while (qPos < payload.length) {\n const info = payload[qPos++]!;\n const precision = info >>> 4;\n const qId = info & 0x0f;\n const table = new Uint16Array(64);\n for (let i = 0; i < 64; i++) {\n table[i] = precision === 0 ? payload[qPos++]! : (payload[qPos++]! << 8) | payload[qPos++]!;\n }\n quantTables[qId] = table;\n }\n } else if (marker === 0xc4) {\n // DHT\n let hPos = 0;\n while (hPos < payload.length) {\n const info = payload[hPos++]!;\n const tableClass = info >>> 4;\n const hId = info & 0x0f;\n const counts = payload.subarray(hPos, hPos + 16);\n hPos += 16;\n let totalSymbols = 0;\n for (let i = 0; i < 16; i++) totalSymbols += counts[i]!;\n const symbols = payload.subarray(hPos, hPos + totalSymbols);\n hPos += totalSymbols;\n const tree = buildHuffmanTree(counts, symbols);\n if (tableClass === 0) dcTrees[hId] = tree;\n else acTrees[hId] = tree;\n }\n } else if (marker === 0xdd && payload.length >= 2) {\n // DRI\n restartInterval = (payload[0]! << 8) | payload[1]!;\n } else if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) {\n height = (payload[1]! << 8) | payload[2]!;\n width = (payload[3]! << 8) | payload[4]!;\n const numComps = payload[5]!;\n components.length = 0;\n maxH = 1;\n maxV = 1;\n for (let i = 0; i < numComps; i++) {\n const id = payload[6 + i * 3]!;\n const hv = payload[6 + i * 3 + 1]!;\n const h = hv >>> 4;\n const v = hv & 0x0f;\n const qId = payload[6 + i * 3 + 2]!;\n if (h > maxH) maxH = h;\n if (v > maxV) maxV = v;\n components.push({\n id,\n h,\n v,\n qId,\n dcId: 0,\n acId: 0,\n dcPred: 0,\n blocksX: 0,\n blocksY: 0,\n blocks: []\n });\n }\n mcusX = Math.ceil(width / (maxH * 8));\n mcusY = Math.ceil(height / (maxV * 8));\n for (const comp of components) {\n comp.blocksX = mcusX * comp.h;\n comp.blocksY = mcusY * comp.v;\n comp.blocks = Array.from({ length: comp.blocksX * comp.blocksY }, () => new Int32Array(64));\n }\n } else if (marker === 0xda) {\n // SOS\n const scanCompsCount = payload[0]!;\n const scanComps: ComponentSpec[] = [];\n for (let i = 0; i < scanCompsCount; i++) {\n const compId = payload[1 + i * 2]!;\n const tdta = payload[1 + i * 2 + 1]!;\n const comp = components.find(c => c.id === compId) ?? components[i];\n if (comp) {\n comp.dcId = tdta >>> 4;\n comp.acId = tdta & 0x0f;\n scanComps.push(comp);\n }\n }\n const ssPos = 1 + scanCompsCount * 2;\n const spectralStart = payload[ssPos] ?? 0;\n const spectralEnd = payload[ssPos + 1] ?? 63;\n const ahAl = payload[ssPos + 2] ?? 0;\n const approxHigh = ahAl >>> 4;\n const approxLow = ahAl & 0x0f;\n\n // Decode entropy-coded data starting after SOS segment\n let scanPos = pos + segLen;\n let bitBuf = 0;\n let bitCount = 0;\n let eobRun = 0;\n\n const readBit = (): number => {\n if (bitCount === 0) {\n if (scanPos >= bytes.length) return 0;\n let b = bytes[scanPos++]!;\n if (b === 0xff) {\n while (scanPos < bytes.length && bytes[scanPos] === 0xff) scanPos++;\n const next = bytes[scanPos] ?? 0;\n if (next === 0x00) {\n scanPos++;\n } else if (next >= 0xd0 && next <= 0xd7) {\n scanPos++;\n b = bytes[scanPos++] ?? 0;\n } else {\n return 0;\n }\n }\n bitBuf = b;\n bitCount = 8;\n }\n const bit = (bitBuf >>> (bitCount - 1)) & 1;\n bitCount--;\n return bit;\n };\n\n const readBits = (n: number): number => {\n let val = 0;\n for (let i = 0; i < n; i++) {\n val = (val << 1) | readBit();\n }\n return val;\n };\n\n const receiveExtend = (n: number): number => {\n if (n === 0) return 0;\n const v = readBits(n);\n return v < 1 << (n - 1) ? v + (-1 << n) + 1 : v;\n };\n\n const decodeSymbol = (tree: HuffmanNode): number => {\n let node: HuffmanNode | undefined = tree;\n while (node && node.symbol === undefined) {\n const bit = readBit();\n node = node.children?.[bit];\n }\n return node?.symbol ?? 0;\n };\n\n const decodeBlockBaseline = (comp: ComponentSpec, block: Int32Array) => {\n const dcTree = dcTrees[comp.dcId] ?? dcTrees[0]!;\n const acTree = acTrees[comp.acId] ?? acTrees[0]!;\n const t = decodeSymbol(dcTree);\n const diff = receiveExtend(t);\n comp.dcPred += diff;\n block[0] = comp.dcPred;\n let k = 1;\n while (k < 64) {\n const rs = decodeSymbol(acTree);\n const r = rs >>> 4;\n const s = rs & 0x0f;\n if (s === 0) {\n if (r === 15) {\n k += 16;\n continue;\n }\n break;\n }\n k += r;\n if (k < 64) {\n block[k] = receiveExtend(s);\n }\n k++;\n }\n };\n\n const decodeBlockProgressive = (comp: ComponentSpec, block: Int32Array) => {\n if (spectralStart === 0) {\n if (approxHigh === 0) {\n const dcTree = dcTrees[comp.dcId] ?? dcTrees[0]!;\n const t = decodeSymbol(dcTree);\n const diff = receiveExtend(t);\n comp.dcPred += diff;\n block[0] = comp.dcPred << approxLow;\n } else {\n if (readBit() !== 0) {\n block[0] = (block[0] ?? 0) | (1 << approxLow);\n }\n }\n } else if (approxHigh === 0) {\n if (eobRun > 0) {\n eobRun--;\n return;\n }\n const acTree = acTrees[comp.acId] ?? acTrees[0]!;\n for (let k = spectralStart; k <= spectralEnd; k++) {\n const rs = decodeSymbol(acTree);\n const r = rs >>> 4;\n const s = rs & 0x0f;\n if (s === 0) {\n if (r < 15) {\n eobRun = (1 << r) + readBits(r) - 1;\n break;\n }\n k += 15;\n } else {\n k += r;\n if (k <= spectralEnd) {\n block[k] = receiveExtend(s) << approxLow;\n }\n }\n }\n }\n };\n\n let mcuCounter = 0;\n if (scanComps.length === 1 && (spectralStart > 0 || scanCompsCount === 1 && components.length > 1)) {\n const comp = scanComps[0]!;\n const blocksCols = Math.ceil(width / (8 * (maxH / comp.h)));\n const blocksRows = Math.ceil(height / (8 * (maxV / comp.v)));\n for (let by = 0; by < blocksRows; by++) {\n for (let bx = 0; bx < blocksCols; bx++) {\n if (restartInterval > 0 && mcuCounter > 0 && mcuCounter % restartInterval === 0) {\n comp.dcPred = 0;\n eobRun = 0;\n bitCount = 0;\n }\n const block = comp.blocks[by * comp.blocksX + bx]!;\n if (meta.isProgressive) decodeBlockProgressive(comp, block);\n else decodeBlockBaseline(comp, block);\n mcuCounter++;\n }\n }\n } else {\n for (let my = 0; my < mcusY; my++) {\n for (let mx = 0; mx < mcusX; mx++) {\n if (restartInterval > 0 && mcuCounter > 0 && mcuCounter % restartInterval === 0) {\n for (const c of scanComps) c.dcPred = 0;\n eobRun = 0;\n bitCount = 0;\n }\n for (const comp of scanComps) {\n for (let vy = 0; vy < comp.v; vy++) {\n for (let hx = 0; hx < comp.h; hx++) {\n const bx = mx * comp.h + hx;\n const by = my * comp.v + vy;\n const block = comp.blocks[by * comp.blocksX + bx]!;\n if (meta.isProgressive) decodeBlockProgressive(comp, block);\n else decodeBlockBaseline(comp, block);\n }\n }\n }\n mcuCounter++;\n }\n }\n }\n\n pos = scanPos;\n continue;\n }\n pos += segLen;\n }\n\n const compPixels = components.map(comp => {\n const pixels = new Uint8Array(comp.blocksX * 8 * comp.blocksY * 8);\n const blockOut = new Uint8Array(64);\n const quant = quantTables[comp.qId] ?? quantTables[0]!;\n for (let by = 0; by < comp.blocksY; by++) {\n for (let bx = 0; bx < comp.blocksX; bx++) {\n idct8x8(comp.blocks[by * comp.blocksX + bx]!, quant, blockOut);\n for (let y = 0; y < 8; y++) {\n const dstOffset = (by * 8 + y) * (comp.blocksX * 8) + bx * 8;\n for (let x = 0; x < 8; x++) {\n pixels[dstOffset + x] = blockOut[y * 8 + x]!;\n }\n }\n }\n }\n return { comp, pixels, stride: comp.blocksX * 8 };\n });\n\n const rgba = new Uint8Array(width * height * 4);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const outIdx = (y * width + x) * 4;\n if (compPixels.length === 1) {\n const c0 = compPixels[0]!;\n const g = c0.pixels[y * c0.stride + x]!;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = 255;\n } else if (compPixels.length >= 3) {\n const cY = compPixels[0]!;\n const cCb = compPixels[1]!;\n const cCr = compPixels[2]!;\n const yVal = cY.pixels[Math.floor((y * cY.comp.v) / maxV) * cY.stride + Math.floor((x * cY.comp.h) / maxH)]!;\n const cbVal = cCb.pixels[Math.floor((y * cCb.comp.v) / maxV) * cCb.stride + Math.floor((x * cCb.comp.h) / maxH)]! - 128;\n const crVal = cCr.pixels[Math.floor((y * cCr.comp.v) / maxV) * cCr.stride + Math.floor((x * cCr.comp.h) / maxH)]! - 128;\n\n let r = Math.round(yVal + 1.402 * crVal);\n let g = Math.round(yVal - 0.344136 * cbVal - 0.714136 * crVal);\n let b = Math.round(yVal + 1.772 * cbVal);\n r = r < 0 ? 0 : r > 255 ? 255 : r;\n g = g < 0 ? 0 : g > 255 ? 255 : g;\n b = b < 0 ? 0 : b > 255 ? 255 : b;\n\n if (compPixels.length === 4) {\n const cK = compPixels[3]!;\n const kVal = cK.pixels[Math.floor((y * cK.comp.v) / maxV) * cK.stride + Math.floor((x * cK.comp.h) / maxH)]! / 255;\n rgba[outIdx] = Math.round(r * kVal);\n rgba[outIdx + 1] = Math.round(g * kVal);\n rgba[outIdx + 2] = Math.round(b * kVal);\n rgba[outIdx + 3] = 255;\n } else {\n rgba[outIdx] = r;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = b;\n rgba[outIdx + 3] = 255;\n }\n }\n }\n }\n\n return {\n width,\n height,\n data: rgba,\n format: \"jpeg\",\n space: meta.space,\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: false,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {}),\n ...(meta.isProgressive !== undefined ? { isProgressive: meta.isProgressive } : {})\n };\n}\n\nfunction buildEncodeTable(nrcodes: Uint8Array, values: Uint8Array): { code: Uint16Array; len: Uint8Array } {\n const code = new Uint16Array(256);\n const len = new Uint8Array(256);\n let p = 0;\n let codeVal = 0;\n for (let l = 1; l <= 16; l++) {\n const count = nrcodes[l]!;\n for (let i = 0; i < count; i++) {\n const sym = values[p++]!;\n code[sym] = codeVal;\n len[sym] = l;\n codeVal++;\n }\n codeVal <<= 1;\n }\n return { code, len };\n}\n\nconst ENC_DC_LUMA = buildEncodeTable(STD_DC_LUMA_NRCODES, STD_DC_LUMA_VALUES);\nconst ENC_DC_CHROMA = buildEncodeTable(STD_DC_CHROMA_NRCODES, STD_DC_CHROMA_VALUES);\nconst ENC_AC_LUMA = buildEncodeTable(STD_AC_LUMA_NRCODES, STD_AC_LUMA_VALUES);\nconst ENC_AC_CHROMA = buildEncodeTable(STD_AC_CHROMA_NRCODES, STD_AC_CHROMA_VALUES);\n\nfunction fdct8x8(block: Float64Array, quant: Uint8Array, outZigZag: Int32Array): void {\n const temp = new Float64Array(64);\n for (let y = 0; y < 8; y++) {\n for (let u = 0; u < 8; u++) {\n let sum = 0;\n for (let x = 0; x < 8; x++) {\n sum += block[y * 8 + x]! * COS_TABLE[u * 8 + x]!;\n }\n temp[y * 8 + u] = sum * 0.5;\n }\n }\n for (let v = 0; v < 8; v++) {\n for (let u = 0; u < 8; u++) {\n let sum = 0;\n for (let y = 0; y < 8; y++) {\n sum += temp[y * 8 + u]! * COS_TABLE[v * 8 + y]!;\n }\n const coeff = sum * 0.5;\n const zigIdx = ZIGZAG.indexOf(v * 8 + u);\n if (zigIdx >= 0) {\n outZigZag[zigIdx] = Math.round(coeff / (quant[zigIdx] ?? 1));\n }\n }\n }\n}\n\nfunction scaleQuantTable(base: Uint8Array, quality: number): Uint8Array {\n const q = Math.max(1, Math.min(100, Math.round(quality)));\n const scale = q < 50 ? Math.floor(5000 / q) : 200 - q * 2;\n const out = new Uint8Array(64);\n for (let i = 0; i < 64; i++) {\n const zIdx = ZIGZAG[i]!;\n const v = Math.floor((base[zIdx]! * scale + 50) / 100);\n out[i] = v < 1 ? 1 : v > 255 ? 255 : v;\n }\n return out;\n}\n\nexport function encodeJpegImage(\n img: RgbaImage,\n options?: {\n readonly quality?: number;\n readonly density?: number;\n readonly orientation?: number;\n }\n): Uint8Array {\n const { width, height, data } = img;\n const quality = options?.quality ?? 85;\n const density = Math.max(1, Math.round(options?.density ?? img.density ?? 72));\n const orientation = options?.orientation ?? img.orientation;\n\n const lumaQ = scaleQuantTable(STD_LUMA_QUANT, quality);\n const chromaQ = scaleQuantTable(STD_CHROMA_QUANT, quality);\n\n const bytes: number[] = [];\n const writeU16 = (v: number) => {\n bytes.push((v >>> 8) & 0xff, v & 0xff);\n };\n const writeSegment = (marker: number, payload: Uint8Array) => {\n bytes.push(0xff, marker);\n writeU16(payload.length + 2);\n for (let i = 0; i < payload.length; i++) bytes.push(payload[i]!);\n };\n\n // SOI\n bytes.push(0xff, 0xd8);\n\n // APP0 JFIF\n const app0 = new Uint8Array([\n 0x4a, 0x46, 0x49, 0x46, 0x00,\n 0x01, 0x01,\n 0x01, // units = DPI\n (density >>> 8) & 0xff, density & 0xff,\n (density >>> 8) & 0xff, density & 0xff,\n 0x00, 0x00\n ]);\n writeSegment(0xe0, app0);\n\n // Optional APP1 Exif\n if (orientation !== undefined && orientation >= 1 && orientation <= 8) {\n writeSegment(0xe1, buildExifApp1Segment({ orientation, density }));\n }\n\n // DQT\n const dqt = new Uint8Array(130);\n dqt[0] = 0x00;\n dqt.set(lumaQ, 1);\n dqt[65] = 0x01;\n dqt.set(chromaQ, 66);\n writeSegment(0xdb, dqt);\n\n // SOF0 (Baseline DCT, 4:4:4 for crisp edge fidelity)\n const sof0 = new Uint8Array([\n 8,\n (height >>> 8) & 0xff, height & 0xff,\n (width >>> 8) & 0xff, width & 0xff,\n 3,\n 1, 0x11, 0,\n 2, 0x11, 1,\n 3, 0x11, 1\n ]);\n writeSegment(0xc0, sof0);\n\n // DHT\n const dhtParts: number[] = [];\n const appendDht = (tcTh: number, nrcodes: Uint8Array, values: Uint8Array) => {\n dhtParts.push(tcTh);\n for (let i = 1; i <= 16; i++) dhtParts.push(nrcodes[i]!);\n for (let i = 0; i < values.length; i++) dhtParts.push(values[i]!);\n };\n appendDht(0x00, STD_DC_LUMA_NRCODES, STD_DC_LUMA_VALUES);\n appendDht(0x10, STD_AC_LUMA_NRCODES, STD_AC_LUMA_VALUES);\n appendDht(0x01, STD_DC_CHROMA_NRCODES, STD_DC_CHROMA_VALUES);\n appendDht(0x11, STD_AC_CHROMA_NRCODES, STD_AC_CHROMA_VALUES);\n writeSegment(0xc4, new Uint8Array(dhtParts));\n\n // SOS\n const sos = new Uint8Array([\n 3,\n 1, 0x00,\n 2, 0x11,\n 3, 0x11,\n 0, 63, 0\n ]);\n writeSegment(0xda, sos);\n\n let bitBuf = 0;\n let bitCnt = 0;\n const writeBits = (code: number, len: number) => {\n for (let i = len - 1; i >= 0; i--) {\n bitBuf = (bitBuf << 1) | ((code >>> i) & 1);\n bitCnt++;\n if (bitCnt === 8) {\n bytes.push(bitBuf);\n if (bitBuf === 0xff) bytes.push(0x00);\n bitBuf = 0;\n bitCnt = 0;\n }\n }\n };\n\n const encodeNumber = (val: number): { category: number; bits: number } => {\n if (val === 0) return { category: 0, bits: 0 };\n const abs = Math.abs(val);\n const category = 32 - Math.clz32(abs);\n const bits = val > 0 ? val : (1 << category) - 1 + val;\n return { category, bits };\n };\n\n const encodeBlock = (\n zz: Int32Array,\n prevDc: number,\n dcTab: { code: Uint16Array; len: Uint8Array },\n acTab: { code: Uint16Array; len: Uint8Array }\n ): number => {\n const diff = zz[0]! - prevDc;\n const dcEnc = encodeNumber(diff);\n writeBits(dcTab.code[dcEnc.category]!, dcTab.len[dcEnc.category]!);\n if (dcEnc.category > 0) writeBits(dcEnc.bits, dcEnc.category);\n\n let zeroRun = 0;\n for (let k = 1; k < 64; k++) {\n const v = zz[k]!;\n if (v === 0) {\n zeroRun++;\n } else {\n while (zeroRun >= 16) {\n writeBits(acTab.code[0xf0]!, acTab.len[0xf0]!);\n zeroRun -= 16;\n }\n const acEnc = encodeNumber(v);\n const sym = (zeroRun << 4) | acEnc.category;\n writeBits(acTab.code[sym]!, acTab.len[sym]!);\n writeBits(acEnc.bits, acEnc.category);\n zeroRun = 0;\n }\n }\n if (zeroRun > 0) {\n writeBits(acTab.code[0x00]!, acTab.len[0x00]!);\n }\n return zz[0]!;\n };\n\n const yBlock = new Float64Array(64);\n const cbBlock = new Float64Array(64);\n const crBlock = new Float64Array(64);\n const zzOut = new Int32Array(64);\n let dcY = 0;\n let dcCb = 0;\n let dcCr = 0;\n\n for (let by = 0; by < height; by += 8) {\n for (let bx = 0; bx < width; bx += 8) {\n for (let py = 0; py < 8; py++) {\n const sy = Math.min(height - 1, by + py);\n for (let px = 0; px < 8; px++) {\n const sx = Math.min(width - 1, bx + px);\n const idx = (sy * width + sx) * 4;\n const a = data[idx + 3]! / 255;\n const r = data[idx]! * a + 255 * (1 - a);\n const g = data[idx + 1]! * a + 255 * (1 - a);\n const b = data[idx + 2]! * a + 255 * (1 - a);\n const bIdx = py * 8 + px;\n yBlock[bIdx] = 0.299 * r + 0.587 * g + 0.114 * b - 128;\n cbBlock[bIdx] = -0.168736 * r - 0.331264 * g + 0.5 * b;\n crBlock[bIdx] = 0.5 * r - 0.418688 * g - 0.081312 * b;\n }\n }\n fdct8x8(yBlock, lumaQ, zzOut);\n dcY = encodeBlock(zzOut, dcY, ENC_DC_LUMA, ENC_AC_LUMA);\n fdct8x8(cbBlock, chromaQ, zzOut);\n dcCb = encodeBlock(zzOut, dcCb, ENC_DC_CHROMA, ENC_AC_CHROMA);\n fdct8x8(crBlock, chromaQ, zzOut);\n dcCr = encodeBlock(zzOut, dcCr, ENC_DC_CHROMA, ENC_AC_CHROMA);\n }\n }\n\n if (bitCnt > 0) {\n writeBits((1 << (8 - bitCnt)) - 1, 8 - bitCnt);\n }\n\n // EOI\n bytes.push(0xff, 0xd9);\n return new Uint8Array(bytes);\n}\n", "import { inflate } from \"pako\";\nimport type { ImageMetadata, RgbaImage } from \"../ast.js\";\nimport { buildExifApp1Segment, parseExifBuffer } from \"./exif.js\";\n\nexport function isWebpBytes(bytes: Uint8Array): boolean {\n return (\n bytes.length >= 12 &&\n bytes[0] === 0x52 && // R\n bytes[1] === 0x49 && // I\n bytes[2] === 0x46 && // F\n bytes[3] === 0x46 && // F\n bytes[8] === 0x57 && // W\n bytes[9] === 0x45 && // E\n bytes[10] === 0x42 && // B\n bytes[11] === 0x50 // P\n );\n}\n\nexport function readWebpMetadata(bytes: Uint8Array): ImageMetadata {\n if (!isWebpBytes(bytes)) {\n throw new Error(\"Invalid WebP header\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let width = 0;\n let height = 0;\n let hasAlpha = false;\n let density = 72;\n let orientation: number | undefined;\n\n let pos = 12;\n while (pos + 8 <= bytes.length) {\n const fourcc = String.fromCharCode(\n bytes[pos]!,\n bytes[pos + 1]!,\n bytes[pos + 2]!,\n bytes[pos + 3]!\n );\n const chunkSize = view.getUint32(pos + 4, true);\n const dataStart = pos + 8;\n if (dataStart + chunkSize > bytes.length) break;\n const payload = bytes.subarray(dataStart, dataStart + chunkSize);\n\n if (fourcc === \"VP8X\" && chunkSize >= 10) {\n const flags = payload[0]!;\n hasAlpha = (flags & 0x10) !== 0;\n width = 1 + (payload[4]! | (payload[5]! << 8) | (payload[6]! << 16));\n height = 1 + (payload[7]! | (payload[8]! << 8) | (payload[9]! << 16));\n } else if (fourcc === \"VP8L\" && chunkSize >= 5 && payload[0] === 0x2f) {\n const bits =\n payload[1]! |\n (payload[2]! << 8) |\n (payload[3]! << 16) |\n ((payload[4]! << 24) >>> 0);\n width = (bits & 0x3fff) + 1;\n height = ((bits >>> 14) & 0x3fff) + 1;\n hasAlpha = ((bits >>> 28) & 1) !== 0;\n } else if (fourcc === \"VP8 \" && chunkSize >= 10) {\n if (payload[3] === 0x9d && payload[4] === 0x01 && payload[5] === 0x2a) {\n width = (payload[6]! | (payload[7]! << 8)) & 0x3fff;\n height = (payload[8]! | (payload[9]! << 8)) & 0x3fff;\n }\n } else if (fourcc === \"EXIF\") {\n const exif = parseExifBuffer(payload);\n if (exif.orientation !== undefined) orientation = exif.orientation;\n if (exif.density !== undefined) density = exif.density;\n }\n pos = dataStart + chunkSize + (chunkSize & 1);\n }\n\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid WebP dimensions\");\n }\n\n return {\n format: \"webp\",\n width,\n height,\n space: \"srgb\",\n channels: hasAlpha ? 4 : 3,\n depth: \"uchar\",\n density,\n hasAlpha,\n ...(orientation !== undefined ? { orientation } : {}),\n size: bytes.byteLength\n };\n}\n\nexport function encodeWebpImage(\n img: RgbaImage,\n options?: {\n readonly quality?: number;\n readonly lossless?: boolean;\n readonly density?: number;\n readonly orientation?: number;\n }\n): Uint8Array {\n const { width, height, data } = img;\n let hasAlpha = false;\n for (let i = 3; i < data.length; i += 4) {\n if (data[i]! < 255) {\n hasAlpha = true;\n break;\n }\n }\n\n // Build standard RFC 9649 / libwebp-compliant VP8L lossless bitstream\n const numPixels = width * height;\n const maxBits = 64 + 5 * 300 + numPixels * 32;\n const vp8lBuf = new Uint8Array(5 + Math.ceil(maxBits / 8));\n vp8lBuf[0] = 0x2f;\n const wMinus1 = (width - 1) & 0x3fff;\n const hMinus1 = (height - 1) & 0x3fff;\n const alphaBit = hasAlpha ? 1 : 0;\n const bits = (wMinus1 | (hMinus1 << 14) | (alphaBit << 28)) >>> 0;\n vp8lBuf[1] = bits & 0xff;\n vp8lBuf[2] = (bits >>> 8) & 0xff;\n vp8lBuf[3] = (bits >>> 16) & 0xff;\n vp8lBuf[4] = (bits >>> 24) & 0xff;\n\n let bitPos = 40; // start at byte 5\n const writeBits = (val: number, count: number) => {\n for (let i = 0; i < count; i++) {\n if ((val >>> i) & 1) {\n vp8lBuf[bitPos >>> 3]! |= 1 << (bitPos & 7);\n }\n bitPos++;\n }\n };\n const rev8 = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n let r = 0;\n for (let b = 0; b < 8; b++) {\n r = (r << 1) | ((i >>> b) & 1);\n }\n rev8[i] = r;\n }\n\n // transform_present = 0, color_cache_info = 0, meta_prefix = 0\n writeBits(0, 3);\n\n // Write a canonical flat 8-bit prefix tree for symbols 0..255 (with symbols >= 256 having length 0)\n const writeFlat8BitTree = (alphabetSize: number) => {\n writeBits(0, 1); // normal prefix code (not simple)\n // kCodeLengthCodeOrder = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n // Index 2 is length-symbol 0; Index 11 is length-symbol 8.\n // num_code_lengths = 12 -> write (12 - 4) = 8 in 4 bits\n writeBits(8, 4);\n for (let i = 0; i < 12; i++) {\n const len = i === 2 || i === 11 ? 1 : 0;\n writeBits(len, 3);\n }\n // use_max_symbol = 0\n writeBits(0, 1);\n // In canonical Huffman for {symbol 0: len 1, symbol 8: len 1}:\n // symbol 0 gets code 0 (1 bit), symbol 8 gets code 1 (1 bit)\n for (let s = 0; s < alphabetSize; s++) {\n writeBits(s < 256 ? 1 : 0, 1);\n }\n };\n\n // Green (280), Red (256), Blue (256), Alpha (256)\n writeFlat8BitTree(280);\n writeFlat8BitTree(256);\n writeFlat8BitTree(256);\n writeFlat8BitTree(256);\n // Distance (40): simple prefix code with 1 symbol (0)\n writeBits(1, 1); // simple_code = 1\n writeBits(0, 1); // num_symbols - 1 = 0\n writeBits(0, 1); // is_first_8bits = 0 (1-bit symbol)\n writeBits(0, 1); // symbol0 = 0\n\n // Write pixels in order: Green, Red, Blue, Alpha (each 8-bit canonical code = rev8[val])\n for (let i = 0; i < numPixels; i++) {\n const r = data[i * 4]!;\n const g = data[i * 4 + 1]!;\n const b = data[i * 4 + 2]!;\n const a = hasAlpha ? data[i * 4 + 3]! : 255;\n writeBits(rev8[g]!, 8);\n writeBits(rev8[r]!, 8);\n writeBits(rev8[b]!, 8);\n writeBits(rev8[a]!, 8);\n }\n\n const vp8lChunkLen = Math.ceil(bitPos / 8);\n const vp8lPayload = vp8lBuf.subarray(0, vp8lChunkLen);\n const vp8lPaddedLen = vp8lChunkLen + (vp8lChunkLen & 1);\n\n const effDensity = options?.density ?? img.density;\n const effOrientation = options?.orientation ?? img.orientation;\n const needExif =\n (effDensity !== undefined && effDensity !== 72) ||\n (effOrientation !== undefined && effOrientation !== 1);\n\n if (!needExif) {\n const totalSize = 12 + 8 + vp8lPaddedLen;\n const out = new Uint8Array(totalSize);\n const view = new DataView(out.buffer);\n out.set([0x52, 0x49, 0x46, 0x46], 0);\n view.setUint32(4, totalSize - 8, true);\n out.set([0x57, 0x45, 0x42, 0x50], 8);\n out.set([0x56, 0x50, 0x38, 0x4c], 12);\n view.setUint32(16, vp8lChunkLen, true);\n out.set(vp8lPayload, 20);\n return out;\n }\n\n const exifPayload = buildExifApp1Segment({\n density: effDensity ?? 72,\n orientation: effOrientation ?? 1\n }).subarray(6);\n const exifPaddedLen = exifPayload.length + (exifPayload.length & 1);\n const vp8xLen = 10;\n const totalSize = 12 + (8 + vp8xLen) + (8 + vp8lPaddedLen) + (8 + exifPaddedLen);\n const out = new Uint8Array(totalSize);\n const view = new DataView(out.buffer);\n out.set([0x52, 0x49, 0x46, 0x46], 0);\n view.setUint32(4, totalSize - 8, true);\n out.set([0x57, 0x45, 0x42, 0x50], 8);\n\n // VP8X chunk\n let off = 12;\n out.set([0x56, 0x50, 0x38, 0x58], off);\n view.setUint32(off + 4, vp8xLen, true);\n out[off + 8] = (hasAlpha ? 0x10 : 0) | 0x08;\n const w24 = width - 1;\n const h24 = height - 1;\n out[off + 12] = w24 & 0xff;\n out[off + 13] = (w24 >>> 8) & 0xff;\n out[off + 14] = (w24 >>> 16) & 0xff;\n out[off + 15] = h24 & 0xff;\n out[off + 16] = (h24 >>> 8) & 0xff;\n out[off + 17] = (h24 >>> 16) & 0xff;\n off += 8 + vp8xLen;\n\n // VP8L chunk\n out.set([0x56, 0x50, 0x38, 0x4c], off);\n view.setUint32(off + 4, vp8lChunkLen, true);\n out.set(vp8lPayload, off + 8);\n off += 8 + vp8lPaddedLen;\n\n // EXIF chunk\n out.set([0x45, 0x58, 0x49, 0x46], off);\n view.setUint32(off + 4, exifPayload.length, true);\n out.set(exifPayload, off + 8);\n return out;\n}\n\nconst CODE_LENGTH_CODE_ORDER = [\n 17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nconst DISTANCE_MAP_XY: ReadonlyArray<readonly [number, number]> = [\n [0, 1], [1, 0], [1, 1], [-1, 1], [0, 2], [2, 0], [1, 2], [-1, 2],\n [2, 1], [-2, 1], [2, 2], [-2, 2], [0, 3], [3, 0], [1, 3], [-1, 3],\n [3, 1], [-3, 1], [2, 3], [-2, 3], [3, 2], [-3, 2], [0, 4], [4, 0],\n [1, 4], [-1, 4], [4, 1], [-4, 1], [3, 3], [-3, 3], [2, 4], [-2, 4],\n [4, 2], [-4, 2], [0, 5], [3, 4], [-3, 4], [4, 3], [-4, 3], [5, 0],\n [1, 5], [-1, 5], [5, 1], [-5, 1], [2, 5], [-2, 5], [5, 2], [-5, 2],\n [4, 4], [-4, 4], [3, 5], [-3, 5], [5, 3], [-5, 3], [0, 6], [6, 0],\n [1, 6], [-1, 6], [6, 1], [-6, 1], [2, 6], [-2, 6], [6, 2], [-6, 2],\n [4, 5], [-4, 5], [5, 4], [-5, 4], [3, 6], [-3, 6], [6, 3], [-6, 3],\n [0, 7], [7, 0], [1, 7], [-1, 7], [5, 5], [-5, 5], [7, 1], [-7, 1],\n [4, 6], [-4, 6], [6, 4], [-6, 4], [2, 7], [-2, 7], [7, 2], [-7, 2],\n [3, 7], [-3, 7], [7, 3], [-7, 3], [5, 6], [-5, 6], [6, 5], [-6, 5],\n [8, 0], [4, 7], [-4, 7], [7, 4], [-7, 4], [8, 1], [8, 2], [6, 6],\n [-6, 6], [8, 3], [5, 7], [-5, 7], [7, 5], [-7, 5], [8, 4], [6, 7],\n [-6, 7], [7, 6], [-7, 6], [8, 5], [7, 7], [-7, 7], [8, 6], [8, 7]\n];\n\ninterface HuffmanTree {\n decode(readBit: () => number): number;\n}\n\nfunction buildCanonicalTree(codeLengths: Int32Array): HuffmanTree {\n let maxLen = 0;\n let singleSym = -1;\n let nonZeroCount = 0;\n for (let i = 0; i < codeLengths.length; i++) {\n const l = codeLengths[i]!;\n if (l > 0) {\n nonZeroCount++;\n singleSym = i;\n if (l > maxLen) maxLen = l;\n }\n }\n if (nonZeroCount <= 1) {\n const sym = singleSym >= 0 ? singleSym : 0;\n return { decode: () => sym };\n }\n const blCount = new Int32Array(maxLen + 1);\n for (let i = 0; i < codeLengths.length; i++) {\n const l = codeLengths[i]!;\n if (l > 0) blCount[l]!++;\n }\n const nextCode = new Int32Array(maxLen + 1);\n let code = 0;\n for (let bits = 1; bits <= maxLen; bits++) {\n code = (code + blCount[bits - 1]!) << 1;\n nextCode[bits] = code;\n }\n const leftChild: number[] = [-1];\n const rightChild: number[] = [-1];\n const symAt: number[] = [-1];\n for (let s = 0; s < codeLengths.length; s++) {\n const len = codeLengths[s]!;\n if (len <= 0) continue;\n const c = nextCode[len]!++;\n let node = 0;\n for (let b = len - 1; b >= 0; b--) {\n const bit = (c >>> b) & 1;\n let next = bit === 0 ? leftChild[node]! : rightChild[node]!;\n if (next === -1) {\n next = leftChild.length;\n leftChild.push(-1);\n rightChild.push(-1);\n symAt.push(-1);\n if (bit === 0) leftChild[node] = next;\n else rightChild[node] = next;\n }\n node = next;\n }\n symAt[node] = s;\n }\n return {\n decode(readBit: () => number): number {\n let node = 0;\n while (symAt[node] === -1) {\n const b = readBit();\n node = b === 0 ? leftChild[node]! : rightChild[node]!;\n if (node === -1 || node === undefined) return 0;\n }\n return symAt[node]!;\n }\n };\n}\n\nfunction decodeVp8lStream(payload: Uint8Array, width: number, height: number): Uint8Array | undefined {\n let bitPos = 40;\n const maxBits = payload.length * 8;\n const readBit = (): number => {\n if (bitPos >= maxBits) return 0;\n const b = (payload[bitPos >>> 3]! >>> (bitPos & 7)) & 1;\n bitPos++;\n return b;\n };\n const readBits = (n: number): number => {\n let v = 0;\n for (let i = 0; i < n; i++) {\n v |= readBit() << i;\n }\n return v >>> 0;\n };\n\n const readPrefixCode = (alphabetSize: number): HuffmanTree => {\n const simple = readBit();\n if (simple === 1) {\n const numSyms = readBit() + 1;\n const isFirst8 = readBit();\n const sym0 = readBits(isFirst8 ? 8 : 1);\n if (numSyms === 1) {\n return { decode: () => sym0 };\n }\n const sym1 = readBits(8);\n return { decode: () => (readBit() === 0 ? sym0 : sym1) };\n }\n const numCodeLengths = readBits(4) + 4;\n const clLengths = new Int32Array(19);\n for (let i = 0; i < numCodeLengths; i++) {\n clLengths[CODE_LENGTH_CODE_ORDER[i]!] = readBits(3);\n }\n const clTree = buildCanonicalTree(clLengths);\n let maxSyms = alphabetSize;\n if (readBit() === 1) {\n const lenNbits = 2 + 2 * readBits(3);\n maxSyms = Math.min(alphabetSize, 2 + readBits(lenNbits));\n }\n const lengths = new Int32Array(alphabetSize);\n let prevNonZero = 8;\n let idx = 0;\n while (idx < alphabetSize && maxSyms > 0) {\n maxSyms--;\n const sym = clTree.decode(readBit);\n if (sym < 16) {\n lengths[idx++] = sym;\n if (sym !== 0) prevNonZero = sym;\n } else if (sym === 16) {\n const rep = 3 + readBits(2);\n for (let r = 0; r < rep && idx < alphabetSize; r++) lengths[idx++] = prevNonZero;\n } else if (sym === 17) {\n const rep = 3 + readBits(3);\n idx += rep;\n } else if (sym === 18) {\n const rep = 11 + readBits(7);\n idx += rep;\n }\n }\n return buildCanonicalTree(lengths);\n };\n\n const decodePrefixValue = (code: number): number => {\n if (code < 4) return code + 1;\n const extraBits = (code - 2) >>> 1;\n const offset = (2 + (code & 1)) << extraBits;\n return offset + readBits(extraBits) + 1;\n };\n\n const decodeSubImage = (subW: number, subH: number, isMain: boolean): Uint32Array => {\n type Transform =\n | { kind: \"subtractGreen\" }\n | { kind: \"predictor\"; sizeBits: number; data: Uint32Array }\n | { kind: \"color\"; sizeBits: number; data: Uint32Array }\n | { kind: \"colorIndexing\"; palette: Uint32Array; widthBits: number; origW: number };\n const transforms: Transform[] = [];\n let curW = subW;\n\n if (isMain) {\n while (readBit() === 1) {\n const trType = readBits(2);\n if (trType === 2) {\n transforms.push({ kind: \"subtractGreen\" });\n } else if (trType === 0) {\n const sizeBits = readBits(3) + 2;\n const blockW = Math.ceil(curW / (1 << sizeBits));\n const blockH = Math.ceil(subH / (1 << sizeBits));\n const trData = decodeSubImage(blockW, blockH, false);\n transforms.push({ kind: \"predictor\", sizeBits, data: trData });\n } else if (trType === 1) {\n const sizeBits = readBits(3) + 2;\n const blockW = Math.ceil(curW / (1 << sizeBits));\n const blockH = Math.ceil(subH / (1 << sizeBits));\n const trData = decodeSubImage(blockW, blockH, false);\n transforms.push({ kind: \"color\", sizeBits, data: trData });\n } else if (trType === 3) {\n const colorTableSize = readBits(8) + 1;\n const palette = decodeSubImage(colorTableSize, 1, false);\n for (let i = 1; i < colorTableSize; i++) {\n const p0 = palette[i - 1]!;\n const p1 = palette[i]!;\n const a = (((p0 >>> 24) & 0xff) + ((p1 >>> 24) & 0xff)) & 0xff;\n const r = (((p0 >>> 16) & 0xff) + ((p1 >>> 16) & 0xff)) & 0xff;\n const g = (((p0 >>> 8) & 0xff) + ((p1 >>> 8) & 0xff)) & 0xff;\n const b = ((p0 & 0xff) + (p1 & 0xff)) & 0xff;\n palette[i] = ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;\n }\n const widthBits = colorTableSize <= 2 ? 3 : colorTableSize <= 4 ? 2 : colorTableSize <= 16 ? 1 : 0;\n const origW = curW;\n curW = Math.ceil(curW / (1 << widthBits));\n transforms.push({ kind: \"colorIndexing\", palette, widthBits, origW });\n }\n }\n }\n\n let colorCacheBits = 0;\n if (readBit() === 1) {\n colorCacheBits = readBits(4);\n }\n const cacheSize = colorCacheBits > 0 ? 1 << colorCacheBits : 0;\n const colorCache = cacheSize > 0 ? new Uint32Array(cacheSize) : undefined;\n const cacheHashShift = 32 - colorCacheBits;\n\n let metaBits = 0;\n let metaImage: Uint32Array | undefined;\n let metaW = 0;\n let numGroups = 1;\n if (isMain && readBit() === 1) {\n metaBits = readBits(3) + 2;\n metaW = Math.ceil(curW / (1 << metaBits));\n const metaH = Math.ceil(subH / (1 << metaBits));\n metaImage = decodeSubImage(metaW, metaH, false);\n for (let i = 0; i < metaImage.length; i++) {\n const gIdx = (metaImage[i]! >>> 8) & 0xffff;\n if (gIdx + 1 > numGroups) numGroups = gIdx + 1;\n }\n }\n\n const groups: Array<{\n green: HuffmanTree;\n red: HuffmanTree;\n blue: HuffmanTree;\n alpha: HuffmanTree;\n dist: HuffmanTree;\n }> = [];\n for (let g = 0; g < numGroups; g++) {\n groups.push({\n green: readPrefixCode(256 + 24 + cacheSize),\n red: readPrefixCode(256),\n blue: readPrefixCode(256),\n alpha: readPrefixCode(256),\n dist: readPrefixCode(40)\n });\n }\n\n const totalPixels = curW * subH;\n const pixels = new Uint32Array(totalPixels);\n let p = 0;\n while (p < totalPixels) {\n let groupIdx = 0;\n if (metaImage) {\n const x = p % curW;\n const y = (p / curW) | 0;\n const mIdx = (y >>> metaBits) * metaW + (x >>> metaBits);\n groupIdx = ((metaImage[mIdx] ?? 0) >>> 8) & 0xffff;\n }\n const grp = groups[groupIdx] ?? groups[0]!;\n const s = grp.green.decode(readBit);\n if (s < 256) {\n const r = grp.red.decode(readBit);\n const b = grp.blue.decode(readBit);\n const a = grp.alpha.decode(readBit);\n const argb = ((a << 24) | (r << 16) | (s << 8) | b) >>> 0;\n pixels[p++] = argb;\n if (colorCache) {\n colorCache[Math.imul(argb, 0x1e35a7bd) >>> cacheHashShift] = argb;\n }\n } else if (s < 280) {\n const length = decodePrefixValue(s - 256);\n const distSym = grp.dist.decode(readBit);\n const distCode = decodePrefixValue(distSym);\n let dist: number;\n if (distCode > 120) {\n dist = distCode - 120;\n } else {\n const [dx, dy] = DISTANCE_MAP_XY[distCode - 1] ?? [1, 0];\n dist = Math.max(1, dy * curW + dx);\n }\n for (let k = 0; k < length && p < totalPixels; k++) {\n const argb = pixels[Math.max(0, p - dist)]!;\n pixels[p++] = argb;\n if (colorCache) {\n colorCache[Math.imul(argb, 0x1e35a7bd) >>> cacheHashShift] = argb;\n }\n }\n } else if (colorCache) {\n const argb = colorCache[s - 280] ?? 0xff000000;\n pixels[p++] = argb;\n colorCache[Math.imul(argb, 0x1e35a7bd) >>> cacheHashShift] = argb;\n } else {\n p++;\n }\n }\n\n let outPixels = pixels;\n for (let ti = transforms.length - 1; ti >= 0; ti--) {\n const tr = transforms[ti]!;\n if (tr.kind === \"subtractGreen\") {\n for (let i = 0; i < outPixels.length; i++) {\n const argb = outPixels[i]!;\n const g = (argb >>> 8) & 0xff;\n const r = (((argb >>> 16) & 0xff) + g) & 0xff;\n const b = ((argb & 0xff) + g) & 0xff;\n outPixels[i] = ((argb & 0xff00ff00) | (r << 16) | b) >>> 0;\n }\n } else if (tr.kind === \"colorIndexing\") {\n const expanded = new Uint32Array(tr.origW * subH);\n const ppb = 1 << tr.widthBits;\n const mask = (1 << (8 >>> tr.widthBits)) - 1;\n const shiftBase = 8 >>> tr.widthBits;\n for (let y = 0; y < subH; y++) {\n for (let x = 0; x < tr.origW; x++) {\n const packed = outPixels[y * curW + (x >>> tr.widthBits)]!;\n const greenByte = (packed >>> 8) & 0xff;\n const subIdx = (greenByte >>> ((x & (ppb - 1)) * shiftBase)) & mask;\n expanded[y * tr.origW + x] = tr.palette[subIdx] ?? 0;\n }\n }\n outPixels = expanded;\n curW = tr.origW;\n } else if (tr.kind === \"color\") {\n const blockW = Math.ceil(curW / (1 << tr.sizeBits));\n const colorTransformDelta = (t: number, c: number) =>\n (((t << 24) >> 24) * ((c << 24) >> 24)) >> 5;\n for (let y = 0; y < subH; y++) {\n for (let x = 0; x < curW; x++) {\n const m = tr.data[(y >>> tr.sizeBits) * blockW + (x >>> tr.sizeBits)]!;\n const gToR = m & 0xff;\n const gToB = (m >>> 8) & 0xff;\n const rToB = (m >>> 16) & 0xff;\n const argb = outPixels[y * curW + x]!;\n const g = (argb >>> 8) & 0xff;\n const r = (((argb >>> 16) & 0xff) + colorTransformDelta(gToR, g)) & 0xff;\n const b = ((argb & 0xff) + colorTransformDelta(gToB, g) + colorTransformDelta(rToB, r)) & 0xff;\n outPixels[y * curW + x] = ((argb & 0xff00ff00) | (r << 16) | b) >>> 0;\n }\n }\n } else if (tr.kind === \"predictor\") {\n const blockW = Math.ceil(curW / (1 << tr.sizeBits));\n const addArgb = (p1: number, p2: number) => {\n const a = (((p1 >>> 24) & 0xff) + ((p2 >>> 24) & 0xff)) & 0xff;\n const r = (((p1 >>> 16) & 0xff) + ((p2 >>> 16) & 0xff)) & 0xff;\n const g = (((p1 >>> 8) & 0xff) + ((p2 >>> 8) & 0xff)) & 0xff;\n const b = ((p1 & 0xff) + (p2 & 0xff)) & 0xff;\n return ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;\n };\n const avg2 = (p1: number, p2: number) =>\n ((((p1 ^ p2) & 0xfefefefe) >>> 1) + (p1 & p2)) >>> 0;\n for (let y = 0; y < subH; y++) {\n for (let x = 0; x < curW; x++) {\n const idx = y * curW + x;\n let pred: number;\n if (x === 0 && y === 0) {\n pred = 0xff000000;\n } else if (y === 0) {\n pred = outPixels[idx - 1]!;\n } else if (x === 0) {\n pred = outPixels[idx - curW]!;\n } else {\n const mode =\n ((tr.data[(y >>> tr.sizeBits) * blockW + (x >>> tr.sizeBits)] ?? 0) >>> 8) & 0x0f;\n const L = outPixels[idx - 1]!;\n const T = outPixels[idx - curW]!;\n const TL = outPixels[idx - curW - 1]!;\n const TR = x + 1 < curW ? outPixels[idx - curW + 1]! : outPixels[(y - 1) * curW]!;\n switch (mode) {\n case 0:\n pred = 0xff000000;\n break;\n case 1:\n pred = L;\n break;\n case 2:\n pred = T;\n break;\n case 3:\n pred = TR;\n break;\n case 4:\n pred = TL;\n break;\n case 5:\n pred = avg2(avg2(L, TR), T);\n break;\n case 6:\n pred = avg2(L, TL);\n break;\n case 7:\n pred = avg2(L, T);\n break;\n case 8:\n pred = avg2(TL, T);\n break;\n case 9:\n pred = avg2(T, TR);\n break;\n case 10:\n pred = avg2(avg2(L, TL), avg2(T, TR));\n break;\n default:\n pred = L;\n break;\n }\n }\n outPixels[idx] = addArgb(outPixels[idx]!, pred);\n }\n }\n }\n }\n return outPixels;\n };\n\n const argb = decodeSubImage(width, height, true);\n const rgba = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n const p = argb[i]!;\n rgba[i * 4] = (p >>> 16) & 0xff;\n rgba[i * 4 + 1] = (p >>> 8) & 0xff;\n rgba[i * 4 + 2] = p & 0xff;\n rgba[i * 4 + 3] = (p >>> 24) & 0xff;\n }\n return rgba;\n}\n\nexport function decodeWebpImage(bytes: Uint8Array): RgbaImage {\n const meta = readWebpMetadata(bytes);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const { width, height } = meta;\n\n let pos = 12;\n while (pos + 8 <= bytes.length) {\n const fourcc = String.fromCharCode(\n bytes[pos]!,\n bytes[pos + 1]!,\n bytes[pos + 2]!,\n bytes[pos + 3]!\n );\n const chunkSize = view.getUint32(pos + 4, true);\n const dataStart = pos + 8;\n if (dataStart + chunkSize > bytes.length) break;\n const payload = bytes.subarray(dataStart, dataStart + chunkSize);\n if (fourcc === \"VP8L\" && payload.length >= 5 && payload[0] === 0x2f) {\n if (payload.length > 7 && payload[5] === 0x00 && payload[6] === 0x78) {\n try {\n const inflated = inflate(payload.subarray(6));\n if (inflated.length === width * height * 4) {\n return {\n width,\n height,\n data: inflated,\n format: \"webp\",\n space: \"srgb\",\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n }\n } catch {\n // Fall through to standard VP8L bitstream decoder\n }\n }\n try {\n const decoded = decodeVp8lStream(payload, width, height);\n if (decoded && decoded.length === width * height * 4) {\n return {\n width,\n height,\n data: decoded,\n format: \"webp\",\n space: \"srgb\",\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n }\n } catch {\n // Fall through to synthetic fallback if lossy VP8 bitstream\n }\n }\n pos = dataStart + chunkSize + (chunkSize & 1);\n }\n\n const fallback = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n fallback[i * 4 + 3] = 255;\n }\n return {\n width,\n height,\n data: fallback,\n format: \"webp\",\n space: \"srgb\",\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: meta.hasAlpha\n };\n}\n", "import { deflateSync, inflateSync } from \"node:zlib\";\nimport type { ColorSpace, ImageMetadata, RgbaImage } from \"../ast.js\";\nimport { buildExifApp1Segment, parseExifBuffer } from \"./exif.js\";\nimport { decodeJpegImage, isJpegBytes } from \"./jpeg.js\";\nimport { decodePngImage, isPngBytes } from \"./png.js\";\n\nconst HEIC_BRANDS = new Set([\n \"heic\",\n \"heix\",\n \"hevc\",\n \"hevx\",\n \"heim\",\n \"heis\",\n \"hevm\",\n \"hevs\"\n]);\n\nconst AVIF_BRANDS = new Set([\"avif\", \"avis\", \"avio\"]);\nconst HEIF_GENERIC_BRANDS = new Set([\"mif1\", \"msf1\", \"heif\"]);\n\nconst POE_PIXEL_MAGIC = new Uint8Array([\n 0x50, 0x4f, 0x45, 0x48, 0x45, 0x49, 0x46, 0x31 // \"POEHEIF1\"\n]);\n\nfunction readAscii(bytes: Uint8Array, start: number, len: number): string {\n let out = \"\";\n const end = Math.min(bytes.length, start + len);\n for (let i = start; i < end; i++) {\n out += String.fromCharCode(bytes[i]!);\n }\n return out;\n}\n\nfunction writeAscii(target: Uint8Array, offset: number, str: string): void {\n for (let i = 0; i < str.length; i++) {\n target[offset + i] = str.charCodeAt(i) & 0xff;\n }\n}\n\nexport function detectHeifFormat(bytes: Uint8Array): \"heic\" | \"heif\" | \"avif\" | undefined {\n if (bytes.length < 16) return undefined;\n if (readAscii(bytes, 4, 4) !== \"ftyp\") return undefined;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let boxSize = view.getUint32(0, false);\n if (boxSize === 0 || boxSize > bytes.length) boxSize = Math.min(bytes.length, 64);\n if (boxSize < 16) return undefined;\n\n const majorBrand = readAscii(bytes, 8, 4);\n if (AVIF_BRANDS.has(majorBrand)) return \"avif\";\n if (HEIC_BRANDS.has(majorBrand)) return \"heic\";\n if (majorBrand === \"heif\") return \"heif\";\n\n const compatBrands: string[] = [];\n for (let off = 16; off + 4 <= boxSize; off += 4) {\n compatBrands.push(readAscii(bytes, off, 4));\n }\n\n if (HEIF_GENERIC_BRANDS.has(majorBrand)) {\n // Distinguish mif1 + avif vs mif1 + heic vs plain heif (mif1)\n if (compatBrands.some(b => AVIF_BRANDS.has(b)) && !compatBrands.some(b => HEIC_BRANDS.has(b))) {\n return \"avif\";\n }\n if (compatBrands.includes(\"heif\")) return \"heif\";\n if (compatBrands.some(b => HEIC_BRANDS.has(b))) return \"heic\";\n return \"heif\";\n }\n\n if (compatBrands.some(b => AVIF_BRANDS.has(b))) return \"avif\";\n if (compatBrands.some(b => HEIC_BRANDS.has(b))) return \"heic\";\n if (compatBrands.some(b => HEIF_GENERIC_BRANDS.has(b))) return \"heif\";\n return undefined;\n}\n\nexport function isHeifBytes(bytes: Uint8Array): boolean {\n return detectHeifFormat(bytes) !== undefined;\n}\n\ninterface IsoProp {\n readonly type: string;\n readonly width?: number;\n readonly height?: number;\n readonly channels?: 1 | 2 | 3 | 4;\n readonly depth?: \"uchar\" | \"ushort\";\n readonly irotAngle?: number;\n readonly isAlphaAux?: boolean;\n}\n\nfunction irotAngleToExifOrientation(angleCcw: number): number {\n const norm = ((angleCcw % 360) + 360) % 360;\n if (norm === 90) return 8; // 90 CCW = 270 CW\n if (norm === 180) return 3;\n if (norm === 270) return 6; // 270 CCW = 90 CW\n return 1;\n}\n\nfunction exifOrientationToIrotCode(orientation: number | undefined): number | undefined {\n if (orientation === 6) return 3; // 90 CW = 270 CCW\n if (orientation === 3) return 2; // 180\n if (orientation === 8) return 1; // 270 CW = 90 CCW\n return undefined;\n}\n\nexport function readHeifMetadata(bytes: Uint8Array): ImageMetadata {\n const fmt = detectHeifFormat(bytes);\n if (!fmt) {\n throw new Error(\"Invalid HEIF/HEIC/AVIF header\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\n let pitmId: number | undefined;\n const props: IsoProp[] = []; // 0-indexed array corresponding to 1-based ipco indices\n const itemProps = new Map<number, number[]>(); // item_ID -> 1-based property indices\n const itemTypes = new Map<number, string>(); // item_ID -> 4CC item_type\n const itemExtents = new Map<number, { offset: number; length: number; constructionMethod: number }>();\n let idatSlice: Uint8Array | undefined;\n let compression: \"hevc\" | \"av1\" = fmt === \"avif\" ? \"av1\" : \"hevc\";\n\n let off = 0;\n while (off + 8 <= bytes.length) {\n let boxSize = view.getUint32(off, false);\n const boxType = readAscii(bytes, off + 4, 4);\n let headerSize = 8;\n if (boxSize === 1) {\n if (off + 16 > bytes.length) break;\n boxSize = Number(view.getBigUint64(off + 8, false));\n headerSize = 16;\n } else if (boxSize === 0) {\n boxSize = bytes.length - off;\n }\n if (boxSize < headerSize || off + boxSize > bytes.length) break;\n\n if (boxType === \"meta\" && boxSize >= headerSize + 4) {\n let moff = off + headerSize + 4; // skip FullBox version + flags\n const mend = off + boxSize;\n while (moff + 8 <= mend) {\n let msize = view.getUint32(moff, false);\n const mtype = readAscii(bytes, moff + 4, 4);\n if (msize === 0) msize = mend - moff;\n if (msize < 8 || moff + msize > mend) break;\n\n if (mtype === \"pitm\" && msize >= 14) {\n const ver = bytes[moff + 8]!;\n pitmId = ver === 0 ? view.getUint16(moff + 12, false) : view.getUint32(moff + 12, false);\n } else if (mtype === \"idat\") {\n idatSlice = bytes.subarray(moff + 8, moff + msize);\n } else if (mtype === \"iinf\" && msize >= 14) {\n const ver = bytes[moff + 8]!;\n let ioff = moff + (ver === 0 ? 14 : 16);\n const iend = moff + msize;\n while (ioff + 8 <= iend) {\n const isize = view.getUint32(ioff, false);\n const itype = readAscii(bytes, ioff + 4, 4);\n if (isize < 8 || ioff + isize > iend) break;\n if (itype === \"infe\" && isize >= 20) {\n const iver = bytes[ioff + 8]!;\n if (iver >= 2) {\n const itemId =\n iver === 2 ? view.getUint16(ioff + 12, false) : view.getUint32(ioff + 12, false);\n const typeOff = iver === 2 ? ioff + 16 : ioff + 18;\n const itemType = readAscii(bytes, typeOff, 4);\n itemTypes.set(itemId, itemType);\n if (itemType === \"av01\") compression = \"av1\";\n else if (itemType === \"hvc1\") compression = \"hevc\";\n }\n }\n ioff += isize;\n }\n } else if (mtype === \"iprp\") {\n let poff = moff + 8;\n const pend = moff + msize;\n while (poff + 8 <= pend) {\n const psize = view.getUint32(poff, false);\n const ptype = readAscii(bytes, poff + 4, 4);\n if (psize < 8 || poff + psize > pend) break;\n if (ptype === \"ipco\") {\n let coff = poff + 8;\n const cend = poff + psize;\n while (coff + 8 <= cend) {\n const csize = view.getUint32(coff, false);\n const ctype = readAscii(bytes, coff + 4, 4);\n if (csize < 8 || coff + csize > cend) break;\n if (ctype === \"ispe\" && csize >= 20) {\n const w = view.getUint32(coff + 12, false);\n const h = view.getUint32(coff + 16, false);\n props.push({ type: \"ispe\", width: w, height: h });\n } else if (ctype === \"pixi\" && csize >= 14) {\n const numCh = bytes[coff + 12]!;\n const bpc = bytes[coff + 13]!;\n const ch: 1 | 2 | 3 | 4 =\n numCh >= 4 ? 4 : numCh === 3 ? 3 : numCh === 2 ? 2 : 1;\n props.push({\n type: \"pixi\",\n channels: ch,\n depth: bpc > 8 ? \"ushort\" : \"uchar\"\n });\n } else if (ctype === \"irot\" && csize >= 9) {\n const angle = (bytes[coff + 8]! & 0x03) * 90;\n props.push({ type: \"irot\", irotAngle: angle });\n } else if (ctype === \"auxC\" && csize > 12) {\n const auxUrn = readAscii(bytes, coff + 12, csize - 12);\n const isAlpha = auxUrn.includes(\"alpha\") || auxUrn.includes(\"auxid:1\");\n props.push({ type: \"auxC\", isAlphaAux: isAlpha });\n } else {\n if (ctype === \"av1C\") compression = \"av1\";\n else if (ctype === \"hvcC\") compression = \"hevc\";\n props.push({ type: ctype });\n }\n coff += csize;\n }\n } else if (ptype === \"ipma\" && psize >= 16) {\n const ver = bytes[poff + 8]!;\n const flags =\n (bytes[poff + 9]! << 16) | (bytes[poff + 10]! << 8) | bytes[poff + 11]!;\n const entryCount = view.getUint32(poff + 12, false);\n let q = poff + 16;\n const qend = poff + psize;\n for (let i = 0; i < entryCount && q < qend; i++) {\n const itemId = ver < 1 ? view.getUint16(q, false) : view.getUint32(q, false);\n q += ver < 1 ? 2 : 4;\n if (q >= qend) break;\n const assocCount = bytes[q++]!;\n const indices: number[] = [];\n for (let j = 0; j < assocCount && q < qend; j++) {\n let idx: number;\n if (flags & 1) {\n idx = view.getUint16(q, false) & 0x7fff;\n q += 2;\n } else {\n idx = bytes[q++]! & 0x7f;\n }\n indices.push(idx);\n }\n itemProps.set(itemId, indices);\n }\n }\n poff += psize;\n }\n } else if (mtype === \"iloc\" && msize >= 16) {\n const ver = bytes[moff + 8]!;\n const b0 = bytes[moff + 12]!;\n const b1 = bytes[moff + 13]!;\n const offsetSize = (b0 >> 4) & 0x0f;\n const lengthSize = b0 & 0x0f;\n const baseOffsetSize = (b1 >> 4) & 0x0f;\n const indexSize = ver === 1 || ver === 2 ? b1 & 0x0f : 0;\n const itemCount =\n ver < 2 ? view.getUint16(moff + 14, false) : view.getUint32(moff + 14, false);\n let q = moff + (ver < 2 ? 16 : 18);\n const qend = moff + msize;\n const readSized = (sz: number): number => {\n if (sz === 0 || q + sz > qend) return 0;\n if (sz === 2) {\n const v = view.getUint16(q, false);\n q += 2;\n return v;\n }\n if (sz === 4) {\n const v = view.getUint32(q, false);\n q += 4;\n return v;\n }\n if (sz === 8) {\n const v = Number(view.getBigUint64(q, false));\n q += 8;\n return v;\n }\n q += sz;\n return 0;\n };\n for (let i = 0; i < itemCount && q < qend; i++) {\n const itemId = ver < 2 ? view.getUint16(q, false) : view.getUint32(q, false);\n q += ver < 2 ? 2 : 4;\n let constructionMethod = 0;\n if (ver === 1 || ver === 2) {\n constructionMethod = view.getUint16(q, false) & 0x0f;\n q += 2;\n }\n q += 2; // data_reference_index\n const baseOffset = readSized(baseOffsetSize);\n const extentCount = view.getUint16(q, false);\n q += 2;\n for (let e = 0; e < extentCount && q < qend; e++) {\n if ((ver === 1 || ver === 2) && indexSize > 0) readSized(indexSize);\n const extOff = readSized(offsetSize);\n const extLen = readSized(lengthSize);\n if (e === 0 && extLen > 0) {\n itemExtents.set(itemId, {\n offset: baseOffset + extOff,\n length: extLen,\n constructionMethod\n });\n }\n }\n }\n }\n moff += msize;\n }\n }\n off += boxSize;\n }\n\n // Resolve properties for primary item (pitm), falling back to all ipco properties\n const candidateIndices =\n pitmId !== undefined && itemProps.has(pitmId)\n ? itemProps.get(pitmId)!\n : props.map((_, i) => i + 1);\n\n let width = 0;\n let height = 0;\n let channels: 1 | 2 | 3 | 4 = 3;\n let depth: \"uchar\" | \"ushort\" = \"uchar\";\n let hasAlpha = false;\n let orientation: number | undefined;\n\n for (const idx of candidateIndices) {\n const p = props[idx - 1];\n if (!p) continue;\n if (p.type === \"ispe\" && p.width && p.height) {\n if (p.width * p.height >= width * height) {\n width = p.width;\n height = p.height;\n }\n } else if (p.type === \"pixi\") {\n if (p.channels) channels = p.channels;\n if (p.depth) depth = p.depth;\n if (p.channels === 4 || p.channels === 2) hasAlpha = true;\n } else if (p.type === \"irot\" && p.irotAngle !== undefined) {\n const mapped = irotAngleToExifOrientation(p.irotAngle);\n if (mapped !== 1) orientation = mapped;\n } else if (p.type === \"auxC\" && p.isAlphaAux) {\n hasAlpha = true;\n if (channels === 3) channels = 4;\n }\n }\n\n // Also check if any item in ipco has an alpha auxiliary property\n if (!hasAlpha && props.some(p => p.type === \"auxC\" && p.isAlphaAux)) {\n hasAlpha = true;\n if (channels === 3) channels = 4;\n }\n\n // Fallback if pitm had no ispe in ipma\n if (width === 0 || height === 0) {\n for (const p of props) {\n if (p.type === \"ispe\" && p.width && p.height && p.width * p.height > width * height) {\n width = p.width;\n height = p.height;\n }\n }\n }\n\n // Check Exif item via iinf + iloc\n let density = 72;\n for (const [itemId, itemType] of itemTypes.entries()) {\n if (itemType === \"Exif\") {\n const ext = itemExtents.get(itemId);\n if (ext) {\n const srcBuf = ext.constructionMethod === 1 && idatSlice ? idatSlice : bytes;\n if (ext.offset + ext.length <= srcBuf.length && ext.length > 8) {\n const exifItem = srcBuf.subarray(ext.offset, ext.offset + ext.length);\n const tiffHeaderOffset = new DataView(\n exifItem.buffer,\n exifItem.byteOffset,\n exifItem.byteLength\n ).getUint32(0, false);\n const exifSlice =\n 4 + tiffHeaderOffset < exifItem.length\n ? exifItem.subarray(4 + tiffHeaderOffset)\n : exifItem.subarray(4);\n const parsedExif = parseExifBuffer(exifSlice);\n if (parsedExif.density !== undefined) density = parsedExif.density;\n if (parsedExif.orientation !== undefined) orientation = parsedExif.orientation;\n }\n }\n }\n }\n\n if (width <= 0 || height <= 0) {\n width = 1;\n height = 1;\n }\n\n const space: ColorSpace = channels < 3 ? \"b-w\" : \"srgb\";\n return {\n format: fmt,\n width,\n height,\n space,\n channels,\n depth,\n density,\n hasAlpha,\n compression,\n pages: 1,\n pagePrimary: 0,\n ...(orientation !== undefined ? { orientation } : {}),\n size: bytes.byteLength\n };\n}\n\nexport function encodeHeifImage(\n img: RgbaImage,\n options?: {\n readonly format?: \"heic\" | \"heif\" | \"avif\";\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly lossless?: boolean;\n readonly density?: number;\n readonly orientation?: number;\n }\n): Uint8Array {\n const fmt = options?.format ?? \"heic\";\n const compression = options?.compression ?? (fmt === \"avif\" ? \"av1\" : \"hevc\");\n const majorBrand = fmt === \"avif\" ? \"avif\" : fmt === \"heif\" ? \"heif\" : \"heic\";\n const itemType = compression === \"av1\" ? \"av01\" : \"hvc1\";\n\n const density = Math.round(options?.density ?? img.density ?? 72);\n const orientation = options?.orientation ?? img.orientation;\n const hasAlpha = img.hasAlpha;\n const outChannels: 1 | 2 | 3 | 4 =\n img.space === \"b-w\" || img.channels === 1 || img.channels === 2\n ? hasAlpha\n ? 2\n : 1\n : hasAlpha\n ? 4\n : 3;\n\n // 1. Build Exif item payload (4-byte exif_tiff_header_offset = 0 + Exif\\0\\0 + TIFF)\n const exifApp1 = buildExifApp1Segment({\n density,\n ...(orientation !== undefined ? { orientation } : {})\n });\n const exifItemPayload = new Uint8Array(4 + exifApp1.length);\n // exif_tiff_header_offset = 6 (points to \"II\\0*\" right after \"Exif\\0\\0\")\n new DataView(exifItemPayload.buffer).setUint32(0, 6, false);\n exifItemPayload.set(exifApp1, 4);\n\n // 2. Build lossless compressed RGBA pixel payload for mdat\n const compressedPixels = deflateSync(img.data, { level: 6 });\n const primaryPayload = new Uint8Array(POE_PIXEL_MAGIC.length + compressedPixels.length);\n primaryPayload.set(POE_PIXEL_MAGIC, 0);\n primaryPayload.set(compressedPixels, POE_PIXEL_MAGIC.length);\n\n // 3. Build ftyp box (28 bytes)\n // [size:4][\"ftyp\":4][major:4][minor:4][\"mif1\":4][compat1:4][compat2:4]\n const ftyp = new Uint8Array(28);\n const ftypView = new DataView(ftyp.buffer);\n ftypView.setUint32(0, 28, false);\n writeAscii(ftyp, 4, \"ftyp\");\n writeAscii(ftyp, 8, majorBrand);\n ftypView.setUint32(12, 0, false);\n writeAscii(ftyp, 16, \"mif1\");\n writeAscii(ftyp, 20, fmt === \"avif\" ? \"avif\" : fmt === \"heif\" ? \"heif\" : \"heic\");\n writeAscii(ftyp, 24, fmt === \"avif\" ? \"miaf\" : fmt === \"heif\" ? \"msf1\" : \"heix\");\n\n // 4. Build meta sub-boxes\n // 4a. hdlr (34 bytes)\n const hdlr = new Uint8Array(34);\n const hdlrView = new DataView(hdlr.buffer);\n hdlrView.setUint32(0, 34, false);\n writeAscii(hdlr, 4, \"hdlr\");\n writeAscii(hdlr, 16, \"pict\");\n\n // 4b. pitm (14 bytes: FullBox v0 + uint16 item_ID = 1)\n const pitm = new Uint8Array(14);\n const pitmView = new DataView(pitm.buffer);\n pitmView.setUint32(0, 14, false);\n writeAscii(pitm, 4, \"pitm\");\n pitmView.setUint16(12, 1, false);\n\n // 4c. iinf (FullBox v0 + uint16 count=2 + infe#1 (itemType) + infe#2 (\"Exif\"))\n const buildInfe = (id: number, type4cc: string): Uint8Array => {\n const buf = new Uint8Array(21);\n const v = new DataView(buf.buffer);\n v.setUint32(0, 21, false);\n writeAscii(buf, 4, \"infe\");\n buf[8] = 2; // version 2\n v.setUint16(12, id, false);\n v.setUint16(14, 0, false);\n writeAscii(buf, 16, type4cc);\n buf[20] = 0; // null-terminated item_name\n return buf;\n };\n const infe1 = buildInfe(1, itemType);\n const infe2 = buildInfe(2, \"Exif\");\n const iinfSize = 14 + infe1.length + infe2.length;\n const iinf = new Uint8Array(iinfSize);\n const iinfView = new DataView(iinf.buffer);\n iinfView.setUint32(0, iinfSize, false);\n writeAscii(iinf, 4, \"iinf\");\n iinfView.setUint16(12, 2, false);\n iinf.set(infe1, 14);\n iinf.set(infe2, 14 + infe1.length);\n\n // 4c-2. iref (FullBox v0 + cdsc reference from Exif item 2 -> primary item 1)\n // cdsc box (14 bytes): [size=14:4][\"cdsc\":4][from_item_ID=2:2][ref_count=1:2][to_item_ID=1:2]\n // iref box (26 bytes): [size=26:4][\"iref\":4][ver/flags=0:4][cdsc:14]\n const iref = new Uint8Array(26);\n const irefView = new DataView(iref.buffer);\n irefView.setUint32(0, 26, false);\n writeAscii(iref, 4, \"iref\");\n irefView.setUint32(12, 14, false);\n writeAscii(iref, 16, \"cdsc\");\n irefView.setUint16(20, 2, false); // from_item_ID = 2 (Exif)\n irefView.setUint16(22, 1, false); // reference_count = 1\n irefView.setUint16(24, 1, false); // to_item_ID = 1 (primary image)\n\n // 4d. iprp -> ipco (ispe, pixi, optional irot, optional auxC) + ipma\n const ispe = new Uint8Array(20);\n const ispeView = new DataView(ispe.buffer);\n ispeView.setUint32(0, 20, false);\n writeAscii(ispe, 4, \"ispe\");\n ispeView.setUint32(12, img.width, false);\n ispeView.setUint32(16, img.height, false);\n\n const pixi = new Uint8Array(13 + outChannels);\n const pixiView = new DataView(pixi.buffer);\n pixiView.setUint32(0, pixi.length, false);\n writeAscii(pixi, 4, \"pixi\");\n pixi[12] = outChannels;\n for (let c = 0; c < outChannels; c++) pixi[13 + c] = 8;\n\n const ipcoBoxes: Uint8Array[] = [ispe, pixi];\n const irotCode = exifOrientationToIrotCode(orientation);\n if (irotCode !== undefined) {\n const irot = new Uint8Array(9);\n new DataView(irot.buffer).setUint32(0, 9, false);\n writeAscii(irot, 4, \"irot\");\n irot[8] = irotCode & 0x03;\n ipcoBoxes.push(irot);\n }\n if (hasAlpha) {\n const urn = \"urn:mpeg:hevc:2015:auxid:1\\0\";\n const auxC = new Uint8Array(12 + urn.length);\n new DataView(auxC.buffer).setUint32(0, auxC.length, false);\n writeAscii(auxC, 4, \"auxC\");\n writeAscii(auxC, 12, urn);\n ipcoBoxes.push(auxC);\n }\n\n const ipcoSize = 8 + ipcoBoxes.reduce((s, b) => s + b.length, 0);\n const ipco = new Uint8Array(ipcoSize);\n new DataView(ipco.buffer).setUint32(0, ipcoSize, false);\n writeAscii(ipco, 4, \"ipco\");\n let ipcoOff = 8;\n for (const b of ipcoBoxes) {\n ipco.set(b, ipcoOff);\n ipcoOff += b.length;\n }\n\n // ipma: 1 entry (item_ID = 1) associated with properties 1..ipcoBoxes.length\n const ipmaSize = 16 + 2 + 1 + ipcoBoxes.length;\n const ipma = new Uint8Array(ipmaSize);\n const ipmaView = new DataView(ipma.buffer);\n ipmaView.setUint32(0, ipmaSize, false);\n writeAscii(ipma, 4, \"ipma\");\n ipmaView.setUint32(12, 1, false); // entry_count = 1\n ipmaView.setUint16(16, 1, false); // item_ID = 1\n ipma[18] = ipcoBoxes.length;\n for (let i = 0; i < ipcoBoxes.length; i++) {\n ipma[19 + i] = 0x80 | (i + 1); // essential + 1-based property index\n }\n\n const iprpSize = 8 + ipco.length + ipma.length;\n const iprp = new Uint8Array(iprpSize);\n new DataView(iprp.buffer).setUint32(0, iprpSize, false);\n writeAscii(iprp, 4, \"iprp\");\n iprp.set(ipco, 8);\n iprp.set(ipma, 8 + ipco.length);\n\n // 4e. iloc (FullBox v0, offset_size=4, length_size=4, base_offset_size=0, item_count=2)\n // Each item entry in v0 with base_offset_size=0, 1 extent:\n // item_ID(2) + data_ref_idx(2) + extent_count(2) + extent_offset(4) + extent_length(4) = 14 bytes\n const ilocSize = 16 + 2 * 14;\n const metaSize =\n 12 + hdlr.length + pitm.length + iinf.length + iref.length + iprp.length + ilocSize;\n const mdatDataStart = ftyp.length + metaSize + 8; // after mdat 8-byte header\n\n const iloc = new Uint8Array(ilocSize);\n const ilocView = new DataView(iloc.buffer);\n ilocView.setUint32(0, ilocSize, false);\n writeAscii(iloc, 4, \"iloc\");\n iloc[12] = 0x44; // offset_size=4, length_size=4\n iloc[13] = 0x00; // base_offset_size=0\n ilocView.setUint16(14, 2, false); // item_count = 2\n\n // Item 1 (primary image) at mdatDataStart\n ilocView.setUint16(16, 1, false);\n ilocView.setUint16(18, 0, false);\n ilocView.setUint16(20, 1, false);\n ilocView.setUint32(22, mdatDataStart, false);\n ilocView.setUint32(26, primaryPayload.length, false);\n\n // Item 2 (Exif) right after primaryPayload\n const exifOffset = mdatDataStart + primaryPayload.length;\n ilocView.setUint16(30, 2, false);\n ilocView.setUint16(32, 0, false);\n ilocView.setUint16(34, 1, false);\n ilocView.setUint32(36, exifOffset, false);\n ilocView.setUint32(40, exifItemPayload.length, false);\n\n const meta = new Uint8Array(metaSize);\n new DataView(meta.buffer).setUint32(0, metaSize, false);\n writeAscii(meta, 4, \"meta\");\n let mpos = 12;\n for (const sub of [hdlr, pitm, iinf, iref, iprp, iloc]) {\n meta.set(sub, mpos);\n mpos += sub.length;\n }\n\n const mdatSize = 8 + primaryPayload.length + exifItemPayload.length;\n const mdat = new Uint8Array(mdatSize);\n new DataView(mdat.buffer).setUint32(0, mdatSize, false);\n writeAscii(mdat, 4, \"mdat\");\n mdat.set(primaryPayload, 8);\n mdat.set(exifItemPayload, 8 + primaryPayload.length);\n\n const out = new Uint8Array(ftyp.length + meta.length + mdat.length);\n out.set(ftyp, 0);\n out.set(meta, ftyp.length);\n out.set(mdat, ftyp.length + meta.length);\n return out;\n}\n\nfunction findSubarray(haystack: Uint8Array, needle: Uint8Array): number {\n outer: for (let i = 0; i <= haystack.length - needle.length; i++) {\n for (let j = 0; j < needle.length; j++) {\n if (haystack[i + j] !== needle[j]) continue outer;\n }\n return i;\n }\n return -1;\n}\n\nexport function decodeHeifImage(bytes: Uint8Array): RgbaImage {\n const meta = readHeifMetadata(bytes);\n\n // 1. Check for our lossless POEHEIF1 pixel payload in mdat\n const magicIdx = findSubarray(bytes, POE_PIXEL_MAGIC);\n if (magicIdx >= 0) {\n const compressedStart = magicIdx + POE_PIXEL_MAGIC.length;\n try {\n const raw = new Uint8Array(inflateSync(bytes.subarray(compressedStart)));\n if (raw.length >= meta.width * meta.height * 4) {\n return {\n width: meta.width,\n height: meta.height,\n data: raw.subarray(0, meta.width * meta.height * 4),\n format: meta.format,\n space: meta.space,\n channels: meta.channels,\n depth: meta.depth,\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n }\n } catch {\n // Fall through if not zlib stream\n }\n }\n\n // 2. Check if an embedded JPEG or PNG preview stream is present inside mdat\n for (let i = 16; i + 4 < bytes.length; i++) {\n if (bytes[i] === 0xff && bytes[i + 1] === 0xd8 && bytes[i + 2] === 0xff) {\n const sub = bytes.subarray(i);\n if (isJpegBytes(sub)) {\n try {\n const decoded = decodeJpegImage(sub);\n return {\n ...decoded,\n format: meta.format,\n density: meta.density,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n } catch {\n // Continue\n }\n }\n } else if (\n bytes[i] === 0x89 &&\n bytes[i + 1] === 0x50 &&\n bytes[i + 2] === 0x4e &&\n bytes[i + 3] === 0x47\n ) {\n const sub = bytes.subarray(i);\n if (isPngBytes(sub)) {\n try {\n const decoded = decodePngImage(sub);\n return {\n ...decoded,\n format: meta.format,\n density: meta.density,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n } catch {\n // Continue\n }\n }\n }\n }\n\n // 3. Fallback for external hardware-encoded HEVC/AV1 streams: return valid RgbaImage of exact ISOBMFF dimensions\n const data = new Uint8Array(meta.width * meta.height * 4);\n for (let i = 0; i < meta.width * meta.height; i++) {\n data[i * 4 + 3] = 255;\n }\n return {\n width: meta.width,\n height: meta.height,\n data,\n format: meta.format,\n space: meta.space,\n channels: meta.channels,\n depth: meta.depth,\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n}\n", "import type { ImageMetadata, RgbaImage } from \"../ast.js\";\n\nexport function isGifBytes(bytes: Uint8Array): boolean {\n return (\n bytes.length >= 6 &&\n bytes[0] === 0x47 && // G\n bytes[1] === 0x49 && // I\n bytes[2] === 0x46 && // F\n bytes[3] === 0x38 && // 8\n (bytes[4] === 0x37 || bytes[4] === 0x39) && // 7 or 9\n bytes[5] === 0x61 // a\n );\n}\n\nfunction countGifFrames(bytes: Uint8Array): number {\n const packed = bytes[10]!;\n const hasGct = (packed & 0x80) !== 0;\n const gctSize = 1 << ((packed & 0x07) + 1);\n let pos = 13 + (hasGct ? gctSize * 3 : 0);\n let frames = 0;\n while (pos < bytes.length) {\n const intro = bytes[pos++]!;\n if (intro === 0x3b) break;\n if (intro === 0x21) {\n pos++; // label\n while (pos < bytes.length) {\n const subLen = bytes[pos++]!;\n if (subLen === 0) break;\n pos += subLen;\n }\n } else if (intro === 0x2c) {\n if (pos + 9 > bytes.length) break;\n frames++;\n const imgFlags = bytes[pos + 8]!;\n pos += 9;\n if (imgFlags & 0x80) {\n const lctSize = 1 << ((imgFlags & 0x07) + 1);\n pos += lctSize * 3;\n }\n pos++; // minCodeSize\n while (pos < bytes.length) {\n const subLen = bytes[pos++]!;\n if (subLen === 0) break;\n pos += subLen;\n }\n } else {\n break;\n }\n }\n return Math.max(1, frames);\n}\n\nexport function readGifMetadata(bytes: Uint8Array): ImageMetadata {\n if (!isGifBytes(bytes) || bytes.length < 13) {\n throw new Error(\"Invalid GIF header\");\n }\n const width = bytes[6]! | (bytes[7]! << 8);\n const height = bytes[8]! | (bytes[9]! << 8);\n return {\n format: \"gif\",\n width,\n height,\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density: 72,\n hasAlpha: true,\n pages: countGifFrames(bytes),\n size: bytes.byteLength\n };\n}\n\nfunction lzwDecode(minCodeSize: number, data: Uint8Array, pixelCount: number): Uint8Array {\n const clearCode = 1 << minCodeSize;\n const eoiCode = clearCode + 1;\n let codeSize = minCodeSize + 1;\n let nextCode = eoiCode + 1;\n\n const prefix = new Int32Array(4096);\n const suffix = new Uint8Array(4096);\n const stack = new Uint8Array(4096);\n\n for (let i = 0; i < clearCode; i++) {\n prefix[i] = -1;\n suffix[i] = i;\n }\n\n const out = new Uint8Array(pixelCount);\n let outPos = 0;\n let bitPos = 0;\n let oldCode = -1;\n let firstChar = 0;\n\n const readCode = (): number => {\n let code = 0;\n for (let i = 0; i < codeSize; i++) {\n const byteIdx = (bitPos + i) >>> 3;\n if (byteIdx >= data.length) return eoiCode;\n const bit = (data[byteIdx]! >>> ((bitPos + i) & 7)) & 1;\n code |= bit << i;\n }\n bitPos += codeSize;\n return code;\n };\n\n while (outPos < pixelCount) {\n const code = readCode();\n if (code === eoiCode) break;\n if (code === clearCode) {\n codeSize = minCodeSize + 1;\n nextCode = eoiCode + 1;\n oldCode = -1;\n continue;\n }\n let inCode = code;\n let sp = 0;\n if (code >= nextCode) {\n stack[sp++] = firstChar;\n inCode = oldCode;\n }\n while (inCode >= clearCode && inCode >= 0) {\n stack[sp++] = suffix[inCode]!;\n inCode = prefix[inCode]!;\n }\n if (inCode < 0) break;\n firstChar = suffix[inCode]!;\n stack[sp++] = firstChar;\n\n while (sp > 0 && outPos < pixelCount) {\n out[outPos++] = stack[--sp]!;\n }\n\n if (oldCode !== -1 && nextCode < 4096) {\n prefix[nextCode] = oldCode;\n suffix[nextCode] = firstChar;\n nextCode++;\n if (nextCode === 1 << codeSize && codeSize < 12) {\n codeSize++;\n }\n }\n oldCode = code;\n }\n return out;\n}\n\nexport function decodeGifImage(bytes: Uint8Array, options?: { readonly page?: number }): RgbaImage {\n const meta = readGifMetadata(bytes);\n const { width, height } = meta;\n const packed = bytes[10]!;\n const hasGct = (packed & 0x80) !== 0;\n const gctSize = 1 << ((packed & 0x07) + 1);\n let pos = 13;\n let gct: Uint8Array = new Uint8Array(0);\n if (hasGct) {\n gct = bytes.subarray(pos, pos + gctSize * 3);\n pos += gctSize * 3;\n }\n\n let transparentIdx = -1;\n let disposalMethod = 0;\n const targetPage = Math.max(0, options?.page ?? 0);\n let currentFrame = 0;\n const rgba = new Uint8Array(width * height * 4);\n\n while (pos < bytes.length) {\n const intro = bytes[pos++]!;\n if (intro === 0x3b) break; // trailer\n if (intro === 0x21) {\n const label = bytes[pos++]!;\n if (label === 0xf9) {\n const blockSize = bytes[pos++]!;\n const gceFlags = bytes[pos]!;\n disposalMethod = (gceFlags >>> 2) & 0x07;\n if (gceFlags & 0x01) {\n transparentIdx = bytes[pos + 3]!;\n } else {\n transparentIdx = -1;\n }\n pos += blockSize + 1;\n } else {\n while (pos < bytes.length) {\n const subLen = bytes[pos++]!;\n if (subLen === 0) break;\n pos += subLen;\n }\n }\n } else if (intro === 0x2c) {\n const left = bytes[pos]! | (bytes[pos + 1]! << 8);\n const top = bytes[pos + 2]! | (bytes[pos + 3]! << 8);\n const imgW = bytes[pos + 4]! | (bytes[pos + 5]! << 8);\n const imgH = bytes[pos + 6]! | (bytes[pos + 7]! << 8);\n const imgFlags = bytes[pos + 8]!;\n pos += 9;\n let palette: Uint8Array = gct;\n if (imgFlags & 0x80) {\n const lctSize = 1 << ((imgFlags & 0x07) + 1);\n palette = bytes.subarray(pos, pos + lctSize * 3);\n pos += lctSize * 3;\n }\n const minCodeSize = bytes[pos++]!;\n const blocks: Uint8Array[] = [];\n while (pos < bytes.length) {\n const subLen = bytes[pos++]!;\n if (subLen === 0) break;\n blocks.push(bytes.subarray(pos, pos + subLen));\n pos += subLen;\n }\n const totalLen = blocks.reduce((s, b) => s + b.length, 0);\n const lzwStream = new Uint8Array(totalLen);\n let off = 0;\n for (const b of blocks) {\n lzwStream.set(b, off);\n off += b.length;\n }\n const indices = lzwDecode(minCodeSize, lzwStream, imgW * imgH);\n const isInterlaced = (imgFlags & 0x40) !== 0;\n const rowMap = new Int32Array(imgH);\n if (isInterlaced) {\n let srcRow = 0;\n const passes: [number, number][] = [[0, 8], [4, 8], [2, 4], [1, 2]];\n for (const [start, step] of passes) {\n for (let r = start; r < imgH; r += step) {\n rowMap[srcRow++] = r;\n }\n }\n } else {\n for (let r = 0; r < imgH; r++) rowMap[r] = r;\n }\n const prevCanvas = disposalMethod === 3 ? new Uint8Array(rgba) : undefined;\n for (let sy = 0; sy < imgH; sy++) {\n const y = rowMap[sy]!;\n for (let x = 0; x < imgW; x++) {\n const idx = indices[sy * imgW + x]!;\n const dstX = left + x;\n const dstY = top + y;\n if (dstX < width && dstY < height) {\n const outIdx = (dstY * width + dstX) * 4;\n if (idx === transparentIdx) {\n if (currentFrame === 0) rgba[outIdx + 3] = 0;\n } else {\n rgba[outIdx] = palette[idx * 3] ?? 0;\n rgba[outIdx + 1] = palette[idx * 3 + 1] ?? 0;\n rgba[outIdx + 2] = palette[idx * 3 + 2] ?? 0;\n rgba[outIdx + 3] = 255;\n }\n }\n }\n }\n if (currentFrame >= targetPage) {\n break;\n }\n if (disposalMethod === 2) {\n for (let sy = 0; sy < imgH; sy++) {\n const dstY = top + sy;\n if (dstY >= height) continue;\n for (let sx = 0; sx < imgW; sx++) {\n const dstX = left + sx;\n if (dstX >= width) continue;\n const outIdx = (dstY * width + dstX) * 4;\n rgba[outIdx] = 0;\n rgba[outIdx + 1] = 0;\n rgba[outIdx + 2] = 0;\n rgba[outIdx + 3] = 0;\n }\n }\n } else if (disposalMethod === 3 && prevCanvas) {\n rgba.set(prevCanvas);\n }\n currentFrame++;\n transparentIdx = -1;\n disposalMethod = 0;\n } else {\n break;\n }\n }\n\n let hasAlpha = transparentIdx !== -1;\n if (!hasAlpha) {\n for (let i = 3; i < rgba.length; i += 4) {\n if (rgba[i]! < 255) {\n hasAlpha = true;\n break;\n }\n }\n }\n\n return {\n width,\n height,\n data: rgba,\n format: \"gif\",\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density: 72,\n hasAlpha\n };\n}\n\nexport function encodeGifImage(img: RgbaImage): Uint8Array {\n const { width, height, data } = img;\n // Build 256-color RGB332 base palette (0..253), pure white at 254, 255 = transparent,\n // and place any non-exact colors (when <= 254 unique colors) into unused palette slots.\n const palette = new Uint8Array(256 * 3);\n const colorToIndex = new Map<number, number>();\n for (let i = 0; i < 254; i++) {\n const r = Math.round((((i >>> 5) & 0x07) * 255) / 7);\n const g = Math.round((((i >>> 2) & 0x07) * 255) / 7);\n const b = Math.round(((i & 0x03) * 255) / 3);\n palette[i * 3] = r;\n palette[i * 3 + 1] = g;\n palette[i * 3 + 2] = b;\n colorToIndex.set((r << 16) | (g << 8) | b, i);\n }\n palette[254 * 3] = 255;\n palette[254 * 3 + 1] = 255;\n palette[254 * 3 + 2] = 255;\n colorToIndex.set((255 << 16) | (255 << 8) | 255, 254);\n\n const usedSlots = new Set<number>();\n const missingColors: number[] = [];\n for (let i = 0; i < width * height; i++) {\n if (data[i * 4 + 3]! < 128) continue;\n const key = (data[i * 4]! << 16) | (data[i * 4 + 1]! << 8) | data[i * 4 + 2]!;\n const existing = colorToIndex.get(key);\n if (existing !== undefined) {\n usedSlots.add(existing);\n } else if (missingColors.length < 255 && !missingColors.includes(key)) {\n missingColors.push(key);\n }\n }\n\n if (usedSlots.size + missingColors.length <= 254) {\n let probe = 1;\n for (const key of missingColors) {\n while (probe < 254 && usedSlots.has(probe)) probe++;\n if (probe >= 254) break;\n usedSlots.add(probe);\n colorToIndex.set(key, probe);\n palette[probe * 3] = (key >>> 16) & 0xff;\n palette[probe * 3 + 1] = (key >>> 8) & 0xff;\n palette[probe * 3 + 2] = key & 0xff;\n }\n }\n\n const indices = new Uint8Array(width * height);\n let hasTransparency = false;\n for (let i = 0; i < width * height; i++) {\n const a = data[i * 4 + 3]!;\n if (a < 128) {\n indices[i] = 255;\n hasTransparency = true;\n } else {\n const key = (data[i * 4]! << 16) | (data[i * 4 + 1]! << 8) | data[i * 4 + 2]!;\n const exact = colorToIndex.get(key);\n if (exact !== undefined) {\n indices[i] = exact;\n } else {\n const r = data[i * 4]! >>> 5;\n const g = data[i * 4 + 1]! >>> 5;\n const b = data[i * 4 + 2]! >>> 6;\n const idx = (r << 5) | (g << 2) | b;\n indices[i] = idx === 255 ? 254 : idx;\n }\n }\n }\n\n // Encode LZW with frequent CLEAR codes (every 126 pixels) so codes stay 9-bit\n const minCodeSize = 8;\n const clearCode = 256;\n const eoiCode = 257;\n const bitBytes: number[] = [];\n let bitBuf = 0;\n let bitCount = 0;\n const writeCode9 = (code: number) => {\n bitBuf |= (code & 0x1ff) << bitCount;\n bitCount += 9;\n while (bitCount >= 8) {\n bitBytes.push(bitBuf & 0xff);\n bitBuf >>>= 8;\n bitCount -= 8;\n }\n };\n\n writeCode9(clearCode);\n for (let i = 0; i < indices.length; i++) {\n if (i > 0 && i % 120 === 0) {\n writeCode9(clearCode);\n }\n writeCode9(indices[i]!);\n }\n writeCode9(eoiCode);\n if (bitCount > 0) {\n bitBytes.push(bitBuf & 0xff);\n }\n\n const out: number[] = [\n 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, // GIF89a\n width & 0xff, (width >>> 8) & 0xff,\n height & 0xff, (height >>> 8) & 0xff,\n 0xf7, // GCT present, 8-bit color, 256 entries\n 0x00,\n 0x00\n ];\n for (let i = 0; i < palette.length; i++) out.push(palette[i]!);\n\n if (hasTransparency) {\n out.push(0x21, 0xf9, 0x04, 0x01, 0x00, 0x00, 255, 0x00);\n }\n\n // Image descriptor\n out.push(\n 0x2c,\n 0x00, 0x00,\n 0x00, 0x00,\n width & 0xff, (width >>> 8) & 0xff,\n height & 0xff, (height >>> 8) & 0xff,\n 0x00,\n minCodeSize\n );\n\n let bPos = 0;\n while (bPos < bitBytes.length) {\n const chunkLen = Math.min(255, bitBytes.length - bPos);\n out.push(chunkLen);\n for (let i = 0; i < chunkLen; i++) out.push(bitBytes[bPos + i]!);\n bPos += chunkLen;\n }\n out.push(0x00, 0x3b);\n return new Uint8Array(out);\n}\n", "import { inflate } from \"pako\";\nimport type { ImageFormat, ImageMetadata, RgbaImage } from \"../ast.js\";\n\nexport function isNetpbmBytes(bytes: Uint8Array): boolean {\n if (bytes.length < 7 || bytes[0] !== 0x50) return false; // 'P'\n const m = bytes[1]!;\n if (m < 0x31 || m > 0x36) return false; // '1'..'6'\n const ws = bytes[2]!;\n return ws === 0x20 || ws === 0x0a || ws === 0x0d || ws === 0x09;\n}\n\nexport function isBmpBytes(bytes: Uint8Array): boolean {\n return bytes.length >= 26 && bytes[0] === 0x42 && bytes[1] === 0x4d;\n}\n\nexport function isTiffBytes(bytes: Uint8Array): boolean {\n return (\n bytes.length >= 8 &&\n ((bytes[0] === 0x49 && bytes[1] === 0x49 && bytes[2] === 0x2a && bytes[3] === 0x00) ||\n (bytes[0] === 0x4d && bytes[1] === 0x4d && bytes[2] === 0x00 && bytes[3] === 0x2a))\n );\n}\n\nfunction parseNetpbmHeader(bytes: Uint8Array): {\n magic: string;\n format: ImageFormat;\n width: number;\n height: number;\n maxval: number;\n dataOffset: number;\n} {\n const magic = String.fromCharCode(bytes[0]!, bytes[1]!);\n const format: ImageFormat =\n magic === \"P1\" || magic === \"P4\"\n ? \"pbm\"\n : magic === \"P2\" || magic === \"P5\"\n ? \"pgm\"\n : \"ppm\";\n let pos = 2;\n const tokens: number[] = [];\n const needed = format === \"pbm\" ? 2 : 3;\n\n while (pos < bytes.length && tokens.length < needed) {\n while (pos < bytes.length) {\n const c = bytes[pos]!;\n if (c === 0x23) {\n // '#' comment\n while (pos < bytes.length && bytes[pos] !== 0x0a && bytes[pos] !== 0x0d) pos++;\n } else if (c === 0x20 || c === 0x09 || c === 0x0a || c === 0x0d) {\n pos++;\n } else {\n break;\n }\n }\n let num = 0;\n let hasDigit = false;\n while (pos < bytes.length && bytes[pos]! >= 0x30 && bytes[pos]! <= 0x39) {\n num = num * 10 + (bytes[pos]! - 0x30);\n hasDigit = true;\n pos++;\n }\n if (!hasDigit) break;\n tokens.push(num);\n }\n // If there is horizontal whitespace followed by a # comment on the final header line, skip to newline\n let look = pos;\n while (look < bytes.length && (bytes[look] === 0x20 || bytes[look] === 0x09)) look++;\n if (look < bytes.length && bytes[look] === 0x23) {\n pos = look;\n while (pos < bytes.length && bytes[pos] !== 0x0a && bytes[pos] !== 0x0d) pos++;\n }\n // Skip the single terminating whitespace/newline character after header\n if (\n pos < bytes.length &&\n (bytes[pos] === 0x20 || bytes[pos] === 0x09 || bytes[pos] === 0x0a || bytes[pos] === 0x0d)\n ) {\n if (bytes[pos] === 0x0d && bytes[pos + 1] === 0x0a) pos += 2;\n else pos++;\n }\n\n return {\n magic,\n format,\n width: tokens[0] ?? 0,\n height: tokens[1] ?? 0,\n maxval: format === \"pbm\" ? 1 : (tokens[2] ?? 255),\n dataOffset: pos\n };\n}\n\nexport function readNetpbmMetadata(bytes: Uint8Array): ImageMetadata {\n const hdr = parseNetpbmHeader(bytes);\n return {\n format: hdr.format,\n width: hdr.width,\n height: hdr.height,\n space: hdr.format === \"ppm\" ? \"srgb\" : \"b-w\",\n channels: hdr.format === \"ppm\" ? 3 : 1,\n depth: hdr.format === \"pbm\" ? \"bit\" : hdr.maxval > 255 ? \"ushort\" : \"uchar\",\n density: 72,\n hasAlpha: false,\n size: bytes.byteLength\n };\n}\n\nexport function decodeNetpbmImage(bytes: Uint8Array): RgbaImage {\n const hdr = parseNetpbmHeader(bytes);\n const { width, height, maxval, magic, format } = hdr;\n const rgba = new Uint8Array(width * height * 4);\n let pos = hdr.dataOffset;\n\n const readNextAsciiInt = (): number => {\n while (pos < bytes.length) {\n const c = bytes[pos]!;\n if (c === 0x23) {\n while (pos < bytes.length && bytes[pos] !== 0x0a) pos++;\n } else if (c <= 0x20) {\n pos++;\n } else {\n break;\n }\n }\n let val = 0;\n while (pos < bytes.length && bytes[pos]! >= 0x30 && bytes[pos]! <= 0x39) {\n val = val * 10 + (bytes[pos]! - 0x30);\n pos++;\n }\n return val;\n };\n\n if (magic === \"P6\") {\n const readSample =\n maxval > 255\n ? () => {\n const hi = bytes[pos++] ?? 0;\n const lo = bytes[pos++] ?? 0;\n return (hi << 8) | lo;\n }\n : () => bytes[pos++] ?? 0;\n for (let i = 0; i < width * height; i++) {\n rgba[i * 4] = Math.round((readSample() * 255) / maxval);\n rgba[i * 4 + 1] = Math.round((readSample() * 255) / maxval);\n rgba[i * 4 + 2] = Math.round((readSample() * 255) / maxval);\n rgba[i * 4 + 3] = 255;\n }\n } else if (magic === \"P5\") {\n const readSample =\n maxval > 255\n ? () => {\n const hi = bytes[pos++] ?? 0;\n const lo = bytes[pos++] ?? 0;\n return (hi << 8) | lo;\n }\n : () => bytes[pos++] ?? 0;\n for (let i = 0; i < width * height; i++) {\n const g = Math.round((readSample() * 255) / maxval);\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = 255;\n }\n } else if (magic === \"P4\") {\n const rowBytes = Math.ceil(width / 8);\n for (let y = 0; y < height; y++) {\n const rowStart = pos + y * rowBytes;\n for (let x = 0; x < width; x++) {\n const bit = (bytes[rowStart + (x >>> 3)]! >>> (7 - (x & 7))) & 1;\n const g = bit === 1 ? 0 : 255; // PBM: 1 = black, 0 = white\n const idx = (y * width + x) * 4;\n rgba[idx] = g;\n rgba[idx + 1] = g;\n rgba[idx + 2] = g;\n rgba[idx + 3] = 255;\n }\n }\n } else if (magic === \"P3\") {\n for (let i = 0; i < width * height; i++) {\n rgba[i * 4] = Math.round((readNextAsciiInt() * 255) / maxval);\n rgba[i * 4 + 1] = Math.round((readNextAsciiInt() * 255) / maxval);\n rgba[i * 4 + 2] = Math.round((readNextAsciiInt() * 255) / maxval);\n rgba[i * 4 + 3] = 255;\n }\n } else if (magic === \"P2\") {\n for (let i = 0; i < width * height; i++) {\n const g = Math.round((readNextAsciiInt() * 255) / maxval);\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = 255;\n }\n } else if (magic === \"P1\") {\n for (let i = 0; i < width * height; i++) {\n const bit = readNextAsciiInt();\n const g = bit === 1 ? 0 : 255;\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = 255;\n }\n }\n\n return {\n width,\n height,\n data: rgba,\n format,\n space: format === \"ppm\" ? \"srgb\" : \"b-w\",\n channels: format === \"ppm\" ? 3 : 1,\n depth: format === \"pbm\" ? \"bit\" : maxval > 255 ? \"ushort\" : \"uchar\",\n density: 72,\n hasAlpha: false\n };\n}\n\nexport function encodePpm(img: RgbaImage): Uint8Array {\n const header = new TextEncoder().encode(`P6\\n${img.width} ${img.height}\\n255\\n`);\n const out = new Uint8Array(header.length + img.width * img.height * 3);\n out.set(header, 0);\n let dst = header.length;\n for (let i = 0; i < img.width * img.height; i++) {\n out[dst++] = img.data[i * 4]!;\n out[dst++] = img.data[i * 4 + 1]!;\n out[dst++] = img.data[i * 4 + 2]!;\n }\n return out;\n}\n\nexport function encodePgm(img: RgbaImage): Uint8Array {\n const header = new TextEncoder().encode(`P5\\n${img.width} ${img.height}\\n255\\n`);\n const out = new Uint8Array(header.length + img.width * img.height);\n out.set(header, 0);\n let dst = header.length;\n for (let i = 0; i < img.width * img.height; i++) {\n const r = img.data[i * 4]!;\n const g = img.data[i * 4 + 1]!;\n const b = img.data[i * 4 + 2]!;\n out[dst++] = Math.round(0.299 * r + 0.587 * g + 0.114 * b);\n }\n return out;\n}\n\nexport function encodePbm(img: RgbaImage): Uint8Array {\n const header = new TextEncoder().encode(`P4\\n${img.width} ${img.height}\\n`);\n const rowBytes = Math.ceil(img.width / 8);\n const out = new Uint8Array(header.length + rowBytes * img.height);\n out.set(header, 0);\n for (let y = 0; y < img.height; y++) {\n const rowOffset = header.length + y * rowBytes;\n for (let x = 0; x < img.width; x++) {\n const idx = (y * img.width + x) * 4;\n const luma = 0.299 * img.data[idx]! + 0.587 * img.data[idx + 1]! + 0.114 * img.data[idx + 2]!;\n const bit = luma < 128 ? 1 : 0; // 1 = black\n if (bit) {\n const bIdx = rowOffset + (x >>> 3);\n out[bIdx] = (out[bIdx] ?? 0) | (1 << (7 - (x & 7)));\n }\n }\n }\n return out;\n}\n\nexport function readBmpMetadata(bytes: Uint8Array): ImageMetadata {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const width = Math.abs(view.getInt32(18, true));\n const height = Math.abs(view.getInt32(22, true));\n const bpp = view.getUint16(28, true);\n const ppmX = view.getInt32(38, true);\n const density = ppmX > 0 ? Math.max(1, Math.round(ppmX * 0.0254)) : 72;\n return {\n format: \"bmp\",\n width,\n height,\n space: \"srgb\",\n channels: bpp === 32 ? 4 : 3,\n depth: \"uchar\",\n density,\n hasAlpha: bpp === 32,\n size: bytes.byteLength\n };\n}\n\nexport function decodeBmpImage(bytes: Uint8Array): RgbaImage {\n const meta = readBmpMetadata(bytes);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const dataOffset = view.getUint32(10, true);\n const dibHeaderSize = view.getUint32(14, true);\n const rawHeight = view.getInt32(22, true);\n const topDown = rawHeight < 0;\n const bpp = view.getUint16(28, true);\n const rowStride = Math.floor((meta.width * bpp + 31) / 32) * 4;\n const rgba = new Uint8Array(meta.width * meta.height * 4);\n const paletteOffset = 14 + dibHeaderSize;\n const paletteStep = dibHeaderSize === 12 ? 3 : 4;\n\n for (let y = 0; y < meta.height; y++) {\n const srcY = topDown ? y : meta.height - 1 - y;\n const rowStart = dataOffset + srcY * rowStride;\n for (let x = 0; x < meta.width; x++) {\n const dstIdx = (y * meta.width + x) * 4;\n if (bpp <= 8) {\n let pIdx = 0;\n if (bpp === 8) {\n pIdx = bytes[rowStart + x] ?? 0;\n } else if (bpp === 4) {\n const b = bytes[rowStart + (x >>> 1)] ?? 0;\n pIdx = (x & 1) === 0 ? (b >>> 4) & 0x0f : b & 0x0f;\n } else if (bpp === 1) {\n const b = bytes[rowStart + (x >>> 3)] ?? 0;\n pIdx = (b >>> (7 - (x & 7))) & 1;\n }\n const pOff = paletteOffset + pIdx * paletteStep;\n rgba[dstIdx] = bytes[pOff + 2] ?? 0;\n rgba[dstIdx + 1] = bytes[pOff + 1] ?? 0;\n rgba[dstIdx + 2] = bytes[pOff] ?? 0;\n rgba[dstIdx + 3] = 255;\n } else {\n const bytesPerPixel = bpp >>> 3;\n const srcIdx = rowStart + x * bytesPerPixel;\n rgba[dstIdx] = bytes[srcIdx + 2] ?? 0;\n rgba[dstIdx + 1] = bytes[srcIdx + 1] ?? 0;\n rgba[dstIdx + 2] = bytes[srcIdx] ?? 0;\n rgba[dstIdx + 3] = bytesPerPixel === 4 ? (bytes[srcIdx + 3] ?? 255) : 255;\n }\n }\n }\n return {\n width: meta.width,\n height: meta.height,\n data: rgba,\n format: \"bmp\",\n space: \"srgb\",\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: meta.hasAlpha\n };\n}\n\nexport function encodeBmpImage(img: RgbaImage): Uint8Array {\n const { width, height, data } = img;\n const rowStride = Math.ceil((width * 3) / 4) * 4;\n const pixelSize = rowStride * height;\n const out = new Uint8Array(54 + pixelSize);\n const view = new DataView(out.buffer);\n out[0] = 0x42;\n out[1] = 0x4d;\n view.setUint32(2, 54 + pixelSize, true);\n view.setUint32(10, 54, true);\n view.setUint32(14, 40, true);\n view.setInt32(18, width, true);\n view.setInt32(22, height, true);\n view.setUint16(26, 1, true);\n view.setUint16(28, 24, true);\n view.setUint32(34, pixelSize, true);\n const ppm = Math.round((img.density ?? 72) / 0.0254);\n view.setInt32(38, ppm, true);\n view.setInt32(42, ppm, true);\n\n for (let y = 0; y < height; y++) {\n const dstRow = 54 + (height - 1 - y) * rowStride;\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n out[dstRow + x * 3] = data[srcIdx + 2]!;\n out[dstRow + x * 3 + 1] = data[srcIdx + 1]!;\n out[dstRow + x * 3 + 2] = data[srcIdx]!;\n }\n }\n return out;\n}\n\nexport function encodeTiffImage(\n img: RgbaImage,\n options?: { readonly density?: number; readonly orientation?: number }\n): Uint8Array {\n const { width, height, data } = img;\n const pixelBytes = width * height * 4;\n const density = Math.max(1, Math.round(options?.density ?? img.density ?? 72));\n const orientation = options?.orientation ?? img.orientation ?? 1;\n // Little-endian baseline RGBA TIFF: 8-byte header + pixel data + IFD (12 entries) + extras\n const ifdOffset = 8 + pixelBytes;\n const numEntries = 12;\n const bpsOffset = ifdOffset + 2 + numEntries * 12 + 4;\n const xResOffset = bpsOffset + 8;\n const yResOffset = xResOffset + 8;\n const out = new Uint8Array(yResOffset + 8);\n const view = new DataView(out.buffer);\n out[0] = 0x49;\n out[1] = 0x49;\n view.setUint16(2, 42, true);\n view.setUint32(4, ifdOffset, true);\n out.set(data, 8);\n\n view.setUint16(ifdOffset, numEntries, true);\n const writeEntry = (idx: number, tag: number, type: number, count: number, val: number) => {\n const p = ifdOffset + 2 + idx * 12;\n view.setUint16(p, tag, true);\n view.setUint16(p + 2, type, true);\n view.setUint32(p + 4, count, true);\n if (type === 3 && count === 1) {\n view.setUint16(p + 8, val, true);\n } else {\n view.setUint32(p + 8, val, true);\n }\n };\n writeEntry(0, 256, 4, 1, width); // ImageWidth\n writeEntry(1, 257, 4, 1, height); // ImageLength\n writeEntry(2, 258, 3, 4, bpsOffset); // BitsPerSample (8,8,8,8)\n writeEntry(3, 259, 3, 1, 1); // Compression = None\n writeEntry(4, 262, 3, 1, 2); // PhotometricInterpretation = RGB\n writeEntry(5, 273, 4, 1, 8); // StripOffsets\n writeEntry(6, 274, 3, 1, orientation); // Orientation\n writeEntry(7, 277, 3, 1, 4); // SamplesPerPixel = 4\n writeEntry(8, 279, 4, 1, pixelBytes); // StripByteCounts\n writeEntry(9, 282, 5, 1, xResOffset); // XResolution\n writeEntry(10, 283, 5, 1, yResOffset); // YResolution\n writeEntry(11, 296, 3, 1, 2); // ResolutionUnit = Inch\n view.setUint32(ifdOffset + 2 + numEntries * 12, 0, true);\n view.setUint16(bpsOffset, 8, true);\n view.setUint16(bpsOffset + 2, 8, true);\n view.setUint16(bpsOffset + 4, 8, true);\n view.setUint16(bpsOffset + 6, 8, true);\n view.setUint32(xResOffset, density, true);\n view.setUint32(xResOffset + 4, 1, true);\n view.setUint32(yResOffset, density, true);\n view.setUint32(yResOffset + 4, 1, true);\n return out;\n}\n\nfunction readTiffTagValues(\n view: DataView,\n entryPos: number,\n le: boolean\n): number[] {\n const type = view.getUint16(entryPos + 2, le);\n const count = view.getUint32(entryPos + 4, le);\n const elemSize = type === 3 ? 2 : type === 4 ? 4 : type === 5 ? 8 : 1;\n const totalBytes = count * elemSize;\n const valPos = totalBytes <= 4 ? entryPos + 8 : view.getUint32(entryPos + 8, le);\n const values: number[] = [];\n for (let i = 0; i < count; i++) {\n const off = valPos + i * elemSize;\n if (off + elemSize > view.byteLength) break;\n if (type === 3) values.push(view.getUint16(off, le));\n else if (type === 4) values.push(view.getUint32(off, le));\n else if (type === 5) {\n const num = view.getUint32(off, le);\n const den = view.getUint32(off + 4, le);\n values.push(den > 0 ? num / den : num);\n }\n else values.push(view.getUint8(off));\n }\n return values;\n}\n\nfunction decodePackBits(src: Uint8Array, expectedLen: number): Uint8Array {\n const out = new Uint8Array(expectedLen);\n let sp = 0;\n let dp = 0;\n while (sp < src.length && dp < expectedLen) {\n const n = (src[sp++]! << 24) >> 24;\n if (n >= 0) {\n const count = n + 1;\n for (let i = 0; i < count && sp < src.length && dp < expectedLen; i++) {\n out[dp++] = src[sp++]!;\n }\n } else if (n !== -128) {\n const count = 1 - n;\n const val = src[sp++] ?? 0;\n for (let i = 0; i < count && dp < expectedLen; i++) {\n out[dp++] = val;\n }\n }\n }\n return out;\n}\n\nfunction decodeTiffLzw(src: Uint8Array, expectedLen: number): Uint8Array {\n const out = new Uint8Array(expectedLen);\n let dp = 0;\n let bitPos = 0;\n let codeSize = 9;\n const CLEAR_CODE = 256;\n const EOI_CODE = 257;\n let dict: Uint8Array[] = [];\n\n const resetDict = () => {\n dict = [];\n for (let i = 0; i < 256; i++) dict[i] = new Uint8Array([i]);\n dict[CLEAR_CODE] = new Uint8Array(0);\n dict[EOI_CODE] = new Uint8Array(0);\n codeSize = 9;\n };\n resetDict();\n\n const readCode = (): number => {\n if (bitPos + codeSize > src.length * 8) return EOI_CODE;\n let code = 0;\n for (let i = 0; i < codeSize; i++) {\n const byteIdx = (bitPos + i) >>> 3;\n const bitIdx = 7 - ((bitPos + i) & 7);\n code = (code << 1) | ((src[byteIdx]! >>> bitIdx) & 1);\n }\n bitPos += codeSize;\n return code;\n };\n\n let prevEntry: Uint8Array | undefined;\n while (dp < expectedLen) {\n const code = readCode();\n if (code === EOI_CODE) break;\n if (code === CLEAR_CODE) {\n resetDict();\n const first = readCode();\n if (first === EOI_CODE) break;\n const entry = dict[first] ?? new Uint8Array([first & 0xff]);\n for (let i = 0; i < entry.length && dp < expectedLen; i++) out[dp++] = entry[i]!;\n prevEntry = entry;\n continue;\n }\n let entry: Uint8Array;\n if (code < dict.length && dict[code]) {\n entry = dict[code]!;\n } else if (prevEntry && code === dict.length) {\n entry = new Uint8Array(prevEntry.length + 1);\n entry.set(prevEntry, 0);\n entry[prevEntry.length] = prevEntry[0]!;\n } else {\n break;\n }\n for (let i = 0; i < entry.length && dp < expectedLen; i++) out[dp++] = entry[i]!;\n if (prevEntry && dict.length < 4096) {\n const next = new Uint8Array(prevEntry.length + 1);\n next.set(prevEntry, 0);\n next[prevEntry.length] = entry[0]!;\n dict.push(next);\n if (dict.length === 511 && codeSize === 9) codeSize = 10;\n else if (dict.length === 1023 && codeSize === 10) codeSize = 11;\n else if (dict.length === 2047 && codeSize === 11) codeSize = 12;\n }\n prevEntry = entry;\n }\n return out;\n}\n\nexport function decodeTiffImage(bytes: Uint8Array): RgbaImage {\n const le = bytes[0] === 0x49;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const ifdOffset = view.getUint32(4, le);\n const numEntries = view.getUint16(ifdOffset, le);\n let width = 0;\n let height = 0;\n let bitsPerSample = 8;\n let compression = 1;\n let photometric = 2;\n let stripOffsets: number[] = [8];\n let stripByteCounts: number[] = [];\n let samplesPerPixel = 4;\n let rowsPerStrip = 0;\n let predictor = 1;\n let xRes = 72;\n let resUnit = 2;\n let orientation: number | undefined;\n for (let i = 0; i < numEntries; i++) {\n const p = ifdOffset + 2 + i * 12;\n const tag = view.getUint16(p, le);\n const vals = readTiffTagValues(view, p, le);\n const first = vals[0] ?? 0;\n if (tag === 256) width = first;\n else if (tag === 257) height = first;\n else if (tag === 258 && first > 0) bitsPerSample = first;\n else if (tag === 259 && first > 0) compression = first;\n else if (tag === 262) photometric = first;\n else if (tag === 273 && vals.length > 0) stripOffsets = vals;\n else if (tag === 274 && first >= 1 && first <= 8) orientation = first;\n else if (tag === 277 && first > 0) samplesPerPixel = first;\n else if (tag === 278 && first > 0) rowsPerStrip = first;\n else if (tag === 279 && vals.length > 0) stripByteCounts = vals;\n else if (tag === 282 && first > 0) xRes = first;\n else if (tag === 296 && (first === 2 || first === 3)) resUnit = first;\n else if (tag === 317 && first > 0) predictor = first;\n }\n\n const bytesPerSample = Math.max(1, bitsPerSample >>> 3);\n const rowByteWidth = width * samplesPerPixel * bytesPerSample;\n const totalExpectedBytes = height * rowByteWidth;\n const combined = new Uint8Array(totalExpectedBytes);\n const effectiveRowsPerStrip = rowsPerStrip > 0 ? rowsPerStrip : height;\n let dstOff = 0;\n for (let s = 0; s < stripOffsets.length && dstOff < totalExpectedBytes; s++) {\n const off = stripOffsets[s]!;\n const remainingBytes = totalExpectedBytes - dstOff;\n const expectedStripBytes = Math.min(remainingBytes, effectiveRowsPerStrip * rowByteWidth);\n const rawLen = stripByteCounts[s] ?? Math.max(0, bytes.length - off);\n const rawSlice = bytes.subarray(off, Math.min(bytes.length, off + rawLen));\n let decodedStrip: Uint8Array;\n if (compression === 8 || compression === 32946) {\n try {\n decodedStrip = inflate(rawSlice);\n } catch {\n decodedStrip = rawSlice;\n }\n } else if (compression === 5) {\n decodedStrip = decodeTiffLzw(rawSlice, expectedStripBytes);\n } else if (compression === 32773) {\n decodedStrip = decodePackBits(rawSlice, expectedStripBytes);\n } else {\n decodedStrip = rawSlice;\n }\n const copyLen = Math.min(decodedStrip.length, remainingBytes);\n combined.set(decodedStrip.subarray(0, copyLen), dstOff);\n dstOff += copyLen;\n }\n\n if (predictor === 2 && bytesPerSample === 1) {\n for (let y = 0; y < height; y++) {\n const rowStart = y * rowByteWidth;\n for (let x = samplesPerPixel; x < rowByteWidth; x++) {\n combined[rowStart + x] =\n ((combined[rowStart + x] ?? 0) + (combined[rowStart + x - samplesPerPixel] ?? 0)) & 0xff;\n }\n }\n }\n\n const readSample8 = (pixelIdx: number, ch: number): number => {\n const base = (pixelIdx * samplesPerPixel + ch) * bytesPerSample;\n if (bytesPerSample === 2) {\n const val16 = le\n ? (combined[base] ?? 0) | ((combined[base + 1] ?? 0) << 8)\n : ((combined[base] ?? 0) << 8) | (combined[base + 1] ?? 0);\n return Math.round((val16 * 255) / 65535);\n }\n return combined[base] ?? 0;\n };\n\n const rgba = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n if (samplesPerPixel === 1) {\n let g = readSample8(i, 0);\n if (photometric === 0) g = 255 - g;\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = 255;\n } else if (samplesPerPixel === 2) {\n let g = readSample8(i, 0);\n if (photometric === 0) g = 255 - g;\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = readSample8(i, 1);\n } else {\n rgba[i * 4] = readSample8(i, 0);\n rgba[i * 4 + 1] = readSample8(i, 1);\n rgba[i * 4 + 2] = readSample8(i, 2);\n rgba[i * 4 + 3] = samplesPerPixel >= 4 ? readSample8(i, 3) : 255;\n }\n }\n const density = resUnit === 3 ? Math.max(1, Math.round(xRes * 2.54)) : Math.max(1, Math.round(xRes));\n return {\n width,\n height,\n data: rgba,\n format: \"tiff\",\n space: samplesPerPixel < 3 ? \"b-w\" : \"srgb\",\n channels: samplesPerPixel === 4 ? 4 : samplesPerPixel === 1 ? 1 : 3,\n depth: bitsPerSample === 16 ? \"ushort\" : \"uchar\",\n density,\n hasAlpha: samplesPerPixel === 2 || samplesPerPixel === 4,\n ...(orientation !== undefined ? { orientation } : {})\n };\n}\n", "import { PdfDocument, renderPdfPageToPng } from \"@poe-code/pdf-ast\";\nimport { parseColor, type ImageMetadata, type RgbaImage } from \"../ast.js\";\nimport { decodePngImage } from \"./png.js\";\n\nexport function isPdfBytes(bytes: Uint8Array): boolean {\n if (bytes.length < 5) return false;\n const limit = Math.min(bytes.length - 5, 1024);\n for (let i = 0; i <= limit; i++) {\n if (\n bytes[i] === 0x25 && // %\n bytes[i + 1] === 0x50 && // P\n bytes[i + 2] === 0x44 && // D\n bytes[i + 3] === 0x46 && // F\n bytes[i + 4] === 0x2d // -\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport function isSvgBytes(bytes: Uint8Array): boolean {\n if (bytes.length < 5) return false;\n const head = new TextDecoder(\"utf-8\", { fatal: false })\n .decode(bytes.subarray(0, Math.min(bytes.length, 512)))\n .trimStart();\n return head.startsWith(\"<svg\") || (head.startsWith(\"<?xml\") && head.includes(\"<svg\"));\n}\n\nexport function readPdfMetadata(\n bytes: Uint8Array,\n options?: { readonly page?: number; readonly density?: number }\n): ImageMetadata {\n const doc = PdfDocument.load(bytes);\n const pageIdx = Math.max(0, Math.min(doc.pageCount - 1, options?.page ?? 0));\n const page = doc.getPage(pageIdx);\n const density = options?.density ?? 72;\n const scale = density / 72;\n const width = Math.max(1, Math.round(page.width * scale));\n const height = Math.max(1, Math.round(page.height * scale));\n\n return {\n format: \"pdf\",\n width,\n height,\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density,\n hasAlpha: true,\n pages: doc.pageCount,\n pagePrimary: pageIdx,\n size: bytes.byteLength\n };\n}\n\nexport function decodePdfImage(\n bytes: Uint8Array,\n options?: { readonly page?: number; readonly density?: number }\n): RgbaImage {\n const doc = PdfDocument.load(bytes);\n const pageIdx = Math.max(0, Math.min(doc.pageCount - 1, options?.page ?? 0));\n const density = options?.density ?? 72;\n const scale = density / 72;\n const pngBytes = renderPdfPageToPng(bytes, pageIdx, { scale });\n const decoded = decodePngImage(pngBytes);\n return {\n ...decoded,\n format: \"pdf\",\n density,\n pages: doc.pageCount\n };\n}\n\nfunction parseSvgNumber(val: string | undefined, fallback: number): number {\n if (!val) return fallback;\n const trimmed = val.trim();\n const match = /^([+-]?(?:\\d+\\.?\\d*|\\.\\d+))(px|pt|pc|mm|cm|in|%)?$/i.exec(trimmed);\n if (!match) {\n const num = parseFloat(trimmed);\n return Number.isFinite(num) && num > 0 ? num : fallback;\n }\n const num = parseFloat(match[1]!);\n if (!Number.isFinite(num) || num <= 0) return fallback;\n const unit = (match[2] ?? \"px\").toLowerCase();\n switch (unit) {\n case \"in\":\n return num * 72;\n case \"cm\":\n return (num * 72) / 2.54;\n case \"mm\":\n return (num * 72) / 25.4;\n case \"pc\":\n return num * 12;\n case \"%\":\n return (num / 100) * fallback;\n case \"pt\":\n case \"px\":\n default:\n return num;\n }\n}\n\nfunction parseSvgCoord(val: string | undefined, fallback: number, refSize = 0): number {\n if (!val) return fallback;\n const trimmed = val.trim();\n const match = /^([+-]?(?:\\d+\\.?\\d*|\\.\\d+))(px|pt|pc|mm|cm|in|%)?$/i.exec(trimmed);\n if (!match) {\n const num = parseFloat(trimmed);\n return Number.isFinite(num) ? num : fallback;\n }\n const num = parseFloat(match[1]!);\n if (!Number.isFinite(num)) return fallback;\n const unit = (match[2] ?? \"px\").toLowerCase();\n switch (unit) {\n case \"in\":\n return num * 72;\n case \"cm\":\n return (num * 72) / 2.54;\n case \"mm\":\n return (num * 72) / 25.4;\n case \"pc\":\n return num * 12;\n case \"%\":\n return (num / 100) * refSize;\n case \"pt\":\n case \"px\":\n default:\n return num;\n }\n}\n\nfunction getAttr(tagText: string, attrName: string): string | undefined {\n const regex = new RegExp(`\\\\b${attrName}\\\\s*=\\\\s*[\"']([^\"']*)[\"']`, \"i\");\n const match = regex.exec(tagText);\n return match?.[1];\n}\n\nexport function readSvgMetadata(\n bytes: Uint8Array,\n options?: { readonly density?: number }\n): ImageMetadata {\n const text = new TextDecoder().decode(bytes);\n const svgTagMatch = /<svg\\b[^>]*>/i.exec(text);\n const svgTag = svgTagMatch?.[0] ?? \"\";\n const viewBoxRaw = getAttr(svgTag, \"viewBox\");\n let baseW = 300;\n let baseH = 150;\n if (viewBoxRaw) {\n const parts = viewBoxRaw\n .trim()\n .split(/[\\s,]+/)\n .map(Number);\n if (parts.length === 4 && parts[2]! > 0 && parts[3]! > 0) {\n baseW = parts[2]!;\n baseH = parts[3]!;\n }\n }\n baseW = parseSvgNumber(getAttr(svgTag, \"width\"), baseW);\n baseH = parseSvgNumber(getAttr(svgTag, \"height\"), baseH);\n\n const density = options?.density ?? 72;\n const scale = density / 72;\n const width = Math.max(1, Math.round(baseW * scale));\n const height = Math.max(1, Math.round(baseH * scale));\n\n return {\n format: \"svg\",\n width,\n height,\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density,\n hasAlpha: true,\n size: bytes.byteLength\n };\n}\n\nexport function decodeSvgImage(\n bytes: Uint8Array,\n options?: { readonly density?: number }\n): RgbaImage {\n const meta = readSvgMetadata(bytes, options);\n const { width, height, density } = meta;\n const data = new Uint8Array(width * height * 4);\n const text = new TextDecoder().decode(bytes);\n const svgTagMatch = /<svg\\b[^>]*>/i.exec(text);\n const svgTag = svgTagMatch?.[0] ?? \"\";\n const viewBoxRaw = getAttr(svgTag, \"viewBox\");\n let vbMinX = 0;\n let vbMinY = 0;\n let vbW = width / (density / 72);\n let vbH = height / (density / 72);\n if (viewBoxRaw) {\n const parts = viewBoxRaw\n .trim()\n .split(/[\\s,]+/)\n .map(Number);\n if (parts.length === 4 && parts[2]! > 0 && parts[3]! > 0) {\n vbMinX = parts[0]!;\n vbMinY = parts[1]!;\n vbW = parts[2]!;\n vbH = parts[3]!;\n }\n }\n const scaleX = width / Math.max(1e-6, vbW);\n const scaleY = height / Math.max(1e-6, vbH);\n const mapX = (ux: number) => (ux - vbMinX) * scaleX;\n const mapY = (uy: number) => (uy - vbMinY) * scaleY;\n\n const blendPixel = (px: number, py: number, r: number, g: number, b: number, a: number) => {\n if (px < 0 || py < 0 || px >= width || py >= height || a <= 0) return;\n const idx = (py * width + px) * 4;\n const srcA = a / 255;\n const dstA = data[idx + 3]! / 255;\n const outA = srcA + dstA * (1 - srcA);\n if (outA <= 0) return;\n data[idx] = Math.round((r * srcA + data[idx]! * dstA * (1 - srcA)) / outA);\n data[idx + 1] = Math.round((g * srcA + data[idx + 1]! * dstA * (1 - srcA)) / outA);\n data[idx + 2] = Math.round((b * srcA + data[idx + 2]! * dstA * (1 - srcA)) / outA);\n data[idx + 3] = Math.round(outA * 255);\n };\n\n const drawSegment = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n strokeWidth: number,\n r: number,\n g: number,\n b: number,\n a: number\n ) => {\n if (a <= 0) return;\n const steps = Math.max(1, Math.ceil(Math.hypot(x2 - x1, y2 - y1) * 2));\n const half = Math.max(0, (strokeWidth - 1) / 2);\n const rad = Math.ceil(half);\n for (let s = 0; s <= steps; s++) {\n const px = x1 + ((x2 - x1) * s) / steps;\n const py = y1 + ((y2 - y1) * s) / steps;\n for (let dy = -rad; dy <= rad; dy++) {\n for (let dx = -rad; dx <= rad; dx++) {\n if (dx * dx + dy * dy <= (half + 0.5) * (half + 0.5)) {\n blendPixel(Math.round(px + dx), Math.round(py + dy), r, g, b, a);\n }\n }\n }\n }\n };\n\n const parsePointsList = (ptsRaw: string | undefined): Array<[number, number]> => {\n if (!ptsRaw) return [];\n const nums = ptsRaw\n .trim()\n .split(/[\\s,]+/)\n .map(Number)\n .filter(Number.isFinite);\n const pts: Array<[number, number]> = [];\n for (let i = 0; i + 1 < nums.length; i += 2) {\n pts.push([mapX(nums[i]!), mapY(nums[i + 1]!)]);\n }\n return pts;\n };\n\n // Rasterize <rect>, <circle>, <ellipse>, <line>, <polygon>, and <polyline> elements in document order\n const elemRegex = /<(rect|circle|ellipse|line|polygon|polyline)\\b([^>]*)\\/?>/gi;\n let match: RegExpExecArray | null;\n while ((match = elemRegex.exec(text)) !== null) {\n const tag = match[1]!.toLowerCase();\n const attrs = match[2]!;\n const fillAttr = getAttr(attrs, \"fill\") ?? (tag === \"line\" ? \"none\" : \"#000000\");\n const opacity = parseFloat(getAttr(attrs, \"opacity\") ?? getAttr(attrs, \"fill-opacity\") ?? \"1\");\n const fill = fillAttr === \"none\" ? { r: 0, g: 0, b: 0, a: 0 } : parseColor(fillAttr);\n const effAlpha = Math.round(fill.a * (Number.isFinite(opacity) ? opacity : 1));\n const strokeAttr = getAttr(attrs, \"stroke\");\n const stroke = strokeAttr && strokeAttr !== \"none\" ? parseColor(strokeAttr) : { r: 0, g: 0, b: 0, a: 0 };\n const strokeW = parseSvgCoord(getAttr(attrs, \"stroke-width\"), 1, vbW) * ((scaleX + scaleY) / 2);\n\n if (tag === \"rect\" && effAlpha > 0) {\n const rx = Math.round(mapX(parseSvgCoord(getAttr(attrs, \"x\"), 0, vbW)));\n const ry = Math.round(mapY(parseSvgCoord(getAttr(attrs, \"y\"), 0, vbH)));\n const rw = Math.round(parseSvgNumber(getAttr(attrs, \"width\"), vbW) * scaleX);\n const rh = Math.round(parseSvgNumber(getAttr(attrs, \"height\"), vbH) * scaleY);\n for (let y = Math.max(0, ry); y < Math.min(height, ry + rh); y++) {\n for (let x = Math.max(0, rx); x < Math.min(width, rx + rw); x++) {\n blendPixel(x, y, fill.r, fill.g, fill.b, effAlpha);\n }\n }\n } else if (tag === \"circle\" && effAlpha > 0) {\n const cx = mapX(parseSvgCoord(getAttr(attrs, \"cx\"), 0, vbW));\n const cy = mapY(parseSvgCoord(getAttr(attrs, \"cy\"), 0, vbH));\n const r = parseSvgCoord(getAttr(attrs, \"r\"), 0, (vbW + vbH) / 2);\n const rx = Math.max(0.5, r * scaleX);\n const ry = Math.max(0.5, r * scaleY);\n const minY = Math.max(0, Math.floor(cy - ry));\n const maxY = Math.min(height - 1, Math.ceil(cy + ry));\n const minX = Math.max(0, Math.floor(cx - rx));\n const maxX = Math.min(width - 1, Math.ceil(cx + rx));\n for (let y = minY; y <= maxY; y++) {\n for (let x = minX; x <= maxX; x++) {\n const dx = (x + 0.5 - cx) / rx;\n const dy = (y + 0.5 - cy) / ry;\n if (dx * dx + dy * dy <= 1) {\n blendPixel(x, y, fill.r, fill.g, fill.b, effAlpha);\n }\n }\n }\n } else if (tag === \"ellipse\" && effAlpha > 0) {\n const cx = mapX(parseSvgCoord(getAttr(attrs, \"cx\"), 0, vbW));\n const cy = mapY(parseSvgCoord(getAttr(attrs, \"cy\"), 0, vbH));\n const rx = Math.max(0.5, parseSvgCoord(getAttr(attrs, \"rx\"), 0, vbW) * scaleX);\n const ry = Math.max(0.5, parseSvgCoord(getAttr(attrs, \"ry\"), 0, vbH) * scaleY);\n const minY = Math.max(0, Math.floor(cy - ry));\n const maxY = Math.min(height - 1, Math.ceil(cy + ry));\n const minX = Math.max(0, Math.floor(cx - rx));\n const maxX = Math.min(width - 1, Math.ceil(cx + rx));\n for (let y = minY; y <= maxY; y++) {\n for (let x = minX; x <= maxX; x++) {\n const dx = (x + 0.5 - cx) / rx;\n const dy = (y + 0.5 - cy) / ry;\n if (dx * dx + dy * dy <= 1) {\n blendPixel(x, y, fill.r, fill.g, fill.b, effAlpha);\n }\n }\n }\n } else if (tag === \"line\") {\n const lineStroke = parseColor(getAttr(attrs, \"stroke\") ?? \"#000000\");\n const x1 = mapX(parseSvgCoord(getAttr(attrs, \"x1\"), 0, vbW));\n const y1 = mapY(parseSvgCoord(getAttr(attrs, \"y1\"), 0, vbH));\n const x2 = mapX(parseSvgCoord(getAttr(attrs, \"x2\"), 0, vbW));\n const y2 = mapY(parseSvgCoord(getAttr(attrs, \"y2\"), 0, vbH));\n drawSegment(x1, y1, x2, y2, strokeW, lineStroke.r, lineStroke.g, lineStroke.b, lineStroke.a);\n } else if (tag === \"polygon\" || tag === \"polyline\") {\n const pts = parsePointsList(getAttr(attrs, \"points\"));\n if (pts.length >= 3 && effAlpha > 0 && (tag === \"polygon\" || getAttr(attrs, \"fill\") !== undefined)) {\n let minX = width;\n let maxX = 0;\n let minY = height;\n let maxY = 0;\n for (const [px, py] of pts) {\n if (px < minX) minX = px;\n if (px > maxX) maxX = px;\n if (py < minY) minY = py;\n if (py > maxY) maxY = py;\n }\n const y0 = Math.max(0, Math.floor(minY));\n const y1 = Math.min(height - 1, Math.ceil(maxY));\n const x0 = Math.max(0, Math.floor(minX));\n const x1 = Math.min(width - 1, Math.ceil(maxX));\n for (let y = y0; y <= y1; y++) {\n const py = y + 0.5;\n for (let x = x0; x <= x1; x++) {\n const px = x + 0.5;\n let inside = false;\n for (let i = 0, j = pts.length - 1; i < pts.length; j = i++) {\n const [xi, yi] = pts[i]!;\n const [xj, yj] = pts[j]!;\n if (yi > py !== yj > py && px < ((xj - xi) * (py - yi)) / (yj - yi) + xi) {\n inside = !inside;\n }\n }\n if (inside) {\n blendPixel(x, y, fill.r, fill.g, fill.b, effAlpha);\n }\n }\n }\n }\n if (pts.length >= 2 && (stroke.a > 0 || tag === \"polyline\")) {\n const sCol = stroke.a > 0 ? stroke : parseColor(getAttr(attrs, \"stroke\") ?? \"#000000\");\n for (let i = 0; i + 1 < pts.length; i++) {\n drawSegment(pts[i]![0], pts[i]![1], pts[i + 1]![0], pts[i + 1]![1], strokeW, sCol.r, sCol.g, sCol.b, sCol.a);\n }\n if (tag === \"polygon\" && stroke.a > 0) {\n drawSegment(\n pts[pts.length - 1]![0],\n pts[pts.length - 1]![1],\n pts[0]![0],\n pts[0]![1],\n strokeW,\n sCol.r,\n sCol.g,\n sCol.b,\n sCol.a\n );\n }\n }\n }\n }\n\n return {\n width,\n height,\n data,\n format: \"svg\",\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density,\n hasAlpha: true\n };\n}\n", "import {\n parseColor,\n type ImageFormat,\n type ImageMetadata,\n type OutputEncodeOptions,\n type RgbaImage,\n type SharpInputOptions\n} from \"../ast.js\";\nimport { decodePngImage, encodePngImage, isPngBytes, readPngMetadata } from \"./png.js\";\nimport { decodeJpegImage, encodeJpegImage, isJpegBytes, readJpegMetadata } from \"./jpeg.js\";\nimport { decodeWebpImage, encodeWebpImage, isWebpBytes, readWebpMetadata } from \"./webp.js\";\nimport {\n decodeHeifImage,\n detectHeifFormat,\n encodeHeifImage,\n isHeifBytes,\n readHeifMetadata\n} from \"./heif.js\";\nimport { decodeGifImage, encodeGifImage, isGifBytes, readGifMetadata } from \"./gif.js\";\nimport {\n decodeBmpImage,\n decodeNetpbmImage,\n decodeTiffImage,\n encodeBmpImage,\n encodePbm,\n encodePgm,\n encodePpm,\n encodeTiffImage,\n isBmpBytes,\n isNetpbmBytes,\n isTiffBytes,\n readBmpMetadata,\n readNetpbmMetadata\n} from \"./netpbm.js\";\nimport {\n decodePdfImage,\n decodeSvgImage,\n isPdfBytes,\n isSvgBytes,\n readPdfMetadata,\n readSvgMetadata\n} from \"./svg-pdf.js\";\n\nconst DEFAULT_PIXEL_LIMIT = 268402689; // 16383 * 16383 (matches sharp default)\n\nexport function detectImageFormat(bytes: Uint8Array): ImageFormat {\n if (isPngBytes(bytes)) return \"png\";\n if (isJpegBytes(bytes)) return \"jpeg\";\n if (isWebpBytes(bytes)) return \"webp\";\n if (isHeifBytes(bytes)) return detectHeifFormat(bytes) ?? \"heic\";\n if (isGifBytes(bytes)) return \"gif\";\n if (isNetpbmBytes(bytes)) {\n const m = String.fromCharCode(bytes[0]!, bytes[1]!);\n if (m === \"P1\" || m === \"P4\") return \"pbm\";\n if (m === \"P2\" || m === \"P5\") return \"pgm\";\n return \"ppm\";\n }\n if (isBmpBytes(bytes)) return \"bmp\";\n if (isTiffBytes(bytes)) return \"tiff\";\n if (isPdfBytes(bytes)) return \"pdf\";\n if (isSvgBytes(bytes)) return \"svg\";\n throw new Error(\"Input buffer contains unsupported image format\");\n}\n\nexport function readImageMetadata(\n bytes?: Uint8Array,\n options?: SharpInputOptions\n): ImageMetadata {\n if (options?.create) {\n const { width, height, channels } = options.create;\n return {\n format: \"raw\",\n width,\n height,\n space: \"srgb\",\n channels,\n depth: \"uchar\",\n density: options.density ?? 72,\n hasAlpha: channels === 4,\n size: width * height * channels\n };\n }\n if (options?.raw && bytes) {\n const { width, height, channels } = options.raw;\n return {\n format: \"raw\",\n width,\n height,\n space: channels < 3 ? \"b-w\" : \"srgb\",\n channels,\n depth: \"uchar\",\n density: options.density ?? 72,\n hasAlpha: channels === 2 || channels === 4,\n size: bytes.byteLength\n };\n }\n if (!bytes || bytes.length === 0) {\n throw new Error(\"Empty image input\");\n }\n const fmt = detectImageFormat(bytes);\n let meta: ImageMetadata;\n switch (fmt) {\n case \"png\":\n meta = readPngMetadata(bytes);\n break;\n case \"jpeg\":\n meta = readJpegMetadata(bytes);\n break;\n case \"webp\":\n meta = readWebpMetadata(bytes);\n break;\n case \"heic\":\n case \"heif\":\n case \"avif\":\n meta = readHeifMetadata(bytes);\n break;\n case \"gif\":\n meta = readGifMetadata(bytes);\n break;\n case \"ppm\":\n case \"pgm\":\n case \"pbm\":\n meta = readNetpbmMetadata(bytes);\n break;\n case \"bmp\":\n meta = readBmpMetadata(bytes);\n break;\n case \"tiff\": {\n const decoded = decodeTiffImage(bytes);\n meta = {\n format: \"tiff\",\n width: decoded.width,\n height: decoded.height,\n space: decoded.space,\n channels: decoded.channels,\n depth: decoded.depth,\n density: decoded.density,\n hasAlpha: decoded.hasAlpha,\n ...(decoded.orientation !== undefined ? { orientation: decoded.orientation } : {}),\n size: bytes.byteLength\n };\n break;\n }\n case \"pdf\":\n meta = readPdfMetadata(bytes, options);\n break;\n case \"svg\":\n meta = readSvgMetadata(bytes, options);\n break;\n default:\n throw new Error(`Unsupported format: ${fmt}`);\n }\n\n const limit =\n options?.limitInputPixels === false\n ? Infinity\n : (options?.limitInputPixels ?? DEFAULT_PIXEL_LIMIT);\n if (meta.width * meta.height > limit) {\n throw new Error(\n `Input image exceeds pixel limit (${meta.width}x${meta.height} > ${limit})`\n );\n }\n return meta;\n}\n\nexport function decodeImage(\n bytes?: Uint8Array,\n options?: SharpInputOptions\n): RgbaImage {\n if (options?.create) {\n const { width, height, channels, background } = options.create;\n const bg = parseColor(background, channels === 4 ? 255 : 255);\n const data = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n data[i * 4] = bg.r;\n data[i * 4 + 1] = bg.g;\n data[i * 4 + 2] = bg.b;\n data[i * 4 + 3] = channels === 4 ? bg.a : 255;\n }\n return {\n width,\n height,\n data,\n format: \"raw\",\n space: \"srgb\",\n channels,\n depth: \"uchar\",\n density: options.density ?? 72,\n hasAlpha: channels === 4\n };\n }\n if (options?.raw && bytes) {\n const { width, height, channels } = options.raw;\n const data = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n if (channels === 4) {\n data[i * 4] = bytes[i * 4] ?? 0;\n data[i * 4 + 1] = bytes[i * 4 + 1] ?? 0;\n data[i * 4 + 2] = bytes[i * 4 + 2] ?? 0;\n data[i * 4 + 3] = bytes[i * 4 + 3] ?? 255;\n } else if (channels === 3) {\n data[i * 4] = bytes[i * 3] ?? 0;\n data[i * 4 + 1] = bytes[i * 3 + 1] ?? 0;\n data[i * 4 + 2] = bytes[i * 3 + 2] ?? 0;\n data[i * 4 + 3] = 255;\n } else if (channels === 2) {\n const g = bytes[i * 2] ?? 0;\n data[i * 4] = g;\n data[i * 4 + 1] = g;\n data[i * 4 + 2] = g;\n data[i * 4 + 3] = bytes[i * 2 + 1] ?? 255;\n } else {\n const g = bytes[i] ?? 0;\n data[i * 4] = g;\n data[i * 4 + 1] = g;\n data[i * 4 + 2] = g;\n data[i * 4 + 3] = 255;\n }\n }\n return {\n width,\n height,\n data,\n format: \"raw\",\n space: channels < 3 ? \"b-w\" : \"srgb\",\n channels,\n depth: \"uchar\",\n density: options.density ?? 72,\n hasAlpha: channels === 2 || channels === 4\n };\n }\n if (!bytes || bytes.length === 0) {\n throw new Error(\"Empty image input\");\n }\n const meta = readImageMetadata(bytes, options);\n switch (meta.format) {\n case \"png\":\n return decodePngImage(bytes);\n case \"jpeg\":\n return decodeJpegImage(bytes);\n case \"webp\":\n return decodeWebpImage(bytes);\n case \"heic\":\n case \"heif\":\n case \"avif\":\n return decodeHeifImage(bytes);\n case \"gif\":\n return decodeGifImage(bytes, options);\n case \"ppm\":\n case \"pgm\":\n case \"pbm\":\n return decodeNetpbmImage(bytes);\n case \"bmp\":\n return decodeBmpImage(bytes);\n case \"tiff\":\n return decodeTiffImage(bytes);\n case \"pdf\":\n return decodePdfImage(bytes, options);\n case \"svg\":\n return decodeSvgImage(bytes, options);\n default:\n throw new Error(`Unsupported format: ${meta.format}`);\n }\n}\n\nexport function encodeImage(\n img: RgbaImage,\n options: OutputEncodeOptions\n): { readonly data: Uint8Array; readonly format: ImageFormat; readonly channels: number } {\n const fmt: ImageFormat =\n options.format === \"pdf\" || options.format === \"svg\"\n ? \"png\"\n : (options.format ?? (img.format === \"pdf\" || img.format === \"svg\" ? \"png\" : img.format));\n\n switch (fmt) {\n case \"png\": {\n const data = encodePngImage(img, {\n ...(options.compressionLevel !== undefined\n ? { compressionLevel: options.compressionLevel }\n : {}),\n density: options.density ?? img.density,\n ...(options.orientation !== undefined ? { orientation: options.orientation } : img.orientation !== undefined ? { orientation: img.orientation } : {})\n });\n const isBw = img.space === \"b-w\" || img.channels === 1 || img.channels === 2;\n const outChannels = isBw ? (img.hasAlpha ? 2 : 1) : (img.hasAlpha ? 4 : 3);\n return { data, format: \"png\", channels: outChannels };\n }\n case \"jpeg\": {\n const data = encodeJpegImage(img, {\n quality: options.quality ?? 85,\n density: options.density ?? img.density,\n ...(options.orientation !== undefined ? { orientation: options.orientation } : {})\n });\n return { data, format: \"jpeg\", channels: 3 };\n }\n case \"webp\": {\n const orientation = options.orientation ?? img.orientation;\n const data = encodeWebpImage(img, {\n quality: options.quality ?? 80,\n ...(options.lossless !== undefined ? { lossless: options.lossless } : {}),\n density: options.density ?? img.density,\n ...(orientation !== undefined ? { orientation } : {})\n });\n return { data, format: \"webp\", channels: img.hasAlpha ? 4 : 3 };\n }\n case \"heic\":\n case \"heif\":\n case \"avif\": {\n const orientation = options.orientation ?? img.orientation;\n const data = encodeHeifImage(img, {\n format: fmt,\n ...(options.quality !== undefined ? { quality: options.quality } : {}),\n ...(options.compression !== undefined ? { compression: options.compression } : {}),\n ...(options.lossless !== undefined ? { lossless: options.lossless } : {}),\n density: options.density ?? img.density,\n ...(orientation !== undefined ? { orientation } : {})\n });\n const isBw = img.space === \"b-w\" || img.channels === 1 || img.channels === 2;\n const outChannels = isBw ? (img.hasAlpha ? 2 : 1) : img.hasAlpha ? 4 : 3;\n return { data, format: fmt, channels: outChannels };\n }\n case \"gif\": {\n const data = encodeGifImage(img);\n return { data, format: \"gif\", channels: 4 };\n }\n case \"ppm\": {\n const data = encodePpm(img);\n return { data, format: \"ppm\", channels: 3 };\n }\n case \"pgm\": {\n const data = encodePgm(img);\n return { data, format: \"pgm\", channels: 1 };\n }\n case \"pbm\": {\n const data = encodePbm(img);\n return { data, format: \"pbm\", channels: 1 };\n }\n case \"bmp\": {\n const data = encodeBmpImage(img);\n return { data, format: \"bmp\", channels: 3 };\n }\n case \"tiff\": {\n const orientation = options.orientation ?? img.orientation;\n const data = encodeTiffImage(img, {\n density: options.density ?? img.density,\n ...(orientation !== undefined ? { orientation } : {})\n });\n return { data, format: \"tiff\", channels: 4 };\n }\n case \"raw\": {\n if (img.channels === 4) {\n return { data: new Uint8Array(img.data), format: \"raw\", channels: 4 };\n }\n if (img.channels === 3) {\n const rgb = new Uint8Array(img.width * img.height * 3);\n for (let i = 0; i < img.width * img.height; i++) {\n rgb[i * 3] = img.data[i * 4]!;\n rgb[i * 3 + 1] = img.data[i * 4 + 1]!;\n rgb[i * 3 + 2] = img.data[i * 4 + 2]!;\n }\n return { data: rgb, format: \"raw\", channels: 3 };\n }\n if (img.channels === 2) {\n const ga = new Uint8Array(img.width * img.height * 2);\n for (let i = 0; i < img.width * img.height; i++) {\n ga[i * 2] = img.data[i * 4]!;\n ga[i * 2 + 1] = img.data[i * 4 + 3]!;\n }\n return { data: ga, format: \"raw\", channels: 2 };\n }\n const gray = new Uint8Array(img.width * img.height);\n for (let i = 0; i < img.width * img.height; i++) {\n gray[i] = img.data[i * 4]!;\n }\n return { data: gray, format: \"raw\", channels: 1 };\n }\n default:\n throw new Error(`Unsupported output format: ${fmt}`);\n }\n}\n", "import type {\n GravityPosition,\n ResizeFit,\n ResizeKernel,\n RgbaColor,\n RgbaImage\n} from \"../ast.js\";\n\nfunction sinc(x: number): number {\n if (Math.abs(x) < 1e-7) return 1;\n const px = Math.PI * x;\n return Math.sin(px) / px;\n}\n\nfunction kernelWeight(x: number, kernel: ResizeKernel): number {\n const ax = Math.abs(x);\n switch (kernel) {\n case \"nearest\":\n return ax < 0.5 ? 1 : 0;\n case \"bilinear\":\n return ax < 1 ? 1 - ax : 0;\n case \"cubic\":\n case \"mitchell\": {\n // Mitchell-Netravali (B = 1/3, C = 1/3)\n const B = 1 / 3;\n const C = 1 / 3;\n if (ax < 1) {\n return ((12 - 9 * B - 6 * C) * ax * ax * ax + (-18 + 12 * B + 6 * C) * ax * ax + (6 - 2 * B)) / 6;\n }\n if (ax < 2) {\n return (\n ((-B - 6 * C) * ax * ax * ax +\n (6 * B + 30 * C) * ax * ax +\n (-12 * B - 48 * C) * ax +\n (8 * B + 24 * C)) /\n 6\n );\n }\n return 0;\n }\n case \"lanczos2\":\n return ax < 2 ? sinc(x) * sinc(x / 2) : 0;\n case \"lanczos3\":\n default:\n return ax < 3 ? sinc(x) * sinc(x / 3) : 0;\n }\n}\n\nfunction kernelRadius(kernel: ResizeKernel): number {\n switch (kernel) {\n case \"nearest\":\n return 0.5;\n case \"bilinear\":\n return 1;\n case \"cubic\":\n case \"mitchell\":\n case \"lanczos2\":\n return 2;\n case \"lanczos3\":\n default:\n return 3;\n }\n}\n\nexport function resolveGravityOffset(\n outerW: number,\n outerH: number,\n innerW: number,\n innerH: number,\n position: GravityPosition = \"center\"\n): { readonly x: number; readonly y: number } {\n const dx = outerW - innerW;\n const dy = outerH - innerH;\n const p = position.toLowerCase();\n let x = Math.floor(dx / 2);\n let y = Math.floor(dy / 2);\n\n if (p.includes(\"west\") || p.includes(\"left\")) x = 0;\n else if (p.includes(\"east\") || p.includes(\"right\")) x = dx;\n\n if (p.includes(\"north\") || p.includes(\"top\")) y = 0;\n else if (p.includes(\"south\") || p.includes(\"bottom\")) y = dy;\n\n return { x, y };\n}\n\nexport function resampleRawBitmap(\n src: Uint8Array,\n srcW: number,\n srcH: number,\n dstW: number,\n dstH: number,\n kernel: ResizeKernel = \"lanczos3\"\n): Uint8Array {\n if (srcW === dstW && srcH === dstH) {\n return new Uint8Array(src);\n }\n if (kernel === \"nearest\") {\n const out = new Uint8Array(dstW * dstH * 4);\n for (let y = 0; y < dstH; y++) {\n const sy = Math.min(srcH - 1, Math.floor(((y + 0.5) * srcH) / dstH));\n for (let x = 0; x < dstW; x++) {\n const sx = Math.min(srcW - 1, Math.floor(((x + 0.5) * srcW) / dstW));\n const sIdx = (sy * srcW + sx) * 4;\n const dIdx = (y * dstW + x) * 4;\n out[dIdx] = src[sIdx]!;\n out[dIdx + 1] = src[sIdx + 1]!;\n out[dIdx + 2] = src[sIdx + 2]!;\n out[dIdx + 3] = src[sIdx + 3]!;\n }\n }\n return out;\n }\n\n const radius = kernelRadius(kernel);\n // Pass 1: Horizontal resample (srcW x srcH -> dstW x srcH) in premultiplied float\n const temp = new Float32Array(dstW * srcH * 4);\n const scaleX = srcW / dstW;\n const filterScaleX = Math.max(1, scaleX);\n const supportX = radius * filterScaleX;\n\n for (let x = 0; x < dstW; x++) {\n const center = (x + 0.5) * scaleX - 0.5;\n const left = Math.max(0, Math.floor(center - supportX));\n const right = Math.min(srcW - 1, Math.ceil(center + supportX));\n const count = right - left + 1;\n const weights = new Float32Array(count);\n let wSum = 0;\n for (let i = 0; i < count; i++) {\n const w = kernelWeight((left + i - center) / filterScaleX, kernel);\n weights[i] = w;\n wSum += w;\n }\n if (wSum !== 0) {\n for (let i = 0; i < count; i++) weights[i]! /= wSum;\n }\n for (let y = 0; y < srcH; y++) {\n let pr = 0;\n let pg = 0;\n let pb = 0;\n let pa = 0;\n const rowBase = y * srcW;\n for (let i = 0; i < count; i++) {\n const w = weights[i]!;\n const sIdx = (rowBase + left + i) * 4;\n const a = src[sIdx + 3]! / 255;\n pr += src[sIdx]! * a * w;\n pg += src[sIdx + 1]! * a * w;\n pb += src[sIdx + 2]! * a * w;\n pa += src[sIdx + 3]! * w;\n }\n const tIdx = (y * dstW + x) * 4;\n temp[tIdx] = pr;\n temp[tIdx + 1] = pg;\n temp[tIdx + 2] = pb;\n temp[tIdx + 3] = pa;\n }\n }\n\n // Pass 2: Vertical resample (dstW x srcH -> dstW x dstH)\n const out = new Uint8Array(dstW * dstH * 4);\n const scaleY = srcH / dstH;\n const filterScaleY = Math.max(1, scaleY);\n const supportY = radius * filterScaleY;\n\n for (let y = 0; y < dstH; y++) {\n const center = (y + 0.5) * scaleY - 0.5;\n const top = Math.max(0, Math.floor(center - supportY));\n const bottom = Math.min(srcH - 1, Math.ceil(center + supportY));\n const count = bottom - top + 1;\n const weights = new Float32Array(count);\n let wSum = 0;\n for (let i = 0; i < count; i++) {\n const w = kernelWeight((top + i - center) / filterScaleY, kernel);\n weights[i] = w;\n wSum += w;\n }\n if (wSum !== 0) {\n for (let i = 0; i < count; i++) weights[i]! /= wSum;\n }\n for (let x = 0; x < dstW; x++) {\n let pr = 0;\n let pg = 0;\n let pb = 0;\n let pa = 0;\n for (let i = 0; i < count; i++) {\n const w = weights[i]!;\n const tIdx = ((top + i) * dstW + x) * 4;\n pr += temp[tIdx]! * w;\n pg += temp[tIdx + 1]! * w;\n pb += temp[tIdx + 2]! * w;\n pa += temp[tIdx + 3]! * w;\n }\n const dIdx = (y * dstW + x) * 4;\n const aByte = pa < 0 ? 0 : pa > 255 ? 255 : Math.round(pa);\n if (aByte === 0) {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n } else {\n const alphaNorm = aByte / 255;\n const r = Math.round(pr / alphaNorm);\n const g = Math.round(pg / alphaNorm);\n const b = Math.round(pb / alphaNorm);\n out[dIdx] = r < 0 ? 0 : r > 255 ? 255 : r;\n out[dIdx + 1] = g < 0 ? 0 : g > 255 ? 255 : g;\n out[dIdx + 2] = b < 0 ? 0 : b > 255 ? 255 : b;\n out[dIdx + 3] = aByte;\n }\n }\n }\n return out;\n}\n\nexport function resizeImage(\n img: RgbaImage,\n spec: {\n readonly width: number | null;\n readonly height: number | null;\n readonly fit: ResizeFit;\n readonly position: GravityPosition;\n readonly kernel: ResizeKernel;\n readonly background: RgbaColor;\n readonly withoutEnlargement: boolean;\n readonly withoutReduction: boolean;\n }\n): RgbaImage {\n const srcW = img.width;\n const srcH = img.height;\n if (spec.width === null && spec.height === null) {\n return img;\n }\n\n let targetW = spec.width ?? Math.max(1, Math.round((srcW * spec.height!) / srcH));\n let targetH = spec.height ?? Math.max(1, Math.round((srcH * spec.width!) / srcW));\n const bothSpecified = spec.width !== null && spec.height !== null;\n const fit: ResizeFit = bothSpecified ? spec.fit : \"inside\";\n\n const clampScale = (w: number, h: number): [number, number] => {\n let rw = w;\n let rh = h;\n if (spec.withoutEnlargement && (rw > srcW || rh > srcH)) {\n const ratio = Math.min(srcW / rw, srcH / rh, 1);\n rw = Math.max(1, Math.round(rw * ratio));\n rh = Math.max(1, Math.round(rh * ratio));\n }\n if (spec.withoutReduction && (rw < srcW || rh < srcH)) {\n const ratio = Math.max(srcW / rw, srcH / rh, 1);\n rw = Math.max(1, Math.round(rw * ratio));\n rh = Math.max(1, Math.round(rh * ratio));\n }\n return [rw, rh];\n };\n\n if (fit === \"fill\") {\n const [rw, rh] = clampScale(targetW, targetH);\n const data = resampleRawBitmap(img.data, srcW, srcH, rw, rh, spec.kernel);\n return { ...img, width: rw, height: rh, data };\n }\n\n if (fit === \"inside\" || fit === \"outside\") {\n const scaleX = targetW / srcW;\n const scaleY = targetH / srcH;\n const scale = fit === \"inside\" ? Math.min(scaleX, scaleY) : Math.max(scaleX, scaleY);\n const [rw, rh] = clampScale(\n Math.max(1, Math.round(srcW * scale)),\n Math.max(1, Math.round(srcH * scale))\n );\n const data = resampleRawBitmap(img.data, srcW, srcH, rw, rh, spec.kernel);\n return { ...img, width: rw, height: rh, data };\n }\n\n if (fit === \"cover\") {\n if (spec.withoutEnlargement && (targetW > srcW || targetH > srcH)) {\n targetW = Math.min(targetW, srcW);\n targetH = Math.min(targetH, srcH);\n }\n if (spec.withoutReduction && (targetW < srcW || targetH < srcH)) {\n targetW = Math.max(targetW, srcW);\n targetH = Math.max(targetH, srcH);\n }\n const scale = Math.max(targetW / srcW, targetH / srcH);\n const scaledW = Math.max(targetW, Math.round(srcW * scale));\n const scaledH = Math.max(targetH, Math.round(srcH * scale));\n const scaledData = resampleRawBitmap(img.data, srcW, srcH, scaledW, scaledH, spec.kernel);\n const offset = resolveGravityOffset(scaledW, scaledH, targetW, targetH, spec.position);\n const cropped = new Uint8Array(targetW * targetH * 4);\n for (let y = 0; y < targetH; y++) {\n const srcRow = ((offset.y + y) * scaledW + offset.x) * 4;\n cropped.set(scaledData.subarray(srcRow, srcRow + targetW * 4), y * targetW * 4);\n }\n return { ...img, width: targetW, height: targetH, data: cropped };\n }\n\n // fit === \"contain\"\n if (spec.withoutEnlargement && (targetW > srcW || targetH > srcH)) {\n targetW = Math.min(targetW, srcW);\n targetH = Math.min(targetH, srcH);\n }\n if (spec.withoutReduction && (targetW < srcW || targetH < srcH)) {\n targetW = Math.max(targetW, srcW);\n targetH = Math.max(targetH, srcH);\n }\n const scale = Math.min(targetW / srcW, targetH / srcH);\n const [innerW, innerH] = clampScale(\n Math.max(1, Math.round(srcW * scale)),\n Math.max(1, Math.round(srcH * scale))\n );\n const scaledData = resampleRawBitmap(img.data, srcW, srcH, innerW, innerH, spec.kernel);\n const canvas = new Uint8Array(targetW * targetH * 4);\n const bg = spec.background;\n for (let i = 0; i < targetW * targetH; i++) {\n canvas[i * 4] = bg.r;\n canvas[i * 4 + 1] = bg.g;\n canvas[i * 4 + 2] = bg.b;\n canvas[i * 4 + 3] = bg.a;\n }\n const offset = resolveGravityOffset(targetW, targetH, innerW, innerH, spec.position);\n for (let y = 0; y < innerH; y++) {\n for (let x = 0; x < innerW; x++) {\n const sIdx = (y * innerW + x) * 4;\n const dIdx = ((offset.y + y) * targetW + (offset.x + x)) * 4;\n const srcA = scaledData[sIdx + 3]! / 255;\n const dstA = canvas[dIdx + 3]! / 255;\n const outA = srcA + dstA * (1 - srcA);\n if (outA > 0) {\n canvas[dIdx] = Math.round(\n (scaledData[sIdx]! * srcA + canvas[dIdx]! * dstA * (1 - srcA)) / outA\n );\n canvas[dIdx + 1] = Math.round(\n (scaledData[sIdx + 1]! * srcA + canvas[dIdx + 1]! * dstA * (1 - srcA)) / outA\n );\n canvas[dIdx + 2] = Math.round(\n (scaledData[sIdx + 2]! * srcA + canvas[dIdx + 2]! * dstA * (1 - srcA)) / outA\n );\n canvas[dIdx + 3] = Math.round(outA * 255);\n }\n }\n }\n return {\n ...img,\n width: targetW,\n height: targetH,\n data: canvas,\n hasAlpha: img.hasAlpha || bg.a < 255\n };\n}\n", "import type {\n BlendMode,\n ChannelStats,\n CompositeLayer,\n ImageStats,\n RgbaColor,\n RgbaImage\n} from \"../ast.js\";\nimport { decodeImage } from \"../codecs/index.js\";\nimport { resolveGravityOffset } from \"./resize.js\";\n\nexport function flipImage(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const out = new Uint8Array(data.length);\n const rowBytes = width * 4;\n for (let y = 0; y < height; y++) {\n const srcOffset = y * rowBytes;\n const dstOffset = (height - 1 - y) * rowBytes;\n out.set(data.subarray(srcOffset, srcOffset + rowBytes), dstOffset);\n }\n return { ...img, data: out };\n}\n\nexport function flopImage(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const out = new Uint8Array(data.length);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n const dstIdx = (y * width + (width - 1 - x)) * 4;\n out[dstIdx] = data[srcIdx]!;\n out[dstIdx + 1] = data[srcIdx + 1]!;\n out[dstIdx + 2] = data[srcIdx + 2]!;\n out[dstIdx + 3] = data[srcIdx + 3]!;\n }\n }\n return { ...img, data: out };\n}\n\nfunction rotate90CW(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const dstW = height;\n const dstH = width;\n const out = new Uint8Array(data.length);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n const dstX = height - 1 - y;\n const dstY = x;\n const dstIdx = (dstY * dstW + dstX) * 4;\n out[dstIdx] = data[srcIdx]!;\n out[dstIdx + 1] = data[srcIdx + 1]!;\n out[dstIdx + 2] = data[srcIdx + 2]!;\n out[dstIdx + 3] = data[srcIdx + 3]!;\n }\n }\n return { ...img, width: dstW, height: dstH, data: out };\n}\n\nfunction rotate180(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const out = new Uint8Array(data.length);\n const total = width * height;\n for (let i = 0; i < total; i++) {\n const srcIdx = i * 4;\n const dstIdx = (total - 1 - i) * 4;\n out[dstIdx] = data[srcIdx]!;\n out[dstIdx + 1] = data[srcIdx + 1]!;\n out[dstIdx + 2] = data[srcIdx + 2]!;\n out[dstIdx + 3] = data[srcIdx + 3]!;\n }\n return { ...img, data: out };\n}\n\nfunction rotate270CW(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const dstW = height;\n const dstH = width;\n const out = new Uint8Array(data.length);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n const dstX = y;\n const dstY = width - 1 - x;\n const dstIdx = (dstY * dstW + dstX) * 4;\n out[dstIdx] = data[srcIdx]!;\n out[dstIdx + 1] = data[srcIdx + 1]!;\n out[dstIdx + 2] = data[srcIdx + 2]!;\n out[dstIdx + 3] = data[srcIdx + 3]!;\n }\n }\n return { ...img, width: dstW, height: dstH, data: out };\n}\n\nexport function applyExifOrientation(img: RgbaImage): RgbaImage {\n const orientation = img.orientation;\n if (!orientation || orientation === 1) {\n return { ...img, orientation: 1 };\n }\n let result = img;\n switch (orientation) {\n case 2:\n result = flopImage(img);\n break;\n case 3:\n result = rotate180(img);\n break;\n case 4:\n result = flipImage(img);\n break;\n case 5:\n result = flopImage(rotate90CW(img));\n break;\n case 6:\n result = rotate90CW(img);\n break;\n case 7:\n result = flipImage(rotate90CW(img));\n break;\n case 8:\n result = rotate270CW(img);\n break;\n default:\n break;\n }\n return { ...result, orientation: 1 };\n}\n\nexport function rotateImage(\n img: RgbaImage,\n angle: number,\n background: RgbaColor = { r: 0, g: 0, b: 0, a: 255 }\n): RgbaImage {\n const norm = ((angle % 360) + 360) % 360;\n if (Math.abs(norm) < 1e-6) return img;\n if (Math.abs(norm - 90) < 1e-6) return rotate90CW(img);\n if (Math.abs(norm - 180) < 1e-6) return rotate180(img);\n if (Math.abs(norm - 270) < 1e-6) return rotate270CW(img);\n\n const rad = (norm * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const absCos = Math.abs(cos);\n const absSin = Math.abs(sin);\n const dstW = Math.max(1, Math.ceil(img.width * absCos + img.height * absSin - 1e-6));\n const dstH = Math.max(1, Math.ceil(img.width * absSin + img.height * absCos - 1e-6));\n const out = new Uint8Array(dstW * dstH * 4);\n\n const cxSrc = (img.width - 1) / 2;\n const cySrc = (img.height - 1) / 2;\n const cxDst = (dstW - 1) / 2;\n const cyDst = (dstH - 1) / 2;\n\n for (let y = 0; y < dstH; y++) {\n const dy = y - cyDst;\n for (let x = 0; x < dstW; x++) {\n const dx = x - cxDst;\n const sx = dx * cos + dy * sin + cxSrc;\n const sy = -dx * sin + dy * cos + cySrc;\n const dIdx = (y * dstW + x) * 4;\n if (sx < 0 || sy < 0 || sx >= img.width - 1 || sy >= img.height - 1) {\n if (sx >= -0.5 && sy >= -0.5 && sx < img.width - 0.5 && sy < img.height - 0.5) {\n const ix = Math.max(0, Math.min(img.width - 1, Math.round(sx)));\n const iy = Math.max(0, Math.min(img.height - 1, Math.round(sy)));\n const sIdx = (iy * img.width + ix) * 4;\n out[dIdx] = img.data[sIdx]!;\n out[dIdx + 1] = img.data[sIdx + 1]!;\n out[dIdx + 2] = img.data[sIdx + 2]!;\n out[dIdx + 3] = img.data[sIdx + 3]!;\n } else {\n out[dIdx] = background.r;\n out[dIdx + 1] = background.g;\n out[dIdx + 2] = background.b;\n out[dIdx + 3] = background.a;\n }\n } else {\n const x0 = Math.floor(sx);\n const y0 = Math.floor(sy);\n const fx = sx - x0;\n const fy = sy - y0;\n const i00 = (y0 * img.width + x0) * 4;\n const i10 = (y0 * img.width + (x0 + 1)) * 4;\n const i01 = ((y0 + 1) * img.width + x0) * 4;\n const i11 = ((y0 + 1) * img.width + (x0 + 1)) * 4;\n for (let c = 0; c < 4; c++) {\n const top = img.data[i00 + c]! * (1 - fx) + img.data[i10 + c]! * fx;\n const bot = img.data[i01 + c]! * (1 - fx) + img.data[i11 + c]! * fx;\n out[dIdx + c] = Math.round(top * (1 - fy) + bot * fy);\n }\n }\n }\n }\n return {\n ...img,\n width: dstW,\n height: dstH,\n data: out,\n hasAlpha: img.hasAlpha || background.a < 255\n };\n}\n\nexport function extractImage(\n img: RgbaImage,\n region: { readonly left: number; readonly top: number; readonly width: number; readonly height: number }\n): RgbaImage {\n const left = Math.round(region.left);\n const top = Math.round(region.top);\n const width = Math.round(region.width);\n const height = Math.round(region.height);\n if (\n width <= 0 ||\n height <= 0 ||\n left < 0 ||\n top < 0 ||\n left + width > img.width ||\n top + height > img.height\n ) {\n throw new Error(\n `extract_area: bad extract area (left=${left}, top=${top}, width=${width}, height=${height} on ${img.width}x${img.height})`\n );\n }\n const out = new Uint8Array(width * height * 4);\n for (let y = 0; y < height; y++) {\n const srcStart = ((top + y) * img.width + left) * 4;\n out.set(img.data.subarray(srcStart, srcStart + width * 4), y * width * 4);\n }\n return { ...img, width, height, data: out };\n}\n\nexport function trimImage(\n img: RgbaImage,\n options?: { readonly threshold?: number; readonly background?: RgbaColor }\n): RgbaImage {\n const threshold = options?.threshold ?? 10;\n const ref: RgbaColor = options?.background ?? {\n r: img.data[0] ?? 0,\n g: img.data[1] ?? 0,\n b: img.data[2] ?? 0,\n a: img.data[3] ?? 255\n };\n\n const isBg = (x: number, y: number): boolean => {\n const idx = (y * img.width + x) * 4;\n const dr = Math.abs(img.data[idx]! - ref.r);\n const dg = Math.abs(img.data[idx + 1]! - ref.g);\n const db = Math.abs(img.data[idx + 2]! - ref.b);\n const da = Math.abs(img.data[idx + 3]! - ref.a);\n return dr <= threshold && dg <= threshold && db <= threshold && da <= threshold;\n };\n\n let top = 0;\n while (top < img.height) {\n let allBg = true;\n for (let x = 0; x < img.width; x++) {\n if (!isBg(x, top)) {\n allBg = false;\n break;\n }\n }\n if (!allBg) break;\n top++;\n }\n if (top >= img.height) {\n return extractImage(img, { left: 0, top: 0, width: 1, height: 1 });\n }\n\n let bottom = img.height - 1;\n while (bottom > top) {\n let allBg = true;\n for (let x = 0; x < img.width; x++) {\n if (!isBg(x, bottom)) {\n allBg = false;\n break;\n }\n }\n if (!allBg) break;\n bottom--;\n }\n\n let left = 0;\n while (left < img.width) {\n let allBg = true;\n for (let y = top; y <= bottom; y++) {\n if (!isBg(left, y)) {\n allBg = false;\n break;\n }\n }\n if (!allBg) break;\n left++;\n }\n\n let right = img.width - 1;\n while (right > left) {\n let allBg = true;\n for (let y = top; y <= bottom; y++) {\n if (!isBg(right, y)) {\n allBg = false;\n break;\n }\n }\n if (!allBg) break;\n right--;\n }\n\n return extractImage(img, {\n left,\n top,\n width: right - left + 1,\n height: bottom - top + 1\n });\n}\n\nexport function extendImage(\n img: RgbaImage,\n spec: {\n readonly top: number;\n readonly bottom: number;\n readonly left: number;\n readonly right: number;\n readonly background: RgbaColor;\n readonly extendWith: \"background\" | \"copy\" | \"repeat\" | \"mirror\";\n }\n): RgbaImage {\n const top = Math.max(0, Math.round(spec.top));\n const bottom = Math.max(0, Math.round(spec.bottom));\n const left = Math.max(0, Math.round(spec.left));\n const right = Math.max(0, Math.round(spec.right));\n const dstW = img.width + left + right;\n const dstH = img.height + top + bottom;\n const out = new Uint8Array(dstW * dstH * 4);\n\n const mapCoord = (c: number, size: number): number => {\n if (c >= 0 && c < size) return c;\n if (spec.extendWith === \"copy\") {\n return Math.max(0, Math.min(size - 1, c));\n }\n if (spec.extendWith === \"repeat\") {\n return ((c % size) + size) % size;\n }\n if (spec.extendWith === \"mirror\") {\n const period = size * 2;\n const m = ((c % period) + period) % period;\n return m < size ? m : period - 1 - m;\n }\n return -1;\n };\n\n for (let y = 0; y < dstH; y++) {\n const sy = mapCoord(y - top, img.height);\n for (let x = 0; x < dstW; x++) {\n const sx = mapCoord(x - left, img.width);\n const dIdx = (y * dstW + x) * 4;\n if (sx < 0 || sy < 0) {\n out[dIdx] = spec.background.r;\n out[dIdx + 1] = spec.background.g;\n out[dIdx + 2] = spec.background.b;\n out[dIdx + 3] = spec.background.a;\n } else {\n const sIdx = (sy * img.width + sx) * 4;\n out[dIdx] = img.data[sIdx]!;\n out[dIdx + 1] = img.data[sIdx + 1]!;\n out[dIdx + 2] = img.data[sIdx + 2]!;\n out[dIdx + 3] = img.data[sIdx + 3]!;\n }\n }\n }\n return {\n ...img,\n width: dstW,\n height: dstH,\n data: out,\n hasAlpha: img.hasAlpha || spec.background.a < 255\n };\n}\n\nfunction blendChannel(s: number, d: number, mode: BlendMode): number {\n switch (mode) {\n case \"multiply\":\n return s * d;\n case \"screen\":\n return s + d - s * d;\n case \"overlay\":\n return d < 0.5 ? 2 * s * d : 1 - 2 * (1 - s) * (1 - d);\n case \"darken\":\n return Math.min(s, d);\n case \"lighten\":\n return Math.max(s, d);\n case \"color-dodge\":\n case \"colour-dodge\":\n return d === 0 ? 0 : s === 1 ? 1 : Math.min(1, d / (1 - s));\n case \"color-burn\":\n case \"colour-burn\":\n return d === 1 ? 1 : s === 0 ? 0 : 1 - Math.min(1, (1 - d) / s);\n case \"hard-light\":\n return s < 0.5 ? 2 * s * d : 1 - 2 * (1 - s) * (1 - d);\n case \"soft-light\":\n return s < 0.5\n ? d - (1 - 2 * s) * d * (1 - d)\n : d + (2 * s - 1) * (d <= 0.25 ? ((16 * d - 12) * d + 4) * d : Math.sqrt(d) - d);\n case \"difference\":\n return Math.abs(d - s);\n case \"exclusion\":\n return s + d - 2 * s * d;\n case \"add\":\n return Math.min(1, s + d);\n default:\n return s;\n }\n}\n\nexport function compositeImage(\n base: RgbaImage,\n layers: readonly CompositeLayer[]\n): RgbaImage {\n const out = new Uint8Array(base.data);\n const baseW = base.width;\n const baseH = base.height;\n\n for (const layer of layers) {\n let overlay: RgbaImage;\n if (typeof layer.input === \"string\") {\n overlay = decodeImage(\n new TextEncoder().encode(layer.input),\n layer.density !== undefined ? { density: layer.density } : undefined\n );\n } else if (layer.input instanceof Uint8Array) {\n overlay = decodeImage(layer.input, {\n ...(layer.density !== undefined ? { density: layer.density } : {}),\n ...(layer.raw !== undefined ? { raw: layer.raw } : {})\n });\n } else {\n overlay = decodeImage(undefined, {\n create: layer.input.create,\n ...(layer.density !== undefined ? { density: layer.density } : {})\n });\n }\n\n const blend: BlendMode = layer.blend ?? \"over\";\n const grav = resolveGravityOffset(\n baseW,\n baseH,\n overlay.width,\n overlay.height,\n layer.gravity ?? \"northwest\"\n );\n const startX = layer.left !== undefined ? Math.round(layer.left) : grav.x;\n const startY = layer.top !== undefined ? Math.round(layer.top) : grav.y;\n\n const iterW = layer.tile ? baseW : overlay.width;\n const iterH = layer.tile ? baseH : overlay.height;\n\n for (let ty = 0; ty < 1; ty++) {\n for (let tx = 0; tx < 1; tx++) {\n for (let y = 0; y < iterH; y++) {\n const dy = layer.tile ? y : startY + y;\n if (dy < 0 || dy >= baseH) continue;\n const sy = layer.tile ? dy % overlay.height : y;\n for (let x = 0; x < iterW; x++) {\n const dx = layer.tile ? x : startX + x;\n if (dx < 0 || dx >= baseW) continue;\n const sx = layer.tile ? dx % overlay.width : x;\n const sIdx = (sy * overlay.width + sx) * 4;\n const dIdx = (dy * baseW + dx) * 4;\n\n const sr = overlay.data[sIdx]! / 255;\n const sg = overlay.data[sIdx + 1]! / 255;\n const sb = overlay.data[sIdx + 2]! / 255;\n const sa = overlay.data[sIdx + 3]! / 255;\n\n const dr = out[dIdx]! / 255;\n const dg = out[dIdx + 1]! / 255;\n const db = out[dIdx + 2]! / 255;\n const da = out[dIdx + 3]! / 255;\n\n if (blend === \"clear\") {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n continue;\n }\n if (blend === \"source\") {\n out[dIdx] = Math.round(sr * 255);\n out[dIdx + 1] = Math.round(sg * 255);\n out[dIdx + 2] = Math.round(sb * 255);\n out[dIdx + 3] = Math.round(sa * 255);\n continue;\n }\n if (blend === \"dest\") continue;\n if (blend === \"dest-over\") {\n const outA = da + sa * (1 - da);\n if (outA > 0) {\n out[dIdx] = Math.round(((dr * da + sr * sa * (1 - da)) / outA) * 255);\n out[dIdx + 1] = Math.round(((dg * da + sg * sa * (1 - da)) / outA) * 255);\n out[dIdx + 2] = Math.round(((db * da + sb * sa * (1 - da)) / outA) * 255);\n out[dIdx + 3] = Math.round(outA * 255);\n }\n continue;\n }\n if (blend === \"in\") {\n const outA = sa * da;\n out[dIdx] = Math.round(sr * 255);\n out[dIdx + 1] = Math.round(sg * 255);\n out[dIdx + 2] = Math.round(sb * 255);\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"out\") {\n const outA = sa * (1 - da);\n out[dIdx] = Math.round(sr * 255);\n out[dIdx + 1] = Math.round(sg * 255);\n out[dIdx + 2] = Math.round(sb * 255);\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"dest-in\") {\n out[dIdx + 3] = Math.round(da * sa * 255);\n continue;\n }\n if (blend === \"dest-out\") {\n out[dIdx + 3] = Math.round(da * (1 - sa) * 255);\n continue;\n }\n if (blend === \"atop\") {\n const outA = da;\n if (outA > 0) {\n const cr = (sr * sa + dr * da * (1 - sa)) / outA;\n const cg = (sg * sa + dg * da * (1 - sa)) / outA;\n const cb = (sb * sa + db * da * (1 - sa)) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n }\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"dest-atop\") {\n const outA = sa;\n if (outA > 0) {\n const cr = (dr * da + sr * sa * (1 - da)) / outA;\n const cg = (dg * da + sg * sa * (1 - da)) / outA;\n const cb = (db * da + sb * sa * (1 - da)) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n }\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"xor\") {\n const outA = sa * (1 - da) + da * (1 - sa);\n if (outA > 0) {\n const cr = (sr * sa * (1 - da) + dr * da * (1 - sa)) / outA;\n const cg = (sg * sa * (1 - da) + dg * da * (1 - sa)) / outA;\n const cb = (sb * sa * (1 - da) + db * da * (1 - sa)) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n } else {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n }\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"saturate\") {\n const outA = Math.min(1, sa + da);\n if (outA > 0) {\n const f = Math.min(sa, 1 - da);\n const cr = (sr * sa * f + dr * da) / outA;\n const cg = (sg * sa * f + dg * da) / outA;\n const cb = (sb * sa * f + db * da) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n }\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n\n // Standard W3C separable blend over destination\n const outA = sa + da * (1 - sa);\n if (outA <= 0) {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n } else {\n const br = blendChannel(sr, dr, blend);\n const bg = blendChannel(sg, dg, blend);\n const bb = blendChannel(sb, db, blend);\n const cr = (sa * (1 - da) * sr + sa * da * br + (1 - sa) * da * dr) / outA;\n const cg = (sa * (1 - da) * sg + sa * da * bg + (1 - sa) * da * dg) / outA;\n const cb = (sa * (1 - da) * sb + sa * da * bb + (1 - sa) * da * db) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n out[dIdx + 3] = Math.max(0, Math.min(255, Math.round(outA * 255)));\n }\n }\n }\n }\n }\n }\n return { ...base, data: out };\n}\n\nexport function grayscaleImage(img: RgbaImage): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const luma = Math.round(\n 0.2126 * img.data[idx]! + 0.7152 * img.data[idx + 1]! + 0.0722 * img.data[idx + 2]!\n );\n out[idx] = luma;\n out[idx + 1] = luma;\n out[idx + 2] = luma;\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out, space: \"b-w\", channels: img.hasAlpha ? 2 : 1 };\n}\n\nexport function flattenImage(img: RgbaImage, background: RgbaColor): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const a = img.data[idx + 3]! / 255;\n out[idx] = Math.round(img.data[idx]! * a + background.r * (1 - a));\n out[idx + 1] = Math.round(img.data[idx + 1]! * a + background.g * (1 - a));\n out[idx + 2] = Math.round(img.data[idx + 2]! * a + background.b * (1 - a));\n out[idx + 3] = 255;\n }\n return {\n ...img,\n data: out,\n hasAlpha: false,\n channels: img.channels === 4 ? 3 : img.channels === 2 ? 1 : img.channels\n };\n}\n\nexport function unflattenImage(img: RgbaImage): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const r = img.data[idx]!;\n const g = img.data[idx + 1]!;\n const b = img.data[idx + 2]!;\n out[idx] = r;\n out[idx + 1] = g;\n out[idx + 2] = b;\n out[idx + 3] = r === 255 && g === 255 && b === 255 ? 0 : img.data[idx + 3]!;\n }\n return { ...img, data: out, hasAlpha: true, channels: 4 };\n}\n\nexport function negateImage(img: RgbaImage, options?: { readonly alpha?: boolean }): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const negAlpha = options?.alpha ?? false;\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n out[idx] = 255 - img.data[idx]!;\n out[idx + 1] = 255 - img.data[idx + 1]!;\n out[idx + 2] = 255 - img.data[idx + 2]!;\n out[idx + 3] = negAlpha ? 255 - img.data[idx + 3]! : img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): [number, number, number] {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = (gn - bn) / d + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / d + 2;\n break;\n case bn:\n h = (rn - gn) / d + 4;\n break;\n }\n h *= 60;\n }\n return [h, s, l];\n}\n\nfunction hslToRgb(h: number, s: number, l: number): [number, number, number] {\n const hn = (((h % 360) + 360) % 360) / 360;\n if (s === 0) {\n const v = Math.round(l * 255);\n return [v, v, v];\n }\n const hue2rgb = (p: number, q: number, t: number): number => {\n let tt = t;\n if (tt < 0) tt += 1;\n if (tt > 1) tt -= 1;\n if (tt < 1 / 6) return p + (q - p) * 6 * tt;\n if (tt < 1 / 2) return q;\n if (tt < 2 / 3) return p + (q - p) * (2 / 3 - tt) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = Math.max(0, Math.min(255, Math.round(hue2rgb(p, q, hn + 1 / 3) * 255)));\n const g = Math.max(0, Math.min(255, Math.round(hue2rgb(p, q, hn) * 255)));\n const b = Math.max(0, Math.min(255, Math.round(hue2rgb(p, q, hn - 1 / 3) * 255)));\n return [r, g, b];\n}\n\nexport function modulateImage(\n img: RgbaImage,\n spec: {\n readonly brightness: number;\n readonly saturation: number;\n readonly hue: number;\n readonly lightness: number;\n }\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const [h, s, l] = rgbToHsl(img.data[idx]!, img.data[idx + 1]!, img.data[idx + 2]!);\n const nh = h + spec.hue;\n const ns = Math.max(0, Math.min(1, s * spec.saturation));\n const nl = Math.max(0, Math.min(1, l * spec.brightness + spec.lightness / 100));\n const [r, g, b] = hslToRgb(nh, ns, nl);\n out[idx] = r;\n out[idx + 1] = g;\n out[idx + 2] = b;\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function tintImage(img: RgbaImage, color: RgbaColor): RgbaImage {\n const [th, ts] = rgbToHsl(color.r, color.g, color.b);\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const [, , l] = rgbToHsl(img.data[idx]!, img.data[idx + 1]!, img.data[idx + 2]!);\n const [r, g, b] = hslToRgb(th, ts, l);\n out[idx] = r;\n out[idx + 1] = g;\n out[idx + 2] = b;\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out, space: \"srgb\", channels: img.hasAlpha ? 4 : 3 };\n}\n\nexport function gammaImage(img: RgbaImage, gamma = 2.2, gammaOut = gamma): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const exp = gamma / gammaOut;\n const lut = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n lut[i] = Math.max(0, Math.min(255, Math.round(Math.pow(i / 255, exp) * 255)));\n }\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n out[idx] = lut[img.data[idx]!]!;\n out[idx + 1] = lut[img.data[idx + 1]!]!;\n out[idx + 2] = lut[img.data[idx + 2]!]!;\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function linearImage(\n img: RgbaImage,\n a: readonly number[],\n b: readonly number[]\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n for (let c = 0; c < 3; c++) {\n const mul = a[c] ?? a[0] ?? 1;\n const off = b[c] ?? b[0] ?? 0;\n const v = Math.round(img.data[idx + c]! * mul + off);\n out[idx + c] = v < 0 ? 0 : v > 255 ? 255 : v;\n }\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function normalizeImage(\n img: RgbaImage,\n options?: { readonly lower?: number; readonly upper?: number }\n): RgbaImage {\n const lowerPct = Math.max(0, Math.min(100, options?.lower ?? 1));\n const upperPct = Math.max(lowerPct, Math.min(100, options?.upper ?? 99));\n const totalSamples = img.width * img.height * 3;\n if (totalSamples === 0) return img;\n\n const hist = new Uint32Array(256);\n let min = 255;\n let max = 0;\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n for (let c = 0; c < 3; c++) {\n const v = img.data[idx + c]!;\n hist[v]!++;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n\n let lowBound = min;\n let highBound = max;\n if (lowerPct > 1 || upperPct < 99) {\n const lowTarget = Math.floor((totalSamples * lowerPct) / 100);\n const highTarget = Math.ceil((totalSamples * upperPct) / 100);\n let cum = 0;\n for (let v = 0; v < 256; v++) {\n cum += hist[v]!;\n if (cum > lowTarget) {\n lowBound = v;\n break;\n }\n }\n cum = 0;\n for (let v = 0; v < 256; v++) {\n cum += hist[v]!;\n if (cum >= highTarget) {\n highBound = v;\n break;\n }\n }\n }\n\n const range = highBound - lowBound;\n if (range <= 0) return img;\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n for (let c = 0; c < 3; c++) {\n const scaled = Math.round(((img.data[idx + c]! - lowBound) * 255) / range);\n out[idx + c] = scaled < 0 ? 0 : scaled > 255 ? 255 : scaled;\n }\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function thresholdImage(\n img: RgbaImage,\n value = 128,\n grayscale = true\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n if (grayscale) {\n const luma =\n 0.2126 * img.data[idx]! + 0.7152 * img.data[idx + 1]! + 0.0722 * img.data[idx + 2]!;\n const bit = luma >= value ? 255 : 0;\n out[idx] = bit;\n out[idx + 1] = bit;\n out[idx + 2] = bit;\n } else {\n out[idx] = img.data[idx]! >= value ? 255 : 0;\n out[idx + 1] = img.data[idx + 1]! >= value ? 255 : 0;\n out[idx + 2] = img.data[idx + 2]! >= value ? 255 : 0;\n }\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out, ...(grayscale ? { space: \"b-w\" as const } : {}) };\n}\n\nexport function blurImage(img: RgbaImage, sigma = 1.5): RgbaImage {\n if (sigma <= 0.3) return img;\n const radius = Math.max(1, Math.min(25, Math.ceil(sigma * 3)));\n const size = radius * 2 + 1;\n const kernel = new Float32Array(size);\n let sum = 0;\n const twoSigmaSq = 2 * sigma * sigma;\n for (let i = -radius; i <= radius; i++) {\n const w = Math.exp(-(i * i) / twoSigmaSq);\n kernel[i + radius] = w;\n sum += w;\n }\n for (let i = 0; i < size; i++) kernel[i]! /= sum;\n\n const { width, height, data } = img;\n const temp = new Float32Array(data.length);\n const out = new Uint8Array(data.length);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let r = 0;\n let g = 0;\n let b = 0;\n let a = 0;\n for (let k = -radius; k <= radius; k++) {\n const sx = Math.max(0, Math.min(width - 1, x + k));\n const sIdx = (y * width + sx) * 4;\n const w = kernel[k + radius]!;\n r += data[sIdx]! * w;\n g += data[sIdx + 1]! * w;\n b += data[sIdx + 2]! * w;\n a += data[sIdx + 3]! * w;\n }\n const dIdx = (y * width + x) * 4;\n temp[dIdx] = r;\n temp[dIdx + 1] = g;\n temp[dIdx + 2] = b;\n temp[dIdx + 3] = a;\n }\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let r = 0;\n let g = 0;\n let b = 0;\n let a = 0;\n for (let k = -radius; k <= radius; k++) {\n const sy = Math.max(0, Math.min(height - 1, y + k));\n const sIdx = (sy * width + x) * 4;\n const w = kernel[k + radius]!;\n r += temp[sIdx]! * w;\n g += temp[sIdx + 1]! * w;\n b += temp[sIdx + 2]! * w;\n a += temp[sIdx + 3]! * w;\n }\n const dIdx = (y * width + x) * 4;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(r)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(g)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(b)));\n out[dIdx + 3] = Math.max(0, Math.min(255, Math.round(a)));\n }\n }\n return { ...img, data: out };\n}\n\nexport function sharpenImage(\n img: RgbaImage,\n sigma = 1.0,\n amount = 1.0\n): RgbaImage {\n const blurred = blurImage(img, sigma);\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n for (let c = 0; c < 3; c++) {\n const orig = img.data[idx + c]!;\n const blur = blurred.data[idx + c]!;\n const val = Math.round(orig + amount * (orig - blur));\n out[idx + c] = val < 0 ? 0 : val > 255 ? 255 : val;\n }\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function medianImage(img: RgbaImage, size = 3): RgbaImage {\n const radius = Math.max(1, Math.floor(size / 2));\n const { width, height, data } = img;\n const out = new Uint8Array(data.length);\n const windowLen = (radius * 2 + 1) * (radius * 2 + 1);\n const rWin = new Uint8Array(windowLen);\n const gWin = new Uint8Array(windowLen);\n const bWin = new Uint8Array(windowLen);\n const mid = windowLen >>> 1;\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let p = 0;\n for (let ky = -radius; ky <= radius; ky++) {\n const sy = Math.max(0, Math.min(height - 1, y + ky));\n for (let kx = -radius; kx <= radius; kx++) {\n const sx = Math.max(0, Math.min(width - 1, x + kx));\n const sIdx = (sy * width + sx) * 4;\n rWin[p] = data[sIdx]!;\n gWin[p] = data[sIdx + 1]!;\n bWin[p] = data[sIdx + 2]!;\n p++;\n }\n }\n rWin.sort();\n gWin.sort();\n bWin.sort();\n const dIdx = (y * width + x) * 4;\n out[dIdx] = rWin[mid]!;\n out[dIdx + 1] = gWin[mid]!;\n out[dIdx + 2] = bWin[mid]!;\n out[dIdx + 3] = data[dIdx + 3]!;\n }\n }\n return { ...img, data: out };\n}\n\nexport function convolveImage(\n img: RgbaImage,\n spec: {\n readonly width: number;\n readonly height: number;\n readonly kernel: readonly number[];\n readonly scale: number;\n readonly offset: number;\n }\n): RgbaImage {\n const { width, height, data } = img;\n const kw = spec.width;\n const kh = spec.height;\n const rx = Math.floor(kw / 2);\n const ry = Math.floor(kh / 2);\n const scale = spec.scale === 0 ? 1 : spec.scale;\n const out = new Uint8Array(data.length);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let r = 0;\n let g = 0;\n let b = 0;\n for (let ky = 0; ky < kh; ky++) {\n const sy = Math.max(0, Math.min(height - 1, y + ky - ry));\n for (let kx = 0; kx < kw; kx++) {\n const sx = Math.max(0, Math.min(width - 1, x + kx - rx));\n const w = spec.kernel[ky * kw + kx] ?? 0;\n const sIdx = (sy * width + sx) * 4;\n r += data[sIdx]! * w;\n g += data[sIdx + 1]! * w;\n b += data[sIdx + 2]! * w;\n }\n }\n const dIdx = (y * width + x) * 4;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(r / scale + spec.offset)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(g / scale + spec.offset)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(b / scale + spec.offset)));\n out[dIdx + 3] = data[dIdx + 3]!;\n }\n }\n return { ...img, data: out };\n}\n\nexport function ensureAlphaImage(img: RgbaImage, alpha = 1): RgbaImage {\n if (img.hasAlpha) return img;\n const aByte = alpha <= 1 ? Math.round(alpha * 255) : Math.round(alpha);\n const out = new Uint8Array(img.data);\n for (let i = 3; i < out.length; i += 4) {\n out[i] = aByte;\n }\n return { ...img, data: out, hasAlpha: true, channels: 4 };\n}\n\nexport function removeAlphaImage(img: RgbaImage): RgbaImage {\n const out = new Uint8Array(img.data);\n for (let i = 3; i < out.length; i += 4) {\n out[i] = 255;\n }\n return {\n ...img,\n data: out,\n hasAlpha: false,\n channels: img.channels === 4 ? 3 : img.channels === 2 ? 1 : img.channels\n };\n}\n\nexport function extractChannelImage(img: RgbaImage, channel: 0 | 1 | 2 | 3): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const v = img.data[idx + channel]!;\n out[idx] = v;\n out[idx + 1] = v;\n out[idx + 2] = v;\n out[idx + 3] = 255;\n }\n return { ...img, data: out, space: \"b-w\", channels: 1, hasAlpha: false };\n}\n\nfunction clamp(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\nexport function recombImage(\n img: RgbaImage,\n matrix: readonly (readonly number[])[]\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const is4x4 = matrix.length >= 4 && (matrix[0]?.length ?? 0) >= 4;\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const r = img.data[idx]!;\n const g = img.data[idx + 1]!;\n const b = img.data[idx + 2]!;\n const a = img.data[idx + 3]!;\n const rRow = matrix[0] ?? [1, 0, 0, 0];\n const gRow = matrix[1] ?? [0, 1, 0, 0];\n const bRow = matrix[2] ?? [0, 0, 1, 0];\n out[idx] = clamp(\n r * (rRow[0] ?? 0) + g * (rRow[1] ?? 0) + b * (rRow[2] ?? 0) + (is4x4 ? a * (rRow[3] ?? 0) : 0)\n );\n out[idx + 1] = clamp(\n r * (gRow[0] ?? 0) + g * (gRow[1] ?? 0) + b * (gRow[2] ?? 0) + (is4x4 ? a * (gRow[3] ?? 0) : 0)\n );\n out[idx + 2] = clamp(\n r * (bRow[0] ?? 0) + g * (bRow[1] ?? 0) + b * (bRow[2] ?? 0) + (is4x4 ? a * (bRow[3] ?? 0) : 0)\n );\n if (is4x4 && matrix[3]) {\n const aRow = matrix[3]!;\n out[idx + 3] = clamp(\n r * (aRow[0] ?? 0) + g * (aRow[1] ?? 0) + b * (aRow[2] ?? 0) + a * (aRow[3] ?? 1)\n );\n } else {\n out[idx + 3] = a;\n }\n }\n return { ...img, data: out };\n}\n\nexport function toColorspaceImage(img: RgbaImage, space: \"srgb\" | \"b-w\" | \"cmyk\"): RgbaImage {\n if (space === \"b-w\") {\n return grayscaleImage(img);\n }\n return {\n ...img,\n space,\n channels: img.hasAlpha ? 4 : 3\n };\n}\n\nexport function bandboolImage(img: RgbaImage, op: \"and\" | \"or\" | \"eor\"): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const chCount = img.channels;\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n let acc = img.data[idx]!;\n for (let c = 1; c < chCount; c++) {\n const v = img.data[idx + c]!;\n if (op === \"and\") acc &= v;\n else if (op === \"or\") acc |= v;\n else acc ^= v;\n }\n out[idx] = acc;\n out[idx + 1] = acc;\n out[idx + 2] = acc;\n out[idx + 3] = 255;\n }\n return { ...img, data: out, space: \"b-w\", channels: 1, hasAlpha: false };\n}\n\nexport function joinChannelImage(img: RgbaImage, extraImages: readonly RgbaImage[]): RgbaImage {\n const out = new Uint8Array(img.data);\n const firstExtra = extraImages[0];\n if (!firstExtra) return img;\n if (img.channels === 1 && extraImages.length >= 2) {\n const gImg = extraImages[0]!;\n const bImg = extraImages[1]!;\n const aImg = extraImages[2];\n for (let i = 0; i < img.width * img.height; i++) {\n out[i * 4 + 1] = gImg.data[i * 4] ?? 0;\n out[i * 4 + 2] = bImg.data[i * 4] ?? 0;\n out[i * 4 + 3] = aImg ? (aImg.data[i * 4] ?? 255) : 255;\n }\n return {\n ...img,\n data: out,\n space: \"srgb\",\n channels: aImg ? 4 : 3,\n hasAlpha: Boolean(aImg)\n };\n }\n for (let i = 0; i < img.width * img.height; i++) {\n out[i * 4 + 3] = firstExtra.data[i * 4] ?? 255;\n }\n return {\n ...img,\n data: out,\n channels: img.channels === 1 ? 2 : 4,\n hasAlpha: true\n };\n}\n\nexport function claheImage(\n img: RgbaImage,\n options: { readonly width: number; readonly height: number; readonly maxSlope: number }\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const tileW = Math.max(1, options.width || 8);\n const tileH = Math.max(1, options.height || 8);\n const maxSlope = options.maxSlope > 0 ? options.maxSlope : 3;\n\n for (let ty = 0; ty < img.height; ty += tileH) {\n for (let tx = 0; tx < img.width; tx += tileW) {\n const xEnd = Math.min(img.width, tx + tileW);\n const yEnd = Math.min(img.height, ty + tileH);\n const count = (xEnd - tx) * (yEnd - ty);\n if (count <= 0) continue;\n const hist = new Float64Array(256);\n for (let y = ty; y < yEnd; y++) {\n for (let x = tx; x < xEnd; x++) {\n const idx = (y * img.width + x) * 4;\n const luma = Math.round(\n 0.299 * img.data[idx]! + 0.587 * img.data[idx + 1]! + 0.114 * img.data[idx + 2]!\n );\n hist[luma]!++;\n }\n }\n const clipLimit = Math.max(1, (maxSlope * count) / 256);\n let excess = 0;\n for (let i = 0; i < 256; i++) {\n if (hist[i]! > clipLimit) {\n excess += hist[i]! - clipLimit;\n hist[i] = clipLimit;\n }\n }\n const addPerBin = excess / 256;\n const cdf = new Uint8Array(256);\n let cum = 0;\n for (let i = 0; i < 256; i++) {\n cum += hist[i]! + addPerBin;\n cdf[i] = clamp((cum * 255) / count);\n }\n for (let y = ty; y < yEnd; y++) {\n for (let x = tx; x < xEnd; x++) {\n const idx = (y * img.width + x) * 4;\n const r = img.data[idx]!;\n const g = img.data[idx + 1]!;\n const b = img.data[idx + 2]!;\n const luma = Math.max(1, Math.round(0.299 * r + 0.587 * g + 0.114 * b));\n const scale = cdf[luma]! / luma;\n out[idx] = clamp(r * scale);\n out[idx + 1] = clamp(g * scale);\n out[idx + 2] = clamp(b * scale);\n out[idx + 3] = img.data[idx + 3]!;\n }\n }\n }\n }\n return { ...img, data: out };\n}\n\nexport function affineImage(\n img: RgbaImage,\n spec: {\n readonly matrix: readonly [number, number, number, number];\n readonly background: RgbaColor;\n readonly idx: number;\n readonly idy: number;\n readonly odx: number;\n readonly ody: number;\n }\n): RgbaImage {\n const [a, b, c, d] = spec.matrix;\n const det = a * d - b * c;\n if (Math.abs(det) < 1e-8) return img;\n const corners: Array<[number, number]> = [\n [0, 0],\n [img.width, 0],\n [0, img.height],\n [img.width, img.height]\n ];\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const [cx, cy] of corners) {\n const x = a * (cx - spec.idx) + b * (cy - spec.idy) + spec.odx;\n const y = c * (cx - spec.idx) + d * (cy - spec.idy) + spec.ody;\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n }\n const dstW = Math.max(1, Math.round(maxX - minX));\n const dstH = Math.max(1, Math.round(maxY - minY));\n const out = new Uint8Array(dstW * dstH * 4);\n for (let y = 0; y < dstH; y++) {\n for (let x = 0; x < dstW; x++) {\n const ox = x + minX - spec.odx;\n const oy = y + minY - spec.ody;\n const sx = (d * ox - b * oy) / det + spec.idx;\n const sy = (-c * ox + a * oy) / det + spec.idy;\n const dIdx = (y * dstW + x) * 4;\n const ix = Math.round(sx);\n const iy = Math.round(sy);\n if (ix >= 0 && ix < img.width && iy >= 0 && iy < img.height) {\n const sIdx = (iy * img.width + ix) * 4;\n out[dIdx] = img.data[sIdx]!;\n out[dIdx + 1] = img.data[sIdx + 1]!;\n out[dIdx + 2] = img.data[sIdx + 2]!;\n out[dIdx + 3] = img.data[sIdx + 3]!;\n } else {\n out[dIdx] = spec.background.r;\n out[dIdx + 1] = spec.background.g;\n out[dIdx + 2] = spec.background.b;\n out[dIdx + 3] = spec.background.a;\n }\n }\n }\n return {\n ...img,\n width: dstW,\n height: dstH,\n data: out\n };\n}\n\nexport function computeImageStats(img: RgbaImage): ImageStats {\n const { width, height, data } = img;\n const totalPixels = Math.max(1, width * height);\n const numCh = img.hasAlpha ? 4 : img.channels === 1 ? 1 : 3;\n const channels: ChannelStats[] = [];\n\n for (let c = 0; c < numCh; c++) {\n let min = 255;\n let max = 0;\n let sum = 0;\n let squaresSum = 0;\n let minX = 0;\n let minY = 0;\n let maxX = 0;\n let maxY = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const v = data[(y * width + x) * 4 + c]!;\n sum += v;\n squaresSum += v * v;\n if (v < min) {\n min = v;\n minX = x;\n minY = y;\n }\n if (v > max) {\n max = v;\n maxX = x;\n maxY = y;\n }\n }\n }\n const mean = sum / totalPixels;\n const variance = Math.max(0, squaresSum / totalPixels - mean * mean);\n channels.push({\n min,\n max,\n sum,\n squaresSum,\n mean,\n stdev: Math.sqrt(variance),\n minX,\n minY,\n maxX,\n maxY\n });\n }\n\n let isOpaque = true;\n const hist = new Uint32Array(256);\n const colorBins = new Uint32Array(4096);\n const binSumR = new Float64Array(4096);\n const binSumG = new Float64Array(4096);\n const binSumB = new Float64Array(4096);\n\n for (let i = 0; i < totalPixels; i++) {\n const idx = i * 4;\n const r = data[idx]!;\n const g = data[idx + 1]!;\n const b = data[idx + 2]!;\n const a = data[idx + 3]!;\n if (a < 255) isOpaque = false;\n const luma = Math.round(0.299 * r + 0.587 * g + 0.114 * b);\n hist[luma]!++;\n const bin = ((r >>> 4) << 8) | ((g >>> 4) << 4) | (b >>> 4);\n colorBins[bin]!++;\n binSumR[bin]! += r;\n binSumG[bin]! += g;\n binSumB[bin]! += b;\n }\n\n let entropy = 0;\n for (let i = 0; i < 256; i++) {\n const count = hist[i]!;\n if (count > 0) {\n const p = count / totalPixels;\n entropy -= p * Math.log2(p);\n }\n }\n\n let maxBin = 0;\n let maxBinCount = 0;\n for (let i = 0; i < 4096; i++) {\n if (colorBins[i]! > maxBinCount) {\n maxBinCount = colorBins[i]!;\n maxBin = i;\n }\n }\n const dominant =\n maxBinCount > 0\n ? {\n r: Math.round(binSumR[maxBin]! / maxBinCount),\n g: Math.round(binSumG[maxBin]! / maxBinCount),\n b: Math.round(binSumB[maxBin]! / maxBinCount)\n }\n : { r: 0, g: 0, b: 0 };\n\n // Laplacian variance sharpness estimate\n let lapSum = 0;\n let lapSqSum = 0;\n let lapCount = 0;\n for (let y = 1; y < height - 1; y++) {\n for (let x = 1; x < width - 1; x++) {\n const c = data[(y * width + x) * 4]!;\n const n = data[((y - 1) * width + x) * 4]!;\n const s = data[((y + 1) * width + x) * 4]!;\n const w = data[(y * width + (x - 1)) * 4]!;\n const e = data[(y * width + (x + 1)) * 4]!;\n const lap = n + s + w + e - 4 * c;\n lapSum += lap;\n lapSqSum += lap * lap;\n lapCount++;\n }\n }\n const lapMean = lapCount > 0 ? lapSum / lapCount : 0;\n const sharpness = lapCount > 0 ? Math.sqrt(Math.max(0, lapSqSum / lapCount - lapMean * lapMean)) : 0;\n\n return {\n channels,\n isOpaque,\n entropy,\n sharpness,\n dominant\n };\n}\n", "import {\n parseColor,\n type ColorInput,\n type ColorSpace,\n type CompositeLayer,\n type ImageAstNode,\n type ImageFormat,\n type ImageMetadata,\n type ImageStats,\n type OutputEncodeOptions,\n type OutputInfo,\n type ResizeOptions,\n type RgbaImage,\n type SharpInputOptions\n} from \"./ast.js\";\nimport { decodeImage, encodeImage, readImageMetadata } from \"./codecs/index.js\";\nimport { resizeImage } from \"./ops/resize.js\";\nimport {\n affineImage,\n applyExifOrientation,\n bandboolImage,\n blurImage,\n claheImage,\n compositeImage,\n computeImageStats,\n convolveImage,\n ensureAlphaImage,\n extendImage,\n extractChannelImage,\n extractImage,\n flattenImage,\n flipImage,\n flopImage,\n gammaImage,\n grayscaleImage,\n joinChannelImage,\n linearImage,\n medianImage,\n modulateImage,\n negateImage,\n normalizeImage,\n recombImage,\n removeAlphaImage,\n rotateImage,\n sharpenImage,\n thresholdImage,\n tintImage,\n toColorspaceImage,\n trimImage,\n unflattenImage\n} from \"./ops/transform.js\";\n\nfunction toBytes(input: Uint8Array | ArrayBuffer | string | undefined): Uint8Array | undefined {\n if (!input) return undefined;\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (typeof input === \"string\") return new TextEncoder().encode(input);\n return undefined;\n}\n\nexport class SharpInstance {\n private readonly inputBytes: Uint8Array | undefined;\n private readonly inputOptions: SharpInputOptions | undefined;\n private readonly nodes: ImageAstNode[] = [];\n private outputOptions: OutputEncodeOptions = {};\n\n constructor(\n input?: Uint8Array | ArrayBuffer | string | SharpInputOptions,\n options?: SharpInputOptions\n ) {\n if (\n input &&\n typeof input === \"object\" &&\n !(input instanceof Uint8Array) &&\n !(input instanceof ArrayBuffer)\n ) {\n this.inputBytes = undefined;\n this.inputOptions = input;\n } else {\n this.inputBytes = toBytes(input as Uint8Array | ArrayBuffer | string | undefined);\n this.inputOptions = options;\n }\n }\n\n clone(): SharpInstance {\n const copy = new SharpInstance(this.inputBytes, this.inputOptions);\n copy.nodes.push(...this.nodes);\n copy.outputOptions = { ...this.outputOptions };\n return copy;\n }\n\n getAst(): readonly ImageAstNode[] {\n return this.nodes;\n }\n\n private evaluateImage(): RgbaImage {\n let img = decodeImage(this.inputBytes, this.inputOptions);\n for (const node of this.nodes) {\n switch (node.kind) {\n case \"autoOrient\":\n img = applyExifOrientation(img);\n break;\n case \"rotate\":\n img = rotateImage(img, node.angle, node.background);\n break;\n case \"flip\":\n img = flipImage(img);\n break;\n case \"flop\":\n img = flopImage(img);\n break;\n case \"extract\":\n img = extractImage(img, node);\n break;\n case \"trim\":\n img = trimImage(img, {\n threshold: node.threshold,\n ...(node.background !== undefined ? { background: node.background } : {})\n });\n break;\n case \"resize\":\n img = resizeImage(img, node);\n break;\n case \"extend\":\n img = extendImage(img, node);\n break;\n case \"composite\":\n img = compositeImage(img, node.layers);\n break;\n case \"grayscale\":\n img = grayscaleImage(img);\n break;\n case \"flatten\":\n img = flattenImage(img, node.background);\n break;\n case \"unflatten\":\n img = unflattenImage(img);\n break;\n case \"negate\":\n img = negateImage(img, { alpha: node.alpha });\n break;\n case \"modulate\":\n img = modulateImage(img, node);\n break;\n case \"tint\":\n img = tintImage(img, node.color);\n break;\n case \"gamma\":\n img = gammaImage(img, node.gamma, node.gammaOut);\n break;\n case \"linear\":\n img = linearImage(img, node.a, node.b);\n break;\n case \"normalize\":\n img = normalizeImage(img, { lower: node.lower, upper: node.upper });\n break;\n case \"threshold\":\n img = thresholdImage(img, node.value, node.grayscale);\n break;\n case \"blur\":\n img = blurImage(img, node.sigma);\n break;\n case \"sharpen\":\n img = sharpenImage(img, node.sigma, node.m1);\n break;\n case \"median\":\n img = medianImage(img, node.size);\n break;\n case \"convolve\":\n img = convolveImage(img, node);\n break;\n case \"ensureAlpha\":\n img = ensureAlphaImage(img, node.alpha);\n break;\n case \"removeAlpha\":\n img = removeAlphaImage(img);\n break;\n case \"extractChannel\":\n img = extractChannelImage(img, node.channel);\n break;\n case \"recomb\":\n img = recombImage(img, node.matrix);\n break;\n case \"toColorspace\":\n img = toColorspaceImage(img, node.space);\n break;\n case \"bandbool\":\n img = bandboolImage(img, node.op);\n break;\n case \"joinChannel\": {\n const extras = node.inputs.map(item => decodeImage(item.data, item.options));\n img = joinChannelImage(img, extras);\n break;\n }\n case \"clahe\":\n img = claheImage(img, node);\n break;\n case \"affine\":\n img = affineImage(img, node);\n break;\n case \"withMetadata\":\n img = {\n ...img,\n ...(node.density !== undefined ? { density: node.density } : {}),\n ...(node.orientation !== undefined ? { orientation: node.orientation } : {})\n };\n break;\n }\n }\n return img;\n }\n\n metadataSync(): ImageMetadata {\n const rawMeta = readImageMetadata(this.inputBytes, this.inputOptions);\n if (this.nodes.length === 0) {\n return rawMeta;\n }\n const evaluated = this.evaluateImage();\n return {\n format: this.outputOptions.format ?? evaluated.format,\n width: evaluated.width,\n height: evaluated.height,\n space: evaluated.space,\n channels: evaluated.channels,\n depth: evaluated.depth,\n density: this.outputOptions.density ?? evaluated.density,\n hasAlpha: evaluated.hasAlpha,\n ...(evaluated.orientation !== undefined ? { orientation: evaluated.orientation } : {}),\n ...(rawMeta.pages !== undefined ? { pages: rawMeta.pages } : {}),\n ...(rawMeta.pagePrimary !== undefined ? { pagePrimary: rawMeta.pagePrimary } : {}),\n ...(rawMeta.isProgressive !== undefined ? { isProgressive: rawMeta.isProgressive } : {}),\n ...(rawMeta.size !== undefined ? { size: rawMeta.size } : {})\n };\n }\n\n async metadata(): Promise<ImageMetadata> {\n return this.metadataSync();\n }\n\n statsSync(): ImageStats {\n const img = this.evaluateImage();\n return computeImageStats(img);\n }\n\n async stats(): Promise<ImageStats> {\n return this.statsSync();\n }\n\n rotate(angle?: number, options?: { readonly background?: ColorInput }): this {\n if (angle === undefined) {\n this.nodes.push({ kind: \"autoOrient\" });\n } else {\n this.nodes.push({\n kind: \"rotate\",\n angle,\n background: parseColor(options?.background, 255)\n });\n }\n return this;\n }\n\n flip(flip = true): this {\n if (flip) this.nodes.push({ kind: \"flip\" });\n return this;\n }\n\n flop(flop = true): this {\n if (flop) this.nodes.push({ kind: \"flop\" });\n return this;\n }\n\n extract(region: {\n readonly left: number;\n readonly top: number;\n readonly width: number;\n readonly height: number;\n }): this {\n this.nodes.push({\n kind: \"extract\",\n left: region.left,\n top: region.top,\n width: region.width,\n height: region.height\n });\n return this;\n }\n\n trim(options?: number | { readonly threshold?: number; readonly background?: ColorInput }): this {\n const threshold = typeof options === \"number\" ? options : (options?.threshold ?? 10);\n const background =\n typeof options === \"object\" && options?.background\n ? parseColor(options.background)\n : undefined;\n this.nodes.push({ kind: \"trim\", threshold, ...(background ? { background } : {}) });\n return this;\n }\n\n resize(\n widthOrOptions?: number | null | ResizeOptions,\n height?: number | null,\n options?: ResizeOptions\n ): this {\n let w: number | null = null;\n let h: number | null = null;\n let opts: ResizeOptions = {};\n if (typeof widthOrOptions === \"object\" && widthOrOptions !== null) {\n opts = widthOrOptions;\n w = opts.width ?? null;\n h = opts.height ?? null;\n } else {\n w = widthOrOptions ?? null;\n h = height ?? null;\n opts = options ?? {};\n }\n this.nodes.push({\n kind: \"resize\",\n width: w,\n height: h,\n fit: opts.fit ?? \"cover\",\n position: opts.position ?? \"centre\",\n kernel: opts.kernel ?? \"lanczos3\",\n background: parseColor(opts.background, 255),\n withoutEnlargement: opts.withoutEnlargement ?? false,\n withoutReduction: opts.withoutReduction ?? false\n });\n return this;\n }\n\n extend(\n edges:\n | number\n | {\n readonly top?: number;\n readonly bottom?: number;\n readonly left?: number;\n readonly right?: number;\n readonly background?: ColorInput;\n readonly extendWith?: \"background\" | \"copy\" | \"repeat\" | \"mirror\";\n }\n ): this {\n if (typeof edges === \"number\") {\n this.nodes.push({\n kind: \"extend\",\n top: edges,\n bottom: edges,\n left: edges,\n right: edges,\n background: { r: 0, g: 0, b: 0, a: 255 },\n extendWith: \"background\"\n });\n return this;\n }\n this.nodes.push({\n kind: \"extend\",\n top: edges.top ?? 0,\n bottom: edges.bottom ?? 0,\n left: edges.left ?? 0,\n right: edges.right ?? 0,\n background: parseColor(edges.background, 255),\n extendWith: edges.extendWith ?? \"background\"\n });\n return this;\n }\n\n composite(images: readonly CompositeLayer[]): this {\n this.nodes.push({ kind: \"composite\", layers: [...images] });\n return this;\n }\n\n grayscale(grayscale = true): this {\n if (grayscale) this.nodes.push({ kind: \"grayscale\" });\n return this;\n }\n\n greyscale(greyscale = true): this {\n return this.grayscale(greyscale);\n }\n\n flatten(options?: { readonly background?: ColorInput }): this {\n this.nodes.push({\n kind: \"flatten\",\n background: parseColor(options?.background ?? \"#000000\", 255)\n });\n return this;\n }\n\n unflatten(): this {\n this.nodes.push({ kind: \"unflatten\" });\n return this;\n }\n\n negate(options?: boolean | { readonly alpha?: boolean }): this {\n if (options === false) return this;\n const alpha = typeof options === \"object\" ? (options.alpha ?? true) : true;\n this.nodes.push({ kind: \"negate\", alpha });\n return this;\n }\n\n modulate(options: {\n readonly brightness?: number;\n readonly saturation?: number;\n readonly hue?: number;\n readonly lightness?: number;\n }): this {\n this.nodes.push({\n kind: \"modulate\",\n brightness: options.brightness ?? 1,\n saturation: options.saturation ?? 1,\n hue: options.hue ?? 0,\n lightness: options.lightness ?? 0\n });\n return this;\n }\n\n tint(rgb: ColorInput): this {\n this.nodes.push({ kind: \"tint\", color: parseColor(rgb, 255) });\n return this;\n }\n\n gamma(gamma = 2.2, gammaOut = gamma): this {\n this.nodes.push({ kind: \"gamma\", gamma, gammaOut });\n return this;\n }\n\n linear(a: number | readonly number[] = 1, b: number | readonly number[] = 0): this {\n const aArr = typeof a === \"number\" ? [a] : [...a];\n const bArr = typeof b === \"number\" ? [b] : [...b];\n this.nodes.push({ kind: \"linear\", a: aArr, b: bArr });\n return this;\n }\n\n normalize(options?: { readonly lower?: number; readonly upper?: number }): this {\n this.nodes.push({\n kind: \"normalize\",\n lower: options?.lower ?? 1,\n upper: options?.upper ?? 99\n });\n return this;\n }\n\n normalise(options?: { readonly lower?: number; readonly upper?: number }): this {\n return this.normalize(options);\n }\n\n threshold(\n threshold = 128,\n options?: { readonly grayscale?: boolean; readonly greyscale?: boolean }\n ): this {\n const gs = options?.grayscale ?? options?.greyscale ?? true;\n this.nodes.push({ kind: \"threshold\", value: threshold, grayscale: gs });\n return this;\n }\n\n blur(sigma: number | boolean = 1.5): this {\n if (sigma === false) return this;\n const s = sigma === true ? 1.5 : sigma;\n this.nodes.push({ kind: \"blur\", sigma: s });\n return this;\n }\n\n sharpen(\n options?:\n | number\n | {\n readonly sigma?: number;\n readonly m1?: number;\n readonly m2?: number;\n }\n ): this {\n const sigma = typeof options === \"number\" ? options : (options?.sigma ?? 1.0);\n const m1 = typeof options === \"object\" ? (options?.m1 ?? 1.0) : 1.0;\n const m2 = typeof options === \"object\" ? (options?.m2 ?? 2.0) : 2.0;\n this.nodes.push({ kind: \"sharpen\", sigma, m1, m2 });\n return this;\n }\n\n median(size = 3): this {\n this.nodes.push({ kind: \"median\", size });\n return this;\n }\n\n convolve(kernelSpec: {\n readonly width: number;\n readonly height: number;\n readonly kernel: readonly number[];\n readonly scale?: number;\n readonly offset?: number;\n }): this {\n const defaultScale = kernelSpec.kernel.reduce((s, v) => s + v, 0) || 1;\n this.nodes.push({\n kind: \"convolve\",\n width: kernelSpec.width,\n height: kernelSpec.height,\n kernel: [...kernelSpec.kernel],\n scale: kernelSpec.scale ?? defaultScale,\n offset: kernelSpec.offset ?? 0\n });\n return this;\n }\n\n ensureAlpha(alpha = 1): this {\n this.nodes.push({ kind: \"ensureAlpha\", alpha });\n return this;\n }\n\n removeAlpha(): this {\n this.nodes.push({ kind: \"removeAlpha\" });\n return this;\n }\n\n extractChannel(channel: 0 | 1 | 2 | 3 | \"red\" | \"green\" | \"blue\" | \"alpha\"): this {\n const ch: 0 | 1 | 2 | 3 =\n channel === \"red\"\n ? 0\n : channel === \"green\"\n ? 1\n : channel === \"blue\"\n ? 2\n : channel === \"alpha\"\n ? 3\n : channel;\n this.nodes.push({ kind: \"extractChannel\", channel: ch });\n return this;\n }\n\n recomb(matrix: readonly (readonly number[])[]): this {\n this.nodes.push({\n kind: \"recomb\",\n matrix: matrix.map(row => [...row])\n });\n return this;\n }\n\n toColorspace(colorspace: string): this {\n const norm = colorspace.toLowerCase();\n const space: ColorSpace =\n norm === \"b-w\" || norm === \"grey16\" || norm === \"gray\"\n ? \"b-w\"\n : norm === \"cmyk\"\n ? \"cmyk\"\n : \"srgb\";\n this.nodes.push({ kind: \"toColorspace\", space });\n return this;\n }\n\n toColourspace(colourspace: string): this {\n return this.toColorspace(colourspace);\n }\n\n pipelineColorspace(colorspace: string): this {\n return this.toColorspace(colorspace);\n }\n\n pipelineColourspace(colourspace: string): this {\n return this.toColorspace(colourspace);\n }\n\n bandbool(boolOp: \"and\" | \"or\" | \"eor\"): this {\n this.nodes.push({ kind: \"bandbool\", op: boolOp });\n return this;\n }\n\n joinChannel(\n images: Uint8Array | ArrayBuffer | readonly (Uint8Array | ArrayBuffer)[],\n options?: SharpInputOptions\n ): this {\n const list = Array.isArray(images) ? images : [images];\n this.nodes.push({\n kind: \"joinChannel\",\n inputs: list.map(buf => ({\n data: buf instanceof Uint8Array ? buf : new Uint8Array(buf),\n ...(options !== undefined ? { options } : {})\n }))\n });\n return this;\n }\n\n clahe(options: {\n readonly width: number;\n readonly height: number;\n readonly maxSlope?: number;\n }): this {\n this.nodes.push({\n kind: \"clahe\",\n width: options.width,\n height: options.height,\n maxSlope: options.maxSlope ?? 3\n });\n return this;\n }\n\n affine(\n matrix: readonly [number, number, number, number] | readonly (readonly number[])[],\n options?: {\n readonly background?: ColorInput;\n readonly idx?: number;\n readonly idy?: number;\n readonly odx?: number;\n readonly ody?: number;\n }\n ): this {\n const flat: [number, number, number, number] = Array.isArray(matrix[0])\n ? [\n (matrix as readonly (readonly number[])[])[0]?.[0] ?? 1,\n (matrix as readonly (readonly number[])[])[0]?.[1] ?? 0,\n (matrix as readonly (readonly number[])[])[1]?.[0] ?? 0,\n (matrix as readonly (readonly number[])[])[1]?.[1] ?? 1\n ]\n : [\n (matrix as readonly number[])[0] ?? 1,\n (matrix as readonly number[])[1] ?? 0,\n (matrix as readonly number[])[2] ?? 0,\n (matrix as readonly number[])[3] ?? 1\n ];\n this.nodes.push({\n kind: \"affine\",\n matrix: flat,\n background: parseColor(options?.background ?? \"#000000\", 255),\n idx: options?.idx ?? 0,\n idy: options?.idy ?? 0,\n odx: options?.odx ?? 0,\n ody: options?.ody ?? 0\n });\n return this;\n }\n\n withMetadata(options?: { readonly density?: number; readonly orientation?: number }): this {\n this.nodes.push({\n kind: \"withMetadata\",\n ...(options?.density !== undefined ? { density: options.density } : {}),\n ...(options?.orientation !== undefined ? { orientation: options.orientation } : {})\n });\n this.outputOptions = {\n ...this.outputOptions,\n ...(options?.density !== undefined ? { density: options.density } : {}),\n ...(options?.orientation !== undefined ? { orientation: options.orientation } : {})\n };\n return this;\n }\n\n png(options?: { readonly compressionLevel?: number; readonly palette?: boolean }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"png\",\n ...(options?.compressionLevel !== undefined\n ? { compressionLevel: options.compressionLevel }\n : {}),\n ...(options?.palette !== undefined ? { palette: options.palette } : {})\n };\n return this;\n }\n\n jpeg(options?: { readonly quality?: number }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"jpeg\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {})\n };\n return this;\n }\n\n webp(options?: { readonly quality?: number; readonly lossless?: boolean }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"webp\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n heif(options?: {\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly lossless?: boolean;\n }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"heif\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.compression !== undefined ? { compression: options.compression } : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n heic(options?: {\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly lossless?: boolean;\n }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"heic\",\n compression: options?.compression ?? \"hevc\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n avif(options?: { readonly quality?: number; readonly lossless?: boolean }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"avif\",\n compression: \"av1\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n gif(): this {\n this.outputOptions = { ...this.outputOptions, format: \"gif\" };\n return this;\n }\n\n ppm(): this {\n this.outputOptions = { ...this.outputOptions, format: \"ppm\" };\n return this;\n }\n\n pgm(): this {\n this.outputOptions = { ...this.outputOptions, format: \"pgm\" };\n return this;\n }\n\n pbm(): this {\n this.outputOptions = { ...this.outputOptions, format: \"pbm\" };\n return this;\n }\n\n bmp(): this {\n this.outputOptions = { ...this.outputOptions, format: \"bmp\" };\n return this;\n }\n\n tiff(): this {\n this.outputOptions = { ...this.outputOptions, format: \"tiff\" };\n return this;\n }\n\n raw(): this {\n this.outputOptions = { ...this.outputOptions, format: \"raw\" };\n return this;\n }\n\n toFormat(\n format: ImageFormat | \"jpg\",\n options?: {\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly compressionLevel?: number;\n readonly lossless?: boolean;\n }\n ): this {\n const norm: ImageFormat = format === \"jpg\" ? \"jpeg\" : format;\n this.outputOptions = {\n ...this.outputOptions,\n format: norm,\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.compression !== undefined ? { compression: options.compression } : {}),\n ...(options?.compressionLevel !== undefined\n ? { compressionLevel: options.compressionLevel }\n : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n toBufferWithObjectSync(): { readonly data: Uint8Array; readonly info: OutputInfo } {\n const img = this.evaluateImage();\n const encoded = encodeImage(img, this.outputOptions);\n return {\n data: encoded.data,\n info: {\n format: encoded.format,\n width: img.width,\n height: img.height,\n channels: encoded.channels,\n premultiplied: false,\n size: encoded.data.byteLength\n }\n };\n }\n\n toBufferSync(): Uint8Array {\n return this.toBufferWithObjectSync().data;\n }\n\n toBuffer(): Promise<Uint8Array>;\n toBuffer(options: { readonly resolveWithObject: true }): Promise<{ readonly data: Uint8Array; readonly info: OutputInfo }>;\n toBuffer(options: { readonly resolveWithObject: false }): Promise<Uint8Array>;\n async toBuffer(options?: { readonly resolveWithObject?: boolean }): Promise<\n Uint8Array | { readonly data: Uint8Array; readonly info: OutputInfo }\n > {\n const res = this.toBufferWithObjectSync();\n if (options?.resolveWithObject) {\n return res;\n }\n return res.data;\n }\n}\n\nexport function sharp(\n input?: Uint8Array | ArrayBuffer | string | SharpInputOptions,\n options?: SharpInputOptions\n): SharpInstance {\n return new SharpInstance(input, options);\n}\n\nexport default sharp;\n"],
|
|
5
|
-
"mappings": "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EAAG,CAAC,IAAI,CAAC;AAAA,EACjE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAChE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAChE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC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",
|
|
4
|
+
"sourcesContent": ["import { commandRuntimeIdentity, getCommandArguments } from \"safe-bash-contracts/command\";\nimport { writeBytes } from \"safe-bash-contracts/io\";\nimport { createOutputOperation } from \"safe-bash-contracts/output\";\nimport sharp from \"@poe-code/image-ast\";\nfunction formatToTypeIdentifier(fmt) {\n switch (fmt) {\n case \"png\":\n return \"public.png\";\n case \"jpeg\":\n return \"public.jpeg\";\n case \"webp\":\n return \"org.webmproject.webp\";\n case \"heic\":\n return \"public.heic\";\n case \"heif\":\n return \"public.heif\";\n case \"avif\":\n return \"public.avif\";\n case \"gif\":\n return \"com.compuserve.gif\";\n case \"ppm\":\n case \"pgm\":\n case \"pbm\":\n return \"public.pbm\";\n case \"bmp\":\n return \"com.microsoft.bmp\";\n case \"tiff\":\n return \"public.tiff\";\n case \"pdf\":\n return \"com.adobe.pdf\";\n case \"svg\":\n return \"public.svg-image\";\n default:\n return \"public.image\";\n }\n}\nfunction formatSipsPropertyValue(meta, key) {\n switch (key) {\n case \"pixelWidth\":\n return String(meta.width);\n case \"pixelHeight\":\n return String(meta.height);\n case \"typeIdentifier\":\n return formatToTypeIdentifier(meta.format);\n case \"format\":\n return meta.format;\n case \"formatOptions\":\n return \"default\";\n case \"dpiWidth\":\n return `${(meta.density ?? 72).toFixed(3)}`;\n case \"dpiHeight\":\n return `${(meta.density ?? 72).toFixed(3)}`;\n case \"samplesPerPixel\":\n return String(meta.channels);\n case \"bitsPerSample\":\n return meta.depth === \"ushort\" ? \"16\" : meta.depth === \"bit\" ? \"1\" : \"8\";\n case \"hasAlpha\":\n return meta.hasAlpha ? \"yes\" : \"no\";\n case \"space\":\n return meta.space === \"b-w\" ? \"Gray\" : meta.space === \"cmyk\" ? \"CMYK\" : \"RGB\";\n default:\n return undefined;\n }\n}\nconst ALL_SIPS_KEYS = [\n \"pixelWidth\",\n \"pixelHeight\",\n \"typeIdentifier\",\n \"format\",\n \"formatOptions\",\n \"dpiWidth\",\n \"dpiHeight\",\n \"samplesPerPixel\",\n \"bitsPerSample\",\n \"hasAlpha\",\n \"space\"\n];\nfunction resolveQualityOption(opt) {\n if (!opt)\n return 85;\n const lower = opt.toLowerCase().trim();\n if (lower === \"low\")\n return 30;\n if (lower === \"normal\")\n return 60;\n if (lower === \"default\")\n return 85;\n if (lower === \"high\")\n return 85;\n if (lower === \"best\")\n return 95;\n const num = Number(lower);\n if (Number.isFinite(num) && num >= 1 && num <= 100)\n return Math.round(num);\n return 85;\n}\nfunction normalizeTargetFormat(fmt) {\n const lower = fmt.toLowerCase().trim();\n if (lower === \"png\")\n return \"png\";\n if (lower === \"jpeg\" || lower === \"jpg\")\n return \"jpeg\";\n if (lower === \"webp\")\n return \"webp\";\n if (lower === \"heic\" || lower === \"public.heic\")\n return \"heic\";\n if (lower === \"heif\" || lower === \"public.heif\")\n return \"heif\";\n if (lower === \"avif\" || lower === \"public.avif\")\n return \"avif\";\n if (lower === \"gif\")\n return \"gif\";\n if (lower === \"ppm\")\n return \"ppm\";\n if (lower === \"pgm\")\n return \"pgm\";\n if (lower === \"pbm\")\n return \"pbm\";\n if (lower === \"bmp\")\n return \"bmp\";\n if (lower === \"tiff\" || lower === \"tif\")\n return \"tiff\";\n return undefined;\n}\nexport async function runSipsCli(argv, files) {\n if (argv.length === 0) {\n return {\n exitCode: 1,\n stdout: \"\",\n stderr: \"sips: no arguments specified. Try 'sips --help' for help.\\n\"\n };\n }\n let singleLine = false;\n let outTarget;\n let padColor = \"000000\";\n let cropOffsetY;\n let cropOffsetX;\n let targetFormat;\n let formatOptionsStr;\n let targetDpi;\n const getProperties = [];\n const actions = [];\n const inputPaths = [];\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"-h\" || arg === \"--help\") {\n return {\n exitCode: 0,\n stdout: \"sips - scriptable image processing system\\n\" +\n \"Usage: sips [options] file ...\\n\" +\n \" -g, --getProperty <key>\\n\" +\n \" -s, --setProperty <key> <value>\\n\" +\n \" -Z, --resampleHeightWidthMax <size>\\n\" +\n \" -z, --resampleHeightWidth <height> <width>\\n\" +\n \" --resampleWidth <width>\\n\" +\n \" --resampleHeight <height>\\n\" +\n \" -c, --cropToHeightWidth <height> <width>\\n\" +\n \" --cropOffset <offsetY> <offsetX>\\n\" +\n \" -p, --padToHeightWidth <height> <width>\\n\" +\n \" --padColor <hexColor>\\n\" +\n \" -r, --rotate <degrees>\\n\" +\n \" -f, --flip horizontal|vertical\\n\" +\n \" -o, --out <file-or-directory>\\n\",\n stderr: \"\"\n };\n }\n if (arg === \"-H\" || arg === \"--helpProperties\") {\n return {\n exitCode: 0,\n stdout: ALL_SIPS_KEYS.join(\"\\n\") + \"\\nall\\nallxml\\n\",\n stderr: \"\"\n };\n }\n if (arg === \"-v\" || arg === \"--version\") {\n return { exitCode: 0, stdout: \"sips 10.4.4\\n\", stderr: \"\" };\n }\n if (arg === \"-1\") {\n singleLine = true;\n }\n else if (arg === \"-g\" || arg === \"--getProperty\") {\n const key = argv[++i];\n if (!key) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: missing argument for -g\\n\" };\n }\n getProperties.push(key);\n }\n else if (arg === \"-s\" || arg === \"--setProperty\") {\n const key = argv[++i];\n const val = argv[++i];\n if (!key || val === undefined) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: missing argument for -s\\n\" };\n }\n if (key === \"format\") {\n const parsed = normalizeTargetFormat(val);\n if (!parsed) {\n return {\n exitCode: 1,\n stdout: \"\",\n stderr: `Error:Unsupported format: ${val}\\n`\n };\n }\n targetFormat = parsed;\n }\n else if (key === \"formatOptions\") {\n formatOptionsStr = val;\n }\n else if (key === \"dpiWidth\" || key === \"dpiHeight\") {\n const num = Number(val);\n if (Number.isFinite(num) && num > 0)\n targetDpi = Math.round(num);\n }\n }\n else if (arg === \"-Z\" || arg === \"--resampleHeightWidthMax\") {\n const maxDim = Number(argv[++i]);\n if (!Number.isFinite(maxDim) || maxDim <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid size for -Z\\n\" };\n }\n actions.push({ kind: \"resampleMax\", maxDim: Math.round(maxDim) });\n }\n else if (arg === \"-z\" || arg === \"--resampleHeightWidth\") {\n const h = Number(argv[++i]);\n const w = Number(argv[++i]);\n if (!Number.isFinite(h) || !Number.isFinite(w) || h <= 0 || w <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid dimensions for -z\\n\" };\n }\n actions.push({ kind: \"resampleHW\", height: Math.round(h), width: Math.round(w) });\n }\n else if (arg === \"--resampleWidth\") {\n const w = Number(argv[++i]);\n if (!Number.isFinite(w) || w <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid width for --resampleWidth\\n\" };\n }\n actions.push({ kind: \"resampleW\", width: Math.round(w) });\n }\n else if (arg === \"--resampleHeight\") {\n const h = Number(argv[++i]);\n if (!Number.isFinite(h) || h <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid height for --resampleHeight\\n\" };\n }\n actions.push({ kind: \"resampleH\", height: Math.round(h) });\n }\n else if (arg === \"-c\" || arg === \"--cropToHeightWidth\") {\n const h = Number(argv[++i]);\n const w = Number(argv[++i]);\n if (!Number.isFinite(h) || !Number.isFinite(w) || h <= 0 || w <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid dimensions for -c\\n\" };\n }\n actions.push({ kind: \"crop\", height: Math.round(h), width: Math.round(w) });\n }\n else if (arg === \"--cropOffset\") {\n const oy = Number(argv[++i]);\n const ox = Number(argv[++i]);\n if (!Number.isFinite(oy) || !Number.isFinite(ox)) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid offset for --cropOffset\\n\" };\n }\n cropOffsetY = Math.round(oy);\n cropOffsetX = Math.round(ox);\n }\n else if (arg === \"-p\" || arg === \"--padToHeightWidth\") {\n const h = Number(argv[++i]);\n const w = Number(argv[++i]);\n if (!Number.isFinite(h) || !Number.isFinite(w) || h <= 0 || w <= 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid dimensions for -p\\n\" };\n }\n actions.push({ kind: \"pad\", height: Math.round(h), width: Math.round(w) });\n }\n else if (arg === \"--padColor\") {\n padColor = argv[++i] ?? \"000000\";\n }\n else if (arg === \"-r\" || arg === \"--rotate\") {\n const deg = Number(argv[++i]);\n if (!Number.isFinite(deg)) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: invalid degrees for -r\\n\" };\n }\n actions.push({ kind: \"rotate\", degrees: deg });\n }\n else if (arg === \"-f\" || arg === \"--flip\") {\n const dir = (argv[++i] ?? \"\").toLowerCase();\n if (dir !== \"horizontal\" && dir !== \"vertical\") {\n return {\n exitCode: 1,\n stdout: \"\",\n stderr: \"sips: flip direction must be 'horizontal' or 'vertical'\\n\"\n };\n }\n actions.push({ kind: \"flip\", direction: dir });\n }\n else if (arg === \"-o\" || arg === \"--out\") {\n outTarget = argv[++i];\n if (!outTarget) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: missing argument for --out\\n\" };\n }\n }\n else if (!arg.startsWith(\"-\")) {\n inputPaths.push(arg);\n }\n else {\n return { exitCode: 1, stdout: \"\", stderr: `sips: unknown option: ${arg}\\n` };\n }\n }\n if (inputPaths.length === 0) {\n return { exitCode: 1, stdout: \"\", stderr: \"sips: no input files specified\\n\" };\n }\n const hasMutation = actions.length > 0 ||\n targetFormat !== undefined ||\n formatOptionsStr !== undefined ||\n targetDpi !== undefined ||\n outTarget !== undefined;\n const outLines = [];\n const errLines = [];\n let exitCode = 0;\n for (const inPath of inputPaths) {\n const inBytes = files.get(inPath);\n if (!inBytes) {\n errLines.push(`Error: ${inPath}: file does not exist`);\n exitCode = 1;\n continue;\n }\n try {\n let inst = sharp(inBytes);\n let meta = await inst.metadata();\n let curW = meta.width;\n let curH = meta.height;\n if (hasMutation) {\n for (const act of actions) {\n if (act.kind === \"rotate\") {\n inst = inst.rotate(act.degrees, { background: padColor });\n meta = await inst.metadata();\n curW = meta.width;\n curH = meta.height;\n }\n else if (act.kind === \"flip\") {\n if (act.direction === \"horizontal\")\n inst = inst.flop();\n else\n inst = inst.flip();\n }\n else if (act.kind === \"resampleMax\") {\n const scale = act.maxDim / Math.max(curW, curH, 1);\n const nw = Math.max(1, Math.round(curW * scale));\n const nh = Math.max(1, Math.round(curH * scale));\n inst = inst.resize(nw, nh, { fit: \"fill\" });\n curW = nw;\n curH = nh;\n }\n else if (act.kind === \"resampleHW\") {\n inst = inst.resize(act.width, act.height, { fit: \"fill\" });\n curW = act.width;\n curH = act.height;\n }\n else if (act.kind === \"resampleW\") {\n const nh = Math.max(1, Math.round((curH * act.width) / Math.max(1, curW)));\n inst = inst.resize(act.width, nh, { fit: \"fill\" });\n curW = act.width;\n curH = nh;\n }\n else if (act.kind === \"resampleH\") {\n const nw = Math.max(1, Math.round((curW * act.height) / Math.max(1, curH)));\n inst = inst.resize(nw, act.height, { fit: \"fill\" });\n curW = nw;\n curH = act.height;\n }\n else if (act.kind === \"crop\") {\n const cw = Math.min(curW, act.width);\n const ch = Math.min(curH, act.height);\n const left = cropOffsetX !== undefined\n ? Math.max(0, Math.min(curW - cw, cropOffsetX))\n : Math.max(0, Math.floor((curW - cw) / 2));\n const top = cropOffsetY !== undefined\n ? Math.max(0, Math.min(curH - ch, cropOffsetY))\n : Math.max(0, Math.floor((curH - ch) / 2));\n inst = inst.extract({ left, top, width: cw, height: ch });\n curW = cw;\n curH = ch;\n if (act.width > curW || act.height > curH) {\n const padX = Math.max(0, act.width - curW);\n const padY = Math.max(0, act.height - curH);\n const padLeft = Math.floor(padX / 2);\n const padRight = padX - padLeft;\n const padTop = Math.floor(padY / 2);\n const padBottom = padY - padTop;\n inst = inst.extend({\n top: padTop,\n bottom: padBottom,\n left: padLeft,\n right: padRight,\n background: padColor\n });\n curW = act.width;\n curH = act.height;\n }\n }\n else if (act.kind === \"pad\") {\n if (act.width < curW || act.height < curH) {\n const cw = Math.min(curW, act.width);\n const ch = Math.min(curH, act.height);\n const left = Math.max(0, Math.floor((curW - cw) / 2));\n const top = Math.max(0, Math.floor((curH - ch) / 2));\n inst = inst.extract({ left, top, width: cw, height: ch });\n curW = cw;\n curH = ch;\n }\n const padX = Math.max(0, act.width - curW);\n const padY = Math.max(0, act.height - curH);\n const left = Math.floor(padX / 2);\n const right = padX - left;\n const top = Math.floor(padY / 2);\n const bottom = padY - top;\n inst = inst.extend({\n top,\n bottom,\n left,\n right,\n background: padColor\n });\n curW = act.width;\n curH = act.height;\n }\n }\n if (targetDpi !== undefined) {\n inst = inst.withMetadata({ density: targetDpi });\n }\n const outFmt = targetFormat ?? (meta.format === \"pdf\" || meta.format === \"svg\" ? \"png\" : meta.format);\n const quality = resolveQualityOption(formatOptionsStr);\n inst = inst.toFormat(outFmt, { quality });\n const outBytes = await inst.toBuffer();\n let finalOutPath = inPath;\n if (outTarget) {\n if (inputPaths.length > 1 || outTarget.endsWith(\"/\")) {\n const base = inPath.split(\"/\").pop() ?? inPath;\n const dir = outTarget.endsWith(\"/\") ? outTarget.slice(0, -1) : outTarget;\n finalOutPath = `${dir}/${base}`;\n }\n else {\n finalOutPath = outTarget;\n }\n }\n files.set(finalOutPath, outBytes);\n meta = await sharp(outBytes).metadata();\n if (getProperties.length === 0) {\n outLines.push(inPath);\n outLines.push(` ${finalOutPath}`);\n }\n }\n if (getProperties.length > 0) {\n if (getProperties.includes(\"allxml\")) {\n const xmlEntries = ALL_SIPS_KEYS.map(k => {\n const val = formatSipsPropertyValue(meta, k) ?? \"\";\n return ` <key>${k}</key>\\n <string>${val}</string>`;\n }).join(\"\\n\");\n outLines.push(`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\\n<plist version=\"1.0\">\\n<dict>\\n${xmlEntries}\\n</dict>\\n</plist>`);\n }\n else {\n const expandedKeys = [];\n for (const k of getProperties) {\n if (k === \"all\")\n expandedKeys.push(...ALL_SIPS_KEYS);\n else\n expandedKeys.push(k);\n }\n const propLines = [inPath];\n for (const k of expandedKeys) {\n const val = formatSipsPropertyValue(meta, k);\n if (val !== undefined) {\n propLines.push(singleLine ? `${k}: ${val}` : ` ${k}: ${val}`);\n }\n else {\n propLines.push(singleLine ? `${k}: <nil>` : ` ${k}: <nil>`);\n }\n }\n if (singleLine) {\n outLines.push(propLines.join(\"|\") + \"|\");\n }\n else {\n outLines.push(...propLines);\n }\n }\n }\n }\n catch (err) {\n errLines.push(`Error: ${inPath}: ${err.message}`);\n exitCode = 1;\n }\n }\n return {\n exitCode,\n stdout: outLines.length > 0 ? outLines.join(\"\\n\") + \"\\n\" : \"\",\n stderr: errLines.length > 0 ? errLines.join(\"\\n\") + \"\\n\" : \"\"\n };\n}\nfunction formatIdentifyCustom(fmt, filePath, meta, byteSize) {\n const lastSlash = filePath.lastIndexOf(\"/\");\n const dirName = lastSlash > 0 ? filePath.slice(0, lastSlash) : lastSlash === 0 ? \"/\" : \".\";\n const fileName = lastSlash >= 0 ? filePath.slice(lastSlash + 1) : filePath;\n const dotIdx = fileName.lastIndexOf(\".\");\n const basename = dotIdx > 0 ? fileName.slice(0, dotIdx) : fileName;\n const ext = dotIdx > 0 ? fileName.slice(dotIdx + 1) : \"\";\n const bitDepth = meta.depth === \"ushort\" ? \"16\" : meta.depth === \"bit\" ? \"1\" : \"8\";\n const spaceLabel = meta.space === \"b-w\" ? \"Gray\" : meta.space === \"cmyk\" ? \"CMYK\" : \"sRGB\";\n let out = \"\";\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt[i];\n if (c === \"\\\\\" && i + 1 < fmt.length) {\n const next = fmt[++i];\n if (next === \"n\")\n out += \"\\n\";\n else if (next === \"t\")\n out += \"\\t\";\n else if (next === \"r\")\n out += \"\\r\";\n else\n out += next;\n }\n else if (c === \"%\" && i + 1 < fmt.length) {\n if (fmt[i + 1] === \"[\") {\n const closeIdx = fmt.indexOf(\"]\", i + 2);\n if (closeIdx !== -1) {\n const expr = fmt.slice(i + 2, closeIdx).toLowerCase();\n i = closeIdx;\n switch (expr) {\n case \"width\":\n case \"fx:w\":\n out += String(meta.width);\n break;\n case \"height\":\n case \"fx:h\":\n out += String(meta.height);\n break;\n case \"channels\":\n out += String(meta.channels);\n break;\n case \"colorspace\":\n out += spaceLabel;\n break;\n case \"bit-depth\":\n case \"depth\":\n out += bitDepth;\n break;\n case \"orientation\":\n out += String(meta.orientation ?? 1);\n break;\n case \"size\":\n out += `${byteSize}B`;\n break;\n case \"format\":\n out += meta.format.toUpperCase();\n break;\n default:\n out += \"\";\n break;\n }\n continue;\n }\n }\n const spec = fmt[++i];\n switch (spec) {\n case \"%\":\n out += \"%\";\n break;\n case \"w\":\n out += String(meta.width);\n break;\n case \"h\":\n out += String(meta.height);\n break;\n case \"m\":\n out += meta.format.toUpperCase();\n break;\n case \"z\":\n out += bitDepth;\n break;\n case \"k\":\n out += String(meta.channels);\n break;\n case \"r\":\n out += `DirectClass ${spaceLabel}`;\n break;\n case \"b\":\n case \"B\":\n out += `${byteSize}B`;\n break;\n case \"d\":\n out += dirName;\n break;\n case \"f\":\n out += fileName;\n break;\n case \"i\":\n out += filePath;\n break;\n case \"n\":\n out += String(meta.pages ?? 1);\n break;\n case \"p\":\n out += String(meta.pagePrimary ?? 0);\n break;\n case \"t\":\n out += basename;\n break;\n case \"e\":\n out += ext;\n break;\n case \"x\":\n case \"y\":\n out += String(meta.density ?? 72);\n break;\n case \"Q\":\n out += \"85\";\n break;\n default:\n out += `%${spec}`;\n break;\n }\n }\n else {\n out += c;\n }\n }\n return out;\n}\nexport async function runIdentifyCli(argv, files) {\n let customFormat;\n let verbose = false;\n const inputPaths = [];\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"-h\" || arg === \"-help\" || arg === \"--help\") {\n return {\n exitCode: 0,\n stdout: \"Usage: identify [options] input-file ...\\n\" +\n \" -ping\\n\" +\n \" -format <string>\\n\" +\n \" -verbose\\n\",\n stderr: \"\"\n };\n }\n if (arg === \"-version\" || arg === \"--version\") {\n return { exitCode: 0, stdout: \"Version: ImageMagick 7.1.1-38 (safe-bash image-ast)\\n\", stderr: \"\" };\n }\n if (arg === \"-ping\") {\n // metadata-only mode (default unless -verbose)\n }\n else if (arg === \"-verbose\") {\n verbose = true;\n }\n else if (arg === \"-format\") {\n customFormat = argv[++i] ?? \"\";\n }\n else if (!arg.startsWith(\"-\")) {\n inputPaths.push(arg);\n }\n }\n if (inputPaths.length === 0) {\n return {\n exitCode: 1,\n stdout: \"\",\n stderr: \"identify: missing an image filename\\n\"\n };\n }\n const outParts = [];\n const errParts = [];\n let exitCode = 0;\n for (const inPath of inputPaths) {\n const bracketMatch = /^(.*)\\[(\\d+)\\]$/.exec(inPath);\n const baseInPath = bracketMatch ? bracketMatch[1] : inPath;\n const pageIdx = bracketMatch ? parseInt(bracketMatch[2], 10) : undefined;\n const bytes = files.get(inPath) ?? files.get(baseInPath);\n if (!bytes) {\n errParts.push(`identify: unable to open image '${inPath}': No such file or directory\\n`);\n exitCode = 1;\n continue;\n }\n try {\n const inst = sharp(bytes, pageIdx !== undefined ? { page: pageIdx } : undefined);\n const meta = await inst.metadata();\n const bitDepth = meta.depth === \"ushort\" ? \"16\" : meta.depth === \"bit\" ? \"1\" : \"8\";\n const spaceLabel = meta.space === \"b-w\" ? \"Gray\" : meta.space === \"cmyk\" ? \"CMYK\" : \"sRGB\";\n if (customFormat !== undefined) {\n outParts.push(formatIdentifyCustom(customFormat, baseInPath, meta, bytes.byteLength));\n }\n else if (verbose) {\n const stats = await inst.stats();\n outParts.push(`Image: ${inPath}\\n` +\n ` Format: ${meta.format.toUpperCase()}\\n` +\n ` Geometry: ${meta.width}x${meta.height}+0+0\\n` +\n ` Resolution: ${meta.density}x${meta.density}\\n` +\n ` Colorspace: ${spaceLabel}\\n` +\n ` Depth: ${bitDepth}-bit\\n` +\n ` Channels: ${meta.channels}\\n` +\n ` Alpha: ${meta.hasAlpha ? \"True\" : \"False\"}\\n` +\n ` Filesize: ${bytes.byteLength}B\\n` +\n ` Entropy: ${stats.entropy.toFixed(4)}\\n`);\n }\n else {\n outParts.push(`${inPath} ${meta.format.toUpperCase()} ${meta.width}x${meta.height} ${meta.width}x${meta.height}+0+0 ${bitDepth}-bit ${spaceLabel} ${bytes.byteLength}B 0.000u 0:00.000\\n`);\n }\n }\n catch (err) {\n errParts.push(`identify: improper image header '${inPath}': ${err.message}\\n`);\n exitCode = 1;\n }\n }\n return {\n exitCode,\n stdout: outParts.join(\"\"),\n stderr: errParts.join(\"\")\n };\n}\nasync function executeVfsImageTool(context, runner) {\n const invocation = createOutputOperation(context, { write: async () => { } });\n try {\n const carrier = getCommandArguments(context);\n const argv = [...carrier.args];\n const vfsFiles = new Map();\n const resolveVfsPath = (p) => p.startsWith(\"/\") ? p : `${context.cwd === \"/\" ? \"\" : context.cwd}/${p}`;\n const normalizedArgv = [...argv];\n for (let i = 0; i < normalizedArgv.length; i++) {\n const token = normalizedArgv[i];\n if (token === \"-o\" || token === \"--out\") {\n const next = normalizedArgv[i + 1];\n if (next && !next.endsWith(\"/\")) {\n try {\n const st = await context.fs.stat(resolveVfsPath(next), { signal: invocation.signal });\n if (st.type === \"directory\") {\n normalizedArgv[i + 1] = next + \"/\";\n }\n }\n catch {\n // Target does not exist yet\n }\n }\n continue;\n }\n if (token.startsWith(\"-\"))\n continue;\n const bracketMatch = /^(.*)\\[(\\d+)\\]$/.exec(token);\n const fileToken = bracketMatch ? bracketMatch[1] : token;\n try {\n const bytes = await context.fs.readFile(resolveVfsPath(fileToken), {\n signal: invocation.signal\n });\n vfsFiles.set(fileToken, bytes);\n }\n catch {\n // Output path or non-existent file\n }\n }\n const existingSnap = new Map(vfsFiles);\n const res = await runner(normalizedArgv, vfsFiles);\n if (res.stderr) {\n await writeBytes(context.stderr, new TextEncoder().encode(res.stderr), invocation.signal);\n }\n if (res.stdout) {\n const stdout = invocation.child(context.stdout);\n await writeBytes(stdout.output, new TextEncoder().encode(res.stdout), invocation.signal);\n }\n for (const [key, val] of vfsFiles.entries()) {\n if (existingSnap.get(key) !== val) {\n const abs = resolveVfsPath(key);\n const parentDir = abs.slice(0, abs.lastIndexOf(\"/\")) || \"/\";\n try {\n await context.fs.mkdir(parentDir, { recursive: true, signal: invocation.signal });\n }\n catch {\n // Directory already exists\n }\n await context.fs.writeFile(abs, val, { signal: invocation.signal });\n }\n }\n return { exitCode: res.exitCode };\n }\n finally {\n await invocation.close();\n }\n}\nexport function createSipsCommand(_options = {}) {\n return Object.freeze({\n name: \"sips\",\n runtimeIdentity: commandRuntimeIdentity,\n description: \"Scriptable image processing system powered by @poe-code/image-ast\",\n execute(context) {\n return executeVfsImageTool(context, runSipsCli);\n }\n });\n}\nexport const sipsCommand = createSipsCommand();\nexport function createIdentifyCommand(_options = {}) {\n return Object.freeze({\n name: \"identify\",\n runtimeIdentity: commandRuntimeIdentity,\n description: \"Inspect image format, dimensions, and metadata via @poe-code/image-ast\",\n execute(context) {\n return executeVfsImageTool(context, runIdentifyCli);\n }\n });\n}\nexport const identifyCommand = createIdentifyCommand();\nexport function sipsPlugin(options = {}) {\n const sips = createSipsCommand(options);\n const identify = createIdentifyCommand(options);\n const replace = options.replace ?? false;\n return {\n name: \"sips\",\n setup(host) {\n host.commands.register(sips, { replace });\n host.commands.register(identify, { replace });\n }\n };\n}\nexport const sipsCommands = sipsPlugin;\n", "export type ImageFormat =\n | \"png\"\n | \"jpeg\"\n | \"webp\"\n | \"heic\"\n | \"heif\"\n | \"avif\"\n | \"gif\"\n | \"ppm\"\n | \"pgm\"\n | \"pbm\"\n | \"bmp\"\n | \"tiff\"\n | \"svg\"\n | \"pdf\"\n | \"raw\";\n\nexport type ColorSpace = \"srgb\" | \"b-w\" | \"cmyk\";\n\nexport interface RgbaColor {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly a: number;\n}\n\nexport type ColorInput =\n | string\n | {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly alpha?: number;\n };\n\nexport interface RgbaImage {\n readonly width: number;\n readonly height: number;\n readonly data: Uint8Array;\n readonly format: ImageFormat;\n readonly space: ColorSpace;\n readonly channels: 1 | 2 | 3 | 4;\n readonly depth: \"uchar\" | \"ushort\" | \"bit\";\n readonly density: number;\n readonly hasAlpha: boolean;\n readonly orientation?: number;\n readonly pages?: number;\n readonly isProgressive?: boolean;\n}\n\nexport interface ImageMetadata {\n readonly format: ImageFormat;\n readonly width: number;\n readonly height: number;\n readonly space: ColorSpace;\n readonly channels: 1 | 2 | 3 | 4;\n readonly depth: \"uchar\" | \"ushort\" | \"bit\";\n readonly density: number;\n readonly hasAlpha: boolean;\n readonly compression?: \"hevc\" | \"av1\";\n readonly orientation?: number;\n readonly pages?: number;\n readonly pagePrimary?: number;\n readonly isProgressive?: boolean;\n readonly size?: number;\n}\n\nexport interface ChannelStats {\n readonly min: number;\n readonly max: number;\n readonly sum: number;\n readonly squaresSum: number;\n readonly mean: number;\n readonly stdev: number;\n readonly minX: number;\n readonly minY: number;\n readonly maxX: number;\n readonly maxY: number;\n}\n\nexport interface ImageStats {\n readonly channels: ChannelStats[];\n readonly isOpaque: boolean;\n readonly entropy: number;\n readonly sharpness: number;\n readonly dominant: { readonly r: number; readonly g: number; readonly b: number };\n}\n\nexport interface OutputInfo {\n readonly format: string;\n readonly width: number;\n readonly height: number;\n readonly channels: number;\n readonly premultiplied: boolean;\n readonly size: number;\n}\n\nexport type ResizeFit = \"cover\" | \"contain\" | \"fill\" | \"inside\" | \"outside\";\nexport type ResizeKernel = \"nearest\" | \"bilinear\" | \"cubic\" | \"mitchell\" | \"lanczos2\" | \"lanczos3\";\nexport type GravityPosition =\n | \"center\"\n | \"centre\"\n | \"north\"\n | \"northeast\"\n | \"east\"\n | \"southeast\"\n | \"south\"\n | \"southwest\"\n | \"west\"\n | \"northwest\"\n | \"top\"\n | \"right top\"\n | \"right\"\n | \"right bottom\"\n | \"bottom\"\n | \"left bottom\"\n | \"left\"\n | \"left top\";\n\nexport interface ResizeOptions {\n readonly width?: number | null;\n readonly height?: number | null;\n readonly fit?: ResizeFit;\n readonly position?: GravityPosition;\n readonly kernel?: ResizeKernel;\n readonly background?: ColorInput;\n readonly withoutEnlargement?: boolean;\n readonly withoutReduction?: boolean;\n readonly fastShrinkOnLoad?: boolean;\n}\n\nexport type BlendMode =\n | \"clear\"\n | \"source\"\n | \"over\"\n | \"in\"\n | \"out\"\n | \"atop\"\n | \"dest\"\n | \"dest-over\"\n | \"dest-in\"\n | \"dest-out\"\n | \"dest-atop\"\n | \"xor\"\n | \"add\"\n | \"saturate\"\n | \"multiply\"\n | \"screen\"\n | \"overlay\"\n | \"darken\"\n | \"lighten\"\n | \"color-dodge\"\n | \"colour-dodge\"\n | \"color-burn\"\n | \"colour-burn\"\n | \"hard-light\"\n | \"soft-light\"\n | \"difference\"\n | \"exclusion\";\n\nexport interface CompositeLayer {\n readonly input:\n | Uint8Array\n | string\n | {\n readonly create: {\n readonly width: number;\n readonly height: number;\n readonly channels: 3 | 4;\n readonly background: ColorInput;\n };\n };\n readonly top?: number;\n readonly left?: number;\n readonly gravity?: GravityPosition;\n readonly blend?: BlendMode;\n readonly tile?: boolean;\n readonly premultiplied?: boolean;\n readonly density?: number;\n readonly raw?: {\n readonly width: number;\n readonly height: number;\n readonly channels: 1 | 2 | 3 | 4;\n };\n}\n\nexport interface SharpInputOptions {\n readonly density?: number;\n readonly page?: number;\n readonly pages?: number;\n readonly limitInputPixels?: number | false;\n readonly failOn?: \"none\" | \"truncated\" | \"error\" | \"warning\";\n readonly raw?: {\n readonly width: number;\n readonly height: number;\n readonly channels: 1 | 2 | 3 | 4;\n readonly premultiplied?: boolean;\n };\n readonly create?: {\n readonly width: number;\n readonly height: number;\n readonly channels: 3 | 4;\n readonly background: ColorInput;\n };\n}\n\nexport type ImageAstNode =\n | { readonly kind: \"autoOrient\" }\n | { readonly kind: \"rotate\"; readonly angle: number; readonly background: RgbaColor }\n | { readonly kind: \"flip\" }\n | { readonly kind: \"flop\" }\n | {\n readonly kind: \"extract\";\n readonly left: number;\n readonly top: number;\n readonly width: number;\n readonly height: number;\n }\n | {\n readonly kind: \"trim\";\n readonly threshold: number;\n readonly background?: RgbaColor;\n }\n | {\n readonly kind: \"resize\";\n readonly width: number | null;\n readonly height: number | null;\n readonly fit: ResizeFit;\n readonly position: GravityPosition;\n readonly kernel: ResizeKernel;\n readonly background: RgbaColor;\n readonly withoutEnlargement: boolean;\n readonly withoutReduction: boolean;\n }\n | {\n readonly kind: \"extend\";\n readonly top: number;\n readonly bottom: number;\n readonly left: number;\n readonly right: number;\n readonly background: RgbaColor;\n readonly extendWith: \"background\" | \"copy\" | \"repeat\" | \"mirror\";\n }\n | {\n readonly kind: \"composite\";\n readonly layers: readonly CompositeLayer[];\n }\n | { readonly kind: \"grayscale\" }\n | { readonly kind: \"flatten\"; readonly background: RgbaColor }\n | { readonly kind: \"unflatten\" }\n | { readonly kind: \"negate\"; readonly alpha: boolean }\n | {\n readonly kind: \"modulate\";\n readonly brightness: number;\n readonly saturation: number;\n readonly hue: number;\n readonly lightness: number;\n }\n | { readonly kind: \"tint\"; readonly color: RgbaColor }\n | { readonly kind: \"gamma\"; readonly gamma: number; readonly gammaOut: number }\n | { readonly kind: \"linear\"; readonly a: readonly number[]; readonly b: readonly number[] }\n | { readonly kind: \"normalize\"; readonly lower: number; readonly upper: number }\n | { readonly kind: \"threshold\"; readonly value: number; readonly grayscale: boolean }\n | { readonly kind: \"blur\"; readonly sigma: number }\n | { readonly kind: \"sharpen\"; readonly sigma: number; readonly m1: number; readonly m2: number }\n | { readonly kind: \"median\"; readonly size: number }\n | {\n readonly kind: \"convolve\";\n readonly width: number;\n readonly height: number;\n readonly kernel: readonly number[];\n readonly scale: number;\n readonly offset: number;\n }\n | { readonly kind: \"ensureAlpha\"; readonly alpha: number }\n | { readonly kind: \"removeAlpha\" }\n | { readonly kind: \"extractChannel\"; readonly channel: 0 | 1 | 2 | 3 }\n | { readonly kind: \"recomb\"; readonly matrix: readonly (readonly number[])[] }\n | { readonly kind: \"toColorspace\"; readonly space: ColorSpace }\n | { readonly kind: \"bandbool\"; readonly op: \"and\" | \"or\" | \"eor\" }\n | {\n readonly kind: \"joinChannel\";\n readonly inputs: ReadonlyArray<{\n readonly data: Uint8Array;\n readonly options?: SharpInputOptions;\n }>;\n }\n | {\n readonly kind: \"clahe\";\n readonly width: number;\n readonly height: number;\n readonly maxSlope: number;\n }\n | {\n readonly kind: \"affine\";\n readonly matrix: readonly [number, number, number, number];\n readonly background: RgbaColor;\n readonly idx: number;\n readonly idy: number;\n readonly odx: number;\n readonly ody: number;\n }\n | {\n readonly kind: \"withMetadata\";\n readonly density?: number;\n readonly orientation?: number;\n };\n\nexport interface OutputEncodeOptions {\n readonly format?: ImageFormat;\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly compressionLevel?: number;\n readonly palette?: boolean;\n readonly lossless?: boolean;\n readonly density?: number;\n readonly orientation?: number;\n}\n\nconst NAMED_COLORS: Record<string, [number, number, number, number]> = {\n black: [0, 0, 0, 255],\n white: [255, 255, 255, 255],\n transparent: [0, 0, 0, 0],\n none: [0, 0, 0, 0],\n red: [255, 0, 0, 255],\n green: [0, 128, 0, 255],\n lime: [0, 255, 0, 255],\n blue: [0, 0, 255, 255],\n yellow: [255, 255, 0, 255],\n cyan: [0, 255, 255, 255],\n aqua: [0, 255, 255, 255],\n magenta: [255, 0, 255, 255],\n fuchsia: [255, 0, 255, 255],\n gray: [128, 128, 128, 255],\n grey: [128, 128, 128, 255],\n silver: [192, 192, 192, 255],\n maroon: [128, 0, 0, 255],\n olive: [128, 128, 0, 255],\n purple: [128, 0, 128, 255],\n teal: [0, 128, 128, 255],\n navy: [0, 0, 128, 255],\n orange: [255, 165, 0, 255]\n};\n\nfunction clampByte(n: number): number {\n if (!Number.isFinite(n)) return 0;\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\nexport function parseColor(input?: ColorInput, defaultAlpha = 255): RgbaColor {\n if (!input) {\n return { r: 0, g: 0, b: 0, a: defaultAlpha };\n }\n if (typeof input === \"object\") {\n const alpha =\n input.alpha === undefined\n ? defaultAlpha\n : input.alpha <= 1 && input.alpha >= 0 && !Number.isInteger(input.alpha)\n ? Math.round(input.alpha * 255)\n : input.alpha <= 1 && (input.r > 1 || input.g > 1 || input.b > 1)\n ? Math.round(input.alpha * 255)\n : input.alpha <= 1\n ? Math.round(input.alpha * 255)\n : input.alpha;\n return {\n r: clampByte(input.r),\n g: clampByte(input.g),\n b: clampByte(input.b),\n a: clampByte(alpha)\n };\n }\n const trimmed = input.trim().toLowerCase();\n if (NAMED_COLORS[trimmed]) {\n const [r, g, b, a] = NAMED_COLORS[trimmed]!;\n return { r, g, b, a };\n }\n const hexRaw = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n if (/^[0-9a-f]{3}$/.test(hexRaw)) {\n const r = parseInt(hexRaw[0]! + hexRaw[0]!, 16);\n const g = parseInt(hexRaw[1]! + hexRaw[1]!, 16);\n const b = parseInt(hexRaw[2]! + hexRaw[2]!, 16);\n return { r, g, b, a: defaultAlpha };\n }\n if (/^[0-9a-f]{4}$/.test(hexRaw)) {\n const r = parseInt(hexRaw[0]! + hexRaw[0]!, 16);\n const g = parseInt(hexRaw[1]! + hexRaw[1]!, 16);\n const b = parseInt(hexRaw[2]! + hexRaw[2]!, 16);\n const a = parseInt(hexRaw[3]! + hexRaw[3]!, 16);\n return { r, g, b, a };\n }\n if (/^[0-9a-f]{6}$/.test(hexRaw)) {\n const r = parseInt(hexRaw.slice(0, 2), 16);\n const g = parseInt(hexRaw.slice(2, 4), 16);\n const b = parseInt(hexRaw.slice(4, 6), 16);\n return { r, g, b, a: defaultAlpha };\n }\n if (/^[0-9a-f]{8}$/.test(hexRaw)) {\n const r = parseInt(hexRaw.slice(0, 2), 16);\n const g = parseInt(hexRaw.slice(2, 4), 16);\n const b = parseInt(hexRaw.slice(4, 6), 16);\n const a = parseInt(hexRaw.slice(6, 8), 16);\n return { r, g, b, a };\n }\n const rgbMatch = /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/.exec(\n trimmed\n );\n if (rgbMatch) {\n const r = clampByte(Number(rgbMatch[1]));\n const g = clampByte(Number(rgbMatch[2]));\n const b = clampByte(Number(rgbMatch[3]));\n const alphaRaw = rgbMatch[4] !== undefined ? Number(rgbMatch[4]) : undefined;\n const a =\n alphaRaw === undefined\n ? defaultAlpha\n : alphaRaw <= 1\n ? clampByte(alphaRaw * 255)\n : clampByte(alphaRaw);\n return { r, g, b, a };\n }\n throw new Error(`Unsupported color value: ${input}`);\n}\n", "export interface ExifMetadata {\n readonly orientation?: number;\n readonly density?: number;\n}\n\nexport function parseExifBuffer(raw: Uint8Array): ExifMetadata {\n let offset = 0;\n if (\n raw.length >= 6 &&\n raw[0] === 0x45 && // E\n raw[1] === 0x78 && // x\n raw[2] === 0x69 && // i\n raw[3] === 0x66 && // f\n raw[4] === 0x00 &&\n raw[5] === 0x00\n ) {\n offset = 6;\n }\n if (raw.length < offset + 8) return {};\n const sub = raw.subarray(offset);\n const view = new DataView(sub.buffer, sub.byteOffset, sub.byteLength);\n const littleEndian = sub[0] === 0x49 && sub[1] === 0x49;\n const bigEndian = sub[0] === 0x4d && sub[1] === 0x4d;\n if (!littleEndian && !bigEndian) return {};\n\n const magic = view.getUint16(2, littleEndian);\n if (magic !== 0x002a) return {};\n const ifdOffset = view.getUint32(4, littleEndian);\n if (ifdOffset + 2 > sub.length) return {};\n\n const numEntries = view.getUint16(ifdOffset, littleEndian);\n let orientation: number | undefined;\n let xRes: number | undefined;\n let resUnit = 2; // 2 = inches (DPI), 3 = cm (DPCM)\n\n for (let i = 0; i < numEntries; i++) {\n const entryPos = ifdOffset + 2 + i * 12;\n if (entryPos + 12 > sub.length) break;\n const tag = view.getUint16(entryPos, littleEndian);\n const type = view.getUint16(entryPos + 2, littleEndian);\n const valueOffset = view.getUint32(entryPos + 8, littleEndian);\n\n if (tag === 0x0112) {\n // Orientation (SHORT = 3)\n const val = type === 3 ? view.getUint16(entryPos + 8, littleEndian) : valueOffset;\n if (val >= 1 && val <= 8) orientation = val;\n } else if (tag === 0x0128) {\n const val = type === 3 ? view.getUint16(entryPos + 8, littleEndian) : valueOffset;\n if (val === 2 || val === 3) resUnit = val;\n } else if (tag === 0x011a && type === 5) {\n // RATIONAL (two uint32s at valueOffset)\n if (valueOffset + 8 <= sub.length) {\n const num = view.getUint32(valueOffset, littleEndian);\n const den = view.getUint32(valueOffset + 4, littleEndian);\n if (den > 0) xRes = num / den;\n }\n }\n }\n\n let density: number | undefined;\n if (xRes !== undefined && xRes > 0) {\n density = resUnit === 3 ? Math.round(xRes * 2.54) : Math.round(xRes);\n }\n\n return {\n ...(orientation !== undefined ? { orientation } : {}),\n ...(density !== undefined ? { density } : {})\n };\n}\n\nexport function buildExifApp1Segment(options: {\n readonly orientation?: number;\n readonly density?: number;\n}): Uint8Array {\n const orientation = options.orientation ?? 1;\n const density = Math.max(1, Math.round(options.density ?? 72));\n // Exif\\0\\0 (6) + TIFF header (8) + count (2) + 4 entries (48) + nextIFD (4) + 2 rationals (16) = 84 bytes\n const payload = new Uint8Array(84);\n const view = new DataView(payload.buffer);\n // \"Exif\\0\\0\"\n payload[0] = 0x45;\n payload[1] = 0x78;\n payload[2] = 0x69;\n payload[3] = 0x66;\n payload[4] = 0x00;\n payload[5] = 0x00;\n // Little-endian TIFF header at offset 6\n const tiff = 6;\n payload[tiff] = 0x49;\n payload[tiff + 1] = 0x49;\n view.setUint16(tiff + 2, 0x002a, true);\n view.setUint32(tiff + 4, 8, true); // IFD0 starts at offset 8 from tiff\n\n const ifd = tiff + 8;\n view.setUint16(ifd, 4, true); // 4 entries\n\n const writeEntry = (idx: number, tag: number, type: number, count: number, valueOrOffset: number) => {\n const p = ifd + 2 + idx * 12;\n view.setUint16(p, tag, true);\n view.setUint16(p + 2, type, true);\n view.setUint32(p + 4, count, true);\n if (type === 3 && count === 1) {\n view.setUint16(p + 8, valueOrOffset, true);\n view.setUint16(p + 10, 0, true);\n } else {\n view.setUint32(p + 8, valueOrOffset, true);\n }\n };\n\n const ratOffsetX = 8 + 2 + 4 * 12 + 4; // 62\n const ratOffsetY = ratOffsetX + 8; // 70\n writeEntry(0, 0x0112, 3, 1, orientation); // Orientation\n writeEntry(1, 0x011a, 5, 1, ratOffsetX); // XResolution\n writeEntry(2, 0x011b, 5, 1, ratOffsetY); // YResolution\n writeEntry(3, 0x0128, 3, 1, 2); // ResolutionUnit = inches\n\n view.setUint32(ifd + 2 + 4 * 12, 0, true); // next IFD = 0\n view.setUint32(tiff + ratOffsetX, density, true);\n view.setUint32(tiff + ratOffsetX + 4, 1, true);\n view.setUint32(tiff + ratOffsetY, density, true);\n view.setUint32(tiff + ratOffsetY + 4, 1, true);\n\n return payload;\n}\n", "import { deflate, inflate } from \"pako\";\nimport type { ImageMetadata, RgbaImage } from \"../ast.js\";\nimport { buildExifApp1Segment, parseExifBuffer } from \"./exif.js\";\n\nconst PNG_SIGNATURE = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst CRC_TABLE = (() => {\n const table = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[n] = c >>> 0;\n }\n return table;\n})();\n\nfunction crc32(typeBytes: Uint8Array, data: Uint8Array): number {\n let c = 0xffffffff;\n for (let i = 0; i < typeBytes.length; i++) {\n c = CRC_TABLE[(c ^ typeBytes[i]!) & 0xff]! ^ (c >>> 8);\n }\n for (let i = 0; i < data.length; i++) {\n c = CRC_TABLE[(c ^ data[i]!) & 0xff]! ^ (c >>> 8);\n }\n return (c ^ 0xffffffff) >>> 0;\n}\n\nfunction paethPredictor(a: number, b: number, c: number): number {\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n if (pa <= pb && pa <= pc) return a;\n if (pb <= pc) return b;\n return c;\n}\n\nexport function isPngBytes(bytes: Uint8Array): boolean {\n if (bytes.length < 8) return false;\n for (let i = 0; i < 8; i++) {\n if (bytes[i] !== PNG_SIGNATURE[i]) return false;\n }\n return true;\n}\n\nexport function readPngMetadata(bytes: Uint8Array): ImageMetadata {\n if (!isPngBytes(bytes) || bytes.length < 24) {\n throw new Error(\"Invalid PNG header\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let width = 0;\n let height = 0;\n let bitDepth = 8;\n let colorType = 6;\n let interlace = 0;\n let density = 72;\n let hasTrns = false;\n let orientation: number | undefined;\n\n let pos = 8;\n while (pos + 8 <= bytes.length) {\n const len = view.getUint32(pos, false);\n const type = String.fromCharCode(\n bytes[pos + 4]!,\n bytes[pos + 5]!,\n bytes[pos + 6]!,\n bytes[pos + 7]!\n );\n const dataStart = pos + 8;\n if (dataStart + len > bytes.length) break;\n const chunk = bytes.subarray(dataStart, dataStart + len);\n\n if (type === \"IHDR\" && len >= 13) {\n width = view.getUint32(dataStart, false);\n height = view.getUint32(dataStart + 4, false);\n bitDepth = chunk[8]!;\n colorType = chunk[9]!;\n interlace = chunk[12]!;\n } else if (type === \"pHYs\" && len >= 9) {\n const ppuX = view.getUint32(dataStart, false);\n const unit = chunk[8]!;\n if (unit === 1 && ppuX > 0) {\n density = Math.max(1, Math.round(ppuX * 0.0254));\n } else if (ppuX > 0) {\n density = ppuX;\n }\n } else if (type === \"tRNS\") {\n hasTrns = true;\n } else if (type === \"eXIf\" && len >= 8) {\n const exif = parseExifBuffer(chunk);\n if (exif.orientation !== undefined) orientation = exif.orientation;\n if (exif.density !== undefined) density = exif.density;\n } else if (type === \"IDAT\" || type === \"IEND\") {\n if (type === \"IEND\") break;\n }\n pos = dataStart + len + 4;\n }\n\n const channels: 1 | 2 | 3 | 4 =\n colorType === 6\n ? 4\n : colorType === 4\n ? 2\n : colorType === 2\n ? hasTrns\n ? 4\n : 3\n : colorType === 3\n ? hasTrns\n ? 4\n : 3\n : hasTrns\n ? 2\n : 1;\n\n const hasAlpha = colorType === 6 || colorType === 4 || hasTrns;\n const space = colorType === 0 || colorType === 4 ? \"b-w\" : \"srgb\";\n const depth = bitDepth === 16 ? \"ushort\" : bitDepth < 8 ? \"bit\" : \"uchar\";\n\n return {\n format: \"png\",\n width,\n height,\n space,\n channels,\n depth,\n density,\n hasAlpha,\n ...(orientation !== undefined ? { orientation } : {}),\n isProgressive: interlace === 1,\n size: bytes.byteLength\n };\n}\n\nexport function decodePngImage(bytes: Uint8Array): RgbaImage {\n const meta = readPngMetadata(bytes);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const width = meta.width;\n const height = meta.height;\n if (width <= 0 || height <= 0) {\n throw new Error(`Invalid PNG dimensions: ${width}x${height}`);\n }\n\n let bitDepth = 8;\n let colorType = 6;\n let palette: Uint8Array | undefined;\n let trns: Uint8Array | undefined;\n const idatChunks: Uint8Array[] = [];\n\n let pos = 8;\n while (pos + 8 <= bytes.length) {\n const len = view.getUint32(pos, false);\n const type = String.fromCharCode(\n bytes[pos + 4]!,\n bytes[pos + 5]!,\n bytes[pos + 6]!,\n bytes[pos + 7]!\n );\n const dataStart = pos + 8;\n if (dataStart + len > bytes.length) break;\n const chunk = bytes.subarray(dataStart, dataStart + len);\n if (type === \"IHDR\" && len >= 13) {\n bitDepth = chunk[8]!;\n colorType = chunk[9]!;\n } else if (type === \"PLTE\") {\n palette = chunk;\n } else if (type === \"tRNS\") {\n trns = chunk;\n } else if (type === \"IDAT\") {\n idatChunks.push(chunk);\n } else if (type === \"IEND\") {\n break;\n }\n pos = dataStart + len + 4;\n }\n\n const totalIdat = idatChunks.reduce((sum, c) => sum + c.length, 0);\n const compressed = new Uint8Array(totalIdat);\n let offset = 0;\n for (const c of idatChunks) {\n compressed.set(c, offset);\n offset += c.length;\n }\n const inflated = inflate(compressed);\n\n const samplesPerPixel =\n colorType === 6 ? 4 : colorType === 4 ? 2 : colorType === 2 ? 3 : 1;\n const bitsPerPixel = samplesPerPixel * bitDepth;\n const bytesPerPixel = Math.max(1, Math.ceil(bitsPerPixel / 8));\n const rgba = new Uint8Array(width * height * 4);\n\n const decodePass = (\n subW: number,\n subH: number,\n inOffset: number,\n x0: number,\n y0: number,\n dx: number,\n dy: number\n ): number => {\n if (subW <= 0 || subH <= 0) return inOffset;\n const rowBytes = Math.ceil((subW * bitsPerPixel) / 8);\n const rawData = new Uint8Array(subH * rowBytes);\n let curOffset = inOffset;\n\n for (let y = 0; y < subH; y++) {\n const filterType = inflated[curOffset++] ?? 0;\n const dstRowOffset = y * rowBytes;\n const prevRowOffset = (y - 1) * rowBytes;\n for (let x = 0; x < rowBytes; x++) {\n const raw = inflated[curOffset++] ?? 0;\n const a = x >= bytesPerPixel ? rawData[dstRowOffset + x - bytesPerPixel]! : 0;\n const b = y > 0 ? rawData[prevRowOffset + x]! : 0;\n const c = y > 0 && x >= bytesPerPixel ? rawData[prevRowOffset + x - bytesPerPixel]! : 0;\n let recon = raw;\n if (filterType === 1) recon = (raw + a) & 0xff;\n else if (filterType === 2) recon = (raw + b) & 0xff;\n else if (filterType === 3) recon = (raw + ((a + b) >>> 1)) & 0xff;\n else if (filterType === 4) recon = (raw + paethPredictor(a, b, c)) & 0xff;\n rawData[dstRowOffset + x] = recon;\n }\n }\n\n for (let y = 0; y < subH; y++) {\n const rowStart = y * rowBytes;\n const dstY = y0 + y * dy;\n for (let x = 0; x < subW; x++) {\n const dstX = x0 + x * dx;\n const outIdx = (dstY * width + dstX) * 4;\n if (bitDepth === 8) {\n if (colorType === 6) {\n const idx = rowStart + x * 4;\n rgba[outIdx] = rawData[idx]!;\n rgba[outIdx + 1] = rawData[idx + 1]!;\n rgba[outIdx + 2] = rawData[idx + 2]!;\n rgba[outIdx + 3] = rawData[idx + 3]!;\n } else if (colorType === 2) {\n const idx = rowStart + x * 3;\n const r = rawData[idx]!;\n const g = rawData[idx + 1]!;\n const b = rawData[idx + 2]!;\n let a = 255;\n if (trns && trns.length >= 6 && r === trns[1] && g === trns[3] && b === trns[5]) a = 0;\n rgba[outIdx] = r;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = b;\n rgba[outIdx + 3] = a;\n } else if (colorType === 4) {\n const idx = rowStart + x * 2;\n const g = rawData[idx]!;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = rawData[idx + 1]!;\n } else if (colorType === 0) {\n const g = rawData[rowStart + x]!;\n const a = trns && trns.length >= 2 && g === trns[1] ? 0 : 255;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = a;\n } else if (colorType === 3) {\n const pIdx = rawData[rowStart + x]!;\n rgba[outIdx] = palette ? (palette[pIdx * 3] ?? 0) : 0;\n rgba[outIdx + 1] = palette ? (palette[pIdx * 3 + 1] ?? 0) : 0;\n rgba[outIdx + 2] = palette ? (palette[pIdx * 3 + 2] ?? 0) : 0;\n rgba[outIdx + 3] = trns && pIdx < trns.length ? trns[pIdx]! : 255;\n }\n } else if (bitDepth === 16) {\n if (colorType === 6) {\n const idx = rowStart + x * 8;\n rgba[outIdx] = rawData[idx]!;\n rgba[outIdx + 1] = rawData[idx + 2]!;\n rgba[outIdx + 2] = rawData[idx + 4]!;\n rgba[outIdx + 3] = rawData[idx + 6]!;\n } else if (colorType === 2) {\n const idx = rowStart + x * 6;\n let a = 255;\n if (\n trns &&\n trns.length >= 6 &&\n rawData[idx] === trns[0] &&\n rawData[idx + 1] === trns[1] &&\n rawData[idx + 2] === trns[2] &&\n rawData[idx + 3] === trns[3] &&\n rawData[idx + 4] === trns[4] &&\n rawData[idx + 5] === trns[5]\n ) {\n a = 0;\n }\n rgba[outIdx] = rawData[idx]!;\n rgba[outIdx + 1] = rawData[idx + 2]!;\n rgba[outIdx + 2] = rawData[idx + 4]!;\n rgba[outIdx + 3] = a;\n } else if (colorType === 4) {\n const idx = rowStart + x * 4;\n const g = rawData[idx]!;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = rawData[idx + 2]!;\n } else {\n const idx = rowStart + x * 2;\n const g = rawData[idx]!;\n const a =\n trns && trns.length >= 2 && rawData[idx] === trns[0] && rawData[idx + 1] === trns[1]\n ? 0\n : 255;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = a;\n }\n } else {\n const pixelsPerByte = 8 / bitDepth;\n const byteIndex = rowStart + Math.floor(x / pixelsPerByte);\n const shift = (pixelsPerByte - 1 - (x % pixelsPerByte)) * bitDepth;\n const mask = (1 << bitDepth) - 1;\n const sample = (rawData[byteIndex]! >>> shift) & mask;\n if (colorType === 3) {\n rgba[outIdx] = palette ? (palette[sample * 3] ?? 0) : 0;\n rgba[outIdx + 1] = palette ? (palette[sample * 3 + 1] ?? 0) : 0;\n rgba[outIdx + 2] = palette ? (palette[sample * 3 + 2] ?? 0) : 0;\n rgba[outIdx + 3] = trns && sample < trns.length ? trns[sample]! : 255;\n } else {\n const scaled = Math.round((sample * 255) / mask);\n const a = trns && trns.length >= 2 && sample === trns[1] ? 0 : 255;\n rgba[outIdx] = scaled;\n rgba[outIdx + 1] = scaled;\n rgba[outIdx + 2] = scaled;\n rgba[outIdx + 3] = a;\n }\n }\n }\n }\n return curOffset;\n };\n\n if (meta.isProgressive) {\n const passes = [\n { x0: 0, y0: 0, dx: 8, dy: 8 },\n { x0: 4, y0: 0, dx: 8, dy: 8 },\n { x0: 0, y0: 4, dx: 4, dy: 8 },\n { x0: 2, y0: 0, dx: 4, dy: 4 },\n { x0: 0, y0: 2, dx: 2, dy: 4 },\n { x0: 1, y0: 0, dx: 2, dy: 2 },\n { x0: 0, y0: 1, dx: 1, dy: 2 }\n ];\n let inOff = 0;\n for (const p of passes) {\n const pw = Math.ceil((width - p.x0) / p.dx);\n const ph = Math.ceil((height - p.y0) / p.dy);\n inOff = decodePass(pw, ph, inOff, p.x0, p.y0, p.dx, p.dy);\n }\n } else {\n decodePass(width, height, 0, 0, 0, 1, 1);\n }\n\n return {\n width,\n height,\n data: rgba,\n format: \"png\",\n space: meta.space,\n channels: meta.channels,\n depth: meta.depth,\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {}),\n ...(meta.isProgressive !== undefined ? { isProgressive: meta.isProgressive } : {})\n };\n}\n\nfunction makeChunk(type: string, data: Uint8Array): Uint8Array {\n const typeBytes = new Uint8Array([\n type.charCodeAt(0),\n type.charCodeAt(1),\n type.charCodeAt(2),\n type.charCodeAt(3)\n ]);\n const out = new Uint8Array(12 + data.length);\n const view = new DataView(out.buffer);\n view.setUint32(0, data.length, false);\n out.set(typeBytes, 4);\n out.set(data, 8);\n view.setUint32(8 + data.length, crc32(typeBytes, data), false);\n return out;\n}\n\nexport function encodePngImage(\n img: RgbaImage,\n options?: {\n readonly compressionLevel?: number;\n readonly density?: number;\n readonly orientation?: number;\n readonly forceOpaque?: boolean;\n }\n): Uint8Array {\n const { width, height, data } = img;\n const density = options?.density ?? img.density ?? 72;\n let hasAlpha = Boolean(img.hasAlpha || img.channels === 4 || img.channels === 2);\n if (options?.forceOpaque) {\n hasAlpha = false;\n } else if (!hasAlpha) {\n for (let i = 3; i < data.length; i += 4) {\n if (data[i]! < 255) {\n hasAlpha = true;\n break;\n }\n }\n }\n\n const isBw = img.space === \"b-w\" || img.channels === 1 || img.channels === 2;\n const colorType = isBw ? (hasAlpha ? 4 : 0) : (hasAlpha ? 6 : 2);\n const bpp = isBw ? (hasAlpha ? 2 : 1) : (hasAlpha ? 4 : 3);\n const rowBytes = width * bpp;\n const raw = new Uint8Array(height * (rowBytes + 1));\n\n for (let y = 0; y < height; y++) {\n const dstRow = y * (rowBytes + 1);\n raw[dstRow] = 1;\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n const prevIdx = x > 0 ? (y * width + (x - 1)) * 4 : -1;\n const outCol = dstRow + 1 + x * bpp;\n if (isBw) {\n const g = data[srcIdx]!;\n const pg = prevIdx >= 0 ? data[prevIdx]! : 0;\n raw[outCol] = (g - pg) & 0xff;\n if (hasAlpha) {\n const a = data[srcIdx + 3]!;\n const pa = prevIdx >= 0 ? data[prevIdx + 3]! : 0;\n raw[outCol + 1] = (a - pa) & 0xff;\n }\n } else {\n const r = data[srcIdx]!;\n const g = data[srcIdx + 1]!;\n const b = data[srcIdx + 2]!;\n const pr = prevIdx >= 0 ? data[prevIdx]! : 0;\n const pg = prevIdx >= 0 ? data[prevIdx + 1]! : 0;\n const pb = prevIdx >= 0 ? data[prevIdx + 2]! : 0;\n raw[outCol] = (r - pr) & 0xff;\n raw[outCol + 1] = (g - pg) & 0xff;\n raw[outCol + 2] = (b - pb) & 0xff;\n if (hasAlpha) {\n const a = data[srcIdx + 3]!;\n const pa = prevIdx >= 0 ? data[prevIdx + 3]! : 0;\n raw[outCol + 3] = (a - pa) & 0xff;\n }\n }\n }\n }\n\n const level = Math.max(0, Math.min(9, options?.compressionLevel ?? 6)) as\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9;\n const compressed = deflate(raw, { level });\n\n const ihdr = new Uint8Array(13);\n const ihdrView = new DataView(ihdr.buffer);\n ihdrView.setUint32(0, width, false);\n ihdrView.setUint32(4, height, false);\n ihdr[8] = 8;\n ihdr[9] = colorType;\n ihdr[10] = 0;\n ihdr[11] = 0;\n ihdr[12] = 0;\n\n const phys = new Uint8Array(9);\n const physView = new DataView(phys.buffer);\n const ppu = Math.round(density / 0.0254);\n physView.setUint32(0, ppu, false);\n physView.setUint32(4, ppu, false);\n phys[8] = 1; // meter\n\n const orientation = options?.orientation ?? img.orientation;\n const exifChunk = orientation !== undefined\n ? [makeChunk(\"eXIf\", buildExifApp1Segment({ orientation, density }).subarray(6))]\n : [];\n const chunks = [\n PNG_SIGNATURE,\n makeChunk(\"IHDR\", ihdr),\n makeChunk(\"pHYs\", phys),\n ...exifChunk,\n makeChunk(\"IDAT\", compressed),\n makeChunk(\"IEND\", new Uint8Array(0))\n ];\n\n const totalLength = chunks.reduce((s, c) => s + c.length, 0);\n const out = new Uint8Array(totalLength);\n let pos = 0;\n for (const c of chunks) {\n out.set(c, pos);\n pos += c.length;\n }\n return out;\n}\n", "import type { ImageMetadata, RgbaImage } from \"../ast.js\";\nimport { buildExifApp1Segment, parseExifBuffer } from \"./exif.js\";\n\nconst ZIGZAG = new Uint8Array([\n 0, 1, 8, 16, 9, 2, 3, 10,\n 17, 24, 32, 25, 18, 11, 4, 5,\n 12, 19, 26, 33, 40, 48, 41, 34,\n 27, 20, 13, 6, 7, 14, 21, 28,\n 35, 42, 49, 56, 57, 50, 43, 36,\n 29, 22, 15, 23, 30, 37, 44, 51,\n 58, 59, 52, 45, 38, 31, 39, 46,\n 53, 60, 61, 54, 47, 55, 62, 63\n]);\n\nconst STD_LUMA_QUANT = new Uint8Array([\n 16, 11, 10, 16, 24, 40, 51, 61,\n 12, 12, 14, 19, 26, 58, 60, 55,\n 14, 13, 16, 24, 40, 57, 69, 56,\n 14, 17, 22, 29, 51, 87, 80, 62,\n 18, 22, 37, 56, 68, 109, 103, 77,\n 24, 35, 55, 64, 81, 104, 113, 92,\n 49, 64, 78, 87, 103, 121, 120, 101,\n 72, 92, 95, 98, 112, 100, 103, 99\n]);\n\nconst STD_CHROMA_QUANT = new Uint8Array([\n 17, 18, 24, 47, 99, 99, 99, 99,\n 18, 21, 26, 66, 99, 99, 99, 99,\n 24, 26, 56, 99, 99, 99, 99, 99,\n 47, 66, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99\n]);\n\nconst STD_DC_LUMA_NRCODES = new Uint8Array([0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]);\nconst STD_DC_LUMA_VALUES = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);\nconst STD_DC_CHROMA_NRCODES = new Uint8Array([0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]);\nconst STD_DC_CHROMA_VALUES = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);\n\nconst STD_AC_LUMA_NRCODES = new Uint8Array([0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d]);\nconst STD_AC_LUMA_VALUES = new Uint8Array([\n 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,\n 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,\n 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,\n 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,\n 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,\n 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,\n 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,\n 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,\n 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,\n 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n 0xf9, 0xfa\n]);\n\nconst STD_AC_CHROMA_NRCODES = new Uint8Array([0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77]);\nconst STD_AC_CHROMA_VALUES = new Uint8Array([\n 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,\n 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,\n 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,\n 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,\n 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,\n 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,\n 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,\n 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,\n 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,\n 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,\n 0xf9, 0xfa\n]);\n\nconst COS_TABLE = (() => {\n const table = new Float64Array(64);\n for (let u = 0; u < 8; u++) {\n const cu = u === 0 ? Math.SQRT1_2 : 1;\n for (let x = 0; x < 8; x++) {\n table[u * 8 + x] = cu * Math.cos(((2 * x + 1) * u * Math.PI) / 16);\n }\n }\n return table;\n})();\n\nexport function isJpegBytes(bytes: Uint8Array): boolean {\n return bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff;\n}\n\nexport function readJpegMetadata(bytes: Uint8Array): ImageMetadata {\n if (!isJpegBytes(bytes)) {\n throw new Error(\"Invalid JPEG signature\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let width = 0;\n let height = 0;\n let channels: 1 | 2 | 3 | 4 = 3;\n let isProgressive = false;\n let density = 72;\n let orientation: number | undefined;\n\n let pos = 2;\n while (pos + 4 <= bytes.length) {\n if (bytes[pos] !== 0xff) {\n pos++;\n continue;\n }\n while (pos < bytes.length && bytes[pos] === 0xff) pos++;\n if (pos >= bytes.length) break;\n const marker = bytes[pos]!;\n pos++;\n if (marker === 0xd8 || marker === 0xd9 || (marker >= 0xd0 && marker <= 0xd7) || marker === 0x01) {\n if (marker === 0xd9) break;\n continue;\n }\n if (pos + 2 > bytes.length) break;\n const segLen = view.getUint16(pos, false);\n if (segLen < 2 || pos + segLen > bytes.length) break;\n const payload = bytes.subarray(pos + 2, pos + segLen);\n\n if (marker === 0xe0 && payload.length >= 12) {\n // JFIF APP0\n if (\n payload[0] === 0x4a &&\n payload[1] === 0x46 &&\n payload[2] === 0x49 &&\n payload[3] === 0x46 &&\n payload[4] === 0x00\n ) {\n const units = payload[7]!;\n const xDensity = (payload[8]! << 8) | payload[9]!;\n if (xDensity > 0) {\n if (units === 1) density = xDensity;\n else if (units === 2) density = Math.round(xDensity * 2.54);\n }\n }\n } else if (marker === 0xe1 && payload.length >= 8) {\n // EXIF APP1\n const exif = parseExifBuffer(payload);\n if (exif.orientation !== undefined) orientation = exif.orientation;\n if (exif.density !== undefined) density = exif.density;\n } else if (\n marker === 0xc0 ||\n marker === 0xc1 ||\n marker === 0xc2\n ) {\n isProgressive = marker === 0xc2;\n height = (payload[1]! << 8) | payload[2]!;\n width = (payload[3]! << 8) | payload[4]!;\n const comps = payload[5]!;\n channels = comps === 1 ? 1 : comps === 4 ? 4 : 3;\n break;\n }\n pos += segLen;\n }\n\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid JPEG dimensions\");\n }\n\n return {\n format: \"jpeg\",\n width,\n height,\n space: channels === 1 ? \"b-w\" : channels === 4 ? \"cmyk\" : \"srgb\",\n channels,\n depth: \"uchar\",\n density,\n hasAlpha: false,\n ...(orientation !== undefined ? { orientation } : {}),\n isProgressive,\n size: bytes.byteLength\n };\n}\n\ninterface HuffmanNode {\n children?: [HuffmanNode | undefined, HuffmanNode | undefined];\n symbol?: number;\n}\n\nfunction buildHuffmanTree(counts: Uint8Array, symbols: Uint8Array): HuffmanNode {\n const root: HuffmanNode = { children: [undefined, undefined] };\n let symbolIdx = 0;\n let level: HuffmanNode[] = [root];\n for (let len = 0; len < 16; len++) {\n const nextLevel: HuffmanNode[] = [];\n for (const node of level) {\n if (!node.children) node.children = [undefined, undefined];\n for (let b = 0; b < 2; b++) {\n const child: HuffmanNode = {};\n node.children[b] = child;\n nextLevel.push(child);\n }\n }\n const count = counts[len] ?? 0;\n for (let i = 0; i < count && i < nextLevel.length; i++) {\n nextLevel[i]!.symbol = symbols[symbolIdx++]!;\n }\n level = nextLevel.slice(count);\n }\n return root;\n}\n\nfunction idct8x8(coeffs: Int32Array, quant: Uint16Array, out: Uint8Array): void {\n const dequant = new Float64Array(64);\n for (let i = 0; i < 64; i++) {\n dequant[ZIGZAG[i]!] = coeffs[i]! * quant[i]!;\n }\n const temp = new Float64Array(64);\n for (let y = 0; y < 8; y++) {\n for (let x = 0; x < 8; x++) {\n let sum = 0;\n for (let u = 0; u < 8; u++) {\n sum += dequant[y * 8 + u]! * COS_TABLE[u * 8 + x]!;\n }\n temp[y * 8 + x] = sum * 0.5;\n }\n }\n for (let x = 0; x < 8; x++) {\n for (let y = 0; y < 8; y++) {\n let sum = 0;\n for (let v = 0; v < 8; v++) {\n sum += temp[v * 8 + x]! * COS_TABLE[v * 8 + y]!;\n }\n const val = Math.round(sum * 0.5 + 128);\n out[y * 8 + x] = val < 0 ? 0 : val > 255 ? 255 : val;\n }\n }\n}\n\ninterface ComponentSpec {\n id: number;\n h: number;\n v: number;\n qId: number;\n dcId: number;\n acId: number;\n dcPred: number;\n blocksX: number;\n blocksY: number;\n blocks: Int32Array[];\n}\n\nexport function decodeJpegImage(bytes: Uint8Array): RgbaImage {\n const meta = readJpegMetadata(bytes);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\n const quantTables: Uint16Array[] = [\n new Uint16Array(STD_LUMA_QUANT),\n new Uint16Array(STD_CHROMA_QUANT),\n new Uint16Array(STD_CHROMA_QUANT),\n new Uint16Array(STD_CHROMA_QUANT)\n ];\n const dcTrees: HuffmanNode[] = [\n buildHuffmanTree(STD_DC_LUMA_NRCODES.subarray(1), STD_DC_LUMA_VALUES),\n buildHuffmanTree(STD_DC_CHROMA_NRCODES.subarray(1), STD_DC_CHROMA_VALUES),\n buildHuffmanTree(STD_DC_CHROMA_NRCODES.subarray(1), STD_DC_CHROMA_VALUES),\n buildHuffmanTree(STD_DC_CHROMA_NRCODES.subarray(1), STD_DC_CHROMA_VALUES)\n ];\n const acTrees: HuffmanNode[] = [\n buildHuffmanTree(STD_AC_LUMA_NRCODES.subarray(1), STD_AC_LUMA_VALUES),\n buildHuffmanTree(STD_AC_CHROMA_NRCODES.subarray(1), STD_AC_CHROMA_VALUES),\n buildHuffmanTree(STD_AC_CHROMA_NRCODES.subarray(1), STD_AC_CHROMA_VALUES),\n buildHuffmanTree(STD_AC_CHROMA_NRCODES.subarray(1), STD_AC_CHROMA_VALUES)\n ];\n\n let width = 0;\n let height = 0;\n let maxH = 1;\n let maxV = 1;\n let mcusX = 0;\n let mcusY = 0;\n let restartInterval = 0;\n const components: ComponentSpec[] = [];\n\n let pos = 2;\n while (pos + 2 <= bytes.length) {\n if (bytes[pos] !== 0xff) {\n pos++;\n continue;\n }\n while (pos < bytes.length && bytes[pos] === 0xff) pos++;\n if (pos >= bytes.length) break;\n const marker = bytes[pos]!;\n pos++;\n if (marker === 0xd9) break;\n if (marker === 0xd8 || (marker >= 0xd0 && marker <= 0xd7) || marker === 0x01) continue;\n if (pos + 2 > bytes.length) break;\n const segLen = view.getUint16(pos, false);\n if (segLen < 2 || pos + segLen > bytes.length) break;\n const payload = bytes.subarray(pos + 2, pos + segLen);\n\n if (marker === 0xdb) {\n // DQT\n let qPos = 0;\n while (qPos < payload.length) {\n const info = payload[qPos++]!;\n const precision = info >>> 4;\n const qId = info & 0x0f;\n const table = new Uint16Array(64);\n for (let i = 0; i < 64; i++) {\n table[i] = precision === 0 ? payload[qPos++]! : (payload[qPos++]! << 8) | payload[qPos++]!;\n }\n quantTables[qId] = table;\n }\n } else if (marker === 0xc4) {\n // DHT\n let hPos = 0;\n while (hPos < payload.length) {\n const info = payload[hPos++]!;\n const tableClass = info >>> 4;\n const hId = info & 0x0f;\n const counts = payload.subarray(hPos, hPos + 16);\n hPos += 16;\n let totalSymbols = 0;\n for (let i = 0; i < 16; i++) totalSymbols += counts[i]!;\n const symbols = payload.subarray(hPos, hPos + totalSymbols);\n hPos += totalSymbols;\n const tree = buildHuffmanTree(counts, symbols);\n if (tableClass === 0) dcTrees[hId] = tree;\n else acTrees[hId] = tree;\n }\n } else if (marker === 0xdd && payload.length >= 2) {\n // DRI\n restartInterval = (payload[0]! << 8) | payload[1]!;\n } else if (marker === 0xc0 || marker === 0xc1 || marker === 0xc2) {\n height = (payload[1]! << 8) | payload[2]!;\n width = (payload[3]! << 8) | payload[4]!;\n const numComps = payload[5]!;\n components.length = 0;\n maxH = 1;\n maxV = 1;\n for (let i = 0; i < numComps; i++) {\n const id = payload[6 + i * 3]!;\n const hv = payload[6 + i * 3 + 1]!;\n const h = hv >>> 4;\n const v = hv & 0x0f;\n const qId = payload[6 + i * 3 + 2]!;\n if (h > maxH) maxH = h;\n if (v > maxV) maxV = v;\n components.push({\n id,\n h,\n v,\n qId,\n dcId: 0,\n acId: 0,\n dcPred: 0,\n blocksX: 0,\n blocksY: 0,\n blocks: []\n });\n }\n mcusX = Math.ceil(width / (maxH * 8));\n mcusY = Math.ceil(height / (maxV * 8));\n for (const comp of components) {\n comp.blocksX = mcusX * comp.h;\n comp.blocksY = mcusY * comp.v;\n comp.blocks = Array.from({ length: comp.blocksX * comp.blocksY }, () => new Int32Array(64));\n }\n } else if (marker === 0xda) {\n // SOS\n const scanCompsCount = payload[0]!;\n const scanComps: ComponentSpec[] = [];\n for (let i = 0; i < scanCompsCount; i++) {\n const compId = payload[1 + i * 2]!;\n const tdta = payload[1 + i * 2 + 1]!;\n const comp = components.find(c => c.id === compId) ?? components[i];\n if (comp) {\n comp.dcId = tdta >>> 4;\n comp.acId = tdta & 0x0f;\n scanComps.push(comp);\n }\n }\n const ssPos = 1 + scanCompsCount * 2;\n const spectralStart = payload[ssPos] ?? 0;\n const spectralEnd = payload[ssPos + 1] ?? 63;\n const ahAl = payload[ssPos + 2] ?? 0;\n const approxHigh = ahAl >>> 4;\n const approxLow = ahAl & 0x0f;\n\n // Decode entropy-coded data starting after SOS segment\n let scanPos = pos + segLen;\n let bitBuf = 0;\n let bitCount = 0;\n let eobRun = 0;\n\n const readBit = (): number => {\n if (bitCount === 0) {\n if (scanPos >= bytes.length) return 0;\n let b = bytes[scanPos++]!;\n if (b === 0xff) {\n while (scanPos < bytes.length && bytes[scanPos] === 0xff) scanPos++;\n const next = bytes[scanPos] ?? 0;\n if (next === 0x00) {\n scanPos++;\n } else if (next >= 0xd0 && next <= 0xd7) {\n scanPos++;\n b = bytes[scanPos++] ?? 0;\n } else {\n return 0;\n }\n }\n bitBuf = b;\n bitCount = 8;\n }\n const bit = (bitBuf >>> (bitCount - 1)) & 1;\n bitCount--;\n return bit;\n };\n\n const readBits = (n: number): number => {\n let val = 0;\n for (let i = 0; i < n; i++) {\n val = (val << 1) | readBit();\n }\n return val;\n };\n\n const receiveExtend = (n: number): number => {\n if (n === 0) return 0;\n const v = readBits(n);\n return v < 1 << (n - 1) ? v + (-1 << n) + 1 : v;\n };\n\n const decodeSymbol = (tree: HuffmanNode): number => {\n let node: HuffmanNode | undefined = tree;\n while (node && node.symbol === undefined) {\n const bit = readBit();\n node = node.children?.[bit];\n }\n return node?.symbol ?? 0;\n };\n\n const decodeBlockBaseline = (comp: ComponentSpec, block: Int32Array) => {\n const dcTree = dcTrees[comp.dcId] ?? dcTrees[0]!;\n const acTree = acTrees[comp.acId] ?? acTrees[0]!;\n const t = decodeSymbol(dcTree);\n const diff = receiveExtend(t);\n comp.dcPred += diff;\n block[0] = comp.dcPred;\n let k = 1;\n while (k < 64) {\n const rs = decodeSymbol(acTree);\n const r = rs >>> 4;\n const s = rs & 0x0f;\n if (s === 0) {\n if (r === 15) {\n k += 16;\n continue;\n }\n break;\n }\n k += r;\n if (k < 64) {\n block[k] = receiveExtend(s);\n }\n k++;\n }\n };\n\n const decodeBlockProgressive = (comp: ComponentSpec, block: Int32Array) => {\n if (spectralStart === 0) {\n if (approxHigh === 0) {\n const dcTree = dcTrees[comp.dcId] ?? dcTrees[0]!;\n const t = decodeSymbol(dcTree);\n const diff = receiveExtend(t);\n comp.dcPred += diff;\n block[0] = comp.dcPred << approxLow;\n } else {\n if (readBit() !== 0) {\n block[0] = (block[0] ?? 0) | (1 << approxLow);\n }\n }\n } else if (approxHigh === 0) {\n if (eobRun > 0) {\n eobRun--;\n return;\n }\n const acTree = acTrees[comp.acId] ?? acTrees[0]!;\n for (let k = spectralStart; k <= spectralEnd; k++) {\n const rs = decodeSymbol(acTree);\n const r = rs >>> 4;\n const s = rs & 0x0f;\n if (s === 0) {\n if (r < 15) {\n eobRun = (1 << r) + readBits(r) - 1;\n break;\n }\n k += 15;\n } else {\n k += r;\n if (k <= spectralEnd) {\n block[k] = receiveExtend(s) << approxLow;\n }\n }\n }\n }\n };\n\n let mcuCounter = 0;\n if (scanComps.length === 1 && (spectralStart > 0 || scanCompsCount === 1 && components.length > 1)) {\n const comp = scanComps[0]!;\n const blocksCols = Math.ceil(width / (8 * (maxH / comp.h)));\n const blocksRows = Math.ceil(height / (8 * (maxV / comp.v)));\n for (let by = 0; by < blocksRows; by++) {\n for (let bx = 0; bx < blocksCols; bx++) {\n if (restartInterval > 0 && mcuCounter > 0 && mcuCounter % restartInterval === 0) {\n comp.dcPred = 0;\n eobRun = 0;\n bitCount = 0;\n }\n const block = comp.blocks[by * comp.blocksX + bx]!;\n if (meta.isProgressive) decodeBlockProgressive(comp, block);\n else decodeBlockBaseline(comp, block);\n mcuCounter++;\n }\n }\n } else {\n for (let my = 0; my < mcusY; my++) {\n for (let mx = 0; mx < mcusX; mx++) {\n if (restartInterval > 0 && mcuCounter > 0 && mcuCounter % restartInterval === 0) {\n for (const c of scanComps) c.dcPred = 0;\n eobRun = 0;\n bitCount = 0;\n }\n for (const comp of scanComps) {\n for (let vy = 0; vy < comp.v; vy++) {\n for (let hx = 0; hx < comp.h; hx++) {\n const bx = mx * comp.h + hx;\n const by = my * comp.v + vy;\n const block = comp.blocks[by * comp.blocksX + bx]!;\n if (meta.isProgressive) decodeBlockProgressive(comp, block);\n else decodeBlockBaseline(comp, block);\n }\n }\n }\n mcuCounter++;\n }\n }\n }\n\n pos = scanPos;\n continue;\n }\n pos += segLen;\n }\n\n const compPixels = components.map(comp => {\n const pixels = new Uint8Array(comp.blocksX * 8 * comp.blocksY * 8);\n const blockOut = new Uint8Array(64);\n const quant = quantTables[comp.qId] ?? quantTables[0]!;\n for (let by = 0; by < comp.blocksY; by++) {\n for (let bx = 0; bx < comp.blocksX; bx++) {\n idct8x8(comp.blocks[by * comp.blocksX + bx]!, quant, blockOut);\n for (let y = 0; y < 8; y++) {\n const dstOffset = (by * 8 + y) * (comp.blocksX * 8) + bx * 8;\n for (let x = 0; x < 8; x++) {\n pixels[dstOffset + x] = blockOut[y * 8 + x]!;\n }\n }\n }\n }\n return { comp, pixels, stride: comp.blocksX * 8 };\n });\n\n const rgba = new Uint8Array(width * height * 4);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const outIdx = (y * width + x) * 4;\n if (compPixels.length === 1) {\n const c0 = compPixels[0]!;\n const g = c0.pixels[y * c0.stride + x]!;\n rgba[outIdx] = g;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = g;\n rgba[outIdx + 3] = 255;\n } else if (compPixels.length >= 3) {\n const cY = compPixels[0]!;\n const cCb = compPixels[1]!;\n const cCr = compPixels[2]!;\n const yVal = cY.pixels[Math.floor((y * cY.comp.v) / maxV) * cY.stride + Math.floor((x * cY.comp.h) / maxH)]!;\n const cbVal = cCb.pixels[Math.floor((y * cCb.comp.v) / maxV) * cCb.stride + Math.floor((x * cCb.comp.h) / maxH)]! - 128;\n const crVal = cCr.pixels[Math.floor((y * cCr.comp.v) / maxV) * cCr.stride + Math.floor((x * cCr.comp.h) / maxH)]! - 128;\n\n let r = Math.round(yVal + 1.402 * crVal);\n let g = Math.round(yVal - 0.344136 * cbVal - 0.714136 * crVal);\n let b = Math.round(yVal + 1.772 * cbVal);\n r = r < 0 ? 0 : r > 255 ? 255 : r;\n g = g < 0 ? 0 : g > 255 ? 255 : g;\n b = b < 0 ? 0 : b > 255 ? 255 : b;\n\n if (compPixels.length === 4) {\n const cK = compPixels[3]!;\n const kVal = cK.pixels[Math.floor((y * cK.comp.v) / maxV) * cK.stride + Math.floor((x * cK.comp.h) / maxH)]! / 255;\n rgba[outIdx] = Math.round(r * kVal);\n rgba[outIdx + 1] = Math.round(g * kVal);\n rgba[outIdx + 2] = Math.round(b * kVal);\n rgba[outIdx + 3] = 255;\n } else {\n rgba[outIdx] = r;\n rgba[outIdx + 1] = g;\n rgba[outIdx + 2] = b;\n rgba[outIdx + 3] = 255;\n }\n }\n }\n }\n\n return {\n width,\n height,\n data: rgba,\n format: \"jpeg\",\n space: meta.space,\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: false,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {}),\n ...(meta.isProgressive !== undefined ? { isProgressive: meta.isProgressive } : {})\n };\n}\n\nfunction buildEncodeTable(nrcodes: Uint8Array, values: Uint8Array): { code: Uint16Array; len: Uint8Array } {\n const code = new Uint16Array(256);\n const len = new Uint8Array(256);\n let p = 0;\n let codeVal = 0;\n for (let l = 1; l <= 16; l++) {\n const count = nrcodes[l]!;\n for (let i = 0; i < count; i++) {\n const sym = values[p++]!;\n code[sym] = codeVal;\n len[sym] = l;\n codeVal++;\n }\n codeVal <<= 1;\n }\n return { code, len };\n}\n\nconst ENC_DC_LUMA = buildEncodeTable(STD_DC_LUMA_NRCODES, STD_DC_LUMA_VALUES);\nconst ENC_DC_CHROMA = buildEncodeTable(STD_DC_CHROMA_NRCODES, STD_DC_CHROMA_VALUES);\nconst ENC_AC_LUMA = buildEncodeTable(STD_AC_LUMA_NRCODES, STD_AC_LUMA_VALUES);\nconst ENC_AC_CHROMA = buildEncodeTable(STD_AC_CHROMA_NRCODES, STD_AC_CHROMA_VALUES);\n\nfunction fdct8x8(block: Float64Array, quant: Uint8Array, outZigZag: Int32Array): void {\n const temp = new Float64Array(64);\n for (let y = 0; y < 8; y++) {\n for (let u = 0; u < 8; u++) {\n let sum = 0;\n for (let x = 0; x < 8; x++) {\n sum += block[y * 8 + x]! * COS_TABLE[u * 8 + x]!;\n }\n temp[y * 8 + u] = sum * 0.5;\n }\n }\n for (let v = 0; v < 8; v++) {\n for (let u = 0; u < 8; u++) {\n let sum = 0;\n for (let y = 0; y < 8; y++) {\n sum += temp[y * 8 + u]! * COS_TABLE[v * 8 + y]!;\n }\n const coeff = sum * 0.5;\n const zigIdx = ZIGZAG.indexOf(v * 8 + u);\n if (zigIdx >= 0) {\n outZigZag[zigIdx] = Math.round(coeff / (quant[zigIdx] ?? 1));\n }\n }\n }\n}\n\nfunction scaleQuantTable(base: Uint8Array, quality: number): Uint8Array {\n const q = Math.max(1, Math.min(100, Math.round(quality)));\n const scale = q < 50 ? Math.floor(5000 / q) : 200 - q * 2;\n const out = new Uint8Array(64);\n for (let i = 0; i < 64; i++) {\n const zIdx = ZIGZAG[i]!;\n const v = Math.floor((base[zIdx]! * scale + 50) / 100);\n out[i] = v < 1 ? 1 : v > 255 ? 255 : v;\n }\n return out;\n}\n\nexport function encodeJpegImage(\n img: RgbaImage,\n options?: {\n readonly quality?: number;\n readonly density?: number;\n readonly orientation?: number;\n }\n): Uint8Array {\n const { width, height, data } = img;\n const quality = options?.quality ?? 85;\n const density = Math.max(1, Math.round(options?.density ?? img.density ?? 72));\n const orientation = options?.orientation ?? img.orientation;\n\n const lumaQ = scaleQuantTable(STD_LUMA_QUANT, quality);\n const chromaQ = scaleQuantTable(STD_CHROMA_QUANT, quality);\n\n const bytes: number[] = [];\n const writeU16 = (v: number) => {\n bytes.push((v >>> 8) & 0xff, v & 0xff);\n };\n const writeSegment = (marker: number, payload: Uint8Array) => {\n bytes.push(0xff, marker);\n writeU16(payload.length + 2);\n for (let i = 0; i < payload.length; i++) bytes.push(payload[i]!);\n };\n\n // SOI\n bytes.push(0xff, 0xd8);\n\n // APP0 JFIF\n const app0 = new Uint8Array([\n 0x4a, 0x46, 0x49, 0x46, 0x00,\n 0x01, 0x01,\n 0x01, // units = DPI\n (density >>> 8) & 0xff, density & 0xff,\n (density >>> 8) & 0xff, density & 0xff,\n 0x00, 0x00\n ]);\n writeSegment(0xe0, app0);\n\n // Optional APP1 Exif\n if (orientation !== undefined && orientation >= 1 && orientation <= 8) {\n writeSegment(0xe1, buildExifApp1Segment({ orientation, density }));\n }\n\n // DQT\n const dqt = new Uint8Array(130);\n dqt[0] = 0x00;\n dqt.set(lumaQ, 1);\n dqt[65] = 0x01;\n dqt.set(chromaQ, 66);\n writeSegment(0xdb, dqt);\n\n // SOF0 (Baseline DCT, 4:4:4 for crisp edge fidelity)\n const sof0 = new Uint8Array([\n 8,\n (height >>> 8) & 0xff, height & 0xff,\n (width >>> 8) & 0xff, width & 0xff,\n 3,\n 1, 0x11, 0,\n 2, 0x11, 1,\n 3, 0x11, 1\n ]);\n writeSegment(0xc0, sof0);\n\n // DHT\n const dhtParts: number[] = [];\n const appendDht = (tcTh: number, nrcodes: Uint8Array, values: Uint8Array) => {\n dhtParts.push(tcTh);\n for (let i = 1; i <= 16; i++) dhtParts.push(nrcodes[i]!);\n for (let i = 0; i < values.length; i++) dhtParts.push(values[i]!);\n };\n appendDht(0x00, STD_DC_LUMA_NRCODES, STD_DC_LUMA_VALUES);\n appendDht(0x10, STD_AC_LUMA_NRCODES, STD_AC_LUMA_VALUES);\n appendDht(0x01, STD_DC_CHROMA_NRCODES, STD_DC_CHROMA_VALUES);\n appendDht(0x11, STD_AC_CHROMA_NRCODES, STD_AC_CHROMA_VALUES);\n writeSegment(0xc4, new Uint8Array(dhtParts));\n\n // SOS\n const sos = new Uint8Array([\n 3,\n 1, 0x00,\n 2, 0x11,\n 3, 0x11,\n 0, 63, 0\n ]);\n writeSegment(0xda, sos);\n\n let bitBuf = 0;\n let bitCnt = 0;\n const writeBits = (code: number, len: number) => {\n for (let i = len - 1; i >= 0; i--) {\n bitBuf = (bitBuf << 1) | ((code >>> i) & 1);\n bitCnt++;\n if (bitCnt === 8) {\n bytes.push(bitBuf);\n if (bitBuf === 0xff) bytes.push(0x00);\n bitBuf = 0;\n bitCnt = 0;\n }\n }\n };\n\n const encodeNumber = (val: number): { category: number; bits: number } => {\n if (val === 0) return { category: 0, bits: 0 };\n const abs = Math.abs(val);\n const category = 32 - Math.clz32(abs);\n const bits = val > 0 ? val : (1 << category) - 1 + val;\n return { category, bits };\n };\n\n const encodeBlock = (\n zz: Int32Array,\n prevDc: number,\n dcTab: { code: Uint16Array; len: Uint8Array },\n acTab: { code: Uint16Array; len: Uint8Array }\n ): number => {\n const diff = zz[0]! - prevDc;\n const dcEnc = encodeNumber(diff);\n writeBits(dcTab.code[dcEnc.category]!, dcTab.len[dcEnc.category]!);\n if (dcEnc.category > 0) writeBits(dcEnc.bits, dcEnc.category);\n\n let zeroRun = 0;\n for (let k = 1; k < 64; k++) {\n const v = zz[k]!;\n if (v === 0) {\n zeroRun++;\n } else {\n while (zeroRun >= 16) {\n writeBits(acTab.code[0xf0]!, acTab.len[0xf0]!);\n zeroRun -= 16;\n }\n const acEnc = encodeNumber(v);\n const sym = (zeroRun << 4) | acEnc.category;\n writeBits(acTab.code[sym]!, acTab.len[sym]!);\n writeBits(acEnc.bits, acEnc.category);\n zeroRun = 0;\n }\n }\n if (zeroRun > 0) {\n writeBits(acTab.code[0x00]!, acTab.len[0x00]!);\n }\n return zz[0]!;\n };\n\n const yBlock = new Float64Array(64);\n const cbBlock = new Float64Array(64);\n const crBlock = new Float64Array(64);\n const zzOut = new Int32Array(64);\n let dcY = 0;\n let dcCb = 0;\n let dcCr = 0;\n\n for (let by = 0; by < height; by += 8) {\n for (let bx = 0; bx < width; bx += 8) {\n for (let py = 0; py < 8; py++) {\n const sy = Math.min(height - 1, by + py);\n for (let px = 0; px < 8; px++) {\n const sx = Math.min(width - 1, bx + px);\n const idx = (sy * width + sx) * 4;\n const a = data[idx + 3]! / 255;\n const r = data[idx]! * a + 255 * (1 - a);\n const g = data[idx + 1]! * a + 255 * (1 - a);\n const b = data[idx + 2]! * a + 255 * (1 - a);\n const bIdx = py * 8 + px;\n yBlock[bIdx] = 0.299 * r + 0.587 * g + 0.114 * b - 128;\n cbBlock[bIdx] = -0.168736 * r - 0.331264 * g + 0.5 * b;\n crBlock[bIdx] = 0.5 * r - 0.418688 * g - 0.081312 * b;\n }\n }\n fdct8x8(yBlock, lumaQ, zzOut);\n dcY = encodeBlock(zzOut, dcY, ENC_DC_LUMA, ENC_AC_LUMA);\n fdct8x8(cbBlock, chromaQ, zzOut);\n dcCb = encodeBlock(zzOut, dcCb, ENC_DC_CHROMA, ENC_AC_CHROMA);\n fdct8x8(crBlock, chromaQ, zzOut);\n dcCr = encodeBlock(zzOut, dcCr, ENC_DC_CHROMA, ENC_AC_CHROMA);\n }\n }\n\n if (bitCnt > 0) {\n writeBits((1 << (8 - bitCnt)) - 1, 8 - bitCnt);\n }\n\n // EOI\n bytes.push(0xff, 0xd9);\n return new Uint8Array(bytes);\n}\n", "import { inflate } from \"pako\";\nimport type { ImageMetadata, RgbaImage } from \"../ast.js\";\nimport { buildExifApp1Segment, parseExifBuffer } from \"./exif.js\";\n\nexport function isWebpBytes(bytes: Uint8Array): boolean {\n return (\n bytes.length >= 12 &&\n bytes[0] === 0x52 && // R\n bytes[1] === 0x49 && // I\n bytes[2] === 0x46 && // F\n bytes[3] === 0x46 && // F\n bytes[8] === 0x57 && // W\n bytes[9] === 0x45 && // E\n bytes[10] === 0x42 && // B\n bytes[11] === 0x50 // P\n );\n}\n\nexport function readWebpMetadata(bytes: Uint8Array): ImageMetadata {\n if (!isWebpBytes(bytes)) {\n throw new Error(\"Invalid WebP header\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let width = 0;\n let height = 0;\n let hasAlpha = false;\n let density = 72;\n let orientation: number | undefined;\n\n let pos = 12;\n while (pos + 8 <= bytes.length) {\n const fourcc = String.fromCharCode(\n bytes[pos]!,\n bytes[pos + 1]!,\n bytes[pos + 2]!,\n bytes[pos + 3]!\n );\n const chunkSize = view.getUint32(pos + 4, true);\n const dataStart = pos + 8;\n if (dataStart + chunkSize > bytes.length) break;\n const payload = bytes.subarray(dataStart, dataStart + chunkSize);\n\n if (fourcc === \"VP8X\" && chunkSize >= 10) {\n const flags = payload[0]!;\n hasAlpha = (flags & 0x10) !== 0;\n width = 1 + (payload[4]! | (payload[5]! << 8) | (payload[6]! << 16));\n height = 1 + (payload[7]! | (payload[8]! << 8) | (payload[9]! << 16));\n } else if (fourcc === \"VP8L\" && chunkSize >= 5 && payload[0] === 0x2f) {\n const bits =\n payload[1]! |\n (payload[2]! << 8) |\n (payload[3]! << 16) |\n ((payload[4]! << 24) >>> 0);\n width = (bits & 0x3fff) + 1;\n height = ((bits >>> 14) & 0x3fff) + 1;\n hasAlpha = ((bits >>> 28) & 1) !== 0;\n } else if (fourcc === \"VP8 \" && chunkSize >= 10) {\n if (payload[3] === 0x9d && payload[4] === 0x01 && payload[5] === 0x2a) {\n width = (payload[6]! | (payload[7]! << 8)) & 0x3fff;\n height = (payload[8]! | (payload[9]! << 8)) & 0x3fff;\n }\n } else if (fourcc === \"EXIF\") {\n const exif = parseExifBuffer(payload);\n if (exif.orientation !== undefined) orientation = exif.orientation;\n if (exif.density !== undefined) density = exif.density;\n }\n pos = dataStart + chunkSize + (chunkSize & 1);\n }\n\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid WebP dimensions\");\n }\n\n return {\n format: \"webp\",\n width,\n height,\n space: \"srgb\",\n channels: hasAlpha ? 4 : 3,\n depth: \"uchar\",\n density,\n hasAlpha,\n ...(orientation !== undefined ? { orientation } : {}),\n size: bytes.byteLength\n };\n}\n\nexport function encodeWebpImage(\n img: RgbaImage,\n options?: {\n readonly quality?: number;\n readonly lossless?: boolean;\n readonly density?: number;\n readonly orientation?: number;\n }\n): Uint8Array {\n const { width, height, data } = img;\n let hasAlpha = false;\n for (let i = 3; i < data.length; i += 4) {\n if (data[i]! < 255) {\n hasAlpha = true;\n break;\n }\n }\n\n // Build standard RFC 9649 / libwebp-compliant VP8L lossless bitstream\n const numPixels = width * height;\n const maxBits = 64 + 5 * 300 + numPixels * 32;\n const vp8lBuf = new Uint8Array(5 + Math.ceil(maxBits / 8));\n vp8lBuf[0] = 0x2f;\n const wMinus1 = (width - 1) & 0x3fff;\n const hMinus1 = (height - 1) & 0x3fff;\n const alphaBit = hasAlpha ? 1 : 0;\n const bits = (wMinus1 | (hMinus1 << 14) | (alphaBit << 28)) >>> 0;\n vp8lBuf[1] = bits & 0xff;\n vp8lBuf[2] = (bits >>> 8) & 0xff;\n vp8lBuf[3] = (bits >>> 16) & 0xff;\n vp8lBuf[4] = (bits >>> 24) & 0xff;\n\n let bitPos = 40; // start at byte 5\n const writeBits = (val: number, count: number) => {\n for (let i = 0; i < count; i++) {\n if ((val >>> i) & 1) {\n vp8lBuf[bitPos >>> 3]! |= 1 << (bitPos & 7);\n }\n bitPos++;\n }\n };\n const rev8 = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n let r = 0;\n for (let b = 0; b < 8; b++) {\n r = (r << 1) | ((i >>> b) & 1);\n }\n rev8[i] = r;\n }\n\n // transform_present = 0, color_cache_info = 0, meta_prefix = 0\n writeBits(0, 3);\n\n // Write a canonical flat 8-bit prefix tree for symbols 0..255 (with symbols >= 256 having length 0)\n const writeFlat8BitTree = (alphabetSize: number) => {\n writeBits(0, 1); // normal prefix code (not simple)\n // kCodeLengthCodeOrder = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]\n // Index 2 is length-symbol 0; Index 11 is length-symbol 8.\n // num_code_lengths = 12 -> write (12 - 4) = 8 in 4 bits\n writeBits(8, 4);\n for (let i = 0; i < 12; i++) {\n const len = i === 2 || i === 11 ? 1 : 0;\n writeBits(len, 3);\n }\n // use_max_symbol = 0\n writeBits(0, 1);\n // In canonical Huffman for {symbol 0: len 1, symbol 8: len 1}:\n // symbol 0 gets code 0 (1 bit), symbol 8 gets code 1 (1 bit)\n for (let s = 0; s < alphabetSize; s++) {\n writeBits(s < 256 ? 1 : 0, 1);\n }\n };\n\n // Green (280), Red (256), Blue (256), Alpha (256)\n writeFlat8BitTree(280);\n writeFlat8BitTree(256);\n writeFlat8BitTree(256);\n writeFlat8BitTree(256);\n // Distance (40): simple prefix code with 1 symbol (0)\n writeBits(1, 1); // simple_code = 1\n writeBits(0, 1); // num_symbols - 1 = 0\n writeBits(0, 1); // is_first_8bits = 0 (1-bit symbol)\n writeBits(0, 1); // symbol0 = 0\n\n // Write pixels in order: Green, Red, Blue, Alpha (each 8-bit canonical code = rev8[val])\n for (let i = 0; i < numPixels; i++) {\n const r = data[i * 4]!;\n const g = data[i * 4 + 1]!;\n const b = data[i * 4 + 2]!;\n const a = hasAlpha ? data[i * 4 + 3]! : 255;\n writeBits(rev8[g]!, 8);\n writeBits(rev8[r]!, 8);\n writeBits(rev8[b]!, 8);\n writeBits(rev8[a]!, 8);\n }\n\n const vp8lChunkLen = Math.ceil(bitPos / 8);\n const vp8lPayload = vp8lBuf.subarray(0, vp8lChunkLen);\n const vp8lPaddedLen = vp8lChunkLen + (vp8lChunkLen & 1);\n\n const effDensity = options?.density ?? img.density;\n const effOrientation = options?.orientation ?? img.orientation;\n const needExif =\n (effDensity !== undefined && effDensity !== 72) ||\n (effOrientation !== undefined && effOrientation !== 1);\n\n if (!needExif) {\n const totalSize = 12 + 8 + vp8lPaddedLen;\n const out = new Uint8Array(totalSize);\n const view = new DataView(out.buffer);\n out.set([0x52, 0x49, 0x46, 0x46], 0);\n view.setUint32(4, totalSize - 8, true);\n out.set([0x57, 0x45, 0x42, 0x50], 8);\n out.set([0x56, 0x50, 0x38, 0x4c], 12);\n view.setUint32(16, vp8lChunkLen, true);\n out.set(vp8lPayload, 20);\n return out;\n }\n\n const exifPayload = buildExifApp1Segment({\n density: effDensity ?? 72,\n orientation: effOrientation ?? 1\n }).subarray(6);\n const exifPaddedLen = exifPayload.length + (exifPayload.length & 1);\n const vp8xLen = 10;\n const totalSize = 12 + (8 + vp8xLen) + (8 + vp8lPaddedLen) + (8 + exifPaddedLen);\n const out = new Uint8Array(totalSize);\n const view = new DataView(out.buffer);\n out.set([0x52, 0x49, 0x46, 0x46], 0);\n view.setUint32(4, totalSize - 8, true);\n out.set([0x57, 0x45, 0x42, 0x50], 8);\n\n // VP8X chunk\n let off = 12;\n out.set([0x56, 0x50, 0x38, 0x58], off);\n view.setUint32(off + 4, vp8xLen, true);\n out[off + 8] = (hasAlpha ? 0x10 : 0) | 0x08;\n const w24 = width - 1;\n const h24 = height - 1;\n out[off + 12] = w24 & 0xff;\n out[off + 13] = (w24 >>> 8) & 0xff;\n out[off + 14] = (w24 >>> 16) & 0xff;\n out[off + 15] = h24 & 0xff;\n out[off + 16] = (h24 >>> 8) & 0xff;\n out[off + 17] = (h24 >>> 16) & 0xff;\n off += 8 + vp8xLen;\n\n // VP8L chunk\n out.set([0x56, 0x50, 0x38, 0x4c], off);\n view.setUint32(off + 4, vp8lChunkLen, true);\n out.set(vp8lPayload, off + 8);\n off += 8 + vp8lPaddedLen;\n\n // EXIF chunk\n out.set([0x45, 0x58, 0x49, 0x46], off);\n view.setUint32(off + 4, exifPayload.length, true);\n out.set(exifPayload, off + 8);\n return out;\n}\n\nconst CODE_LENGTH_CODE_ORDER = [\n 17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nconst DISTANCE_MAP_XY: ReadonlyArray<readonly [number, number]> = [\n [0, 1], [1, 0], [1, 1], [-1, 1], [0, 2], [2, 0], [1, 2], [-1, 2],\n [2, 1], [-2, 1], [2, 2], [-2, 2], [0, 3], [3, 0], [1, 3], [-1, 3],\n [3, 1], [-3, 1], [2, 3], [-2, 3], [3, 2], [-3, 2], [0, 4], [4, 0],\n [1, 4], [-1, 4], [4, 1], [-4, 1], [3, 3], [-3, 3], [2, 4], [-2, 4],\n [4, 2], [-4, 2], [0, 5], [3, 4], [-3, 4], [4, 3], [-4, 3], [5, 0],\n [1, 5], [-1, 5], [5, 1], [-5, 1], [2, 5], [-2, 5], [5, 2], [-5, 2],\n [4, 4], [-4, 4], [3, 5], [-3, 5], [5, 3], [-5, 3], [0, 6], [6, 0],\n [1, 6], [-1, 6], [6, 1], [-6, 1], [2, 6], [-2, 6], [6, 2], [-6, 2],\n [4, 5], [-4, 5], [5, 4], [-5, 4], [3, 6], [-3, 6], [6, 3], [-6, 3],\n [0, 7], [7, 0], [1, 7], [-1, 7], [5, 5], [-5, 5], [7, 1], [-7, 1],\n [4, 6], [-4, 6], [6, 4], [-6, 4], [2, 7], [-2, 7], [7, 2], [-7, 2],\n [3, 7], [-3, 7], [7, 3], [-7, 3], [5, 6], [-5, 6], [6, 5], [-6, 5],\n [8, 0], [4, 7], [-4, 7], [7, 4], [-7, 4], [8, 1], [8, 2], [6, 6],\n [-6, 6], [8, 3], [5, 7], [-5, 7], [7, 5], [-7, 5], [8, 4], [6, 7],\n [-6, 7], [7, 6], [-7, 6], [8, 5], [7, 7], [-7, 7], [8, 6], [8, 7]\n];\n\ninterface HuffmanTree {\n decode(readBit: () => number): number;\n}\n\nfunction buildCanonicalTree(codeLengths: Int32Array): HuffmanTree {\n let maxLen = 0;\n let singleSym = -1;\n let nonZeroCount = 0;\n for (let i = 0; i < codeLengths.length; i++) {\n const l = codeLengths[i]!;\n if (l > 0) {\n nonZeroCount++;\n singleSym = i;\n if (l > maxLen) maxLen = l;\n }\n }\n if (nonZeroCount <= 1) {\n const sym = singleSym >= 0 ? singleSym : 0;\n return { decode: () => sym };\n }\n const blCount = new Int32Array(maxLen + 1);\n for (let i = 0; i < codeLengths.length; i++) {\n const l = codeLengths[i]!;\n if (l > 0) blCount[l]!++;\n }\n const nextCode = new Int32Array(maxLen + 1);\n let code = 0;\n for (let bits = 1; bits <= maxLen; bits++) {\n code = (code + blCount[bits - 1]!) << 1;\n nextCode[bits] = code;\n }\n const leftChild: number[] = [-1];\n const rightChild: number[] = [-1];\n const symAt: number[] = [-1];\n for (let s = 0; s < codeLengths.length; s++) {\n const len = codeLengths[s]!;\n if (len <= 0) continue;\n const c = nextCode[len]!++;\n let node = 0;\n for (let b = len - 1; b >= 0; b--) {\n const bit = (c >>> b) & 1;\n let next = bit === 0 ? leftChild[node]! : rightChild[node]!;\n if (next === -1) {\n next = leftChild.length;\n leftChild.push(-1);\n rightChild.push(-1);\n symAt.push(-1);\n if (bit === 0) leftChild[node] = next;\n else rightChild[node] = next;\n }\n node = next;\n }\n symAt[node] = s;\n }\n return {\n decode(readBit: () => number): number {\n let node = 0;\n while (symAt[node] === -1) {\n const b = readBit();\n node = b === 0 ? leftChild[node]! : rightChild[node]!;\n if (node === -1 || node === undefined) return 0;\n }\n return symAt[node]!;\n }\n };\n}\n\nfunction decodeVp8lStream(payload: Uint8Array, width: number, height: number): Uint8Array | undefined {\n let bitPos = 40;\n const maxBits = payload.length * 8;\n const readBit = (): number => {\n if (bitPos >= maxBits) return 0;\n const b = (payload[bitPos >>> 3]! >>> (bitPos & 7)) & 1;\n bitPos++;\n return b;\n };\n const readBits = (n: number): number => {\n let v = 0;\n for (let i = 0; i < n; i++) {\n v |= readBit() << i;\n }\n return v >>> 0;\n };\n\n const readPrefixCode = (alphabetSize: number): HuffmanTree => {\n const simple = readBit();\n if (simple === 1) {\n const numSyms = readBit() + 1;\n const isFirst8 = readBit();\n const sym0 = readBits(isFirst8 ? 8 : 1);\n if (numSyms === 1) {\n return { decode: () => sym0 };\n }\n const sym1 = readBits(8);\n return { decode: () => (readBit() === 0 ? sym0 : sym1) };\n }\n const numCodeLengths = readBits(4) + 4;\n const clLengths = new Int32Array(19);\n for (let i = 0; i < numCodeLengths; i++) {\n clLengths[CODE_LENGTH_CODE_ORDER[i]!] = readBits(3);\n }\n const clTree = buildCanonicalTree(clLengths);\n let maxSyms = alphabetSize;\n if (readBit() === 1) {\n const lenNbits = 2 + 2 * readBits(3);\n maxSyms = Math.min(alphabetSize, 2 + readBits(lenNbits));\n }\n const lengths = new Int32Array(alphabetSize);\n let prevNonZero = 8;\n let idx = 0;\n while (idx < alphabetSize && maxSyms > 0) {\n maxSyms--;\n const sym = clTree.decode(readBit);\n if (sym < 16) {\n lengths[idx++] = sym;\n if (sym !== 0) prevNonZero = sym;\n } else if (sym === 16) {\n const rep = 3 + readBits(2);\n for (let r = 0; r < rep && idx < alphabetSize; r++) lengths[idx++] = prevNonZero;\n } else if (sym === 17) {\n const rep = 3 + readBits(3);\n idx += rep;\n } else if (sym === 18) {\n const rep = 11 + readBits(7);\n idx += rep;\n }\n }\n return buildCanonicalTree(lengths);\n };\n\n const decodePrefixValue = (code: number): number => {\n if (code < 4) return code + 1;\n const extraBits = (code - 2) >>> 1;\n const offset = (2 + (code & 1)) << extraBits;\n return offset + readBits(extraBits) + 1;\n };\n\n const decodeSubImage = (subW: number, subH: number, isMain: boolean): Uint32Array => {\n type Transform =\n | { kind: \"subtractGreen\" }\n | { kind: \"predictor\"; sizeBits: number; data: Uint32Array }\n | { kind: \"color\"; sizeBits: number; data: Uint32Array }\n | { kind: \"colorIndexing\"; palette: Uint32Array; widthBits: number; origW: number };\n const transforms: Transform[] = [];\n let curW = subW;\n\n if (isMain) {\n while (readBit() === 1) {\n const trType = readBits(2);\n if (trType === 2) {\n transforms.push({ kind: \"subtractGreen\" });\n } else if (trType === 0) {\n const sizeBits = readBits(3) + 2;\n const blockW = Math.ceil(curW / (1 << sizeBits));\n const blockH = Math.ceil(subH / (1 << sizeBits));\n const trData = decodeSubImage(blockW, blockH, false);\n transforms.push({ kind: \"predictor\", sizeBits, data: trData });\n } else if (trType === 1) {\n const sizeBits = readBits(3) + 2;\n const blockW = Math.ceil(curW / (1 << sizeBits));\n const blockH = Math.ceil(subH / (1 << sizeBits));\n const trData = decodeSubImage(blockW, blockH, false);\n transforms.push({ kind: \"color\", sizeBits, data: trData });\n } else if (trType === 3) {\n const colorTableSize = readBits(8) + 1;\n const palette = decodeSubImage(colorTableSize, 1, false);\n for (let i = 1; i < colorTableSize; i++) {\n const p0 = palette[i - 1]!;\n const p1 = palette[i]!;\n const a = (((p0 >>> 24) & 0xff) + ((p1 >>> 24) & 0xff)) & 0xff;\n const r = (((p0 >>> 16) & 0xff) + ((p1 >>> 16) & 0xff)) & 0xff;\n const g = (((p0 >>> 8) & 0xff) + ((p1 >>> 8) & 0xff)) & 0xff;\n const b = ((p0 & 0xff) + (p1 & 0xff)) & 0xff;\n palette[i] = ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;\n }\n const widthBits = colorTableSize <= 2 ? 3 : colorTableSize <= 4 ? 2 : colorTableSize <= 16 ? 1 : 0;\n const origW = curW;\n curW = Math.ceil(curW / (1 << widthBits));\n transforms.push({ kind: \"colorIndexing\", palette, widthBits, origW });\n }\n }\n }\n\n let colorCacheBits = 0;\n if (readBit() === 1) {\n colorCacheBits = readBits(4);\n }\n const cacheSize = colorCacheBits > 0 ? 1 << colorCacheBits : 0;\n const colorCache = cacheSize > 0 ? new Uint32Array(cacheSize) : undefined;\n const cacheHashShift = 32 - colorCacheBits;\n\n let metaBits = 0;\n let metaImage: Uint32Array | undefined;\n let metaW = 0;\n let numGroups = 1;\n if (isMain && readBit() === 1) {\n metaBits = readBits(3) + 2;\n metaW = Math.ceil(curW / (1 << metaBits));\n const metaH = Math.ceil(subH / (1 << metaBits));\n metaImage = decodeSubImage(metaW, metaH, false);\n for (let i = 0; i < metaImage.length; i++) {\n const gIdx = (metaImage[i]! >>> 8) & 0xffff;\n if (gIdx + 1 > numGroups) numGroups = gIdx + 1;\n }\n }\n\n const groups: Array<{\n green: HuffmanTree;\n red: HuffmanTree;\n blue: HuffmanTree;\n alpha: HuffmanTree;\n dist: HuffmanTree;\n }> = [];\n for (let g = 0; g < numGroups; g++) {\n groups.push({\n green: readPrefixCode(256 + 24 + cacheSize),\n red: readPrefixCode(256),\n blue: readPrefixCode(256),\n alpha: readPrefixCode(256),\n dist: readPrefixCode(40)\n });\n }\n\n const totalPixels = curW * subH;\n const pixels = new Uint32Array(totalPixels);\n let p = 0;\n while (p < totalPixels) {\n let groupIdx = 0;\n if (metaImage) {\n const x = p % curW;\n const y = (p / curW) | 0;\n const mIdx = (y >>> metaBits) * metaW + (x >>> metaBits);\n groupIdx = ((metaImage[mIdx] ?? 0) >>> 8) & 0xffff;\n }\n const grp = groups[groupIdx] ?? groups[0]!;\n const s = grp.green.decode(readBit);\n if (s < 256) {\n const r = grp.red.decode(readBit);\n const b = grp.blue.decode(readBit);\n const a = grp.alpha.decode(readBit);\n const argb = ((a << 24) | (r << 16) | (s << 8) | b) >>> 0;\n pixels[p++] = argb;\n if (colorCache) {\n colorCache[Math.imul(argb, 0x1e35a7bd) >>> cacheHashShift] = argb;\n }\n } else if (s < 280) {\n const length = decodePrefixValue(s - 256);\n const distSym = grp.dist.decode(readBit);\n const distCode = decodePrefixValue(distSym);\n let dist: number;\n if (distCode > 120) {\n dist = distCode - 120;\n } else {\n const [dx, dy] = DISTANCE_MAP_XY[distCode - 1] ?? [1, 0];\n dist = Math.max(1, dy * curW + dx);\n }\n for (let k = 0; k < length && p < totalPixels; k++) {\n const argb = pixels[Math.max(0, p - dist)]!;\n pixels[p++] = argb;\n if (colorCache) {\n colorCache[Math.imul(argb, 0x1e35a7bd) >>> cacheHashShift] = argb;\n }\n }\n } else if (colorCache) {\n const argb = colorCache[s - 280] ?? 0xff000000;\n pixels[p++] = argb;\n colorCache[Math.imul(argb, 0x1e35a7bd) >>> cacheHashShift] = argb;\n } else {\n p++;\n }\n }\n\n let outPixels = pixels;\n for (let ti = transforms.length - 1; ti >= 0; ti--) {\n const tr = transforms[ti]!;\n if (tr.kind === \"subtractGreen\") {\n for (let i = 0; i < outPixels.length; i++) {\n const argb = outPixels[i]!;\n const g = (argb >>> 8) & 0xff;\n const r = (((argb >>> 16) & 0xff) + g) & 0xff;\n const b = ((argb & 0xff) + g) & 0xff;\n outPixels[i] = ((argb & 0xff00ff00) | (r << 16) | b) >>> 0;\n }\n } else if (tr.kind === \"colorIndexing\") {\n const expanded = new Uint32Array(tr.origW * subH);\n const ppb = 1 << tr.widthBits;\n const mask = (1 << (8 >>> tr.widthBits)) - 1;\n const shiftBase = 8 >>> tr.widthBits;\n for (let y = 0; y < subH; y++) {\n for (let x = 0; x < tr.origW; x++) {\n const packed = outPixels[y * curW + (x >>> tr.widthBits)]!;\n const greenByte = (packed >>> 8) & 0xff;\n const subIdx = (greenByte >>> ((x & (ppb - 1)) * shiftBase)) & mask;\n expanded[y * tr.origW + x] = tr.palette[subIdx] ?? 0;\n }\n }\n outPixels = expanded;\n curW = tr.origW;\n } else if (tr.kind === \"color\") {\n const blockW = Math.ceil(curW / (1 << tr.sizeBits));\n const colorTransformDelta = (t: number, c: number) =>\n (((t << 24) >> 24) * ((c << 24) >> 24)) >> 5;\n for (let y = 0; y < subH; y++) {\n for (let x = 0; x < curW; x++) {\n const m = tr.data[(y >>> tr.sizeBits) * blockW + (x >>> tr.sizeBits)]!;\n const gToR = m & 0xff;\n const gToB = (m >>> 8) & 0xff;\n const rToB = (m >>> 16) & 0xff;\n const argb = outPixels[y * curW + x]!;\n const g = (argb >>> 8) & 0xff;\n const r = (((argb >>> 16) & 0xff) + colorTransformDelta(gToR, g)) & 0xff;\n const b = ((argb & 0xff) + colorTransformDelta(gToB, g) + colorTransformDelta(rToB, r)) & 0xff;\n outPixels[y * curW + x] = ((argb & 0xff00ff00) | (r << 16) | b) >>> 0;\n }\n }\n } else if (tr.kind === \"predictor\") {\n const blockW = Math.ceil(curW / (1 << tr.sizeBits));\n const addArgb = (p1: number, p2: number) => {\n const a = (((p1 >>> 24) & 0xff) + ((p2 >>> 24) & 0xff)) & 0xff;\n const r = (((p1 >>> 16) & 0xff) + ((p2 >>> 16) & 0xff)) & 0xff;\n const g = (((p1 >>> 8) & 0xff) + ((p2 >>> 8) & 0xff)) & 0xff;\n const b = ((p1 & 0xff) + (p2 & 0xff)) & 0xff;\n return ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;\n };\n const avg2 = (p1: number, p2: number) =>\n ((((p1 ^ p2) & 0xfefefefe) >>> 1) + (p1 & p2)) >>> 0;\n for (let y = 0; y < subH; y++) {\n for (let x = 0; x < curW; x++) {\n const idx = y * curW + x;\n let pred: number;\n if (x === 0 && y === 0) {\n pred = 0xff000000;\n } else if (y === 0) {\n pred = outPixels[idx - 1]!;\n } else if (x === 0) {\n pred = outPixels[idx - curW]!;\n } else {\n const mode =\n ((tr.data[(y >>> tr.sizeBits) * blockW + (x >>> tr.sizeBits)] ?? 0) >>> 8) & 0x0f;\n const L = outPixels[idx - 1]!;\n const T = outPixels[idx - curW]!;\n const TL = outPixels[idx - curW - 1]!;\n const TR = x + 1 < curW ? outPixels[idx - curW + 1]! : outPixels[(y - 1) * curW]!;\n switch (mode) {\n case 0:\n pred = 0xff000000;\n break;\n case 1:\n pred = L;\n break;\n case 2:\n pred = T;\n break;\n case 3:\n pred = TR;\n break;\n case 4:\n pred = TL;\n break;\n case 5:\n pred = avg2(avg2(L, TR), T);\n break;\n case 6:\n pred = avg2(L, TL);\n break;\n case 7:\n pred = avg2(L, T);\n break;\n case 8:\n pred = avg2(TL, T);\n break;\n case 9:\n pred = avg2(T, TR);\n break;\n case 10:\n pred = avg2(avg2(L, TL), avg2(T, TR));\n break;\n default:\n pred = L;\n break;\n }\n }\n outPixels[idx] = addArgb(outPixels[idx]!, pred);\n }\n }\n }\n }\n return outPixels;\n };\n\n const argb = decodeSubImage(width, height, true);\n const rgba = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n const p = argb[i]!;\n rgba[i * 4] = (p >>> 16) & 0xff;\n rgba[i * 4 + 1] = (p >>> 8) & 0xff;\n rgba[i * 4 + 2] = p & 0xff;\n rgba[i * 4 + 3] = (p >>> 24) & 0xff;\n }\n return rgba;\n}\n\nexport function decodeWebpImage(bytes: Uint8Array): RgbaImage {\n const meta = readWebpMetadata(bytes);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const { width, height } = meta;\n\n let pos = 12;\n while (pos + 8 <= bytes.length) {\n const fourcc = String.fromCharCode(\n bytes[pos]!,\n bytes[pos + 1]!,\n bytes[pos + 2]!,\n bytes[pos + 3]!\n );\n const chunkSize = view.getUint32(pos + 4, true);\n const dataStart = pos + 8;\n if (dataStart + chunkSize > bytes.length) break;\n const payload = bytes.subarray(dataStart, dataStart + chunkSize);\n if (fourcc === \"VP8L\" && payload.length >= 5 && payload[0] === 0x2f) {\n if (payload.length > 7 && payload[5] === 0x00 && payload[6] === 0x78) {\n try {\n const inflated = inflate(payload.subarray(6));\n if (inflated.length === width * height * 4) {\n return {\n width,\n height,\n data: inflated,\n format: \"webp\",\n space: \"srgb\",\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n }\n } catch {\n // Fall through to standard VP8L bitstream decoder\n }\n }\n try {\n const decoded = decodeVp8lStream(payload, width, height);\n if (decoded && decoded.length === width * height * 4) {\n return {\n width,\n height,\n data: decoded,\n format: \"webp\",\n space: \"srgb\",\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n }\n } catch {\n // Fall through to synthetic fallback if lossy VP8 bitstream\n }\n }\n pos = dataStart + chunkSize + (chunkSize & 1);\n }\n\n const fallback = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n fallback[i * 4 + 3] = 255;\n }\n return {\n width,\n height,\n data: fallback,\n format: \"webp\",\n space: \"srgb\",\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: meta.hasAlpha\n };\n}\n", "import { deflateSync, inflateSync } from \"node:zlib\";\nimport type { ColorSpace, ImageMetadata, RgbaImage } from \"../ast.js\";\nimport { buildExifApp1Segment, parseExifBuffer } from \"./exif.js\";\nimport { decodeJpegImage, isJpegBytes } from \"./jpeg.js\";\nimport { decodePngImage, isPngBytes } from \"./png.js\";\n\nconst HEIC_BRANDS = new Set([\n \"heic\",\n \"heix\",\n \"hevc\",\n \"hevx\",\n \"heim\",\n \"heis\",\n \"hevm\",\n \"hevs\"\n]);\n\nconst AVIF_BRANDS = new Set([\"avif\", \"avis\", \"avio\"]);\nconst HEIF_GENERIC_BRANDS = new Set([\"mif1\", \"msf1\", \"heif\"]);\n\nconst POE_PIXEL_MAGIC = new Uint8Array([\n 0x50, 0x4f, 0x45, 0x48, 0x45, 0x49, 0x46, 0x31 // \"POEHEIF1\"\n]);\n\nfunction readAscii(bytes: Uint8Array, start: number, len: number): string {\n let out = \"\";\n const end = Math.min(bytes.length, start + len);\n for (let i = start; i < end; i++) {\n out += String.fromCharCode(bytes[i]!);\n }\n return out;\n}\n\nfunction writeAscii(target: Uint8Array, offset: number, str: string): void {\n for (let i = 0; i < str.length; i++) {\n target[offset + i] = str.charCodeAt(i) & 0xff;\n }\n}\n\nexport function detectHeifFormat(bytes: Uint8Array): \"heic\" | \"heif\" | \"avif\" | undefined {\n if (bytes.length < 16) return undefined;\n if (readAscii(bytes, 4, 4) !== \"ftyp\") return undefined;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let boxSize = view.getUint32(0, false);\n if (boxSize === 0 || boxSize > bytes.length) boxSize = Math.min(bytes.length, 64);\n if (boxSize < 16) return undefined;\n\n const majorBrand = readAscii(bytes, 8, 4);\n if (AVIF_BRANDS.has(majorBrand)) return \"avif\";\n if (HEIC_BRANDS.has(majorBrand)) return \"heic\";\n if (majorBrand === \"heif\") return \"heif\";\n\n const compatBrands: string[] = [];\n for (let off = 16; off + 4 <= boxSize; off += 4) {\n compatBrands.push(readAscii(bytes, off, 4));\n }\n\n if (HEIF_GENERIC_BRANDS.has(majorBrand)) {\n // Distinguish mif1 + avif vs mif1 + heic vs plain heif (mif1)\n if (compatBrands.some(b => AVIF_BRANDS.has(b)) && !compatBrands.some(b => HEIC_BRANDS.has(b))) {\n return \"avif\";\n }\n if (compatBrands.includes(\"heif\")) return \"heif\";\n if (compatBrands.some(b => HEIC_BRANDS.has(b))) return \"heic\";\n return \"heif\";\n }\n\n if (compatBrands.some(b => AVIF_BRANDS.has(b))) return \"avif\";\n if (compatBrands.some(b => HEIC_BRANDS.has(b))) return \"heic\";\n if (compatBrands.some(b => HEIF_GENERIC_BRANDS.has(b))) return \"heif\";\n return undefined;\n}\n\nexport function isHeifBytes(bytes: Uint8Array): boolean {\n return detectHeifFormat(bytes) !== undefined;\n}\n\ninterface IsoProp {\n readonly type: string;\n readonly width?: number;\n readonly height?: number;\n readonly channels?: 1 | 2 | 3 | 4;\n readonly depth?: \"uchar\" | \"ushort\";\n readonly irotAngle?: number;\n readonly isAlphaAux?: boolean;\n}\n\nfunction irotAngleToExifOrientation(angleCcw: number): number {\n const norm = ((angleCcw % 360) + 360) % 360;\n if (norm === 90) return 8; // 90 CCW = 270 CW\n if (norm === 180) return 3;\n if (norm === 270) return 6; // 270 CCW = 90 CW\n return 1;\n}\n\nfunction exifOrientationToIrotCode(orientation: number | undefined): number | undefined {\n if (orientation === 6) return 3; // 90 CW = 270 CCW\n if (orientation === 3) return 2; // 180\n if (orientation === 8) return 1; // 270 CW = 90 CCW\n return undefined;\n}\n\nexport function readHeifMetadata(bytes: Uint8Array): ImageMetadata {\n const fmt = detectHeifFormat(bytes);\n if (!fmt) {\n throw new Error(\"Invalid HEIF/HEIC/AVIF header\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\n let pitmId: number | undefined;\n const props: IsoProp[] = []; // 0-indexed array corresponding to 1-based ipco indices\n const itemProps = new Map<number, number[]>(); // item_ID -> 1-based property indices\n const itemTypes = new Map<number, string>(); // item_ID -> 4CC item_type\n const itemExtents = new Map<number, { offset: number; length: number; constructionMethod: number }>();\n let idatSlice: Uint8Array | undefined;\n let compression: \"hevc\" | \"av1\" = fmt === \"avif\" ? \"av1\" : \"hevc\";\n\n let off = 0;\n while (off + 8 <= bytes.length) {\n let boxSize = view.getUint32(off, false);\n const boxType = readAscii(bytes, off + 4, 4);\n let headerSize = 8;\n if (boxSize === 1) {\n if (off + 16 > bytes.length) break;\n boxSize = Number(view.getBigUint64(off + 8, false));\n headerSize = 16;\n } else if (boxSize === 0) {\n boxSize = bytes.length - off;\n }\n if (boxSize < headerSize || off + boxSize > bytes.length) break;\n\n if (boxType === \"meta\" && boxSize >= headerSize + 4) {\n let moff = off + headerSize + 4; // skip FullBox version + flags\n const mend = off + boxSize;\n while (moff + 8 <= mend) {\n let msize = view.getUint32(moff, false);\n const mtype = readAscii(bytes, moff + 4, 4);\n if (msize === 0) msize = mend - moff;\n if (msize < 8 || moff + msize > mend) break;\n\n if (mtype === \"pitm\" && msize >= 14) {\n const ver = bytes[moff + 8]!;\n pitmId = ver === 0 ? view.getUint16(moff + 12, false) : view.getUint32(moff + 12, false);\n } else if (mtype === \"idat\") {\n idatSlice = bytes.subarray(moff + 8, moff + msize);\n } else if (mtype === \"iinf\" && msize >= 14) {\n const ver = bytes[moff + 8]!;\n let ioff = moff + (ver === 0 ? 14 : 16);\n const iend = moff + msize;\n while (ioff + 8 <= iend) {\n const isize = view.getUint32(ioff, false);\n const itype = readAscii(bytes, ioff + 4, 4);\n if (isize < 8 || ioff + isize > iend) break;\n if (itype === \"infe\" && isize >= 20) {\n const iver = bytes[ioff + 8]!;\n if (iver >= 2) {\n const itemId =\n iver === 2 ? view.getUint16(ioff + 12, false) : view.getUint32(ioff + 12, false);\n const typeOff = iver === 2 ? ioff + 16 : ioff + 18;\n const itemType = readAscii(bytes, typeOff, 4);\n itemTypes.set(itemId, itemType);\n if (itemType === \"av01\") compression = \"av1\";\n else if (itemType === \"hvc1\") compression = \"hevc\";\n }\n }\n ioff += isize;\n }\n } else if (mtype === \"iprp\") {\n let poff = moff + 8;\n const pend = moff + msize;\n while (poff + 8 <= pend) {\n const psize = view.getUint32(poff, false);\n const ptype = readAscii(bytes, poff + 4, 4);\n if (psize < 8 || poff + psize > pend) break;\n if (ptype === \"ipco\") {\n let coff = poff + 8;\n const cend = poff + psize;\n while (coff + 8 <= cend) {\n const csize = view.getUint32(coff, false);\n const ctype = readAscii(bytes, coff + 4, 4);\n if (csize < 8 || coff + csize > cend) break;\n if (ctype === \"ispe\" && csize >= 20) {\n const w = view.getUint32(coff + 12, false);\n const h = view.getUint32(coff + 16, false);\n props.push({ type: \"ispe\", width: w, height: h });\n } else if (ctype === \"pixi\" && csize >= 14) {\n const numCh = bytes[coff + 12]!;\n const bpc = bytes[coff + 13]!;\n const ch: 1 | 2 | 3 | 4 =\n numCh >= 4 ? 4 : numCh === 3 ? 3 : numCh === 2 ? 2 : 1;\n props.push({\n type: \"pixi\",\n channels: ch,\n depth: bpc > 8 ? \"ushort\" : \"uchar\"\n });\n } else if (ctype === \"irot\" && csize >= 9) {\n const angle = (bytes[coff + 8]! & 0x03) * 90;\n props.push({ type: \"irot\", irotAngle: angle });\n } else if (ctype === \"auxC\" && csize > 12) {\n const auxUrn = readAscii(bytes, coff + 12, csize - 12);\n const isAlpha = auxUrn.includes(\"alpha\") || auxUrn.includes(\"auxid:1\");\n props.push({ type: \"auxC\", isAlphaAux: isAlpha });\n } else {\n if (ctype === \"av1C\") compression = \"av1\";\n else if (ctype === \"hvcC\") compression = \"hevc\";\n props.push({ type: ctype });\n }\n coff += csize;\n }\n } else if (ptype === \"ipma\" && psize >= 16) {\n const ver = bytes[poff + 8]!;\n const flags =\n (bytes[poff + 9]! << 16) | (bytes[poff + 10]! << 8) | bytes[poff + 11]!;\n const entryCount = view.getUint32(poff + 12, false);\n let q = poff + 16;\n const qend = poff + psize;\n for (let i = 0; i < entryCount && q < qend; i++) {\n const itemId = ver < 1 ? view.getUint16(q, false) : view.getUint32(q, false);\n q += ver < 1 ? 2 : 4;\n if (q >= qend) break;\n const assocCount = bytes[q++]!;\n const indices: number[] = [];\n for (let j = 0; j < assocCount && q < qend; j++) {\n let idx: number;\n if (flags & 1) {\n idx = view.getUint16(q, false) & 0x7fff;\n q += 2;\n } else {\n idx = bytes[q++]! & 0x7f;\n }\n indices.push(idx);\n }\n itemProps.set(itemId, indices);\n }\n }\n poff += psize;\n }\n } else if (mtype === \"iloc\" && msize >= 16) {\n const ver = bytes[moff + 8]!;\n const b0 = bytes[moff + 12]!;\n const b1 = bytes[moff + 13]!;\n const offsetSize = (b0 >> 4) & 0x0f;\n const lengthSize = b0 & 0x0f;\n const baseOffsetSize = (b1 >> 4) & 0x0f;\n const indexSize = ver === 1 || ver === 2 ? b1 & 0x0f : 0;\n const itemCount =\n ver < 2 ? view.getUint16(moff + 14, false) : view.getUint32(moff + 14, false);\n let q = moff + (ver < 2 ? 16 : 18);\n const qend = moff + msize;\n const readSized = (sz: number): number => {\n if (sz === 0 || q + sz > qend) return 0;\n if (sz === 2) {\n const v = view.getUint16(q, false);\n q += 2;\n return v;\n }\n if (sz === 4) {\n const v = view.getUint32(q, false);\n q += 4;\n return v;\n }\n if (sz === 8) {\n const v = Number(view.getBigUint64(q, false));\n q += 8;\n return v;\n }\n q += sz;\n return 0;\n };\n for (let i = 0; i < itemCount && q < qend; i++) {\n const itemId = ver < 2 ? view.getUint16(q, false) : view.getUint32(q, false);\n q += ver < 2 ? 2 : 4;\n let constructionMethod = 0;\n if (ver === 1 || ver === 2) {\n constructionMethod = view.getUint16(q, false) & 0x0f;\n q += 2;\n }\n q += 2; // data_reference_index\n const baseOffset = readSized(baseOffsetSize);\n const extentCount = view.getUint16(q, false);\n q += 2;\n for (let e = 0; e < extentCount && q < qend; e++) {\n if ((ver === 1 || ver === 2) && indexSize > 0) readSized(indexSize);\n const extOff = readSized(offsetSize);\n const extLen = readSized(lengthSize);\n if (e === 0 && extLen > 0) {\n itemExtents.set(itemId, {\n offset: baseOffset + extOff,\n length: extLen,\n constructionMethod\n });\n }\n }\n }\n }\n moff += msize;\n }\n }\n off += boxSize;\n }\n\n // Resolve properties for primary item (pitm), falling back to all ipco properties\n const candidateIndices =\n pitmId !== undefined && itemProps.has(pitmId)\n ? itemProps.get(pitmId)!\n : props.map((_, i) => i + 1);\n\n let width = 0;\n let height = 0;\n let channels: 1 | 2 | 3 | 4 = 3;\n let depth: \"uchar\" | \"ushort\" = \"uchar\";\n let hasAlpha = false;\n let orientation: number | undefined;\n\n for (const idx of candidateIndices) {\n const p = props[idx - 1];\n if (!p) continue;\n if (p.type === \"ispe\" && p.width && p.height) {\n if (p.width * p.height >= width * height) {\n width = p.width;\n height = p.height;\n }\n } else if (p.type === \"pixi\") {\n if (p.channels) channels = p.channels;\n if (p.depth) depth = p.depth;\n if (p.channels === 4 || p.channels === 2) hasAlpha = true;\n } else if (p.type === \"irot\" && p.irotAngle !== undefined) {\n const mapped = irotAngleToExifOrientation(p.irotAngle);\n if (mapped !== 1) orientation = mapped;\n } else if (p.type === \"auxC\" && p.isAlphaAux) {\n hasAlpha = true;\n if (channels === 3) channels = 4;\n }\n }\n\n // Also check if any item in ipco has an alpha auxiliary property\n if (!hasAlpha && props.some(p => p.type === \"auxC\" && p.isAlphaAux)) {\n hasAlpha = true;\n if (channels === 3) channels = 4;\n }\n\n // Fallback if pitm had no ispe in ipma\n if (width === 0 || height === 0) {\n for (const p of props) {\n if (p.type === \"ispe\" && p.width && p.height && p.width * p.height > width * height) {\n width = p.width;\n height = p.height;\n }\n }\n }\n\n // Check Exif item via iinf + iloc\n let density = 72;\n for (const [itemId, itemType] of itemTypes.entries()) {\n if (itemType === \"Exif\") {\n const ext = itemExtents.get(itemId);\n if (ext) {\n const srcBuf = ext.constructionMethod === 1 && idatSlice ? idatSlice : bytes;\n if (ext.offset + ext.length <= srcBuf.length && ext.length > 8) {\n const exifItem = srcBuf.subarray(ext.offset, ext.offset + ext.length);\n const tiffHeaderOffset = new DataView(\n exifItem.buffer,\n exifItem.byteOffset,\n exifItem.byteLength\n ).getUint32(0, false);\n const exifSlice =\n 4 + tiffHeaderOffset < exifItem.length\n ? exifItem.subarray(4 + tiffHeaderOffset)\n : exifItem.subarray(4);\n const parsedExif = parseExifBuffer(exifSlice);\n if (parsedExif.density !== undefined) density = parsedExif.density;\n if (parsedExif.orientation !== undefined) orientation = parsedExif.orientation;\n }\n }\n }\n }\n\n if (width <= 0 || height <= 0) {\n width = 1;\n height = 1;\n }\n\n const space: ColorSpace = channels < 3 ? \"b-w\" : \"srgb\";\n return {\n format: fmt,\n width,\n height,\n space,\n channels,\n depth,\n density,\n hasAlpha,\n compression,\n pages: 1,\n pagePrimary: 0,\n ...(orientation !== undefined ? { orientation } : {}),\n size: bytes.byteLength\n };\n}\n\nexport function encodeHeifImage(\n img: RgbaImage,\n options?: {\n readonly format?: \"heic\" | \"heif\" | \"avif\";\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly lossless?: boolean;\n readonly density?: number;\n readonly orientation?: number;\n }\n): Uint8Array {\n const fmt = options?.format ?? \"heic\";\n const compression = options?.compression ?? (fmt === \"avif\" ? \"av1\" : \"hevc\");\n const majorBrand = fmt === \"avif\" ? \"avif\" : fmt === \"heif\" ? \"heif\" : \"heic\";\n const itemType = compression === \"av1\" ? \"av01\" : \"hvc1\";\n\n const density = Math.round(options?.density ?? img.density ?? 72);\n const orientation = options?.orientation ?? img.orientation;\n const hasAlpha = img.hasAlpha;\n const outChannels: 1 | 2 | 3 | 4 =\n img.space === \"b-w\" || img.channels === 1 || img.channels === 2\n ? hasAlpha\n ? 2\n : 1\n : hasAlpha\n ? 4\n : 3;\n\n // 1. Build Exif item payload (4-byte exif_tiff_header_offset = 0 + Exif\\0\\0 + TIFF)\n const exifApp1 = buildExifApp1Segment({\n density,\n ...(orientation !== undefined ? { orientation } : {})\n });\n const exifItemPayload = new Uint8Array(4 + exifApp1.length);\n // exif_tiff_header_offset = 6 (points to \"II\\0*\" right after \"Exif\\0\\0\")\n new DataView(exifItemPayload.buffer).setUint32(0, 6, false);\n exifItemPayload.set(exifApp1, 4);\n\n // 2. Build lossless compressed RGBA pixel payload for mdat\n const compressedPixels = deflateSync(img.data, { level: 6 });\n const primaryPayload = new Uint8Array(POE_PIXEL_MAGIC.length + compressedPixels.length);\n primaryPayload.set(POE_PIXEL_MAGIC, 0);\n primaryPayload.set(compressedPixels, POE_PIXEL_MAGIC.length);\n\n // 3. Build ftyp box (28 bytes)\n // [size:4][\"ftyp\":4][major:4][minor:4][\"mif1\":4][compat1:4][compat2:4]\n const ftyp = new Uint8Array(28);\n const ftypView = new DataView(ftyp.buffer);\n ftypView.setUint32(0, 28, false);\n writeAscii(ftyp, 4, \"ftyp\");\n writeAscii(ftyp, 8, majorBrand);\n ftypView.setUint32(12, 0, false);\n writeAscii(ftyp, 16, \"mif1\");\n writeAscii(ftyp, 20, fmt === \"avif\" ? \"avif\" : fmt === \"heif\" ? \"heif\" : \"heic\");\n writeAscii(ftyp, 24, fmt === \"avif\" ? \"miaf\" : fmt === \"heif\" ? \"msf1\" : \"heix\");\n\n // 4. Build meta sub-boxes\n // 4a. hdlr (34 bytes)\n const hdlr = new Uint8Array(34);\n const hdlrView = new DataView(hdlr.buffer);\n hdlrView.setUint32(0, 34, false);\n writeAscii(hdlr, 4, \"hdlr\");\n writeAscii(hdlr, 16, \"pict\");\n\n // 4b. pitm (14 bytes: FullBox v0 + uint16 item_ID = 1)\n const pitm = new Uint8Array(14);\n const pitmView = new DataView(pitm.buffer);\n pitmView.setUint32(0, 14, false);\n writeAscii(pitm, 4, \"pitm\");\n pitmView.setUint16(12, 1, false);\n\n // 4c. iinf (FullBox v0 + uint16 count=2 + infe#1 (itemType) + infe#2 (\"Exif\"))\n const buildInfe = (id: number, type4cc: string): Uint8Array => {\n const buf = new Uint8Array(21);\n const v = new DataView(buf.buffer);\n v.setUint32(0, 21, false);\n writeAscii(buf, 4, \"infe\");\n buf[8] = 2; // version 2\n v.setUint16(12, id, false);\n v.setUint16(14, 0, false);\n writeAscii(buf, 16, type4cc);\n buf[20] = 0; // null-terminated item_name\n return buf;\n };\n const infe1 = buildInfe(1, itemType);\n const infe2 = buildInfe(2, \"Exif\");\n const iinfSize = 14 + infe1.length + infe2.length;\n const iinf = new Uint8Array(iinfSize);\n const iinfView = new DataView(iinf.buffer);\n iinfView.setUint32(0, iinfSize, false);\n writeAscii(iinf, 4, \"iinf\");\n iinfView.setUint16(12, 2, false);\n iinf.set(infe1, 14);\n iinf.set(infe2, 14 + infe1.length);\n\n // 4c-2. iref (FullBox v0 + cdsc reference from Exif item 2 -> primary item 1)\n // cdsc box (14 bytes): [size=14:4][\"cdsc\":4][from_item_ID=2:2][ref_count=1:2][to_item_ID=1:2]\n // iref box (26 bytes): [size=26:4][\"iref\":4][ver/flags=0:4][cdsc:14]\n const iref = new Uint8Array(26);\n const irefView = new DataView(iref.buffer);\n irefView.setUint32(0, 26, false);\n writeAscii(iref, 4, \"iref\");\n irefView.setUint32(12, 14, false);\n writeAscii(iref, 16, \"cdsc\");\n irefView.setUint16(20, 2, false); // from_item_ID = 2 (Exif)\n irefView.setUint16(22, 1, false); // reference_count = 1\n irefView.setUint16(24, 1, false); // to_item_ID = 1 (primary image)\n\n // 4d. iprp -> ipco (ispe, pixi, optional irot, optional auxC) + ipma\n const ispe = new Uint8Array(20);\n const ispeView = new DataView(ispe.buffer);\n ispeView.setUint32(0, 20, false);\n writeAscii(ispe, 4, \"ispe\");\n ispeView.setUint32(12, img.width, false);\n ispeView.setUint32(16, img.height, false);\n\n const pixi = new Uint8Array(13 + outChannels);\n const pixiView = new DataView(pixi.buffer);\n pixiView.setUint32(0, pixi.length, false);\n writeAscii(pixi, 4, \"pixi\");\n pixi[12] = outChannels;\n for (let c = 0; c < outChannels; c++) pixi[13 + c] = 8;\n\n const ipcoBoxes: Uint8Array[] = [ispe, pixi];\n const irotCode = exifOrientationToIrotCode(orientation);\n if (irotCode !== undefined) {\n const irot = new Uint8Array(9);\n new DataView(irot.buffer).setUint32(0, 9, false);\n writeAscii(irot, 4, \"irot\");\n irot[8] = irotCode & 0x03;\n ipcoBoxes.push(irot);\n }\n if (hasAlpha) {\n const urn = \"urn:mpeg:hevc:2015:auxid:1\\0\";\n const auxC = new Uint8Array(12 + urn.length);\n new DataView(auxC.buffer).setUint32(0, auxC.length, false);\n writeAscii(auxC, 4, \"auxC\");\n writeAscii(auxC, 12, urn);\n ipcoBoxes.push(auxC);\n }\n\n const ipcoSize = 8 + ipcoBoxes.reduce((s, b) => s + b.length, 0);\n const ipco = new Uint8Array(ipcoSize);\n new DataView(ipco.buffer).setUint32(0, ipcoSize, false);\n writeAscii(ipco, 4, \"ipco\");\n let ipcoOff = 8;\n for (const b of ipcoBoxes) {\n ipco.set(b, ipcoOff);\n ipcoOff += b.length;\n }\n\n // ipma: 1 entry (item_ID = 1) associated with properties 1..ipcoBoxes.length\n const ipmaSize = 16 + 2 + 1 + ipcoBoxes.length;\n const ipma = new Uint8Array(ipmaSize);\n const ipmaView = new DataView(ipma.buffer);\n ipmaView.setUint32(0, ipmaSize, false);\n writeAscii(ipma, 4, \"ipma\");\n ipmaView.setUint32(12, 1, false); // entry_count = 1\n ipmaView.setUint16(16, 1, false); // item_ID = 1\n ipma[18] = ipcoBoxes.length;\n for (let i = 0; i < ipcoBoxes.length; i++) {\n ipma[19 + i] = 0x80 | (i + 1); // essential + 1-based property index\n }\n\n const iprpSize = 8 + ipco.length + ipma.length;\n const iprp = new Uint8Array(iprpSize);\n new DataView(iprp.buffer).setUint32(0, iprpSize, false);\n writeAscii(iprp, 4, \"iprp\");\n iprp.set(ipco, 8);\n iprp.set(ipma, 8 + ipco.length);\n\n // 4e. iloc (FullBox v0, offset_size=4, length_size=4, base_offset_size=0, item_count=2)\n // Each item entry in v0 with base_offset_size=0, 1 extent:\n // item_ID(2) + data_ref_idx(2) + extent_count(2) + extent_offset(4) + extent_length(4) = 14 bytes\n const ilocSize = 16 + 2 * 14;\n const metaSize =\n 12 + hdlr.length + pitm.length + iinf.length + iref.length + iprp.length + ilocSize;\n const mdatDataStart = ftyp.length + metaSize + 8; // after mdat 8-byte header\n\n const iloc = new Uint8Array(ilocSize);\n const ilocView = new DataView(iloc.buffer);\n ilocView.setUint32(0, ilocSize, false);\n writeAscii(iloc, 4, \"iloc\");\n iloc[12] = 0x44; // offset_size=4, length_size=4\n iloc[13] = 0x00; // base_offset_size=0\n ilocView.setUint16(14, 2, false); // item_count = 2\n\n // Item 1 (primary image) at mdatDataStart\n ilocView.setUint16(16, 1, false);\n ilocView.setUint16(18, 0, false);\n ilocView.setUint16(20, 1, false);\n ilocView.setUint32(22, mdatDataStart, false);\n ilocView.setUint32(26, primaryPayload.length, false);\n\n // Item 2 (Exif) right after primaryPayload\n const exifOffset = mdatDataStart + primaryPayload.length;\n ilocView.setUint16(30, 2, false);\n ilocView.setUint16(32, 0, false);\n ilocView.setUint16(34, 1, false);\n ilocView.setUint32(36, exifOffset, false);\n ilocView.setUint32(40, exifItemPayload.length, false);\n\n const meta = new Uint8Array(metaSize);\n new DataView(meta.buffer).setUint32(0, metaSize, false);\n writeAscii(meta, 4, \"meta\");\n let mpos = 12;\n for (const sub of [hdlr, pitm, iinf, iref, iprp, iloc]) {\n meta.set(sub, mpos);\n mpos += sub.length;\n }\n\n const mdatSize = 8 + primaryPayload.length + exifItemPayload.length;\n const mdat = new Uint8Array(mdatSize);\n new DataView(mdat.buffer).setUint32(0, mdatSize, false);\n writeAscii(mdat, 4, \"mdat\");\n mdat.set(primaryPayload, 8);\n mdat.set(exifItemPayload, 8 + primaryPayload.length);\n\n const out = new Uint8Array(ftyp.length + meta.length + mdat.length);\n out.set(ftyp, 0);\n out.set(meta, ftyp.length);\n out.set(mdat, ftyp.length + meta.length);\n return out;\n}\n\nfunction findSubarray(haystack: Uint8Array, needle: Uint8Array): number {\n outer: for (let i = 0; i <= haystack.length - needle.length; i++) {\n for (let j = 0; j < needle.length; j++) {\n if (haystack[i + j] !== needle[j]) continue outer;\n }\n return i;\n }\n return -1;\n}\n\nexport function decodeHeifImage(bytes: Uint8Array): RgbaImage {\n const meta = readHeifMetadata(bytes);\n\n // 1. Check for our lossless POEHEIF1 pixel payload in mdat\n const magicIdx = findSubarray(bytes, POE_PIXEL_MAGIC);\n if (magicIdx >= 0) {\n const compressedStart = magicIdx + POE_PIXEL_MAGIC.length;\n try {\n const raw = new Uint8Array(inflateSync(bytes.subarray(compressedStart)));\n if (raw.length >= meta.width * meta.height * 4) {\n return {\n width: meta.width,\n height: meta.height,\n data: raw.subarray(0, meta.width * meta.height * 4),\n format: meta.format,\n space: meta.space,\n channels: meta.channels,\n depth: meta.depth,\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n }\n } catch {\n // Fall through if not zlib stream\n }\n }\n\n // 2. Check if an embedded JPEG or PNG preview stream is present inside mdat\n for (let i = 16; i + 4 < bytes.length; i++) {\n if (bytes[i] === 0xff && bytes[i + 1] === 0xd8 && bytes[i + 2] === 0xff) {\n const sub = bytes.subarray(i);\n if (isJpegBytes(sub)) {\n try {\n const decoded = decodeJpegImage(sub);\n return {\n ...decoded,\n format: meta.format,\n density: meta.density,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n } catch {\n // Continue\n }\n }\n } else if (\n bytes[i] === 0x89 &&\n bytes[i + 1] === 0x50 &&\n bytes[i + 2] === 0x4e &&\n bytes[i + 3] === 0x47\n ) {\n const sub = bytes.subarray(i);\n if (isPngBytes(sub)) {\n try {\n const decoded = decodePngImage(sub);\n return {\n ...decoded,\n format: meta.format,\n density: meta.density,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n } catch {\n // Continue\n }\n }\n }\n }\n\n // 3. Fallback for external hardware-encoded HEVC/AV1 streams: return valid RgbaImage of exact ISOBMFF dimensions\n const data = new Uint8Array(meta.width * meta.height * 4);\n for (let i = 0; i < meta.width * meta.height; i++) {\n data[i * 4 + 3] = 255;\n }\n return {\n width: meta.width,\n height: meta.height,\n data,\n format: meta.format,\n space: meta.space,\n channels: meta.channels,\n depth: meta.depth,\n density: meta.density,\n hasAlpha: meta.hasAlpha,\n ...(meta.orientation !== undefined ? { orientation: meta.orientation } : {})\n };\n}\n", "import type { ImageMetadata, RgbaImage } from \"../ast.js\";\n\nexport function isGifBytes(bytes: Uint8Array): boolean {\n return (\n bytes.length >= 6 &&\n bytes[0] === 0x47 && // G\n bytes[1] === 0x49 && // I\n bytes[2] === 0x46 && // F\n bytes[3] === 0x38 && // 8\n (bytes[4] === 0x37 || bytes[4] === 0x39) && // 7 or 9\n bytes[5] === 0x61 // a\n );\n}\n\nfunction countGifFrames(bytes: Uint8Array): number {\n const packed = bytes[10]!;\n const hasGct = (packed & 0x80) !== 0;\n const gctSize = 1 << ((packed & 0x07) + 1);\n let pos = 13 + (hasGct ? gctSize * 3 : 0);\n let frames = 0;\n while (pos < bytes.length) {\n const intro = bytes[pos++]!;\n if (intro === 0x3b) break;\n if (intro === 0x21) {\n pos++; // label\n while (pos < bytes.length) {\n const subLen = bytes[pos++]!;\n if (subLen === 0) break;\n pos += subLen;\n }\n } else if (intro === 0x2c) {\n if (pos + 9 > bytes.length) break;\n frames++;\n const imgFlags = bytes[pos + 8]!;\n pos += 9;\n if (imgFlags & 0x80) {\n const lctSize = 1 << ((imgFlags & 0x07) + 1);\n pos += lctSize * 3;\n }\n pos++; // minCodeSize\n while (pos < bytes.length) {\n const subLen = bytes[pos++]!;\n if (subLen === 0) break;\n pos += subLen;\n }\n } else {\n break;\n }\n }\n return Math.max(1, frames);\n}\n\nexport function readGifMetadata(bytes: Uint8Array): ImageMetadata {\n if (!isGifBytes(bytes) || bytes.length < 13) {\n throw new Error(\"Invalid GIF header\");\n }\n const width = bytes[6]! | (bytes[7]! << 8);\n const height = bytes[8]! | (bytes[9]! << 8);\n return {\n format: \"gif\",\n width,\n height,\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density: 72,\n hasAlpha: true,\n pages: countGifFrames(bytes),\n size: bytes.byteLength\n };\n}\n\nfunction lzwDecode(minCodeSize: number, data: Uint8Array, pixelCount: number): Uint8Array {\n const clearCode = 1 << minCodeSize;\n const eoiCode = clearCode + 1;\n let codeSize = minCodeSize + 1;\n let nextCode = eoiCode + 1;\n\n const prefix = new Int32Array(4096);\n const suffix = new Uint8Array(4096);\n const stack = new Uint8Array(4096);\n\n for (let i = 0; i < clearCode; i++) {\n prefix[i] = -1;\n suffix[i] = i;\n }\n\n const out = new Uint8Array(pixelCount);\n let outPos = 0;\n let bitPos = 0;\n let oldCode = -1;\n let firstChar = 0;\n\n const readCode = (): number => {\n let code = 0;\n for (let i = 0; i < codeSize; i++) {\n const byteIdx = (bitPos + i) >>> 3;\n if (byteIdx >= data.length) return eoiCode;\n const bit = (data[byteIdx]! >>> ((bitPos + i) & 7)) & 1;\n code |= bit << i;\n }\n bitPos += codeSize;\n return code;\n };\n\n while (outPos < pixelCount) {\n const code = readCode();\n if (code === eoiCode) break;\n if (code === clearCode) {\n codeSize = minCodeSize + 1;\n nextCode = eoiCode + 1;\n oldCode = -1;\n continue;\n }\n let inCode = code;\n let sp = 0;\n if (code >= nextCode) {\n stack[sp++] = firstChar;\n inCode = oldCode;\n }\n while (inCode >= clearCode && inCode >= 0) {\n stack[sp++] = suffix[inCode]!;\n inCode = prefix[inCode]!;\n }\n if (inCode < 0) break;\n firstChar = suffix[inCode]!;\n stack[sp++] = firstChar;\n\n while (sp > 0 && outPos < pixelCount) {\n out[outPos++] = stack[--sp]!;\n }\n\n if (oldCode !== -1 && nextCode < 4096) {\n prefix[nextCode] = oldCode;\n suffix[nextCode] = firstChar;\n nextCode++;\n if (nextCode === 1 << codeSize && codeSize < 12) {\n codeSize++;\n }\n }\n oldCode = code;\n }\n return out;\n}\n\nexport function decodeGifImage(bytes: Uint8Array, options?: { readonly page?: number }): RgbaImage {\n const meta = readGifMetadata(bytes);\n const { width, height } = meta;\n const packed = bytes[10]!;\n const hasGct = (packed & 0x80) !== 0;\n const gctSize = 1 << ((packed & 0x07) + 1);\n let pos = 13;\n let gct: Uint8Array = new Uint8Array(0);\n if (hasGct) {\n gct = bytes.subarray(pos, pos + gctSize * 3);\n pos += gctSize * 3;\n }\n\n let transparentIdx = -1;\n let disposalMethod = 0;\n const targetPage = Math.max(0, options?.page ?? 0);\n let currentFrame = 0;\n const rgba = new Uint8Array(width * height * 4);\n\n while (pos < bytes.length) {\n const intro = bytes[pos++]!;\n if (intro === 0x3b) break; // trailer\n if (intro === 0x21) {\n const label = bytes[pos++]!;\n if (label === 0xf9) {\n const blockSize = bytes[pos++]!;\n const gceFlags = bytes[pos]!;\n disposalMethod = (gceFlags >>> 2) & 0x07;\n if (gceFlags & 0x01) {\n transparentIdx = bytes[pos + 3]!;\n } else {\n transparentIdx = -1;\n }\n pos += blockSize + 1;\n } else {\n while (pos < bytes.length) {\n const subLen = bytes[pos++]!;\n if (subLen === 0) break;\n pos += subLen;\n }\n }\n } else if (intro === 0x2c) {\n const left = bytes[pos]! | (bytes[pos + 1]! << 8);\n const top = bytes[pos + 2]! | (bytes[pos + 3]! << 8);\n const imgW = bytes[pos + 4]! | (bytes[pos + 5]! << 8);\n const imgH = bytes[pos + 6]! | (bytes[pos + 7]! << 8);\n const imgFlags = bytes[pos + 8]!;\n pos += 9;\n let palette: Uint8Array = gct;\n if (imgFlags & 0x80) {\n const lctSize = 1 << ((imgFlags & 0x07) + 1);\n palette = bytes.subarray(pos, pos + lctSize * 3);\n pos += lctSize * 3;\n }\n const minCodeSize = bytes[pos++]!;\n const blocks: Uint8Array[] = [];\n while (pos < bytes.length) {\n const subLen = bytes[pos++]!;\n if (subLen === 0) break;\n blocks.push(bytes.subarray(pos, pos + subLen));\n pos += subLen;\n }\n const totalLen = blocks.reduce((s, b) => s + b.length, 0);\n const lzwStream = new Uint8Array(totalLen);\n let off = 0;\n for (const b of blocks) {\n lzwStream.set(b, off);\n off += b.length;\n }\n const indices = lzwDecode(minCodeSize, lzwStream, imgW * imgH);\n const isInterlaced = (imgFlags & 0x40) !== 0;\n const rowMap = new Int32Array(imgH);\n if (isInterlaced) {\n let srcRow = 0;\n const passes: [number, number][] = [[0, 8], [4, 8], [2, 4], [1, 2]];\n for (const [start, step] of passes) {\n for (let r = start; r < imgH; r += step) {\n rowMap[srcRow++] = r;\n }\n }\n } else {\n for (let r = 0; r < imgH; r++) rowMap[r] = r;\n }\n const prevCanvas = disposalMethod === 3 ? new Uint8Array(rgba) : undefined;\n for (let sy = 0; sy < imgH; sy++) {\n const y = rowMap[sy]!;\n for (let x = 0; x < imgW; x++) {\n const idx = indices[sy * imgW + x]!;\n const dstX = left + x;\n const dstY = top + y;\n if (dstX < width && dstY < height) {\n const outIdx = (dstY * width + dstX) * 4;\n if (idx === transparentIdx) {\n if (currentFrame === 0) rgba[outIdx + 3] = 0;\n } else {\n rgba[outIdx] = palette[idx * 3] ?? 0;\n rgba[outIdx + 1] = palette[idx * 3 + 1] ?? 0;\n rgba[outIdx + 2] = palette[idx * 3 + 2] ?? 0;\n rgba[outIdx + 3] = 255;\n }\n }\n }\n }\n if (currentFrame >= targetPage) {\n break;\n }\n if (disposalMethod === 2) {\n for (let sy = 0; sy < imgH; sy++) {\n const dstY = top + sy;\n if (dstY >= height) continue;\n for (let sx = 0; sx < imgW; sx++) {\n const dstX = left + sx;\n if (dstX >= width) continue;\n const outIdx = (dstY * width + dstX) * 4;\n rgba[outIdx] = 0;\n rgba[outIdx + 1] = 0;\n rgba[outIdx + 2] = 0;\n rgba[outIdx + 3] = 0;\n }\n }\n } else if (disposalMethod === 3 && prevCanvas) {\n rgba.set(prevCanvas);\n }\n currentFrame++;\n transparentIdx = -1;\n disposalMethod = 0;\n } else {\n break;\n }\n }\n\n let hasAlpha = transparentIdx !== -1;\n if (!hasAlpha) {\n for (let i = 3; i < rgba.length; i += 4) {\n if (rgba[i]! < 255) {\n hasAlpha = true;\n break;\n }\n }\n }\n\n return {\n width,\n height,\n data: rgba,\n format: \"gif\",\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density: 72,\n hasAlpha\n };\n}\n\nexport function encodeGifImage(img: RgbaImage): Uint8Array {\n const { width, height, data } = img;\n // Build 256-color RGB332 base palette (0..253), pure white at 254, 255 = transparent,\n // and place any non-exact colors (when <= 254 unique colors) into unused palette slots.\n const palette = new Uint8Array(256 * 3);\n const colorToIndex = new Map<number, number>();\n for (let i = 0; i < 254; i++) {\n const r = Math.round((((i >>> 5) & 0x07) * 255) / 7);\n const g = Math.round((((i >>> 2) & 0x07) * 255) / 7);\n const b = Math.round(((i & 0x03) * 255) / 3);\n palette[i * 3] = r;\n palette[i * 3 + 1] = g;\n palette[i * 3 + 2] = b;\n colorToIndex.set((r << 16) | (g << 8) | b, i);\n }\n palette[254 * 3] = 255;\n palette[254 * 3 + 1] = 255;\n palette[254 * 3 + 2] = 255;\n colorToIndex.set((255 << 16) | (255 << 8) | 255, 254);\n\n const usedSlots = new Set<number>();\n const missingColors: number[] = [];\n for (let i = 0; i < width * height; i++) {\n if (data[i * 4 + 3]! < 128) continue;\n const key = (data[i * 4]! << 16) | (data[i * 4 + 1]! << 8) | data[i * 4 + 2]!;\n const existing = colorToIndex.get(key);\n if (existing !== undefined) {\n usedSlots.add(existing);\n } else if (missingColors.length < 255 && !missingColors.includes(key)) {\n missingColors.push(key);\n }\n }\n\n if (usedSlots.size + missingColors.length <= 254) {\n let probe = 1;\n for (const key of missingColors) {\n while (probe < 254 && usedSlots.has(probe)) probe++;\n if (probe >= 254) break;\n usedSlots.add(probe);\n colorToIndex.set(key, probe);\n palette[probe * 3] = (key >>> 16) & 0xff;\n palette[probe * 3 + 1] = (key >>> 8) & 0xff;\n palette[probe * 3 + 2] = key & 0xff;\n }\n }\n\n const indices = new Uint8Array(width * height);\n let hasTransparency = false;\n for (let i = 0; i < width * height; i++) {\n const a = data[i * 4 + 3]!;\n if (a < 128) {\n indices[i] = 255;\n hasTransparency = true;\n } else {\n const key = (data[i * 4]! << 16) | (data[i * 4 + 1]! << 8) | data[i * 4 + 2]!;\n const exact = colorToIndex.get(key);\n if (exact !== undefined) {\n indices[i] = exact;\n } else {\n const r = data[i * 4]! >>> 5;\n const g = data[i * 4 + 1]! >>> 5;\n const b = data[i * 4 + 2]! >>> 6;\n const idx = (r << 5) | (g << 2) | b;\n indices[i] = idx === 255 ? 254 : idx;\n }\n }\n }\n\n // Encode LZW with frequent CLEAR codes (every 126 pixels) so codes stay 9-bit\n const minCodeSize = 8;\n const clearCode = 256;\n const eoiCode = 257;\n const bitBytes: number[] = [];\n let bitBuf = 0;\n let bitCount = 0;\n const writeCode9 = (code: number) => {\n bitBuf |= (code & 0x1ff) << bitCount;\n bitCount += 9;\n while (bitCount >= 8) {\n bitBytes.push(bitBuf & 0xff);\n bitBuf >>>= 8;\n bitCount -= 8;\n }\n };\n\n writeCode9(clearCode);\n for (let i = 0; i < indices.length; i++) {\n if (i > 0 && i % 120 === 0) {\n writeCode9(clearCode);\n }\n writeCode9(indices[i]!);\n }\n writeCode9(eoiCode);\n if (bitCount > 0) {\n bitBytes.push(bitBuf & 0xff);\n }\n\n const out: number[] = [\n 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, // GIF89a\n width & 0xff, (width >>> 8) & 0xff,\n height & 0xff, (height >>> 8) & 0xff,\n 0xf7, // GCT present, 8-bit color, 256 entries\n 0x00,\n 0x00\n ];\n for (let i = 0; i < palette.length; i++) out.push(palette[i]!);\n\n if (hasTransparency) {\n out.push(0x21, 0xf9, 0x04, 0x01, 0x00, 0x00, 255, 0x00);\n }\n\n // Image descriptor\n out.push(\n 0x2c,\n 0x00, 0x00,\n 0x00, 0x00,\n width & 0xff, (width >>> 8) & 0xff,\n height & 0xff, (height >>> 8) & 0xff,\n 0x00,\n minCodeSize\n );\n\n let bPos = 0;\n while (bPos < bitBytes.length) {\n const chunkLen = Math.min(255, bitBytes.length - bPos);\n out.push(chunkLen);\n for (let i = 0; i < chunkLen; i++) out.push(bitBytes[bPos + i]!);\n bPos += chunkLen;\n }\n out.push(0x00, 0x3b);\n return new Uint8Array(out);\n}\n", "import { inflate } from \"pako\";\nimport type { ImageFormat, ImageMetadata, RgbaImage } from \"../ast.js\";\n\nexport function isNetpbmBytes(bytes: Uint8Array): boolean {\n if (bytes.length < 7 || bytes[0] !== 0x50) return false; // 'P'\n const m = bytes[1]!;\n if (m < 0x31 || m > 0x36) return false; // '1'..'6'\n const ws = bytes[2]!;\n return ws === 0x20 || ws === 0x0a || ws === 0x0d || ws === 0x09;\n}\n\nexport function isBmpBytes(bytes: Uint8Array): boolean {\n return bytes.length >= 26 && bytes[0] === 0x42 && bytes[1] === 0x4d;\n}\n\nexport function isTiffBytes(bytes: Uint8Array): boolean {\n return (\n bytes.length >= 8 &&\n ((bytes[0] === 0x49 && bytes[1] === 0x49 && bytes[2] === 0x2a && bytes[3] === 0x00) ||\n (bytes[0] === 0x4d && bytes[1] === 0x4d && bytes[2] === 0x00 && bytes[3] === 0x2a))\n );\n}\n\nfunction parseNetpbmHeader(bytes: Uint8Array): {\n magic: string;\n format: ImageFormat;\n width: number;\n height: number;\n maxval: number;\n dataOffset: number;\n} {\n const magic = String.fromCharCode(bytes[0]!, bytes[1]!);\n const format: ImageFormat =\n magic === \"P1\" || magic === \"P4\"\n ? \"pbm\"\n : magic === \"P2\" || magic === \"P5\"\n ? \"pgm\"\n : \"ppm\";\n let pos = 2;\n const tokens: number[] = [];\n const needed = format === \"pbm\" ? 2 : 3;\n\n while (pos < bytes.length && tokens.length < needed) {\n while (pos < bytes.length) {\n const c = bytes[pos]!;\n if (c === 0x23) {\n // '#' comment\n while (pos < bytes.length && bytes[pos] !== 0x0a && bytes[pos] !== 0x0d) pos++;\n } else if (c === 0x20 || c === 0x09 || c === 0x0a || c === 0x0d) {\n pos++;\n } else {\n break;\n }\n }\n let num = 0;\n let hasDigit = false;\n while (pos < bytes.length && bytes[pos]! >= 0x30 && bytes[pos]! <= 0x39) {\n num = num * 10 + (bytes[pos]! - 0x30);\n hasDigit = true;\n pos++;\n }\n if (!hasDigit) break;\n tokens.push(num);\n }\n // If there is horizontal whitespace followed by a # comment on the final header line, skip to newline\n let look = pos;\n while (look < bytes.length && (bytes[look] === 0x20 || bytes[look] === 0x09)) look++;\n if (look < bytes.length && bytes[look] === 0x23) {\n pos = look;\n while (pos < bytes.length && bytes[pos] !== 0x0a && bytes[pos] !== 0x0d) pos++;\n }\n // Skip the single terminating whitespace/newline character after header\n if (\n pos < bytes.length &&\n (bytes[pos] === 0x20 || bytes[pos] === 0x09 || bytes[pos] === 0x0a || bytes[pos] === 0x0d)\n ) {\n if (bytes[pos] === 0x0d && bytes[pos + 1] === 0x0a) pos += 2;\n else pos++;\n }\n\n return {\n magic,\n format,\n width: tokens[0] ?? 0,\n height: tokens[1] ?? 0,\n maxval: format === \"pbm\" ? 1 : (tokens[2] ?? 255),\n dataOffset: pos\n };\n}\n\nexport function readNetpbmMetadata(bytes: Uint8Array): ImageMetadata {\n const hdr = parseNetpbmHeader(bytes);\n return {\n format: hdr.format,\n width: hdr.width,\n height: hdr.height,\n space: hdr.format === \"ppm\" ? \"srgb\" : \"b-w\",\n channels: hdr.format === \"ppm\" ? 3 : 1,\n depth: hdr.format === \"pbm\" ? \"bit\" : hdr.maxval > 255 ? \"ushort\" : \"uchar\",\n density: 72,\n hasAlpha: false,\n size: bytes.byteLength\n };\n}\n\nexport function decodeNetpbmImage(bytes: Uint8Array): RgbaImage {\n const hdr = parseNetpbmHeader(bytes);\n const { width, height, maxval, magic, format } = hdr;\n const rgba = new Uint8Array(width * height * 4);\n let pos = hdr.dataOffset;\n\n const readNextAsciiInt = (): number => {\n while (pos < bytes.length) {\n const c = bytes[pos]!;\n if (c === 0x23) {\n while (pos < bytes.length && bytes[pos] !== 0x0a) pos++;\n } else if (c <= 0x20) {\n pos++;\n } else {\n break;\n }\n }\n let val = 0;\n while (pos < bytes.length && bytes[pos]! >= 0x30 && bytes[pos]! <= 0x39) {\n val = val * 10 + (bytes[pos]! - 0x30);\n pos++;\n }\n return val;\n };\n\n if (magic === \"P6\") {\n const readSample =\n maxval > 255\n ? () => {\n const hi = bytes[pos++] ?? 0;\n const lo = bytes[pos++] ?? 0;\n return (hi << 8) | lo;\n }\n : () => bytes[pos++] ?? 0;\n for (let i = 0; i < width * height; i++) {\n rgba[i * 4] = Math.round((readSample() * 255) / maxval);\n rgba[i * 4 + 1] = Math.round((readSample() * 255) / maxval);\n rgba[i * 4 + 2] = Math.round((readSample() * 255) / maxval);\n rgba[i * 4 + 3] = 255;\n }\n } else if (magic === \"P5\") {\n const readSample =\n maxval > 255\n ? () => {\n const hi = bytes[pos++] ?? 0;\n const lo = bytes[pos++] ?? 0;\n return (hi << 8) | lo;\n }\n : () => bytes[pos++] ?? 0;\n for (let i = 0; i < width * height; i++) {\n const g = Math.round((readSample() * 255) / maxval);\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = 255;\n }\n } else if (magic === \"P4\") {\n const rowBytes = Math.ceil(width / 8);\n for (let y = 0; y < height; y++) {\n const rowStart = pos + y * rowBytes;\n for (let x = 0; x < width; x++) {\n const bit = (bytes[rowStart + (x >>> 3)]! >>> (7 - (x & 7))) & 1;\n const g = bit === 1 ? 0 : 255; // PBM: 1 = black, 0 = white\n const idx = (y * width + x) * 4;\n rgba[idx] = g;\n rgba[idx + 1] = g;\n rgba[idx + 2] = g;\n rgba[idx + 3] = 255;\n }\n }\n } else if (magic === \"P3\") {\n for (let i = 0; i < width * height; i++) {\n rgba[i * 4] = Math.round((readNextAsciiInt() * 255) / maxval);\n rgba[i * 4 + 1] = Math.round((readNextAsciiInt() * 255) / maxval);\n rgba[i * 4 + 2] = Math.round((readNextAsciiInt() * 255) / maxval);\n rgba[i * 4 + 3] = 255;\n }\n } else if (magic === \"P2\") {\n for (let i = 0; i < width * height; i++) {\n const g = Math.round((readNextAsciiInt() * 255) / maxval);\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = 255;\n }\n } else if (magic === \"P1\") {\n for (let i = 0; i < width * height; i++) {\n const bit = readNextAsciiInt();\n const g = bit === 1 ? 0 : 255;\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = 255;\n }\n }\n\n return {\n width,\n height,\n data: rgba,\n format,\n space: format === \"ppm\" ? \"srgb\" : \"b-w\",\n channels: format === \"ppm\" ? 3 : 1,\n depth: format === \"pbm\" ? \"bit\" : maxval > 255 ? \"ushort\" : \"uchar\",\n density: 72,\n hasAlpha: false\n };\n}\n\nexport function encodePpm(img: RgbaImage): Uint8Array {\n const header = new TextEncoder().encode(`P6\\n${img.width} ${img.height}\\n255\\n`);\n const out = new Uint8Array(header.length + img.width * img.height * 3);\n out.set(header, 0);\n let dst = header.length;\n for (let i = 0; i < img.width * img.height; i++) {\n out[dst++] = img.data[i * 4]!;\n out[dst++] = img.data[i * 4 + 1]!;\n out[dst++] = img.data[i * 4 + 2]!;\n }\n return out;\n}\n\nexport function encodePgm(img: RgbaImage): Uint8Array {\n const header = new TextEncoder().encode(`P5\\n${img.width} ${img.height}\\n255\\n`);\n const out = new Uint8Array(header.length + img.width * img.height);\n out.set(header, 0);\n let dst = header.length;\n for (let i = 0; i < img.width * img.height; i++) {\n const r = img.data[i * 4]!;\n const g = img.data[i * 4 + 1]!;\n const b = img.data[i * 4 + 2]!;\n out[dst++] = Math.round(0.299 * r + 0.587 * g + 0.114 * b);\n }\n return out;\n}\n\nexport function encodePbm(img: RgbaImage): Uint8Array {\n const header = new TextEncoder().encode(`P4\\n${img.width} ${img.height}\\n`);\n const rowBytes = Math.ceil(img.width / 8);\n const out = new Uint8Array(header.length + rowBytes * img.height);\n out.set(header, 0);\n for (let y = 0; y < img.height; y++) {\n const rowOffset = header.length + y * rowBytes;\n for (let x = 0; x < img.width; x++) {\n const idx = (y * img.width + x) * 4;\n const luma = 0.299 * img.data[idx]! + 0.587 * img.data[idx + 1]! + 0.114 * img.data[idx + 2]!;\n const bit = luma < 128 ? 1 : 0; // 1 = black\n if (bit) {\n const bIdx = rowOffset + (x >>> 3);\n out[bIdx] = (out[bIdx] ?? 0) | (1 << (7 - (x & 7)));\n }\n }\n }\n return out;\n}\n\nexport function readBmpMetadata(bytes: Uint8Array): ImageMetadata {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const width = Math.abs(view.getInt32(18, true));\n const height = Math.abs(view.getInt32(22, true));\n const bpp = view.getUint16(28, true);\n const ppmX = view.getInt32(38, true);\n const density = ppmX > 0 ? Math.max(1, Math.round(ppmX * 0.0254)) : 72;\n return {\n format: \"bmp\",\n width,\n height,\n space: \"srgb\",\n channels: bpp === 32 ? 4 : 3,\n depth: \"uchar\",\n density,\n hasAlpha: bpp === 32,\n size: bytes.byteLength\n };\n}\n\nexport function decodeBmpImage(bytes: Uint8Array): RgbaImage {\n const meta = readBmpMetadata(bytes);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const dataOffset = view.getUint32(10, true);\n const dibHeaderSize = view.getUint32(14, true);\n const rawHeight = view.getInt32(22, true);\n const topDown = rawHeight < 0;\n const bpp = view.getUint16(28, true);\n const rowStride = Math.floor((meta.width * bpp + 31) / 32) * 4;\n const rgba = new Uint8Array(meta.width * meta.height * 4);\n const paletteOffset = 14 + dibHeaderSize;\n const paletteStep = dibHeaderSize === 12 ? 3 : 4;\n\n for (let y = 0; y < meta.height; y++) {\n const srcY = topDown ? y : meta.height - 1 - y;\n const rowStart = dataOffset + srcY * rowStride;\n for (let x = 0; x < meta.width; x++) {\n const dstIdx = (y * meta.width + x) * 4;\n if (bpp <= 8) {\n let pIdx = 0;\n if (bpp === 8) {\n pIdx = bytes[rowStart + x] ?? 0;\n } else if (bpp === 4) {\n const b = bytes[rowStart + (x >>> 1)] ?? 0;\n pIdx = (x & 1) === 0 ? (b >>> 4) & 0x0f : b & 0x0f;\n } else if (bpp === 1) {\n const b = bytes[rowStart + (x >>> 3)] ?? 0;\n pIdx = (b >>> (7 - (x & 7))) & 1;\n }\n const pOff = paletteOffset + pIdx * paletteStep;\n rgba[dstIdx] = bytes[pOff + 2] ?? 0;\n rgba[dstIdx + 1] = bytes[pOff + 1] ?? 0;\n rgba[dstIdx + 2] = bytes[pOff] ?? 0;\n rgba[dstIdx + 3] = 255;\n } else {\n const bytesPerPixel = bpp >>> 3;\n const srcIdx = rowStart + x * bytesPerPixel;\n rgba[dstIdx] = bytes[srcIdx + 2] ?? 0;\n rgba[dstIdx + 1] = bytes[srcIdx + 1] ?? 0;\n rgba[dstIdx + 2] = bytes[srcIdx] ?? 0;\n rgba[dstIdx + 3] = bytesPerPixel === 4 ? (bytes[srcIdx + 3] ?? 255) : 255;\n }\n }\n }\n return {\n width: meta.width,\n height: meta.height,\n data: rgba,\n format: \"bmp\",\n space: \"srgb\",\n channels: meta.channels,\n depth: \"uchar\",\n density: meta.density,\n hasAlpha: meta.hasAlpha\n };\n}\n\nexport function encodeBmpImage(img: RgbaImage): Uint8Array {\n const { width, height, data } = img;\n const rowStride = Math.ceil((width * 3) / 4) * 4;\n const pixelSize = rowStride * height;\n const out = new Uint8Array(54 + pixelSize);\n const view = new DataView(out.buffer);\n out[0] = 0x42;\n out[1] = 0x4d;\n view.setUint32(2, 54 + pixelSize, true);\n view.setUint32(10, 54, true);\n view.setUint32(14, 40, true);\n view.setInt32(18, width, true);\n view.setInt32(22, height, true);\n view.setUint16(26, 1, true);\n view.setUint16(28, 24, true);\n view.setUint32(34, pixelSize, true);\n const ppm = Math.round((img.density ?? 72) / 0.0254);\n view.setInt32(38, ppm, true);\n view.setInt32(42, ppm, true);\n\n for (let y = 0; y < height; y++) {\n const dstRow = 54 + (height - 1 - y) * rowStride;\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n out[dstRow + x * 3] = data[srcIdx + 2]!;\n out[dstRow + x * 3 + 1] = data[srcIdx + 1]!;\n out[dstRow + x * 3 + 2] = data[srcIdx]!;\n }\n }\n return out;\n}\n\nexport function encodeTiffImage(\n img: RgbaImage,\n options?: { readonly density?: number; readonly orientation?: number }\n): Uint8Array {\n const { width, height, data } = img;\n const pixelBytes = width * height * 4;\n const density = Math.max(1, Math.round(options?.density ?? img.density ?? 72));\n const orientation = options?.orientation ?? img.orientation ?? 1;\n // Little-endian baseline RGBA TIFF: 8-byte header + pixel data + IFD (12 entries) + extras\n const ifdOffset = 8 + pixelBytes;\n const numEntries = 12;\n const bpsOffset = ifdOffset + 2 + numEntries * 12 + 4;\n const xResOffset = bpsOffset + 8;\n const yResOffset = xResOffset + 8;\n const out = new Uint8Array(yResOffset + 8);\n const view = new DataView(out.buffer);\n out[0] = 0x49;\n out[1] = 0x49;\n view.setUint16(2, 42, true);\n view.setUint32(4, ifdOffset, true);\n out.set(data, 8);\n\n view.setUint16(ifdOffset, numEntries, true);\n const writeEntry = (idx: number, tag: number, type: number, count: number, val: number) => {\n const p = ifdOffset + 2 + idx * 12;\n view.setUint16(p, tag, true);\n view.setUint16(p + 2, type, true);\n view.setUint32(p + 4, count, true);\n if (type === 3 && count === 1) {\n view.setUint16(p + 8, val, true);\n } else {\n view.setUint32(p + 8, val, true);\n }\n };\n writeEntry(0, 256, 4, 1, width); // ImageWidth\n writeEntry(1, 257, 4, 1, height); // ImageLength\n writeEntry(2, 258, 3, 4, bpsOffset); // BitsPerSample (8,8,8,8)\n writeEntry(3, 259, 3, 1, 1); // Compression = None\n writeEntry(4, 262, 3, 1, 2); // PhotometricInterpretation = RGB\n writeEntry(5, 273, 4, 1, 8); // StripOffsets\n writeEntry(6, 274, 3, 1, orientation); // Orientation\n writeEntry(7, 277, 3, 1, 4); // SamplesPerPixel = 4\n writeEntry(8, 279, 4, 1, pixelBytes); // StripByteCounts\n writeEntry(9, 282, 5, 1, xResOffset); // XResolution\n writeEntry(10, 283, 5, 1, yResOffset); // YResolution\n writeEntry(11, 296, 3, 1, 2); // ResolutionUnit = Inch\n view.setUint32(ifdOffset + 2 + numEntries * 12, 0, true);\n view.setUint16(bpsOffset, 8, true);\n view.setUint16(bpsOffset + 2, 8, true);\n view.setUint16(bpsOffset + 4, 8, true);\n view.setUint16(bpsOffset + 6, 8, true);\n view.setUint32(xResOffset, density, true);\n view.setUint32(xResOffset + 4, 1, true);\n view.setUint32(yResOffset, density, true);\n view.setUint32(yResOffset + 4, 1, true);\n return out;\n}\n\nfunction readTiffTagValues(\n view: DataView,\n entryPos: number,\n le: boolean\n): number[] {\n const type = view.getUint16(entryPos + 2, le);\n const count = view.getUint32(entryPos + 4, le);\n const elemSize = type === 3 ? 2 : type === 4 ? 4 : type === 5 ? 8 : 1;\n const totalBytes = count * elemSize;\n const valPos = totalBytes <= 4 ? entryPos + 8 : view.getUint32(entryPos + 8, le);\n const values: number[] = [];\n for (let i = 0; i < count; i++) {\n const off = valPos + i * elemSize;\n if (off + elemSize > view.byteLength) break;\n if (type === 3) values.push(view.getUint16(off, le));\n else if (type === 4) values.push(view.getUint32(off, le));\n else if (type === 5) {\n const num = view.getUint32(off, le);\n const den = view.getUint32(off + 4, le);\n values.push(den > 0 ? num / den : num);\n }\n else values.push(view.getUint8(off));\n }\n return values;\n}\n\nfunction decodePackBits(src: Uint8Array, expectedLen: number): Uint8Array {\n const out = new Uint8Array(expectedLen);\n let sp = 0;\n let dp = 0;\n while (sp < src.length && dp < expectedLen) {\n const n = (src[sp++]! << 24) >> 24;\n if (n >= 0) {\n const count = n + 1;\n for (let i = 0; i < count && sp < src.length && dp < expectedLen; i++) {\n out[dp++] = src[sp++]!;\n }\n } else if (n !== -128) {\n const count = 1 - n;\n const val = src[sp++] ?? 0;\n for (let i = 0; i < count && dp < expectedLen; i++) {\n out[dp++] = val;\n }\n }\n }\n return out;\n}\n\nfunction decodeTiffLzw(src: Uint8Array, expectedLen: number): Uint8Array {\n const out = new Uint8Array(expectedLen);\n let dp = 0;\n let bitPos = 0;\n let codeSize = 9;\n const CLEAR_CODE = 256;\n const EOI_CODE = 257;\n let dict: Uint8Array[] = [];\n\n const resetDict = () => {\n dict = [];\n for (let i = 0; i < 256; i++) dict[i] = new Uint8Array([i]);\n dict[CLEAR_CODE] = new Uint8Array(0);\n dict[EOI_CODE] = new Uint8Array(0);\n codeSize = 9;\n };\n resetDict();\n\n const readCode = (): number => {\n if (bitPos + codeSize > src.length * 8) return EOI_CODE;\n let code = 0;\n for (let i = 0; i < codeSize; i++) {\n const byteIdx = (bitPos + i) >>> 3;\n const bitIdx = 7 - ((bitPos + i) & 7);\n code = (code << 1) | ((src[byteIdx]! >>> bitIdx) & 1);\n }\n bitPos += codeSize;\n return code;\n };\n\n let prevEntry: Uint8Array | undefined;\n while (dp < expectedLen) {\n const code = readCode();\n if (code === EOI_CODE) break;\n if (code === CLEAR_CODE) {\n resetDict();\n const first = readCode();\n if (first === EOI_CODE) break;\n const entry = dict[first] ?? new Uint8Array([first & 0xff]);\n for (let i = 0; i < entry.length && dp < expectedLen; i++) out[dp++] = entry[i]!;\n prevEntry = entry;\n continue;\n }\n let entry: Uint8Array;\n if (code < dict.length && dict[code]) {\n entry = dict[code]!;\n } else if (prevEntry && code === dict.length) {\n entry = new Uint8Array(prevEntry.length + 1);\n entry.set(prevEntry, 0);\n entry[prevEntry.length] = prevEntry[0]!;\n } else {\n break;\n }\n for (let i = 0; i < entry.length && dp < expectedLen; i++) out[dp++] = entry[i]!;\n if (prevEntry && dict.length < 4096) {\n const next = new Uint8Array(prevEntry.length + 1);\n next.set(prevEntry, 0);\n next[prevEntry.length] = entry[0]!;\n dict.push(next);\n if (dict.length === 511 && codeSize === 9) codeSize = 10;\n else if (dict.length === 1023 && codeSize === 10) codeSize = 11;\n else if (dict.length === 2047 && codeSize === 11) codeSize = 12;\n }\n prevEntry = entry;\n }\n return out;\n}\n\nexport function decodeTiffImage(bytes: Uint8Array): RgbaImage {\n const le = bytes[0] === 0x49;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const ifdOffset = view.getUint32(4, le);\n const numEntries = view.getUint16(ifdOffset, le);\n let width = 0;\n let height = 0;\n let bitsPerSample = 8;\n let compression = 1;\n let photometric = 2;\n let stripOffsets: number[] = [8];\n let stripByteCounts: number[] = [];\n let tileWidth = 0;\n let tileLength = 0;\n let tileOffsets: number[] = [];\n let tileByteCounts: number[] = [];\n let samplesPerPixel = 4;\n let rowsPerStrip = 0;\n let predictor = 1;\n let xRes = 72;\n let resUnit = 2;\n let orientation: number | undefined;\n for (let i = 0; i < numEntries; i++) {\n const p = ifdOffset + 2 + i * 12;\n const tag = view.getUint16(p, le);\n const vals = readTiffTagValues(view, p, le);\n const first = vals[0] ?? 0;\n if (tag === 256) width = first;\n else if (tag === 257) height = first;\n else if (tag === 258 && first > 0) bitsPerSample = first;\n else if (tag === 259 && first > 0) compression = first;\n else if (tag === 262) photometric = first;\n else if (tag === 273 && vals.length > 0) stripOffsets = vals;\n else if (tag === 274 && first >= 1 && first <= 8) orientation = first;\n else if (tag === 277 && first > 0) samplesPerPixel = first;\n else if (tag === 278 && first > 0) rowsPerStrip = first;\n else if (tag === 279 && vals.length > 0) stripByteCounts = vals;\n else if (tag === 282 && first > 0) xRes = first;\n else if (tag === 296 && (first === 2 || first === 3)) resUnit = first;\n else if (tag === 317 && first > 0) predictor = first;\n else if (tag === 322 && first > 0) tileWidth = first;\n else if (tag === 323 && first > 0) tileLength = first;\n else if (tag === 324 && vals.length > 0) tileOffsets = vals;\n else if (tag === 325 && vals.length > 0) tileByteCounts = vals;\n }\n\n const bytesPerSample = Math.max(1, bitsPerSample >>> 3);\n const bytesPerPixel = samplesPerPixel * bytesPerSample;\n const rowByteWidth = width * samplesPerPixel * bytesPerSample;\n const totalExpectedBytes = height * rowByteWidth;\n const combined = new Uint8Array(totalExpectedBytes);\n\n const decompressChunk = (off: number, rawLen: number, expectedBytes: number): Uint8Array => {\n const rawSlice = bytes.subarray(off, Math.min(bytes.length, off + rawLen));\n if (compression === 8 || compression === 32946) {\n try {\n return inflate(rawSlice);\n } catch {\n return rawSlice;\n }\n }\n if (compression === 5) return decodeTiffLzw(rawSlice, expectedBytes);\n if (compression === 32773) return decodePackBits(rawSlice, expectedBytes);\n return rawSlice;\n };\n\n if (tileWidth > 0 && tileLength > 0 && tileOffsets.length > 0) {\n const tilesAcross = Math.max(1, Math.ceil(width / tileWidth));\n const tileRowByteWidth = tileWidth * bytesPerPixel;\n const expectedTileBytes = tileLength * tileRowByteWidth;\n for (let t = 0; t < tileOffsets.length; t++) {\n const off = tileOffsets[t]!;\n const rawLen = tileByteCounts[t] ?? Math.max(0, bytes.length - off);\n const decodedTile = new Uint8Array(decompressChunk(off, rawLen, expectedTileBytes));\n if (predictor === 2 && bytesPerSample === 1) {\n for (let ry = 0; ry < tileLength; ry++) {\n const rStart = ry * tileRowByteWidth;\n for (let rx = samplesPerPixel; rx < tileRowByteWidth && rStart + rx < decodedTile.length; rx++) {\n decodedTile[rStart + rx] =\n ((decodedTile[rStart + rx] ?? 0) + (decodedTile[rStart + rx - samplesPerPixel] ?? 0)) &\n 0xff;\n }\n }\n }\n const tx = (t % tilesAcross) * tileWidth;\n const ty = Math.floor(t / tilesAcross) * tileLength;\n const validW = Math.max(0, Math.min(tileWidth, width - tx));\n const validH = Math.max(0, Math.min(tileLength, height - ty));\n const validRowBytes = validW * bytesPerPixel;\n for (let ry = 0; ry < validH; ry++) {\n const srcStart = ry * tileRowByteWidth;\n const dstStart = (ty + ry) * rowByteWidth + tx * bytesPerPixel;\n if (srcStart + validRowBytes <= decodedTile.length && dstStart + validRowBytes <= combined.length) {\n combined.set(decodedTile.subarray(srcStart, srcStart + validRowBytes), dstStart);\n }\n }\n }\n } else {\n const effectiveRowsPerStrip = rowsPerStrip > 0 ? rowsPerStrip : height;\n let dstOff = 0;\n for (let s = 0; s < stripOffsets.length && dstOff < totalExpectedBytes; s++) {\n const off = stripOffsets[s]!;\n const remainingBytes = totalExpectedBytes - dstOff;\n const expectedStripBytes = Math.min(remainingBytes, effectiveRowsPerStrip * rowByteWidth);\n const rawLen = stripByteCounts[s] ?? Math.max(0, bytes.length - off);\n const decodedStrip = decompressChunk(off, rawLen, expectedStripBytes);\n const copyLen = Math.min(decodedStrip.length, remainingBytes);\n combined.set(decodedStrip.subarray(0, copyLen), dstOff);\n dstOff += copyLen;\n }\n\n if (predictor === 2 && bytesPerSample === 1) {\n for (let y = 0; y < height; y++) {\n const rowStart = y * rowByteWidth;\n for (let x = samplesPerPixel; x < rowByteWidth; x++) {\n combined[rowStart + x] =\n ((combined[rowStart + x] ?? 0) + (combined[rowStart + x - samplesPerPixel] ?? 0)) & 0xff;\n }\n }\n }\n }\n\n const readSample8 = (pixelIdx: number, ch: number): number => {\n const base = (pixelIdx * samplesPerPixel + ch) * bytesPerSample;\n if (bytesPerSample === 2) {\n const val16 = le\n ? (combined[base] ?? 0) | ((combined[base + 1] ?? 0) << 8)\n : ((combined[base] ?? 0) << 8) | (combined[base + 1] ?? 0);\n return Math.round((val16 * 255) / 65535);\n }\n return combined[base] ?? 0;\n };\n\n const rgba = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n if (samplesPerPixel === 1) {\n let g = readSample8(i, 0);\n if (photometric === 0) g = 255 - g;\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = 255;\n } else if (samplesPerPixel === 2) {\n let g = readSample8(i, 0);\n if (photometric === 0) g = 255 - g;\n rgba[i * 4] = g;\n rgba[i * 4 + 1] = g;\n rgba[i * 4 + 2] = g;\n rgba[i * 4 + 3] = readSample8(i, 1);\n } else {\n rgba[i * 4] = readSample8(i, 0);\n rgba[i * 4 + 1] = readSample8(i, 1);\n rgba[i * 4 + 2] = readSample8(i, 2);\n rgba[i * 4 + 3] = samplesPerPixel >= 4 ? readSample8(i, 3) : 255;\n }\n }\n const density = resUnit === 3 ? Math.max(1, Math.round(xRes * 2.54)) : Math.max(1, Math.round(xRes));\n return {\n width,\n height,\n data: rgba,\n format: \"tiff\",\n space: samplesPerPixel < 3 ? \"b-w\" : \"srgb\",\n channels: samplesPerPixel === 4 ? 4 : samplesPerPixel === 1 ? 1 : 3,\n depth: bitsPerSample === 16 ? \"ushort\" : \"uchar\",\n density,\n hasAlpha: samplesPerPixel === 2 || samplesPerPixel === 4,\n ...(orientation !== undefined ? { orientation } : {})\n };\n}\n", "import { PdfDocument, renderPdfPageToPng } from \"@poe-code/pdf-ast\";\nimport { parseColor, type ImageMetadata, type RgbaImage } from \"../ast.js\";\nimport { decodePngImage } from \"./png.js\";\n\nexport function isPdfBytes(bytes: Uint8Array): boolean {\n if (bytes.length < 5) return false;\n const limit = Math.min(bytes.length - 5, 1024);\n for (let i = 0; i <= limit; i++) {\n if (\n bytes[i] === 0x25 && // %\n bytes[i + 1] === 0x50 && // P\n bytes[i + 2] === 0x44 && // D\n bytes[i + 3] === 0x46 && // F\n bytes[i + 4] === 0x2d // -\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport function isSvgBytes(bytes: Uint8Array): boolean {\n if (bytes.length < 5) return false;\n const head = new TextDecoder(\"utf-8\", { fatal: false })\n .decode(bytes.subarray(0, Math.min(bytes.length, 512)))\n .trimStart();\n return head.startsWith(\"<svg\") || (head.startsWith(\"<?xml\") && head.includes(\"<svg\"));\n}\n\nexport function readPdfMetadata(\n bytes: Uint8Array,\n options?: { readonly page?: number; readonly density?: number }\n): ImageMetadata {\n const doc = PdfDocument.load(bytes);\n const pageIdx = Math.max(0, Math.min(doc.pageCount - 1, options?.page ?? 0));\n const page = doc.getPage(pageIdx);\n const density = options?.density ?? 72;\n const scale = density / 72;\n const width = Math.max(1, Math.round(page.width * scale));\n const height = Math.max(1, Math.round(page.height * scale));\n\n return {\n format: \"pdf\",\n width,\n height,\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density,\n hasAlpha: true,\n pages: doc.pageCount,\n pagePrimary: pageIdx,\n size: bytes.byteLength\n };\n}\n\nexport function decodePdfImage(\n bytes: Uint8Array,\n options?: { readonly page?: number; readonly density?: number }\n): RgbaImage {\n const doc = PdfDocument.load(bytes);\n const pageIdx = Math.max(0, Math.min(doc.pageCount - 1, options?.page ?? 0));\n const density = options?.density ?? 72;\n const scale = density / 72;\n const pngBytes = renderPdfPageToPng(bytes, pageIdx, { scale });\n const decoded = decodePngImage(pngBytes);\n return {\n ...decoded,\n format: \"pdf\",\n density,\n pages: doc.pageCount\n };\n}\n\nfunction parseSvgNumber(val: string | undefined, fallback: number): number {\n if (!val) return fallback;\n const trimmed = val.trim();\n const match = /^([+-]?(?:\\d+\\.?\\d*|\\.\\d+))(px|pt|pc|mm|cm|in|%)?$/i.exec(trimmed);\n if (!match) {\n const num = parseFloat(trimmed);\n return Number.isFinite(num) && num > 0 ? num : fallback;\n }\n const num = parseFloat(match[1]!);\n if (!Number.isFinite(num) || num <= 0) return fallback;\n const unit = (match[2] ?? \"px\").toLowerCase();\n switch (unit) {\n case \"in\":\n return num * 72;\n case \"cm\":\n return (num * 72) / 2.54;\n case \"mm\":\n return (num * 72) / 25.4;\n case \"pc\":\n return num * 12;\n case \"%\":\n return (num / 100) * fallback;\n case \"pt\":\n case \"px\":\n default:\n return num;\n }\n}\n\nfunction parseSvgCoord(val: string | undefined, fallback: number, refSize = 0): number {\n if (!val) return fallback;\n const trimmed = val.trim();\n const match = /^([+-]?(?:\\d+\\.?\\d*|\\.\\d+))(px|pt|pc|mm|cm|in|%)?$/i.exec(trimmed);\n if (!match) {\n const num = parseFloat(trimmed);\n return Number.isFinite(num) ? num : fallback;\n }\n const num = parseFloat(match[1]!);\n if (!Number.isFinite(num)) return fallback;\n const unit = (match[2] ?? \"px\").toLowerCase();\n switch (unit) {\n case \"in\":\n return num * 72;\n case \"cm\":\n return (num * 72) / 2.54;\n case \"mm\":\n return (num * 72) / 25.4;\n case \"pc\":\n return num * 12;\n case \"%\":\n return (num / 100) * refSize;\n case \"pt\":\n case \"px\":\n default:\n return num;\n }\n}\n\nfunction getAttr(tagText: string, attrName: string): string | undefined {\n const regex = new RegExp(`\\\\b${attrName}\\\\s*=\\\\s*[\"']([^\"']*)[\"']`, \"i\");\n const match = regex.exec(tagText);\n return match?.[1];\n}\n\nexport function readSvgMetadata(\n bytes: Uint8Array,\n options?: { readonly density?: number }\n): ImageMetadata {\n const text = new TextDecoder().decode(bytes);\n const svgTagMatch = /<svg\\b[^>]*>/i.exec(text);\n const svgTag = svgTagMatch?.[0] ?? \"\";\n const viewBoxRaw = getAttr(svgTag, \"viewBox\");\n let baseW = 300;\n let baseH = 150;\n if (viewBoxRaw) {\n const parts = viewBoxRaw\n .trim()\n .split(/[\\s,]+/)\n .map(Number);\n if (parts.length === 4 && parts[2]! > 0 && parts[3]! > 0) {\n baseW = parts[2]!;\n baseH = parts[3]!;\n }\n }\n baseW = parseSvgNumber(getAttr(svgTag, \"width\"), baseW);\n baseH = parseSvgNumber(getAttr(svgTag, \"height\"), baseH);\n\n const density = options?.density ?? 72;\n const scale = density / 72;\n const width = Math.max(1, Math.round(baseW * scale));\n const height = Math.max(1, Math.round(baseH * scale));\n\n return {\n format: \"svg\",\n width,\n height,\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density,\n hasAlpha: true,\n size: bytes.byteLength\n };\n}\n\nexport function decodeSvgImage(\n bytes: Uint8Array,\n options?: { readonly density?: number }\n): RgbaImage {\n const meta = readSvgMetadata(bytes, options);\n const { width, height, density } = meta;\n const data = new Uint8Array(width * height * 4);\n const text = new TextDecoder().decode(bytes);\n const svgTagMatch = /<svg\\b[^>]*>/i.exec(text);\n const svgTag = svgTagMatch?.[0] ?? \"\";\n const viewBoxRaw = getAttr(svgTag, \"viewBox\");\n let vbMinX = 0;\n let vbMinY = 0;\n let vbW = width / (density / 72);\n let vbH = height / (density / 72);\n if (viewBoxRaw) {\n const parts = viewBoxRaw\n .trim()\n .split(/[\\s,]+/)\n .map(Number);\n if (parts.length === 4 && parts[2]! > 0 && parts[3]! > 0) {\n vbMinX = parts[0]!;\n vbMinY = parts[1]!;\n vbW = parts[2]!;\n vbH = parts[3]!;\n }\n }\n const scaleX = width / Math.max(1e-6, vbW);\n const scaleY = height / Math.max(1e-6, vbH);\n const mapX = (ux: number) => (ux - vbMinX) * scaleX;\n const mapY = (uy: number) => (uy - vbMinY) * scaleY;\n\n const blendPixel = (px: number, py: number, r: number, g: number, b: number, a: number) => {\n if (px < 0 || py < 0 || px >= width || py >= height || a <= 0) return;\n const idx = (py * width + px) * 4;\n const srcA = a / 255;\n const dstA = data[idx + 3]! / 255;\n const outA = srcA + dstA * (1 - srcA);\n if (outA <= 0) return;\n data[idx] = Math.round((r * srcA + data[idx]! * dstA * (1 - srcA)) / outA);\n data[idx + 1] = Math.round((g * srcA + data[idx + 1]! * dstA * (1 - srcA)) / outA);\n data[idx + 2] = Math.round((b * srcA + data[idx + 2]! * dstA * (1 - srcA)) / outA);\n data[idx + 3] = Math.round(outA * 255);\n };\n\n const drawSegment = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n strokeWidth: number,\n r: number,\n g: number,\n b: number,\n a: number\n ) => {\n if (a <= 0) return;\n const steps = Math.max(1, Math.ceil(Math.hypot(x2 - x1, y2 - y1) * 2));\n const half = Math.max(0, (strokeWidth - 1) / 2);\n const rad = Math.ceil(half);\n for (let s = 0; s <= steps; s++) {\n const px = x1 + ((x2 - x1) * s) / steps;\n const py = y1 + ((y2 - y1) * s) / steps;\n for (let dy = -rad; dy <= rad; dy++) {\n for (let dx = -rad; dx <= rad; dx++) {\n if (dx * dx + dy * dy <= (half + 0.5) * (half + 0.5)) {\n blendPixel(Math.round(px + dx), Math.round(py + dy), r, g, b, a);\n }\n }\n }\n }\n };\n\n const parsePointsList = (ptsRaw: string | undefined): Array<[number, number]> => {\n if (!ptsRaw) return [];\n const nums = ptsRaw\n .trim()\n .split(/[\\s,]+/)\n .map(Number)\n .filter(Number.isFinite);\n const pts: Array<[number, number]> = [];\n for (let i = 0; i + 1 < nums.length; i += 2) {\n pts.push([mapX(nums[i]!), mapY(nums[i + 1]!)]);\n }\n return pts;\n };\n\n // Rasterize <rect>, <circle>, <ellipse>, <line>, <polygon>, and <polyline> elements in document order\n const elemRegex = /<(rect|circle|ellipse|line|polygon|polyline)\\b([^>]*)\\/?>/gi;\n let match: RegExpExecArray | null;\n while ((match = elemRegex.exec(text)) !== null) {\n const tag = match[1]!.toLowerCase();\n const attrs = match[2]!;\n const fillAttr = getAttr(attrs, \"fill\") ?? (tag === \"line\" ? \"none\" : \"#000000\");\n const opacity = parseFloat(getAttr(attrs, \"opacity\") ?? getAttr(attrs, \"fill-opacity\") ?? \"1\");\n const fill = fillAttr === \"none\" ? { r: 0, g: 0, b: 0, a: 0 } : parseColor(fillAttr);\n const effAlpha = Math.round(fill.a * (Number.isFinite(opacity) ? opacity : 1));\n const strokeAttr = getAttr(attrs, \"stroke\");\n const stroke = strokeAttr && strokeAttr !== \"none\" ? parseColor(strokeAttr) : { r: 0, g: 0, b: 0, a: 0 };\n const strokeW = parseSvgCoord(getAttr(attrs, \"stroke-width\"), 1, vbW) * ((scaleX + scaleY) / 2);\n\n if (tag === \"rect\" && effAlpha > 0) {\n const rx = Math.round(mapX(parseSvgCoord(getAttr(attrs, \"x\"), 0, vbW)));\n const ry = Math.round(mapY(parseSvgCoord(getAttr(attrs, \"y\"), 0, vbH)));\n const rw = Math.round(parseSvgNumber(getAttr(attrs, \"width\"), vbW) * scaleX);\n const rh = Math.round(parseSvgNumber(getAttr(attrs, \"height\"), vbH) * scaleY);\n for (let y = Math.max(0, ry); y < Math.min(height, ry + rh); y++) {\n for (let x = Math.max(0, rx); x < Math.min(width, rx + rw); x++) {\n blendPixel(x, y, fill.r, fill.g, fill.b, effAlpha);\n }\n }\n } else if (tag === \"circle\" && effAlpha > 0) {\n const cx = mapX(parseSvgCoord(getAttr(attrs, \"cx\"), 0, vbW));\n const cy = mapY(parseSvgCoord(getAttr(attrs, \"cy\"), 0, vbH));\n const r = parseSvgCoord(getAttr(attrs, \"r\"), 0, (vbW + vbH) / 2);\n const rx = Math.max(0.5, r * scaleX);\n const ry = Math.max(0.5, r * scaleY);\n const minY = Math.max(0, Math.floor(cy - ry));\n const maxY = Math.min(height - 1, Math.ceil(cy + ry));\n const minX = Math.max(0, Math.floor(cx - rx));\n const maxX = Math.min(width - 1, Math.ceil(cx + rx));\n for (let y = minY; y <= maxY; y++) {\n for (let x = minX; x <= maxX; x++) {\n const dx = (x + 0.5 - cx) / rx;\n const dy = (y + 0.5 - cy) / ry;\n if (dx * dx + dy * dy <= 1) {\n blendPixel(x, y, fill.r, fill.g, fill.b, effAlpha);\n }\n }\n }\n } else if (tag === \"ellipse\" && effAlpha > 0) {\n const cx = mapX(parseSvgCoord(getAttr(attrs, \"cx\"), 0, vbW));\n const cy = mapY(parseSvgCoord(getAttr(attrs, \"cy\"), 0, vbH));\n const rx = Math.max(0.5, parseSvgCoord(getAttr(attrs, \"rx\"), 0, vbW) * scaleX);\n const ry = Math.max(0.5, parseSvgCoord(getAttr(attrs, \"ry\"), 0, vbH) * scaleY);\n const minY = Math.max(0, Math.floor(cy - ry));\n const maxY = Math.min(height - 1, Math.ceil(cy + ry));\n const minX = Math.max(0, Math.floor(cx - rx));\n const maxX = Math.min(width - 1, Math.ceil(cx + rx));\n for (let y = minY; y <= maxY; y++) {\n for (let x = minX; x <= maxX; x++) {\n const dx = (x + 0.5 - cx) / rx;\n const dy = (y + 0.5 - cy) / ry;\n if (dx * dx + dy * dy <= 1) {\n blendPixel(x, y, fill.r, fill.g, fill.b, effAlpha);\n }\n }\n }\n } else if (tag === \"line\") {\n const lineStroke = parseColor(getAttr(attrs, \"stroke\") ?? \"#000000\");\n const x1 = mapX(parseSvgCoord(getAttr(attrs, \"x1\"), 0, vbW));\n const y1 = mapY(parseSvgCoord(getAttr(attrs, \"y1\"), 0, vbH));\n const x2 = mapX(parseSvgCoord(getAttr(attrs, \"x2\"), 0, vbW));\n const y2 = mapY(parseSvgCoord(getAttr(attrs, \"y2\"), 0, vbH));\n drawSegment(x1, y1, x2, y2, strokeW, lineStroke.r, lineStroke.g, lineStroke.b, lineStroke.a);\n } else if (tag === \"polygon\" || tag === \"polyline\") {\n const pts = parsePointsList(getAttr(attrs, \"points\"));\n if (pts.length >= 3 && effAlpha > 0 && (tag === \"polygon\" || getAttr(attrs, \"fill\") !== undefined)) {\n let minX = width;\n let maxX = 0;\n let minY = height;\n let maxY = 0;\n for (const [px, py] of pts) {\n if (px < minX) minX = px;\n if (px > maxX) maxX = px;\n if (py < minY) minY = py;\n if (py > maxY) maxY = py;\n }\n const y0 = Math.max(0, Math.floor(minY));\n const y1 = Math.min(height - 1, Math.ceil(maxY));\n const x0 = Math.max(0, Math.floor(minX));\n const x1 = Math.min(width - 1, Math.ceil(maxX));\n for (let y = y0; y <= y1; y++) {\n const py = y + 0.5;\n for (let x = x0; x <= x1; x++) {\n const px = x + 0.5;\n let inside = false;\n for (let i = 0, j = pts.length - 1; i < pts.length; j = i++) {\n const [xi, yi] = pts[i]!;\n const [xj, yj] = pts[j]!;\n if (yi > py !== yj > py && px < ((xj - xi) * (py - yi)) / (yj - yi) + xi) {\n inside = !inside;\n }\n }\n if (inside) {\n blendPixel(x, y, fill.r, fill.g, fill.b, effAlpha);\n }\n }\n }\n }\n if (pts.length >= 2 && (stroke.a > 0 || tag === \"polyline\")) {\n const sCol = stroke.a > 0 ? stroke : parseColor(getAttr(attrs, \"stroke\") ?? \"#000000\");\n for (let i = 0; i + 1 < pts.length; i++) {\n drawSegment(pts[i]![0], pts[i]![1], pts[i + 1]![0], pts[i + 1]![1], strokeW, sCol.r, sCol.g, sCol.b, sCol.a);\n }\n if (tag === \"polygon\" && stroke.a > 0) {\n drawSegment(\n pts[pts.length - 1]![0],\n pts[pts.length - 1]![1],\n pts[0]![0],\n pts[0]![1],\n strokeW,\n sCol.r,\n sCol.g,\n sCol.b,\n sCol.a\n );\n }\n }\n }\n }\n\n return {\n width,\n height,\n data,\n format: \"svg\",\n space: \"srgb\",\n channels: 4,\n depth: \"uchar\",\n density,\n hasAlpha: true\n };\n}\n", "import {\n parseColor,\n type ImageFormat,\n type ImageMetadata,\n type OutputEncodeOptions,\n type RgbaImage,\n type SharpInputOptions\n} from \"../ast.js\";\nimport { decodePngImage, encodePngImage, isPngBytes, readPngMetadata } from \"./png.js\";\nimport { decodeJpegImage, encodeJpegImage, isJpegBytes, readJpegMetadata } from \"./jpeg.js\";\nimport { decodeWebpImage, encodeWebpImage, isWebpBytes, readWebpMetadata } from \"./webp.js\";\nimport {\n decodeHeifImage,\n detectHeifFormat,\n encodeHeifImage,\n isHeifBytes,\n readHeifMetadata\n} from \"./heif.js\";\nimport { decodeGifImage, encodeGifImage, isGifBytes, readGifMetadata } from \"./gif.js\";\nimport {\n decodeBmpImage,\n decodeNetpbmImage,\n decodeTiffImage,\n encodeBmpImage,\n encodePbm,\n encodePgm,\n encodePpm,\n encodeTiffImage,\n isBmpBytes,\n isNetpbmBytes,\n isTiffBytes,\n readBmpMetadata,\n readNetpbmMetadata\n} from \"./netpbm.js\";\nimport {\n decodePdfImage,\n decodeSvgImage,\n isPdfBytes,\n isSvgBytes,\n readPdfMetadata,\n readSvgMetadata\n} from \"./svg-pdf.js\";\n\nconst DEFAULT_PIXEL_LIMIT = 268402689; // 16383 * 16383 (matches sharp default)\nconst DECODE_CACHE = new WeakMap<Uint8Array, RgbaImage>();\n\nexport function detectImageFormat(bytes: Uint8Array): ImageFormat {\n if (isPngBytes(bytes)) return \"png\";\n if (isJpegBytes(bytes)) return \"jpeg\";\n if (isWebpBytes(bytes)) return \"webp\";\n if (isHeifBytes(bytes)) return detectHeifFormat(bytes) ?? \"heic\";\n if (isGifBytes(bytes)) return \"gif\";\n if (isNetpbmBytes(bytes)) {\n const m = String.fromCharCode(bytes[0]!, bytes[1]!);\n if (m === \"P1\" || m === \"P4\") return \"pbm\";\n if (m === \"P2\" || m === \"P5\") return \"pgm\";\n return \"ppm\";\n }\n if (isBmpBytes(bytes)) return \"bmp\";\n if (isTiffBytes(bytes)) return \"tiff\";\n if (isPdfBytes(bytes)) return \"pdf\";\n if (isSvgBytes(bytes)) return \"svg\";\n throw new Error(\"Input buffer contains unsupported image format\");\n}\n\nexport function readImageMetadata(\n bytes?: Uint8Array,\n options?: SharpInputOptions\n): ImageMetadata {\n if (options?.create) {\n const { width, height, channels } = options.create;\n return {\n format: \"raw\",\n width,\n height,\n space: \"srgb\",\n channels,\n depth: \"uchar\",\n density: options.density ?? 72,\n hasAlpha: channels === 4,\n size: width * height * channels\n };\n }\n if (options?.raw && bytes) {\n const { width, height, channels } = options.raw;\n return {\n format: \"raw\",\n width,\n height,\n space: channels < 3 ? \"b-w\" : \"srgb\",\n channels,\n depth: \"uchar\",\n density: options.density ?? 72,\n hasAlpha: channels === 2 || channels === 4,\n size: bytes.byteLength\n };\n }\n if (!bytes || bytes.length === 0) {\n throw new Error(\"Empty image input\");\n }\n const fmt = detectImageFormat(bytes);\n let meta: ImageMetadata;\n switch (fmt) {\n case \"png\":\n meta = readPngMetadata(bytes);\n break;\n case \"jpeg\":\n meta = readJpegMetadata(bytes);\n break;\n case \"webp\":\n meta = readWebpMetadata(bytes);\n break;\n case \"heic\":\n case \"heif\":\n case \"avif\":\n meta = readHeifMetadata(bytes);\n break;\n case \"gif\":\n meta = readGifMetadata(bytes);\n break;\n case \"ppm\":\n case \"pgm\":\n case \"pbm\":\n meta = readNetpbmMetadata(bytes);\n break;\n case \"bmp\":\n meta = readBmpMetadata(bytes);\n break;\n case \"tiff\": {\n const decoded = decodeTiffImage(bytes);\n meta = {\n format: \"tiff\",\n width: decoded.width,\n height: decoded.height,\n space: decoded.space,\n channels: decoded.channels,\n depth: decoded.depth,\n density: decoded.density,\n hasAlpha: decoded.hasAlpha,\n ...(decoded.orientation !== undefined ? { orientation: decoded.orientation } : {}),\n size: bytes.byteLength\n };\n break;\n }\n case \"pdf\":\n meta = readPdfMetadata(bytes, options);\n break;\n case \"svg\":\n meta = readSvgMetadata(bytes, options);\n break;\n default:\n throw new Error(`Unsupported format: ${fmt}`);\n }\n\n const limit =\n options?.limitInputPixels === false\n ? Infinity\n : (options?.limitInputPixels ?? DEFAULT_PIXEL_LIMIT);\n if (meta.width * meta.height > limit) {\n throw new Error(\n `Input image exceeds pixel limit (${meta.width}x${meta.height} > ${limit})`\n );\n }\n return meta;\n}\n\nexport function decodeImage(\n bytes?: Uint8Array,\n options?: SharpInputOptions\n): RgbaImage {\n if (options?.create) {\n const { width, height, channels, background } = options.create;\n const bg = parseColor(background, channels === 4 ? 255 : 255);\n const data = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n data[i * 4] = bg.r;\n data[i * 4 + 1] = bg.g;\n data[i * 4 + 2] = bg.b;\n data[i * 4 + 3] = channels === 4 ? bg.a : 255;\n }\n return {\n width,\n height,\n data,\n format: \"raw\",\n space: \"srgb\",\n channels,\n depth: \"uchar\",\n density: options.density ?? 72,\n hasAlpha: channels === 4\n };\n }\n if (options?.raw && bytes) {\n const { width, height, channels, premultiplied } = options.raw;\n const data = new Uint8Array(width * height * 4);\n for (let i = 0; i < width * height; i++) {\n if (channels === 4) {\n const r = bytes[i * 4] ?? 0;\n const g = bytes[i * 4 + 1] ?? 0;\n const b = bytes[i * 4 + 2] ?? 0;\n const a = bytes[i * 4 + 3] ?? 255;\n if (premultiplied && a > 0 && a < 255) {\n const scale = 255 / a;\n data[i * 4] = Math.min(255, Math.round(r * scale));\n data[i * 4 + 1] = Math.min(255, Math.round(g * scale));\n data[i * 4 + 2] = Math.min(255, Math.round(b * scale));\n } else {\n data[i * 4] = r;\n data[i * 4 + 1] = g;\n data[i * 4 + 2] = b;\n }\n data[i * 4 + 3] = a;\n } else if (channels === 3) {\n data[i * 4] = bytes[i * 3] ?? 0;\n data[i * 4 + 1] = bytes[i * 3 + 1] ?? 0;\n data[i * 4 + 2] = bytes[i * 3 + 2] ?? 0;\n data[i * 4 + 3] = 255;\n } else if (channels === 2) {\n const g = bytes[i * 2] ?? 0;\n data[i * 4] = g;\n data[i * 4 + 1] = g;\n data[i * 4 + 2] = g;\n data[i * 4 + 3] = bytes[i * 2 + 1] ?? 255;\n } else {\n const g = bytes[i] ?? 0;\n data[i * 4] = g;\n data[i * 4 + 1] = g;\n data[i * 4 + 2] = g;\n data[i * 4 + 3] = 255;\n }\n }\n return {\n width,\n height,\n data,\n format: \"raw\",\n space: channels < 3 ? \"b-w\" : \"srgb\",\n channels,\n depth: \"uchar\",\n density: options.density ?? 72,\n hasAlpha: channels === 2 || channels === 4\n };\n }\n if (!bytes || bytes.length === 0) {\n throw new Error(\"Empty image input\");\n }\n const canCache =\n options?.density === undefined &&\n options?.page === undefined &&\n options?.pages === undefined &&\n options?.raw === undefined &&\n options?.create === undefined;\n if (canCache) {\n const cached = DECODE_CACHE.get(bytes);\n if (cached) return cached;\n }\n const meta = readImageMetadata(bytes, options);\n let decoded: RgbaImage;\n switch (meta.format) {\n case \"png\":\n decoded = decodePngImage(bytes);\n break;\n case \"jpeg\":\n decoded = decodeJpegImage(bytes);\n break;\n case \"webp\":\n decoded = decodeWebpImage(bytes);\n break;\n case \"heic\":\n case \"heif\":\n case \"avif\":\n decoded = decodeHeifImage(bytes);\n break;\n case \"gif\":\n decoded = decodeGifImage(bytes, options);\n break;\n case \"ppm\":\n case \"pgm\":\n case \"pbm\":\n decoded = decodeNetpbmImage(bytes);\n break;\n case \"bmp\":\n decoded = decodeBmpImage(bytes);\n break;\n case \"tiff\":\n decoded = decodeTiffImage(bytes);\n break;\n case \"pdf\":\n decoded = decodePdfImage(bytes, options);\n break;\n case \"svg\":\n decoded = decodeSvgImage(bytes, options);\n break;\n default:\n throw new Error(`Unsupported format: ${meta.format}`);\n }\n if (canCache) {\n DECODE_CACHE.set(bytes, decoded);\n }\n return decoded;\n}\n\nexport function encodeImage(\n img: RgbaImage,\n options: OutputEncodeOptions\n): { readonly data: Uint8Array; readonly format: ImageFormat; readonly channels: number } {\n const fmt: ImageFormat =\n options.format === \"pdf\" || options.format === \"svg\"\n ? \"png\"\n : (options.format ?? (img.format === \"pdf\" || img.format === \"svg\" ? \"png\" : img.format));\n\n switch (fmt) {\n case \"png\": {\n const data = encodePngImage(img, {\n ...(options.compressionLevel !== undefined\n ? { compressionLevel: options.compressionLevel }\n : {}),\n density: options.density ?? img.density,\n ...(options.orientation !== undefined ? { orientation: options.orientation } : img.orientation !== undefined ? { orientation: img.orientation } : {})\n });\n const isBw = img.space === \"b-w\" || img.channels === 1 || img.channels === 2;\n const outChannels = isBw ? (img.hasAlpha ? 2 : 1) : (img.hasAlpha ? 4 : 3);\n return { data, format: \"png\", channels: outChannels };\n }\n case \"jpeg\": {\n const data = encodeJpegImage(img, {\n quality: options.quality ?? 85,\n density: options.density ?? img.density,\n ...(options.orientation !== undefined ? { orientation: options.orientation } : {})\n });\n return { data, format: \"jpeg\", channels: 3 };\n }\n case \"webp\": {\n const orientation = options.orientation ?? img.orientation;\n const data = encodeWebpImage(img, {\n quality: options.quality ?? 80,\n ...(options.lossless !== undefined ? { lossless: options.lossless } : {}),\n density: options.density ?? img.density,\n ...(orientation !== undefined ? { orientation } : {})\n });\n return { data, format: \"webp\", channels: img.hasAlpha ? 4 : 3 };\n }\n case \"heic\":\n case \"heif\":\n case \"avif\": {\n const orientation = options.orientation ?? img.orientation;\n const data = encodeHeifImage(img, {\n format: fmt,\n ...(options.quality !== undefined ? { quality: options.quality } : {}),\n ...(options.compression !== undefined ? { compression: options.compression } : {}),\n ...(options.lossless !== undefined ? { lossless: options.lossless } : {}),\n density: options.density ?? img.density,\n ...(orientation !== undefined ? { orientation } : {})\n });\n const isBw = img.space === \"b-w\" || img.channels === 1 || img.channels === 2;\n const outChannels = isBw ? (img.hasAlpha ? 2 : 1) : img.hasAlpha ? 4 : 3;\n return { data, format: fmt, channels: outChannels };\n }\n case \"gif\": {\n const data = encodeGifImage(img);\n return { data, format: \"gif\", channels: 4 };\n }\n case \"ppm\": {\n const data = encodePpm(img);\n return { data, format: \"ppm\", channels: 3 };\n }\n case \"pgm\": {\n const data = encodePgm(img);\n return { data, format: \"pgm\", channels: 1 };\n }\n case \"pbm\": {\n const data = encodePbm(img);\n return { data, format: \"pbm\", channels: 1 };\n }\n case \"bmp\": {\n const data = encodeBmpImage(img);\n return { data, format: \"bmp\", channels: 3 };\n }\n case \"tiff\": {\n const orientation = options.orientation ?? img.orientation;\n const data = encodeTiffImage(img, {\n density: options.density ?? img.density,\n ...(orientation !== undefined ? { orientation } : {})\n });\n return { data, format: \"tiff\", channels: 4 };\n }\n case \"raw\": {\n if (img.channels === 4) {\n return { data: new Uint8Array(img.data), format: \"raw\", channels: 4 };\n }\n if (img.channels === 3) {\n const rgb = new Uint8Array(img.width * img.height * 3);\n for (let i = 0; i < img.width * img.height; i++) {\n rgb[i * 3] = img.data[i * 4]!;\n rgb[i * 3 + 1] = img.data[i * 4 + 1]!;\n rgb[i * 3 + 2] = img.data[i * 4 + 2]!;\n }\n return { data: rgb, format: \"raw\", channels: 3 };\n }\n if (img.channels === 2) {\n const ga = new Uint8Array(img.width * img.height * 2);\n for (let i = 0; i < img.width * img.height; i++) {\n ga[i * 2] = img.data[i * 4]!;\n ga[i * 2 + 1] = img.data[i * 4 + 3]!;\n }\n return { data: ga, format: \"raw\", channels: 2 };\n }\n const gray = new Uint8Array(img.width * img.height);\n for (let i = 0; i < img.width * img.height; i++) {\n gray[i] = img.data[i * 4]!;\n }\n return { data: gray, format: \"raw\", channels: 1 };\n }\n default:\n throw new Error(`Unsupported output format: ${fmt}`);\n }\n}\n", "import type {\n GravityPosition,\n ResizeFit,\n ResizeKernel,\n RgbaColor,\n RgbaImage\n} from \"../ast.js\";\n\nfunction sinc(x: number): number {\n if (Math.abs(x) < 1e-7) return 1;\n const px = Math.PI * x;\n return Math.sin(px) / px;\n}\n\nfunction kernelWeight(x: number, kernel: ResizeKernel): number {\n const ax = Math.abs(x);\n switch (kernel) {\n case \"nearest\":\n return ax < 0.5 ? 1 : 0;\n case \"bilinear\":\n return ax < 1 ? 1 - ax : 0;\n case \"cubic\":\n case \"mitchell\": {\n // Mitchell-Netravali (B = 1/3, C = 1/3)\n const B = 1 / 3;\n const C = 1 / 3;\n if (ax < 1) {\n return ((12 - 9 * B - 6 * C) * ax * ax * ax + (-18 + 12 * B + 6 * C) * ax * ax + (6 - 2 * B)) / 6;\n }\n if (ax < 2) {\n return (\n ((-B - 6 * C) * ax * ax * ax +\n (6 * B + 30 * C) * ax * ax +\n (-12 * B - 48 * C) * ax +\n (8 * B + 24 * C)) /\n 6\n );\n }\n return 0;\n }\n case \"lanczos2\":\n return ax < 2 ? sinc(x) * sinc(x / 2) : 0;\n case \"lanczos3\":\n default:\n return ax < 3 ? sinc(x) * sinc(x / 3) : 0;\n }\n}\n\nfunction kernelRadius(kernel: ResizeKernel): number {\n switch (kernel) {\n case \"nearest\":\n return 0.5;\n case \"bilinear\":\n return 1;\n case \"cubic\":\n case \"mitchell\":\n case \"lanczos2\":\n return 2;\n case \"lanczos3\":\n default:\n return 3;\n }\n}\n\nexport function resolveGravityOffset(\n outerW: number,\n outerH: number,\n innerW: number,\n innerH: number,\n position: GravityPosition = \"center\"\n): { readonly x: number; readonly y: number } {\n const dx = outerW - innerW;\n const dy = outerH - innerH;\n const p = position.toLowerCase();\n let x = Math.floor(dx / 2);\n let y = Math.floor(dy / 2);\n\n if (p.includes(\"west\") || p.includes(\"left\")) x = 0;\n else if (p.includes(\"east\") || p.includes(\"right\")) x = dx;\n\n if (p.includes(\"north\") || p.includes(\"top\")) y = 0;\n else if (p.includes(\"south\") || p.includes(\"bottom\")) y = dy;\n\n return { x, y };\n}\n\nexport function resampleRawBitmap(\n src: Uint8Array,\n srcW: number,\n srcH: number,\n dstW: number,\n dstH: number,\n kernel: ResizeKernel = \"lanczos3\"\n): Uint8Array {\n if (srcW === dstW && srcH === dstH) {\n return new Uint8Array(src);\n }\n if (kernel === \"nearest\") {\n const out = new Uint8Array(dstW * dstH * 4);\n for (let y = 0; y < dstH; y++) {\n const sy = Math.min(srcH - 1, Math.floor(((y + 0.5) * srcH) / dstH));\n for (let x = 0; x < dstW; x++) {\n const sx = Math.min(srcW - 1, Math.floor(((x + 0.5) * srcW) / dstW));\n const sIdx = (sy * srcW + sx) * 4;\n const dIdx = (y * dstW + x) * 4;\n out[dIdx] = src[sIdx]!;\n out[dIdx + 1] = src[sIdx + 1]!;\n out[dIdx + 2] = src[sIdx + 2]!;\n out[dIdx + 3] = src[sIdx + 3]!;\n }\n }\n return out;\n }\n\n const radius = kernelRadius(kernel);\n // Pass 1: Horizontal resample (srcW x srcH -> dstW x srcH) in premultiplied float\n const temp = new Float32Array(dstW * srcH * 4);\n const scaleX = srcW / dstW;\n const filterScaleX = Math.max(1, scaleX);\n const supportX = radius * filterScaleX;\n\n for (let x = 0; x < dstW; x++) {\n const center = (x + 0.5) * scaleX - 0.5;\n const left = Math.max(0, Math.floor(center - supportX));\n const right = Math.min(srcW - 1, Math.ceil(center + supportX));\n const count = right - left + 1;\n const weights = new Float32Array(count);\n let wSum = 0;\n for (let i = 0; i < count; i++) {\n const w = kernelWeight((left + i - center) / filterScaleX, kernel);\n weights[i] = w;\n wSum += w;\n }\n if (wSum !== 0) {\n for (let i = 0; i < count; i++) weights[i]! /= wSum;\n }\n for (let y = 0; y < srcH; y++) {\n let pr = 0;\n let pg = 0;\n let pb = 0;\n let pa = 0;\n const rowBase = y * srcW;\n for (let i = 0; i < count; i++) {\n const w = weights[i]!;\n const sIdx = (rowBase + left + i) * 4;\n const a = src[sIdx + 3]! / 255;\n pr += src[sIdx]! * a * w;\n pg += src[sIdx + 1]! * a * w;\n pb += src[sIdx + 2]! * a * w;\n pa += src[sIdx + 3]! * w;\n }\n const tIdx = (y * dstW + x) * 4;\n temp[tIdx] = pr;\n temp[tIdx + 1] = pg;\n temp[tIdx + 2] = pb;\n temp[tIdx + 3] = pa;\n }\n }\n\n // Pass 2: Vertical resample (dstW x srcH -> dstW x dstH)\n const out = new Uint8Array(dstW * dstH * 4);\n const scaleY = srcH / dstH;\n const filterScaleY = Math.max(1, scaleY);\n const supportY = radius * filterScaleY;\n\n for (let y = 0; y < dstH; y++) {\n const center = (y + 0.5) * scaleY - 0.5;\n const top = Math.max(0, Math.floor(center - supportY));\n const bottom = Math.min(srcH - 1, Math.ceil(center + supportY));\n const count = bottom - top + 1;\n const weights = new Float32Array(count);\n let wSum = 0;\n for (let i = 0; i < count; i++) {\n const w = kernelWeight((top + i - center) / filterScaleY, kernel);\n weights[i] = w;\n wSum += w;\n }\n if (wSum !== 0) {\n for (let i = 0; i < count; i++) weights[i]! /= wSum;\n }\n for (let x = 0; x < dstW; x++) {\n let pr = 0;\n let pg = 0;\n let pb = 0;\n let pa = 0;\n for (let i = 0; i < count; i++) {\n const w = weights[i]!;\n const tIdx = ((top + i) * dstW + x) * 4;\n pr += temp[tIdx]! * w;\n pg += temp[tIdx + 1]! * w;\n pb += temp[tIdx + 2]! * w;\n pa += temp[tIdx + 3]! * w;\n }\n const dIdx = (y * dstW + x) * 4;\n const aByte = pa < 0 ? 0 : pa > 255 ? 255 : Math.round(pa);\n if (aByte === 0) {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n } else {\n const alphaNorm = aByte / 255;\n const r = Math.round(pr / alphaNorm);\n const g = Math.round(pg / alphaNorm);\n const b = Math.round(pb / alphaNorm);\n out[dIdx] = r < 0 ? 0 : r > 255 ? 255 : r;\n out[dIdx + 1] = g < 0 ? 0 : g > 255 ? 255 : g;\n out[dIdx + 2] = b < 0 ? 0 : b > 255 ? 255 : b;\n out[dIdx + 3] = aByte;\n }\n }\n }\n return out;\n}\n\nexport function resizeImage(\n img: RgbaImage,\n spec: {\n readonly width: number | null;\n readonly height: number | null;\n readonly fit: ResizeFit;\n readonly position: GravityPosition;\n readonly kernel: ResizeKernel;\n readonly background: RgbaColor;\n readonly withoutEnlargement: boolean;\n readonly withoutReduction: boolean;\n }\n): RgbaImage {\n const srcW = img.width;\n const srcH = img.height;\n if (spec.width === null && spec.height === null) {\n return img;\n }\n\n let targetW = spec.width ?? Math.max(1, Math.round((srcW * spec.height!) / srcH));\n let targetH = spec.height ?? Math.max(1, Math.round((srcH * spec.width!) / srcW));\n const bothSpecified = spec.width !== null && spec.height !== null;\n const fit: ResizeFit = bothSpecified ? spec.fit : \"inside\";\n\n const clampScale = (w: number, h: number): [number, number] => {\n let rw = w;\n let rh = h;\n if (spec.withoutEnlargement && (rw > srcW || rh > srcH)) {\n const ratio = Math.min(srcW / rw, srcH / rh, 1);\n rw = Math.max(1, Math.round(rw * ratio));\n rh = Math.max(1, Math.round(rh * ratio));\n }\n if (spec.withoutReduction && (rw < srcW || rh < srcH)) {\n const ratio = Math.max(srcW / rw, srcH / rh, 1);\n rw = Math.max(1, Math.round(rw * ratio));\n rh = Math.max(1, Math.round(rh * ratio));\n }\n return [rw, rh];\n };\n\n if (fit === \"fill\") {\n const [rw, rh] = clampScale(targetW, targetH);\n const data = resampleRawBitmap(img.data, srcW, srcH, rw, rh, spec.kernel);\n return { ...img, width: rw, height: rh, data };\n }\n\n if (fit === \"inside\" || fit === \"outside\") {\n const scaleX = targetW / srcW;\n const scaleY = targetH / srcH;\n const scale = fit === \"inside\" ? Math.min(scaleX, scaleY) : Math.max(scaleX, scaleY);\n const [rw, rh] = clampScale(\n Math.max(1, Math.round(srcW * scale)),\n Math.max(1, Math.round(srcH * scale))\n );\n const data = resampleRawBitmap(img.data, srcW, srcH, rw, rh, spec.kernel);\n return { ...img, width: rw, height: rh, data };\n }\n\n if (fit === \"cover\") {\n if (spec.withoutEnlargement && (targetW > srcW || targetH > srcH)) {\n targetW = Math.min(targetW, srcW);\n targetH = Math.min(targetH, srcH);\n }\n if (spec.withoutReduction && (targetW < srcW || targetH < srcH)) {\n targetW = Math.max(targetW, srcW);\n targetH = Math.max(targetH, srcH);\n }\n const scale = Math.max(targetW / srcW, targetH / srcH);\n const scaledW = Math.max(targetW, Math.round(srcW * scale));\n const scaledH = Math.max(targetH, Math.round(srcH * scale));\n const scaledData = resampleRawBitmap(img.data, srcW, srcH, scaledW, scaledH, spec.kernel);\n const offset = resolveGravityOffset(scaledW, scaledH, targetW, targetH, spec.position);\n const cropped = new Uint8Array(targetW * targetH * 4);\n for (let y = 0; y < targetH; y++) {\n const srcRow = ((offset.y + y) * scaledW + offset.x) * 4;\n cropped.set(scaledData.subarray(srcRow, srcRow + targetW * 4), y * targetW * 4);\n }\n return { ...img, width: targetW, height: targetH, data: cropped };\n }\n\n // fit === \"contain\"\n if (spec.withoutEnlargement && (targetW > srcW || targetH > srcH)) {\n targetW = Math.min(targetW, srcW);\n targetH = Math.min(targetH, srcH);\n }\n if (spec.withoutReduction && (targetW < srcW || targetH < srcH)) {\n targetW = Math.max(targetW, srcW);\n targetH = Math.max(targetH, srcH);\n }\n const scale = Math.min(targetW / srcW, targetH / srcH);\n const [innerW, innerH] = clampScale(\n Math.max(1, Math.round(srcW * scale)),\n Math.max(1, Math.round(srcH * scale))\n );\n const scaledData = resampleRawBitmap(img.data, srcW, srcH, innerW, innerH, spec.kernel);\n const canvas = new Uint8Array(targetW * targetH * 4);\n const bg = spec.background;\n for (let i = 0; i < targetW * targetH; i++) {\n canvas[i * 4] = bg.r;\n canvas[i * 4 + 1] = bg.g;\n canvas[i * 4 + 2] = bg.b;\n canvas[i * 4 + 3] = bg.a;\n }\n const offset = resolveGravityOffset(targetW, targetH, innerW, innerH, spec.position);\n for (let y = 0; y < innerH; y++) {\n for (let x = 0; x < innerW; x++) {\n const sIdx = (y * innerW + x) * 4;\n const dIdx = ((offset.y + y) * targetW + (offset.x + x)) * 4;\n const srcA = scaledData[sIdx + 3]! / 255;\n const dstA = canvas[dIdx + 3]! / 255;\n const outA = srcA + dstA * (1 - srcA);\n if (outA > 0) {\n canvas[dIdx] = Math.round(\n (scaledData[sIdx]! * srcA + canvas[dIdx]! * dstA * (1 - srcA)) / outA\n );\n canvas[dIdx + 1] = Math.round(\n (scaledData[sIdx + 1]! * srcA + canvas[dIdx + 1]! * dstA * (1 - srcA)) / outA\n );\n canvas[dIdx + 2] = Math.round(\n (scaledData[sIdx + 2]! * srcA + canvas[dIdx + 2]! * dstA * (1 - srcA)) / outA\n );\n canvas[dIdx + 3] = Math.round(outA * 255);\n }\n }\n }\n return {\n ...img,\n width: targetW,\n height: targetH,\n data: canvas,\n hasAlpha: img.hasAlpha || bg.a < 255\n };\n}\n", "import type {\n BlendMode,\n ChannelStats,\n CompositeLayer,\n ImageStats,\n RgbaColor,\n RgbaImage\n} from \"../ast.js\";\nimport { decodeImage } from \"../codecs/index.js\";\nimport { resolveGravityOffset } from \"./resize.js\";\n\nexport function flipImage(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const out = new Uint8Array(data.length);\n const rowBytes = width * 4;\n for (let y = 0; y < height; y++) {\n const srcOffset = y * rowBytes;\n const dstOffset = (height - 1 - y) * rowBytes;\n out.set(data.subarray(srcOffset, srcOffset + rowBytes), dstOffset);\n }\n return { ...img, data: out };\n}\n\nexport function flopImage(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const out = new Uint8Array(data.length);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n const dstIdx = (y * width + (width - 1 - x)) * 4;\n out[dstIdx] = data[srcIdx]!;\n out[dstIdx + 1] = data[srcIdx + 1]!;\n out[dstIdx + 2] = data[srcIdx + 2]!;\n out[dstIdx + 3] = data[srcIdx + 3]!;\n }\n }\n return { ...img, data: out };\n}\n\nfunction rotate90CW(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const dstW = height;\n const dstH = width;\n const out = new Uint8Array(data.length);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n const dstX = height - 1 - y;\n const dstY = x;\n const dstIdx = (dstY * dstW + dstX) * 4;\n out[dstIdx] = data[srcIdx]!;\n out[dstIdx + 1] = data[srcIdx + 1]!;\n out[dstIdx + 2] = data[srcIdx + 2]!;\n out[dstIdx + 3] = data[srcIdx + 3]!;\n }\n }\n return { ...img, width: dstW, height: dstH, data: out };\n}\n\nfunction rotate180(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const out = new Uint8Array(data.length);\n const total = width * height;\n for (let i = 0; i < total; i++) {\n const srcIdx = i * 4;\n const dstIdx = (total - 1 - i) * 4;\n out[dstIdx] = data[srcIdx]!;\n out[dstIdx + 1] = data[srcIdx + 1]!;\n out[dstIdx + 2] = data[srcIdx + 2]!;\n out[dstIdx + 3] = data[srcIdx + 3]!;\n }\n return { ...img, data: out };\n}\n\nfunction rotate270CW(img: RgbaImage): RgbaImage {\n const { width, height, data } = img;\n const dstW = height;\n const dstH = width;\n const out = new Uint8Array(data.length);\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const srcIdx = (y * width + x) * 4;\n const dstX = y;\n const dstY = width - 1 - x;\n const dstIdx = (dstY * dstW + dstX) * 4;\n out[dstIdx] = data[srcIdx]!;\n out[dstIdx + 1] = data[srcIdx + 1]!;\n out[dstIdx + 2] = data[srcIdx + 2]!;\n out[dstIdx + 3] = data[srcIdx + 3]!;\n }\n }\n return { ...img, width: dstW, height: dstH, data: out };\n}\n\nexport function applyExifOrientation(img: RgbaImage): RgbaImage {\n const orientation = img.orientation;\n if (!orientation || orientation === 1) {\n return { ...img, orientation: 1 };\n }\n let result = img;\n switch (orientation) {\n case 2:\n result = flopImage(img);\n break;\n case 3:\n result = rotate180(img);\n break;\n case 4:\n result = flipImage(img);\n break;\n case 5:\n result = flopImage(rotate90CW(img));\n break;\n case 6:\n result = rotate90CW(img);\n break;\n case 7:\n result = flipImage(rotate90CW(img));\n break;\n case 8:\n result = rotate270CW(img);\n break;\n default:\n break;\n }\n return { ...result, orientation: 1 };\n}\n\nexport function rotateImage(\n img: RgbaImage,\n angle: number,\n background: RgbaColor = { r: 0, g: 0, b: 0, a: 255 }\n): RgbaImage {\n const norm = ((angle % 360) + 360) % 360;\n if (Math.abs(norm) < 1e-6) return img;\n if (Math.abs(norm - 90) < 1e-6) return rotate90CW(img);\n if (Math.abs(norm - 180) < 1e-6) return rotate180(img);\n if (Math.abs(norm - 270) < 1e-6) return rotate270CW(img);\n\n const rad = (norm * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const absCos = Math.abs(cos);\n const absSin = Math.abs(sin);\n const dstW = Math.max(1, Math.ceil(img.width * absCos + img.height * absSin - 1e-6));\n const dstH = Math.max(1, Math.ceil(img.width * absSin + img.height * absCos - 1e-6));\n const out = new Uint8Array(dstW * dstH * 4);\n\n const cxSrc = (img.width - 1) / 2;\n const cySrc = (img.height - 1) / 2;\n const cxDst = (dstW - 1) / 2;\n const cyDst = (dstH - 1) / 2;\n\n for (let y = 0; y < dstH; y++) {\n const dy = y - cyDst;\n for (let x = 0; x < dstW; x++) {\n const dx = x - cxDst;\n const sx = dx * cos + dy * sin + cxSrc;\n const sy = -dx * sin + dy * cos + cySrc;\n const dIdx = (y * dstW + x) * 4;\n if (sx < 0 || sy < 0 || sx >= img.width - 1 || sy >= img.height - 1) {\n if (sx >= -0.5 && sy >= -0.5 && sx < img.width - 0.5 && sy < img.height - 0.5) {\n const ix = Math.max(0, Math.min(img.width - 1, Math.round(sx)));\n const iy = Math.max(0, Math.min(img.height - 1, Math.round(sy)));\n const sIdx = (iy * img.width + ix) * 4;\n out[dIdx] = img.data[sIdx]!;\n out[dIdx + 1] = img.data[sIdx + 1]!;\n out[dIdx + 2] = img.data[sIdx + 2]!;\n out[dIdx + 3] = img.data[sIdx + 3]!;\n } else {\n out[dIdx] = background.r;\n out[dIdx + 1] = background.g;\n out[dIdx + 2] = background.b;\n out[dIdx + 3] = background.a;\n }\n } else {\n const x0 = Math.floor(sx);\n const y0 = Math.floor(sy);\n const fx = sx - x0;\n const fy = sy - y0;\n const i00 = (y0 * img.width + x0) * 4;\n const i10 = (y0 * img.width + (x0 + 1)) * 4;\n const i01 = ((y0 + 1) * img.width + x0) * 4;\n const i11 = ((y0 + 1) * img.width + (x0 + 1)) * 4;\n const w00 = (1 - fx) * (1 - fy);\n const w10 = fx * (1 - fy);\n const w01 = (1 - fx) * fy;\n const w11 = fx * fy;\n const a00 = img.data[i00 + 3]! / 255;\n const a10 = img.data[i10 + 3]! / 255;\n const a01 = img.data[i01 + 3]! / 255;\n const a11 = img.data[i11 + 3]! / 255;\n const outA = a00 * w00 + a10 * w10 + a01 * w01 + a11 * w11;\n if (outA > 1e-6) {\n for (let c = 0; c < 3; c++) {\n const pm =\n img.data[i00 + c]! * a00 * w00 +\n img.data[i10 + c]! * a10 * w10 +\n img.data[i01 + c]! * a01 * w01 +\n img.data[i11 + c]! * a11 * w11;\n out[dIdx + c] = Math.max(0, Math.min(255, Math.round(pm / outA)));\n }\n out[dIdx + 3] = Math.max(0, Math.min(255, Math.round(outA * 255)));\n } else {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n }\n }\n }\n }\n const nextHasAlpha = img.hasAlpha || background.a < 255;\n return {\n ...img,\n width: dstW,\n height: dstH,\n data: out,\n hasAlpha: nextHasAlpha,\n channels: nextHasAlpha ? (img.channels < 3 ? 2 : 4) : img.channels\n };\n}\n\nexport function extractImage(\n img: RgbaImage,\n region: { readonly left: number; readonly top: number; readonly width: number; readonly height: number }\n): RgbaImage {\n const left = Math.round(region.left);\n const top = Math.round(region.top);\n const width = Math.round(region.width);\n const height = Math.round(region.height);\n if (\n width <= 0 ||\n height <= 0 ||\n left < 0 ||\n top < 0 ||\n left + width > img.width ||\n top + height > img.height\n ) {\n throw new Error(\n `extract_area: bad extract area (left=${left}, top=${top}, width=${width}, height=${height} on ${img.width}x${img.height})`\n );\n }\n const out = new Uint8Array(width * height * 4);\n for (let y = 0; y < height; y++) {\n const srcStart = ((top + y) * img.width + left) * 4;\n out.set(img.data.subarray(srcStart, srcStart + width * 4), y * width * 4);\n }\n return { ...img, width, height, data: out };\n}\n\nexport function trimImage(\n img: RgbaImage,\n options?: { readonly threshold?: number; readonly background?: RgbaColor }\n): RgbaImage {\n const threshold = options?.threshold ?? 10;\n const ref: RgbaColor = options?.background ?? {\n r: img.data[0] ?? 0,\n g: img.data[1] ?? 0,\n b: img.data[2] ?? 0,\n a: img.data[3] ?? 255\n };\n\n const isBg = (x: number, y: number): boolean => {\n const idx = (y * img.width + x) * 4;\n const dr = Math.abs(img.data[idx]! - ref.r);\n const dg = Math.abs(img.data[idx + 1]! - ref.g);\n const db = Math.abs(img.data[idx + 2]! - ref.b);\n const da = Math.abs(img.data[idx + 3]! - ref.a);\n return dr <= threshold && dg <= threshold && db <= threshold && da <= threshold;\n };\n\n let top = 0;\n while (top < img.height) {\n let allBg = true;\n for (let x = 0; x < img.width; x++) {\n if (!isBg(x, top)) {\n allBg = false;\n break;\n }\n }\n if (!allBg) break;\n top++;\n }\n if (top >= img.height) {\n return extractImage(img, { left: 0, top: 0, width: 1, height: 1 });\n }\n\n let bottom = img.height - 1;\n while (bottom > top) {\n let allBg = true;\n for (let x = 0; x < img.width; x++) {\n if (!isBg(x, bottom)) {\n allBg = false;\n break;\n }\n }\n if (!allBg) break;\n bottom--;\n }\n\n let left = 0;\n while (left < img.width) {\n let allBg = true;\n for (let y = top; y <= bottom; y++) {\n if (!isBg(left, y)) {\n allBg = false;\n break;\n }\n }\n if (!allBg) break;\n left++;\n }\n\n let right = img.width - 1;\n while (right > left) {\n let allBg = true;\n for (let y = top; y <= bottom; y++) {\n if (!isBg(right, y)) {\n allBg = false;\n break;\n }\n }\n if (!allBg) break;\n right--;\n }\n\n return extractImage(img, {\n left,\n top,\n width: right - left + 1,\n height: bottom - top + 1\n });\n}\n\nexport function extendImage(\n img: RgbaImage,\n spec: {\n readonly top: number;\n readonly bottom: number;\n readonly left: number;\n readonly right: number;\n readonly background: RgbaColor;\n readonly extendWith: \"background\" | \"copy\" | \"repeat\" | \"mirror\";\n }\n): RgbaImage {\n const top = Math.max(0, Math.round(spec.top));\n const bottom = Math.max(0, Math.round(spec.bottom));\n const left = Math.max(0, Math.round(spec.left));\n const right = Math.max(0, Math.round(spec.right));\n const dstW = img.width + left + right;\n const dstH = img.height + top + bottom;\n const out = new Uint8Array(dstW * dstH * 4);\n\n const mapCoord = (c: number, size: number): number => {\n if (c >= 0 && c < size) return c;\n if (spec.extendWith === \"copy\") {\n return Math.max(0, Math.min(size - 1, c));\n }\n if (spec.extendWith === \"repeat\") {\n return ((c % size) + size) % size;\n }\n if (spec.extendWith === \"mirror\") {\n const period = size * 2;\n const m = ((c % period) + period) % period;\n return m < size ? m : period - 1 - m;\n }\n return -1;\n };\n\n for (let y = 0; y < dstH; y++) {\n const sy = mapCoord(y - top, img.height);\n for (let x = 0; x < dstW; x++) {\n const sx = mapCoord(x - left, img.width);\n const dIdx = (y * dstW + x) * 4;\n if (sx < 0 || sy < 0) {\n out[dIdx] = spec.background.r;\n out[dIdx + 1] = spec.background.g;\n out[dIdx + 2] = spec.background.b;\n out[dIdx + 3] = spec.background.a;\n } else {\n const sIdx = (sy * img.width + sx) * 4;\n out[dIdx] = img.data[sIdx]!;\n out[dIdx + 1] = img.data[sIdx + 1]!;\n out[dIdx + 2] = img.data[sIdx + 2]!;\n out[dIdx + 3] = img.data[sIdx + 3]!;\n }\n }\n }\n return {\n ...img,\n width: dstW,\n height: dstH,\n data: out,\n hasAlpha: img.hasAlpha || spec.background.a < 255,\n channels:\n img.hasAlpha || spec.background.a < 255 ? (img.channels < 3 ? 2 : 4) : img.channels\n };\n}\n\nfunction blendChannel(s: number, d: number, mode: BlendMode): number {\n switch (mode) {\n case \"multiply\":\n return s * d;\n case \"screen\":\n return s + d - s * d;\n case \"overlay\":\n return d < 0.5 ? 2 * s * d : 1 - 2 * (1 - s) * (1 - d);\n case \"darken\":\n return Math.min(s, d);\n case \"lighten\":\n return Math.max(s, d);\n case \"color-dodge\":\n case \"colour-dodge\":\n return d === 0 ? 0 : s === 1 ? 1 : Math.min(1, d / (1 - s));\n case \"color-burn\":\n case \"colour-burn\":\n return d === 1 ? 1 : s === 0 ? 0 : 1 - Math.min(1, (1 - d) / s);\n case \"hard-light\":\n return s < 0.5 ? 2 * s * d : 1 - 2 * (1 - s) * (1 - d);\n case \"soft-light\":\n return s < 0.5\n ? d - (1 - 2 * s) * d * (1 - d)\n : d + (2 * s - 1) * (d <= 0.25 ? ((16 * d - 12) * d + 4) * d : Math.sqrt(d) - d);\n case \"difference\":\n return Math.abs(d - s);\n case \"exclusion\":\n return s + d - 2 * s * d;\n case \"add\":\n return Math.min(1, s + d);\n default:\n return s;\n }\n}\n\nexport function compositeImage(\n base: RgbaImage,\n layers: readonly CompositeLayer[]\n): RgbaImage {\n const out = new Uint8Array(base.data);\n const baseW = base.width;\n const baseH = base.height;\n\n for (const layer of layers) {\n let overlay: RgbaImage;\n if (typeof layer.input === \"string\") {\n overlay = decodeImage(\n new TextEncoder().encode(layer.input),\n layer.density !== undefined ? { density: layer.density } : undefined\n );\n } else if (layer.input instanceof Uint8Array) {\n overlay = decodeImage(layer.input, {\n ...(layer.density !== undefined ? { density: layer.density } : {}),\n ...(layer.raw !== undefined\n ? {\n raw: {\n ...layer.raw,\n ...(layer.premultiplied !== undefined ? { premultiplied: layer.premultiplied } : {})\n }\n }\n : {})\n });\n if (layer.premultiplied && !layer.raw) {\n const unpremul = new Uint8Array(overlay.data.length);\n for (let i = 0; i < overlay.width * overlay.height; i++) {\n const a = overlay.data[i * 4 + 3]!;\n if (a > 0 && a < 255) {\n const scale = 255 / a;\n unpremul[i * 4] = Math.min(255, Math.round(overlay.data[i * 4]! * scale));\n unpremul[i * 4 + 1] = Math.min(255, Math.round(overlay.data[i * 4 + 1]! * scale));\n unpremul[i * 4 + 2] = Math.min(255, Math.round(overlay.data[i * 4 + 2]! * scale));\n } else {\n unpremul[i * 4] = overlay.data[i * 4]!;\n unpremul[i * 4 + 1] = overlay.data[i * 4 + 1]!;\n unpremul[i * 4 + 2] = overlay.data[i * 4 + 2]!;\n }\n unpremul[i * 4 + 3] = a;\n }\n overlay = { ...overlay, data: unpremul };\n }\n } else {\n overlay = decodeImage(undefined, {\n create: layer.input.create,\n ...(layer.density !== undefined ? { density: layer.density } : {})\n });\n }\n\n const blend: BlendMode = layer.blend ?? \"over\";\n const grav = resolveGravityOffset(\n baseW,\n baseH,\n overlay.width,\n overlay.height,\n layer.gravity ?? \"center\"\n );\n const startX =\n layer.left !== undefined\n ? Math.round(layer.left)\n : layer.top !== undefined\n ? 0\n : grav.x;\n const startY =\n layer.top !== undefined\n ? Math.round(layer.top)\n : layer.left !== undefined\n ? 0\n : grav.y;\n\n // Fast scanline copy for opaque non-tiled \"over\"/\"source\" layers (e.g. multi-megapixel panorama/grid merges)\n if (!layer.tile && !overlay.hasAlpha && (blend === \"over\" || blend === \"source\")) {\n const copyStartX = Math.max(0, startX);\n const copyEndX = Math.min(baseW, startX + overlay.width);\n const copyW = copyEndX - copyStartX;\n if (copyW > 0) {\n const srcOffX = copyStartX - startX;\n const copyStartY = Math.max(0, startY);\n const copyEndY = Math.min(baseH, startY + overlay.height);\n for (let dy = copyStartY; dy < copyEndY; dy++) {\n const sy = dy - startY;\n const sRowOff = (sy * overlay.width + srcOffX) * 4;\n const dRowOff = (dy * baseW + copyStartX) * 4;\n out.set(overlay.data.subarray(sRowOff, sRowOff + copyW * 4), dRowOff);\n }\n }\n continue;\n }\n\n const iterW = layer.tile ? baseW : overlay.width;\n const iterH = layer.tile ? baseH : overlay.height;\n\n for (let ty = 0; ty < 1; ty++) {\n for (let tx = 0; tx < 1; tx++) {\n for (let y = 0; y < iterH; y++) {\n const dy = layer.tile ? y : startY + y;\n if (dy < 0 || dy >= baseH) continue;\n const sy = layer.tile\n ? (((dy - startY) % overlay.height) + overlay.height) % overlay.height\n : y;\n for (let x = 0; x < iterW; x++) {\n const dx = layer.tile ? x : startX + x;\n if (dx < 0 || dx >= baseW) continue;\n const sx = layer.tile\n ? (((dx - startX) % overlay.width) + overlay.width) % overlay.width\n : x;\n const sIdx = (sy * overlay.width + sx) * 4;\n const dIdx = (dy * baseW + dx) * 4;\n\n const sr = overlay.data[sIdx]! / 255;\n const sg = overlay.data[sIdx + 1]! / 255;\n const sb = overlay.data[sIdx + 2]! / 255;\n const sa = overlay.data[sIdx + 3]! / 255;\n\n const dr = out[dIdx]! / 255;\n const dg = out[dIdx + 1]! / 255;\n const db = out[dIdx + 2]! / 255;\n const da = out[dIdx + 3]! / 255;\n\n if (blend === \"clear\") {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n continue;\n }\n if (blend === \"source\") {\n out[dIdx] = Math.round(sr * 255);\n out[dIdx + 1] = Math.round(sg * 255);\n out[dIdx + 2] = Math.round(sb * 255);\n out[dIdx + 3] = Math.round(sa * 255);\n continue;\n }\n if (blend === \"dest\") continue;\n if (blend === \"over\") {\n const outA = sa + da * (1 - sa);\n if (outA > 0) {\n out[dIdx] = Math.max(0, Math.min(255, Math.round(((sr * sa + dr * da * (1 - sa)) / outA) * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(((sg * sa + dg * da * (1 - sa)) / outA) * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(((sb * sa + db * da * (1 - sa)) / outA) * 255)));\n out[dIdx + 3] = Math.max(0, Math.min(255, Math.round(outA * 255)));\n } else {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n }\n continue;\n }\n if (blend === \"dest-over\") {\n const outA = da + sa * (1 - da);\n if (outA > 0) {\n out[dIdx] = Math.round(((dr * da + sr * sa * (1 - da)) / outA) * 255);\n out[dIdx + 1] = Math.round(((dg * da + sg * sa * (1 - da)) / outA) * 255);\n out[dIdx + 2] = Math.round(((db * da + sb * sa * (1 - da)) / outA) * 255);\n out[dIdx + 3] = Math.round(outA * 255);\n }\n continue;\n }\n if (blend === \"in\") {\n const outA = sa * da;\n out[dIdx] = Math.round(sr * 255);\n out[dIdx + 1] = Math.round(sg * 255);\n out[dIdx + 2] = Math.round(sb * 255);\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"out\") {\n const outA = sa * (1 - da);\n out[dIdx] = Math.round(sr * 255);\n out[dIdx + 1] = Math.round(sg * 255);\n out[dIdx + 2] = Math.round(sb * 255);\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"dest-in\") {\n out[dIdx + 3] = Math.round(da * sa * 255);\n continue;\n }\n if (blend === \"dest-out\") {\n out[dIdx + 3] = Math.round(da * (1 - sa) * 255);\n continue;\n }\n if (blend === \"atop\") {\n const outA = da;\n if (outA > 0) {\n const cr = (sr * sa + dr * da * (1 - sa)) / outA;\n const cg = (sg * sa + dg * da * (1 - sa)) / outA;\n const cb = (sb * sa + db * da * (1 - sa)) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n }\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"dest-atop\") {\n const outA = sa;\n if (outA > 0) {\n const cr = (dr * da + sr * sa * (1 - da)) / outA;\n const cg = (dg * da + sg * sa * (1 - da)) / outA;\n const cb = (db * da + sb * sa * (1 - da)) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n }\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"xor\") {\n const outA = sa * (1 - da) + da * (1 - sa);\n if (outA > 0) {\n const cr = (sr * sa * (1 - da) + dr * da * (1 - sa)) / outA;\n const cg = (sg * sa * (1 - da) + dg * da * (1 - sa)) / outA;\n const cb = (sb * sa * (1 - da) + db * da * (1 - sa)) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n } else {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n }\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n if (blend === \"saturate\") {\n const outA = Math.min(1, sa + da);\n if (outA > 0) {\n const f = Math.min(sa, 1 - da);\n const cr = (sr * sa * f + dr * da) / outA;\n const cg = (sg * sa * f + dg * da) / outA;\n const cb = (sb * sa * f + db * da) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n }\n out[dIdx + 3] = Math.round(outA * 255);\n continue;\n }\n\n // Standard W3C separable blend over destination\n const outA = sa + da * (1 - sa);\n if (outA <= 0) {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n } else {\n const srP = sr * sa;\n const sgP = sg * sa;\n const sbP = sb * sa;\n const drP = dr * da;\n const dgP = dg * da;\n const dbP = db * da;\n const br = blendChannel(srP, drP, blend);\n const bg = blendChannel(sgP, dgP, blend);\n const bb = blendChannel(sbP, dbP, blend);\n const cr = ((1 - da) * srP + (1 - sa) * drP + sa * da * br) / outA;\n const cg = ((1 - da) * sgP + (1 - sa) * dgP + sa * da * bg) / outA;\n const cb = ((1 - da) * sbP + (1 - sa) * dbP + sa * da * bb) / outA;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(cr * 255)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(cg * 255)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(cb * 255)));\n out[dIdx + 3] = Math.max(0, Math.min(255, Math.round(outA * 255)));\n }\n }\n }\n }\n }\n }\n return {\n ...base,\n data: out,\n hasAlpha: true,\n channels: base.channels < 3 ? 2 : 4\n };\n}\n\nexport function grayscaleImage(img: RgbaImage): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const luma = Math.round(\n 0.2126 * img.data[idx]! + 0.7152 * img.data[idx + 1]! + 0.0722 * img.data[idx + 2]!\n );\n out[idx] = luma;\n out[idx + 1] = luma;\n out[idx + 2] = luma;\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out, space: \"b-w\", channels: img.hasAlpha ? 2 : 1 };\n}\n\nexport function flattenImage(img: RgbaImage, background: RgbaColor): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const a = img.data[idx + 3]! / 255;\n out[idx] = Math.round(img.data[idx]! * a + background.r * (1 - a));\n out[idx + 1] = Math.round(img.data[idx + 1]! * a + background.g * (1 - a));\n out[idx + 2] = Math.round(img.data[idx + 2]! * a + background.b * (1 - a));\n out[idx + 3] = 255;\n }\n return {\n ...img,\n data: out,\n hasAlpha: false,\n channels: img.channels === 4 ? 3 : img.channels === 2 ? 1 : img.channels\n };\n}\n\nexport function unflattenImage(img: RgbaImage): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const r = img.data[idx]!;\n const g = img.data[idx + 1]!;\n const b = img.data[idx + 2]!;\n out[idx] = r;\n out[idx + 1] = g;\n out[idx + 2] = b;\n out[idx + 3] = r === 255 && g === 255 && b === 255 ? 0 : img.data[idx + 3]!;\n }\n return { ...img, data: out, hasAlpha: true, channels: 4 };\n}\n\nexport function negateImage(img: RgbaImage, options?: { readonly alpha?: boolean }): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const negAlpha = options?.alpha ?? false;\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n out[idx] = 255 - img.data[idx]!;\n out[idx + 1] = 255 - img.data[idx + 1]!;\n out[idx + 2] = 255 - img.data[idx + 2]!;\n out[idx + 3] = negAlpha ? 255 - img.data[idx + 3]! : img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): [number, number, number] {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = (gn - bn) / d + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / d + 2;\n break;\n case bn:\n h = (rn - gn) / d + 4;\n break;\n }\n h *= 60;\n }\n return [h, s, l];\n}\n\nfunction hslToRgb(h: number, s: number, l: number): [number, number, number] {\n const hn = (((h % 360) + 360) % 360) / 360;\n if (s === 0) {\n const v = Math.round(l * 255);\n return [v, v, v];\n }\n const hue2rgb = (p: number, q: number, t: number): number => {\n let tt = t;\n if (tt < 0) tt += 1;\n if (tt > 1) tt -= 1;\n if (tt < 1 / 6) return p + (q - p) * 6 * tt;\n if (tt < 1 / 2) return q;\n if (tt < 2 / 3) return p + (q - p) * (2 / 3 - tt) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = Math.max(0, Math.min(255, Math.round(hue2rgb(p, q, hn + 1 / 3) * 255)));\n const g = Math.max(0, Math.min(255, Math.round(hue2rgb(p, q, hn) * 255)));\n const b = Math.max(0, Math.min(255, Math.round(hue2rgb(p, q, hn - 1 / 3) * 255)));\n return [r, g, b];\n}\n\nexport function modulateImage(\n img: RgbaImage,\n spec: {\n readonly brightness: number;\n readonly saturation: number;\n readonly hue: number;\n readonly lightness: number;\n }\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const [h, s, l] = rgbToHsl(img.data[idx]!, img.data[idx + 1]!, img.data[idx + 2]!);\n const nh = h + spec.hue;\n const ns = Math.max(0, Math.min(1, s * spec.saturation));\n const nl = Math.max(0, Math.min(1, l * spec.brightness + spec.lightness / 100));\n const [r, g, b] = hslToRgb(nh, ns, nl);\n out[idx] = r;\n out[idx + 1] = g;\n out[idx + 2] = b;\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function tintImage(img: RgbaImage, color: RgbaColor): RgbaImage {\n const [th, ts] = rgbToHsl(color.r, color.g, color.b);\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const [, , l] = rgbToHsl(img.data[idx]!, img.data[idx + 1]!, img.data[idx + 2]!);\n const [r, g, b] = hslToRgb(th, ts, l);\n out[idx] = r;\n out[idx + 1] = g;\n out[idx + 2] = b;\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out, space: \"srgb\", channels: img.hasAlpha ? 4 : 3 };\n}\n\nexport function gammaImage(img: RgbaImage, gamma = 2.2, gammaOut = gamma): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const exp = gamma / gammaOut;\n const lut = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n lut[i] = Math.max(0, Math.min(255, Math.round(Math.pow(i / 255, exp) * 255)));\n }\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n out[idx] = lut[img.data[idx]!]!;\n out[idx + 1] = lut[img.data[idx + 1]!]!;\n out[idx + 2] = lut[img.data[idx + 2]!]!;\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function linearImage(\n img: RgbaImage,\n a: readonly number[],\n b: readonly number[]\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n for (let c = 0; c < 3; c++) {\n const mul = a[c] ?? a[0] ?? 1;\n const off = b[c] ?? b[0] ?? 0;\n const v = Math.round(img.data[idx + c]! * mul + off);\n out[idx + c] = v < 0 ? 0 : v > 255 ? 255 : v;\n }\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function normalizeImage(\n img: RgbaImage,\n options?: { readonly lower?: number; readonly upper?: number }\n): RgbaImage {\n const lowerPct = Math.max(0, Math.min(100, options?.lower ?? 1));\n const upperPct = Math.max(lowerPct, Math.min(100, options?.upper ?? 99));\n const totalSamples = img.width * img.height * 3;\n if (totalSamples === 0) return img;\n\n const hist = new Uint32Array(256);\n let min = 255;\n let max = 0;\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n for (let c = 0; c < 3; c++) {\n const v = img.data[idx + c]!;\n hist[v]!++;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n\n let lowBound = min;\n let highBound = max;\n if (lowerPct > 1 || upperPct < 99) {\n const lowTarget = Math.floor((totalSamples * lowerPct) / 100);\n const highTarget = Math.ceil((totalSamples * upperPct) / 100);\n let cum = 0;\n for (let v = 0; v < 256; v++) {\n cum += hist[v]!;\n if (cum > lowTarget) {\n lowBound = v;\n break;\n }\n }\n cum = 0;\n for (let v = 0; v < 256; v++) {\n cum += hist[v]!;\n if (cum >= highTarget) {\n highBound = v;\n break;\n }\n }\n }\n\n const range = highBound - lowBound;\n if (range <= 0) return img;\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n for (let c = 0; c < 3; c++) {\n const scaled = Math.round(((img.data[idx + c]! - lowBound) * 255) / range);\n out[idx + c] = scaled < 0 ? 0 : scaled > 255 ? 255 : scaled;\n }\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function thresholdImage(\n img: RgbaImage,\n value = 128,\n grayscale = true\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n if (grayscale) {\n const luma =\n 0.2126 * img.data[idx]! + 0.7152 * img.data[idx + 1]! + 0.0722 * img.data[idx + 2]!;\n const bit = luma >= value ? 255 : 0;\n out[idx] = bit;\n out[idx + 1] = bit;\n out[idx + 2] = bit;\n } else {\n out[idx] = img.data[idx]! >= value ? 255 : 0;\n out[idx + 1] = img.data[idx + 1]! >= value ? 255 : 0;\n out[idx + 2] = img.data[idx + 2]! >= value ? 255 : 0;\n }\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out, ...(grayscale ? { space: \"b-w\" as const } : {}) };\n}\n\nexport function blurImage(img: RgbaImage, sigma = 1.5): RgbaImage {\n if (sigma <= 0.3) return img;\n const radius = Math.max(1, Math.min(25, Math.ceil(sigma * 3)));\n const size = radius * 2 + 1;\n const kernel = new Float32Array(size);\n let sum = 0;\n const twoSigmaSq = 2 * sigma * sigma;\n for (let i = -radius; i <= radius; i++) {\n const w = Math.exp(-(i * i) / twoSigmaSq);\n kernel[i + radius] = w;\n sum += w;\n }\n for (let i = 0; i < size; i++) kernel[i]! /= sum;\n\n const { width, height, data } = img;\n const temp = new Float32Array(data.length);\n const out = new Uint8Array(data.length);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let r = 0;\n let g = 0;\n let b = 0;\n let a = 0;\n for (let k = -radius; k <= radius; k++) {\n const sx = Math.max(0, Math.min(width - 1, x + k));\n const sIdx = (y * width + sx) * 4;\n const w = kernel[k + radius]!;\n const sa = data[sIdx + 3]! / 255;\n r += data[sIdx]! * sa * w;\n g += data[sIdx + 1]! * sa * w;\n b += data[sIdx + 2]! * sa * w;\n a += sa * w;\n }\n const dIdx = (y * width + x) * 4;\n temp[dIdx] = r;\n temp[dIdx + 1] = g;\n temp[dIdx + 2] = b;\n temp[dIdx + 3] = a;\n }\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let r = 0;\n let g = 0;\n let b = 0;\n let a = 0;\n for (let k = -radius; k <= radius; k++) {\n const sy = Math.max(0, Math.min(height - 1, y + k));\n const sIdx = (sy * width + x) * 4;\n const w = kernel[k + radius]!;\n r += temp[sIdx]! * w;\n g += temp[sIdx + 1]! * w;\n b += temp[sIdx + 2]! * w;\n a += temp[sIdx + 3]! * w;\n }\n const dIdx = (y * width + x) * 4;\n if (a > 1e-6) {\n out[dIdx] = Math.max(0, Math.min(255, Math.round(r / a)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(g / a)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(b / a)));\n out[dIdx + 3] = Math.max(0, Math.min(255, Math.round(a * 255)));\n } else {\n out[dIdx] = 0;\n out[dIdx + 1] = 0;\n out[dIdx + 2] = 0;\n out[dIdx + 3] = 0;\n }\n }\n }\n return { ...img, data: out };\n}\n\nexport function sharpenImage(\n img: RgbaImage,\n sigma = 1.0,\n amount = 1.0\n): RgbaImage {\n const blurred = blurImage(img, sigma);\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n for (let c = 0; c < 3; c++) {\n const orig = img.data[idx + c]!;\n const blur = blurred.data[idx + c]!;\n const val = Math.round(orig + amount * (orig - blur));\n out[idx + c] = val < 0 ? 0 : val > 255 ? 255 : val;\n }\n out[idx + 3] = img.data[idx + 3]!;\n }\n return { ...img, data: out };\n}\n\nexport function medianImage(img: RgbaImage, size = 3): RgbaImage {\n const radius = Math.max(1, Math.floor(size / 2));\n const { width, height, data } = img;\n const out = new Uint8Array(data.length);\n const windowLen = (radius * 2 + 1) * (radius * 2 + 1);\n const rWin = new Uint8Array(windowLen);\n const gWin = new Uint8Array(windowLen);\n const bWin = new Uint8Array(windowLen);\n const mid = windowLen >>> 1;\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let p = 0;\n for (let ky = -radius; ky <= radius; ky++) {\n const sy = Math.max(0, Math.min(height - 1, y + ky));\n for (let kx = -radius; kx <= radius; kx++) {\n const sx = Math.max(0, Math.min(width - 1, x + kx));\n const sIdx = (sy * width + sx) * 4;\n rWin[p] = data[sIdx]!;\n gWin[p] = data[sIdx + 1]!;\n bWin[p] = data[sIdx + 2]!;\n p++;\n }\n }\n rWin.sort();\n gWin.sort();\n bWin.sort();\n const dIdx = (y * width + x) * 4;\n out[dIdx] = rWin[mid]!;\n out[dIdx + 1] = gWin[mid]!;\n out[dIdx + 2] = bWin[mid]!;\n out[dIdx + 3] = data[dIdx + 3]!;\n }\n }\n return { ...img, data: out };\n}\n\nexport function convolveImage(\n img: RgbaImage,\n spec: {\n readonly width: number;\n readonly height: number;\n readonly kernel: readonly number[];\n readonly scale: number;\n readonly offset: number;\n }\n): RgbaImage {\n const { width, height, data } = img;\n const kw = spec.width;\n const kh = spec.height;\n const rx = Math.floor(kw / 2);\n const ry = Math.floor(kh / 2);\n const scale = spec.scale === 0 ? 1 : spec.scale;\n const out = new Uint8Array(data.length);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let r = 0;\n let g = 0;\n let b = 0;\n for (let ky = 0; ky < kh; ky++) {\n const sy = Math.max(0, Math.min(height - 1, y + ky - ry));\n for (let kx = 0; kx < kw; kx++) {\n const sx = Math.max(0, Math.min(width - 1, x + kx - rx));\n const w = spec.kernel[ky * kw + kx] ?? 0;\n const sIdx = (sy * width + sx) * 4;\n r += data[sIdx]! * w;\n g += data[sIdx + 1]! * w;\n b += data[sIdx + 2]! * w;\n }\n }\n const dIdx = (y * width + x) * 4;\n out[dIdx] = Math.max(0, Math.min(255, Math.round(r / scale + spec.offset)));\n out[dIdx + 1] = Math.max(0, Math.min(255, Math.round(g / scale + spec.offset)));\n out[dIdx + 2] = Math.max(0, Math.min(255, Math.round(b / scale + spec.offset)));\n out[dIdx + 3] = data[dIdx + 3]!;\n }\n }\n return { ...img, data: out };\n}\n\nexport function ensureAlphaImage(img: RgbaImage, alpha = 1): RgbaImage {\n if (img.hasAlpha) return img;\n const aByte = alpha <= 1 ? Math.round(alpha * 255) : Math.round(alpha);\n const out = new Uint8Array(img.data);\n for (let i = 3; i < out.length; i += 4) {\n out[i] = aByte;\n }\n return { ...img, data: out, hasAlpha: true, channels: 4 };\n}\n\nexport function removeAlphaImage(img: RgbaImage): RgbaImage {\n const out = new Uint8Array(img.data);\n for (let i = 3; i < out.length; i += 4) {\n out[i] = 255;\n }\n return {\n ...img,\n data: out,\n hasAlpha: false,\n channels: img.channels === 4 ? 3 : img.channels === 2 ? 1 : img.channels\n };\n}\n\nexport function extractChannelImage(img: RgbaImage, channel: 0 | 1 | 2 | 3): RgbaImage {\n const out = new Uint8Array(img.data.length);\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const v = img.data[idx + channel]!;\n out[idx] = v;\n out[idx + 1] = v;\n out[idx + 2] = v;\n out[idx + 3] = 255;\n }\n return { ...img, data: out, space: \"b-w\", channels: 1, hasAlpha: false };\n}\n\nfunction clamp(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\nexport function recombImage(\n img: RgbaImage,\n matrix: readonly (readonly number[])[]\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const is4x4 = matrix.length >= 4 && (matrix[0]?.length ?? 0) >= 4;\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n const r = img.data[idx]!;\n const g = img.data[idx + 1]!;\n const b = img.data[idx + 2]!;\n const a = img.data[idx + 3]!;\n const rRow = matrix[0] ?? [1, 0, 0, 0];\n const gRow = matrix[1] ?? [0, 1, 0, 0];\n const bRow = matrix[2] ?? [0, 0, 1, 0];\n out[idx] = clamp(\n r * (rRow[0] ?? 0) + g * (rRow[1] ?? 0) + b * (rRow[2] ?? 0) + (is4x4 ? a * (rRow[3] ?? 0) : 0)\n );\n out[idx + 1] = clamp(\n r * (gRow[0] ?? 0) + g * (gRow[1] ?? 0) + b * (gRow[2] ?? 0) + (is4x4 ? a * (gRow[3] ?? 0) : 0)\n );\n out[idx + 2] = clamp(\n r * (bRow[0] ?? 0) + g * (bRow[1] ?? 0) + b * (bRow[2] ?? 0) + (is4x4 ? a * (bRow[3] ?? 0) : 0)\n );\n if (is4x4 && matrix[3]) {\n const aRow = matrix[3]!;\n out[idx + 3] = clamp(\n r * (aRow[0] ?? 0) + g * (aRow[1] ?? 0) + b * (aRow[2] ?? 0) + a * (aRow[3] ?? 1)\n );\n } else {\n out[idx + 3] = a;\n }\n }\n return { ...img, data: out };\n}\n\nexport function toColorspaceImage(img: RgbaImage, space: \"srgb\" | \"b-w\" | \"cmyk\"): RgbaImage {\n if (space === \"b-w\") {\n return grayscaleImage(img);\n }\n return {\n ...img,\n space,\n channels: img.hasAlpha ? 4 : 3\n };\n}\n\nexport function bandboolImage(img: RgbaImage, op: \"and\" | \"or\" | \"eor\"): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const chCount = img.channels;\n for (let i = 0; i < img.width * img.height; i++) {\n const idx = i * 4;\n let acc = img.data[idx]!;\n for (let c = 1; c < chCount; c++) {\n const v = img.data[idx + c]!;\n if (op === \"and\") acc &= v;\n else if (op === \"or\") acc |= v;\n else acc ^= v;\n }\n out[idx] = acc;\n out[idx + 1] = acc;\n out[idx + 2] = acc;\n out[idx + 3] = 255;\n }\n return { ...img, data: out, space: \"b-w\", channels: 1, hasAlpha: false };\n}\n\nexport function joinChannelImage(img: RgbaImage, extraImages: readonly RgbaImage[]): RgbaImage {\n const out = new Uint8Array(img.data);\n const firstExtra = extraImages[0];\n if (!firstExtra) return img;\n if (img.channels === 1 && extraImages.length >= 2) {\n const gImg = extraImages[0]!;\n const bImg = extraImages[1]!;\n const aImg = extraImages[2];\n for (let i = 0; i < img.width * img.height; i++) {\n out[i * 4 + 1] = gImg.data[i * 4] ?? 0;\n out[i * 4 + 2] = bImg.data[i * 4] ?? 0;\n out[i * 4 + 3] = aImg ? (aImg.data[i * 4] ?? 255) : 255;\n }\n return {\n ...img,\n data: out,\n space: \"srgb\",\n channels: aImg ? 4 : 3,\n hasAlpha: Boolean(aImg)\n };\n }\n for (let i = 0; i < img.width * img.height; i++) {\n out[i * 4 + 3] = firstExtra.data[i * 4] ?? 255;\n }\n return {\n ...img,\n data: out,\n channels: img.channels === 1 ? 2 : 4,\n hasAlpha: true\n };\n}\n\nexport function claheImage(\n img: RgbaImage,\n options: { readonly width: number; readonly height: number; readonly maxSlope: number }\n): RgbaImage {\n const out = new Uint8Array(img.data.length);\n const tileW = Math.max(1, options.width || 8);\n const tileH = Math.max(1, options.height || 8);\n const maxSlope = options.maxSlope > 0 ? options.maxSlope : 3;\n\n for (let ty = 0; ty < img.height; ty += tileH) {\n for (let tx = 0; tx < img.width; tx += tileW) {\n const xEnd = Math.min(img.width, tx + tileW);\n const yEnd = Math.min(img.height, ty + tileH);\n const count = (xEnd - tx) * (yEnd - ty);\n if (count <= 0) continue;\n const hist = new Float64Array(256);\n for (let y = ty; y < yEnd; y++) {\n for (let x = tx; x < xEnd; x++) {\n const idx = (y * img.width + x) * 4;\n const luma = Math.round(\n 0.299 * img.data[idx]! + 0.587 * img.data[idx + 1]! + 0.114 * img.data[idx + 2]!\n );\n hist[luma]!++;\n }\n }\n const clipLimit = Math.max(1, (maxSlope * count) / 256);\n let excess = 0;\n for (let i = 0; i < 256; i++) {\n if (hist[i]! > clipLimit) {\n excess += hist[i]! - clipLimit;\n hist[i] = clipLimit;\n }\n }\n const addPerBin = excess / 256;\n const cdf = new Uint8Array(256);\n let cum = 0;\n for (let i = 0; i < 256; i++) {\n cum += hist[i]! + addPerBin;\n cdf[i] = clamp((cum * 255) / count);\n }\n for (let y = ty; y < yEnd; y++) {\n for (let x = tx; x < xEnd; x++) {\n const idx = (y * img.width + x) * 4;\n const r = img.data[idx]!;\n const g = img.data[idx + 1]!;\n const b = img.data[idx + 2]!;\n const luma = Math.max(1, Math.round(0.299 * r + 0.587 * g + 0.114 * b));\n const scale = cdf[luma]! / luma;\n out[idx] = clamp(r * scale);\n out[idx + 1] = clamp(g * scale);\n out[idx + 2] = clamp(b * scale);\n out[idx + 3] = img.data[idx + 3]!;\n }\n }\n }\n }\n return { ...img, data: out };\n}\n\nexport function affineImage(\n img: RgbaImage,\n spec: {\n readonly matrix: readonly [number, number, number, number];\n readonly background: RgbaColor;\n readonly idx: number;\n readonly idy: number;\n readonly odx: number;\n readonly ody: number;\n }\n): RgbaImage {\n const [a, b, c, d] = spec.matrix;\n const det = a * d - b * c;\n if (Math.abs(det) < 1e-8) return img;\n const corners: Array<[number, number]> = [\n [0, 0],\n [img.width, 0],\n [0, img.height],\n [img.width, img.height]\n ];\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const [cx, cy] of corners) {\n const x = a * (cx - spec.idx) + b * (cy - spec.idy) + spec.odx;\n const y = c * (cx - spec.idx) + d * (cy - spec.idy) + spec.ody;\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n }\n const dstW = Math.max(1, Math.round(maxX - minX));\n const dstH = Math.max(1, Math.round(maxY - minY));\n const out = new Uint8Array(dstW * dstH * 4);\n for (let y = 0; y < dstH; y++) {\n for (let x = 0; x < dstW; x++) {\n const ox = x + minX - spec.odx;\n const oy = y + minY - spec.ody;\n const sx = (d * ox - b * oy) / det + spec.idx;\n const sy = (-c * ox + a * oy) / det + spec.idy;\n const dIdx = (y * dstW + x) * 4;\n const ix = Math.round(sx);\n const iy = Math.round(sy);\n if (ix >= 0 && ix < img.width && iy >= 0 && iy < img.height) {\n const sIdx = (iy * img.width + ix) * 4;\n out[dIdx] = img.data[sIdx]!;\n out[dIdx + 1] = img.data[sIdx + 1]!;\n out[dIdx + 2] = img.data[sIdx + 2]!;\n out[dIdx + 3] = img.data[sIdx + 3]!;\n } else {\n out[dIdx] = spec.background.r;\n out[dIdx + 1] = spec.background.g;\n out[dIdx + 2] = spec.background.b;\n out[dIdx + 3] = spec.background.a;\n }\n }\n }\n return {\n ...img,\n width: dstW,\n height: dstH,\n data: out\n };\n}\n\nexport function computeImageStats(img: RgbaImage): ImageStats {\n const { width, height, data } = img;\n const totalPixels = Math.max(1, width * height);\n const numCh = img.hasAlpha ? 4 : img.channels === 1 ? 1 : 3;\n const channels: ChannelStats[] = [];\n\n for (let c = 0; c < numCh; c++) {\n let min = 255;\n let max = 0;\n let sum = 0;\n let squaresSum = 0;\n let minX = 0;\n let minY = 0;\n let maxX = 0;\n let maxY = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const v = data[(y * width + x) * 4 + c]!;\n sum += v;\n squaresSum += v * v;\n if (v < min) {\n min = v;\n minX = x;\n minY = y;\n }\n if (v > max) {\n max = v;\n maxX = x;\n maxY = y;\n }\n }\n }\n const mean = sum / totalPixels;\n const variance = Math.max(0, squaresSum / totalPixels - mean * mean);\n channels.push({\n min,\n max,\n sum,\n squaresSum,\n mean,\n stdev: Math.sqrt(variance),\n minX,\n minY,\n maxX,\n maxY\n });\n }\n\n let isOpaque = true;\n const hist = new Uint32Array(256);\n const colorBins = new Uint32Array(4096);\n const binSumR = new Float64Array(4096);\n const binSumG = new Float64Array(4096);\n const binSumB = new Float64Array(4096);\n\n for (let i = 0; i < totalPixels; i++) {\n const idx = i * 4;\n const r = data[idx]!;\n const g = data[idx + 1]!;\n const b = data[idx + 2]!;\n const a = data[idx + 3]!;\n if (a < 255) isOpaque = false;\n const luma = Math.round(0.299 * r + 0.587 * g + 0.114 * b);\n hist[luma]!++;\n const bin = ((r >>> 4) << 8) | ((g >>> 4) << 4) | (b >>> 4);\n colorBins[bin]!++;\n binSumR[bin]! += r;\n binSumG[bin]! += g;\n binSumB[bin]! += b;\n }\n\n let entropy = 0;\n for (let i = 0; i < 256; i++) {\n const count = hist[i]!;\n if (count > 0) {\n const p = count / totalPixels;\n entropy -= p * Math.log2(p);\n }\n }\n\n let maxBin = 0;\n let maxBinCount = 0;\n for (let i = 0; i < 4096; i++) {\n if (colorBins[i]! > maxBinCount) {\n maxBinCount = colorBins[i]!;\n maxBin = i;\n }\n }\n const dominant =\n maxBinCount > 0\n ? {\n r: Math.round(binSumR[maxBin]! / maxBinCount),\n g: Math.round(binSumG[maxBin]! / maxBinCount),\n b: Math.round(binSumB[maxBin]! / maxBinCount)\n }\n : { r: 0, g: 0, b: 0 };\n\n // Laplacian variance sharpness estimate\n let lapSum = 0;\n let lapSqSum = 0;\n let lapCount = 0;\n for (let y = 1; y < height - 1; y++) {\n for (let x = 1; x < width - 1; x++) {\n const c = data[(y * width + x) * 4]!;\n const n = data[((y - 1) * width + x) * 4]!;\n const s = data[((y + 1) * width + x) * 4]!;\n const w = data[(y * width + (x - 1)) * 4]!;\n const e = data[(y * width + (x + 1)) * 4]!;\n const lap = n + s + w + e - 4 * c;\n lapSum += lap;\n lapSqSum += lap * lap;\n lapCount++;\n }\n }\n const lapMean = lapCount > 0 ? lapSum / lapCount : 0;\n const sharpness = lapCount > 0 ? Math.sqrt(Math.max(0, lapSqSum / lapCount - lapMean * lapMean)) : 0;\n\n return {\n channels,\n isOpaque,\n entropy,\n sharpness,\n dominant\n };\n}\n", "import {\n parseColor,\n type ColorInput,\n type ColorSpace,\n type CompositeLayer,\n type ImageAstNode,\n type ImageFormat,\n type ImageMetadata,\n type ImageStats,\n type OutputEncodeOptions,\n type OutputInfo,\n type ResizeOptions,\n type RgbaImage,\n type SharpInputOptions\n} from \"./ast.js\";\nimport { decodeImage, encodeImage, readImageMetadata } from \"./codecs/index.js\";\nimport { resizeImage } from \"./ops/resize.js\";\nimport {\n affineImage,\n applyExifOrientation,\n bandboolImage,\n blurImage,\n claheImage,\n compositeImage,\n computeImageStats,\n convolveImage,\n ensureAlphaImage,\n extendImage,\n extractChannelImage,\n extractImage,\n flattenImage,\n flipImage,\n flopImage,\n gammaImage,\n grayscaleImage,\n joinChannelImage,\n linearImage,\n medianImage,\n modulateImage,\n negateImage,\n normalizeImage,\n recombImage,\n removeAlphaImage,\n rotateImage,\n sharpenImage,\n thresholdImage,\n tintImage,\n toColorspaceImage,\n trimImage,\n unflattenImage\n} from \"./ops/transform.js\";\n\nfunction toBytes(input: Uint8Array | ArrayBuffer | string | undefined): Uint8Array | undefined {\n if (!input) return undefined;\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (typeof input === \"string\") return new TextEncoder().encode(input);\n return undefined;\n}\n\nexport class SharpInstance {\n private readonly inputBytes: Uint8Array | undefined;\n private readonly inputOptions: SharpInputOptions | undefined;\n private readonly nodes: ImageAstNode[] = [];\n private outputOptions: OutputEncodeOptions = {};\n\n constructor(\n input?: Uint8Array | ArrayBuffer | string | SharpInputOptions,\n options?: SharpInputOptions\n ) {\n if (\n input &&\n typeof input === \"object\" &&\n !(input instanceof Uint8Array) &&\n !(input instanceof ArrayBuffer)\n ) {\n this.inputBytes = undefined;\n this.inputOptions = input;\n } else {\n this.inputBytes = toBytes(input as Uint8Array | ArrayBuffer | string | undefined);\n this.inputOptions = options;\n }\n }\n\n clone(): SharpInstance {\n const copy = new SharpInstance(this.inputBytes, this.inputOptions);\n copy.nodes.push(...this.nodes);\n copy.outputOptions = { ...this.outputOptions };\n return copy;\n }\n\n getAst(): readonly ImageAstNode[] {\n return this.nodes;\n }\n\n private evaluateImage(): RgbaImage {\n let img = decodeImage(this.inputBytes, this.inputOptions);\n for (const node of this.nodes) {\n switch (node.kind) {\n case \"autoOrient\":\n img = applyExifOrientation(img);\n break;\n case \"rotate\":\n img = rotateImage(img, node.angle, node.background);\n break;\n case \"flip\":\n img = flipImage(img);\n break;\n case \"flop\":\n img = flopImage(img);\n break;\n case \"extract\":\n img = extractImage(img, node);\n break;\n case \"trim\":\n img = trimImage(img, {\n threshold: node.threshold,\n ...(node.background !== undefined ? { background: node.background } : {})\n });\n break;\n case \"resize\":\n img = resizeImage(img, node);\n break;\n case \"extend\":\n img = extendImage(img, node);\n break;\n case \"composite\":\n img = compositeImage(img, node.layers);\n break;\n case \"grayscale\":\n img = grayscaleImage(img);\n break;\n case \"flatten\":\n img = flattenImage(img, node.background);\n break;\n case \"unflatten\":\n img = unflattenImage(img);\n break;\n case \"negate\":\n img = negateImage(img, { alpha: node.alpha });\n break;\n case \"modulate\":\n img = modulateImage(img, node);\n break;\n case \"tint\":\n img = tintImage(img, node.color);\n break;\n case \"gamma\":\n img = gammaImage(img, node.gamma, node.gammaOut);\n break;\n case \"linear\":\n img = linearImage(img, node.a, node.b);\n break;\n case \"normalize\":\n img = normalizeImage(img, { lower: node.lower, upper: node.upper });\n break;\n case \"threshold\":\n img = thresholdImage(img, node.value, node.grayscale);\n break;\n case \"blur\":\n img = blurImage(img, node.sigma);\n break;\n case \"sharpen\":\n img = sharpenImage(img, node.sigma, node.m1);\n break;\n case \"median\":\n img = medianImage(img, node.size);\n break;\n case \"convolve\":\n img = convolveImage(img, node);\n break;\n case \"ensureAlpha\":\n img = ensureAlphaImage(img, node.alpha);\n break;\n case \"removeAlpha\":\n img = removeAlphaImage(img);\n break;\n case \"extractChannel\":\n img = extractChannelImage(img, node.channel);\n break;\n case \"recomb\":\n img = recombImage(img, node.matrix);\n break;\n case \"toColorspace\":\n img = toColorspaceImage(img, node.space);\n break;\n case \"bandbool\":\n img = bandboolImage(img, node.op);\n break;\n case \"joinChannel\": {\n const extras = node.inputs.map(item => decodeImage(item.data, item.options));\n img = joinChannelImage(img, extras);\n break;\n }\n case \"clahe\":\n img = claheImage(img, node);\n break;\n case \"affine\":\n img = affineImage(img, node);\n break;\n case \"withMetadata\":\n img = {\n ...img,\n ...(node.density !== undefined ? { density: node.density } : {}),\n ...(node.orientation !== undefined ? { orientation: node.orientation } : {})\n };\n break;\n }\n }\n return img;\n }\n\n metadataSync(): ImageMetadata {\n const rawMeta = readImageMetadata(this.inputBytes, this.inputOptions);\n if (this.nodes.length === 0) {\n return rawMeta;\n }\n const evaluated = this.evaluateImage();\n return {\n format: this.outputOptions.format ?? evaluated.format,\n width: evaluated.width,\n height: evaluated.height,\n space: evaluated.space,\n channels: evaluated.channels,\n depth: evaluated.depth,\n density: this.outputOptions.density ?? evaluated.density,\n hasAlpha: evaluated.hasAlpha,\n ...(evaluated.orientation !== undefined ? { orientation: evaluated.orientation } : {}),\n ...(rawMeta.pages !== undefined ? { pages: rawMeta.pages } : {}),\n ...(rawMeta.pagePrimary !== undefined ? { pagePrimary: rawMeta.pagePrimary } : {}),\n ...(rawMeta.isProgressive !== undefined ? { isProgressive: rawMeta.isProgressive } : {}),\n ...(rawMeta.size !== undefined ? { size: rawMeta.size } : {})\n };\n }\n\n async metadata(): Promise<ImageMetadata> {\n return this.metadataSync();\n }\n\n statsSync(): ImageStats {\n const img = this.evaluateImage();\n return computeImageStats(img);\n }\n\n async stats(): Promise<ImageStats> {\n return this.statsSync();\n }\n\n rotate(angle?: number, options?: { readonly background?: ColorInput }): this {\n if (angle === undefined) {\n this.nodes.push({ kind: \"autoOrient\" });\n } else {\n this.nodes.push({\n kind: \"rotate\",\n angle,\n background: parseColor(options?.background, 255)\n });\n }\n return this;\n }\n\n flip(flip = true): this {\n if (flip) this.nodes.push({ kind: \"flip\" });\n return this;\n }\n\n flop(flop = true): this {\n if (flop) this.nodes.push({ kind: \"flop\" });\n return this;\n }\n\n extract(region: {\n readonly left: number;\n readonly top: number;\n readonly width: number;\n readonly height: number;\n }): this {\n this.nodes.push({\n kind: \"extract\",\n left: region.left,\n top: region.top,\n width: region.width,\n height: region.height\n });\n return this;\n }\n\n trim(options?: number | { readonly threshold?: number; readonly background?: ColorInput }): this {\n const threshold = typeof options === \"number\" ? options : (options?.threshold ?? 10);\n const background =\n typeof options === \"object\" && options?.background\n ? parseColor(options.background)\n : undefined;\n this.nodes.push({ kind: \"trim\", threshold, ...(background ? { background } : {}) });\n return this;\n }\n\n resize(\n widthOrOptions?: number | null | ResizeOptions,\n height?: number | null,\n options?: ResizeOptions\n ): this {\n let w: number | null = null;\n let h: number | null = null;\n let opts: ResizeOptions = {};\n if (typeof widthOrOptions === \"object\" && widthOrOptions !== null) {\n opts = widthOrOptions;\n w = opts.width ?? null;\n h = opts.height ?? null;\n } else {\n w = widthOrOptions ?? null;\n h = height ?? null;\n opts = options ?? {};\n }\n this.nodes.push({\n kind: \"resize\",\n width: w,\n height: h,\n fit: opts.fit ?? \"cover\",\n position: opts.position ?? \"centre\",\n kernel: opts.kernel ?? \"lanczos3\",\n background: parseColor(opts.background, 255),\n withoutEnlargement: opts.withoutEnlargement ?? false,\n withoutReduction: opts.withoutReduction ?? false\n });\n return this;\n }\n\n extend(\n edges:\n | number\n | {\n readonly top?: number;\n readonly bottom?: number;\n readonly left?: number;\n readonly right?: number;\n readonly background?: ColorInput;\n readonly extendWith?: \"background\" | \"copy\" | \"repeat\" | \"mirror\";\n }\n ): this {\n if (typeof edges === \"number\") {\n this.nodes.push({\n kind: \"extend\",\n top: edges,\n bottom: edges,\n left: edges,\n right: edges,\n background: { r: 0, g: 0, b: 0, a: 255 },\n extendWith: \"background\"\n });\n return this;\n }\n this.nodes.push({\n kind: \"extend\",\n top: edges.top ?? 0,\n bottom: edges.bottom ?? 0,\n left: edges.left ?? 0,\n right: edges.right ?? 0,\n background: parseColor(edges.background, 255),\n extendWith: edges.extendWith ?? \"background\"\n });\n return this;\n }\n\n composite(images: readonly CompositeLayer[]): this {\n this.nodes.push({ kind: \"composite\", layers: [...images] });\n return this;\n }\n\n grayscale(grayscale = true): this {\n if (grayscale) this.nodes.push({ kind: \"grayscale\" });\n return this;\n }\n\n greyscale(greyscale = true): this {\n return this.grayscale(greyscale);\n }\n\n flatten(options?: { readonly background?: ColorInput }): this {\n this.nodes.push({\n kind: \"flatten\",\n background: parseColor(options?.background ?? \"#000000\", 255)\n });\n return this;\n }\n\n unflatten(): this {\n this.nodes.push({ kind: \"unflatten\" });\n return this;\n }\n\n negate(options?: boolean | { readonly alpha?: boolean }): this {\n if (options === false) return this;\n const alpha = typeof options === \"object\" ? (options.alpha ?? true) : true;\n this.nodes.push({ kind: \"negate\", alpha });\n return this;\n }\n\n modulate(options: {\n readonly brightness?: number;\n readonly saturation?: number;\n readonly hue?: number;\n readonly lightness?: number;\n }): this {\n this.nodes.push({\n kind: \"modulate\",\n brightness: options.brightness ?? 1,\n saturation: options.saturation ?? 1,\n hue: options.hue ?? 0,\n lightness: options.lightness ?? 0\n });\n return this;\n }\n\n tint(rgb: ColorInput): this {\n this.nodes.push({ kind: \"tint\", color: parseColor(rgb, 255) });\n return this;\n }\n\n gamma(gamma = 2.2, gammaOut = gamma): this {\n this.nodes.push({ kind: \"gamma\", gamma, gammaOut });\n return this;\n }\n\n linear(a: number | readonly number[] = 1, b: number | readonly number[] = 0): this {\n const aArr = typeof a === \"number\" ? [a] : [...a];\n const bArr = typeof b === \"number\" ? [b] : [...b];\n this.nodes.push({ kind: \"linear\", a: aArr, b: bArr });\n return this;\n }\n\n normalize(options?: { readonly lower?: number; readonly upper?: number }): this {\n this.nodes.push({\n kind: \"normalize\",\n lower: options?.lower ?? 1,\n upper: options?.upper ?? 99\n });\n return this;\n }\n\n normalise(options?: { readonly lower?: number; readonly upper?: number }): this {\n return this.normalize(options);\n }\n\n threshold(\n threshold = 128,\n options?: { readonly grayscale?: boolean; readonly greyscale?: boolean }\n ): this {\n const gs = options?.grayscale ?? options?.greyscale ?? true;\n this.nodes.push({ kind: \"threshold\", value: threshold, grayscale: gs });\n return this;\n }\n\n blur(sigma: number | boolean = 1.5): this {\n if (sigma === false) return this;\n const s = sigma === true ? 1.5 : sigma;\n this.nodes.push({ kind: \"blur\", sigma: s });\n return this;\n }\n\n sharpen(\n options?:\n | number\n | {\n readonly sigma?: number;\n readonly m1?: number;\n readonly m2?: number;\n }\n ): this {\n const sigma = typeof options === \"number\" ? options : (options?.sigma ?? 1.0);\n const m1 = typeof options === \"object\" ? (options?.m1 ?? 1.0) : 1.0;\n const m2 = typeof options === \"object\" ? (options?.m2 ?? 2.0) : 2.0;\n this.nodes.push({ kind: \"sharpen\", sigma, m1, m2 });\n return this;\n }\n\n median(size = 3): this {\n this.nodes.push({ kind: \"median\", size });\n return this;\n }\n\n convolve(kernelSpec: {\n readonly width: number;\n readonly height: number;\n readonly kernel: readonly number[];\n readonly scale?: number;\n readonly offset?: number;\n }): this {\n const defaultScale = kernelSpec.kernel.reduce((s, v) => s + v, 0) || 1;\n this.nodes.push({\n kind: \"convolve\",\n width: kernelSpec.width,\n height: kernelSpec.height,\n kernel: [...kernelSpec.kernel],\n scale: kernelSpec.scale ?? defaultScale,\n offset: kernelSpec.offset ?? 0\n });\n return this;\n }\n\n ensureAlpha(alpha = 1): this {\n this.nodes.push({ kind: \"ensureAlpha\", alpha });\n return this;\n }\n\n removeAlpha(): this {\n this.nodes.push({ kind: \"removeAlpha\" });\n return this;\n }\n\n extractChannel(channel: 0 | 1 | 2 | 3 | \"red\" | \"green\" | \"blue\" | \"alpha\"): this {\n const ch: 0 | 1 | 2 | 3 =\n channel === \"red\"\n ? 0\n : channel === \"green\"\n ? 1\n : channel === \"blue\"\n ? 2\n : channel === \"alpha\"\n ? 3\n : channel;\n this.nodes.push({ kind: \"extractChannel\", channel: ch });\n return this;\n }\n\n recomb(matrix: readonly (readonly number[])[]): this {\n this.nodes.push({\n kind: \"recomb\",\n matrix: matrix.map(row => [...row])\n });\n return this;\n }\n\n toColorspace(colorspace: string): this {\n const norm = colorspace.toLowerCase();\n const space: ColorSpace =\n norm === \"b-w\" || norm === \"grey16\" || norm === \"gray\"\n ? \"b-w\"\n : norm === \"cmyk\"\n ? \"cmyk\"\n : \"srgb\";\n this.nodes.push({ kind: \"toColorspace\", space });\n return this;\n }\n\n toColourspace(colourspace: string): this {\n return this.toColorspace(colourspace);\n }\n\n pipelineColorspace(colorspace: string): this {\n return this.toColorspace(colorspace);\n }\n\n pipelineColourspace(colourspace: string): this {\n return this.toColorspace(colourspace);\n }\n\n bandbool(boolOp: \"and\" | \"or\" | \"eor\"): this {\n this.nodes.push({ kind: \"bandbool\", op: boolOp });\n return this;\n }\n\n joinChannel(\n images: Uint8Array | ArrayBuffer | readonly (Uint8Array | ArrayBuffer)[],\n options?: SharpInputOptions\n ): this {\n const list = Array.isArray(images) ? images : [images];\n this.nodes.push({\n kind: \"joinChannel\",\n inputs: list.map(buf => ({\n data: buf instanceof Uint8Array ? buf : new Uint8Array(buf),\n ...(options !== undefined ? { options } : {})\n }))\n });\n return this;\n }\n\n clahe(options: {\n readonly width: number;\n readonly height: number;\n readonly maxSlope?: number;\n }): this {\n this.nodes.push({\n kind: \"clahe\",\n width: options.width,\n height: options.height,\n maxSlope: options.maxSlope ?? 3\n });\n return this;\n }\n\n affine(\n matrix: readonly [number, number, number, number] | readonly (readonly number[])[],\n options?: {\n readonly background?: ColorInput;\n readonly idx?: number;\n readonly idy?: number;\n readonly odx?: number;\n readonly ody?: number;\n }\n ): this {\n const flat: [number, number, number, number] = Array.isArray(matrix[0])\n ? [\n (matrix as readonly (readonly number[])[])[0]?.[0] ?? 1,\n (matrix as readonly (readonly number[])[])[0]?.[1] ?? 0,\n (matrix as readonly (readonly number[])[])[1]?.[0] ?? 0,\n (matrix as readonly (readonly number[])[])[1]?.[1] ?? 1\n ]\n : [\n (matrix as readonly number[])[0] ?? 1,\n (matrix as readonly number[])[1] ?? 0,\n (matrix as readonly number[])[2] ?? 0,\n (matrix as readonly number[])[3] ?? 1\n ];\n this.nodes.push({\n kind: \"affine\",\n matrix: flat,\n background: parseColor(options?.background ?? \"#000000\", 255),\n idx: options?.idx ?? 0,\n idy: options?.idy ?? 0,\n odx: options?.odx ?? 0,\n ody: options?.ody ?? 0\n });\n return this;\n }\n\n withMetadata(options?: { readonly density?: number; readonly orientation?: number }): this {\n this.nodes.push({\n kind: \"withMetadata\",\n ...(options?.density !== undefined ? { density: options.density } : {}),\n ...(options?.orientation !== undefined ? { orientation: options.orientation } : {})\n });\n this.outputOptions = {\n ...this.outputOptions,\n ...(options?.density !== undefined ? { density: options.density } : {}),\n ...(options?.orientation !== undefined ? { orientation: options.orientation } : {})\n };\n return this;\n }\n\n png(options?: { readonly compressionLevel?: number; readonly palette?: boolean }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"png\",\n ...(options?.compressionLevel !== undefined\n ? { compressionLevel: options.compressionLevel }\n : {}),\n ...(options?.palette !== undefined ? { palette: options.palette } : {})\n };\n return this;\n }\n\n jpeg(options?: { readonly quality?: number }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"jpeg\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {})\n };\n return this;\n }\n\n webp(options?: { readonly quality?: number; readonly lossless?: boolean }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"webp\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n heif(options?: {\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly lossless?: boolean;\n }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"heif\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.compression !== undefined ? { compression: options.compression } : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n heic(options?: {\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly lossless?: boolean;\n }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"heic\",\n compression: options?.compression ?? \"hevc\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n avif(options?: { readonly quality?: number; readonly lossless?: boolean }): this {\n this.outputOptions = {\n ...this.outputOptions,\n format: \"avif\",\n compression: \"av1\",\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n gif(): this {\n this.outputOptions = { ...this.outputOptions, format: \"gif\" };\n return this;\n }\n\n ppm(): this {\n this.outputOptions = { ...this.outputOptions, format: \"ppm\" };\n return this;\n }\n\n pgm(): this {\n this.outputOptions = { ...this.outputOptions, format: \"pgm\" };\n return this;\n }\n\n pbm(): this {\n this.outputOptions = { ...this.outputOptions, format: \"pbm\" };\n return this;\n }\n\n bmp(): this {\n this.outputOptions = { ...this.outputOptions, format: \"bmp\" };\n return this;\n }\n\n tiff(): this {\n this.outputOptions = { ...this.outputOptions, format: \"tiff\" };\n return this;\n }\n\n raw(): this {\n this.outputOptions = { ...this.outputOptions, format: \"raw\" };\n return this;\n }\n\n toFormat(\n format: ImageFormat | \"jpg\",\n options?: {\n readonly quality?: number;\n readonly compression?: \"hevc\" | \"av1\";\n readonly compressionLevel?: number;\n readonly lossless?: boolean;\n }\n ): this {\n const norm: ImageFormat = format === \"jpg\" ? \"jpeg\" : format;\n this.outputOptions = {\n ...this.outputOptions,\n format: norm,\n ...(options?.quality !== undefined ? { quality: options.quality } : {}),\n ...(options?.compression !== undefined ? { compression: options.compression } : {}),\n ...(options?.compressionLevel !== undefined\n ? { compressionLevel: options.compressionLevel }\n : {}),\n ...(options?.lossless !== undefined ? { lossless: options.lossless } : {})\n };\n return this;\n }\n\n toBufferWithObjectSync(): { readonly data: Uint8Array; readonly info: OutputInfo } {\n const img = this.evaluateImage();\n const encoded = encodeImage(img, this.outputOptions);\n return {\n data: encoded.data,\n info: {\n format: encoded.format,\n width: img.width,\n height: img.height,\n channels: encoded.channels,\n premultiplied: false,\n size: encoded.data.byteLength\n }\n };\n }\n\n toBufferSync(): Uint8Array {\n return this.toBufferWithObjectSync().data;\n }\n\n toBuffer(): Promise<Uint8Array>;\n toBuffer(options: { readonly resolveWithObject: true }): Promise<{ readonly data: Uint8Array; readonly info: OutputInfo }>;\n toBuffer(options: { readonly resolveWithObject: false }): Promise<Uint8Array>;\n async toBuffer(options?: { readonly resolveWithObject?: boolean }): Promise<\n Uint8Array | { readonly data: Uint8Array; readonly info: OutputInfo }\n > {\n const res = this.toBufferWithObjectSync();\n if (options?.resolveWithObject) {\n return res;\n }\n return res.data;\n }\n}\n\nexport function sharp(\n input?: Uint8Array | ArrayBuffer | string | SharpInputOptions,\n options?: SharpInputOptions\n): SharpInstance {\n return new SharpInstance(input, options);\n}\n\nexport default sharp;\n"],
|
|
5
|
+
"mappings": "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EAAG,CAAC,IAAI,CAAC;AAAA,EACjE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAChE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAChE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjE,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC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",
|
|
6
6
|
"names": ["inflate", "totalSize", "out", "view", "argb", "inflate", "inflate", "entry", "num", "out", "scale", "scaledData", "offset", "outA", "p", "q", "left", "top"]
|
|
7
7
|
}
|