Skip to content

Instantly share code, notes, and snippets.

View doasync's full-sized avatar
🙂

Ruslan @doasync doasync

🙂
View GitHub Profile
@doasync
doasync / pino.js
Last active June 2, 2023 21:57
Pino logger: log prettyfied messages to console + log to separate files WARN, ERROR, FATAL (pino-tee module in child process)
const pino = require('pino');
const childProcess = require('child_process');
const stream = require('stream');
// Environment variables
const cwd = process.cwd();
const {env} = process;
const logPath = `${cwd}/log`;
@doasync
doasync / NameModal.jsx
Created April 28, 2020 17:46
Effector modal model
// Сам компонент модалки при этом будет выглядеть примерно так:
// ...
const onSubmit = () => {
closeModal();
saveNameAction();
};
// Component
@doasync
doasync / cached.js
Last active January 7, 2022 16:35
Create cached function (memoize)
export const cached = (fn) => {
const cache = new Map();
return function cachedFn(...args) {
const input = JSON.stringify(args);
if (cache.has(input)) {
return cache.get(input);
}
@doasync
doasync / human-format.ts
Created February 4, 2021 17:27
Human format
type ReadableConfig = {
separator?: string;
unit?: string;
formatFn?: (value: number) => string;
fractional?: boolean;
};
// Sorted from big to small
// See: https://www.bipm.org/en/measurement-units
const si = [
@doasync
doasync / round.ts
Created October 19, 2020 12:23
Round number with precision (TypeScrypt)
export const round = (number: number, fractionDigits = 0): number => {
const digits = 10 ** fractionDigits;
const value = number * digits * (1 + Number.EPSILON);
return Math.round(value) / digits;
};
@doasync
doasync / fry.js
Last active September 3, 2020 12:13
fry with interceptors
'use strict';
const queryString = (params) => {
const qs = String(new URLSearchParams(params));
return qs ? `?${qs}` : "";
};
const joinBase = (url, baseUrl) =>
`${baseUrl.replace(/\/$/, "")}/${url.replace(/^\/|\/$/, "")}/`;
@doasync
doasync / request.js
Last active May 29, 2020 10:39
Axios-like fetch
const queryString = (params) => {
const qs = String(new URLSearchParams(params));
return qs ? `?${qs}` : "";
};
const joinBase = (url, baseUrl) =>
`${baseUrl.replace(/\/$/, "")}/${url.replace(/^\/|\/$/, "")}/`;
const contentTypeJson = { "Content-Type": "application/json" };
@doasync
doasync / error-map.js
Last active May 26, 2020 11:14
Final form validators
import {
notEmpty,
booleanType,
numberType,
numberMin,
numberMax,
numberGt,
numberLt,
numberBetween,
integerType,
@doasync
doasync / mongoose.min.js
Created June 20, 2017 14:24
Browserify mongoose js version for browser from 'node_modules' npm package
var gulp = require('gulp');
var gulpSequence = require('gulp-sequence');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var browserify = require('browserify');
var uglify = require('gulp-uglify');
gulp.task('mongoose', function() {
return browserify('./node_modules/mongoose/lib/browser.js')
.bundle()
@doasync
doasync / perf.js
Last active April 8, 2019 17:51
Browser or Node.js JavaScript performance test (jsperf): for..in vs for + Object.keys vs for..of + Object.keys vs for..of + Object.entries
// Run each test in the new tab
const { performance, PerformanceObserver } = typeof window !== 'undefined' ? window : require('perf_hooks');
function test() {
let objectSize = 30;
let iterations = 7000;
const values = {
'ENTRIES': 0,
'FOR-OF-KEYS': 0,