{"version":3,"file":"sdf-parser.js","sources":["../node_modules/isutf8/dist/index.esm.js","../node_modules/ensure-string/lib-esm/index.js","../src/getEntriesBoundaries.js","../src/util/getMolecule.js","../src/parse.js","../src/iterator.browser.js"],"sourcesContent":["/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","export function getEntriesBoundaries(string, substring, eol) {\n  const res = [];\n  let previous = 0;\n  let next = 0;\n  while (next !== -1) {\n    next = string.indexOf(substring, previous);\n    if (next !== -1) {\n      res.push([previous, next]);\n      const nextMatch = string.indexOf(eol, next + substring.length);\n      if (nextMatch === -1) {\n        next = -1;\n      } else {\n        previous = nextMatch + eol.length;\n        next = previous;\n      }\n    } else {\n      res.push([previous, string.length]);\n    }\n  }\n  return res;\n}\n","export function getMolecule(sdfPart, labels, currentLabels, options) {\n  let parts = sdfPart.split(`${options.eol}>`);\n  if (parts.length === 0 || parts[0].length <= 5) return;\n  let molecule = {};\n  molecule.molfile = parts[0] + options.eol;\n  for (let j = 1; j < parts.length; j++) {\n    let lines = parts[j].split(options.eol);\n    let from = lines[0].indexOf('<');\n    let to = lines[0].indexOf('>');\n    let label = lines[0].substring(from + 1, to);\n    currentLabels.push(label);\n    if (!labels[label]) {\n      labels[label] = {\n        counter: 0,\n        isNumeric: options.dynamicTyping,\n        keep: false,\n      };\n      if (\n        (!options.exclude || options.exclude.indexOf(label) === -1) &&\n        (!options.include || options.include.indexOf(label) > -1)\n      ) {\n        labels[label].keep = true;\n        if (options.modifiers[label]) {\n          labels[label].modifier = options.modifiers[label];\n        }\n        if (options.forEach[label]) {\n          labels[label].forEach = options.forEach[label];\n        }\n      }\n    }\n    if (labels[label].keep) {\n      for (let k = 1; k < lines.length - 1; k++) {\n        if (molecule[label]) {\n          molecule[label] += options.eol + lines[k];\n        } else {\n          molecule[label] = lines[k];\n        }\n      }\n      if (labels[label].modifier) {\n        let modifiedValue = labels[label].modifier(molecule[label]);\n        if (modifiedValue === undefined || modifiedValue === null) {\n          delete molecule[label];\n        } else {\n          molecule[label] = modifiedValue;\n        }\n      }\n      if (labels[label].isNumeric) {\n        if (!isFinite(molecule[label]) || molecule[label].match(/^0[0-9]/)) {\n          labels[label].isNumeric = false;\n        }\n      }\n    }\n  }\n  return molecule;\n}\n","import { ensureString } from 'ensure-string';\n\nimport { getEntriesBoundaries } from './getEntriesBoundaries';\nimport { getMolecule } from './util/getMolecule';\n/**\n *  Parse a SDF file\n * @param {string|ArrayBuffer|Uint8Array} sdf SDF file to parse\n * @param {object} [options={}]\n * @param {string[]} [options.include] List of fields to include\n * @param {string[]} [options.exclude] List of fields to exclude\n * @param {Function} [options.filter] Callback allowing to filter the molecules\n * @param {boolean} [options.dynamicTyping] Dynamically type the data\n * @param {object} [options.modifiers] Object containing callbacks to apply on some specific fields\n * @param {boolean} [options.mixedEOL=false] Set to true if you know there is a mixture between \\r\\n and \\n\n * @param {string} [options.eol] Specify the end of line character. Default will be the one found in the file\n */\nexport function parse(sdf, options = {}) {\n  options = { ...options };\n  if (options.modifiers === undefined) options.modifiers = {};\n  if (options.forEach === undefined) options.forEach = {};\n  if (options.dynamicTyping === undefined) options.dynamicTyping = true;\n\n  sdf = ensureString(sdf);\n  if (typeof sdf !== 'string') {\n    throw new TypeError('Parameter \"sdf\" must be a string');\n  }\n\n  if (options.eol === undefined) {\n    options.eol = '\\n';\n    if (options.mixedEOL) {\n      sdf = sdf.replace(/\\r\\n/g, '\\n');\n      sdf = sdf.replace(/\\r/g, '\\n');\n    } else {\n      // we will find the delimiter in order to be much faster and not use regular expression\n      let header = sdf.substr(0, 1000);\n      if (header.indexOf('\\r\\n') > -1) {\n        options.eol = '\\r\\n';\n      } else if (header.indexOf('\\r') > -1) {\n        options.eol = '\\r';\n      }\n    }\n  }\n\n  let entriesBoundaries = getEntriesBoundaries(\n    sdf,\n    `${options.eol}$$$$`,\n    options.eol,\n  );\n  let molecules = [];\n  let labels = {};\n\n  let start = Date.now();\n\n  for (let i = 0; i < entriesBoundaries.length; i++) {\n    let sdfPart = sdf.substring(...entriesBoundaries[i]);\n\n    let currentLabels = [];\n    const molecule = getMolecule(sdfPart, labels, currentLabels, options);\n    if (!molecule) continue;\n    if (!options.filter || options.filter(molecule)) {\n      molecules.push(molecule);\n      // only now we can increase the counter\n      for (let j = 0; j < currentLabels.length; j++) {\n        labels[currentLabels[j]].counter++;\n      }\n    }\n  }\n  // all numeric fields should be converted to numbers\n  for (let label in labels) {\n    let currentLabel = labels[label];\n    if (currentLabel.isNumeric) {\n      currentLabel.minValue = Infinity;\n      currentLabel.maxValue = -Infinity;\n      for (let j = 0; j < molecules.length; j++) {\n        if (molecules[j][label]) {\n          let value = parseFloat(molecules[j][label]);\n          molecules[j][label] = value;\n          if (value > currentLabel.maxValue) {\n            currentLabel.maxValue = value;\n          }\n          if (value < currentLabel.minValue) {\n            currentLabel.minValue = value;\n          }\n        }\n      }\n    }\n  }\n\n  // we check that a label is in all the records\n  for (let key in labels) {\n    if (labels[key].counter === molecules.length) {\n      labels[key].always = true;\n    } else {\n      labels[key].always = false;\n    }\n  }\n\n  let statistics = [];\n  for (let key in labels) {\n    let statistic = labels[key];\n    statistic.label = key;\n    statistics.push(statistic);\n  }\n\n  return {\n    time: Date.now() - start,\n    molecules,\n    labels: Object.keys(labels),\n    statistics,\n  };\n}\n","export function iterator() {\n  throw new Error('Iterator not implemented in the browser');\n}\n"],"names":["isUtf8","buf","i","len","length","ensureString","blob","options","ArrayBuffer","isView","encoding","guessEncoding","decoder","TextDecoder","decode","TypeError","uint8","Uint8Array","buffer","byteOffset","byteLength","isutf8","getEntriesBoundaries","string","substring","eol","res","previous","next","indexOf","push","nextMatch","getMolecule","sdfPart","labels","currentLabels","parts","split","molecule","molfile","j","lines","from","to","label","counter","isNumeric","dynamicTyping","keep","exclude","include","modifiers","modifier","forEach","k","modifiedValue","undefined","isFinite","match","parse","sdf","mixedEOL","replace","header","substr","entriesBoundaries","molecules","start","Date","now","filter","currentLabel","minValue","Infinity","maxValue","value","parseFloat","key","always","statistics","statistic","time","Object","keys","iterator","Error"],"mappings":"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"}