This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Shallow merge objects | |
*/ | |
function mergeObjectsShallow(target, ...sources) { | |
for (let i = 0; i < sources.length; i++) { | |
const source = sources[i]; | |
for (var prop in source) { | |
if (!source.hasOwnProperty(prop)) continue; | |
target[prop] = source[prop]; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const crypto = require('crypto'); | |
const path = require('path'); | |
const fs = require('fs'); | |
// Expose module | |
module.exports = { encrypt, decrypt }; | |
/** | |
* Encypt against public key | |
* @param {String} str - The string to encrypt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Used for inter-object communication. | |
* (Semi-)drop in replacement for Rik Schennink's Observer. | |
* | |
* Implementation differences: | |
* - ES6 | |
* - The use of WeakMaps | |
* - inform() and conceal() don't return a boolean indicating success. | |
* - Subscription fn's are called with seperate arguments, instead of one data parameter. This is backwards compatible. | |
* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Parent { | |
constructor() { | |
return new Promise(resolve => { | |
setTimeout(() => resolve({ data: 'important' }), 1e3); | |
}); | |
} | |
} | |
class Child extends Parent { | |
constructor() { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var MY_CONSTANT = 42 | |
// Implementation of a class | |
var MyClass = function () { | |
// constructor | |
} | |
MyClass.prototype.getAnswer = function () { | |
return MY_CONSTANT | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Run a list of async tasks as promises and wait after each batch | |
* @param {Number} batchSize - Number of tasks to run in parallel | |
* @param {Number} waitTime - Time to wait after each batch, in milliseconds | |
* @param {Array<Function>} tasks - Promise executor functions (not promise objects!) | |
* @return {Promise<Array<*>>} | |
*/ | |
function executeBatched(batchSize, waitTime, tasks) { | |
tasks = tasks.slice(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Capitalize | |
*/ | |
const capitalize = string => { | |
return string.charAt(0).toUpperCase() + string.slice(1); | |
}; | |
/** | |
* Prefix EventListener | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const map = fn => list => list.map(fn); | |
const filter = fn => list => list.filter(fn); | |
const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args))); | |
const tail = list => list.slice(1); | |
const fill = val => num => new Array(num).fill(val); | |
const getFileContents = file => require('fs').readFileSync(file, { encoding: 'utf8' }); | |
const split = char => str => str.split(char); | |
const join = char => list => list.join(char); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
const whitelist = { | |
'/static/img/photo.jpg': '/static/img/photo.webp' | |
}; | |
exports.handler = (event, context, callback) => { | |
// Grab HTTP request and it's headers | |
const request = event.Records[0].cf.request; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8"> | |
<title>Homepage</title> | |
<!-- If HTTP/1: Inline with <style>, remove this <link> --> | |
<!-- If HTTP/2: Server push this CSS file, and leave this <link> --> | |
<link rel="stylesheet" href="critical-homepage.css"> |