{"version":3,"file":"rxn-parser.js","sources":["../src/index.js"],"sourcesContent":["export default function parse(rxn) {\n  if (typeof rxn !== 'string') {\n    throw new TypeError('Parameter \"rxn\" must be a string');\n  }\n  // we will find the delimiter in order to be much faster and not use regular expression\n  let header = rxn.substr(0, 1000);\n  let crlf = '\\n';\n  if (header.indexOf('\\r\\n') > -1) {\n    crlf = '\\r\\n';\n  } else if (header.indexOf('\\r') > -1) {\n    crlf = '\\r';\n  }\n\n  let rxnParts = rxn.split(`${crlf}$MOL${crlf}`);\n\n  let reagents = [];\n  let products = [];\n\n  let result = {};\n  result.reagents = reagents;\n  result.products = products;\n\n  // the first part is expected to contain the number of reagents and products\n\n  // First part should start with $RXN\n  // and the fifth line should contain the number of reagents and products\n  if (rxnParts.length === 0) throw new Error('file looks empty');\n\n  header = rxnParts[0];\n  if (header.indexOf('$RXN') !== 0) {\n    throw new Error('file does not start with $RXN');\n  }\n\n  let lines = header.split(crlf);\n  if (lines.length < 5) throw new Error('incorrect number of lines in header');\n\n  let numberReagents = lines[4].substring(0, 3) >> 0;\n  let numberProducts = lines[4].substring(3, 6) >> 0;\n\n  // hack for JSME\n  let thirdNumber = lines[4].substring(6, 9) >> 0; // for jsme\n\n  if (thirdNumber && rxnParts[1]) {\n    let lines = rxnParts[1].split(crlf);\n    if (lines[0]) {\n      numberReagents = lines[0]\n        .trim()\n        .replace(/>[^>]*$/, '')\n        .split(/[.>]/).length;\n    }\n  }\n\n  if (numberReagents + numberProducts !== rxnParts.length - 1) {\n    throw new Error('not the correct number of molecules');\n  }\n\n  for (let i = 1; i < rxnParts.length; i++) {\n    if (i <= numberReagents) {\n      reagents.push(rxnParts[i]);\n    } else {\n      products.push(rxnParts[i]);\n    }\n  }\n  return result;\n}\n"],"names":["parse","rxn","TypeError","header","substr","crlf","indexOf","rxnParts","split","reagents","products","result","length","Error","lines","numberReagents","substring","numberProducts","thirdNumber","trim","replace","i","push"],"mappings":"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"}