
Security News
pnpm 11.5 Adds Support for Recognizing npm Staged Publishes
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.
@rashedmakkouk/dev-utils
Advanced tools
Utility library.
Notable changes in v0.15.0:
decimal and precision options support to number type in random
helper.README.md.toNumber option to parseNumber in toArray helper (Breaking change).date argument to accept empty value in timestamp, defaults to Now.README.md.abs support to math option in toNumeric.precision option in toNumeric.@returns tag and description to all helpers.Check out CHANGELOG.md for a full list of changes.
Install package in your project.
# NPM
npm install @rashedmakkouk/dev-utils
# Yarn
yarn add @rashedmakkouk/dev-utils
This package can be used in both the browser and Node.js projects.
import { module } from '@rashedmakkouk/dev-utils';
module();
const { module } = require('@rashedmakkouk/dev-utils');
module();
autolinksParses a text string and returns links matching:
Builds on autolinker with custom configuration and output.
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
text | string | No | '' | Text to parse. |
(Object.links): Array of unique words links (e.g. mention, hashtag, url).(Object.matches): Array of all matched links metadata.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.
| 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. |
(Object): Returns Promise Object,.(Object): Rejects { status: 408, statusCode: 408 }.try {
await delay(1000, true);
} catch (error) {
// Handle rejected Promise.
}
escapeSanitizes and formats SQL input data for safe use in MySQL query statements.
A sqlstring wrapper for convenience.
| 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. |
(string): Returns escaped string.escape('abc', { stripQuote: true });
// Result.
abc
initialsExtracts the first character from the first and last words in a string.
Splits at: Splits at: white space, comma, dot, pipe, underscore, dash.
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
text | string | No | '' | Text to extract characters from. |
(string): Returns extracted characters as string.initials('John Unknown-Doe');
// Result.
'JD'
isBase64Validates if supplied mime type and/or base64 string are valid.
| 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. |
(boolean): Returns 'true' if supplied string passes checks, else 'false'.isBase64('data:image/png;base64,<code>', { mimeRequired: true });
// Result.
true
isValidVerifies if supplied payload is valid by defined type.
| 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. |
(boolean): Returns true if supplied payload passes checks, else false.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
joinPathJoins a list of absolute and relative paths as a string.
| 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. |
(string): Returns joined path string.joinPath(['/foo', 'bar', 'baz\\abc', './def', '..']);
// Result.
'/foo/bar/baz/abc'
keyExtractorFor applications where unique keys need to be generated for elements in an array (e.g. React Native FlatList).
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
key | string | number | Yes | - | Can be any value (e.g. id, title). |
index | number | Yes | - | Element array index. |
(string): Returns concatenated 'key-index' string.keyExtractor('post', 2);
// Result.
'post-2'
letterCaseSee Start Case for more details.
Formats supplied string to defined case.
| 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. |
(string): Returns formatted string.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!'
msParses a number representation or a string time period (e.g. 1h, 2d) to Unix Timestamp.
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
span | string | number | Yes | - | ms, s, m, h, d, w, y. |
(number): Returns time representation in milliseconds, else parses value as integer.ms('1hr');
// Result.
3600
ms('1000');
// Result.
1000
normalizeNormalizes 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).
| 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. |
(Object.entities): Normalized records by 'key'.(Object.result): Array or single value of data 'idAttributes'.// 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
}
parseUrlParses URL string segments including query string values, if any.
A url-parse wrapper for convenience and extensibility.
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Yes | - | URL to parse. |
(Object): Returns parsed URL object.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"
}
randomGenerates a random string or number with customizable options.
This helper uses uuid to generate UUIDs in options filename, temp and uuid; for
known issues, see Duplicate UUIDs (Googlebot).
If you are using this package in a React Native/Expo project:
import 'react-native-get-random-values' as the first line in your index/entry point. See
more details here.| Param | Type | Required | Default | Description |
|---|---|---|---|---|
type | string | Yes | - | filename, number, title, temp, uuid. |
options | object | No | - | Custom options to apply. |
| 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. |
| 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. |
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
options | undefined | - | - | Argument not available for 'uuid' option. |
(string|number): Returns generated string or number.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'
sanitizeTrims extra whitespace and removes HTML tags.
Uses: trimWhitespace
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
text | string | Yes | - | Text to trim. |
(string): Returns sanitized string.sanitize('<script>"the__ #quicK-- BROWN @foX_".js</script> <html><div>Html code</div></html>');
// Result.
'the__ #quicK-- BROWN @foX_.js Html code'
singularTrims last character if ends with 's' or replaces 'ies' with 'y'.
Not an ideal solution, but does the job for most cases.
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
text | string | Yes | - | Text to convert. |
(string): Returns trimmed text.singular('posts');
// Result.
'post'
singular('commodities');
// Result.
'commodity'
splitArraySplits any array to chunks by supplied size.
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
array | Array | Yes | - | Data array to split. |
size | number | No | - | Size of each array chunk; bypasses split if empty. |
(Array): Returns new array chunks.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" }]
]
timestampParses any date value to a timestamp with predefined or custom format.
You can use 'format' option to provide custom date/time format.
| 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. |
(string): Returns formatted timestamp.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'
toArrayConverts any value to array.
Useful for multi value fields as 'group_concat'.
Uses: trimWhitespace
| 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. |
(Array): Returns new array based on supplied options.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]
toNumericConverts value to and validates as 'number'.
| 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. |
(number): Returns formatted number.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
toRGBaConverts color from 'keyword' (e.g. green) or 'hex' (e.g. #00FF00) to RGBa value. Useful when there is a need to apply color opacity.
| 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. |
(string): Returns RGBa value for valid colors else 'rgba(0,0,0,alpha)'.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)'
trimWhitespaceRemoves leading and trailing spaces and replaces multiple white spaces, tabs and newlines with one space.
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
text | string | Yes | - | Text to trim. |
(string): Returns trimmed text.trimWhitespace(' _the quiCK--brown FOx !');
// Result.
'_the quiCK--brown FOx !'
Check out CHANGELOG.md for a full list of changes.
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.
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.
FAQs
Utility library.
The npm package @rashedmakkouk/dev-utils receives a total of 12 weekly downloads. As such, @rashedmakkouk/dev-utils popularity was classified as not popular.
We found that @rashedmakkouk/dev-utils demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.

Security News
Federal audit finds NIST lacked a plan to clear the NVD backlog, wasted funds on duplicate work, and delayed use of CISA data.

Research
/Security News
A mini Shai-Hulud campaign compromised Red Hat Cloud Services npm packages to steal developer and CI/CD secrets during installation.