{"version":3,"file":"jsfitsio.cjs","mappings":"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","sources":["webpack://jsfitsio/external node-commonjs \"http\"","webpack://jsfitsio/external node-commonjs \"https\"","webpack://jsfitsio/external node-commonjs \"node:fs/promises\"","webpack://jsfitsio/external node-commonjs \"punycode\"","webpack://jsfitsio/external node-commonjs \"stream\"","webpack://jsfitsio/external node-commonjs \"url\"","webpack://jsfitsio/external node-commonjs \"zlib\"","webpack://jsfitsio/webpack/bootstrap","webpack://jsfitsio/webpack/runtime/compat get default export","webpack://jsfitsio/webpack/runtime/define property getters","webpack://jsfitsio/webpack/runtime/ensure chunk","webpack://jsfitsio/webpack/runtime/get javascript chunk filename","webpack://jsfitsio/webpack/runtime/hasOwnProperty shorthand","webpack://jsfitsio/webpack/runtime/make namespace object","webpack://jsfitsio/webpack/runtime/require chunk loading","webpack://jsfitsio/./src/model/FITSHeaderItem.ts","webpack://jsfitsio/./src/model/FITSHeaderManager.ts","webpack://jsfitsio/external node-commonjs \"fs\"","webpack://jsfitsio/./src/FITSWriter.ts","webpack://jsfitsio/./src/ParseHeader.ts","webpack://jsfitsio/./src/ParseUtils.ts","webpack://jsfitsio/./src/ParsePayload.ts","webpack://jsfitsio/./src/FITSParser.ts","webpack://jsfitsio/./src/index.ts"],"sourcesContent":["module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"node:fs/promises\");","module.exports = require(\"punycode\");","module.exports = require(\"stream\");","module.exports = require(\"url\");","module.exports = require(\"zlib\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".jsfitsio.cjs\";\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"loaded\", otherwise not loaded yet\nvar installedChunks = {\n\t792: 1\n};\n\n// no on chunks loaded\n\nvar installChunk = (chunk) => {\n\tvar moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\tfor(var i = 0; i < chunkIds.length; i++)\n\t\tinstalledChunks[chunkIds[i]] = 1;\n\n};\n\n// require() chunk loading for javascript\n__webpack_require__.f.require = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\tinstallChunk(require(\"./\" + __webpack_require__.u(chunkId)));\n\t\t} else installedChunks[chunkId] = 1;\n\t}\n};\n\n// no external install chunk\n\n// no HMR\n\n// no HMR manifest","/**\n * Summary. (bla bla bla)\n *\n * Description. (bla bla bla)\n *\n * @link   github https://github.com/fab77/FITSParser\n * @author Fabrizio Giordano <fabriziogiordano77@gmail.com>\n */\n\nexport class FITSHeaderItem {\n  _key: string = \"\";\n  _value: string | number = \"\";\n  _comment: string = \"\";\n\n  constructor(key: string, value: string | number, comment: string) {\n    this._key = key\n    this._value = value\n    this._comment = comment\n  }\n\n  get key(): string {\n    return this._key;\n  }\n\n  get comment(): string {\n    return this._comment;\n  }\n\n  get value(): string | number {\n    return this._value;\n  }\n}\n","import { FITSHeaderItem } from \"./FITSHeaderItem.js\";\n\n\nexport class FITSHeaderManager {\n    \n    static SIMPLE = \"SIMPLE\"\n    static BITPIX = \"BITPIX\"\n    static BZERO = \"BZERO\"\n    static BSCALE = \"BSCALE\"\n    static BLANK = \"BLANK\"\n    static NAXIS = \"NAXIS\"\n    static NAXIS1 = \"NAXIS1\"\n    static NAXIS2 = \"NAXIS2\"\n    static DATAMIN = \"DATAMIN\"\n    static DATAMAX = \"DATAMAX\"\n    static CRVAL1 = \"CRVAL1\"\n    static CRVAL2 = \"CRVAL2\"\n    static CTYPE1 = \"CTYPE1\"\n    static CTYPE2 = \"CTYPE2\"\n    static CRPIX1 = \"CRPIX1\"\n    static CRPIX2 = \"CRPIX2\"\n    static ORIGIN = \"ORIGIN\"\n    static COMMENT = \"COMMENT\"\n\n    private items: FITSHeaderItem[] = []\n\n    constructor() {\n        this.items[0] = new FITSHeaderItem( FITSHeaderManager.SIMPLE, 'T', '');\n        this.items[1] =  new FITSHeaderItem( FITSHeaderManager.BITPIX, '', '');\n        this.items[2] = new FITSHeaderItem( FITSHeaderManager.NAXIS, 2, '');\n        this.items[3] = new FITSHeaderItem( FITSHeaderManager.NAXIS1, '', '');\n        this.items[4] = new FITSHeaderItem( FITSHeaderManager.NAXIS2, '', '');\n    }\n\n    // insert(item: FITSHeaderItem, position?: number): void {\n    insert(item: FITSHeaderItem): void {\n        if (item.key === FITSHeaderManager.SIMPLE) {\n            // this.items.splice(0, 0, item);\n            this.items[0] = item;\n        } else if (item.key === FITSHeaderManager.BITPIX) {\n            // this.items.splice(1, 0, item);\n            this.items[1] = item;\n        } else if (item.key === FITSHeaderManager.NAXIS) {\n            // this.items.splice(2, 0, item);\n            this.items[2] = item;\n        } else if (item.key === FITSHeaderManager.NAXIS1) {\n            // this.items.splice(3, 0, item);\n            this.items[3] = item;\n        } else if (item.key === FITSHeaderManager.NAXIS2) {\n            // this.items.splice(4, 0, item);\n            this.items[4] = item;\n        } else {\n            this.items.push(item);\n        }\n        // if (position !== undefined && position >= 0 && position <= this.items.length) {\n        //     this.items.splice(position, 0, item);\n        // } else {\n        //     this.items.push(item);\n        // }\n    }\n\n    getItems(): FITSHeaderItem[] {\n        return this.items;\n    }\n\n    remove(key: string): void {\n        this.items = this.items.filter(item => item.key !== key);\n    }\n\n    findById(key: string): FITSHeaderItem | null {\n        const item = this.items.find(item => item.key === key);\n        if (!item) {\n            return null\n        }\n        return item\n    }\n\n}","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fs\");","/**\n * Summary. (bla bla bla)\n *\n * Description. (bla bla bla)\n *\n * @link   github https://github.com/fab77/fitsontheweb\n * @author Fabrizio Giordano <fabriziogiordano77@gmail.com>\n * import GnomonicProjection from './GnomonicProjection';\n * BITPIX definition from https://archive.stsci.edu/fits/fits_standard/node39.html\n * and \"Definition of the Flexible Image Transport System (FITS)\" standard document\n * defined by FITS Working Group from the International Astronomical Union\n * http://fits.gsfc.nasa.gov/iaufwg/\n * 8\t8-bit Character or unsigned binary integer\n * 16\t16-bit twos-complement binary integer\n * 32\t32-bit twos-complement binary integer\n * -32\t32-bit IEEE single precision floating point\n * -64\t64-bit IEEE double precision floating point\n *\n */\nimport { FITSHeaderManager } from \"./model/FITSHeaderManager.js\";\nimport { FITSParsed } from \"./model/FITSParsed.js\"\n// import { FITSHeader } from \"./model/FITSHeader.js\"\nimport * as fs from 'fs';\n\n\nexport class FITSWriter {\n\n  static createFITS(fitsParsed: FITSParsed): Uint8Array {\n    const headerBytes = this.createHeader(fitsParsed.header);\n    const dataBytes = this.createData(fitsParsed.data, fitsParsed.header);\n    const fitsFile = new Uint8Array(headerBytes.length + dataBytes.length);\n    fitsFile.set(headerBytes, 0);\n    fitsFile.set(dataBytes, headerBytes.length);\n    return fitsFile;\n  }\n\n  private static createHeader(header: FITSHeaderManager): Uint8Array {\n    const BLOCK = 2880;\n    const CARD = 80;\n\n    const MUST_INT = new Set([\"BITPIX\", \"NAXIS\", \"PCOUNT\", \"GCOUNT\"]);\n    const IS_LOGICAL = new Set([\"SIMPLE\", \"EXTEND\"]);\n\n    const items = header.getItems();\n\n    function kw(s: string) {\n      return (s ?? \"\").toUpperCase().padEnd(8, \" \").slice(0, 8);\n    }\n\n    function card80(s: string): string {\n      return s.length >= CARD ? s.slice(0, CARD) : s.padEnd(CARD, \" \");\n    }\n\n    // Emit COMMENT/HISTORY as multiple 72-char lines\n    function makeCommentCards(kind: \"COMMENT\" | \"HISTORY\", text: string): string[] {\n      const prefix = kw(kind); // \"COMMENT \" or \"HISTORY \"\n      const width = CARD - prefix.length; // 72\n      const t = (text ?? \"\").toString();\n      if (!t.length) return [card80(prefix)]; // allow empty COMMENT/HISTORY line\n      const out: string[] = [];\n      for (let i = 0; i < t.length; i += width) {\n        out.push(card80(prefix + t.slice(i, i + width)));\n      }\n      return out;\n    }\n\n    function quoteFitsString(s: string): string {\n      const unquoted = s.replace(/^'+|'+$/g, \"\");\n      const escaped = unquoted.replace(/'/g, \"''\");\n      return `'${escaped}'`;\n    }\n\n    // \"= \" + 20-char value field (or proper string)\n    function valueField20(key: string, val: unknown): string {\n      let v = \"\";\n      const K = key.toUpperCase();\n\n      if (IS_LOGICAL.has(K)) {\n        const tf = (val === true || val === \"T\" || val === \"t\") ? \"T\" : \"F\";\n        return `= ${tf.padStart(20, \" \")}`;\n      }\n\n      if (MUST_INT.has(K) || /^NAXIS\\d+$/.test(K)) {\n        const n = Number(val);\n        if (!Number.isFinite(n) || !Number.isInteger(n)) {\n          throw new Error(`FITS header: ${K} must be an integer, got ${val}`);\n        }\n        return `= ${String(n).padStart(20, \" \")}`;\n      }\n\n      if (typeof val === \"number\") {\n        let s = Number.isInteger(val) ? String(val) : val.toExponential(10).replace(\"e\", \"E\");\n        if (s.length > 20) s = val.toExponential(8).replace(\"e\", \"E\");\n        return `= ${s.padStart(20, \" \")}`;\n      }\n\n      if (typeof val === \"string\") {\n        return `= ${quoteFitsString(val)}`; // strings can exceed 20-char field\n      }\n\n      return \"\";\n    }\n\n    // Build one keyword card, and (if needed) emit overflow as COMMENT cards\n    function makeKeywordWithComment(key: string, value: unknown, comment?: string): string[] {\n      const K = key.toUpperCase();\n\n      if (K === \"END\") return [card80(\"END\")];\n\n      if (K === \"COMMENT\" || K === \"HISTORY\") {\n        const text = (value ?? comment ?? \"\").toString();\n        return makeCommentCards(K as \"COMMENT\" | \"HISTORY\", text);\n      }\n\n      // Normal keyword\n      let base = kw(K) + valueField20(K, value);\n\n      // Attach trailing comment inside the same card if it fits\n      if (comment && comment.length > 0) {\n        const add = ` / ${comment}`;\n        const spaceLeft = CARD - base.length;\n        if (spaceLeft > 0) {\n          const inCard = add.slice(0, spaceLeft);\n          base = (base + inCard);\n          // spill any overflow into COMMENT cards (strip a leading \" / \" if it didn't fit)\n          const overflow = add.slice(spaceLeft).replace(/^\\s*\\/\\s*/, \"\");\n          if (overflow.length > 0) {\n            return [card80(base), ...makeCommentCards(\"COMMENT\", overflow)];\n          }\n        } else {\n          // no room at all; put the whole comment in COMMENT lines\n          return [card80(base), ...makeCommentCards(\"COMMENT\", comment)];\n        }\n      }\n\n      return [card80(base)];\n    }\n\n    // Build all cards with mandatory order first\n    const map = new Map(items.map(it => [it.key.toUpperCase(), it]));\n    const cards: string[] = [];\n\n    const simple = map.get(\"SIMPLE\");\n    if (!simple) throw new Error(\"Missing mandatory SIMPLE card\");\n    cards.push(...makeKeywordWithComment(\"SIMPLE\", simple.value, simple.comment));\n\n    const bitpix = map.get(\"BITPIX\");\n    if (!bitpix) throw new Error(\"Missing mandatory BITPIX card\");\n    cards.push(...makeKeywordWithComment(\"BITPIX\", bitpix.value, bitpix.comment));\n\n    const naxis = map.get(\"NAXIS\");\n    if (!naxis) throw new Error(\"Missing mandatory NAXIS card\");\n    const nAxes = Number(naxis.value) || 0;\n    cards.push(...makeKeywordWithComment(\"NAXIS\", nAxes, naxis.comment));\n\n    for (let i = 1; i <= nAxes; i++) {\n      const ki = `NAXIS${i}`;\n      const it = map.get(ki);\n      if (!it) throw new Error(`Missing mandatory ${ki} card`);\n      cards.push(...makeKeywordWithComment(ki, it.value, it.comment));\n    }\n\n    const extend = map.get(\"EXTEND\");\n    if (extend) cards.push(...makeKeywordWithComment(\"EXTEND\", extend.value, extend.comment));\n\n    for (const it of items) {\n      const K = it.key.toUpperCase();\n      if (K === \"SIMPLE\" || K === \"BITPIX\" || K === \"NAXIS\" || /^NAXIS\\d+$/.test(K) || K === \"EXTEND\" || K === \"END\")\n        continue;\n      cards.push(...makeKeywordWithComment(it.key, it.value, it.comment));\n    }\n\n    // END + pad to 2880\n    cards.push(card80(\"END\"));\n    let headerString = cards.join(\"\");\n    const pad = headerString.length % BLOCK ? BLOCK - (headerString.length % BLOCK) : 0;\n    if (pad) headerString += \" \".repeat(pad);\n\n    return new TextEncoder().encode(headerString);\n  }\n\n  private static createData(data: Array<Uint8Array>, header: FITSHeaderManager): Uint8Array {\n    // concat\n    const totalLength = data.reduce((s, c) => s + c.length, 0);\n\n    // OPTIONAL: verify size from BITPIX/NAXIS\n    const bitpix = Math.abs(Number(header.findById(\"BITPIX\")?.value ?? 0));\n    const naxis = Number(header.findById(\"NAXIS\")?.value ?? 0);\n    let elems = 1;\n    for (let k = 1; k <= naxis; k++) {\n      elems *= Number(header.findById(`NAXIS${k}`)?.value ?? 0);\n    }\n    const bytesPerElem = bitpix / 8;\n    const expectedUnpadded = naxis > 0 ? elems * bytesPerElem : 0;\n\n    if (expectedUnpadded && expectedUnpadded !== totalLength) {\n      throw new Error(\n        `Data length ${totalLength} does not match header expectation ${expectedUnpadded} (BITPIX=${bitpix}, NAXIS=${naxis})`\n      );\n    }\n\n    // build and pad\n    let dataBytes = new Uint8Array(totalLength);\n    let off = 0;\n    for (const chunk of data) { dataBytes.set(chunk, off); off += chunk.length; }\n\n    const BLOCK = 2880;\n    const remainder = dataBytes.length % BLOCK;\n    if (remainder) {\n      const pad = BLOCK - remainder;\n      const padded = new Uint8Array(dataBytes.length + pad);\n      padded.set(dataBytes);\n      dataBytes = padded; // zeros already in new space\n    }\n    return dataBytes;\n  }\n\n  // static typedArrayToURL(fitsParsed: FITSParsed): string {\n  //   const fitsFile = FITSWriter.createFITS(fitsParsed) as Uint8Array;\n  //   const blob = new Blob([fitsFile], { type: \"application/fits\" });\n  //   // console.log(`<html><body><img src='${URL.createObjectURL(b)}'</body></html>`);\n  //   const url = URL.createObjectURL(blob);\n  //   console.log(`Generated FITS file URL: ${url}`);\n  //   return url;\n  // }\n\n  static writeFITSFile(fitsParsed: FITSParsed, filePath: string): void {\n    const fitsFile = this.createFITS(fitsParsed);\n\n    try {\n      fs.writeFileSync(filePath, fitsFile);\n      console.log(`FITS file written successfully to: ${filePath}`);\n    } catch (error) {\n      console.error(`Error writing FITS file: ${error}`);\n    }\n  }\n\n}\n\n// const fitsParsed: FITSParsed = {\n//   header: new FITSHeader(),\n//   data: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])]\n// };\n\n// // Specify the file path\n// const filePath = \"/Users/fabriziogiordano/Desktop/PhD/code/new/FITSParser/output.fits\";\n\n// // Write the FITS file to the filesystem\n// FITSWriter.writeFITSFile(fitsParsed, filePath);","// import { FITSHeader } from \"./model/FITSHeader.js\";\nimport { FITSHeaderItem } from \"./model/FITSHeaderItem.js\";\nimport { FITSHeaderManager } from \"./model/FITSHeaderManager.js\";\n/**\n * Summary. (bla bla bla)\n *\n * Description. (bla bla bla)\n *\n * @link   github https://github.com/fab77/FITSParser\n * @author Fabrizio Giordano <fabriziogiordano77@gmail.com>\n */\n\nexport class ParseHeader {\n\n  static getFITSItemValue(header: FITSHeaderManager, key: string): number | null {\n    const item = header.findById(key)\n    let VALUE = null\n    if (item) {\n      VALUE = Number(item.value)\n    }\n    return VALUE\n  }\n  \n  static parse(rawdata: Uint8Array): FITSHeaderManager {\n    // only one header block (2880) allowed atm.\n    // TODO handle multiple header blocks\n    // let headerByteData = new Uint8Array(rawdata, 0, 2880);\n\n    const textDecoder = new TextDecoder('ascii');\n    const headerSize = 2880; // FITS headers are in 2880-byte blocks\n    const headerText = textDecoder.decode(rawdata.slice(0, headerSize));\n\n    const header: FITSHeaderManager = new FITSHeaderManager();\n    const lines = headerText.match(/.{1,80}/g) || [];\n    for (const line of lines) {\n\n      const key = line.slice(0, 8).trim();\n      let value: string | number\n      let comment = \"\"\n\n      if (key && key !== 'END') {\n        const rawValue = line.slice(10).trim().split('/')[0].trim();\n        if (isNaN(Number(rawValue))) {\n          value = rawValue;\n        } else {\n          value = Number(rawValue);\n        }\n        if (line.includes('/')) {\n          comment = line.slice(10).trim().split('/')[1].trim();\n        }\n\n        const item = new FITSHeaderItem(key, value, comment);\n        header.insert(item)\n      }\n    }\n    return header;\n  }\n\n}\n","/**\n * Summary. (bla bla bla)\n *\n * Description. (bla bla bla)\n *\n * @link   github https://github.com/fab77/FITSParser\n * @author Fabrizio Giordano <fabriziogiordano77@gmail.com>\n */\n\nexport class ParseUtils {\n  static getStringAt(data: string, offset: number, length: number) {\n    const chars: string[] = [];\n    for (let i = offset, j = 0; i < offset + length; i++, j++) {\n      chars[j] = String.fromCharCode(data.charCodeAt(i) & 0xff);\n    }\n    return chars.join(\"\");\n  }\n\n  static byteString(n: number): string {\n    if (n < 0 || n > 255 || n % 1 !== 0) {\n      throw new Error(n + \" does not fit in a byte\");\n    }\n    return (\"000000000\" + n.toString(2)).substr(-8);\n  }\n\n  static parse32bitSinglePrecisionFloatingPoint(\n    byte1: number,\n    byte2: number,\n    byte3: number,\n    byte4: number\n  ): number {\n    let long = (((((byte1 << 8) + byte2) << 8) + byte3) << 8) + byte4;\n    if (long < 0) long += 4294967296;\n    const float =\n      (1.0 + (long & 0x007fffff) / 0x0800000) *\n      Math.pow(2, ((long & 0x7f800000) >> 23) - 127);\n    return float;\n  }\n\n  static convertBlankToBytes(blank: number, nbytes: number): Uint8Array {\n    let str = Math.abs(blank).toString(2);\n    while (str.length / 8 < nbytes) {\n      str += \"0\";\n    }\n    const buffer = new ArrayBuffer(nbytes);\n    const uint8 = new Uint8Array(buffer);\n    for (let i = 0; i < nbytes; i++) {\n      uint8[i] = parseInt(str.substr(8 * i, 8 * (i + 1)), 2);\n    }\n    return uint8;\n  }\n  /** https://gist.github.com/Manouchehri/f4b41c8272db2d6423fa987e844dd9ac */\n  static parseFloatingPointFormat(\n    bytes: Uint8Array,\n    ebits: number,\n    fbits: number\n  ): number | null {\n    // Bytes to bits\n    const bits = [];\n    for (let i = bytes.length; i; i -= 1) {\n      let byte = bytes[i - 1];\n      for (let j = 8; j; j -= 1) {\n        bits.push(byte % 2 ? 1 : 0);\n        byte = byte >> 1;\n      }\n    }\n    bits.reverse();\n    const str = bits.join(\"\");\n    // Unpack sign, exponent, fraction\n    const bias = (1 << (ebits - 1)) - 1;\n    const s = parseInt(str.substring(0, 1), 2) ? -1 : 1;\n    const e = parseInt(str.substring(1, 1 + ebits), 2);\n    const f = parseInt(str.substring(1 + ebits), 2);\n\n    // Produce number\n    if (e === (1 << ebits) - 1) {\n      return f !== 0 ? null : s * Infinity;\n    } else if (e > 0) {\n      return s * Math.pow(2, e - bias) * (1 + f / Math.pow(2, fbits));\n    } else if (f !== 0) {\n      return s * Math.pow(2, -(bias - 1)) * (f / Math.pow(2, fbits));\n    } else {\n      return s * 0;\n    }\n  }\n\n  static generate16bit2sComplement(val: number): number {\n    throw new TypeError(\"not implemented yet\" + val);\n  }\n\n  static parse16bit2sComplement(byte1: number, byte2: number): number {\n    const unsigned = (byte1 << 8) | byte2;\n    if (unsigned & 0x8000) {\n      return unsigned | 0xffff0000;\n    } else {\n      return unsigned;\n    }\n  }\n\n  static parse32bit2sComplement(\n    byte1: number,\n    byte2: number,\n    byte3: number,\n    byte4: number\n  ): number {\n    const unsigned = (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4;\n    const s = (unsigned & 0x80000000) >> 31;\n    let res = unsigned & 0xffffffff;\n\n    if (s) {\n      res = (~unsigned & 0xffffffff) + 1;\n      return -1 * res;\n    }\n    return res;\n  }\n\n  /**\n   *\n   * @param {*} data string?\n   * @param {*} offset offset in the data\n   * @returns returns an integer between 0 and 65535 representing the UTF-16 code unit at the given index.\n   */\n  static getByteAt(data: string, offset: number): number {\n    const dataOffset = 0;\n    return data.charCodeAt(offset + dataOffset) & 0xff;\n  }\n\n  static extractPixelValue(\n    offset: number,\n    bytes: Uint8Array,\n    bitpix: number\n  ): number | null {\n    let px_val = null; // pixel value\n    // let px_val1, px_val2, px_val3, px_val4;\n\n    if (bitpix == 8){\n      px_val = bytes[0]\n    } else if (bitpix == 16) {\n      // 16-bit 2's complement binary integer\n      px_val = ParseUtils.parse16bit2sComplement(\n        bytes[offset],\n        bytes[offset + 1]\n      );\n    } else if (bitpix == 32) {\n      // IEEE 754 half precision (float16) ??\n      px_val = ParseUtils.parse32bit2sComplement(\n        bytes[offset],\n        bytes[offset + 1],\n        bytes[offset + 2],\n        bytes[offset + 3]\n      );\n    } else if (bitpix == -32) {\n      // 32-bit IEEE single-precision floating point\n      // px_val = ParseUtils.parse32bitSinglePrecisionFloatingPoint (this._u8data[offset], this._u8data[offset+1], this._u8data[offset+2], this._u8data[offset+3]);\n      px_val = ParseUtils.parseFloatingPointFormat(\n        bytes.slice(offset, offset + 8),\n        8,\n        23\n      );\n    } else if (bitpix == 64) {\n      // 64-bit 2's complement binary integer\n      throw new Error(\n        \"BITPIX=64 -> 64-bit 2's complement binary integer NOT supported yet.\"\n      );\n    } else if (bitpix == -64) {\n      // 64-bit IEEE double-precision floating point\n      //https://babbage.cs.qc.cuny.edu/ieee-754.old/Decimal.html\n      px_val = ParseUtils.parseFloatingPointFormat(\n        bytes.slice(offset, offset + 8),\n        11,\n        52\n      );\n    }\n\n    return px_val;\n  }\n\n}\n\n// export default ParseUtils;\n","// \"use strict\";\n\n/**\n * Summary. (bla bla bla)\n *\n * Description. (bla bla bla)\n *\n * @link   github https://github.com/fab77/FITSParser\n * @author Fabrizio Giordano <fabriziogiordano77@gmail.com>\n */\n// import { FITSHeader } from \"./model/FITSHeader.js\";\nimport { FITSHeaderItem } from \"./model/FITSHeaderItem.js\";\nimport { FITSHeaderManager } from \"./model/FITSHeaderManager.js\";\nimport { ParseHeader } from \"./ParseHeader.js\";\nimport { ParseUtils } from \"./ParseUtils.js\";\n\nexport class ParsePayload {\n\n  \n\n  static computePhysicalMinAndMax(header: FITSHeaderManager, rawData: Uint8Array) {\n\n    const BITPIX = ParseHeader.getFITSItemValue(header, FITSHeaderManager.BITPIX)\n    if (BITPIX === null) {\n      return null\n    }\n    const NAXIS1 = ParseHeader.getFITSItemValue(header, FITSHeaderManager.NAXIS1)\n    if (NAXIS1 === null) {\n      return null\n    }\n    const NAXIS2 = ParseHeader.getFITSItemValue(header, FITSHeaderManager.NAXIS2)\n    if (NAXIS2 === null) {\n      return null\n    }\n    \n    const DATAMIN = ParseHeader.getFITSItemValue(header, FITSHeaderManager.DATAMIN)\n    const DATAMAX = ParseHeader.getFITSItemValue(header, FITSHeaderManager.DATAMAX)\n    \n\n    if (!BITPIX || !NAXIS1 || !NAXIS2) {\n      return null; // return early if invalid data.\n    }\n    \n\n    if (!DATAMAX || !DATAMIN) {\n\n      const [min, max] = ParsePayload.computePhysicalValues(rawData, header);\n      if (min && max) {\n        const maxitem = new FITSHeaderItem(\n          \"DATAMAX\",\n          min,\n          \"computed by jsfitsio\"\n        );\n        const minitem = new FITSHeaderItem(\n          \"DATAMIN\",\n          max,\n          \"computed by jsfitsio\"\n        );\n        header.insert(maxitem);\n        header.insert(minitem);\n      }\n    }\n\n    const endItem = new FITSHeaderItem('END', \"\", \"\");\n    header.insert(endItem)\n    return header\n    // TODO: END tag shall be added here\n  }\n\n\n\n  static computePhysicalValues(rawData: Uint8Array, header: FITSHeaderManager): [number | null, number | null] {\n\n    const BITPIX = ParseHeader.getFITSItemValue(header, FITSHeaderManager.BITPIX)\n    if (BITPIX === null || isNaN(BITPIX)) {\n      return [null, null]\n    }\n    \n    const BLANK = ParseHeader.getFITSItemValue(header, FITSHeaderManager.BLANK)\n    if (BLANK === null || isNaN(BITPIX)) {\n      return [null, null]\n    }\n    \n    let BZERO = ParseHeader.getFITSItemValue(header, FITSHeaderManager.BZERO)\n    if (BZERO === null) {\n      BZERO = 0\n    }\n    \n    let BSCALE = ParseHeader.getFITSItemValue(header, FITSHeaderManager.BSCALE)\n    if (BSCALE === null) {\n      BSCALE = 1\n    }\n    \n    let i = 0;\n\n    const bytesXelem = Math.abs(BITPIX / 8);\n    const pxLength = rawData.byteLength / bytesXelem;\n\n    let min = null;\n    let max = null;\n    let physicalblank = null\n\n    if (BLANK) {\n      physicalblank = ParsePayload.pixel2physicalValue(BLANK, BSCALE, BZERO);\n    }\n\n    while (i < pxLength) {\n      let px_val = ParsePayload.extractPixelValue(rawData, bytesXelem * i, BITPIX);\n      if (px_val === null) {\n        i++;\n        continue;\n      }\n      let ph_val = ParsePayload.pixel2physicalValue(px_val, BSCALE, BZERO);\n      if (!min) {\n        min = ph_val;\n      }\n      if (!max) {\n        max = ph_val;\n      }\n\n      // check this block if it is still applicable\n      if (physicalblank === null || physicalblank !== ph_val) {\n        if (ph_val !== null && (ph_val < min || min === null)) {\n          min = ph_val;\n        }\n\n        if (ph_val !== null && (ph_val > max || max === null)) {\n          max = ph_val;\n        }\n      }\n      i++;\n    }\n    return [min, max];\n  }\n\n  static pixel2physicalValue(pxval: number, BSCALE: number, BZERO: number): number {\n    if (BZERO === null || BSCALE === null) {\n      throw new Error(\"Either BZERO or BSCALE is null\");\n    }\n    return BZERO + BSCALE * pxval;\n\n  }\n\n  static extractPixelValue(rawData: Uint8Array, offset: number, BITPIX: number): number | null {\n    let px_val = null; // pixel value\n    if (BITPIX == 16) {\n      // 16-bit 2's complement binary integer\n      px_val = ParseUtils.parse16bit2sComplement(\n        rawData[offset],\n        rawData[offset + 1]\n      );\n    } else if (BITPIX == 32) {\n      // IEEE 754 half precision (float16) ??\n      px_val = ParseUtils.parse32bit2sComplement(\n        rawData[offset],\n        rawData[offset + 1],\n        rawData[offset + 2],\n        rawData[offset + 3]\n      );\n    } else if (BITPIX == -32) {\n      // 32-bit IEEE single-precision floating point\n      // px_val = ParseUtils.parse32bitSinglePrecisionFloatingPoint (this._u8data[offset], this._u8data[offset+1], this._u8data[offset+2], this._u8data[offset+3]);\n      px_val = ParseUtils.parseFloatingPointFormat(\n        rawData.slice(offset, offset + 4),\n        8,\n        23\n      );\n    } else if (BITPIX == 64) {\n      // 64-bit 2's complement binary integer\n      throw new Error(\n        \"BITPIX=64 -> 64-bit 2's complement binary integer NOT supported yet.\"\n      );\n    } else if (BITPIX == -64) {\n      // 64-bit IEEE double-precision floating point\n      //https://babbage.cs.qc.cuny.edu/ieee-754.old/Decimal.html\n      px_val = ParseUtils.parseFloatingPointFormat(\n        rawData.slice(offset, offset + 8),\n        11,\n        52\n      );\n    }\n\n    return px_val;\n  }\n\n}\n","\nimport { FITSWriter } from \"./FITSWriter.js\";\nimport { ParsePayload } from \"./ParsePayload.js\";\nimport { ParseHeader } from \"./ParseHeader.js\";\n// import { FITSHeader } from \"./model/FITSHeader.js\";\nimport { FITSParsed } from \"./model/FITSParsed.js\";\nimport { FITSHeaderManager } from \"./model/FITSHeaderManager.js\";\n\nexport class FITSParser {\n\n  static async loadFITS(url: string): Promise<FITSParsed | null> {\n    try {\n      const uint8data = await FITSParser.getFile(url)\n      if (uint8data?.byteLength) {\n        const fits = FITSParser.processFits(uint8data);\n        return fits;\n      }\n    } catch (error) {\n      console.error(\"Error loading FITS file:\", error);\n    }\n\n    return null;\n  }\n\n  private static processFits(rawdata: Uint8Array): FITSParsed | null {\n\n    const header = ParseHeader.parse(rawdata);\n\n    const headerFinalised = ParsePayload.computePhysicalMinAndMax(header, rawdata);\n\n    if (headerFinalised == null) {\n      return null\n    }\n\n    // Assuming no additional header blocks\n    const dataOffset = 2880;\n    const payloadBuffer = new Uint8Array(rawdata.slice(dataOffset));\n\n    // --- pad payload to multiple of 2880 ---\n    const paddedPayload = padTo2880(payloadBuffer);\n\n    const payloadMatrix = FITSParser.createMatrix(paddedPayload, header)\n\n    return {\n      header: headerFinalised,\n      data: payloadMatrix\n    };\n\n    // helper\n    function padTo2880(buf: Uint8Array): Uint8Array {\n      const remainder = buf.length % 2880;\n      if (remainder === 0) return buf;\n      const padded = new Uint8Array(buf.length + (2880 - remainder));\n      padded.set(buf);\n      // the extra bytes are left as 0 (valid FITS padding)\n      return padded;\n    }\n  }\n\n\n\n  private static createMatrix(payload: Uint8Array, header: FITSHeaderManager): Array<Uint8Array> {\n\n    const NAXIS1 = ParseHeader.getFITSItemValue(header, FITSHeaderManager.NAXIS1)\n    if (NAXIS1 === null) {\n      throw new Error(\"NAXIS1 not defined.\");\n    }\n    const NAXIS2 = ParseHeader.getFITSItemValue(header, FITSHeaderManager.NAXIS2)\n    if (NAXIS2 === null) {\n      throw new Error(\"NAXIS2 not defined.\");\n    }\n    const BITPIX = ParseHeader.getFITSItemValue(header, FITSHeaderManager.BITPIX)\n    if (BITPIX === null) {\n      throw new Error(\"BITPIX not defined.\");\n    }\n\n    const bytesXelem = Math.abs(BITPIX / 8);\n\n    // if (payload.length !== NAXIS1 * NAXIS2 * bytesXelem) {\n    //   throw new Error(\"Payload size does not match the expected matrix dimensions.\");\n    // }\n\n    // const matrix: Array<Uint8Array> = [];\n    const matrix = [];\n    for (let i = 0; i < NAXIS2; i++) {\n      matrix.push(payload.slice(i * NAXIS1 * bytesXelem, (i + 1) * NAXIS1 * bytesXelem));\n    }\n\n    return matrix;\n  }\n\n\n\n  // static generateFITSForWeb(fitsParsed: FITSParsed) {\n  //   return FITSWriter.typedArrayToURL(fitsParsed)\n  // }\n\n  static saveFITSLocally(fitsParsed: FITSParsed, path: string) {\n    return FITSWriter.writeFITSFile(fitsParsed, path)\n  }\n\n  private static async getFile(uri: string): Promise<Uint8Array> {\n\n    if (!uri.substring(0, 5).toLowerCase().includes(\"http\")) {\n\n      const p = await import('./getLocalFile.js')\n      const rawData = await p.getLocalFile(uri);\n      if (rawData?.length) {\n        const uint8 = new Uint8Array(rawData);\n        return uint8\n      }\n      return new Uint8Array(0)\n\n    } else {\n      const p = await import('./getFile.js')\n      const rawData = await p.getFile(uri)\n      if (rawData?.byteLength) {\n        const uint8 = new Uint8Array(rawData);\n        return uint8\n      }\n      return new Uint8Array(0)\n\n    }\n\n  }\n\n\n}\n\n// const url = \"http://skies.esac.esa.int/Herschel/normalized/PACS_hips160//Norder8/Dir40000/Npix47180.fits\"\n// FITSParser.loadFITS(url).then((fits) => {\n//   if (fits == null) {\n//     return null\n//   }\n//   const path = \"./fitsTest1.fits\"\n//   console.log(fits.header)\n//   FITSParser.saveFITSLocally(fits, path)\n//   console.log(\"finished\")\n// })\n\n// // const file = \"/Users/fabriziogiordano/Desktop/PhD/code/new/FITSParser/tests/inputs/empty.fits\"\n// const file = \"/Users/fabriziogiordano/Desktop/PhD/code/new/FITSParser/tests/inputs/Npix43348.fits\"\n// FITSParser.loadFITS(file).then((fits) => {\n//   if (fits == null) {\n//     return null\n//   }\n//   const path = \"./fitsTest2.fits\"\n//   console.log(fits.header)\n//   FITSParser.saveFITSLocally(fits, path)\n//   console.log(\"finished\")\n// })\n\n","export { FITSHeaderItem } from \"./model/FITSHeaderItem.js\";\nexport { FITSHeaderManager } from \"./model/FITSHeaderManager.js\";\nimport type { FITSParsed } from \"./model/FITSParsed.js\";\nexport type { FITSParsed };\nexport { FITSParser } from \"./FITSParser.js\";\nexport { FITSWriter } from \"./FITSWriter.js\";\nexport { ParseHeader } from \"./ParseHeader.js\";\nexport { ParsePayload } from \"./ParsePayload.js\";\nexport { ParseUtils } from \"./ParseUtils.js\";\n"],"names":[],"sourceRoot":""}