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

@theothergothamdev/pluralize-ts

v1.1.0

Published

Pluralize and singularize any word

Downloads

73

Readme

Pluralize-TS

NPM version NPM downloads

build codecov

A TypeScript port of the popular pluralize library - Pluralize and singularize any word with full type safety.

This is a TypeScript fork of the original pluralize library, modernized with full type definitions, ESM support, and modern testing infrastructure.

Features

  • 📦 Full TypeScript support with accurate type definitions
  • 🚀 ESM and CommonJS dual package
  • ✨ Modern build tooling with esbuild
  • 🧪 Comprehensive test suite using Vitest
  • 💪 Same powerful API as the original, now with type safety

Installation

# npm
npm install @theothergothamdev/pluralize-ts

# yarn
yarn add @theothergothamdev/pluralize-ts

# pnpm
pnpm add @theothergothamdev/pluralize-ts

Usage

ESM

import pluralize from "@theothergothamdev/pluralize-ts";

pluralize("test"); //=> "tests"
pluralize("test", 0); //=> "tests"
pluralize("test", 1); //=> "test"
pluralize("test", 5); //=> "tests"
pluralize("test", 1, true); //=> "1 test"
pluralize("test", 5, true); //=> "5 tests"

CommonJS

const pluralize = require("@theothergothamdev/pluralize-ts").default;

API

The library exports a default function with additional methods:

// Main function
pluralize(word: string, count?: number, inclusive?: boolean): string

// Additional methods
pluralize.plural(word: string): string
pluralize.singular(word: string): string
pluralize.isPlural(word: string): boolean
pluralize.isSingular(word: string): boolean

// Add custom rules
pluralize.addPluralRule(rule: string | RegExp, replacement: string): void
pluralize.addSingularRule(rule: string | RegExp, replacement: string): void
pluralize.addIrregularRule(single: string, plural: string): void
pluralize.addUncountableRule(word: string | RegExp): void

Examples

// Basic usage
pluralize("test"); //=> "tests"
pluralize("test", 1); //=> "test"
pluralize("test", 5); //=> "tests"
pluralize("test", 1, true); //=> "1 test"

// Custom rules
pluralize.addPluralRule(/gex$/i, "gexii");
pluralize.plural("regex"); //=> "regexii"

pluralize.addSingularRule(/singles$/i, "singular");
pluralize.singular("singles"); //=> "singular"

pluralize.addIrregularRule("irregular", "regular");
pluralize.plural("irregular"); //=> "regular"

pluralize.addUncountableRule("paper");
pluralize.plural("paper"); //=> "paper"

// Check word form
pluralize.isPlural("tests"); //=> true
pluralize.isSingular("test"); //=> true

Development

# Install dependencies
pnpm install

# Build the library
pnpm build

# Run tests
pnpm test

# Run tests with watch mode
pnpm test:watch

# Run tests with UI
pnpm test:ui

# Generate coverage report
pnpm test:coverage

# Lint
pnpm lint

# Format
pnpm format

Project Structure

src/
├── __tests__/          # Test files
│   ├── fixtures/       # Test data
│   ├── unit/          # Unit tests
│   └── pluralize.test.ts
├── core/              # Core functionality
├── utils/             # Utility functions
├── types/             # TypeScript types
└── index.ts          # Main entry point

Why This Fork?

This fork modernizes the original pluralize library by:

  1. Adding full TypeScript support with proper type definitions
  2. Modernizing the build system with esbuild
  3. Updating the testing infrastructure to use Vitest
  4. Supporting both ESM and CommonJS
  5. Maintaining the same powerful API while adding type safety

License

MIT

Original project by Blake Embrey