npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

msp-parser

v0.1.0

Published

Parse the mass .msp format

Readme

msp-parser

NPM version build status Test coverage npm download

Parse the mass .msp format.

It is being used for the MassBank and NIST database releases.

Installation

$ npm i msp-parser

This package is ESM-only. CommonJS consumers need Node.js ≥ 20.19, ≥ 22.12 or any 24.x and later (where require() of ESM works), or should migrate to import.

Usage

parseMSP accepts the content of a .msp file as a string, an ArrayBuffer or a typed array, and returns one MeasurementXY per entry: meta holds the Key: value header lines and variables.x / variables.y hold the m/z and relative intensity of the peaks.

import { parseMSP } from 'msp-parser';

const result = parseMSP(mspText);

// result[0].meta.Name -> 'Pyrophen'
// result[0].variables.x.data -> [91.0542, 125.0233, ...]
// result[0].variables.y.data -> [245, 999, ...]

A field that appears several times in one entry — Synon is the usual case — is collected into an array, in the order it was encountered, so no value is lost.

// result[1].meta.Synon -> ['F2 Toxin', '(2E,11S)-15,17-dihydroxy-...']

Iterating over a large library

A NIST release holds more than 50000 spectra per file. mspIterator yields the entries one at a time instead of building the whole array:

import { mspIterator } from 'msp-parser';

for (const entry of mspIterator(mspText)) {
  console.log(entry.meta.Name, entry.variables.x.data.length);
}

Dialects

Both layouts of the peak list are supported: one pair per line as MassBank writes it (91.0542 245), and several pairs packed on one line separated by semicolons as NIST writes it (12 108; 13 229; 14 999;).

NIST also packs the two registry numbers on a single line; they are returned as two separate fields:

CAS#: 1333-74-0;  NIST#: 245692
// entry.meta['CAS#']  -> '1333-74-0'
// entry.meta['NIST#'] -> '245692'

Only a semicolon followed by something shaped like a field label starts a new field, so a value that merely contains semicolons — such as the extra CAS numbers NIST stores as Synon: $:24156457-45-3; 263005-65-8 — is kept whole. Keys are split on their first colon, so a value containing a colon (a name such as 14,15:21,23-diepoxy-...) is preserved.

License

MIT