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

@rashedmakkouk/dev-utils

v0.15.2

Published

Utility library.

Readme

Dev Utils

Utility library.

v0.15.0

Notable changes in v0.15.0:

  • Added decimal and precision options support to number type in random helper.
  • Updated random usage instructions in README.md.
  • Renamed toNumber option to parseNumber in toArray helper (Breaking change).
  • Refactored date argument to accept empty value in timestamp, defaults to Now.
  • Added keyExtractor helper usage instructions in README.md.
  • Added abs support to math option in toNumeric.
  • Added precision option in toNumeric.
  • Added function @returns tag and description to all helpers.
  • Code updates and enhancements.

Check out CHANGELOG.md for a full list of changes.

Installation

Install package in your project.

# NPM
npm install @rashedmakkouk/dev-utils

# Yarn
yarn add @rashedmakkouk/dev-utils

Usage

This package can be used in both the browser and Node.js projects.

Using ES6 module syntax

import { module } from '@rashedmakkouk/dev-utils';

module();

Using CommonJS syntax

const { module } = require('@rashedmakkouk/dev-utils');

module();

Methods

autolinks

Parses a text string and returns links matching:

  • Hashtag #
  • Mention @
  • URL http

Builds on autolinker with custom configuration and output.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | text | string | No | '' | Text to parse. |

Returns

  • (Object.links): Array of unique words links (e.g. mention, hashtag, url).
  • (Object.matches): Array of all matched links metadata.

Example

autolinks('The #quick brown @fox.');
// Result.
{
  links: [
    "#quick",
    "@fox"
  ],
  matches: [
    {
      "__jsduckDummyDocProp": null,
      matchedText: "#quick",
      offset: 4,
      tagBuilder: {
        newWindow: true,
        truncate: {
          length: null,
          location: "end"
        },
        className: ""
      },
      serviceName: "twitter",
      hashtag: "quick"
    },
    {
      "__jsduckDummyDocProp": null,
      matchedText: "@fox",
      offset: 17,
      tagBuilder: {
        newWindow: true,
        truncate: {
          length: null,
          location: "end"
        },
        className: ""
      },
      serviceName: "twitter",
      mention: "fox"
    }
  ]
}

delay (Promise)

Delays executions of a specified piece of code.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | ms | number | Yes | - | Duration to delay in milliseconds. | | race | boolean | No | false | If true, returns a Promise object that is rejected with status 408 Request Timeout. |

Returns

  • (Object): Returns Promise Object,.

Rejects

  • (Object): Rejects { status: 408, statusCode: 408 }.

Example

try {
  await delay(1000, true);
} catch (error) {
  // Handle rejected Promise.
}

escape

Sanitizes and formats SQL input data for safe use in MySQL query statements.

A sqlstring wrapper for convenience.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | value | Any | Yes | - | Data to escape. | | options | object | No | - | Custom options to apply. | | options.escapeId | boolean | No | false | Escapes Identifiers such as database table column names and reserved words. | | options.parseInteger | boolean | No | false | Parses values such as LIMIT and OFFSET. | | options.stripQuote | boolean | No | false | Removes quotes from result; useful for RegExp or query conditions e.g. ASC. |

Returns

  • (string): Returns escaped string.

Example

escape('abc', { stripQuote: true });
// Result.
abc

initials

Extracts the first character from the first and last words in a string.

Splits at: Splits at: white space, comma, dot, pipe, underscore, dash.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | text | string | No | '' | Text to extract characters from. |

Returns

  • (string): Returns extracted characters as string.

Example

initials('John Unknown-Doe');
// Result.
'JD'

isBase64

Validates if supplied mime type and/or base64 string are valid.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | value | string | Yes | - | Base64 value. | | options | object | No | - | Custom options to apply. | | options.allowEmpty | boolean | No | false | Returns true if value is empty. | | options.allowMime | boolean | No | false | String may include mime type. | | options.mimeRequired | boolean | No | false | String should include mime type. | | options.urlSafe | boolean | No | false | See Base64URL. |

Returns

  • (boolean): Returns 'true' if supplied string passes checks, else 'false'.

Example

isBase64('data:image/png;base64,<code>', { mimeRequired: true });
// Result.
true

