{"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.indexOf('\\r\\n') > -1) {\n      molfileEOL = '\\r\\n';\n    } else if (molfile.indexOf('\\r') > -1) {\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}>`);\n          result.push(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: sdf,\n  };\n}\n"],"names":["create","molecules","options","molfilePropertyName","eol","filter","strict","emptyMolfile","start","Date","now","sdf","createSDF","normaliseMolfile","molfile","Error","molfileEOL","indexOf","lines","replace","split","join","result","i","length","molecule","push","key","match","time"],"mappings":"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"}