utility
A collection of useful utilities.
Install
npm install utility
Usage
const utils = require('utility');
Also you can use it within typescript, like this ↓
import * as utils from 'utility';
md5
import { md5 } from 'utility';
md5('苏千');
md5(Buffer.from('苏千'));
md5('苏千', 'base64');
md5({foo: 'bar', bar: 'foo'}).should.equal(md5({bar: 'foo', foo: 'bar'}));
sha1
import { sha1 } from 'utility';
sha1('苏千');
sha1(Buffer.from('苏千'));
sha1('苏千', 'base64');
sha1({foo: 'bar', bar: 'foo'}).should.equal(sha1({bar: 'foo', foo: 'bar'}));
sha256
import { sha256 } from 'utility';
sha256(Buffer.from('苏千'));
hmac
import { hmac } from 'utility';
hmac('sha1', 'I am a key', 'hello world');
decode and encode
import { base64encode, base64decode, escape, unescape, encodeURIComponent, decodeURIComponent } from 'utility';
base64encode('你好¥');
base64decode('5L2g5aW977+l');
base64encode('你好¥', true);
base64decode('5L2g5aW977-l', true);
escape('<script/>"& &');
unescape('<script/>"& &amp;');
decodeURIComponent(encodeURIComponent('你好, Node.js'));
others
[WARNNING] getIP()
remove, PLEASE use https://github.com/node-modules/address
module instead.
utils.getParamNames(function (key1, key2) {});
utils.randomString(32, '1234567890');
utils.has({hello: 'world'}, 'hello');
utils.noop = function () {}
try {
utils.getParamNames(null);
} catch (err) {
console.error(err);
}
Date utils
utils.accessLogDate();
utils.logDate();
utils.YYYYMMDDHHmmssSSS();
utils.YYYYMMDDHHmmssSSS(',');
utils.YYYYMMDDHHmmss();
utils.YYYYMMDDHHmmss(new Date(), {dateSep: '.'});
utils.YYYYMMDD();
utils.YYYYMMDD('');
utils.YYYYMMDD(',');
utils.datestruct();
utils.timestamp();
utils.timestamp(1385091596);
utils.timestamp(1385091596000);
Number utils
utils.isSafeNumberString('9007199254740991');
utils.isSafeNumberString('9007199254740993');
utils.toSafeNumber('9007199254740991');
utils.toSafeNumber('9007199254740993');
utils.random(100);
utils.random(2, 1000);
utils.random();
Timeout
runWithTimeout(scope, timeout)
Executes a scope promise with a specified timeout duration. If the promise doesn't resolve within the timeout period, it will reject with a TimeoutError
.
import { runWithTimeout } from 'utility';
await runWithTimeout(async () => {
}, 1000);
map
Create a real
map in javascript.
use Object.create(null)
const map = utils.map({a: 1});
console.log(map);
String utils
utils.split('foo,bar,,,', ',');
utils.replace('<body> hi', '<body>', '$& body');
utils.replaceInvalidHttpHeaderChar('abc你好11');
Try
const res = utils.try(function () {
return JSON.parse(str);
});
Note
that when you use typescript
, you must use the following methods to call ' Try '
import { UNSTABLE_METHOD } from 'utility';
UNSTABLE_METHOD.try(...);
...
argumentsToArray
function foo() {
const arr = utils.argumentsToArray(arguments);
console.log(arr.join(', '));
}
JSON
const obj = utils.strictJSONparse('"hello"');
const pkg = utils.readJSONSync('package.json');
utils.writeJSONSync('package.json', pkg, {
replacer: null,
space: '\t',
});
Or you can use async API
async () => {
const pkg = await utils.readJSON('package.json');
await utils.writeJSON('package.json', pkg);
}
Hint: In utils.writeJSON*()
, if pkg
is an object, the optional third parameter options
may contain two
keys.
replacer
: Equals to JSON.stringify()
's second parameter;space
: Equals to JSON.stringify()
's third parameter. Defaults to 2
.
Refs:
Object.assign
utils.assign({}, { a: 1 });
utils.assign({}, [ { a: 1 }, { b: 1 } ]);
benchmark
$ node benchmark/date_format.cjs
moment().format("DD/MMM/YYYY:HH:mm:ss ZZ"): "16/Apr/2013:21:12:32 +0800"
utils.accessLogDate(): "16/Apr/2013:21:12:32 +0800"
fasterAccessDate(): "16/Apr/2013:21:12:32 +0800"
fasterAccessDate2(): "16/Apr/2013:21:12:32 +0800"
new Date().toString(): "Tue Apr 16 2013 21:12:32 GMT+0800 (CST)"
Date(): "Tue Apr 16 2013 21:12:32 GMT+0800 (CST)"
Date.now(): 1366117952162
------------------------
moment().format('DD/MMM/YYYY:HH:mm:ss ZZ') x 68,300 ops/sec ±5.05% (91 runs sampled)
utils.accessLogDate() x 1,341,341 ops/sec ±2.72% (90 runs sampled)
fasterAccessDate() x 357,833 ops/sec ±1.32% (98 runs sampled)
fasterAccessDate2() x 301,607 ops/sec ±5.03% (83 runs sampled)
new Date().toString() x 738,499 ops/sec ±3.54% (86 runs sampled)
Date() x 794,724 ops/sec ±2.77% (95 runs sampled)
Date.now() x 8,327,685 ops/sec ±1.85% (94 runs sampled)
Fastest is Date.now()
benchmark/date_YYYYMMDD.js
$ node benchmark/date_YYYYMMDD.cjs
parseInt(moment().format("YYYYMMDD"), 10): 20130416
utils.datestruct().YYYYMMDD: 20130416
new Date().toString(): "Tue Apr 16 2013 21:12:02 GMT+0800 (CST)"
------------------------
parseInt(moment().format('YYYYMMDD'), 10) x 129,604 ops/sec ±0.46% (101 runs sampled)
utils.datestruct().YYYYMMDD x 2,317,461 ops/sec ±1.38% (95 runs sampled)
new Date().toString() x 816,731 ops/sec ±3.46% (93 runs sampled)
Fastest is utils.datestruct().YYYYMMDD
License
MIT
Contributors
Made with contributors-img.