{"version":3,"file":"fcs-parser.js","sources":["../node_modules/iobuffer/lib-esm/text-encoding-polyfill.js","../node_modules/iobuffer/lib-esm/utf8.browser.js","../node_modules/iobuffer/lib-esm/IOBuffer.js","../src/index.js"],"sourcesContent":["\"use strict\";\r\n/*\r\n * Copyright 2017 Sam Thorogood. All rights reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\r\n * use this file except in compliance with the License. You may obtain a copy of\r\n * the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations under\r\n * the License.\r\n */\r\n(function (scope) {\r\n 'use strict';\r\n // fail early\r\n if (scope['TextEncoder'] && scope['TextDecoder']) {\r\n return false;\r\n }\r\n /**\r\n * @constructor\r\n * @param {string=} utfLabel\r\n */\r\n function FastTextEncoder(utfLabel = 'utf-8') {\r\n if (utfLabel !== 'utf-8') {\r\n throw new RangeError(`Failed to construct 'TextEncoder': The encoding label provided ('${utfLabel}') is invalid.`);\r\n }\r\n }\r\n Object.defineProperty(FastTextEncoder.prototype, 'encoding', {\r\n value: 'utf-8',\r\n });\r\n /**\r\n * @param {string} string\r\n * @param {{stream: boolean}=} options\r\n * @return {!Uint8Array}\r\n */\r\n FastTextEncoder.prototype.encode = function (string, options = { stream: false }) {\r\n if (options.stream) {\r\n throw new Error(`Failed to encode: the 'stream' option is unsupported.`);\r\n }\r\n let pos = 0;\r\n const len = string.length;\r\n const out = [];\r\n let at = 0; // output position\r\n let tlen = Math.max(32, len + (len >> 1) + 7); // 1.5x size\r\n let target = new Uint8Array((tlen >> 3) << 3); // ... but at 8 byte offset\r\n while (pos < len) {\r\n let value = string.charCodeAt(pos++);\r\n if (value >= 0xd800 && value <= 0xdbff) {\r\n // high surrogate\r\n if (pos < len) {\r\n const extra = string.charCodeAt(pos);\r\n if ((extra & 0xfc00) === 0xdc00) {\r\n ++pos;\r\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\r\n }\r\n }\r\n if (value >= 0xd800 && value <= 0xdbff) {\r\n continue; // drop lone surrogate\r\n }\r\n }\r\n // expand the buffer if we couldn't write 4 bytes\r\n if (at + 4 > target.length) {\r\n tlen += 8; // minimum extra\r\n tlen *= 1.0 + (pos / string.length) * 2; // take 2x the remaining\r\n tlen = (tlen >> 3) << 3; // 8 byte offset\r\n const update = new Uint8Array(tlen);\r\n update.set(target);\r\n target = update;\r\n }\r\n if ((value & 0xffffff80) === 0) {\r\n // 1-byte\r\n target[at++] = value; // ASCII\r\n continue;\r\n }\r\n else if ((value & 0xfffff800) === 0) {\r\n // 2-byte\r\n target[at++] = ((value >> 6) & 0x1f) | 0xc0;\r\n }\r\n else if ((value & 0xffff0000) === 0) {\r\n // 3-byte\r\n target[at++] = ((value >> 12) & 0x0f) | 0xe0;\r\n target[at++] = ((value >> 6) & 0x3f) | 0x80;\r\n }\r\n else if ((value & 0xffe00000) === 0) {\r\n // 4-byte\r\n target[at++] = ((value >> 18) & 0x07) | 0xf0;\r\n target[at++] = ((value >> 12) & 0x3f) | 0x80;\r\n target[at++] = ((value >> 6) & 0x3f) | 0x80;\r\n }\r\n else {\r\n // FIXME: do we care\r\n continue;\r\n }\r\n target[at++] = (value & 0x3f) | 0x80;\r\n }\r\n return target.slice(0, at);\r\n };\r\n /**\r\n * @constructor\r\n * @param {string=} utfLabel\r\n * @param {{fatal: boolean}=} options\r\n */\r\n function FastTextDecoder(utfLabel = 'utf-8', options = { fatal: false }) {\r\n if (utfLabel !== 'utf-8') {\r\n throw new RangeError(`Failed to construct 'TextDecoder': The encoding label provided ('${utfLabel}') is invalid.`);\r\n }\r\n if (options.fatal) {\r\n throw new Error(`Failed to construct 'TextDecoder': the 'fatal' option is unsupported.`);\r\n }\r\n }\r\n Object.defineProperty(FastTextDecoder.prototype, 'encoding', {\r\n value: 'utf-8',\r\n });\r\n Object.defineProperty(FastTextDecoder.prototype, 'fatal', { value: false });\r\n Object.defineProperty(FastTextDecoder.prototype, 'ignoreBOM', {\r\n value: false,\r\n });\r\n /**\r\n * @param {(!ArrayBuffer|!ArrayBufferView)} buffer\r\n * @param {{stream: boolean}=} options\r\n */\r\n FastTextDecoder.prototype.decode = function (buffer, options = { stream: false }) {\r\n if (options['stream']) {\r\n throw new Error(`Failed to decode: the 'stream' option is unsupported.`);\r\n }\r\n const bytes = new Uint8Array(buffer);\r\n let pos = 0;\r\n const len = bytes.length;\r\n const out = [];\r\n while (pos < len) {\r\n const byte1 = bytes[pos++];\r\n if (byte1 === 0) {\r\n break; // NULL\r\n }\r\n if ((byte1 & 0x80) === 0) {\r\n // 1-byte\r\n out.push(byte1);\r\n }\r\n else if ((byte1 & 0xe0) === 0xc0) {\r\n // 2-byte\r\n const byte2 = bytes[pos++] & 0x3f;\r\n out.push(((byte1 & 0x1f) << 6) | byte2);\r\n }\r\n else if ((byte1 & 0xf0) === 0xe0) {\r\n const byte2 = bytes[pos++] & 0x3f;\r\n const byte3 = bytes[pos++] & 0x3f;\r\n out.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\r\n }\r\n else if ((byte1 & 0xf8) === 0xf0) {\r\n const byte2 = bytes[pos++] & 0x3f;\r\n const byte3 = bytes[pos++] & 0x3f;\r\n const byte4 = bytes[pos++] & 0x3f;\r\n // this can be > 0xffff, so possibly generate surrogates\r\n let codepoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\r\n if (codepoint > 0xffff) {\r\n // codepoint &= ~0x10000;\r\n codepoint -= 0x10000;\r\n out.push(((codepoint >>> 10) & 0x3ff) | 0xd800);\r\n codepoint = 0xdc00 | (codepoint & 0x3ff);\r\n }\r\n out.push(codepoint);\r\n }\r\n else {\r\n // FIXME: we're ignoring this\r\n }\r\n }\r\n return String.fromCharCode.apply(null, out);\r\n };\r\n scope['TextEncoder'] = FastTextEncoder;\r\n scope['TextDecoder'] = FastTextDecoder;\r\n})(typeof window !== 'undefined'\r\n ? window\r\n : typeof self !== 'undefined'\r\n ? self\r\n : this);\r\n//# sourceMappingURL=text-encoding-polyfill.js.map","import './text-encoding-polyfill';\r\nconst decoder = new TextDecoder('utf-8');\r\nexport function decode(bytes) {\r\n return decoder.decode(bytes);\r\n}\r\nconst encoder = new TextEncoder();\r\nexport function encode(str) {\r\n return encoder.encode(str);\r\n}\r\n//# sourceMappingURL=utf8.browser.js.map","import { decode, encode } from './utf8';\r\nconst defaultByteLength = 1024 * 8;\r\nexport class IOBuffer {\r\n /**\r\n * @param data - The data to construct the IOBuffer with.\r\n * If data is a number, it will be the new buffer's length
\r\n * If data is `undefined`, the buffer will be initialized with a default length of 8Kb
\r\n * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\r\n * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\r\n * @param options\r\n */\r\n constructor(data = defaultByteLength, options = {}) {\r\n let dataIsGiven = false;\r\n if (typeof data === 'number') {\r\n data = new ArrayBuffer(data);\r\n }\r\n else {\r\n dataIsGiven = true;\r\n this.lastWrittenByte = data.byteLength;\r\n }\r\n const offset = options.offset ? options.offset >>> 0 : 0;\r\n const byteLength = data.byteLength - offset;\r\n let dvOffset = offset;\r\n if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\r\n if (data.byteLength !== data.buffer.byteLength) {\r\n dvOffset = data.byteOffset + offset;\r\n }\r\n data = data.buffer;\r\n }\r\n if (dataIsGiven) {\r\n this.lastWrittenByte = byteLength;\r\n }\r\n else {\r\n this.lastWrittenByte = 0;\r\n }\r\n this.buffer = data;\r\n this.length = byteLength;\r\n this.byteLength = byteLength;\r\n this.byteOffset = dvOffset;\r\n this.offset = 0;\r\n this.littleEndian = true;\r\n this._data = new DataView(this.buffer, dvOffset, byteLength);\r\n this._mark = 0;\r\n this._marks = [];\r\n }\r\n /**\r\n * Checks if the memory allocated to the buffer is sufficient to store more\r\n * bytes after the offset.\r\n * @param byteLength - The needed memory in bytes.\r\n * @returns `true` if there is sufficient space and `false` otherwise.\r\n */\r\n available(byteLength = 1) {\r\n return this.offset + byteLength <= this.length;\r\n }\r\n /**\r\n * Check if little-endian mode is used for reading and writing multi-byte\r\n * values.\r\n * @returns `true` if little-endian mode is used, `false` otherwise.\r\n */\r\n isLittleEndian() {\r\n return this.littleEndian;\r\n }\r\n /**\r\n * Set little-endian mode for reading and writing multi-byte values.\r\n */\r\n setLittleEndian() {\r\n this.littleEndian = true;\r\n return this;\r\n }\r\n /**\r\n * Check if big-endian mode is used for reading and writing multi-byte values.\r\n * @returns `true` if big-endian mode is used, `false` otherwise.\r\n */\r\n isBigEndian() {\r\n return !this.littleEndian;\r\n }\r\n /**\r\n * Switches to big-endian mode for reading and writing multi-byte values.\r\n */\r\n setBigEndian() {\r\n this.littleEndian = false;\r\n return this;\r\n }\r\n /**\r\n * Move the pointer n bytes forward.\r\n * @param n - Number of bytes to skip.\r\n */\r\n skip(n = 1) {\r\n this.offset += n;\r\n return this;\r\n }\r\n /**\r\n * Move the pointer to the given offset.\r\n * @param offset\r\n */\r\n seek(offset) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n /**\r\n * Store the current pointer offset.\r\n * @see {@link IOBuffer#reset}\r\n */\r\n mark() {\r\n this._mark = this.offset;\r\n return this;\r\n }\r\n /**\r\n * Move the pointer back to the last pointer offset set by mark.\r\n * @see {@link IOBuffer#mark}\r\n */\r\n reset() {\r\n this.offset = this._mark;\r\n return this;\r\n }\r\n /**\r\n * Push the current pointer offset to the mark stack.\r\n * @see {@link IOBuffer#popMark}\r\n */\r\n pushMark() {\r\n this._marks.push(this.offset);\r\n return this;\r\n }\r\n /**\r\n * Pop the last pointer offset from the mark stack, and set the current\r\n * pointer offset to the popped value.\r\n * @see {@link IOBuffer#pushMark}\r\n */\r\n popMark() {\r\n const offset = this._marks.pop();\r\n if (offset === undefined) {\r\n throw new Error('Mark stack empty');\r\n }\r\n this.seek(offset);\r\n return this;\r\n }\r\n /**\r\n * Move the pointer offset back to 0.\r\n */\r\n rewind() {\r\n this.offset = 0;\r\n return this;\r\n }\r\n /**\r\n * Make sure the buffer has sufficient memory to write a given byteLength at\r\n * the current pointer offset.\r\n * If the buffer's memory is insufficient, this method will create a new\r\n * buffer (a copy) with a length that is twice (byteLength + current offset).\r\n * @param byteLength\r\n */\r\n ensureAvailable(byteLength = 1) {\r\n if (!this.available(byteLength)) {\r\n const lengthNeeded = this.offset + byteLength;\r\n const newLength = lengthNeeded * 2;\r\n const newArray = new Uint8Array(newLength);\r\n newArray.set(new Uint8Array(this.buffer));\r\n this.buffer = newArray.buffer;\r\n this.length = this.byteLength = newLength;\r\n this._data = new DataView(this.buffer);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Read a byte and return false if the byte's value is 0, or true otherwise.\r\n * Moves pointer forward by one byte.\r\n */\r\n readBoolean() {\r\n return this.readUint8() !== 0;\r\n }\r\n /**\r\n * Read a signed 8-bit integer and move pointer forward by 1 byte.\r\n */\r\n readInt8() {\r\n return this._data.getInt8(this.offset++);\r\n }\r\n /**\r\n * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\r\n */\r\n readUint8() {\r\n return this._data.getUint8(this.offset++);\r\n }\r\n /**\r\n * Alias for {@link IOBuffer#readUint8}.\r\n */\r\n readByte() {\r\n return this.readUint8();\r\n }\r\n /**\r\n * Read `n` bytes and move pointer forward by `n` bytes.\r\n */\r\n readBytes(n = 1) {\r\n const bytes = new Uint8Array(n);\r\n for (let i = 0; i < n; i++) {\r\n bytes[i] = this.readByte();\r\n }\r\n return bytes;\r\n }\r\n /**\r\n * Read a 16-bit signed integer and move pointer forward by 2 bytes.\r\n */\r\n readInt16() {\r\n const value = this._data.getInt16(this.offset, this.littleEndian);\r\n this.offset += 2;\r\n return value;\r\n }\r\n /**\r\n * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\r\n */\r\n readUint16() {\r\n const value = this._data.getUint16(this.offset, this.littleEndian);\r\n this.offset += 2;\r\n return value;\r\n }\r\n /**\r\n * Read a 32-bit signed integer and move pointer forward by 4 bytes.\r\n */\r\n readInt32() {\r\n const value = this._data.getInt32(this.offset, this.littleEndian);\r\n this.offset += 4;\r\n return value;\r\n }\r\n /**\r\n * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\r\n */\r\n readUint32() {\r\n const value = this._data.getUint32(this.offset, this.littleEndian);\r\n this.offset += 4;\r\n return value;\r\n }\r\n /**\r\n * Read a 32-bit floating number and move pointer forward by 4 bytes.\r\n */\r\n readFloat32() {\r\n const value = this._data.getFloat32(this.offset, this.littleEndian);\r\n this.offset += 4;\r\n return value;\r\n }\r\n /**\r\n * Read a 64-bit floating number and move pointer forward by 8 bytes.\r\n */\r\n readFloat64() {\r\n const value = this._data.getFloat64(this.offset, this.littleEndian);\r\n this.offset += 8;\r\n return value;\r\n }\r\n /**\r\n * Read a 1-byte ASCII character and move pointer forward by 1 byte.\r\n */\r\n readChar() {\r\n return String.fromCharCode(this.readInt8());\r\n }\r\n /**\r\n * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\r\n */\r\n readChars(n = 1) {\r\n let result = '';\r\n for (let i = 0; i < n; i++) {\r\n result += this.readChar();\r\n }\r\n return result;\r\n }\r\n /**\r\n * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\r\n * forward by `n` bytes.\r\n */\r\n readUtf8(n = 1) {\r\n return decode(this.readBytes(n));\r\n }\r\n /**\r\n * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\r\n * forward by 1 byte.\r\n */\r\n writeBoolean(value) {\r\n this.writeUint8(value ? 0xff : 0x00);\r\n return this;\r\n }\r\n /**\r\n * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\r\n */\r\n writeInt8(value) {\r\n this.ensureAvailable(1);\r\n this._data.setInt8(this.offset++, value);\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\r\n * byte.\r\n */\r\n writeUint8(value) {\r\n this.ensureAvailable(1);\r\n this._data.setUint8(this.offset++, value);\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * An alias for {@link IOBuffer#writeUint8}.\r\n */\r\n writeByte(value) {\r\n return this.writeUint8(value);\r\n }\r\n /**\r\n * Write all elements of `bytes` as uint8 values and move pointer forward by\r\n * `bytes.length` bytes.\r\n */\r\n writeBytes(bytes) {\r\n this.ensureAvailable(bytes.length);\r\n for (let i = 0; i < bytes.length; i++) {\r\n this._data.setUint8(this.offset++, bytes[i]);\r\n }\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * Write `value` as a 16-bit signed integer and move pointer forward by 2\r\n * bytes.\r\n */\r\n writeInt16(value) {\r\n this.ensureAvailable(2);\r\n this._data.setInt16(this.offset, value, this.littleEndian);\r\n this.offset += 2;\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\r\n * bytes.\r\n */\r\n writeUint16(value) {\r\n this.ensureAvailable(2);\r\n this._data.setUint16(this.offset, value, this.littleEndian);\r\n this.offset += 2;\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * Write `value` as a 32-bit signed integer and move pointer forward by 4\r\n * bytes.\r\n */\r\n writeInt32(value) {\r\n this.ensureAvailable(4);\r\n this._data.setInt32(this.offset, value, this.littleEndian);\r\n this.offset += 4;\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\r\n * bytes.\r\n */\r\n writeUint32(value) {\r\n this.ensureAvailable(4);\r\n this._data.setUint32(this.offset, value, this.littleEndian);\r\n this.offset += 4;\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * Write `value` as a 32-bit floating number and move pointer forward by 4\r\n * bytes.\r\n */\r\n writeFloat32(value) {\r\n this.ensureAvailable(4);\r\n this._data.setFloat32(this.offset, value, this.littleEndian);\r\n this.offset += 4;\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * Write `value` as a 64-bit floating number and move pointer forward by 8\r\n * bytes.\r\n */\r\n writeFloat64(value) {\r\n this.ensureAvailable(8);\r\n this._data.setFloat64(this.offset, value, this.littleEndian);\r\n this.offset += 8;\r\n this._updateLastWrittenByte();\r\n return this;\r\n }\r\n /**\r\n * Write the charCode of `str`'s first character as an 8-bit unsigned integer\r\n * and move pointer forward by 1 byte.\r\n */\r\n writeChar(str) {\r\n return this.writeUint8(str.charCodeAt(0));\r\n }\r\n /**\r\n * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\r\n * and move pointer forward by `str.length` bytes.\r\n */\r\n writeChars(str) {\r\n for (let i = 0; i < str.length; i++) {\r\n this.writeUint8(str.charCodeAt(i));\r\n }\r\n return this;\r\n }\r\n /**\r\n * UTF-8 encode and write `str` to the current pointer offset and move pointer\r\n * forward according to the encoded length.\r\n */\r\n writeUtf8(str) {\r\n return this.writeBytes(encode(str));\r\n }\r\n /**\r\n * Export a Uint8Array view of the internal buffer.\r\n * The view starts at the byte offset and its length\r\n * is calculated to stop at the last written byte or the original length.\r\n */\r\n toArray() {\r\n return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\r\n }\r\n /**\r\n * Update the last written byte offset\r\n * @private\r\n */\r\n _updateLastWrittenByte() {\r\n if (this.offset > this.lastWrittenByte) {\r\n this.lastWrittenByte = this.offset;\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=IOBuffer.js.map","import { IOBuffer } from 'iobuffer';\n\n/**\n * Parse the FCS data contained in the file.\n * @param {buffer} file - File with the FCS data.\n * @return {Object} [Object.text] Metadata of the experiment.\n * @return {Array} [Object.parameters] Data of the parameters.\n * @return {Array} [Object.data] Data of each event.\n */\n\nexport function parseFCS(file, options = {}) {\n let { delimiter = undefined } = options;\n\n const buffer = new IOBuffer(file);\n const {\n model,\n textBegin,\n textEnd,\n dataBegin,\n dataEnd,\n analysisBegin,\n analysisEnd,\n } = getHeader(buffer);\n\n delimiter = delimiter === undefined ? getDelimiter(buffer) : delimiter;\n const textFile = buffer.readChars(textEnd - textBegin).split(delimiter);\n const textLack = buffer.offset - textEnd;\n let textSegment = {\n model: model,\n textBegin: textBegin,\n textEnd: textEnd,\n dataBegin: dataBegin,\n dataEnd: dataEnd,\n analysisBegin: analysisBegin,\n analysisEnd: analysisEnd,\n };\n\n for (let i = 0; i < textFile.length / 2 - 1; i++) {\n textSegment[textFile[i * 2]] = textFile[i * 2 + 1];\n }\n\n textSegment.dataBegin = Number.isNaN(dataBegin)\n ? parseInt(textSegment.$BEGINDATA, 10)\n : dataBegin;\n\n textSegment.dataEnd = Number.isNaN(dataEnd)\n ? parseInt(textSegment.$ENDDATA, 10)\n : dataEnd;\n\n const endianness = textSegment.$BYTEORD;\n\n if (endianness === '1,2,3,4') {\n buffer.setLittleEndian();\n } else if (endianness === '4,3,2,1') {\n buffer.setBigEndian();\n } else {\n throw new RangeError(`Unrecognized ${endianness} endianness`);\n }\n\n const numberOfEvents = parseInt(textSegment.$TOT, 10);\n const parametersByEvent = parseInt(textSegment.$PAR, 10);\n\n buffer.skip(dataBegin - textEnd - textLack);\n let dataSegment = [];\n const dataType = textSegment.$DATATYPE;\n if (dataType === 'I') {\n for (let i = 0; i < numberOfEvents; i++) {\n let event = new Float64Array(parametersByEvent);\n for (let j = 0; j < parametersByEvent; j++) {\n event[j] = buffer.readUint16();\n }\n dataSegment[i] = event;\n }\n } else if (dataType === 'F') {\n for (let i = 0; i < numberOfEvents; i++) {\n let event = new Float64Array(parametersByEvent);\n for (let j = 0; j < parametersByEvent; j++) {\n event[j] = buffer.readFloat32();\n }\n dataSegment[i] = event;\n }\n } else if (dataType === 'D') {\n for (let i = 0; i < numberOfEvents; i++) {\n let event = new Float64Array(parametersByEvent);\n for (let j = 0; j < parametersByEvent; j++) {\n event[j] = buffer.readFloat64();\n }\n dataSegment[i] = event;\n }\n } else {\n throw new RangeError(`Not supported $DATATYPE ${dataType}`);\n }\n\n return {\n data: dataSegment,\n text: textSegment,\n parameters: getParameters(textSegment),\n };\n}\n\nfunction getHeader(buffer) {\n const model = buffer.readChars(6);\n const textBegin = parseInt(buffer.readChars(12), 10);\n const textEnd = parseInt(buffer.readChars(8), 10);\n const dataBegin = parseInt(buffer.readChars(8), 10);\n const dataEnd = parseInt(buffer.readChars(8), 10);\n const analysisBegin = parseInt(buffer.readChars(8), 10);\n const analysisEnd = parseInt(buffer.readChars(8), 10);\n\n return {\n model,\n textBegin,\n textEnd,\n dataBegin,\n dataEnd,\n analysisBegin,\n analysisEnd,\n };\n}\n\nfunction getParameters(metadata) {\n const entries = Object.entries(metadata);\n const keys = entries.filter(\n (item) => (item[0][1] === 'P') & !Number.isNaN(parseInt(item[0][2], 10)),\n );\n const regex = /[a-zA-Z]+|[0-9]+(?:\\.[0-9]+|)/g;\n const parametersData = Math.max(\n ...keys.map((item) => item[0].match(regex)[1]),\n );\n let parameters = [];\n for (let i = 1; i < parametersData + 1; i++) {\n const chanelKeys = keys.filter(\n (item) => parseInt(item[0].match(regex)[1], 10) === i,\n );\n let parameter = {};\n for (let j = 0; j < chanelKeys.length; j++) {\n parameter[chanelKeys[j][0]] = chanelKeys[j][1];\n }\n parameters.push(parameter);\n }\n return parameters;\n}\n\nfunction getDelimiter(buffer) {\n let delimiter = buffer.readChar().split(' ');\n while (delimiter[1] !== undefined) {\n delimiter = buffer.readChar().split(' ');\n }\n return delimiter;\n}\n"],"names":["this","parseFCS","file","options","delimiter","undefined","buffer","IOBuffer","model","textBegin","textEnd","dataBegin","dataEnd","analysisBegin","analysisEnd","getHeader","getDelimiter","textFile","readChars","split","textLack","offset","textSegment","i","length","Number","isNaN","parseInt","$BEGINDATA","$ENDDATA","endianness","$BYTEORD","setLittleEndian","setBigEndian","RangeError","numberOfEvents","$TOT","parametersByEvent","$PAR","skip","dataSegment","dataType","$DATATYPE","event","Float64Array","j","readUint16","readFloat32","readFloat64","data","text","parameters","getParameters","metadata","entries","Object","keys","filter","item","regex","parametersData","Math","max","map","match","chanelKeys","parameter","push","readChar"],"mappings":"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"}