{"version":3,"file":"rxn-parser.min.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":["rxn","TypeError","header","substr","crlf","indexOf","rxnParts","split","reagents","products","result","length","Error","lines","numberReagents","substring","numberProducts","trim","replace","i","push"],"mappings":"iPAAe,SAAeA,GAC5B,GAAmB,iBAARA,EACT,MAAM,IAAIC,UAAU,oCAGtB,IAAIC,EAASF,EAAIG,OAAO,EAAG,KACvBC,EAAO,KACPF,EAAOG,QAAQ,SAAW,EAC5BD,EAAO,OACEF,EAAOG,QAAQ,OAAS,IACjCD,EAAO,MAGT,IAAIE,EAAWN,EAAIO,MAAO,GAAEH,QAAWA,KAEnCI,EAAW,GACXC,EAAW,GAEXC,EAAS,CAAA,EAQb,GAPAA,EAAOF,SAAWA,EAClBE,EAAOD,SAAWA,EAMM,IAApBH,EAASK,OAAc,MAAM,IAAIC,MAAM,oBAG3C,GADAV,EAASI,EAAS,GACa,IAA3BJ,EAAOG,QAAQ,QACjB,MAAM,IAAIO,MAAM,iCAGlB,IAAIC,EAAQX,EAAOK,MAAMH,GACzB,GAAIS,EAAMF,OAAS,EAAG,MAAM,IAAIC,MAAM,uCAEtC,IAAIE,EAAiBD,EAAM,GAAGE,UAAU,EAAG,IAAM,EAC7CC,EAAiBH,EAAM,GAAGE,UAAU,EAAG,IAAM,EAKjD,GAFkBF,EAAM,GAAGE,UAAU,EAAG,IAAM,GAE3BT,EAAS,GAAI,CAC9B,IAAIO,EAAQP,EAAS,GAAGC,MAAMH,GAC1BS,EAAM,KACRC,EAAiBD,EAAM,GACpBI,OACAC,QAAQ,UAAW,IACnBX,MAAM,QAAQI,OAErB,CAEA,GAAIG,EAAiBE,IAAmBV,EAASK,OAAS,EACxD,MAAM,IAAIC,MAAM,uCAGlB,IAAK,IAAIO,EAAI,EAAGA,EAAIb,EAASK,OAAQQ,IAC/BA,GAAKL,EACPN,EAASY,KAAKd,EAASa,IAEvBV,EAASW,KAAKd,EAASa,IAG3B,OAAOT,CACT"}