Skip to content

Instantly share code, notes, and snippets.

Ron Buckton rbuckton

Block or report user

Report or block rbuckton

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
View uid.grammarkdown
//
// Lexical Grammar
//
SourceCharacter::
> Any unicode code point
WhiteSpace::
<TAB>
<VT>
View decorators-again.md

Decorators, Take 4

A decorator is a function that returns a series of "hooks":

function dec() {
  return [
    { register(klass) { } },
    { register(target, key) { } },
    { wrap(f) { return f; } },
    { initialize(target, key, value) { } },
View temporal.d.ts
declare type DateUnit = "year" | "month" | "day";
declare type DateDelta = "years" | "months" | "weeks" | "days";
declare type TimeUnit = "hour" | "minute" | "second" | "millisecond" | "nanosecond";
declare type TimeDelta = "hours" | "minutes" | "seconds" | "milliseconds" | "nanoseconds";
declare type InstantUnit = "milliseconds" | "nanoseconds";
declare type InstantDelta = "milliseconds" | "nanoseconds";
declare type Components<Unit extends string> = Partial<Record<Unit, number>>;
// Represents either a fixed-offset time-zone, the SYSTEM time-zone, or a regional (IANA) time-zone.
declare class Zone {
static readonly Z: Zone;
View jslinq.md

Language-integrated Query syntax for ECMAScript

This is a strawman for an advanced generator-comprehension syntax for ECMAScript based in the LINQ syntax. The syntax allows for custom semantics for evaluation, as each clause in a query is translated into regular function calls for special symbol-named methods that are evaluated if found on the sequence (see Abstract Operations for more information).

Examples

View friend.js
const friendship = new WeakMap();
function friend(ref granteeClass) {
return function (descriptor) {
descriptor.finisher = (granterClass) => {
let info = friendship.get(granterClass);
if (!info) {
const names = descriptor.elements
.filter(element => element.name instanceof PrivateName)
.reduce((map, element) => map.set(element.name.description, element.name), new Map());
View ClassProperty.md

Introduction

This is a strawman for the inclusion of a new ClassProperty syntax:

class C {
  static f() { ... }
  
  g() {
    class.f();
@rbuckton
rbuckton / freezeDecorator.js
Created Mar 2, 2018
A rough outline for a userland `@Freeze` decorator that does not require "instance finishers".
View freezeDecorator.js
//
// definition
//
// marker used to indicate a constructor is a freeesing constructor (see below).
const marker = new WeakSet();
export function freeze(descriptor) {
// save the previous constructor
const previousConstructor = descriptor.constructor;
View linkedListAccessibilitySyntax.js
export class LinkedList {
#head;
#size;
get first() { return this.#head; }
get last() { return this.#head !== undefined ? this.#head.LinkedListNode#previous : undefined; }
get size() { return this.#size; }
addLast(value) {
return this.#insertBefore(this.#head, new LinkedListNode(value), /*replaceHead*/ false);
View linkedListAccessibilityDecorators.js
const nodeFriend = new FriendKey();
export class LinkedList {
#head;
#size;
get first() { return this.#head; }
get last() { return this.#head !== undefined ? nodeFriend.get(this.#head, "#previous") : undefined; }
get size() { return this.#size; }
View protectedState.md
You can’t perform that action at this time.