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 🙏

© 2024 – Pkg Stats / Ryan Hefner

slashes

v3.0.12

Published

Add or remove backslashes (escape or unescape).

Downloads

235,151

Readme

Slashes

Add or remove backslashes (escape or unescape).

build codecov

Getting started

import { addSlashes, removeSlashes } from 'slashes';

addSlashes(`foo\nbar`); // "foo\\nbar"
removeSlashes(`foo\\nbar`); // "foo\nbar"

Adding slashes

By default, addSlashes will escape (encode) the following characters.

  • Backspace (\b)
  • Form Feed (\f)
  • Newline (\n)
  • Carriage Return (\r)
  • Horizontal Tab (\t)
  • Vertical Tab (\v)
  • Null (\0)
  • Double Quote (")
  • Backslash (\)
const escaped = addSlashes(`\n`); // "\\n"

The default character set are characters which cannot be used between double quotes in a JSON string.

const validJsonString = `{ "key": "${escaped}" }`;

Custom encoding

Escape encoding can be customized using the getEscaped option.

The following is the default, equivalent to not setting the getEscaped option.

import { getEscapedJsonUnsafe } from 'slashes';

addSlashes('...', { getEscaped: getEscapedJsonUnsafe });

Included getEscaped implementations:

  • getEscapedJsonUnsafe - (Default) Encode characters which cannot be used between double quotes in a JSON string.
  • getEscapedAny - Encode ANY character to a single letter (eg. \n) or an ES5 Unicode (eg. \u0100) escape sequence.

A custom getEscaped receives one character (may be Unicode > 2 bytes) at a time. It can return true to use the standard escape sequence, false to not escape the character, or a string to provide a custom escape sequence (must begin with a backslash and be at least 2 characters long).

getEscaped(character: string): boolean | `\\${string}`

Removing slashes

Be default, removeSlashes will unescape (decode) all Javascript escape sequences.

// Handles letter escapes
removeSlashes(`\\n`); // "\n"
// Handles ES6 Unicode Code Point escapes
removeSlashes('\\u{a}'); // "\n"
// Handles ES5 Unicode escapes
removeSlashes('\u000a'); // "\n"
// Handles hex escapes
removeSlashes('\x0a'); // "\n"
// Handles octal escapes
removeSlashes('\12'); // "\n"
// Handles any other backslash sequence by removing the leading slash
removeSlashes(`\\a`); // "a"

Custom decoding

Although it should generally not be necessary because all escapes are handled by default, escape decoding can be customized using the getUnescaped option.

The following is the default, equivalent to not setting the getUnescaped option.

import { getUnescapedAny } from 'slashes';

removeSlashes('...', { getUnescaped: getUnescapedAny });

Included getUnescaped implementations:

  • getUnescapedAny - Decode ANY Javascript supported escape sequence.

A custom getUnescaped implementation receives the escape sequence as the first argument, and the escape sequence code point number or null (for single letter escape sequences) as the second argument. It can return true to use the standard decoding, false to treat the sequence as invalid (only removes the leading backslash), or a string (non-zero length) to provide a custom decoded value for the escape sequence.

getUnescaped(sequence: `\\${string}`, code: number | null): boolean | string