Skip to content

Instantly share code, notes, and snippets.

View wkronemeijer's full-sized avatar
🧼

Wessel Kronemeijer wkronemeijer

🧼
  • 13:38 (UTC +02:00)
View GitHub Profile
@wkronemeijer
wkronemeijer / Scourge.cjs
Created September 4, 2023 22:49
Moves the normal layout of a Path of Exile hideout to the scourged version, and vice versa.
const { readFileSync, writeFileSync } = require("fs");
const { resolve } = require("path");
const FlippedBit = 0b1000_0000;
const ScourgedBit = 0b0100_0000;
const VariationBitMask = 0b0011_1111;
function check(condition, message = "assertion failed") {
if (!condition) {
console.error(message);
@wkronemeijer
wkronemeijer / almost-adt.ts
Last active June 18, 2016 17:53
ES6 Module for creating what can be considered **almost** ADTs.
export interface InstanceConstructor<
/**Enum */ E,
/**Shared properties */ S,
/**Unique properties */ T
> {
/**Create new instance */
(diffs?: S & T): S & T;
/**Type guard for destructuring */
typecheck(object: {}): object is S & T;
/**For introspection, and to make IntelliSense work */
@wkronemeijer
wkronemeijer / setKeyValue.js
Last active June 18, 2016 17:53
set key value paths for javascript
function setKeyValue(object, path, value) {
var prop_cont_pair = path.split('.');
var prop = prop_cont_pair[0];
var cont = prop_cont_pair.slice(1).join('.');
if (cont === '') {
object[prop] = value;
} else {
if(typeof object[prop] === 'undefined') {
object[prop] = {};
@wkronemeijer
wkronemeijer / getKeyValue.js
Last active June 18, 2016 17:53
key value paths for javascript
function getKeyValue(object, path, default_value){
"use strict"
if (typeof object === 'undefined') {
return default_value;
}
let prop_cont_pair = path.split('.');
let prop = prop_cont_pair[0];
let cont = prop_cont_pair.slice(1).join('.');
@wkronemeijer
wkronemeijer / accessor.js
Last active June 18, 2016 17:52
A convenience function when you have a list of records and need only a member; index $1 with the property of choice and map it over the collection to obtain a list of members.
const $1 = new Proxy({}, {
get(target, key) {
return x => x[key];
}
});
@wkronemeijer
wkronemeijer / Object#extend
Created November 2, 2013 22:39
extend arbitrary classes with your prepoerties; this works just like the Backbone.js variant, but is now situated under Object.
Object.defineProperty(Object.prototype, 'extend', {value: function (proto_props) {
var child = proto_props.hasOwnProperty('constructor') ?
proto_props.constructor :
function () {child.__super__.constructor.apply(this, arguments);};
child.prototype = Object.create(this.prototype);
child.prototype.constructor = child;
Object.keys(proto_props).forEach(function (key) {
@wkronemeijer
wkronemeijer / method
Last active December 27, 2015 06:28
save three keystrokes every time
function method(obj, func) {
if (func.name !== "" && func.name !== 'anonymous') {
obj.prototype[func.name] = func;
};
};
@wkronemeijer
wkronemeijer / gist:7281274
Created November 2, 2013 17:22
custom EventTargets à la the DOM variant.
CustomEventTarget = (function () {
function CustomEventTarget() {
if (!(this instanceof CustomEventTarget)) {
return new CustomEventTarget();
};
Object.defineProperty(this, '_listeners_', {
value: {}
});
};
method(CustomEventTarget, 'addEventListener', function (type, func) {
@wkronemeijer
wkronemeijer / __module
Created November 2, 2013 16:51
simple augmentation module system for javascript. usage:
function __module(base, name, func) {
if (typeof base[name] === 'undefined') {
base[name] = {};
}
func(base[name]);
}
//usage:
// __module(window.MyModule, 'namespace', function (exports) {
// exports.sayHello = function () {
@wkronemeijer
wkronemeijer / call_super
Created October 23, 2013 15:22
super for any object with a prototype chain; usage: call_super(this, 'method')('hello', 'world')
window.call_super = function call_super(obj, name) {
var super_class = Object.getPrototypeOf(Object.getPrototypeOf(obj));
return (function () {
super_class[name].apply(obj, arguments);
})
}