Context
OpenChemLib (v9.19+) has Molecule.fromText(text) which auto-detects the input format:
- If it contains V2000/V3000 → parse as molfile
- Try SMILES
- Try ID code
- Returns
null if unparseable or empty (no atoms)
API docs
Current code
In MoleculeManager.ts, getMolecules() uses manual format detection + separate validation:
const parse = /v[23]000/i.test(text) ? readSDF : readSMILES;
try {
molecules = parse(text);
} catch (error) {
throw new Error(parseErrorMessage, { cause: error });
}
validateMolecules(molecules);
return molecules;
Suggested simplification
const molecule = Molecule.fromText(text);
if (!molecule) {
throw new Error(parseErrorMessage);
}
Benefits
- Removes manual /v[23]000/i format detection
- Removes dependency on readSDF / readSMILES from @zakodium/nmrium-core-plugins for this path
- fromText() handles the empty-molecule check internally (returns null)
- Also handles ID code format as a bonus
- Reduces parsing + validation code significantly (≈60 lines → ≈10 lines)
Note
For the SDF multi-molecule case, readSDF would still be needed since fromText() only returns a single molecule. But for the single-molecule paste use case, fromText() is a clean drop-in replacement.
Context
OpenChemLib (v9.19+) has
Molecule.fromText(text)which auto-detects the input format:nullif unparseable or empty (no atoms)API docs
Current code
In
MoleculeManager.ts,getMolecules()uses manual format detection + separate validation:Suggested simplification
Benefits
Note
For the SDF multi-molecule case, readSDF would still be needed since fromText() only returns a single molecule. But for the single-molecule paste use case, fromText() is a clean drop-in replacement.