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

stringman-utils

v1.8.0

Published

A collection of utility functions for string manipulation, unit conversion, precision math, and more.

Downloads

162

Readme

Stringman Utils

Stringman-Utils is a collection of 320 small helper scripts that can be imported individually. While most of the functionality within the scripts is farily simple to write, the value of using Stringman-Utils is comes from not having to figure out how to write it. Note that TypeScript types are included as well.

Some of the functionality provided:

  • several modules centered around regular expressions for finding, replacing, removing, etc from a given string
    • brackets, email addresses, ip addresses, numbers, parenthesis, quotes, URLs, whitespace, and more
  • several unit conversion modules that utilize Big.js to provide accurate conversions without having to look up formulas
    • unit conversions include area, clock rate, data rate, data storage, distance, speed, temperature, volume, and weight
  • estimated reading time of a blog/article, word counts, etc
  • color unit conversions and tools
    • HSL, hex, rgb, change color luminance, and more
  • some style helpers
  • an exported class that provides currency formatting functionality and internationalization
  • modules for changing string case, validating password complexity, working with semantic versions, and more
  • much more

Note that any conversion modules have the option to return a string instead of a number. This is to enable extended numeric values beyond the normal constraints of JavaScript. JavaScript limits decimals to 16 digits before it begins to return a rounded result or exponential notation. Passing the optional arg for a string return in the conversion modules will allow you to get returned strings with 30 places of precision on either side of the decimal!

example:

9 * 1111111111111111; // 10000000000000000 (it will round)
precisionMathMultiply(9, 1111111111111111, true); // '9999999999999999' (it will not round)

9 / 1111111111111111; // 8.100000000000001e-15 (it will return exponentional notation)
precisionMathDivide(9, 1111111111111111); // '0.0000000000000081' (it will return a regular float as a string)

This is useful when using the conversion functions if you need extreme accuracy and precision. The usage of Big.js also means that the functions are not prone to JavaScript's weird/inaccurate behavior sometimes experienced with floating point math.

Install

npm i stringman-utils

You can view this on npm here.

Usage

Utility functions can be imported individually and usage couldn't be more straightforward.

Example:

import { whitespaceRemoveBreaks } from 'stringman-utils';
// or
const whitespaceRemoveBreaks = require('stringman-utils').whitespaceRemoveBreaks;

const removed = whitespaceRemoveBreaks('this line\n has a\r dumb amount of\n line breaks');
console.log(removed); // 'this line has a dumb amount of line breaks'

Another example:

import { emailIsValid } from 'stringman-utils';
// or
const emailIsValid = require('stringman-utils').emailIsValid;

const valid = emailIsValid('[email protected]');
const invalid = emailIsValid('test-test.me');
console.log(valid); // true
console.log(invalid); // false

Features

Nothing this library does is particularly difficult to do, but it is meant to save you time and headaches.

Need to pull an email address out of a string? Want to see what a value in feet would be in kilometers? Maybe you need to calculate a reading time for a blog? Stringman-Utils can do all of these things for you and much more.

Basically, this library has a lot of regular expressions for string manipulation, do some small css style calculations, and lots of unit conversions. I also exposed the functions inside of the precisionMath file I use for the unit conversion calculations which you can use for your own math functions. There are plans to grow the feature set in the future.

For a full list of functionality, check the documentation.

Dependencies

Big.js is the only external dependency right now. The reason for using it is to provide mathematical precision seeing that JavaScript tends to perform poorly with floating point values. Big.js helps to correct this issue providing accurate calculations.

Background

This project started as a repo/npm library called "stringman" because it was centered around string manipulation. I decided I didn't like how I had the tests and dev environment setup and wanted to add more to it. Because I'm terrible at naming things, I simply added "Utils" to the end of it because it has grown to basically become a collection of utilities.

Design

  • Every function is exported individually so they can be imported individually. The functions are kept small as well. This means you only import what you need and it will keep your bundle size small.
  • Every file is focused on a certain type of functionality and all function within the files are camel case and prefixed with a common word in an attempt to create a better mental model of the library and make it easier to use code completion wihin your editor. For example, every function that has to do with manipulating whitespace is prefixed with whitespace. Maybe you have a string that might have extra spaces that need to be removed. You can call whitespaceSingleSpace to do this. If you want to remove line breaks, call whitespaceRemoveBreaks. You get the idea.
  • TypeScript types are included.
  • There are basic usage examples for each function in the documentation. There are also units tests for every function if you want to look at the source code.

Links

More Examples

Stringman-utils has hundreds of helper functions that can be imported individually so you only have exactly what you need in your bundle. For a complete list, check out the documentation in the link above. Here are just a few more examples of the types of functions available (function names listed to demonstrate naming convention):

  • convert miles to meters -> distanceMilesToMeters
  • convert acres to square yds -> areaSquareMilesToSquareYards
  • swap out strings inside square brackets with a different string -> bracketsSwap
  • change any cased string to camel case -> caseCamelCase
  • convert a hex color code to rgb -> colorHexToRgb
  • convert MB to bytes -> dataStorageMbToB
  • instantiate a class that auto formats currency to the locale passed when instantiated -> CurrencyUtils
  • verify is a string is a valid email address -> emailIsValid
  • retrieve an IP address from a string -> ipRetrieve
  • convert a number to hexidecimal -> numberConvertToHex
  • retrieve any strings inside of parenthesis -> parensRetrieve
  • create a custom minimum password complexity check as a regular expression -> passwordBuildRegex
  • perform precise multiplication without the normal JavaScript floating point inaccuracies -> precisionMathMultiply
  • change double quotes to single quotes -> quotesDoubleToSingle
  • check that string is a valid semantic version -> semverIsValid
  • convert any speed to the percentage of the speed of light -> speedPercentSpeedOfLight
  • get pixel value for REM -> styleConvertRemToPixels
  • convert celcius to kelvin temperatures -> tempCelciusToKelvin
  • get the domain from a URL -> urlGetDomain
  • convert gallons to liters -> volumeGallonsToLiters
  • convert metric tonnes to pounds -> weightTonnesToLbs
  • fix a string with extra spaces to only be single spaced -> whitespaceSingleSpace
  • get a count of how many times a particualr word is in a string -> wordSpecificWordCount