@chemistry/formula 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,11 +1,10 @@
1
1
  # @chemistry/formula
2
2
 
3
- [![npm version](https://badge.fury.io/js/%40chemistry%2Fformula.svg)](https://badge.fury.io/js/%40chemistry%2Fformula)
4
- [![License: MIT](https://img.shields.io/badge/License-MIT-gren.svg)](https://opensource.org/licenses/MIT)
3
+ [![npm](https://img.shields.io/npm/v/@chemistry/formula)](https://www.npmjs.com/package/@chemistry/formula)
5
4
 
6
- Library for parsing and formatting chemical formulas.
5
+ Chemical formula parser — parse, stringify, and calculate molecular weight.
7
6
 
8
- ## Install
7
+ ## Installation
9
8
 
10
9
  ```bash
11
10
  npm install @chemistry/formula
@@ -16,32 +15,22 @@ npm install @chemistry/formula
16
15
  ```typescript
17
16
  import { Formula } from '@chemistry/formula';
18
17
 
19
- // Parse a chemical formula into element counts
20
- const formula = Formula.parse('C2H5OH');
21
- console.log(formula); // { C: 2, H: 6, O: 1 }
18
+ const parsed = Formula.parse('C2H5OH');
19
+ // { C: 2, H: 6, O: 1 }
22
20
 
23
- // Convert element counts back to a formula string
24
- const str = Formula.convertToString(formula);
25
- console.log(str); // C2H6O
21
+ const weight = Formula.convertToWeight(parsed);
22
+ // 46.069
26
23
 
27
- // Calculate molecular weight
28
- const weight = Formula.convertToWeight(formula);
29
- console.log(weight); // 46.069...
24
+ const str = Formula.stringify(parsed);
25
+ // "C2H6O"
30
26
  ```
31
27
 
32
- ## API
28
+ ## Features
33
29
 
34
- ### `Formula.parse(formula: string): Record<string, number>`
35
-
36
- Parses a chemical formula string and returns an object mapping element symbols to their counts.
37
-
38
- ### `Formula.convertToString(formula: Record<string, number>): string`
39
-
40
- Converts an element count object back to a formatted formula string (Hill system order: C first, H second, then alphabetical).
41
-
42
- ### `Formula.convertToWeight(formula: Record<string, number>): number`
43
-
44
- Calculates the molecular weight from an element count object using standard atomic masses.
30
+ - Parse chemical formulas into element counts
31
+ - Calculate molecular weight
32
+ - Stringify parsed formulas back to string
33
+ - Isomorphic — works in Node.js and browsers
45
34
 
46
35
  ## License
47
36
 
package/dist/formula.d.ts CHANGED
@@ -3,6 +3,7 @@ export interface ChemComposition {
3
3
  }
4
4
  export declare class Formula {
5
5
  static parse(formula: string): ChemComposition;
6
+ static convertToWeight(formula: ChemComposition): number;
6
7
  static convertToString(formula: ChemComposition): string;
7
8
  }
8
9
  //# sourceMappingURL=formula.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../src/formula.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,eAAe;IAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,qBAAa,OAAO;WACJ,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;WAmBvC,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM;CAuBhE"}
1
+ {"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../src/formula.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,eAAe;IAC9B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,qBAAa,OAAO;WACJ,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;WAmBvC,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM;WAWjD,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM;CAuBhE"}
package/dist/formula.js CHANGED
@@ -21,6 +21,16 @@ export class Formula {
21
21
  }
22
22
  return formulaObj;
23
23
  }
24
+ static convertToWeight(formula) {
25
+ let weight = 0;
26
+ for (const element of Object.keys(formula)) {
27
+ const info = ChemElements.getBySymbol(element);
28
+ if (info) {
29
+ weight += formula[element] * info.mass;
30
+ }
31
+ }
32
+ return Math.round(weight * 1000) / 1000;
33
+ }
24
34
  static convertToString(formula) {
25
35
  const formulaDataArray = Object.keys(formula)
26
36
  .filter((key) => {
@@ -1 +1 @@
1
- {"version":3,"file":"formula.js","sourceRoot":"","sources":["../src/formula.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formula.js","sourceRoot":"","sources":["../src/formula.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chemistry/formula",
3
- "version": "3.1.0",
3
+ "version": "3.1.2",
4
4
  "description": "Chemical formula parser",
5
5
  "type": "module",
6
6
  "author": {
@@ -14,7 +14,7 @@
14
14
  "cheminformatics"
15
15
  ],
16
16
  "engines": {
17
- "node": ">=20.0.0"
17
+ "node": ">=22.0.0"
18
18
  },
19
19
  "repository": {
20
20
  "type": "git",