Skip to content

Instantly share code, notes, and snippets.

Kevin Smith zenparsing

Block or report user

Report or block zenparsing

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
zenparsing / a.js
Created Feb 1, 2019
Built-time macros strawman
View a.js
import { deprecated } from './macros/deprecated.js';
// Using Rust-like syntax only to make it clear these
// are macros and not "decorators"
function dontUseMeAnymore() {
eval('You wrote a bad song, Petey!');

Symbol Literals

The form @identifierName is a symbol literal. Within any single module or script, two identitical symbol literals refer to the same symbol. Two identical symbol literals in separate modules or scripts refer to different symbols. A symbol literal may appear as a propery name or as a primary expression.

When a symbol literal appears as a primary expression, it is shorthand for this.@identifierName.

When a symbol literal appears as a property name, the corresponding symbol is used as the property key during evaluation.

zenparsing / observable-take-random-n.js
Created Jan 31, 2018
Observable: Take a random number of integers
View observable-take-random-n.js
function* range(from, to) {
for (let i = from; i <= to; ++i) {
yield i;
function take(source, n) {
if (n <= 0) {
return Observable.from([]);
View combinators-with-async-generators.js
function once(el, event) {
return new Promise((resolve, reject) => {
const handler = e => {
el.removeEventListener(event, handler);
el.addEventListener(event, handler);
zenparsing / CustomEventHub.js
Last active Feb 22, 2016
A simple custom event hub for simple DOM apps
View CustomEventHub.js
let CustomEvent = window.CustomEvent;
if (typeof CustomEvent !== "function") {
// Internet Explorer
CustomEvent = function(name, options = {}) {
let {
bubbles = false,
cancelable = false,
} = options;
zenparsing / observable-to-async-iterator.js
Last active Jul 18, 2018
Observable to Async Iterator
View observable-to-async-iterator.js
Observable.prototype[Symbol.asyncIterator] = async function*() {
function promiseCapability() {
x = {};
x.promise = new Promise((a, b) => {
x.resolve = a;
x.reject = b;
return x;
zenparsing /
Last active Dec 12, 2017
Node Module Lookup Rules

ES6 Module Loading in Node.js

Guiding Principles

  • The solution must be 100% backward-compatible.
  • In the far future, developers should be able to write Node programs and libraries without knowledge of the CommonJS module system.
  • Module resolution rules should be reasonably compatible with the module resolution rules used by browsers.
  • The ability to import a legacy package is important for adoption.

Design Summary

zenparsing / combinators-with-implicit-cancel-tokens.js
Last active Feb 9, 2016
Promise-Observable Combinators with Implicit Cancel Tokens
View combinators-with-implicit-cancel-tokens.js
function takeUntil(control) {
return new Observable(next => new Promise((resolve, reject) => {
this.forEach(next).then(resolve, reject);
function switch() {
View SlotMap.js
const DELETED_TOKEN = {};
A map class, implemented with private slots, which has the following properties:
- The presence of a mapping k => v in a SlotMap does not by itself make k or v reachable
- For each mapping k => v in a SlotMap m (whether m is reachable or not), if k is reachable then v is reachable
zenparsing / promise-observable-combinators.js
Last active Feb 9, 2016
Promise Observable Combinators
View promise-observable-combinators.js
function takeUntil(control) {
return new Observable((next, cancel) => new Promise((resolve, reject) => {
this.forEach(next, cancel).then(resolve, reject);
control.forEach(resolve, cancel).catch(reject);
function switch() {
You can’t perform that action at this time.