Skip to content

Instantly share code, notes, and snippets.

View compulim's full-sized avatar

William Wong compulim

View GitHub Profile
@compulim
compulim / index.js
Created December 2, 2019 03:12
Turns location.search into a JS object
const searchParams = Array.from(new URLSearchParams(location.search).entries()).reduce((result, [key, value]) => ({ ...result, [key]: value }), {});
@compulim
compulim / useLayoutEffectDebug.js
Created November 2, 2019 20:14
Debug which props changed for React Hooks
function useLayoutEffectDebug(fn, deps) {
const [lastDeps, setLastDeps] = useState([]);
useLayoutEffect(() => {
console.log({ lastDeps, deps });
lastDeps && console.log(deps.findIndex((value, index) => value !== lastDeps[index]));
setLastDeps(deps);
@compulim
compulim / index.html
Created August 26, 2019 01:46
Render SVG to download as PNG
<!DOCTYPE html>
<!-- Very unpolished, just for the very short purpose -->
<html lang="en-US">
<head>
<title>Render logo</title>
<script type="text/javascript">
(async function () {
'use strict';
const SIZE = 192;
@compulim
compulim / executePromiseScript.js
Last active July 8, 2019 19:42
selenium-webdriver.executePromiseScript
// executeAsyncScript is not running a Promise function and is not able to deal with errors.
// https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html#executeAsyncScript
// This function will use executeAsyncScript to run a Promise function in an async fashion.
export default async function executePromiseScript(driver, fn, ...args) {
const { error, result } = await driver.executeAsyncScript((fn, args, callback) => {
eval(`(${fn})`).apply(null, args).then(result => callback({ result }), error => callback({ error }));
}, fn + '', args);
if (error) {
@compulim
compulim / index.js
Created December 21, 2018 07:49
Demo: HTTP/2 + Server-Sent Events
const http2 = require('http2');
function main() {
const server = http2.createSecureServer({
cert: CERTIFICATE,
key: PRIVATE_KEY
});
server.on('error', err => console.error(err));
@compulim
compulim / asyncToDone.ts
Created July 31, 2017 17:58
ES6 Promise to Mocha/Jasmine done
function asyncToDone(task: () => Promise<any>) {
return function (done: (err?: Error) => void) {
task().then(() => done(), done);
}
}
@compulim
compulim / createDeferred.ts
Created July 31, 2017 17:57
Deferred in ES6 Promise
interface IDeferred<T> {
promise: () => Promise<T>,
resolve: (result: T) => void,
reject: (error: Error) => void
}
function createDeferred<T>(): Promise<IDeferred<T>> {
return new Promise<IDeferred<T>>(resolveCreate => {
const promise = new Promise<T>(function (resolve, reject) {
resolveCreate({ promise: () => promise, resolve, reject });