Leadfisher common library
Installation
npm i leadutils --save
Usage
- The module divided into submodules, for example here you can see work with submodule
time.
const utils = require('leadutils');
console.log(utils.time.prettify('h:m:s / D.M|Y', new Date()));
Modules
Time module | .time
- (prettify) Return date in any string format
prettify(format: string, date?: Date | string | number) => string;
const utils = require('leadutils');
utils.time.prettify('h:m:s / D.M|Y', new Date());
utils.time.prettify('h-m-s.i', new Date());
- (duration) Return duration in ms from string
function duration(time: string): number;
const utils = require('leadutils');
utils.time.duration('5s');
utils.time.duration('24h');
utils.time.duration('1d');
utils.time.duration('1d 1h 1m 5s');
- (compare) Create any dates compare functions
const utils = require('leadutils');
utils.time.compare((a, b) => a > b)('2023-05-07', '2023-05-08');
utils.time.compare((a, b) => a > b)('2023-01-01', '2021-05-08');
- (formatDuration) Make seconds in more readable format
const utils = require('leadutils');
utils.time.formatDuration(1000);
utils.time.formatDuration(60000);
utils.time.formatDuration(60001);
utils.time.formatDuration(90000);
- (divideDuration) Get a divided ms by all day time measurements object
const utils = require('leadutils');
utils.time.divideDuration(new Date());
utils.time.divideDuration(90020);
- (datesDiff) Return difference between two dates in any time measurement
const utils = require('leadutils');
let tomorrow = new Date(new Date().setDate(new Date().getDate() + 1));
utils.time.datesDiff(new Date(), tomorrow);
utils.time.datesDiff(new Date(), tomorrow, 'hour');
Parallel programming module | .pp
(Semaphore) for limit concurrency accessing limited resource
class Semaphore(concurrency: number, size?: number, timeout?: number){
empty: boolean;
enter: Promise<boolean>;
leave: void;
}
Different utils module | .utils
const utils = require('leadutils');
utils.array.shuffle([1, 2, 3]);
- (sample) Get sample from array
const utils = require('leadutils');
utils.array.sample([1, 2, 3]);
utils.array.sample([1, 2, 3]);
utils.array.sample([1, 2, 3]);
- (range) Creates array from range
const utils = require('leadutils');
utils.array.range(4, 7);
- (random) Generate a random number
const utils = require('leadutils');
utils.utils.random(0, 5);
utils.utils.random(0, 5);
- (equals) Deep equals for any type of values
const utils = require('leadutils');
utils.utils.equals(0, 0);
utils.utils.equals('test', 'test');
utils.utils.equals([1, 2], [1, 2]);
utils.utils.equals([1, 2], [1, 2, 3]);
utils.utils.equals({ a: true, b: { foo: true } }, { a: true, b: { foo: true } });
utils.utils.equals({ a: true, b: { foo: true } }, { a: true, b: { foo: true, bar: true } });
- (prettyBytes) Return more readable bytes format
const utils = require('leadutils');
utils.utils.prettyBytes(10000000);
utils.utils.prettyBytes(1);
- (mostPerformant) Select fastest method
const utils = require('leadutils');
utils.utils.mostPerformant([() => 1 + 2, () => 1 * 2, () => 1 / 2, () => 1 - 2]);
- (timeTaken) Log execution time
const utils = require('leadutils');
utils.utils.timeTaken((a, b) => a + b)(2 + 3);
Async programming module | .async
function delay(msec: number, signal?: EventEmitter): Promise<void>;
function timeout(msec: number, signal?: EventEmitter): Promise<void>;
- (delay) Promise resolve after provided msec, with abort controller
const utils = require('leadutils');
utils.async.delay('10s').then(() => console.log('after delay'));
- (timeout) Promise resolve if signal was passed in provided ms, else reject
function delay(msec: number, signal?: EventEmitter): Promise<void>;
const utils = require('leadutils');
utils.async.delay('10s').then(() => console.log('after delay'));
Network utils module | .net
- (receiveBody) Stream body receiver
function receiveBody(stream: IncomingMessage): Promise<Buffer | null>;
- (createXML) Create XML response
const utils = require('leadutils');
const xmlBody = utils.net
.createXML()
.add({ loc: 'https://leadfisher.ru/', priority: 1, time: '2022-04-12' })
.add({ loc: 'https://leadfisher.ru/test', priority: 0.4, time: '2022-04-10' }).get;
- (intIP) Get ip integer interpretation
const utils = require('leadutils');
utils.net.intIP('127.0.0.1');
- (parseCookie) Parse cookie from string
const utils = require('leadutils');
let cookie = 'test=123;';
utils.net.parseCookie(cookie);
- (removePort) Parse cookie from string
const utils = require('leadutils');
utils.net.removePort('https://leadfisher.ru/api/test');
String manipulations utils | .string
- (escape, escapeHTML, unescapeHTML) Escape unfriendly characters
const utils = require('leadutils');
utils.string.escape('https://leadfisher.ru');
utils.string.escapeHTML('<script>alert("leadfisher !");</script>');
utils.string.unescapeHTML('<script>alert("leadfisher !");<script>');
- (template) String templates
const utils = require('leadutils');
const template = utils.string.template`Hello ${'put_here'} !`;
template({ put_here: 'Alex' });
template({ put_here: 'Admin' });
- (yesNo) Parse user answers
const utils = require('leadutils');
utils.string.yesNo('yes');
utils.string.yesNo('y');
utils.string.yesNo('n');
utils.string.yesNo('');
- (words) Parse all words from string
const utils = require('leadutils');
utils.string.words('Hello word!');
- (reverse) String or Array reverse
const utils = require('leadutils');
utils.string.reverse('Hello word!');
utils.string.reverse([1, 2, 3]);
- (phonePrettify, phonePurify, normalizeEmail) Phone manipulations utils
const utils = require('leadutils');
utils.string.phonePrettify('79999999999');
utils.string.phonePurify('+7 (999) 999-99-99');
utils.string.normalizeEmail('Test@MAIL.domain', 'Test@mail.domain');
- (fileExt, fileName) System path manipulation utils
const utils = require('leadutils');
utils.string.fileExt('/home/user/index.js');
utils.string.fileName('/home/user/index.js');
- (toString, fromString, isValidJSON, jsonParse) String parsers
jsonParse and fromString are both safe parsers
const utils = require('leadutils');
utils.string.toString(1);
utils.string.toString(true);
utils.string.toString(undefined);
utils.string.fromString('test');
utils.string.toString({ foo: { boo: true } });
utils.string.fromString('1');
utils.string.fromString('true');
utils.string.fromString('undefined');
utils.string.fromString('test');
utils.string.fromString('{"foo": { "boo": true }}');
utils.string.isValidJSON('{}');
utils.string.jsonParse('{}');
utils.string.jsonParse('');
utils.string.jsonParse(123);
utils.string.isValidJSON({});
Objects manipulation utils | .obj
- (deepClone) Clone object with all nested objects, no reference copies
const utils = require('leadutils');
const test = { foo: { boo: { bar: 2 } } };
const copy = utils.obj.deepClone(test);
copy.foo.boo.bar = 0;
console.dir(test.foo.boo, copy.foo.boo);
- (deepFreeze) Freeze Object with all nested objects
const utils = require('leadutils');
const test = { foo: { boo: { bar: 2 } } };
utils.obj.deepFreeze(test);
test.foo.boo.bar = 0;
console.dir(test.foo.boo);
- (deepFlatten) Put nested array items in root array
const utils = require('leadutils');
const test = [[1, 2, 3], [4, 5], 6, 7];
utils.obj.deepFlatten(test);
- (deepFlattenObject) Put all nested objects properties in root object
const utils = require('leadutils');
const test = { foo: { boo: { bar: 2 } } };
utils.obj.deepFlattenObject(test);
- (dig) Search for properties deep inside object
const utils = require('leadutils');
const test = { foo: { boo: { bar: 2 } } };
const bar = utils.obj.dig('bar', test);
console.dir(bar);
Object orientated programming | .oop
- (setDefault) Overload operator
[] to return default value if key not fount in object
const utils = require('leadutils');
const test = { foo: { boo: { bar: 2 } } };
const bar = utils.oop.setDefault(test, 'not found');
console.log(bar['some key']);
- (defineGetter) Add getter to object
const utils = require('leadutils');
const test = { foo: { boo: { bar: 2 } } };
const bar = utils.oop.defineGetter(test)('key', () => 'value');
console.dir(bar.key);
- (defineSetter) Add setter to object
const utils = require('leadutils');
const test = { foo: { boo: { bar: 2 } } };
const bar = utils.oop.defineSetter(test)('key', value => console.log(value));
bar.key = 3;
- (mixin) Mix two objects together, with optimization
const utils = require('leadutils');
const test = { foo: { boo: { bar: 2 } } };
utils.oop.mixin(test, { bus: { foo: 4 }, foo: 3 });
Functional programming | .fp
- (pipe, pipeAsync) Combine multiple functions into one
const utils = require('leadutils');
const pipeMagic = utils.fp.pipe(
v => v + 1,
v => v * 3,
v => console.log(v),
);
pipeMagic(0);
- (curry) Function call after all arguments have been provided
const utils = require('leadutils');
const test = utils.fp.curry((a, b, c, d) => a + b + c + d);
test(1)(2)(3, 4);
- (once) Limit count of function calls to single one
const utils = require('leadutils');
const test = utils.fp.once((a, b, c, d) => a + b + c + d);
test(1, 2, 3, 4);
test(1, 2, 3, 4);
- (times) Call function multiple times
const utils = require('leadutils');
const ctx = { count: 0 };
utils.fp.times(5, (ctx, i) => (ctx.count += i), ctx);
- (memoize) Cache wrapper for functions
const utils = require('leadutils');
const test = utils.fp.memoize((a, b, c, d) => a + b + c + d);
test(1, 2, 3, 4);
test(1, 2, 3, 4);
- (chain) Chain functions to custom context, after all calls returns provided context
const utils = require('leadutils');
const ctx = { counter: 0 };
const chain = utils.fp.chain(ctx);
ctx.add = chain(v => (chain += v));
ctx.add(1).add(2).add(3).add(4).counter;
- (debounce) It ensures that one notification is made for an event that fires multiple times.
const utils = require('leadutils');
const debounceTest = utils.fp.debounce(() => console.log('Working'), 1000);
debounceTest();
debounceTest();
setTimeout(() => debounceTest(), 1000);
- (throttle) It will reduce the notifications of an event that fires multiple times.
const utils = require('leadutils');
const throttleTest = utils.fp.throttle(() => console.log('Working'), 1000);
throttleTest();
throttleTest();
setTimeout(() => throttleTest(), 1000);
Crypto utils | .crypto
- (hashPassword) Asynchronous password hashing
const utils = require('leadutils');
utils.crypto.hashPassword('secret').then(hash => console.log(hash));
- (validatePassword) Asynchronous password validation
const utils = require('leadutils');
const hash =
'$scrypt$N=32768,r=8,p=1,maxmem=67108864$wgAA6YiiNmz2iJUx6kAvjh+cSZc7pbCvQW7r5Z2fWbs$gN84NkBtXtwoL3LZXMJEjeLoRlNjyZUV5joX+Fedk5bhE6cK2mcwpRVJV5ymcGq66NSNXAB63duDWS1eCbO3hA';
utils.crypto.validatePassword('secret', hash).then(flag => console.log(flag));
utils.crypto.validatePassword('hacker', hash).then(flag => console.log(flag));
Copyright & contributors
Copyright © 2023 Leadfisher contributors.
Leadutils is MIT licensed license.
Leadutils is one of leadfisher solutions.