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

slugify-ts

v1.1.0

Published

slugify-ts is a customizable TypeScript function that transforms any string into a URL-friendly slug.

Downloads

330

Readme

slugify-ts

slugify-ts is a customizable TypeScript function that transforms any string into a URL-friendly slug. It handles:

  • Removing unwanted characters.
  • Transliteration of Unicode characters (e.g., ü, é, ñ) into their closest ASCII equivalents (e.g., ue, e, n).
  • Optional truncation, with smart truncation to avoid cutting off words awkwardly.
  • Emoji handling: you can either remove emojis or replace them with their textual descriptions.
  • Timestamp appending.

Features

  • Customizable substitutions: Customize specific character or string replacements.
  • Unicode transliteration: Convert Unicode characters to their closest ASCII equivalents.
  • Smart truncation: Intelligently truncate strings at word boundaries.
  • Timestamp appending: Optionally append a timestamp to the slug.
  • Full TypeScript support: Includes type definitions for safety and ease of use.

Basic usage

import slugify from 'slugify-ts';

const result = slugify('Héllo Wörld!');
console.log(result);  // Output: 'hello-world'

Options

You can customize the behavior of slugify by passing an options object as the second argument:

type SlugifyOptions = {
  customSubstitutions?: Substitution;
  charSubstitutions?: Substitution;
  maxLength?: number;
  enableSmartTruncate?: boolean;
  lowercase?: boolean;
  appendTimestamp?: boolean;
};

** Example with options **

const options: SlugifyOptions = {
  customSubstitutions: { '&': 'and' },  // Replace & with 'and'
  charSubstitutions: { 'ö': 'oe' },    // Replace ö with 'oe'
  maxLength: 20,                       // Limit the length to 20 characters
  enableSmartTruncate: true,           // Enable smart truncation
  lowercase: true,                     // Convert slug to lowercase
  appendTimestamp: true,               // Append a timestamp
};

const slug = slugify('Héllo & Wörld!', options);
console.log(slug);  // Output: 'hello-and-woerld-1635789123'

Options explained

customSubstitutions

Custom string replacements. For example, replace & with and, @ with at, etc.

customSubstitutions: {
  '&': 'and',
  '@': 'at',
}

charSubstitutions

Character-specific substitutions. For example, replace ö with oe, ü with ue.

charSubstitutions: {
  'ö': 'oe',
  'ü': 'ue',
}

maxLength

Limits the length of the resulting slug. If enableSmartTruncate is set to true, the string will be truncated intelligently at a word boundary. If enableSmartTruncate is set to false, truncation will occur at exactly maxLength characters. Default is 0 (no limit).

enableSmartTruncate

If true, the slug will be truncated at a word boundary instead of in the middle of a word when maxLength is reached.

lowercase

If true, the resulting slug will be converted to lowercase.

appendTimestamp

If true, a timestamp will be appended to the slug.

Further Plans

  1. Add custom uniencode function: Plan to support Unicode-to-ASCII mappings more comprehensively, covering special characters and diacritics in various languages.
  2. Add better emoji support, right now it only removes emojis.
  3. Add more language support
  4. Add more tests

PRs are welcome!