{"version":3,"file":"spc-parser.esm.js","sources":["../lib/types.js","../lib/utility/headerUtils.js","../lib/fileHeader.js","../lib/utility/getDataShape.js","../lib/utility/guessSpectraType.js","../node_modules/iobuffer/lib/text.js","../node_modules/iobuffer/lib/iobuffer.js","../node_modules/ml-spectra-processing/lib/utils/createFromToArray.js","../lib/dataBlock/utility/ensureIncreasingXValues.js","../lib/dataBlock/shared.js","../lib/dataBlock/newDataBlock.js","../lib/dataBlock/oldDataBlock.js","../lib/logBlock.js","../lib/parse.js"],"sourcesContent":["/**\n * Gives meaning to type codes.\n * @param  xzwType - x, z or w type code.\n * @returns  String corresponding to the code.\n */\nexport function xzwTypes(xzwType) {\n    switch (xzwType) {\n        case 1:\n            return 'Wavenumber (cm-1)';\n        case 2:\n            return 'Micrometers (um)';\n        case 3:\n            return 'Nanometers (nm)';\n        case 4:\n            return 'Seconds';\n        case 5:\n            return 'Minutes';\n        case 6:\n            return 'Hertz (Hz)';\n        case 7:\n            return 'Kilohertz (KHz)';\n        case 8:\n            return 'Megahertz (MHz)';\n        case 9:\n            return 'Mass (M/z)';\n        case 10:\n            return 'Parts per million (PPM)';\n        case 11:\n            return 'Days';\n        case 12:\n            return 'Years';\n        case 13:\n            return 'Raman Shift (cm-1)';\n        case 14:\n            return 'eV';\n        case 15:\n            return 0;\n        case 16:\n            return 'Diode Number';\n        case 17:\n            return 'Channel ';\n        case 18:\n            return 'Degrees';\n        case 19:\n            return 'Temperature (F)';\n        case 20:\n            return 'Temperature (C)';\n        case 21:\n            return 'Temperature (K)';\n        case 22:\n            return 'Data Points';\n        case 23:\n            return 'Milliseconds (mSec)';\n        case 24:\n            return 'Microseconds (uSec)';\n        case 25:\n            return 'Nanoseconds (nSec)';\n        case 26:\n            return 'Gigahertz (GHz)';\n        case 27:\n            return 'Centimeters (cm)';\n        case 28:\n            return 'Meters (m)';\n        case 29:\n            return 'Millimeters (mm)';\n        case 30:\n            return 'Hours';\n        case 255:\n            return 'Double interferogram';\n        default:\n            return 'Arbitrary';\n    }\n}\n/**\n * Gives meaning to y type codes\n * @param  yType - y type code\n * @returns  String corresponding to the code\n */\nexport function yTypes(yType) {\n    switch (yType) {\n        case 0:\n            return 'Arbitrary Intensity';\n        case 1:\n            return 'Interferogram';\n        case 2:\n            return 'Absorbance';\n        case 3:\n            return 'Kubelka-Monk';\n        case 4:\n            return 'Counts';\n        case 5:\n            return 'Volts';\n        case 6:\n            return 'Degrees';\n        case 7:\n            return 'Milliamps';\n        case 8:\n            return 'Millimeters';\n        case 9:\n            return 'Millivolts';\n        case 10:\n            return 'Log(1/R)';\n        case 11:\n            return 'Percent';\n        case 12:\n            return 'Intensity';\n        case 13:\n            return 'Relative Intensity';\n        case 14:\n            return 'Energy';\n        case 16:\n            return 'Decibel';\n        case 19:\n            return 'Temperature (F)';\n        case 20:\n            return 'Temperature (C)';\n        case 21:\n            return 'Temperature (K)';\n        case 22:\n            return 'Index of Refraction [N]';\n        case 23:\n            return 'Extinction Coeff. [K]';\n        case 24:\n            return 'Real';\n        case 25:\n            return 'Imaginary';\n        case 26:\n            return 'Complex';\n        case 128:\n            return 'Transmission';\n        case 129:\n            return 'Reflectance';\n        case 130:\n            return 'Arbitrary or Single Beam with Valley Peaks';\n        case 131:\n            return 'Emission';\n        default:\n            return 'Reference Arbitrary Energy';\n    }\n}\n/**\n * Convert code to experiment type\n * @param code - experiment type code.\n * @returns type of experiment carried out.\n */\nexport function experimentSettings(code) {\n    switch (code) {\n        case 1:\n            return 'Gas Chromatogram';\n        case 2:\n            return 'General Chromatogram (same as SPCGEN with TCGRAM)';\n        case 3:\n            return 'HPLC Chromatogram';\n        case 4:\n            return 'FT-IR, FT-NIR, FT-Raman Spectrum or Igram (Can also be used for scanning IR.)';\n        case 5:\n            return 'NIR Spectrum (Usually multi-spectral data sets for calibration.)';\n        case 7:\n            return 'UV-VIS Spectrum (Can be used for single scanning UV-VIS-NIR.)';\n        case 8:\n            return 'X-ray Diffraction Spectrum';\n        case 9:\n            return 'Mass Spectrum  (Can be single, GC-MS, Continuum, Centroid or TOF.)';\n        case 10:\n            return 'NMR Spectrum or FID';\n        case 11:\n            return 'Raman Spectrum (Usually Diode Array, CCD, etc. use SPCFTIR for FT-Raman.)';\n        case 12:\n            return 'Fluorescence Spectrum';\n        case 13:\n            return 'Atomic Spectrum';\n        case 14:\n            return 'Chromatography Diode Array Spectra';\n        default:\n            return 'General SPC (could be anything)';\n    }\n}\n//# sourceMappingURL=types.js.map","/**\n * Gets the parameter in each bit of the flag\n * @param  flag - First byte of the main header.\n * @returns  The parameters.\n */\nexport class FlagParameters {\n    y16BitPrecision;\n    useExperimentExtension;\n    multiFile;\n    zValuesRandom;\n    zValuesUneven;\n    customAxisLabels;\n    xyxy;\n    xy;\n    constructor(flag) {\n        this.y16BitPrecision = (flag & 1) !== 0; //Y values are 16 bits instead of 32\n        this.useExperimentExtension = (flag & 2) !== 0; //Enable experiment mode\n        this.multiFile = (flag & 4) !== 0; //Multiple spectra (multifile)\n        this.zValuesRandom = (flag & 8) !== 0; //Z values in random order if multiFile\n        this.zValuesUneven = (flag & 16) !== 0; //Z values ordered but unevenly spaced if multi\n        this.customAxisLabels = (flag & 32) !== 0; //Custom labels\n        this.xyxy = (flag & 64) !== 0; //One X array per subfile, for discontinuous curves\n        this.xy = (flag & 128) !== 0; // Non-evenly spaced X, X before Y\n    }\n}\n/**\n * Gets the date encoded in binary in a long number.\n * @param  long - Binary date.\n * @returns  Date formatted to ISO 8601:2019 convention.\n */\nexport function longToDate(long) {\n    if (long === 0) {\n        return '0000-00-00T00:00:00.00Z';\n    }\n    const date = new Date();\n    date.setUTCFullYear(long >> 20);\n    date.setUTCMonth(((long >> 16) & 0x0f) - 1);\n    date.setUTCDate((long >> 11) & 0x1f);\n    date.setUTCHours((long >> 6) & 0x1f);\n    date.setUTCMinutes(long & 0x3f);\n    date.setUTCSeconds(0);\n    date.setUTCMilliseconds(0);\n    return date.toISOString();\n}\n//# sourceMappingURL=headerUtils.js.map","import { experimentSettings, xzwTypes, yTypes } from \"./types.js\";\nimport { FlagParameters, longToDate } from \"./utility/headerUtils.js\";\n/**\n * Old-format File-header parsing.\n * @param buffer - spc buffer.\n * @param  prev - `{parameters,fileversion}`\n * @returns  file metadata\n */\nexport class TheOldHeader {\n    fileVersion;\n    parameters;\n    exponentY;\n    numberPoints;\n    startingX;\n    endingX;\n    xUnitsType;\n    yUnitsType;\n    date;\n    resolutionDescription;\n    peakPointNumber;\n    scans;\n    spare;\n    memo;\n    xyzLabels;\n    constructor(buffer, prev) {\n        this.fileVersion = prev.fileVersion; //Each bit contains a parameter\n        this.parameters = prev.parameters; //4B => New format; 4D => LabCalc format\n        this.exponentY = buffer.readInt16(); //Word (16 bits) instead of byte\n        this.numberPoints = buffer.readFloat32();\n        this.startingX = buffer.readFloat32();\n        this.endingX = buffer.readFloat32();\n        this.xUnitsType = xzwTypes(buffer.readUint8());\n        this.yUnitsType = yTypes(buffer.readUint8());\n        const date = new Date();\n        const zTypeYear = buffer.readUint16(); //Unrelated to Z axis\n        date.setUTCFullYear(zTypeYear % 4096); // TODO: might be wrong\n        date.setUTCMonth(Math.max(buffer.readUint8() - 1, 0));\n        date.setUTCDate(buffer.readUint8());\n        date.setUTCHours(buffer.readUint8());\n        date.setUTCMinutes(buffer.readUint8());\n        this.date = date.toISOString();\n        this.resolutionDescription = buffer\n            .readChars(8)\n            .replaceAll('\\u0000', '')\n            .trim();\n        this.peakPointNumber = buffer.readUint16();\n        this.scans = buffer.readUint16();\n        this.spare = [];\n        for (let i = 0; i < 7; i++) {\n            this.spare.push(buffer.readFloat32());\n        }\n        this.memo = buffer.readChars(130).replaceAll('\\u0000', '').trim();\n        this.xyzLabels = buffer.readChars(30).replaceAll('\\u0000', '').trim();\n    }\n}\n/**\n * New format file-header parsing.\n * @param buffer - spc buffer.\n * @param  prev - `{parameters,fileversion}`\n * @returns  file metadata\n */\nexport class TheNewHeader {\n    fileVersion;\n    parameters;\n    experimentType;\n    exponentY;\n    numberPoints;\n    startingX;\n    endingX;\n    spectra;\n    xUnitsType;\n    yUnitsType;\n    zUnitsType;\n    postingDisposition;\n    date;\n    resolutionDescription;\n    sourceInstrumentDescription;\n    peakPointNumber;\n    spare;\n    memo;\n    xyzLabels;\n    logOffset;\n    modifiedFlag;\n    processingCode;\n    calibrationLevel;\n    subMethodSampleInjectionNumber;\n    concentrationFactor;\n    methodFile;\n    zSubIncrement;\n    wPlanes;\n    wPlaneIncrement;\n    wAxisUnits;\n    reserved;\n    constructor(buffer, prev) {\n        this.fileVersion = prev.fileVersion; //Each bit contains a parameter\n        this.parameters = prev.parameters; //4B => New format; 4D => LabCalc format\n        this.experimentType = experimentSettings(buffer.readUint8()); //Experiment type code (See SPC.h)\n        this.exponentY = buffer.readInt8(); //Exponent for Y values (80h = floating point): FloatY = (2^Exp)*IntY/(2^32) 32-bit; FloatY = (2^Exp)*IntY/(2^16) 32-bit\n        this.numberPoints = buffer.readUint32(); //Number of points (if not XYXY)\n        this.startingX = buffer.readFloat64(); //First X coordinate\n        this.endingX = buffer.readFloat64(); //Last X coordinate\n        this.spectra = buffer.readUint32(); //Number of spectrums\n        this.xUnitsType = xzwTypes(buffer.readUint8()); //X Units type code (See types.js)\n        this.yUnitsType = yTypes(buffer.readUint8()); //Y \"\"\n        this.zUnitsType = xzwTypes(buffer.readUint8()); //Z \"\"\n        this.postingDisposition = buffer.readUint8(); //Posting disposition (See GRAMSDDE.H)\n        this.date = longToDate(buffer.readUint32()); //Date: minutes = first 6 bits, hours = 5 next bits, days = 5 next, months = 4 next, years = 12 last\n        this.resolutionDescription = buffer\n            .readChars(9)\n            .replaceAll('\\u0000', '')\n            .trim(); //Resolution description text\n        this.sourceInstrumentDescription = buffer\n            .readChars(9)\n            .replaceAll('\\u0000', '')\n            .trim(); // Source Instrument description text\n        this.peakPointNumber = buffer.readUint16(); //Peak point number for interferograms\n        this.spare = [];\n        for (let i = 0; i < 8; i++) {\n            this.spare.push(buffer.readFloat32());\n        }\n        if (this.fileVersion === 0x4c) {\n            //Untested case because no test files\n            this.spare = this.spare.toReversed();\n        }\n        this.memo = buffer.readChars(130).replaceAll('\\u0000', '').trim();\n        this.xyzLabels = buffer.readChars(30).replaceAll('\\u0000', '').trim();\n        this.logOffset = buffer.readUint32(); //Byte offset to Log Block\n        this.modifiedFlag = buffer.readUint32(); //File modification flag (See values in SPC.H)\n        this.processingCode = buffer.readUint8(); //Processing code (See GRAMSDDE.H)\n        this.calibrationLevel = buffer.readUint8(); //Calibration level + 1\n        this.subMethodSampleInjectionNumber = buffer.readUint16(); //Sub-method sample injection number\n        this.concentrationFactor = buffer.readFloat32(); //Floating data multiplier concentration factor\n        this.methodFile = buffer.readChars(48).replaceAll('\\u0000', '').trim(); //Method file\n        this.zSubIncrement = buffer.readFloat32(); //Z subfile increment for even Z Multifiles\n        this.wPlanes = buffer.readUint32();\n        this.wPlaneIncrement = buffer.readFloat32();\n        this.wAxisUnits = xzwTypes(buffer.readUint8()); //W axis units code\n        this.reserved = buffer.readChars(187).replaceAll('\\u0000', '').trim(); //Reserved space (Must be zero)\n        if (this.xUnitsType === 0) {\n            this.xUnitsType = this.xyzLabels.slice(0, 10);\n        }\n        if (this.zUnitsType === 0) {\n            this.zUnitsType = this.xyzLabels.slice(20, 30);\n        }\n    }\n}\n/**\n * File-header parsing - First 512/256 bytes (new/old format).\n * @param buffer - SPC buffer.\n * @returns File-header object\n */\nexport function fileHeader(buffer) {\n    const parameters = new FlagParameters(buffer.readUint8()); //Each bit contains a parameter\n    const fileVersion = buffer.readUint8(); //4B => New format; 4D => LabCalc format\n    const headerOpts = { parameters, fileVersion };\n    switch (fileVersion) {\n        case 0x4b: // new format\n            break;\n        case 0x4c:\n            buffer.setBigEndian();\n            break;\n        case 0x4d: {\n            // old LabCalc format\n            return new TheOldHeader(buffer, headerOpts);\n        }\n        default:\n            throw new Error('Unrecognized file format: byte 01 must be either 4B, 4C or 4D');\n    }\n    return new TheNewHeader(buffer, headerOpts);\n}\n//# sourceMappingURL=fileHeader.js.map","/**\n * Get how the data was stored.\n * @param flagParameters - flag parameters from the file header.\n * @param flagParameters.multiFile - whether there are multiple spectra (subfiles) or not.\n * @param flagParameters.xy - uneven x values.\n * @param flagParameters.xyxy - multifile with separate x axis.\n * @returns the shape of the data as a string.\n */\nexport function getDataShape({ multiFile, xy, xyxy, }) {\n    /* single file */\n    if (!multiFile) {\n        // Y or XY,\n        return !xy ? 'Y' : xyxy ? 'exception' : 'XY';\n    }\n    /* then multifile */\n    if (!xy) {\n        /* even X - equidistant */\n        return 'YY';\n    }\n    else {\n        // uneven x\n        return !xyxy ? 'XYY' : 'XYXY';\n    }\n}\n//# sourceMappingURL=getDataShape.js.map","import { TheNewHeader } from \"../fileHeader.js\";\nimport { getDataShape } from \"./getDataShape.js\";\n/**\n * Inspects properties and tries to classify the spectra for the most common spectra types.\n * @param meta - the parsed file header.\n * @returns string describing the type of spectra or \"General\" if unsure.\n */\nexport function guessSpectraType(meta) {\n    //function tested with the `fileHeader.test.ts`\n    // for the new file header they define a \"experiment type\"\n    if (meta instanceof TheNewHeader && // \"General SPC\" does not give any information\n        !meta.experimentType.startsWith('General SPC')) {\n        const id = meta.experimentType.split(' ')[0];\n        switch (id //find all possible ids in `types.ts` file\n        ) {\n            case 'FT-IR,':\n                return 'ir';\n            case 'NIR':\n                return 'ir';\n            case 'UV-VIS':\n                return 'uv';\n            case 'Mass':\n                return 'mass';\n            case 'Raman':\n                return 'raman';\n            default:\n                return 'other';\n        }\n    }\n    // for old header or General SPC\n    switch (meta.xUnitsType) {\n        case 'Mass (M/z)':\n            return 'mass';\n        case 'Raman Shift (cm-1)':\n            return 'raman';\n        case 'Micrometers (um)':\n            return uvOrIR(meta, 'micrometer');\n        case 'Wavenumber (cm-1)': {\n            return uvOrIR(meta, 'wavenumber');\n        }\n        case 'Nanometers (nm)':\n            if ([/*'Kubelka-Monk'*/ 'Absorbance', 'Log(1/R)', 'Transmission'].includes(meta.yUnitsType)) {\n                return uvOrIR(meta, 'nanometer');\n            }\n            return 'other';\n        default:\n            return 'other';\n    }\n}\n/**\n * Further classify an X axis that is using \"wavenumber\" as uv or ir.\n * @param meta - the parsed file header.\n * @param xUnit - the unit of the X axis.\n * @returns the region classification.\n */\nexport function uvOrIR(meta, xUnit) {\n    //tested in \"parse\" because of the input\n    const dataShape = getDataShape(meta.parameters);\n    //xyxy and exception won't normally get here anyways (raman or ms normally.)\n    const analyze = ['Y', 'YY', 'XY', 'XYY'].includes(dataShape);\n    if (analyze) {\n        let sX = meta.startingX;\n        let eX = meta.endingX;\n        if (xUnit !== 'nanometer') {\n            sX = unitToNano(sX, xUnit);\n            eX = unitToNano(eX, xUnit);\n        }\n        const lowerBound = Math.min(sX, eX);\n        return getRegion(lowerBound);\n    }\n    return 'other';\n}\n/**\n * Determines the spectral region from a wavelength boundary.\n * @param lb - lower boundary in nanometers.\n * @returns type of spectra.\n */\nexport function getRegion(lb) {\n    return lb < 150 ? 'other' : lb < 700 ? 'uv' : 'ir';\n}\n/**\n * Converts micrometers or wavenumber units to nanometers\n * This allows a unique way to determine the spectra region (using nanometers).\n * @param x - value\n * @param from - input unit to convert\n * @returns equivalent in nanometers\n */\nexport function unitToNano(x, from) {\n    return from === 'micrometer' ? x * 1000 : (1 / x) * 10 ** 7;\n}\n//# sourceMappingURL=guessSpectraType.js.map","/**\n * Decode bytes to text\n * @param bytes - Bytes to decode\n * @param encoding - Text encoding\n * @returns The decoded text\n */\nexport function decode(bytes, encoding = 'utf8') {\n    const decoder = new TextDecoder(encoding);\n    return decoder.decode(bytes);\n}\nconst encoder = new TextEncoder();\n/**\n * Encode text to utf8\n * @param str - Text to encode\n * @returns The encoded bytes\n */\nexport function encode(str) {\n    return encoder.encode(str);\n}\n//# sourceMappingURL=text.js.map","import { decode, encode } from \"./text.js\";\nconst defaultByteLength = 1024 * 8;\nconst hostBigEndian = (() => {\n    const array = new Uint8Array(4);\n    const view = new Uint32Array(array.buffer);\n    return !((view[0] = 1) & array[0]);\n})();\nconst typedArrays = {\n    int8: globalThis.Int8Array,\n    uint8: globalThis.Uint8Array,\n    int16: globalThis.Int16Array,\n    uint16: globalThis.Uint16Array,\n    int32: globalThis.Int32Array,\n    uint32: globalThis.Uint32Array,\n    uint64: globalThis.BigUint64Array,\n    int64: globalThis.BigInt64Array,\n    float32: globalThis.Float32Array,\n    float64: globalThis.Float64Array,\n};\nexport class IOBuffer {\n    /**\n     * Reference to the internal ArrayBuffer object.\n     */\n    buffer;\n    /**\n     * Byte length of the internal ArrayBuffer.\n     */\n    byteLength;\n    /**\n     * Byte offset of the internal ArrayBuffer.\n     */\n    byteOffset;\n    /**\n     * Byte length of the internal ArrayBuffer.\n     */\n    length;\n    /**\n     * The current offset of the buffer's pointer.\n     */\n    offset;\n    lastWrittenByte;\n    littleEndian;\n    _data;\n    _mark;\n    _marks;\n    /**\n     * Create a new IOBuffer.\n     * @param data - The data to construct the IOBuffer with.\n     * If data is a number, it will be the new buffer's length<br>\n     * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\n     * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n     * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n     * @param options - An object for the options.\n     * @returns A new IOBuffer instance.\n     */\n    constructor(data = defaultByteLength, options = {}) {\n        let dataIsGiven = false;\n        if (typeof data === 'number') {\n            data = new ArrayBuffer(data);\n        }\n        else {\n            dataIsGiven = true;\n            this.lastWrittenByte = data.byteLength;\n        }\n        const offset = options.offset ? options.offset >>> 0 : 0;\n        const byteLength = data.byteLength - offset;\n        let dvOffset = offset;\n        if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n            if (data.byteLength !== data.buffer.byteLength) {\n                dvOffset = data.byteOffset + offset;\n            }\n            data = data.buffer;\n        }\n        if (dataIsGiven) {\n            this.lastWrittenByte = byteLength;\n        }\n        else {\n            this.lastWrittenByte = 0;\n        }\n        this.buffer = data;\n        this.length = byteLength;\n        this.byteLength = byteLength;\n        this.byteOffset = dvOffset;\n        this.offset = 0;\n        this.littleEndian = true;\n        this._data = new DataView(this.buffer, dvOffset, byteLength);\n        this._mark = 0;\n        this._marks = [];\n    }\n    /**\n     * Checks if the memory allocated to the buffer is sufficient to store more\n     * bytes after the offset.\n     * @param byteLength - The needed memory in bytes.\n     * @returns `true` if there is sufficient space and `false` otherwise.\n     */\n    available(byteLength = 1) {\n        return this.offset + byteLength <= this.length;\n    }\n    /**\n     * Check if little-endian mode is used for reading and writing multi-byte\n     * values.\n     * @returns `true` if little-endian mode is used, `false` otherwise.\n     */\n    isLittleEndian() {\n        return this.littleEndian;\n    }\n    /**\n     * Set little-endian mode for reading and writing multi-byte values.\n     * @returns This.\n     */\n    setLittleEndian() {\n        this.littleEndian = true;\n        return this;\n    }\n    /**\n     * Check if big-endian mode is used for reading and writing multi-byte values.\n     * @returns `true` if big-endian mode is used, `false` otherwise.\n     */\n    isBigEndian() {\n        return !this.littleEndian;\n    }\n    /**\n     * Switches to big-endian mode for reading and writing multi-byte values.\n     * @returns This.\n     */\n    setBigEndian() {\n        this.littleEndian = false;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes forward.\n     * @param n - Number of bytes to skip.\n     * @returns This.\n     */\n    skip(n = 1) {\n        this.offset += n;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes backward.\n     * @param n - Number of bytes to move back.\n     * @returns This.\n     */\n    back(n = 1) {\n        this.offset -= n;\n        return this;\n    }\n    /**\n     * Move the pointer to the given offset.\n     * @param offset - The offset to move to.\n     * @returns This.\n     */\n    seek(offset) {\n        this.offset = offset;\n        return this;\n    }\n    /**\n     * Store the current pointer offset.\n     * @see {@link IOBuffer#reset}\n     * @returns This.\n     */\n    mark() {\n        this._mark = this.offset;\n        return this;\n    }\n    /**\n     * Move the pointer back to the last pointer offset set by mark.\n     * @see {@link IOBuffer#mark}\n     * @returns This.\n     */\n    reset() {\n        this.offset = this._mark;\n        return this;\n    }\n    /**\n     * Push the current pointer offset to the mark stack.\n     * @see {@link IOBuffer#popMark}\n     * @returns This.\n     */\n    pushMark() {\n        this._marks.push(this.offset);\n        return this;\n    }\n    /**\n     * Pop the last pointer offset from the mark stack, and set the current\n     * pointer offset to the popped value.\n     * @see {@link IOBuffer#pushMark}\n     * @returns This.\n     */\n    popMark() {\n        const offset = this._marks.pop();\n        if (offset === undefined) {\n            throw new Error('Mark stack empty');\n        }\n        this.seek(offset);\n        return this;\n    }\n    /**\n     * Move the pointer offset back to 0.\n     * @returns This.\n     */\n    rewind() {\n        this.offset = 0;\n        return this;\n    }\n    /**\n     * Make sure the buffer has sufficient memory to write a given byteLength at\n     * the current pointer offset.\n     * If the buffer's memory is insufficient, this method will create a new\n     * buffer (a copy) with a length that is twice (byteLength + current offset).\n     * @param byteLength - The needed memory in bytes.\n     * @returns This.\n     */\n    ensureAvailable(byteLength = 1) {\n        if (!this.available(byteLength)) {\n            const lengthNeeded = this.offset + byteLength;\n            const newLength = lengthNeeded * 2;\n            const newArray = new Uint8Array(newLength);\n            newArray.set(new Uint8Array(this.buffer));\n            this.buffer = newArray.buffer;\n            this.length = newLength;\n            this.byteLength = newLength;\n            this._data = new DataView(this.buffer);\n        }\n        return this;\n    }\n    /**\n     * Read a byte and return false if the byte's value is 0, or true otherwise.\n     * Moves pointer forward by one byte.\n     * @returns The read boolean.\n     */\n    readBoolean() {\n        return this.readUint8() !== 0;\n    }\n    /**\n     * Read a signed 8-bit integer and move pointer forward by 1 byte.\n     * @returns The read byte.\n     */\n    readInt8() {\n        return this._data.getInt8(this.offset++);\n    }\n    /**\n     * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n     * @returns The read byte.\n     */\n    readUint8() {\n        return this._data.getUint8(this.offset++);\n    }\n    /**\n     * Alias for {@link IOBuffer#readUint8}.\n     * @returns The read byte.\n     */\n    readByte() {\n        return this.readUint8();\n    }\n    /**\n     * Read `n` bytes and move pointer forward by `n` bytes.\n     * @param n - Number of bytes to read.\n     * @returns The read bytes.\n     */\n    readBytes(n = 1) {\n        return this.readArray(n, 'uint8');\n    }\n    /**\n     * Creates an array of corresponding to the type `type` and size `size`.\n     * For example, type `uint8` will create a `Uint8Array`.\n     * @param size - size of the resulting array\n     * @param type - number type of elements to read\n     * @returns The read array.\n     */\n    readArray(size, type) {\n        const bytes = typedArrays[type].BYTES_PER_ELEMENT * size;\n        const offset = this.byteOffset + this.offset;\n        const slice = this.buffer.slice(offset, offset + bytes);\n        if (this.littleEndian === hostBigEndian &&\n            type !== 'uint8' &&\n            type !== 'int8') {\n            const slice = new Uint8Array(this.buffer.slice(offset, offset + bytes));\n            slice.reverse();\n            const returnArray = new typedArrays[type](slice.buffer);\n            this.offset += bytes;\n            returnArray.reverse();\n            return returnArray;\n        }\n        const returnArray = new typedArrays[type](slice);\n        this.offset += bytes;\n        return returnArray;\n    }\n    /**\n     * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n     * @returns The read value.\n     */\n    readInt16() {\n        const value = this._data.getInt16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n     * @returns The read value.\n     */\n    readUint16() {\n        const value = this._data.getUint16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readInt32() {\n        const value = this._data.getInt32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readUint32() {\n        const value = this._data.getUint32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit floating number and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readFloat32() {\n        const value = this._data.getFloat32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 64-bit floating number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readFloat64() {\n        const value = this._data.getFloat64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit signed integer number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readBigInt64() {\n        const value = this._data.getBigInt64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit unsigned integer number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readBigUint64() {\n        const value = this._data.getBigUint64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n     * @returns The read character.\n     */\n    readChar() {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        return String.fromCharCode(this.readInt8());\n    }\n    /**\n     * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n     * @param n - Number of characters to read.\n     * @returns The read characters.\n     */\n    readChars(n = 1) {\n        let result = '';\n        for (let i = 0; i < n; i++) {\n            result += this.readChar();\n        }\n        return result;\n    }\n    /**\n     * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n     * forward by `n` bytes.\n     * @param n - Number of bytes to read.\n     * @returns The decoded string.\n     */\n    readUtf8(n = 1) {\n        return decode(this.readBytes(n));\n    }\n    /**\n     * Read the next `n` bytes, return a string decoded with `encoding` and move pointer\n     * forward by `n` bytes.\n     * If no encoding is passed, the function is equivalent to @see {@link IOBuffer#readUtf8}\n     * @param n - Number of bytes to read.\n     * @param encoding - The encoding to use. Default is 'utf8'.\n     * @returns The decoded string.\n     */\n    decodeText(n = 1, encoding = 'utf8') {\n        return decode(this.readBytes(n), encoding);\n    }\n    /**\n     * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n     * forward by 1 byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBoolean(value) {\n        this.writeUint8(value ? 0xff : 0x00);\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt8(value) {\n        this.ensureAvailable(1);\n        this._data.setInt8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n     * byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint8(value) {\n        this.ensureAvailable(1);\n        this._data.setUint8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * An alias for {@link IOBuffer#writeUint8}.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeByte(value) {\n        return this.writeUint8(value);\n    }\n    /**\n     * Write all elements of `bytes` as uint8 values and move pointer forward by\n     * `bytes.length` bytes.\n     * @param bytes - The array of bytes to write.\n     * @returns This.\n     */\n    writeBytes(bytes) {\n        this.ensureAvailable(bytes.length);\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < bytes.length; i++) {\n            this._data.setUint8(this.offset++, bytes[i]);\n        }\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit signed integer and move pointer forward by 2\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt16(value) {\n        this.ensureAvailable(2);\n        this._data.setInt16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint16(value) {\n        this.ensureAvailable(2);\n        this._data.setUint16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit signed integer and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt32(value) {\n        this.ensureAvailable(4);\n        this._data.setInt32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint32(value) {\n        this.ensureAvailable(4);\n        this._data.setUint32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit floating number and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeFloat32(value) {\n        this.ensureAvailable(4);\n        this._data.setFloat32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit floating number and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeFloat64(value) {\n        this.ensureAvailable(8);\n        this._data.setFloat64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit signed bigint and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBigInt64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigInt64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit unsigned bigint and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBigUint64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigUint64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n     * and move pointer forward by 1 byte.\n     * @param str - The character to write.\n     * @returns This.\n     */\n    writeChar(str) {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        return this.writeUint8(str.charCodeAt(0));\n    }\n    /**\n     * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n     * and move pointer forward by `str.length` bytes.\n     * @param str - The characters to write.\n     * @returns This.\n     */\n    writeChars(str) {\n        for (let i = 0; i < str.length; i++) {\n            // eslint-disable-next-line unicorn/prefer-code-point\n            this.writeUint8(str.charCodeAt(i));\n        }\n        return this;\n    }\n    /**\n     * UTF-8 encode and write `str` to the current pointer offset and move pointer\n     * forward according to the encoded length.\n     * @param str - The string to write.\n     * @returns This.\n     */\n    writeUtf8(str) {\n        return this.writeBytes(encode(str));\n    }\n    /**\n     * Export a Uint8Array view of the internal buffer.\n     * The view starts at the byte offset and its length\n     * is calculated to stop at the last written byte or the original length.\n     * @returns A new Uint8Array view.\n     */\n    toArray() {\n        return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n    }\n    /**\n     *  Get the total number of bytes written so far, regardless of the current offset.\n     * @returns - Total number of bytes.\n     */\n    getWrittenByteLength() {\n        return this.lastWrittenByte - this.byteOffset;\n    }\n    /**\n     * Update the last written byte offset\n     * @private\n     */\n    _updateLastWrittenByte() {\n        if (this.offset > this.lastWrittenByte) {\n            this.lastWrittenByte = this.offset;\n        }\n    }\n}\n//# sourceMappingURL=iobuffer.js.map","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options\n * @returns - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","/**\n * Ensures x-values are increasing in magnitude. It reverses y if x was reversed.\n *\n * Does not mutate arrays\n * Assumes that X is either increasing or decreasing, not any random order.\n * Expects x and y to be the same length\n * @param x - array of x values\n * @param y - array of y values\n * @returns [x,y] tuple\n */\nexport function ensureIncreasingXValues(x, y) {\n    const xL = x.length;\n    if (xL !== 0) {\n        if (y.length !== xL) {\n            //wouldn't really make sense for x and y to be !==\n            throw new RangeError('x and y length must be the same');\n        }\n        const firstX = x[0];\n        const lastX = x[xL - 1];\n        if (firstX > lastX) {\n            //apparently slice(0) faster than slice()\n            return [x.slice(0).toReversed(), y.slice(0).toReversed()];\n        }\n    }\n    return [x, y];\n}\n//# sourceMappingURL=ensureIncreasingXValues.js.map","import { ensureIncreasingXValues } from \"./utility/ensureIncreasingXValues.js\";\n/**\n * Gets the Subfile flags.\n * @param  flag - First byte of the subheader.\n * @returns The parameters.\n */\nexport class SubFlagParameters {\n    changed;\n    noPeakTable;\n    modifiedArithmetic;\n    constructor(flag) {\n        this.changed = (flag & 1) !== 0;\n        this.noPeakTable = (flag & 8) !== 0;\n        this.modifiedArithmetic = (flag & 128) !== 0;\n    }\n}\n/**\n * Parses the subheader (header of the subfile)\n * @param buffer - SPC buffer.\n * @returns subheader object\n */\nexport class SubHeader {\n    //all formats have the same subheader\n    parameters;\n    exponentY;\n    indexNumber;\n    startingZ;\n    endingZ;\n    noiseValue;\n    numberPoints;\n    numberCoAddedScans;\n    wAxisValue;\n    reserved;\n    constructor(buffer) {\n        this.parameters = new SubFlagParameters(buffer.readUint8());\n        this.exponentY = buffer.readInt8();\n        this.indexNumber = buffer.readUint16();\n        this.startingZ = buffer.readFloat32();\n        this.endingZ = buffer.readFloat32();\n        this.noiseValue = buffer.readFloat32();\n        this.numberPoints = buffer.readUint32();\n        this.numberCoAddedScans = buffer.readUint32();\n        this.wAxisValue = buffer.readFloat32();\n        this.reserved = buffer.readChars(4).replaceAll('\\u0000', '').trim();\n    }\n}\n/**\n * Set the X and Y axis (object with labels, values etc.)\n * @param x - X values array.\n * @param y - Y values array.\n * @param fileHeader - main file header.\n * @returns object with x and y as axis.\n */\nexport function setXYAxis(x, y, fileHeader) {\n    const xAxis = /(?<label>.*?) ?[([](?<units>.*)[)\\]]/.exec(fileHeader.xUnitsType);\n    const yAxis = /(?<label>.*?) ?[([](?<units>.*)[)\\]]/.exec(fileHeader.yUnitsType);\n    const [oX, oY] = ensureIncreasingXValues(x, y);\n    const variables = {\n        x: {\n            symbol: 'x',\n            label: xAxis?.groups?.label || fileHeader.xUnitsType,\n            units: xAxis?.groups?.units || '',\n            data: oX,\n            isDependent: false,\n        },\n        y: {\n            symbol: 'y',\n            label: yAxis?.groups?.label || fileHeader.yUnitsType,\n            units: yAxis?.groups?.units || '',\n            data: oY,\n            isDependent: true,\n        },\n    };\n    return variables;\n}\n//# sourceMappingURL=shared.js.map","import { createFromToArray } from 'ml-spectra-processing';\nimport { getDataShape } from \"../utility/getDataShape.js\";\nimport { SubHeader, setXYAxis } from \"./shared.js\";\n/**\n * Reads the data block of the SPC file.\n * @param buffer - spc buffer.\n * @param fileHeader - main header.\n * @returns Array containing the spectra.\n */\nexport function newDataBlock(buffer, fileHeader) {\n    let x;\n    const spectra = [];\n    const dataShape = getDataShape(fileHeader.parameters);\n    if (dataShape === 'XY' || dataShape === 'XYY') {\n        //for these ones, X axis comes before subheader !!\n        x = new Float64Array(fileHeader.numberPoints);\n        for (let i = 0; i < fileHeader.numberPoints; i++) {\n            x[i] = buffer.readFloat32();\n        }\n    }\n    else if (dataShape === 'YY' || dataShape === 'Y') {\n        //for these ones, no X axis, we create it as we have all parameters\n        x = createFromToArray({\n            from: fileHeader.startingX,\n            to: fileHeader.endingX,\n            length: fileHeader.numberPoints,\n        });\n    }\n    for (let i = 0; i < fileHeader.spectra; i++) {\n        // here Y is set (runs only once for a single spectra.)\n        const subFileHeader = new SubHeader(buffer);\n        // set X for the remaining cases if neccesary\n        if (dataShape === 'XYXY' || dataShape === 'exception') {\n            x = new Float64Array(subFileHeader.numberPoints);\n            for (let j = 0; j < x.length; j++) {\n                x[j] = buffer.readFloat32();\n            }\n        }\n        const y = getNewY(new Float64Array(x.length), subFileHeader, fileHeader, buffer);\n        const variables = setXYAxis(x, y, fileHeader);\n        spectra.push({ meta: subFileHeader, variables });\n    }\n    return spectra;\n}\n/**\n * Reads Y values from the buffer for new format SPC files.\n * @param y - output Y array to fill.\n * @param subHeader - subfile header.\n * @param fileHeader - main file header.\n * @param buffer - SPC buffer.\n * @returns the filled Y array.\n */\nexport function getNewY(y, subHeader, fileHeader, buffer) {\n    const { exponentY, parameters: { y16BitPrecision }, } = fileHeader;\n    if (subHeader.exponentY === 0) {\n        subHeader.exponentY = exponentY;\n    }\n    const yFactor = 2 ** (subHeader.exponentY - (y16BitPrecision ? 16 : 32));\n    if (y16BitPrecision) {\n        for (let j = 0; j < y.length; j++) {\n            y[j] = buffer.readInt16() * yFactor;\n        }\n    }\n    else {\n        for (let j = 0; j < y.length; j++) {\n            if (subHeader.exponentY !== -128) {\n                y[j] = buffer.readInt32() * yFactor;\n            }\n            else {\n                y[j] = buffer.readFloat32();\n            }\n        }\n    }\n    return y;\n}\n//# sourceMappingURL=newDataBlock.js.map","import { createFromToArray } from 'ml-spectra-processing';\nimport { SubHeader, setXYAxis } from \"./shared.js\";\n/**\n * Reads a file's data block (old SPC format)\n * @param buffer - spc buffer.\n * @param fileHeader - header.\n * @returns Array containing the spectra.\n */\nexport function oldDataBlock(buffer, fileHeader) {\n    // either Y or YY fall on the for loop\n    const spectra = [];\n    // old format uses always equidistant arrays\n    const x = createFromToArray({\n        from: fileHeader.startingX,\n        to: fileHeader.endingX,\n        length: fileHeader.numberPoints,\n    });\n    for (let i = 0; buffer.offset + fileHeader.numberPoints < buffer.length; i++) {\n        const subFileHeader = new SubHeader(buffer);\n        const y = getOldY(new Float64Array(x.length), subFileHeader, fileHeader, buffer);\n        const variables = setXYAxis(x, y, fileHeader);\n        spectra.push({ meta: subFileHeader, variables });\n    }\n    return spectra;\n}\n/**\n * Reads Y values from the buffer for old format SPC files.\n * @param y - output Y array to fill.\n * @param subHeader - subfile header.\n * @param fileHeader - main file header.\n * @param buffer - SPC buffer.\n * @returns the filled Y array.\n */\nexport function getOldY(y, subHeader, fileHeader, buffer) {\n    const { fileVersion, exponentY, parameters: { y16BitPrecision }, } = fileHeader;\n    if (subHeader.exponentY === 0) {\n        subHeader.exponentY = exponentY;\n    }\n    const yFactor = 2 ** (subHeader.exponentY - (y16BitPrecision ? 16 : 32));\n    if (y16BitPrecision) {\n        for (let j = 0; j < y.length; j++) {\n            y[j] = buffer.readInt16() * yFactor;\n        }\n    }\n    else {\n        for (let j = 0; j < y.length; j++) {\n            if (fileVersion === 0x4d) {\n                y[j] =\n                    ((buffer.readUint8() << 16) +\n                        (buffer.readInt8() << 24) +\n                        (buffer.readUint8() << 0) +\n                        (buffer.readUint8() << 8)) *\n                        yFactor;\n            }\n        }\n    }\n    return y;\n}\n//# sourceMappingURL=oldDataBlock.js.map","/**\n * Reads the log block from an SPC file.\n * @param  buffer - SPC buffer.\n * @param  logOffset - Offset of the log (from mainHeader).\n * @returns  Object containing log meta, data and text.\n */\nexport function readLogBlock(buffer, logOffset) {\n    const logHeader = {\n        size: buffer.readUint32(), //Size of the block in bytes\n        memorySize: buffer.readUint32(), //Size of the memory rounded up to nearest multiple of 4096\n        textOffset: buffer.readUint32(), //Offset to Text section\n        binarySize: buffer.readUint32(), //Size of binary log block\n        diskArea: buffer.readUint32(), //Size of the disk area\n        reserved: buffer.readChars(44).trim().replaceAll('\\u0000', ''), //Reserved space\n    };\n    const logData = buffer.readChars(logHeader.binarySize);\n    buffer.offset = logOffset + logHeader.textOffset;\n    const logASCII = buffer\n        .readChars(logHeader.size - logHeader.textOffset)\n        .trim()\n        .replaceAll('\\u0000', '');\n    return { meta: logHeader, data: logData, text: logASCII };\n}\n//# sourceMappingURL=logBlock.js.map","import { IOBuffer } from 'iobuffer';\nimport { newDataBlock } from \"./dataBlock/newDataBlock.js\";\nimport { oldDataBlock } from \"./dataBlock/oldDataBlock.js\";\nimport { TheNewHeader, fileHeader } from \"./fileHeader.js\";\nimport { readLogBlock } from \"./logBlock.js\";\n/**\n * Parses an SPC file.\n * @param  buffer - SPC file buffer.\n * @returns JSON-like object with information contained in the SPC file.\n */\nexport function parse(buffer) {\n    const ioBuffer = new IOBuffer(buffer);\n    const meta = fileHeader(ioBuffer);\n    if (meta instanceof TheNewHeader) {\n        //new format\n        const spectra = newDataBlock(ioBuffer, meta);\n        const logs = meta.logOffset !== 0 ? readLogBlock(ioBuffer, meta.logOffset) : null;\n        return { meta, spectra, logs };\n    }\n    else {\n        //old format\n        return {\n            meta,\n            spectra: oldDataBlock(ioBuffer, meta),\n        };\n    }\n}\n//# sourceMappingURL=parse.js.map"],"names":["xzwTypes","xzwType","yTypes","yType","experimentSettings","code","FlagParameters","y16BitPrecision","useExperimentExtension","multiFile","zValuesRandom","zValuesUneven","customAxisLabels","xyxy","xy","constructor","flag","longToDate","long","date","Date","setUTCFullYear","setUTCMonth","setUTCDate","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","toISOString","TheOldHeader","fileVersion","parameters","exponentY","numberPoints","startingX","endingX","xUnitsType","yUnitsType","resolutionDescription","peakPointNumber","scans","spare","memo","xyzLabels","buffer","prev","readInt16","readFloat32","readUint8","zTypeYear","readUint16","Math","max","readChars","replaceAll","trim","i","push","TheNewHeader","experimentType","spectra","zUnitsType","postingDisposition","sourceInstrumentDescription","logOffset","modifiedFlag","processingCode","calibrationLevel","subMethodSampleInjectionNumber","concentrationFactor","methodFile","zSubIncrement","wPlanes","wPlaneIncrement","wAxisUnits","reserved","readInt8","readUint32","readFloat64","toReversed","slice","fileHeader","headerOpts","setBigEndian","Error","getDataShape","guessSpectraType","meta","startsWith","id","split","uvOrIR","includes","xUnit","dataShape","analyze","sX","eX","unitToNano","lowerBound","min","getRegion","lb","x","from","decode","bytes","encoding","decoder","TextDecoder","encoder","TextEncoder","encode","str","defaultByteLength","hostBigEndian","array","Uint8Array","view","Uint32Array","typedArrays","int8","globalThis","Int8Array","uint8","int16","Int16Array","uint16","Uint16Array","int32","Int32Array","uint32","uint64","BigUint64Array","int64","BigInt64Array","float32","Float32Array","float64","Float64Array","IOBuffer","byteLength","byteOffset","length","offset","lastWrittenByte","littleEndian","_data","_mark","_marks","data","options","dataIsGiven","ArrayBuffer","dvOffset","isView","DataView","available","isLittleEndian","setLittleEndian","isBigEndian","skip","n","back","seek","mark","reset","pushMark","popMark","pop","undefined","rewind","ensureAvailable","lengthNeeded","newLength","newArray","set","readBoolean","getInt8","getUint8","readByte","readBytes","readArray","size","type","BYTES_PER_ELEMENT","reverse","returnArray","value","getInt16","getUint16","readInt32","getInt32","getUint32","getFloat32","getFloat64","readBigInt64","getBigInt64","readBigUint64","getBigUint64","readChar","String","fromCharCode","result","readUtf8","decodeText","writeBoolean","writeUint8","writeInt8","setInt8","_updateLastWrittenByte","setUint8","writeByte","writeBytes","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBigInt64","setBigInt64","writeBigUint64","setBigUint64","writeChar","charCodeAt","writeChars","writeUtf8","toArray","getWrittenByteLength","createFromToArray","to","includeFrom","includeTo","distribution","div","delta","index","base","firstExponent","log","ensureIncreasingXValues","y","xL","RangeError","firstX","lastX","SubFlagParameters","changed","noPeakTable","modifiedArithmetic","SubHeader","indexNumber","startingZ","endingZ","noiseValue","numberCoAddedScans","wAxisValue","setXYAxis","xAxis","exec","yAxis","oX","oY","variables","symbol","label","groups","units","isDependent","newDataBlock","subFileHeader","j","getNewY","subHeader","yFactor","oldDataBlock","getOldY","readLogBlock","logHeader","memorySize","textOffset","binarySize","diskArea","logData","logASCII","text","parse","ioBuffer","logs"],"mappings":"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","x_google_ignoreList":[5,6,7]}