{"version":3,"file":"convert-to-jcamp.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../lib-esm/utils/addInfoData.js","../lib-esm/creatorNtuples.js","../node_modules/ml-spectra-processing/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinMaxValues.js","../lib-esm/utils/getBestFactor.js","../lib-esm/utils/getNumber.js","../lib-esm/utils/peakTableCreator.js","../lib-esm/utils/vectorEncoder.js","../lib-esm/utils/xyDataCreator.js","../lib-esm/fromJSON.js","../lib-esm/fromVariables.js"],"sourcesContent":["const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport default min;\n","export const addInfoData = (data, keys = Object.keys(data), prefix = '##$') => {\n    let header = '';\n    for (const key of keys) {\n        header +=\n            typeof data[key] === 'object'\n                ? `${prefix}${key}=${JSON.stringify(data[key])}\\n`\n                : `${prefix}${key}=${data[key]}\\n`;\n    }\n    return header;\n};\n//# sourceMappingURL=addInfoData.js.map","import maxFct from 'ml-array-max';\nimport minFct from 'ml-array-min';\nimport { addInfoData } from './utils/addInfoData';\n/**\n * Parse from a xyxy data array\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @return JCAMP-DX text file corresponding to the variables\n */\nexport default function creatorNtuples(variables, options) {\n    const { meta = {}, info = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '' } = info;\n    const symbol = [];\n    const varName = [];\n    const varType = [];\n    const varDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const factor = [];\n    const keys = Object.keys(variables);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        let variable = variables[key];\n        if (!variable)\n            continue;\n        let name = variable?.label.replace(/ *\\[.*/, '');\n        let unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        if (variable.isDependent !== undefined) {\n            varType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            varType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n        first.push(variable.data[0]);\n        last.push(variable.data[variable.data.length - 1]);\n        min.push(minFct(variable.data));\n        max.push(maxFct(variable.data));\n        factor.push(1);\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    const infoKeys = Object.keys(info).filter((e) => !['title', 'owner', 'origin', 'dataType'].includes(e));\n    header += addInfoData(info, infoKeys, '##');\n    header += addInfoData(meta);\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##PAGE= N=1\\n`;\n    header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n    for (let i = 0; i < variables.x.data.length; i++) {\n        let point = [];\n        for (let key of keys) {\n            let variable = variables[key];\n            if (!variable)\n                continue;\n            point.push(variable.data[i]);\n        }\n        header += `${point.join('\\t')}\\n`;\n    }\n    header += '##END';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.js.map","const toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array).\n *\n * @param {any} value - Object to check.\n * @returns {boolean} True if the object is an array.\n */\nexport function isAnyArray(value) {\n    return toString.call(value).endsWith('Array]');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if input is valdi\n *\n * @param input input\n */\nexport function xCheck(input) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n}\n/**\n * XCheckLengths.\n *\n * @param array1 - First array.\n * @param array2 - Second array.\n */\nexport function xCheckLengths(array1, array2) {\n    if (array1.length !== array2.length) {\n        throw new TypeError('Length of array1 and array2 must be identical');\n    }\n}\n//# sourceMappingURL=xCheck.js.map","import { xCheck } from './xCheck';\n/**\n * Return min and max values of an array\n *\n * @param array array of number\n * @returns Object with 2 properties, min and max\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (let value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nexport function getBestFactor(array, options = {}) {\n    const maxValue = options.maxValue === undefined ? 2 ** 31 - 1 : Math.abs(options.maxValue);\n    if (options.factor !== undefined) {\n        return options.factor;\n    }\n    // is there non integer number ?\n    let onlyInteger = true;\n    for (let y of array) {\n        if (Math.round(y) !== y) {\n            onlyInteger = false;\n            break;\n        }\n    }\n    if (onlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const minMax = xMinMaxValues(array);\n    let factor;\n    if (minMax.min < 0) {\n        if (minMax.max > 0) {\n            factor = Math.max(-minMax.min, minMax.max) / maxValue;\n        }\n        else {\n            factor = -minMax.min / maxValue;\n        }\n    }\n    else {\n        factor = minMax.max / maxValue;\n    }\n    return factor;\n}\n//# sourceMappingURL=getBestFactor.js.map","/**\n * Reconvert number to original value\n * @param number Number used for computation\n * @param factor Multiplying factor\n * @returns Original value\n */\nexport function getNumber(number, factor) {\n    if (factor !== 1)\n        number /= factor;\n    const rounded = Math.round(number);\n    if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n        return rounded;\n    }\n    return number;\n}\n//# sourceMappingURL=getNumber.js.map","import { getNumber } from './getNumber';\nexport function peakTableCreator(data, options = {}) {\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = Number.POSITIVE_INFINITY;\n    let lastX = Number.NEGATIVE_INFINITY;\n    let firstY = Number.POSITIVE_INFINITY;\n    let lastY = Number.NEGATIVE_INFINITY;\n    let lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        let x = data.x[i];\n        let y = data.y[i];\n        if (firstX > x) {\n            firstX = x;\n        }\n        if (lastX < x) {\n            lastX = x;\n        }\n        if (firstY > y) {\n            firstY = y;\n        }\n        if (lastY < y) {\n            lastY = y;\n        }\n    }\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##PEAK TABLE=(XY..XY)');\n    for (let i = 0; i < data.x.length; i++) {\n        lines.push(`${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`);\n    }\n    return lines;\n}\n//# sourceMappingURL=peakTableCreator.js.map","/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n */\nconst newLine = '\\n';\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's'],\n];\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst maxLinelength = 100;\n/**\n * This function encodes the given vector. The xyEncoding format is specified by the\n * xyEncoding option\n * @param xyEncoding: ('FIX','SQZ','DIF','DIFDUP','CVS','PAC') Default 'DIFDUP'\n * @return {string}\n */\nexport function encode(data, firstX, intervalX, xyEncoding) {\n    switch (xyEncoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n/**\n * @private\n * No data compression used. The data is separated by a comma(',').\n */\nexport function commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n/**\n * @private\n * No data compression used. The data is separated by the specified separator.\n */\nexport function fixEncoding(data, firstX, intervalX, separator = ' ') {\n    let outputData = '';\n    let j = 0;\n    let dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = 0; i < 8; i++) {\n            outputData += separator + data[j++];\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = j; i < dataLength; i++) {\n            outputData += separator + data[i];\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * No data compression used. The data is separated by the sign of the number.\n */\nexport function packedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    let j = 0;\n    let dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = 0; i < 8; i++) {\n            outputData += data[j] < 0 ? data[j++] : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? data[i] : `+${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n */\nexport function squeezedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    // String outputData = new String();\n    let j = 0;\n    let dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = 0; i < 10; i++) {\n            outputData += squeezedDigit(data[j++].toString());\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = j; i < dataLength; i++) {\n            outputData += squeezedDigit(data[i].toString());\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Duplicate suppression xyEncoding\n */\nexport function differenceDuplicateEncoding(data, firstX, intervalX) {\n    let mult = 0;\n    let index = 0;\n    let charCount = 0;\n    // We built a string where we store the encoded data.\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    let diffData = new Array(data.length - 1);\n    for (let i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    // We simulate a line carry\n    let numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // Start line\n            encodedNumber =\n                Math.ceil(firstX + index * intervalX) +\n                    squeezedDigit(data[index].toString()) +\n                    differenceDigit(diffData[index].toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            // Try to insert next difference\n            if (diffData[index - 1] === diffData[index]) {\n                mult++;\n            }\n            else {\n                if (mult > 0) {\n                    // Now we know that it can be in line\n                    mult++;\n                    encodedNumber = duplicateDigit(mult.toString());\n                    encodedData += encodedNumber;\n                    charCount += encodedNumber.length;\n                    mult = 0;\n                    index--;\n                }\n                else {\n                    // Mirar si cabe, en caso contrario iniciar una nueva linea\n                    encodedNumber = differenceDigit(diffData[index].toString());\n                    if (encodedNumber.length + charCount < maxLinelength) {\n                        encodedData += encodedNumber;\n                        charCount += encodedNumber.length;\n                    }\n                    else {\n                        // Iniciar nueva linea\n                        encodedData += newLine;\n                        temp =\n                            Math.ceil(firstX + index * intervalX) +\n                                squeezedDigit(data[index].toString()) +\n                                encodedNumber;\n                        encodedData += temp; // Each line start with first index number.\n                        charCount = temp.length;\n                    }\n                }\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodedData += duplicateDigit((mult + 1).toString());\n    }\n    // We insert the last data from fid. It is done to control of data\n    // The last line start with the number of datas in the fid.\n    encodedData +=\n        newLine +\n            Math.ceil(firstX + index * intervalX) +\n            squeezedDigit(data[index].toString());\n    return encodedData;\n}\n/**\n * @private\n * Differential xyEncoding\n */\nexport function differenceEncoding(data, firstX, intervalX) {\n    let index = 0;\n    let charCount = 0;\n    let i;\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    let diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    let numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // We convert the first number.\n            encodedNumber =\n                Math.ceil(firstX + index * intervalX) +\n                    squeezedDigit(data[index].toString()) +\n                    differenceDigit(diffData[index].toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                encodedData += newLine;\n                temp =\n                    Math.ceil(firstX + index * intervalX) +\n                        squeezedDigit(data[index].toString()) +\n                        encodedNumber;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    // We insert the last number from data. It is done to control of data\n    encodedData +=\n        newLine +\n            Math.ceil(firstX + index * intervalX) +\n            squeezedDigit(data[index].toString());\n    return encodedData;\n}\n/**\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n */\nfunction squeezedDigit(num) {\n    let sqzDigits = '';\n    if (num.startsWith('-')) {\n        sqzDigits += pseudoDigits[SQZ_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            sqzDigits += num.substring(2);\n        }\n    }\n    else {\n        sqzDigits += pseudoDigits[SQZ_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            sqzDigits += num.substring(1);\n        }\n    }\n    return sqzDigits;\n}\n/**\n * Convert number to the DIF format, using pseudo digits.\n */\nfunction differenceDigit(num) {\n    let diffDigits = '';\n    if (num.startsWith('-')) {\n        diffDigits += pseudoDigits[DIF_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            diffDigits += num.substring(2);\n        }\n    }\n    else {\n        diffDigits += pseudoDigits[DIF_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            diffDigits += num.substring(1);\n        }\n    }\n    return diffDigits;\n}\n/**\n * Convert number to the DUP format, using pseudo digits.\n */\nfunction duplicateDigit(num) {\n    let dupDigits = '';\n    dupDigits += pseudoDigits[DUP][num.charCodeAt(0) - 48];\n    if (num.length > 1) {\n        dupDigits += num.substring(1);\n    }\n    return dupDigits;\n}\n//# sourceMappingURL=vectorEncoder.js.map","import { encode } from './vectorEncoder';\nexport function xyDataCreator(data, options = {}) {\n    const { xyEncoding = 'DIF' } = options;\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = data.x[0];\n    let lastX = data.x[data.x.length - 1];\n    let firstY = data.y[0];\n    let lastY = data.y[data.y.length - 1];\n    let nbPoints = data.x.length;\n    let deltaX = (lastX - firstX) / (nbPoints - 1);\n    let lines = [];\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##DELTAX=${deltaX}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##XYDATA=(X++(Y..Y))');\n    let line = encode(rescaleAndEnsureInteger(data.y, yFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n    if (line)\n        lines.push(line);\n    return lines;\n}\nfunction rescaleAndEnsureInteger(data, factor) {\n    if (factor === 1)\n        return data.map((value) => Math.round(value));\n    const result = data.slice();\n    for (let i = 0; i < result.length; i++) {\n        result[i] = Math.round(result[i] / factor);\n    }\n    return result;\n}\n//# sourceMappingURL=xyDataCreator.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getBestFactor } from './utils/getBestFactor';\nimport { peakTableCreator } from './utils/peakTableCreator';\nimport { xyDataCreator } from './utils/xyDataCreator';\nconst infoDefaultKeys = [\n    'title',\n    'owner',\n    'origin',\n    'dataType',\n    'xUnits',\n    'yUnits',\n    'xFactor',\n    'yFactor',\n];\n/**\n * Create a jcamp\n * @param data object of array\n * @param [options={meta:{},info:{}} - metadata object\n * @returns JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n    const { meta = {}, info = {}, xyEncoding } = options;\n    let { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', xFactor, yFactor, } = info;\n    data = { x: data.x, y: data.y };\n    let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n    const infoKeys = Object.keys(info).filter((keys) => !infoDefaultKeys.includes(keys));\n    header += addInfoData(info, infoKeys, '##');\n    header += addInfoData(meta);\n    // we leave the header and utf8 fonts ${header.replace(/[^\\t\\n\\x20-\\x7F]/g, '')\n    if (xyEncoding) {\n        xFactor = getBestFactor(data.x, { factor: xFactor });\n        yFactor = getBestFactor(data.y, { factor: yFactor });\n        return `${header}##NPOINTS=${data.x.length}\n${xyDataCreator(data, { info: { xFactor, yFactor }, xyEncoding }).join('\\n')}\n##END=`;\n    }\n    else {\n        if (xFactor === undefined)\n            xFactor = 1;\n        if (yFactor === undefined)\n            yFactor = 1;\n        if (xFactor !== 1) {\n            // @ts-expect-error\n            data.x = data.x.map((value) => value / xFactor);\n        }\n        if (yFactor !== 1) {\n            // @ts-expect-error\n            data.y = data.y.map((value) => value / yFactor);\n        }\n        return `${header}##NPOINTS=${data.x.length}\n${peakTableCreator(data, { info: { xFactor, yFactor } }).join('\\n')}\n##END=`;\n    }\n}\n//# sourceMappingURL=fromJSON.js.map","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\n/**\n * Create a jcamp from variables\n */\nexport function fromVariables(\n/** object of variables */\nvariables, options = {}) {\n    const { info = {}, meta = {}, forceNtuples = false } = options;\n    let jcampOptions = {\n        info,\n        meta,\n    };\n    let keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (keys.length === 2 &&\n        keys.includes('x') &&\n        keys.includes('y') &&\n        !forceNtuples) {\n        let x = variables.x;\n        let xLabel = x.label || 'x';\n        if (variables.x.units) {\n            if (xLabel.includes(variables.x.units)) {\n                jcampOptions.info.xUnits = xLabel;\n            }\n            else {\n                jcampOptions.info.xUnits = `${xLabel} (${variables.x.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.xUnits = xLabel;\n        }\n        let y = variables.y;\n        let yLabel = y.label || 'y';\n        if (variables.y.units) {\n            if (yLabel.includes(variables.y.units)) {\n                jcampOptions.info.xUnits = yLabel;\n            }\n            else {\n                jcampOptions.info.yUnits = `${yLabel} (${variables.y.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.yUnits = yLabel;\n        }\n        return fromJSON({ x: variables.x.data, y: variables.y.data }, jcampOptions);\n    }\n    else {\n        return creatorNtuples(variables, options);\n    }\n}\n//# sourceMappingURL=fromVariables.js.map"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","options","arguments","length","undefined","isArray","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","Error","maxValue","i","min","minValue","minFct","maxFct"],"mappings":"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"}