{"version":3,"sources":["../src/index.ts","../src/binary.ts","../src/decoder.ts","../src/encoder.ts","../src/output-format.ts"],"sourcesContent":["import { decode } from \"./decoder\";\nimport { encode } from \"./encoder\";\nimport { decodeRgb, decodeRgba } from \"./output-format\";\n\nexport type {\n  BmpBinaryInput,\n  DecodeColorOptions,\n  EncodeBitDepth,\n  BmpImageData,\n  BmpPaletteColor,\n  DecodeOptions,\n  DecodedBmp,\n  DecodedRgb,\n  EncodeOptions,\n  EncodedBmp,\n} from \"./types\";\nexport { BmpDecoder } from \"./decoder\";\nexport { BmpEncoder } from \"./encoder\";\nexport { encode, decode, decodeRgba, decodeRgb };\n\nconst bmp = {\n  encode,\n  decode,\n  decodeRgba,\n  decodeRgb,\n};\n\nexport default bmp;\n","import type { BmpBinaryInput } from \"./types\";\n\nexport function toUint8Array(input: BmpBinaryInput): Uint8Array {\n  if (input instanceof ArrayBuffer) {\n    return new Uint8Array(input);\n  }\n\n  return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n}\n\nexport function assertInteger(name: string, value: number): void {\n  if (!Number.isInteger(value) || value <= 0) {\n    throw new Error(`${name} must be a positive integer`);\n  }\n}\n","import { toUint8Array } from \"./binary\";\nimport type { BmpBinaryInput, BmpPaletteColor, DecodeOptions, DecodedBmp } from \"./types\";\n\nconst FILE_HEADER_SIZE = 14;\nconst INFO_HEADER_MIN = 40;\nconst CORE_HEADER_SIZE = 12;\n\nfunction rowStride(width: number, bitPP: number): number {\n  return Math.floor((bitPP * width + 31) / 32) * 4;\n}\n\nclass BmpDecoder implements DecodedBmp {\n  private pos = 0;\n  private readonly bytes: Uint8Array;\n  private readonly view: DataView;\n  private readonly options: Required<DecodeOptions>;\n  private bottomUp = true;\n  private dibStart = FILE_HEADER_SIZE;\n  private paletteEntrySize = 4;\n  private externalMaskOffset = 0;\n\n  private maskRed = 0;\n  private maskGreen = 0;\n  private maskBlue = 0;\n  private maskAlpha = 0;\n\n  fileSize!: number;\n  reserved!: number;\n  offset!: number;\n  headerSize!: number;\n  width!: number;\n  height!: number;\n  planes!: number;\n  bitPP!: number;\n  compress!: number;\n  rawSize!: number;\n  hr!: number;\n  vr!: number;\n  colors!: number;\n  importantColors!: number;\n  palette?: BmpPaletteColor[];\n  data!: Uint8Array;\n\n  constructor(input: BmpBinaryInput, options: DecodeOptions = {}) {\n    this.bytes = toUint8Array(input);\n    this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n    this.options = {\n      treat16BitAs15BitAlpha: options.treat16BitAs15BitAlpha ?? false,\n      toRGBA: options.toRGBA ?? false,\n    };\n\n    this.parseFileHeader();\n    this.parseDibHeader();\n    this.parsePalette();\n    this.pos = this.offset;\n    this.parseRGBA();\n    this.transformToRgbaIfNeeded();\n  }\n\n  private ensureReadable(offset: number, size: number, context: string): void {\n    if (offset < 0 || size < 0 || offset + size > this.bytes.length) {\n      throw new Error(`BMP decode out-of-range while reading ${context}`);\n    }\n  }\n\n  private readUInt8(offset = this.pos): number {\n    this.ensureReadable(offset, 1, \"uint8\");\n    if (offset === this.pos) this.pos += 1;\n    return this.view.getUint8(offset);\n  }\n\n  private readUInt16LE(offset = this.pos): number {\n    this.ensureReadable(offset, 2, \"uint16\");\n    if (offset === this.pos) this.pos += 2;\n    return this.view.getUint16(offset, true);\n  }\n\n  private readInt16LE(offset = this.pos): number {\n    this.ensureReadable(offset, 2, \"int16\");\n    if (offset === this.pos) this.pos += 2;\n    return this.view.getInt16(offset, true);\n  }\n\n  private readUInt32LE(offset = this.pos): number {\n    this.ensureReadable(offset, 4, \"uint32\");\n    if (offset === this.pos) this.pos += 4;\n    return this.view.getUint32(offset, true);\n  }\n\n  private readInt32LE(offset = this.pos): number {\n    this.ensureReadable(offset, 4, \"int32\");\n    if (offset === this.pos) this.pos += 4;\n    return this.view.getInt32(offset, true);\n  }\n\n  private parseFileHeader(): void {\n    this.ensureReadable(0, FILE_HEADER_SIZE, \"file header\");\n    if (this.bytes[0] !== 0x42 || this.bytes[1] !== 0x4d) {\n      throw new Error(\"Invalid BMP file signature\");\n    }\n\n    this.pos = 2;\n    this.fileSize = this.readUInt32LE();\n    this.reserved = this.readUInt32LE();\n    this.offset = this.readUInt32LE();\n\n    if (this.offset < FILE_HEADER_SIZE || this.offset > this.bytes.length) {\n      throw new Error(`Invalid pixel data offset: ${this.offset}`);\n    }\n  }\n\n  private parseDibHeader(): void {\n    this.pos = this.dibStart;\n    this.headerSize = this.readUInt32LE();\n    if (this.headerSize < CORE_HEADER_SIZE) {\n      throw new Error(`Unsupported DIB header size: ${this.headerSize}`);\n    }\n    this.ensureReadable(this.dibStart, this.headerSize, \"DIB header\");\n\n    if (this.headerSize === CORE_HEADER_SIZE) {\n      this.parseCoreHeader();\n      return;\n    }\n\n    if (this.headerSize < INFO_HEADER_MIN) {\n      throw new Error(`Unsupported DIB header size: ${this.headerSize}`);\n    }\n\n    this.parseInfoHeader();\n  }\n\n  private parseCoreHeader(): void {\n    const width = this.readUInt16LE(this.dibStart + 4);\n    const height = this.readUInt16LE(this.dibStart + 6);\n\n    this.width = width;\n    this.height = height;\n    this.planes = this.readUInt16LE(this.dibStart + 8);\n    this.bitPP = this.readUInt16LE(this.dibStart + 10);\n    this.compress = 0;\n    this.rawSize = 0;\n    this.hr = 0;\n    this.vr = 0;\n    this.colors = 0;\n    this.importantColors = 0;\n    this.bottomUp = true;\n    this.paletteEntrySize = 3;\n    this.externalMaskOffset = this.dibStart + this.headerSize;\n\n    this.validateDimensions();\n  }\n\n  private parseInfoHeader(): void {\n    const rawWidth = this.readInt32LE(this.dibStart + 4);\n    const rawHeight = this.readInt32LE(this.dibStart + 8);\n\n    this.width = rawWidth;\n    this.height = rawHeight;\n    this.planes = this.readUInt16LE(this.dibStart + 12);\n    this.bitPP = this.readUInt16LE(this.dibStart + 14);\n    this.compress = this.readUInt32LE(this.dibStart + 16);\n    this.rawSize = this.readUInt32LE(this.dibStart + 20);\n    this.hr = this.readUInt32LE(this.dibStart + 24);\n    this.vr = this.readUInt32LE(this.dibStart + 28);\n    this.colors = this.readUInt32LE(this.dibStart + 32);\n    this.importantColors = this.readUInt32LE(this.dibStart + 36);\n    this.paletteEntrySize = 4;\n    this.externalMaskOffset = this.dibStart + this.headerSize;\n\n    if (this.height < 0) {\n      this.height *= -1;\n      this.bottomUp = false;\n    }\n\n    if (this.width < 0) {\n      this.width *= -1;\n    }\n\n    if (this.bitPP === 16 && this.options.treat16BitAs15BitAlpha) {\n      this.bitPP = 15;\n    }\n\n    this.validateDimensions();\n    this.parseBitMasks();\n  }\n\n  private validateDimensions(): void {\n    if (\n      !Number.isInteger(this.width) ||\n      !Number.isInteger(this.height) ||\n      this.width <= 0 ||\n      this.height <= 0\n    ) {\n      throw new Error(`Invalid BMP dimensions: ${this.width}x${this.height}`);\n    }\n  }\n\n  private parseBitMasks(): void {\n    if (\n      !(this.bitPP === 16 || this.bitPP === 32) ||\n      !(this.compress === 3 || this.compress === 6)\n    ) {\n      return;\n    }\n\n    const inHeaderMaskStart = this.dibStart + 40;\n    const hasMasksInHeader = this.headerSize >= 52;\n    const maskStart = hasMasksInHeader ? inHeaderMaskStart : this.externalMaskOffset;\n    const maskCount = this.compress === 6 || this.headerSize >= 56 ? 4 : 3;\n    this.ensureReadable(maskStart, maskCount * 4, \"bit masks\");\n\n    this.maskRed = this.readUInt32LE(maskStart);\n    this.maskGreen = this.readUInt32LE(maskStart + 4);\n    this.maskBlue = this.readUInt32LE(maskStart + 8);\n    this.maskAlpha = maskCount >= 4 ? this.readUInt32LE(maskStart + 12) : 0;\n\n    if (!hasMasksInHeader) {\n      this.externalMaskOffset += maskCount * 4;\n    }\n  }\n\n  private parsePalette(): void {\n    if (this.bitPP >= 16) {\n      return;\n    }\n\n    const colorCount = this.colors === 0 ? 1 << this.bitPP : this.colors;\n    if (colorCount <= 0) {\n      return;\n    }\n\n    const paletteStart = this.externalMaskOffset;\n    const paletteSize = colorCount * this.paletteEntrySize;\n    if (paletteStart + paletteSize > this.offset) {\n      throw new Error(\"Palette data overlaps or exceeds pixel data offset\");\n    }\n\n    this.palette = new Array(colorCount);\n    for (let i = 0; i < colorCount; i += 1) {\n      const base = paletteStart + i * this.paletteEntrySize;\n      const blue = this.readUInt8(base);\n      const green = this.readUInt8(base + 1);\n      const red = this.readUInt8(base + 2);\n      const quad = this.paletteEntrySize === 4 ? this.readUInt8(base + 3) : 0;\n      this.palette[i] = { red, green, blue, quad };\n    }\n  }\n\n  private parseRGBA(): void {\n    const pixelCount = this.width * this.height;\n    const len = pixelCount * 4;\n    this.data = new Uint8Array(len);\n\n    switch (this.bitPP) {\n      case 1:\n        this.bit1();\n        return;\n      case 4:\n        this.bit4();\n        return;\n      case 8:\n        this.bit8();\n        return;\n      case 15:\n        this.bit15();\n        return;\n      case 16:\n        this.bit16();\n        return;\n      case 24:\n        this.bit24();\n        return;\n      case 32:\n        this.bit32();\n        return;\n      default:\n        throw new Error(`Unsupported BMP bit depth: ${this.bitPP}`);\n    }\n  }\n\n  private transformToRgbaIfNeeded(): void {\n    if (!this.options.toRGBA) {\n      return;\n    }\n\n    for (let i = 0; i < this.data.length; i += 4) {\n      const alpha = this.data[i] ?? 0;\n      const blue = this.data[i + 1] ?? 0;\n      const green = this.data[i + 2] ?? 0;\n      const red = this.data[i + 3] ?? 0;\n\n      this.data[i] = red;\n      this.data[i + 1] = green;\n      this.data[i + 2] = blue;\n      this.data[i + 3] = alpha;\n    }\n  }\n\n  private getPaletteColor(index: number): BmpPaletteColor {\n    const color = this.palette?.[index];\n    if (color) {\n      return color;\n    }\n\n    return { red: 0xff, green: 0xff, blue: 0xff, quad: 0x00 };\n  }\n\n  private setPixel(\n    destY: number,\n    x: number,\n    alpha: number,\n    blue: number,\n    green: number,\n    red: number,\n  ): void {\n    const base = (destY * this.width + x) * 4;\n    this.data[base] = alpha;\n    this.data[base + 1] = blue;\n    this.data[base + 2] = green;\n    this.data[base + 3] = red;\n  }\n\n  private bit1(): void {\n    const stride = rowStride(this.width, 1);\n    const bytesPerRow = Math.ceil(this.width / 8);\n\n    for (let srcRow = 0; srcRow < this.height; srcRow += 1) {\n      const rowStart = this.offset + srcRow * stride;\n      this.ensureReadable(rowStart, bytesPerRow, \"1-bit row\");\n      const destY = this.bottomUp ? this.height - 1 - srcRow : srcRow;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const packed = this.readUInt8(rowStart + Math.floor(x / 8));\n        const bit = (packed >> (7 - (x % 8))) & 0x01;\n        const rgb = this.getPaletteColor(bit);\n        this.setPixel(destY, x, 0xff, rgb.blue, rgb.green, rgb.red);\n      }\n    }\n  }\n\n  private bit4(): void {\n    if (this.compress === 2) {\n      this.bit4Rle();\n      return;\n    }\n\n    const stride = rowStride(this.width, 4);\n    const bytesPerRow = Math.ceil(this.width / 2);\n\n    for (let srcRow = 0; srcRow < this.height; srcRow += 1) {\n      const rowStart = this.offset + srcRow * stride;\n      this.ensureReadable(rowStart, bytesPerRow, \"4-bit row\");\n      const destY = this.bottomUp ? this.height - 1 - srcRow : srcRow;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const packed = this.readUInt8(rowStart + Math.floor(x / 2));\n        const idx = x % 2 === 0 ? (packed & 0xf0) >> 4 : packed & 0x0f;\n        const rgb = this.getPaletteColor(idx);\n        this.setPixel(destY, x, 0xff, rgb.blue, rgb.green, rgb.red);\n      }\n    }\n  }\n\n  private bit8(): void {\n    if (this.compress === 1) {\n      this.bit8Rle();\n      return;\n    }\n\n    const stride = rowStride(this.width, 8);\n    const bytesPerRow = this.width;\n\n    for (let srcRow = 0; srcRow < this.height; srcRow += 1) {\n      const rowStart = this.offset + srcRow * stride;\n      this.ensureReadable(rowStart, bytesPerRow, \"8-bit row\");\n      const destY = this.bottomUp ? this.height - 1 - srcRow : srcRow;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const idx = this.readUInt8(rowStart + x);\n        const rgb = this.getPaletteColor(idx);\n        this.setPixel(destY, x, 0xff, rgb.blue, rgb.green, rgb.red);\n      }\n    }\n  }\n\n  private bit15(): void {\n    const stride = rowStride(this.width, 16);\n    const max = 0b11111;\n\n    for (let srcRow = 0; srcRow < this.height; srcRow += 1) {\n      const rowStart = this.offset + srcRow * stride;\n      this.ensureReadable(rowStart, this.width * 2, \"15-bit row\");\n      const destY = this.bottomUp ? this.height - 1 - srcRow : srcRow;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const value = this.readUInt16LE(rowStart + x * 2);\n        const blue = (((value >> 0) & max) / max) * 255;\n        const green = (((value >> 5) & max) / max) * 255;\n        const red = (((value >> 10) & max) / max) * 255;\n        const alpha = (value & 0x8000) !== 0 ? 0xff : 0x00;\n\n        this.setPixel(destY, x, alpha, blue | 0, green | 0, red | 0);\n      }\n    }\n  }\n\n  private scaleMasked(value: number, mask: number): number {\n    if (mask === 0) return 0;\n    let shift = 0;\n    let bits = 0;\n    let m = mask;\n    while ((m & 1) === 0) {\n      shift += 1;\n      m >>>= 1;\n    }\n    while ((m & 1) === 1) {\n      bits += 1;\n      m >>>= 1;\n    }\n\n    const component = (value & mask) >>> shift;\n    if (bits >= 8) {\n      return component >>> (bits - 8);\n    }\n\n    return (component << (8 - bits)) & 0xff;\n  }\n\n  private bit16(): void {\n    if (this.maskRed === 0 && this.maskGreen === 0 && this.maskBlue === 0) {\n      this.maskRed = 0x7c00;\n      this.maskGreen = 0x03e0;\n      this.maskBlue = 0x001f;\n    }\n\n    const stride = rowStride(this.width, 16);\n\n    for (let srcRow = 0; srcRow < this.height; srcRow += 1) {\n      const rowStart = this.offset + srcRow * stride;\n      this.ensureReadable(rowStart, this.width * 2, \"16-bit row\");\n      const destY = this.bottomUp ? this.height - 1 - srcRow : srcRow;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const value = this.readUInt16LE(rowStart + x * 2);\n        const blue = this.scaleMasked(value, this.maskBlue);\n        const green = this.scaleMasked(value, this.maskGreen);\n        const red = this.scaleMasked(value, this.maskRed);\n        const alpha = this.maskAlpha !== 0 ? this.scaleMasked(value, this.maskAlpha) : 0xff;\n        this.setPixel(destY, x, alpha, blue, green, red);\n      }\n    }\n  }\n\n  private bit24(): void {\n    const stride = rowStride(this.width, 24);\n\n    for (let srcRow = 0; srcRow < this.height; srcRow += 1) {\n      const rowStart = this.offset + srcRow * stride;\n      this.ensureReadable(rowStart, this.width * 3, \"24-bit row\");\n      const destY = this.bottomUp ? this.height - 1 - srcRow : srcRow;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const base = rowStart + x * 3;\n        const blue = this.readUInt8(base);\n        const green = this.readUInt8(base + 1);\n        const red = this.readUInt8(base + 2);\n        this.setPixel(destY, x, 0xff, blue, green, red);\n      }\n    }\n  }\n\n  private bit32(): void {\n    const stride = rowStride(this.width, 32);\n\n    for (let srcRow = 0; srcRow < this.height; srcRow += 1) {\n      const rowStart = this.offset + srcRow * stride;\n      this.ensureReadable(rowStart, this.width * 4, \"32-bit row\");\n      const destY = this.bottomUp ? this.height - 1 - srcRow : srcRow;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const base = rowStart + x * 4;\n        if (this.compress === 3 || this.compress === 6) {\n          const pixel = this.readUInt32LE(base);\n          const red = this.scaleMasked(pixel, this.maskRed || 0x00ff0000);\n          const green = this.scaleMasked(pixel, this.maskGreen || 0x0000ff00);\n          const blue = this.scaleMasked(pixel, this.maskBlue || 0x000000ff);\n          const alpha = this.maskAlpha === 0 ? 0xff : this.scaleMasked(pixel, this.maskAlpha);\n          this.setPixel(destY, x, alpha, blue, green, red);\n        } else {\n          const blue = this.readUInt8(base);\n          const green = this.readUInt8(base + 1);\n          const red = this.readUInt8(base + 2);\n          const alpha = this.readUInt8(base + 3);\n          this.setPixel(destY, x, alpha, blue, green, red);\n        }\n      }\n    }\n  }\n\n  private bit8Rle(): void {\n    this.data.fill(0xff);\n    this.pos = this.offset;\n    let x = 0;\n    let y = this.bottomUp ? this.height - 1 : 0;\n\n    while (this.pos < this.bytes.length) {\n      const count = this.readUInt8();\n      const value = this.readUInt8();\n\n      if (count === 0) {\n        if (value === 0) {\n          x = 0;\n          y += this.bottomUp ? -1 : 1;\n          continue;\n        }\n        if (value === 1) {\n          break;\n        }\n        if (value === 2) {\n          x += this.readUInt8();\n          y += this.bottomUp ? -this.readUInt8() : this.readUInt8();\n          continue;\n        }\n\n        for (let i = 0; i < value; i += 1) {\n          const idx = this.readUInt8();\n          const rgb = this.getPaletteColor(idx);\n          if (x < this.width && y >= 0 && y < this.height) {\n            this.setPixel(y, x, 0xff, rgb.blue, rgb.green, rgb.red);\n          }\n          x += 1;\n        }\n        if ((value & 1) === 1) {\n          this.pos += 1;\n        }\n        continue;\n      }\n\n      const rgb = this.getPaletteColor(value);\n      for (let i = 0; i < count; i += 1) {\n        if (x < this.width && y >= 0 && y < this.height) {\n          this.setPixel(y, x, 0xff, rgb.blue, rgb.green, rgb.red);\n        }\n        x += 1;\n      }\n    }\n  }\n\n  private bit4Rle(): void {\n    this.data.fill(0xff);\n    this.pos = this.offset;\n    let x = 0;\n    let y = this.bottomUp ? this.height - 1 : 0;\n\n    while (this.pos < this.bytes.length) {\n      const count = this.readUInt8();\n      const value = this.readUInt8();\n\n      if (count === 0) {\n        if (value === 0) {\n          x = 0;\n          y += this.bottomUp ? -1 : 1;\n          continue;\n        }\n        if (value === 1) {\n          break;\n        }\n        if (value === 2) {\n          x += this.readUInt8();\n          y += this.bottomUp ? -this.readUInt8() : this.readUInt8();\n          continue;\n        }\n\n        let current = this.readUInt8();\n        for (let i = 0; i < value; i += 1) {\n          const nibble = i % 2 === 0 ? (current & 0xf0) >> 4 : current & 0x0f;\n          const rgb = this.getPaletteColor(nibble);\n          if (x < this.width && y >= 0 && y < this.height) {\n            this.setPixel(y, x, 0xff, rgb.blue, rgb.green, rgb.red);\n          }\n          x += 1;\n          if (i % 2 === 1 && i + 1 < value) {\n            current = this.readUInt8();\n          }\n        }\n        if ((((value + 1) >> 1) & 1) === 1) {\n          this.pos += 1;\n        }\n        continue;\n      }\n\n      for (let i = 0; i < count; i += 1) {\n        const nibble = i % 2 === 0 ? (value & 0xf0) >> 4 : value & 0x0f;\n        const rgb = this.getPaletteColor(nibble);\n        if (x < this.width && y >= 0 && y < this.height) {\n          this.setPixel(y, x, 0xff, rgb.blue, rgb.green, rgb.red);\n        }\n        x += 1;\n      }\n    }\n  }\n\n  getData(): Uint8Array {\n    return this.data;\n  }\n}\n\nexport function decode(bmpData: BmpBinaryInput, options?: DecodeOptions): DecodedBmp {\n  return new BmpDecoder(bmpData, options);\n}\n\nexport { BmpDecoder };\n","import { assertInteger } from \"./binary\";\nimport type {\n  BmpImageData,\n  BmpPaletteColor,\n  EncodeBitDepth,\n  EncodeOptions,\n  EncodedBmp,\n} from \"./types\";\n\nconst FILE_HEADER_SIZE = 14;\nconst INFO_HEADER_SIZE = 40;\nconst BYTES_PER_PIXEL_ABGR = 4;\nconst SUPPORTED_BIT_DEPTHS = [1, 4, 8, 16, 24, 32] as const;\n\ntype SupportedBitDepth = (typeof SUPPORTED_BIT_DEPTHS)[number];\ntype ResolvedEncodeOptions = Required<Pick<EncodeOptions, \"orientation\" | \"bitPP\">> & {\n  palette: BmpPaletteColor[];\n};\n\nfunction isSupportedBitDepth(value: number): value is SupportedBitDepth {\n  return (SUPPORTED_BIT_DEPTHS as readonly number[]).includes(value);\n}\n\nfunction normalizeEncodeOptions(qualityOrOptions?: number | EncodeOptions): ResolvedEncodeOptions {\n  if (typeof qualityOrOptions === \"number\" || typeof qualityOrOptions === \"undefined\") {\n    return {\n      orientation: \"top-down\",\n      bitPP: 24,\n      palette: [],\n    };\n  }\n\n  return {\n    orientation: qualityOrOptions.orientation ?? \"top-down\",\n    bitPP: qualityOrOptions.bitPP ?? 24,\n    palette: qualityOrOptions.palette ?? [],\n  };\n}\n\nclass BmpEncoder {\n  private readonly pixelData: Uint8Array;\n  private readonly width: number;\n  private readonly height: number;\n  private readonly options: ResolvedEncodeOptions;\n  private readonly palette: BmpPaletteColor[];\n  private readonly exactPaletteIndex = new Map<number, number>();\n\n  constructor(imgData: BmpImageData, options: ResolvedEncodeOptions) {\n    this.pixelData = imgData.data;\n    this.width = imgData.width;\n    this.height = imgData.height;\n    this.options = options;\n    this.palette = this.normalizePalette(options);\n\n    assertInteger(\"width\", this.width);\n    assertInteger(\"height\", this.height);\n\n    if (!isSupportedBitDepth(this.options.bitPP)) {\n      throw new Error(\n        `Unsupported encode bit depth: ${this.options.bitPP}. Supported: 1, 4, 8, 16, 24, 32.`,\n      );\n    }\n\n    const minLength = this.width * this.height * BYTES_PER_PIXEL_ABGR;\n    if (this.pixelData.length < minLength) {\n      throw new Error(\n        `Image data is too short: expected at least ${minLength} bytes for ${this.width}x${this.height} ABGR data.`,\n      );\n    }\n\n    for (let i = 0; i < this.palette.length; i += 1) {\n      const color = this.palette[i]!;\n      const key = this.paletteKey(color.quad, color.blue, color.green, color.red);\n      if (!this.exactPaletteIndex.has(key)) {\n        this.exactPaletteIndex.set(key, i);\n      }\n    }\n  }\n\n  private normalizePalette(options: ResolvedEncodeOptions): BmpPaletteColor[] {\n    if (options.bitPP === 1) {\n      const palette = options.palette.length\n        ? options.palette\n        : [\n            { red: 255, green: 255, blue: 255, quad: 0 },\n            { red: 0, green: 0, blue: 0, quad: 0 },\n          ];\n      this.validatePalette(options.bitPP, palette);\n      return palette;\n    }\n\n    if (options.bitPP === 4 || options.bitPP === 8) {\n      if (options.palette.length === 0) {\n        throw new Error(`Encoding ${options.bitPP}-bit BMP requires a non-empty palette.`);\n      }\n      this.validatePalette(options.bitPP, options.palette);\n      return options.palette;\n    }\n\n    return [];\n  }\n\n  private validatePalette(bitPP: 1 | 4 | 8, palette: BmpPaletteColor[]): void {\n    const maxSize = 1 << bitPP;\n    if (palette.length === 0 || palette.length > maxSize) {\n      throw new Error(\n        `Palette size ${palette.length} is invalid for ${bitPP}-bit BMP. Expected 1..${maxSize}.`,\n      );\n    }\n\n    for (const color of palette) {\n      this.validateChannel(\"palette.red\", color.red);\n      this.validateChannel(\"palette.green\", color.green);\n      this.validateChannel(\"palette.blue\", color.blue);\n      this.validateChannel(\"palette.quad\", color.quad);\n    }\n  }\n\n  private validateChannel(name: string, value: number): void {\n    if (!Number.isInteger(value) || value < 0 || value > 255) {\n      throw new Error(`${name} must be an integer between 0 and 255.`);\n    }\n  }\n\n  private rowStride(): number {\n    return Math.floor((this.options.bitPP * this.width + 31) / 32) * 4;\n  }\n\n  private sourceY(fileRow: number): number {\n    return this.options.orientation === \"top-down\" ? fileRow : this.height - 1 - fileRow;\n  }\n\n  private sourceOffset(x: number, y: number): number {\n    return (y * this.width + x) * BYTES_PER_PIXEL_ABGR;\n  }\n\n  private paletteKey(alpha: number, blue: number, green: number, red: number): number {\n    return (\n      (((alpha & 0xff) << 24) | ((blue & 0xff) << 16) | ((green & 0xff) << 8) | (red & 0xff)) >>> 0\n    );\n  }\n\n  private findPaletteIndex(a: number, b: number, g: number, r: number): number {\n    const exact = this.exactPaletteIndex.get(this.paletteKey(a, b, g, r));\n    if (exact !== undefined) {\n      return exact;\n    }\n\n    let bestIndex = 0;\n    let bestDistance = Number.POSITIVE_INFINITY;\n\n    for (let i = 0; i < this.palette.length; i += 1) {\n      const color = this.palette[i]!;\n      const dr = color.red - r;\n      const dg = color.green - g;\n      const db = color.blue - b;\n      const da = color.quad - a;\n      const distance = dr * dr + dg * dg + db * db + da * da;\n      if (distance < bestDistance) {\n        bestDistance = distance;\n        bestIndex = i;\n      }\n    }\n\n    return bestIndex;\n  }\n\n  private writePalette(output: Uint8Array, paletteOffset: number): void {\n    for (let i = 0; i < this.palette.length; i += 1) {\n      const color = this.palette[i]!;\n      const base = paletteOffset + i * 4;\n      output[base] = color.blue;\n      output[base + 1] = color.green;\n      output[base + 2] = color.red;\n      output[base + 3] = color.quad;\n    }\n  }\n\n  private encode1Bit(output: Uint8Array, pixelOffset: number, stride: number): void {\n    for (let fileRow = 0; fileRow < this.height; fileRow += 1) {\n      const srcY = this.sourceY(fileRow);\n      const rowStart = pixelOffset + fileRow * stride;\n\n      for (let x = 0; x < this.width; x += 8) {\n        let packed = 0;\n        for (let bit = 0; bit < 8; bit += 1) {\n          const px = x + bit;\n          if (px >= this.width) {\n            break;\n          }\n          const source = this.sourceOffset(px, srcY);\n          const a = this.pixelData[source] ?? 0xff;\n          const b = this.pixelData[source + 1] ?? 0;\n          const g = this.pixelData[source + 2] ?? 0;\n          const r = this.pixelData[source + 3] ?? 0;\n          const idx = this.findPaletteIndex(a, b, g, r) & 0x01;\n          packed |= idx << (7 - bit);\n        }\n        output[rowStart + Math.floor(x / 8)] = packed;\n      }\n    }\n  }\n\n  private encode4Bit(output: Uint8Array, pixelOffset: number, stride: number): void {\n    for (let fileRow = 0; fileRow < this.height; fileRow += 1) {\n      const srcY = this.sourceY(fileRow);\n      const rowStart = pixelOffset + fileRow * stride;\n\n      for (let x = 0; x < this.width; x += 2) {\n        const sourceA = this.sourceOffset(x, srcY);\n        const idxA = this.findPaletteIndex(\n          this.pixelData[sourceA] ?? 0xff,\n          this.pixelData[sourceA + 1] ?? 0,\n          this.pixelData[sourceA + 2] ?? 0,\n          this.pixelData[sourceA + 3] ?? 0,\n        );\n\n        let idxB = 0;\n        if (x + 1 < this.width) {\n          const sourceB = this.sourceOffset(x + 1, srcY);\n          idxB = this.findPaletteIndex(\n            this.pixelData[sourceB] ?? 0xff,\n            this.pixelData[sourceB + 1] ?? 0,\n            this.pixelData[sourceB + 2] ?? 0,\n            this.pixelData[sourceB + 3] ?? 0,\n          );\n        }\n\n        output[rowStart + Math.floor(x / 2)] = ((idxA & 0x0f) << 4) | (idxB & 0x0f);\n      }\n    }\n  }\n\n  private encode8Bit(output: Uint8Array, pixelOffset: number, stride: number): void {\n    for (let fileRow = 0; fileRow < this.height; fileRow += 1) {\n      const srcY = this.sourceY(fileRow);\n      const rowStart = pixelOffset + fileRow * stride;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const source = this.sourceOffset(x, srcY);\n        output[rowStart + x] = this.findPaletteIndex(\n          this.pixelData[source] ?? 0xff,\n          this.pixelData[source + 1] ?? 0,\n          this.pixelData[source + 2] ?? 0,\n          this.pixelData[source + 3] ?? 0,\n        );\n      }\n    }\n  }\n\n  private encode16Bit(\n    output: Uint8Array,\n    view: DataView,\n    pixelOffset: number,\n    stride: number,\n  ): void {\n    for (let fileRow = 0; fileRow < this.height; fileRow += 1) {\n      const srcY = this.sourceY(fileRow);\n      const rowStart = pixelOffset + fileRow * stride;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const source = this.sourceOffset(x, srcY);\n        const b = this.pixelData[source + 1] ?? 0;\n        const g = this.pixelData[source + 2] ?? 0;\n        const r = this.pixelData[source + 3] ?? 0;\n\n        const value = (((r >> 3) & 0x1f) << 10) | (((g >> 3) & 0x1f) << 5) | ((b >> 3) & 0x1f);\n        view.setUint16(rowStart + x * 2, value, true);\n      }\n    }\n  }\n\n  private encode24Bit(output: Uint8Array, pixelOffset: number, stride: number): void {\n    for (let fileRow = 0; fileRow < this.height; fileRow += 1) {\n      const srcY = this.sourceY(fileRow);\n      const rowStart = pixelOffset + fileRow * stride;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const source = this.sourceOffset(x, srcY);\n        const target = rowStart + x * 3;\n\n        output[target] = this.pixelData[source + 1] ?? 0;\n        output[target + 1] = this.pixelData[source + 2] ?? 0;\n        output[target + 2] = this.pixelData[source + 3] ?? 0;\n      }\n    }\n  }\n\n  private encode32Bit(output: Uint8Array, pixelOffset: number, stride: number): void {\n    for (let fileRow = 0; fileRow < this.height; fileRow += 1) {\n      const srcY = this.sourceY(fileRow);\n      const rowStart = pixelOffset + fileRow * stride;\n\n      for (let x = 0; x < this.width; x += 1) {\n        const source = this.sourceOffset(x, srcY);\n        const target = rowStart + x * 4;\n\n        output[target] = this.pixelData[source + 1] ?? 0;\n        output[target + 1] = this.pixelData[source + 2] ?? 0;\n        output[target + 2] = this.pixelData[source + 3] ?? 0;\n        output[target + 3] = this.pixelData[source] ?? 0xff;\n      }\n    }\n  }\n\n  encode(): Uint8Array {\n    const stride = this.rowStride();\n    const imageSize = stride * this.height;\n    const paletteSize = this.palette.length * 4;\n    const offset = FILE_HEADER_SIZE + INFO_HEADER_SIZE + paletteSize;\n    const totalSize = offset + imageSize;\n    const output = new Uint8Array(totalSize);\n    const view = new DataView(output.buffer, output.byteOffset, output.byteLength);\n\n    // BITMAPFILEHEADER\n    output[0] = 0x42; // B\n    output[1] = 0x4d; // M\n    view.setUint32(2, totalSize, true);\n    view.setUint32(6, 0, true);\n    view.setUint32(10, offset, true);\n\n    // BITMAPINFOHEADER\n    view.setUint32(14, INFO_HEADER_SIZE, true);\n    view.setInt32(18, this.width, true);\n    const signedHeight = this.options.orientation === \"top-down\" ? -this.height : this.height;\n    view.setInt32(22, signedHeight, true);\n    view.setUint16(26, 1, true);\n    view.setUint16(28, this.options.bitPP, true);\n    view.setUint32(30, 0, true);\n    view.setUint32(34, imageSize, true);\n    view.setUint32(38, 0, true);\n    view.setUint32(42, 0, true);\n    view.setUint32(46, this.palette.length, true);\n    view.setUint32(50, 0, true);\n\n    if (this.palette.length > 0) {\n      this.writePalette(output, FILE_HEADER_SIZE + INFO_HEADER_SIZE);\n    }\n\n    switch (this.options.bitPP as EncodeBitDepth) {\n      case 1:\n        this.encode1Bit(output, offset, stride);\n        break;\n      case 4:\n        this.encode4Bit(output, offset, stride);\n        break;\n      case 8:\n        this.encode8Bit(output, offset, stride);\n        break;\n      case 16:\n        this.encode16Bit(output, view, offset, stride);\n        break;\n      case 24:\n        this.encode24Bit(output, offset, stride);\n        break;\n      case 32:\n        this.encode32Bit(output, offset, stride);\n        break;\n    }\n\n    return output;\n  }\n}\n\nexport function encode(\n  imgData: BmpImageData,\n  qualityOrOptions?: number | EncodeOptions,\n): EncodedBmp {\n  const options = normalizeEncodeOptions(qualityOrOptions);\n  const encoder = new BmpEncoder(imgData, options);\n  const data = encoder.encode();\n\n  return {\n    data,\n    width: imgData.width,\n    height: imgData.height,\n  };\n}\n\nexport { BmpEncoder };\n","import { decode } from \"./decoder\";\nimport type { BmpBinaryInput, DecodeColorOptions, DecodedBmp, DecodedRgb } from \"./types\";\n\nfunction rgbaToRgb(rgba: Uint8Array): Uint8Array {\n  if (rgba.length % 4 !== 0) {\n    throw new Error(\"RGBA input length must be a multiple of 4.\");\n  }\n\n  const rgb = new Uint8Array((rgba.length / 4) * 3);\n\n  for (let src = 0, dst = 0; src < rgba.length; src += 4, dst += 3) {\n    const red = rgba[src] ?? 0;\n    const green = rgba[src + 1] ?? 0;\n    const blue = rgba[src + 2] ?? 0;\n\n    rgb[dst] = red;\n    rgb[dst + 1] = green;\n    rgb[dst + 2] = blue;\n  }\n\n  return rgb;\n}\n\n/**\n * Decode BMP data directly to RGBA without changing the default `decode` behavior.\n */\nexport function decodeRgba(bmpData: BmpBinaryInput, options: DecodeColorOptions = {}): DecodedBmp {\n  return decode(bmpData, { ...options, toRGBA: true });\n}\n\n/**\n * Decode BMP data to packed RGB bytes (`width * height * 3`).\n */\nexport function decodeRgb(bmpData: BmpBinaryInput, options: DecodeColorOptions = {}): DecodedRgb {\n  const rgbaDecoded = decodeRgba(bmpData, options);\n\n  return {\n    data: rgbaToRgb(rgbaDecoded.data),\n    width: rgbaDecoded.width,\n    height: rgbaDecoded.height,\n    channels: 3,\n    format: \"rgb\",\n  };\n}\n"],"mappings":"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","names":["rgb","FILE_HEADER_SIZE"]}