Skip to content

Instantly share code, notes, and snippets.

@nemtsov
nemtsov / server.js
Created February 27, 2018 06:38
Start two node servers in one
/* eslint no-console: 0 */
const { fork, spawn } = require('child_process');
const web = fork(`${__dirname}/web.js`);
web.on('close', code => process.exit(code));
if (process.env.NODE_ENV === 'development') {
const api = spawn('nodemon', ['--watch', 'server', '--ext', 'js,gql,json', 'server/api.js']);
api.stdout.on('data', data => process.stdout.write(data));
api.stderr.on('data', data => process.stderr.write(data));
@nemtsov
nemtsov / idToBucketTest.js
Last active February 21, 2018 19:26
Node.js test that uses adler32 to hash a string and place it in a random bucket. This can be used in split-testing to consistently place a user id into a specific test variant.
const crypto = require('crypto');
function getId() {
return crypto.randomBytes(12).toString('hex');
}
//----------------
function adler32(str) {
let s1 = 1;
@nemtsov
nemtsov / passport-auth-with-reset.js
Last active August 27, 2025 13:54
Passport auth with password reset
const crypto = require('crypto');
const { promisify } = require('util');
const express = require('express');
const asyncify = require('express-asyncify');
const session = require('express-session');
const createFileStore = require('session-file-store');
const nodemailer = require('nodemailer');
const nodemailerSendgrid = require('nodemailer-sendgrid');
const bodyParser = require('body-parser');
const pass = require('passport');
@nemtsov
nemtsov / server.js
Created January 27, 2018 06:35
Minimm (semi)Viable Web Auth
const express = require('express');
const asyncify = require('express-asyncify');
const session = require('express-session');
const createFileStore = require('session-file-store');
const bodyParser = require('body-parser');
const csurf = require('csurf')
const templates = require('./templates');
const PORT = 5000;
const SESSION_COOKIE_SECRET = 'minimum viable web auth secret';
@nemtsov
nemtsov / build__base.js
Last active August 31, 2017 14:34
Sample webpack configuration to demonstrate a non-descriptive error message for an incorrect "dependencies"
module.exports = {
context: `${__dirname}/../js`,
output: {
pathinfo: true,
filename: '[name].js',
path: `${__dirname}/../dist`
}
};
@nemtsov
nemtsov / index-result.js
Created May 31, 2017 16:05
fast-async test
Function.prototype.$asyncbind = function $asyncbind(self, catcher) {
"use strict";
if (!Function.prototype.$asyncbind) {
Object.defineProperty(Function.prototype, "$asyncbind", {
value: $asyncbind,
enumerable: false,
configurable: true,
writable: true
});
const usedKeys = {};
const unusedPaths = [];
const proxyData = new Proxy(data, {
get(target, name) {
usedKeys[name] = true;
return target[name];
},
});
(function iterate(data, path) {
Object.keys(data).forEach((key) => {
@nemtsov
nemtsov / remove-unused-imports.js
Last active January 22, 2025 15:17
A jscodeshift to remove unused imports
module.exports = (file, api, options) => {
const j = api.jscodeshift;
const printOptions = options.printOptions || {quote: 'single'};
const root = j(file.source);
const requires = {};
const filterAndTransformRequires = path => {
const varName = path.value.local.name;
const scopeNode = path.parentPath.scope.node;
(function (modules) {
var installedModules = {};
function require(moduleId) {
if (installedModules[moduleId]) return installedModules[moduleId].exports;
var module = installedModules[moduleId] = {i: moduleId, l: false, exports: {}};
modules[moduleId].call(module.exports, module, module.exports, require);
module.l = true;
return module.exports;
}
require(1);
@nemtsov
nemtsov / loadScript.js
Created August 11, 2016 21:26
Minimal JS script loader
export default function loadScript(src, cb) {
var doc = document, tag = 'script', el, firstScript;
el = doc.createElement(tag);
firstScript = doc.getElementsByTagName(tag)[0];
el.async = 1;
el.src = src;
el.onload = function() { cb(null); };
el.onerror = function() { cb(new Error('failed to load: ' + src)) };
firstScript.parentNode.insertBefore(el, firstScript);
}