isValid

Verifies if supplied payload is valid by defined type.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | isTypeof | string | Yes | - | string, array, number, object, jsonStr. | | value | Any | No | - | Data to validate. | | options | object | No | - | Custom options to apply. | | options.allowEmpty | boolean | No | false | If true, validates empty, null, undefined and 0 values as valid. |

Returns

  • (boolean): Returns true if supplied payload passes checks, else false.

Example

isValid('string', 'undefined');
// Result.
false

isValid('string', '', { allowEmpty: true });
// Result.
true

isValid('number', 'abc');
// Result.
false

isValid('number', '123');
// Result.
false

isValid('number', 0, { allowEmpty: true });
// Result.
true

isValid('number', 0);
// Result.
false

isValid('object', ['abc']);
// Result.
false

isValid('object', {}, { allowEmpty: true });
// Result.
true

joinPath

Joins a list of absolute and relative paths as a string.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | segments | Array | Yes | - | List of paths to join. | | options | object | No | - | Custom options to apply. | | options.resolve | boolean | No | false | If true, tries to resolve segments into an absolute path. |

Returns

  • (string): Returns joined path string.

Example

joinPath(['/foo', 'bar', 'baz\\abc', './def', '..']);
// Result.
'/foo/bar/baz/abc'

keyExtractor

For applications where unique keys need to be generated for elements in an array (e.g. React Native FlatList).

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | key | string | number | Yes | - | Can be any value (e.g. id, title). | | index | number | Yes | - | Element array index. |

Returns

  • (string): Returns concatenated 'key-index' string.

Example

keyExtractor('post', 2);
// Result.
'post-2'

letterCase

See Start Case for more details.

Formats supplied string to defined case.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | text | string | Yes | - | Text to format. | | options | object | Yes | - | Custom options to apply. | | options.letterCase | string | Yes | - | lower, upper, sentence, kebab, title. | | options.separators | Array | No | - | Replaces specified symbols with white space. |

Returns

  • (string): Returns formatted string.

Example

letterCase('_the   quiCK--brown     FOx_!', { letterCase: 'sentence' });
// Result.
'_The   quick--brown     fox_!'

letterCase('the #quiCK brown FOx!', { letterCase: 'kebab' });
// Result.
'the-quick-brown-fox'

// Applies custom separators if supplied, else defaults to: [_-\s]+
letterCase('_the   quiCK--brown     FOx_!', { letterCase: 'title' });
// Result.
'The Quick Brown Fox!'

ms

Parses a number representation or a string time period (e.g. 1h, 2d) to Unix Timestamp.

  • ms: millisecond.
  • s: second.
  • m: minute.
  • h: hour.
  • d: day.
  • w: week.
  • y: year.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | span | string | number | Yes | - | ms, s, m, h, d, w, y. |

Returns

  • (number): Returns time representation in milliseconds, else parses value as integer.

Example

ms('1hr');
// Result.
3600

ms('1000');
// Result.
1000

normalize

Normalizes payload by defined object attribute.

Payload data needs to be consistent and has similar data structure to avoid unexpected results, specifically defined idAttribute (e.g. results from a database query).

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | key | string | Yes | - | Object property name to move records to. | | payload | Array | object | Yes | - | Data to normalize. | | options | object | No | - | Custom options to apply. | | options.idAttribute | string | No | id | Object property name to normalize records based on. |

Returns

  • (Object.entities): Normalized records by 'key'.
  • (Object.result): Array or single value of data 'idAttributes'.

Example

// Array payload.
normalize('posts', [{ id: 1, title: 'abc' }, { id: 2, title: 'def' }], { idAttribute: 'uid' });
// Result.
{
  entities: {
    posts: {
      1: { uid: 1, title: 'abc' },
      2: { uid: 2, title: 'def' }
    },
  },
  result: [1,2]
}

// Object payload.
normalize('posts', { id: 1, title: 'abc' });
// Result.
{
  entities: {
    posts: {
      1: { id: 1, title: 'abc' }
    },
  },
  result: 1
}

parseUrl

Parses URL string segments including query string values, if any.

A url-parse wrapper for convenience and extensibility.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | url | string | Yes | - | URL to parse. |

