diff --git a/_data/stage3.yml b/_data/stage3.yml
index c40db41a..6f197df1 100644
--- a/_data/stage3.yml
+++ b/_data/stage3.yml
@@ -1,57 +1,79 @@
-- title: Legacy RegExp features in JavaScript
- id: proposal-regexp-legacy-features
- presented:
- - date: May 2017
- url: >-
- https://github.com/tc39/notes/blob/master/meetings/2017-05/may-25.md#15ia-regexp-legacy-features-for-stage-3
- has_specification: false
- description: This is a specification draft for the legacy (deprecated) RegExp features in JavaScript, i.e., static properties of the constructor like RegExp.$1 as well as the RegExp.prototype.compile method.
+- id: proposal-regexp-legacy-features
authors:
- Claude Pache
champions:
- Mark Miller
- Claude Pache
+ description: >-
+ This is a specification draft for the legacy (deprecated) RegExp features in
+ JavaScript, i.e., static properties of the constructor like RegExp.$1 as
+ well as the RegExp.prototype.compile method.
+ has_specification: false
+ presented:
+ - date: "May\_2017"
+ url: >-
+ https://github.com/tc39/notes/blob/master/meetings/2017-05/may-25.md#15ia-regexp-legacy-features-for-stage-3
+ title: Legacy RegExp features in JavaScript
tests:
- 'https://github.com/tc39/test262/pull/2650'
-- title: Private instance methods and accessors
- id: proposal-private-methods
+- id: proposal-private-methods
+ authors:
+ - Daniel Ehrenberg
+ champions:
+ - Daniel Ehrenberg
+ - Kevin Gibbons
+ description: >-
+ Keeping state and behavior private to a class lets library authors present a
+ clear, stable interface, while changing their code over time behind the
+ scenes.
example: |-
class Counter extends HTMLElement {
#xValue = 0;
+
get #x() { return #xValue; }
set #x(value) {
this.#xValue = value;
window.requestAnimationFrame(this.#render.bind(this));
}
+
#clicked() {
this.#x++;
}
+
constructor() {
super();
this.onclick = this.#clicked.bind(this);
}
+
connectedCallback() { this.#render(); }
+
#render() {
this.textContent = this.#x.toString();
}
}
window.customElements.define('num-counter', Counter);
+ has_specification: true
presented:
- - date: January 2019
+ - date: "September\_2020"
url: >-
- https://github.com/tc39/notes/blob/master/meetings/2019-01/jan-30.md#private-fields-and-methods-refresher
- has_specification: true
- description: Keeping state and behavior private to a class lets library authors present a clear, stable interface, while changing their code over time behind the scenes.
+ https://github.com/tc39/notes/blob/master/meetings/2020-09/sept-23.md#status-update-for-class-fields-private-methods-static-class-features
+ title: Private instance methods and accessors
+ tests:
+ - >-
+ https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+private+methods
+- id: proposal-class-fields
authors:
- Daniel Ehrenberg
+ - Kevin Gibbons
champions:
- Daniel Ehrenberg
+ - Jeff Morrison
+ - Kevin Smith
- Kevin Gibbons
- tests:
- - >-
- https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+private+methods
-- title: Class Public Instance Fields & Private Instance Fields
- id: proposal-class-fields
+ description: >-
+ This proposes a combined vision for public fields and private fields,
+ drawing on the earlier Orthogonal Classes and Class Evaluation Order
+ proposals.
example: |-
class X {
#foo;
@@ -59,30 +81,32 @@
console.log(this.#foo)
}
}
+ has_specification: true
presented:
- - date: March 2019
+ - date: "September\_2020"
url: >-
- https://github.com/tc39/notes/blob/master/meetings/2020-03/march-31.md#add-support-for-optionalchainprivateidentifier-in-class-features-proposals
- has_specification: true
- description: This proposes a combined vision for public fields and private fields, drawing on the earlier Orthogonal Classes and Class Evaluation Order proposals.
+ https://github.com/tc39/notes/blob/master/meetings/2020-09/sept-23.md#status-update-for-class-fields-private-methods-static-class-features
+ title: Class Public Instance Fields & Private Instance Fields
+ tests:
+ - 'https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+private+fields'
+- id: proposal-static-class-features
authors:
- Daniel Ehrenberg
- Kevin Gibbons
- champions:
- - Daniel Ehrenberg
- Jeff Morrison
- Kevin Smith
- - Kevin Gibbons
- tests:
- - 'https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+private+fields'
-- title: Static class fields and private static methods
- id: proposal-static-class-features
+ champions:
+ - Shu-Yu Guo
+ - Daniel Ehrenberg
+ description: >-
+ A proposal to add three features to JavaScript classes, building on the
+ previous class fields and private methods proposals.
example: |-
class ColorFinder {
static #red = "#ff0000";
static #green = "#00ff00";
static #blue = "#0000ff";
-
+
static colorName(name) {
switch (name) {
case "red": return ColorFinder.#red;
@@ -91,143 +115,161 @@
default: throw new RangeError("unknown color");
}
}
-
+
// Somehow use colorName
}
+ has_specification: true
presented:
- - date: January 2019
+ - date: "September\_2020"
url: >-
- https://github.com/tc39/notes/blob/master/meetings/2019-01/jan-30.md#private-fields-and-methods-refresher
- has_specification: true
- description: A proposal to add three features to JavaScript classes, building on the previous class fields and private methods proposals.
- authors:
- - Daniel Ehrenberg
- - Kevin Gibbons
- - Jeff Morrison
- - Kevin Smith
- champions:
- - Shu-Yu Guo
- - Daniel Ehrenberg
+ https://github.com/tc39/notes/blob/master/meetings/2020-09/sept-23.md#status-update-for-class-fields-private-methods-static-class-features
+ title: Static class fields and private static methods
tests:
- 'https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+static+fields'
-- title: Hashbang Grammar
- id: proposal-hashbang
+- id: proposal-hashbang
+ authors:
+ - Bradley Farias
+ champions:
+ - Bradley Farias
+ description: >-
+ This proposal is to match de-facto usage in some CLI JS hosts that allow for
+ Shebangs / Hashbang. Such hosts strip the hashbang in order to generate
+ valid JS source texts before passing to JS engines currently. This would
+ unify and standardize how that is done.
example: |-
#!/usr/bin/env node
// in the Module Goal
export {};
console.log(1);
+ has_specification: true
presented:
- - date: November 2018
+ - date: "November\_2018"
url: >-
https://github.com/tc39/notes/blob/master/meetings/2018-11/nov-28.md#hash-bang-grammar
- has_specification: true
- description: This proposal is to match de-facto usage in some CLI JS hosts that allow for Shebangs / Hashbang. Such hosts strip the hashbang in order to generate valid JS source texts before passing to JS engines currently. This would unify and standardize how that is done.
- authors:
- - Bradley Farias
- champions:
- - Bradley Farias
+ title: Hashbang Grammar
tests:
- 'https://github.com/tc39/test262/pull/2065'
-- title: Top-level await
- id: proposal-top-level-await
+- id: proposal-top-level-await
+ authors:
+ - Myles Borins
+ champions:
+ - Myles Borins
+ description: >-
+ Top-level await
enables modules to act as big async functions.
+ With top-level await
, ECMAScript Modules (ESM) can await
+ resources, causing other modules who import them to wait before they start
+ evaluating their body.
example: |-
// file.html
<script type=module src="a.mjs"></script>
+
// a.mjs
await import("./b.mjs");
+
// b.mjs
await import("./a.mjs");
+ has_specification: true
presented:
- - date: June 2019
+ - date: "June\_2019"
url: >-
https://github.com/tc39/notes/blob/master/meetings/2019-06/june-6.md#top-level-await-for-stage-3
- has_specification: true
- description: Top-level await
enables modules to act as big async functions. With top-level await
, ECMAScript Modules (ESM) can await resources, causing other modules who import them to wait before they start evaluating their body.
- authors:
- - Myles Borins
- champions:
- - Myles Borins
+ title: Top-level await
tests:
- 'https://github.com/tc39/test262/pull/2274'
-- title: RegExp Match Indices
- id: proposal-regexp-match-indices
+- id: proposal-regexp-match-indices
+ authors:
+ - Ron Buckton
+ champions:
+ - Ron Buckton
+ description: >-
+ ECMAScript RegExp Match Indicies provide additional information about the
+ start and end indices of captured substrings relative to the start of the
+ input string.
example: |-
const re1 = /a+(?<Z>z)?/;
+
// indices are relative to start of the input string:
const s1 = "xaaaz";
const m1 = re1.exec(s1);
m1.indices[0][0] === 1;
m1.indices[0][1] === 5;
s1.slice(...m1.indices[0]) === "aaaz";
+
m1.indices[1][0] === 4;
m1.indices[1][1] === 5;
s1.slice(...m1.indices[1]) === "z";
+
m1.indices.groups["Z"][0] === 4;
m1.indices.groups["Z"][1] === 5;
s1.slice(...m1.indices.groups["Z"]) === "z";
+
// capture groups that are not matched return `undefined`:
const m2 = re1.exec("xaaay");
m2.indices[1] === undefined;
m2.indices.groups["Z"] === undefined;
+ has_specification: false
presented:
- - date: December 2019
+ - date: "December\_2019"
url: >-
https://github.com/tc39/notes/blob/master/meetings/2019-12/december-3.md#regexp-match-indices-performance-feedback
- has_specification: false
- description: ECMAScript RegExp Match Indicies provide additional information about the start and end indices of captured substrings relative to the start of the input string.
- authors:
- - Ron Buckton
- champions:
- - Ron Buckton
+ title: RegExp Match Indices
tests:
- 'https://github.com/tc39/test262/pull/2309'
-- title: Atomics.waitAsync
- id: proposal-atomics-wait-async
- presented:
- - date: December 2019
- url: >-
- https://github.com/tc39/notes/blob/master/meetings/2019-12/december-4.md#atomicswaitasync-for-stage-3
- has_specification: true
- description: A proposal for an "asynchronous atomic wait" for ECMAScript, primarily for use in agents that are not allowed to block.
+- id: proposal-atomics-wait-async
authors:
- Lars Hansen
champions:
- Shu-yu Guo
- Lars Hansen
+ description: >-
+ A proposal for an "asynchronous atomic wait" for ECMAScript, primarily for
+ use in agents that are not allowed to block.
+ has_specification: true
+ presented:
+ - date: "December\_2019"
+ url: >-
+ https://github.com/tc39/notes/blob/master/meetings/2019-12/december-4.md#atomicswaitasync-for-stage-3
+ title: Atomics.waitAsync
tests:
- 'https://github.com/tc39/test262/issues/2511'
-- title: .at()
- id: proposal-relative-indexing-method
- example: |-
- var list = ["apple", "orange", "banana"];
- list.at(-1) // banana, using negative index
- list.at(0) // apple
- list.at(1) // orange
- list.at(2) // banana
- presented:
- - date: September 2020
- url: item
- has_specification: true
- description: A proposal to add a .at()
method to all the basic indexable classes (Array
, String
, TypedArray
).
+- id: proposal-relative-indexing-method
authors:
- Shu-yu Guo
- Tab Atkins
champions:
- Shu-yu Guo
- Tab Atkins
+ description: >-
+ A proposal to add a .at()
method to all the basic indexable
+ classes (Array
, String
, TypedArray
).
+ example: |-
+ function at(n) {
+ // ToInteger() abstract op
+ n = Math.trunc(n) || 0;
+ // Allow negative indexing from the end
+ if(n < 0) n += this.length;
+ // OOB access is guaranteed to return undefined
+ if(n < 0 || n >= this.length) return undefined;
+ // Otherwise, this is just normal property access
+ return this[n];
+ }
+
+ // Other TypedArray constructors omitted for brevity.
+ for (let C of [Array, String, Uint8Array]) {
+ Object.defineProperty(C.prototype, "at",
+ { value: at,
+ writable: true,
+ enumerable: false,
+ configurable: true });
+ }
+ has_specification: true
+ presented:
+ - date: "November\_2020"
+ url: at
+ title: .at()
tests:
- 'https://github.com/tc39/test262/pull/2812'
-- title: Import Assertions
- id: proposal-import-assertions
- example: >-
- new Worker("foo.wasm", { type: "module", assert: { type:
- "webassembly" } });
- presented:
- - date: September 2020
- url: import-assertions
- has_specification: true
- description: A proposal for syntax to import ES modules with assertions.
+- id: proposal-import-assertions
authors:
- Myles Borins
- Sven Sauleau
@@ -238,3 +280,13 @@
- Sven Sauleau
- Dan Clark
- Daniel Ehrenberg
+ description: A proposal for syntax to import ES modules with assertions.
+ example: >-
+ new Worker("foo.wasm", { type: "module", assert: { type:
+ "webassembly" } });
+ has_specification: true
+ presented:
+ - date: "September\_2020"
+ url: >-
+ https://github.com/tc39/notes/blob/master/meetings/2020-09/sept-22.md#import-assertions-for-stage-3
+ title: Import Assertions