Skip to content

Instantly share code, notes, and snippets.

View aeinbu's full-sized avatar

Arjan Einbu aeinbu

View GitHub Profile
@aeinbu
aeinbu / .gitconfig
Last active July 29, 2021 13:39
Some practial aliases for Git
[alias]
refresh = !git fetch --all --prune && git checkout master && git pull --rebase && git lastbranch
amend = commit --amend --no-edit
lastbranch = checkout @{-1}
ql = log -10 --oneline --decorate --graph
qb = "!qb(){ git refresh && git checkout -b aei/PPN-$@; }; qb"
qc = "!qc(){ git checkout aei/PPN-$@; }; qc"
qa = "!qa(){ git refresh && git branch --remote | grep $@ | sed 's/origin\\///' | xargs git checkout && git pull --rebase && git rebase master; }; qa"
@aeinbu
aeinbu / ArjansJsTsDebugHelpers.code-snippets
Last active October 28, 2023 21:37
Snippets to aid debugging collections transformations (map/filter/reduce) and promises
{
"console.log(\"***\", ...)": {
"prefix": "conso",
"scope": "javascript,typescript,typescriptreact",
"body": [
"console.log(\"*** $1\", $0)",
""
]
},
"debug-map":{
@aeinbu
aeinbu / combinePredicates.js
Last active August 14, 2018 08:38
Combine predicates for filtering
const combinePredicates = (predicate1, predicate2, ...predicateRest) =>
(item) =>
predicate1(item) && (predicateRest.length > 0? combinePredicates(predicate2, predicateRest[0]): predicate2)(item);
// sample predicates
const exclude = (val) => (item) => item !== val;
const excludeRange = (from, to) => (item) => item < from || item > to;
// sample data
let arr = [1,2,3,4,5,6,7,8,9,10];
@aeinbu
aeinbu / wrapInReadOnlyProxy.js
Last active July 26, 2017 08:26
This method creates a read only wrapper around a javascript object, so that you can pass large object without copying them and still avoiding that they are changed.
function wrapInReadOnlyProxy(orig, throwOnSet = false) {
if (typeof orig !== "object") {
return orig;
}
return new Proxy(orig, {
get: function(target, property) {
if (property in target) {
return wrapInReadOnlyProxy(target[property]);
}
@aeinbu
aeinbu / .babelrc
Last active December 16, 2019 20:00
{
"presets": [
["@babel/preset-env", {"modules": "commonjs"}]
],
"plugins": [
["@babel/plugin-proposal-object-rest-spread", {}],
["@babel/plugin-proposal-class-properties", { "loose": false }],
["@babel/plugin-proposal-nullish-coalescing-operator"],
["@babel/plugin-proposal-optional-chaining"],
["@babel/plugin-proposal-pipeline-operator", { "proposal": "minimal" }]
@aeinbu
aeinbu / .eslintrc.json
Last active May 6, 2019 09:07
My ESLint file
module.exports = {
"env":
{
"browser": true,
"es6": true,
"node": true
},
"extends": "eslint:recommended",
"parserOptions":
{
@aeinbu
aeinbu / awaitable.js
Created April 12, 2017 11:06
Function to turn node style functions with callbacks into promises. This is useful when using async/await, since promises can be awaited upon.
// Function to turn node style functions with callbacks into promises.
// This is useful when using async/await, since promises can be awaited upon.
const callback = (resolve, reject) => (err, res) => err ? reject(err) : resolve(res);
const awaitable = async action => new Promise((resolve, reject) => action(callback(resolve, reject)))
module.exports = awaitable;
// Usage:
// const fs = require("fs");
// const awaitable = require("./awaitable");
@aeinbu
aeinbu / tasks.json
Last active October 16, 2018 12:47
Visual Studio Code task for running mocha tests with problem matcher
{
"version": "0.1.0",
"command": "mocha",
"isShellCommand": true,
"showOutput": "silent",
"args": [
"--reporter",
"tap",
"--colors"
],
const angular = require("angular");
const _ = require("lodash");
angular
.module("modulename")
.directive("componentBinder", function($compile, $parse) {
return {
restrict: "E",
scope: {
componentName: "<",
},
@aeinbu
aeinbu / array-helpers.js
Last active October 28, 2023 22:36
Array operations for useReducer or Redux with ES6+
// Returns a new array, with the element at pos replaced with replacement item or calling the replacement function on arr[pos]
function changeAtIndex(arr, pos, replacement) {
if (typeof replacement == "function") {
replacement = replacement(arr[pos]);
}
return [...arr.slice(0, pos), replacement, ...arr.slice(pos + 1)];
}
// Returns a new array, with the first element matching the predicate function replaced with replacement item or calling the replacement function on arr[pos]