Skip to content

Instantly share code, notes, and snippets.

View tracker1's full-sized avatar

Michael J. Ryan tracker1

View GitHub Profile
@tracker1
tracker1 / cancelable-promise.js
Created July 8, 2017 00:26
JavaScript Cancelable Promise
var CancelablePromise = (function(){
var cancelledPromiseSymbol = Symbol('PROMISE_CANCELLED');
function createTypeError(message) {
var error = new TypeError(message);
var stack = error.stack.split('\n');
stack.splice(1, 1);
stack[1] = stack[1].replace(/:\d+:\d+\)$/, ')');
error.stack = stack.join('\n');
throw error;
@tracker1
tracker1 / node6 .babelrc
Last active August 10, 2017 20:44
babel plugins for node 8.x + stage-2
{
"presets": [
[
"env",
{
"loose": true,
"targets": {
"node": "6.10.3"
}
}
@tracker1
tracker1 / index.js
Last active May 3, 2018 16:35
node process and cleanup
// logger - https://gist.github.com/tracker1/655be1ac690d23988816a48d52e91550
import log from './logger';
async function main() {
// TODO: main processes
}
let cleanedUp = false;
async function cleanup(error) {
if (error) log.fatal(error);
@tracker1
tracker1 / logger.js
Last active March 27, 2019 18:59
Console Logger for node.js
import console from 'console';
import process from 'process';
import util from 'util';
import fclone from 'fclone';
import rollingFile from 'rolling-file';
import mkdirp from 'mkdirp';
import { packageBase } from './pkg';
export const LEVELS = Object.seal({
FATAL: 1000,
@tracker1
tracker1 / encoding-detection.js
Last active April 20, 2017 21:49
iconv-lite encoding detection
// TODO: add process.nextTick foo so that this doesn't block as long
import iconv from 'iconv-lite';
// UTF8 BOM - 0xEF, 0xBB, 0xBF
// UTF16 BOM - 0xFE, 0xFF
// UTF16le BOM = 0xFF, 0xFE
export default async function readTextFromBuffer(buffer) {
if (!(buffer instanceof Buffer)) throw new Error('Input is not a buffer');
@tracker1
tracker1 / debounce.js
Last active September 16, 2018 14:13
Async Generator Stream debounce in JS
// for reference:
// https://www.bignerdranch.com/blog/asyncing-feeling-about-javascript-generators/
// https://gist.github.com/nybblr/3af62797052c42f7090b4f8614b5e157#gistcomment-2044311
const destreamify = async (stream, callback) => {
for await (let event of stream) {
callback(event);
}
};
@tracker1
tracker1 / settings.js
Created February 22, 2017 18:57
My vscode user settings for OSX
{
// Enable/disable JavaScript validation.
// using eslint plugin instead
"javascript.validate.enable": false,
"files.autoSave": "off",
"editor.tabSize": 2,
"editor.fontFamily": "Inconsolata, Menlo, Monaco, 'Courier New', monospace",
@tracker1
tracker1 / normalize-to-string.js
Created February 9, 2017 01:11
prehash password
export default function normalizeToString(input) {
// string or String object
if (typeof input === 'string' || input instanceof String) return input.toString();
// boolean value
if (typeof input === 'boolean') return input.toString();
// numeric value
if (typeof input === 'number' || input instanceof Number) {
// not a finite value - invalid input - return empty
@tracker1
tracker1 / npm-scripts_pretest.js
Created January 25, 2017 01:27
Node.js PreTest script
const path = require('path');
const glob = require('glob');
const base = path.resolve(__dirname, '../');
const allScripts = glob.sync(path.join(__dirname, '../src') + '/**/*.js');
const tests = allScripts.filter(s => (/\.test\.js$/).test(s));
const scripts = allScripts.filter(s => !(/\.(test|disabled|unsafe)\./).test(s));
const untested = scripts.filter(s => !tests.includes(s.replace(/\.js$/,'.test.js')));
@tracker1
tracker1 / newW2.js
Last active June 8, 2016 06:39 — forked from joetemp/newW2.js
const request = require('request-promise');
const moment = require('moment');
const getId = url => request(url).then(b => JSON.parse(b).data);
function getSoonItems(deal, type) {
return deals.filter(deal => (
deal.stage_id === app && deal[type.key] === type.refi ||
deal.stage_id === app && deal[type.key] === type.purchase && deal[pbl.key] === pbl.no
)).reduce((obj, deal) => { ...obj, [deal.id]:deal });