Returns

  • (Object): Returns parsed URL object.

Example

parseUrl('https://localhost:8000/foo/bar?firstName=John&lastName=Doe');
// Result.
{
  slashes: true,
  protocol: "https:",
  hash: "",
  query: {
    firstName: "John",
    lastName: "Doe"
  },
  pathname: "/foo/bar",
  auth: "",
  host: "localhost:8000",
  port: "8000",
  hostname: "localhost",
  password: "",
  username: "",
  origin: "https://localhost:8000",
  href: "https://localhost:8000/foo/bar?firstName=John&lastName=Doe"
}

random

Generates a random string or number with customizable options.

  • filename: File names stored in databases.
  • number: Number between defined min and max (See Math.random).
  • temp: File names stored in temporary or cache locations.
  • title: Content or post random title.
  • uuid: v4.

This helper uses uuid to generate UUIDs in options filename, temp and uuid; for known issues, see Duplicate UUIDs (Googlebot).

Usage

If you are using this package in a React Native/Expo project:

  1. Install react-native-get-random-values polyfill.
  2. Add import 'react-native-get-random-values' as the first line in your index/entry point. See more details here.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | type | string | Yes | - | filename, number, title, temp, uuid. | | options | object | No | - | Custom options to apply. |

Options: number

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | options.min | number | No | 0 | If type is number, minimum value to start from. | | options.max | number | No | 1 | If type is number, maximum value to end at. | | options.decimal | boolean | No | false | Generate a random number with decimals. | | options.precision | number | No | 0 | Limit generated number decimal places. |

Options: filename, temp, title

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | options.prefix | string | No | - | Text to add to the beginning of the result. | | options.suffix | string | No | - | Text to add to the end of the result. |

Options: uuid

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | options | undefined | - | - | Argument not available for 'uuid' option. |

Returns

  • (string|number): Returns generated string or number.

Example

random('number', { min: 1000, max: 2000 });
// Result.
1784

random('number', { decimal: true, min: 10, max: 200, precision: 2 });
// Result.
97.13

random('filename', { prefix: 'post' });
// Result.
'post_2018-01-01_12-00-00_7f2a79ba-962e-4b35-96d0-28xf1d025107'

random('temp');
// Result.
'2018-01-01_12-00-00_efc7438f-0a4d-4538-af87-b6984xe04688'

random('title', { suffix: 'post' });
// Result.
'2018-01-01_12-00-00_post'

random('uuid');
// Result.
'7e0ea78d-c170-4449-93fb-f5caxb952752'

sanitize

Trims extra whitespace and removes HTML tags.

Uses: trimWhitespace

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | text | string | Yes | - | Text to trim. |

Returns

  • (string): Returns sanitized string.

Example

sanitize('<script>"the__   #quicK-- BROWN     @foX_".js</script> <html><div>Html code</div></html>');
// Result.
'the__ #quicK-- BROWN @foX_.js Html code'

singular

Trims last character if ends with 's' or replaces 'ies' with 'y'.

Not an ideal solution, but does the job for most cases.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | text | string | Yes | - | Text to convert. |

Returns

  • (string): Returns trimmed text.

Example

singular('posts');
// Result.
'post'

singular('commodities');
// Result.
'commodity'

splitArray

Splits any array to chunks by supplied size.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | array | Array | Yes | - | Data array to split. | | size | number | No | - | Size of each array chunk; bypasses split if empty. |

Returns

  • (Array): Returns new array chunks.

Example

splitArray([{ id: 1, title: 'abc' }, { id: 2, title: 'def' }]);
// Result.
[
  { "id": 1, "title": "name1" },
  { "id": 2, "title": "name2" }
]

splitArray([{ id: 1, title: 'abc' }, { id: 2, title: 'def' }], 1);
// Result.
[
  [{ "id": 1, "title": "name1" }],
  [{ "id": 2, "title": "name2" }]
]

timestamp

Parses any date value to a timestamp with predefined or custom format.

  • datetime: dddd, MMMM D at h:mA.
  • fromNow: Relative time.
  • short: ddd, MMM D.
  • sql: YYYY-MM-DD HH:mm:ss.

