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

slash-dash

v1.2.0

Published

Remove em-dashes and en-dashes and replace them with appropriate punctuation using natural language understanding

Readme

Slash-Dash

A Node.js package that removes em-dashes and en-dashes from text and replaces them with appropriate punctuation using natural language understanding.

Try it out: Playground

Installation

npm install slash-dash

Usage

import { processDash } from 'slash-dash';

const text = "The weather was perfect—sunny and warm—for our picnic.";

// Process both em-dashes (—) and en-dashes (–) - default behavior
const { processedText, meta } = await processDash(text);

console.log(processedText);
// "The weather was perfect, sunny and warm, for our picnic."

// Process only em-dashes
const { processedText: emOnly } = await processDash(text, { dashTypes: ['em'] });

// Process only en-dashes
const { processedText: enOnly } = await processDash(text, { dashTypes: ['en'] });

console.log(meta);
// [
//   {
//     index: 24,
//     replacement: ", ",
//     confidence: 0.5,
//     reason: "default_fallback",
//     contextSnippet: "..."
//   },
//   ...
// ]

Methods

processDash(text, options)

Processes text to replace em-dashes and/or en-dashes with appropriate punctuation.

Parameters:

  • text (string): The text to process
  • options (object, optional): Configuration options
    • dashTypes (string[], optional): Types of dashes to replace. Defaults to ['em', 'en']
      • 'em': Replace em-dashes (—, ---, --)
      • 'en': Replace en-dashes (–)

Returns:

  • Promise<{ processedText: string, meta: Array }>
    • processedText: The text with dashes replaced
    • meta: Array of metadata objects for each replacement, containing:
      • index: Original position of the dash
      • replacement: The punctuation used as replacement
      • confidence: Confidence score (0-1)
      • reason: Reason for the replacement
      • contextSnippet: Context around the replacement

How It Works

The package uses compromise (a JavaScript NLP library) for natural language understanding to determine the most appropriate punctuation replacement for each em-dash or en-dash.

The NLP-powered algorithm analyzes:

  • Parts of speech - identifies nouns, verbs, pronouns, determiners, and conjunctions
  • Sentence structure - detects sentence boundaries and independent clauses
  • Grammatical patterns - identifies appositives, explanations, relative clauses, and lists
  • Context clues - examines surrounding words, punctuation, and grammatical relationships
  • Clause types - recognizes independent and dependent clauses using subject-verb detection

Additional heuristics keep the output stylistically natural:

  • Mirrored clauses (e.g. “Windows rattled—hearts did too.”) preserve the dash rhythm
  • Intro adverbs & short lead-ins (e.g. “Sometimes, …”) become commas for smoother flow
  • Copular explanations (e.g. “It was a quick trip—a weekend getaway.”) elevate to colons
  • Punchy fragments (e.g. “—not this time.”, “—again.”) retain the dash emphasis

Possible replacements:

  • Commas (,) - for most general cases, lists, continuations, and dialogue
  • Periods (.) - for sentence boundaries or complete thoughts
  • Colons (:) - for introducing explanations, definitions, or appositives
  • Semicolons (;) - for connecting related independent clauses
  • Spaces - for purely decorative em-dashes

Testing

npm test

Requirements

  • Node.js >= 14.0.0

License

MIT