Skip to content

Instantly share code, notes, and snippets.

View aeinbu's full-sized avatar

Arjan Einbu aeinbu

View GitHub Profile
@aeinbu
aeinbu / chain.js
Created May 14, 2019 08:57
Helper to chain method calls while we're waiting for |> (the js pipe operator)
const chain = (obj, op = obj => obj, ...restOps) => restOps.length > 0
? chain(op(obj), ...restOps)
: op(obj);
function Deferred() {
this.resolve = null;
this.reject = null;
this.promise = new Promise((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
});
}
@aeinbu
aeinbu / wrapInDebugModeProxy.tests.ts
Created May 8, 2020 07:01
Makes new object that guards against executing methods and changing properties when not in debug mode
import { wrapInDisablerProxyFactory } from "./wrapInDebugModeProxy"
describe("Enable/disable functions", () => {
const obj = {
flipTheFlag(target) {
target.flag = true
},
inner: {
anotherFlipTheFlag(target) {
@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 / 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"
],
@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]);
}
// traditional version
function toggleValueInArray1(val, arr) {
var ix = arr.indexOf(val);
if(ix === -1){
// add to array
arr.push(val);
}
else
{
// remove from array
import ko from 'knockout';
import $ from 'jquery';
var templateFromUrlLoader = {
loadTemplate(name, templateConfig, callback) {
if (templateConfig.fromUrl) {
var fullUrl = templateConfig.fromUrl;
$.get(fullUrl, markupString => {
ko.components.defaultLoader.loadTemplate(name, markupString, callback);
});