You can use 'format' option to provide custom date/time format.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | date | string | number | object | No | Date.now() | Date string, Date object, Unix Timestamp. | | options | object | No | - | Custom options to apply. | | options.format | string | No | DD/MM/YYYY | datetime, fromNow, short, sql, Moment. |

Returns

  • (string): Returns formatted timestamp.

Example

timestamp();
// Result.
'31/12/2022' // Date.now()

timestamp(new Date('12/31/2022'), { format: 'datetime' });
// Result.
'Saturday, December 31 at 12:00AM'

timestamp(Date(), { format: 'fromNow' });
// Result.
'a few seconds ago'

timestamp(moment('12/31/2022'), { format: 'short' });
// Result.
'Sat, Dec 31 12:00AM'

timestamp('12/31/2022 12:00', { format: 'sql' });
// Result.
'2022-12-31 12:00:00'

toArray

Converts any value to array.

Useful for multi value fields as 'group_concat'.

Uses: trimWhitespace

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | value | Any | Yes | - | Data to convert. | | options | object | No | - | Custom options to apply. | | options.separator | string | No | , | The pattern where the split should occur. | | options.parseNumber | boolean | No | false | If true, maps array values as Number. |

Returns

  • (Array): Returns new array based on supplied options.

Example

toArray('1', { parseNumber: true });
// Result.
[1]

toArray(['a', 'b', 'c']);
// Result.
['a', 'b', 'c']

toArray({ id: 1, title: 'name-1' });
// Result.
[{ id: 1, title: 'name-1' }]

toArray('1,2,3');
// Result.
['1', '2', '3']

toArray('  a-2-3  -', { parseNumber: true, separator: '-' });
// Result.
[NaN, 2, 3]

toNumeric

Converts value to and validates as 'number'.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | value | number | string | Yes | - | Number representation; if null, returns 0. | | options | object | No | - | Custom options to apply. | | options.decimal | boolean | No | true | If true, retains decimal point. | | options.math | string | No | - | 'abs', 'ceil', 'floor', 'round', 'trunc'. | | options.precision | number | No | - | If supplied, limits number decimal places. |

Returns

  • (number): Returns formatted number.

Example

toNumeric('1.3');
// Result.
1.3

toNumeric(1.3);
// Result.
1.3

toNumeric('1.3', { decimal: false });
// Result.
1

toNumeric('1.3456', { precision: 2 });
// Result.
1.35

toNumeric('1.3446', { precision: 2 });
// Result.
1.34

toNumeric('1.3', { math: 'ceil' });
// Result.
2

toNumeric(1.3, { math: 'floor' });
// Result.
1

toNumeric(['1.3', 1], { math: 'floor' });
// Result.
NaN

toNumeric({ 0: 1 });
// Result.
NaN

toRGBa

Converts color from 'keyword' (e.g. green) or 'hex' (e.g. #00FF00) to RGBa value. Useful when there is a need to apply color opacity.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | color | string | Yes | - | Can be Name or HEX code (e.g. white, #DDD). | | alpha | number | No | 1 | Set color opacity value. |

Returns

  • (string): Returns RGBa value for valid colors else 'rgba(0,0,0,alpha)'.

Example

toRGBa('purple');
// Result.
'rgba(128,0,128,1)'

toRGBa('#DDD', 0.5);
// Result.
'rgba(221,221,221,0.5)'

toRGBa('invalidColor', 0.3);
// Result.
'rgba(0,0,0,0.3)'

trimWhitespace

Removes leading and trailing spaces and replaces multiple white spaces, tabs and newlines with one space.

Parameters

| Param | Type | Required | Default | Description | |--- |--- |--- |--- |--- | | text | string | Yes | - | Text to trim. |

Returns

  • (string): Returns trimmed text.

Example

trimWhitespace('   _the   quiCK--brown     FOx !');
// Result.
'_the quiCK--brown FOx !'

Changelog

Check out CHANGELOG.md for a full list of changes.

Community

Head over to Discussions where you can ask questions, request new features or voice your ideas and suggestions.

Found a bug or you have an improvement recommendation, head over to Issues and submit a new request.

License

This package is available under the BSD 3-Clause license. It also includes external libraries that are available under a variety of licenses. See LICENSE for the full license text.