<h3 align="center">
  <a href="https://www.zakodium.com">
    <img src="https://www.zakodium.com/brand/zakodium-logo-white.svg" width="50" alt="Zakodium logo" />
  </a>
  <p>
    Maintained by <a href="https://www.zakodium.com">Zakodium</a>
  </p>
</h3>

NB: migrated from https://github.com/cheminfo/jcampconverter/commit/be9f772a7b852a1ca0cd7f00efce278f6413b67e

# JCAMP-DX converter

[![NPM version][npm-image]][npm-url]
[![npm download][download-image]][download-url]
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5091526.svg)](https://doi.org/10.5281/zenodo.5091526)

Parse and convert JCAMP-DX data.

## Installation

```shell
npm install jcampconverter
```

## Methods

### `convert(jcamp, [options])`

Converts the `jcamp` using `options`.  
Returns an object with information about the converted file and uncompressed spectra data.

**Arguments**

- `jcamp` - String or ArrayBuffer containing the JCAMP-DX data
- `options` - Object with options to pass to the converter

**Options**

- keepRecordsRegExp - regexp to select which records should be placed in the info field. By default: :/^\$/} (nothing is kept)
- withoutXY - do not parse XYDATA or PEAKTABLE fields. Useful to only extract metadata fields (combine this option with `keepRecordsRegExp`)
- chromatogram - use the new GC/MS data format output (default: false)
- canonicDataLabels - canonize data labels (uppercase) (default: true).
- canonicMetadataLabels - canonize data labels (uppercase) (default: false).
- dynamicTyping - When parsing field convert to number if a number (default: true)

2D NMR options:

- noContour - if true, the contour levels will not be generated. Instead the raw data will be available in `result.minMax.z` (default: false)
- nbContourLevels - number of contour levels to use in each positive and negative sides (default: 7)
- noiseMultiplier - default: 5
- keepSpectra - Generate array for 2D NMR spectra (default: false)

### Use as a module

#### Node.js

```javascript
var converter = require('jcampconverter');
var jcamp = require('fs').readFileSync('path/to/jcamp.dx', 'utf8');

var result = converter.convert(jcamp);

// if there is only one spectrum it will be in
console.log(result.flatten[0]);

// the converter will also keep the full jcamp tree
```

## Testing and build

```console
npm install
npm test
npm run build
```

## Benchmark

```console
npm run benchmark
```

## License

© 2025 Zakodium Sàrl. This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. [CC BY-NC-SA 4.0](./LICENSE)

This package is based on MIT-licensed code that can be found here: https://doi.org/10.5281/zenodo.5091526

[npm-image]: https://img.shields.io/npm/v/jcampconverter.svg
[npm-url]: https://npmjs.org/package/jcampconverter
[download-image]: https://img.shields.io/npm/dm/jcampconverter.svg
[download-url]: https://npmjs.org/package/jcampconverter
