{"version":3,"file":"sdf-creator.js","sources":["../src/index.js"],"sourcesContent":["/**\n * Converts an array of objects containing molfile to a SDF\n * @param {*} molecules\n * @param {object} [options={}] - options to create the SDF\n * @param {boolean} [options.strict=false] - throw errors in no molfile\n * @param {string} [options.molfilePropertyName=\"molfile\"] - contains the name of the property containing the molfile\n * @param {RegExp} [options.filter=/.*\\/] - regular expression containing a filter for the properties to add\n * @param {string} [options.eol='\\n'] - string to use as end-of-line delimiter\n * @returns {object}\n */\n\nexport function create(molecules, options = {}) {\n  let {\n    molfilePropertyName = 'molfile',\n    eol = '\\n',\n    filter = /.*/,\n    strict = false,\n  } = options;\n\n  let emptyMolfile =\n    'empty.mol\\n  Spectrum generator\\n\\n  0  0  0  0  0  0  0  0  0  0999 V2000\\nM  END\\n';\n\n  let start = Date.now();\n  let sdf = createSDF(molecules, filter);\n\n  function normaliseMolfile(molfile) {\n    if (!molfile) {\n      if (strict) throw new Error('Array containing emtpy molfiles');\n      molfile = emptyMolfile;\n    }\n    let molfileEOL = '\\n';\n    if (molfile.includes('\\r\\n')) {\n      molfileEOL = '\\r\\n';\n    } else if (molfile.includes('\\r')) {\n      molfileEOL = '\\r';\n    }\n    let lines = molfile.replace(/[\\r\\n]+$/, '').split(molfileEOL);\n    return lines.join(eol);\n  }\n\n  function createSDF(molecules, filter) {\n    let result = [];\n    for (let i = 0; i < molecules.length; i++) {\n      let molecule = molecules[i];\n      result.push(normaliseMolfile(molecule[molfilePropertyName]));\n      for (let key in molecule) {\n        if (\n          key !== molfilePropertyName &&\n          (!filter || key.match(filter)) &&\n          molecule[key]\n        ) {\n          result.push(`>  <${key}>`, molecule[key] + eol);\n        }\n      }\n      result.push('$$$$');\n    }\n    return result.join(eol);\n  }\n\n  return {\n    time: Date.now() - start,\n    sdf,\n  };\n}\n"],"names":["create","molecules","options","molfilePropertyName","eol","filter","strict","emptyMolfile","start","Date","now","sdf","createSDF","normaliseMolfile","molfile","Error","molfileEOL","includes","lines","replace","split","join","result","i","length","molecule","push","key","match","time"],"mappings":";;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEO,SAASA,MAAMA,CAACC,SAAS,EAAEC,OAAO,GAAG,EAAE,EAAE;IAC9C,IAAI;EACFC,IAAAA,mBAAmB,GAAG,SAAS;EAC/BC,IAAAA,GAAG,GAAG,IAAI;EACVC,IAAAA,MAAM,GAAG,IAAI;EACbC,IAAAA,MAAM,GAAG;EACX,GAAC,GAAGJ,OAAO;IAEX,IAAIK,YAAY,GACd,sFAAsF;EAExF,EAAA,IAAIC,KAAK,GAAGC,IAAI,CAACC,GAAG,EAAE;EACtB,EAAA,IAAIC,GAAG,GAAGC,SAAS,CAACX,SAAS,EAAEI,MAAM,CAAC;IAEtC,SAASQ,gBAAgBA,CAACC,OAAO,EAAE;MACjC,IAAI,CAACA,OAAO,EAAE;EACZ,MAAA,IAAIR,MAAM,EAAE,MAAM,IAAIS,KAAK,CAAC,iCAAiC,CAAC;EAC9DD,MAAAA,OAAO,GAAGP,YAAY;EACxB;MACA,IAAIS,UAAU,GAAG,IAAI;EACrB,IAAA,IAAIF,OAAO,CAACG,QAAQ,CAAC,MAAM,CAAC,EAAE;EAC5BD,MAAAA,UAAU,GAAG,MAAM;OACpB,MAAM,IAAIF,OAAO,CAACG,QAAQ,CAAC,IAAI,CAAC,EAAE;EACjCD,MAAAA,UAAU,GAAG,IAAI;EACnB;EACA,IAAA,IAAIE,KAAK,GAAGJ,OAAO,CAACK,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAACC,KAAK,CAACJ,UAAU,CAAC;EAC7D,IAAA,OAAOE,KAAK,CAACG,IAAI,CAACjB,GAAG,CAAC;EACxB;EAEA,EAAA,SAASQ,SAASA,CAACX,SAAS,EAAEI,MAAM,EAAE;MACpC,IAAIiB,MAAM,GAAG,EAAE;EACf,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtB,SAAS,CAACuB,MAAM,EAAED,CAAC,EAAE,EAAE;EACzC,MAAA,IAAIE,QAAQ,GAAGxB,SAAS,CAACsB,CAAC,CAAC;QAC3BD,MAAM,CAACI,IAAI,CAACb,gBAAgB,CAACY,QAAQ,CAACtB,mBAAmB,CAAC,CAAC,CAAC;EAC5D,MAAA,KAAK,IAAIwB,GAAG,IAAIF,QAAQ,EAAE;EACxB,QAAA,IACEE,GAAG,KAAKxB,mBAAmB,KAC1B,CAACE,MAAM,IAAIsB,GAAG,CAACC,KAAK,CAACvB,MAAM,CAAC,CAAC,IAC9BoB,QAAQ,CAACE,GAAG,CAAC,EACb;EACAL,UAAAA,MAAM,CAACI,IAAI,CAAC,CAAA,IAAA,EAAOC,GAAG,CAAA,CAAA,CAAG,EAAEF,QAAQ,CAACE,GAAG,CAAC,GAAGvB,GAAG,CAAC;EACjD;EACF;EACAkB,MAAAA,MAAM,CAACI,IAAI,CAAC,MAAM,CAAC;EACrB;EACA,IAAA,OAAOJ,MAAM,CAACD,IAAI,CAACjB,GAAG,CAAC;EACzB;IAEA,OAAO;EACLyB,IAAAA,IAAI,EAAEpB,IAAI,CAACC,GAAG,EAAE,GAAGF,KAAK;EACxBG,IAAAA;KACD;EACH;;;;;;;;"}