|
1 |
| -- title: Legacy RegExp features in JavaScript |
2 |
| - id: proposal-regexp-legacy-features |
3 |
| - presented: |
4 |
| - - date: May 2017 |
5 |
| - url: >- |
6 |
| - https://github.com/tc39/notes/blob/master/meetings/2017-05/may-25.md#15ia-regexp-legacy-features-for-stage-3 |
7 |
| - has_specification: false |
8 |
| - 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. |
| 1 | +- id: proposal-regexp-legacy-features |
9 | 2 | authors:
|
10 | 3 | - Claude Pache
|
11 | 4 | champions:
|
12 | 5 | - Mark Miller
|
13 | 6 | - Claude Pache
|
| 7 | + description: >- |
| 8 | + This is a specification draft for the legacy (deprecated) RegExp features in |
| 9 | + JavaScript, i.e., static properties of the constructor like RegExp.$1 as |
| 10 | + well as the RegExp.prototype.compile method. |
| 11 | + has_specification: false |
| 12 | + presented: |
| 13 | + - date: "May\_2017" |
| 14 | + url: >- |
| 15 | + https://github.com/tc39/notes/blob/master/meetings/2017-05/may-25.md#15ia-regexp-legacy-features-for-stage-3 |
| 16 | + title: Legacy RegExp features in JavaScript |
14 | 17 | tests:
|
15 | 18 | - 'https://github.com/tc39/test262/pull/2650'
|
16 |
| -- title: Private instance methods and accessors |
17 |
| - id: proposal-private-methods |
| 19 | +- id: proposal-private-methods |
| 20 | + authors: |
| 21 | + - Daniel Ehrenberg |
| 22 | + champions: |
| 23 | + - Daniel Ehrenberg |
| 24 | + - Kevin Gibbons |
| 25 | + description: >- |
| 26 | + Keeping state and behavior private to a class lets library authors present a |
| 27 | + clear, stable interface, while changing their code over time behind the |
| 28 | + scenes. |
18 | 29 | example: |-
|
19 | 30 | class Counter extends HTMLElement {
|
20 | 31 | #xValue = 0;
|
| 32 | +
|
21 | 33 | get #x() { return #xValue; }
|
22 | 34 | set #x(value) {
|
23 | 35 | this.#xValue = value;
|
24 | 36 | window.requestAnimationFrame(this.#render.bind(this));
|
25 | 37 | }
|
| 38 | +
|
26 | 39 | #clicked() {
|
27 | 40 | this.#x++;
|
28 | 41 | }
|
| 42 | +
|
29 | 43 | constructor() {
|
30 | 44 | super();
|
31 | 45 | this.onclick = this.#clicked.bind(this);
|
32 | 46 | }
|
| 47 | +
|
33 | 48 | connectedCallback() { this.#render(); }
|
| 49 | +
|
34 | 50 | #render() {
|
35 | 51 | this.textContent = this.#x.toString();
|
36 | 52 | }
|
37 | 53 | }
|
38 | 54 | window.customElements.define('num-counter', Counter);
|
| 55 | + has_specification: true |
39 | 56 | presented:
|
40 |
| - - date: January 2019 |
| 57 | + - date: "September\_2020" |
41 | 58 | url: >-
|
42 |
| - https://github.com/tc39/notes/blob/master/meetings/2019-01/jan-30.md#private-fields-and-methods-refresher |
43 |
| - has_specification: true |
44 |
| - 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. |
| 59 | + https://github.com/tc39/notes/blob/master/meetings/2020-09/sept-23.md#status-update-for-class-fields-private-methods-static-class-features |
| 60 | + title: Private instance methods and accessors |
| 61 | + tests: |
| 62 | + - >- |
| 63 | + https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+private+methods |
| 64 | +- id: proposal-class-fields |
45 | 65 | authors:
|
46 | 66 | - Daniel Ehrenberg
|
| 67 | + - Kevin Gibbons |
47 | 68 | champions:
|
48 | 69 | - Daniel Ehrenberg
|
| 70 | + - Jeff Morrison |
| 71 | + - Kevin Smith |
49 | 72 | - Kevin Gibbons
|
50 |
| - tests: |
51 |
| - - >- |
52 |
| - https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+private+methods |
53 |
| -- title: Class Public Instance Fields & Private Instance Fields |
54 |
| - id: proposal-class-fields |
| 73 | + description: >- |
| 74 | + This proposes a combined vision for public fields and private fields, |
| 75 | + drawing on the earlier Orthogonal Classes and Class Evaluation Order |
| 76 | + proposals. |
55 | 77 | example: |-
|
56 | 78 | class X {
|
57 | 79 | #foo;
|
58 | 80 | method() {
|
59 | 81 | console.log(this.#foo)
|
60 | 82 | }
|
61 | 83 | }
|
| 84 | + has_specification: true |
62 | 85 | presented:
|
63 |
| - - date: March 2019 |
| 86 | + - date: "September\_2020" |
64 | 87 | url: >-
|
65 |
| - https://github.com/tc39/notes/blob/master/meetings/2020-03/march-31.md#add-support-for-optionalchainprivateidentifier-in-class-features-proposals |
66 |
| - has_specification: true |
67 |
| - description: This proposes a combined vision for public fields and private fields, drawing on the earlier Orthogonal Classes and Class Evaluation Order proposals. |
| 88 | + https://github.com/tc39/notes/blob/master/meetings/2020-09/sept-23.md#status-update-for-class-fields-private-methods-static-class-features |
| 89 | + title: Class Public Instance Fields & Private Instance Fields |
| 90 | + tests: |
| 91 | + - 'https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+private+fields' |
| 92 | +- id: proposal-static-class-features |
68 | 93 | authors:
|
69 | 94 | - Daniel Ehrenberg
|
70 | 95 | - Kevin Gibbons
|
71 |
| - champions: |
72 |
| - - Daniel Ehrenberg |
73 | 96 | - Jeff Morrison
|
74 | 97 | - Kevin Smith
|
75 |
| - - Kevin Gibbons |
76 |
| - tests: |
77 |
| - - 'https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+private+fields' |
78 |
| -- title: Static class fields and private static methods |
79 |
| - id: proposal-static-class-features |
| 98 | + champions: |
| 99 | + - Shu-Yu Guo |
| 100 | + - Daniel Ehrenberg |
| 101 | + description: >- |
| 102 | + A proposal to add three features to JavaScript classes, building on the |
| 103 | + previous class fields and private methods proposals. |
80 | 104 | example: |-
|
81 | 105 | class ColorFinder {
|
82 | 106 | static #red = "#ff0000";
|
83 | 107 | static #green = "#00ff00";
|
84 | 108 | static #blue = "#0000ff";
|
85 |
| -
|
| 109 | + |
86 | 110 | static colorName(name) {
|
87 | 111 | switch (name) {
|
88 | 112 | case "red": return ColorFinder.#red;
|
|
91 | 115 | default: throw new RangeError("unknown color");
|
92 | 116 | }
|
93 | 117 | }
|
94 |
| -
|
| 118 | + |
95 | 119 | // Somehow use colorName
|
96 | 120 | }
|
| 121 | + has_specification: true |
97 | 122 | presented:
|
98 |
| - - date: January 2019 |
| 123 | + - date: "September\_2020" |
99 | 124 | url: >-
|
100 |
| - https://github.com/tc39/notes/blob/master/meetings/2019-01/jan-30.md#private-fields-and-methods-refresher |
101 |
| - has_specification: true |
102 |
| - description: A proposal to add three features to JavaScript classes, building on the previous class fields and private methods proposals. |
103 |
| - authors: |
104 |
| - - Daniel Ehrenberg |
105 |
| - - Kevin Gibbons |
106 |
| - - Jeff Morrison |
107 |
| - - Kevin Smith |
108 |
| - champions: |
109 |
| - - Shu-Yu Guo |
110 |
| - - Daniel Ehrenberg |
| 125 | + https://github.com/tc39/notes/blob/master/meetings/2020-09/sept-23.md#status-update-for-class-fields-private-methods-static-class-features |
| 126 | + title: Static class fields and private static methods |
111 | 127 | tests:
|
112 | 128 | - 'https://github.com/tc39/test262/pulls?q=is%3Apr+is%3Aclosed+static+fields'
|
113 |
| -- title: Hashbang Grammar |
114 |
| - id: proposal-hashbang |
| 129 | +- id: proposal-hashbang |
| 130 | + authors: |
| 131 | + - Bradley Farias |
| 132 | + champions: |
| 133 | + - Bradley Farias |
| 134 | + description: >- |
| 135 | + This proposal is to match de-facto usage in some CLI JS hosts that allow for |
| 136 | + Shebangs / Hashbang. Such hosts strip the hashbang in order to generate |
| 137 | + valid JS source texts before passing to JS engines currently. This would |
| 138 | + unify and standardize how that is done. |
115 | 139 | example: |-
|
116 | 140 | #!/usr/bin/env node
|
117 | 141 | // in the Module Goal
|
118 | 142 | export {};
|
119 | 143 | console.log(1);
|
| 144 | + has_specification: true |
120 | 145 | presented:
|
121 |
| - - date: November 2018 |
| 146 | + - date: "November\_2018" |
122 | 147 | url: >-
|
123 | 148 | https://github.com/tc39/notes/blob/master/meetings/2018-11/nov-28.md#hash-bang-grammar
|
124 |
| - has_specification: true |
125 |
| - 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. |
126 |
| - authors: |
127 |
| - - Bradley Farias |
128 |
| - champions: |
129 |
| - - Bradley Farias |
| 149 | + title: Hashbang Grammar |
130 | 150 | tests:
|
131 | 151 | - 'https://github.com/tc39/test262/pull/2065'
|
132 |
| -- title: Top-level <code>await</code> |
133 |
| - id: proposal-top-level-await |
| 152 | +- id: proposal-top-level-await |
| 153 | + authors: |
| 154 | + - Myles Borins |
| 155 | + champions: |
| 156 | + - Myles Borins |
| 157 | + description: >- |
| 158 | + Top-level <code>await</code> enables modules to act as big async functions. |
| 159 | + With top-level <code>await</code>, ECMAScript Modules (ESM) can await |
| 160 | + resources, causing other modules who import them to wait before they start |
| 161 | + evaluating their body. |
134 | 162 | example: |-
|
135 | 163 | // file.html
|
136 | 164 | <script type=module src="a.mjs"></script>
|
| 165 | +
|
137 | 166 | // a.mjs
|
138 | 167 | await import("./b.mjs");
|
| 168 | +
|
139 | 169 | // b.mjs
|
140 | 170 | await import("./a.mjs");
|
| 171 | + has_specification: true |
141 | 172 | presented:
|
142 |
| - - date: June 2019 |
| 173 | + - date: "June\_2019" |
143 | 174 | url: >-
|
144 | 175 | https://github.com/tc39/notes/blob/master/meetings/2019-06/june-6.md#top-level-await-for-stage-3
|
145 |
| - has_specification: true |
146 |
| - description: Top-level <code>await</code> enables modules to act as big async functions. With top-level <code>await</code>, ECMAScript Modules (ESM) can await resources, causing other modules who import them to wait before they start evaluating their body. |
147 |
| - authors: |
148 |
| - - Myles Borins |
149 |
| - champions: |
150 |
| - - Myles Borins |
| 176 | + title: Top-level <code>await</code> |
151 | 177 | tests:
|
152 | 178 | - 'https://github.com/tc39/test262/pull/2274'
|
153 |
| -- title: RegExp Match Indices |
154 |
| - id: proposal-regexp-match-indices |
| 179 | +- id: proposal-regexp-match-indices |
| 180 | + authors: |
| 181 | + - Ron Buckton |
| 182 | + champions: |
| 183 | + - Ron Buckton |
| 184 | + description: >- |
| 185 | + ECMAScript RegExp Match Indicies provide additional information about the |
| 186 | + start and end indices of captured substrings relative to the start of the |
| 187 | + input string. |
155 | 188 | example: |-
|
156 | 189 | const re1 = /a+(?<Z>z)?/;
|
| 190 | +
|
157 | 191 | // indices are relative to start of the input string:
|
158 | 192 | const s1 = "xaaaz";
|
159 | 193 | const m1 = re1.exec(s1);
|
160 | 194 | m1.indices[0][0] === 1;
|
161 | 195 | m1.indices[0][1] === 5;
|
162 | 196 | s1.slice(...m1.indices[0]) === "aaaz";
|
| 197 | +
|
163 | 198 | m1.indices[1][0] === 4;
|
164 | 199 | m1.indices[1][1] === 5;
|
165 | 200 | s1.slice(...m1.indices[1]) === "z";
|
| 201 | +
|
166 | 202 | m1.indices.groups["Z"][0] === 4;
|
167 | 203 | m1.indices.groups["Z"][1] === 5;
|
168 | 204 | s1.slice(...m1.indices.groups["Z"]) === "z";
|
| 205 | +
|
169 | 206 | // capture groups that are not matched return `undefined`:
|
170 | 207 | const m2 = re1.exec("xaaay");
|
171 | 208 | m2.indices[1] === undefined;
|
172 | 209 | m2.indices.groups["Z"] === undefined;
|
| 210 | + has_specification: false |
173 | 211 | presented:
|
174 |
| - - date: December 2019 |
| 212 | + - date: "December\_2019" |
175 | 213 | url: >-
|
176 | 214 | https://github.com/tc39/notes/blob/master/meetings/2019-12/december-3.md#regexp-match-indices-performance-feedback
|
177 |
| - has_specification: false |
178 |
| - 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. |
179 |
| - authors: |
180 |
| - - Ron Buckton |
181 |
| - champions: |
182 |
| - - Ron Buckton |
| 215 | + title: RegExp Match Indices |
183 | 216 | tests:
|
184 | 217 | - 'https://github.com/tc39/test262/pull/2309'
|
185 |
| -- title: <code>Atomics.waitAsync</code> |
186 |
| - id: proposal-atomics-wait-async |
187 |
| - presented: |
188 |
| - - date: December 2019 |
189 |
| - url: >- |
190 |
| - https://github.com/tc39/notes/blob/master/meetings/2019-12/december-4.md#atomicswaitasync-for-stage-3 |
191 |
| - has_specification: true |
192 |
| - description: A proposal for an "asynchronous atomic wait" for ECMAScript, primarily for use in agents that are not allowed to block. |
| 218 | +- id: proposal-atomics-wait-async |
193 | 219 | authors:
|
194 | 220 | - Lars Hansen
|
195 | 221 | champions:
|
196 | 222 | - Shu-yu Guo
|
197 | 223 | - Lars Hansen
|
| 224 | + description: >- |
| 225 | + A proposal for an "asynchronous atomic wait" for ECMAScript, primarily for |
| 226 | + use in agents that are not allowed to block. |
| 227 | + has_specification: true |
| 228 | + presented: |
| 229 | + - date: "December\_2019" |
| 230 | + url: >- |
| 231 | + https://github.com/tc39/notes/blob/master/meetings/2019-12/december-4.md#atomicswaitasync-for-stage-3 |
| 232 | + title: <code>Atomics.waitAsync</code> |
198 | 233 | tests:
|
199 | 234 | - 'https://github.com/tc39/test262/issues/2511'
|
200 |
| -- title: <code>.at()</code> |
201 |
| - id: proposal-relative-indexing-method |
202 |
| - example: |- |
203 |
| - var list = ["apple", "orange", "banana"]; |
204 |
| - list.at(-1) // banana, using negative index |
205 |
| - list.at(0) // apple |
206 |
| - list.at(1) // orange |
207 |
| - list.at(2) // banana |
208 |
| - presented: |
209 |
| - - date: September 2020 |
210 |
| - url: item |
211 |
| - has_specification: true |
212 |
| - description: A proposal to add a <code>.at()</code> method to all the basic indexable classes (<code>Array</code>, <code>String</code>, <code>TypedArray</code>). |
| 235 | +- id: proposal-relative-indexing-method |
213 | 236 | authors:
|
214 | 237 | - Shu-yu Guo
|
215 | 238 | - Tab Atkins
|
216 | 239 | champions:
|
217 | 240 | - Shu-yu Guo
|
218 | 241 | - Tab Atkins
|
| 242 | + description: >- |
| 243 | + A proposal to add a <code>.at()</code> method to all the basic indexable |
| 244 | + classes (<code>Array</code>, <code>String</code>, <code>TypedArray</code>). |
| 245 | + example: |- |
| 246 | + function at(n) { |
| 247 | + 	// ToInteger() abstract op |
| 248 | + 	n = Math.trunc(n) || 0; |
| 249 | + 	// Allow negative indexing from the end |
| 250 | + 	if(n < 0) n += this.length; |
| 251 | + 	// OOB access is guaranteed to return undefined |
| 252 | + 	if(n < 0 || n >= this.length) return undefined; |
| 253 | + 	// Otherwise, this is just normal property access |
| 254 | + 	return this[n]; |
| 255 | + } |
| 256 | +
|
| 257 | + // Other TypedArray constructors omitted for brevity. |
| 258 | + for (let C of [Array, String, Uint8Array]) { |
| 259 | + Object.defineProperty(C.prototype, "at", |
| 260 | + { value: at, |
| 261 | + writable: true, |
| 262 | + enumerable: false, |
| 263 | + configurable: true }); |
| 264 | + } |
| 265 | + has_specification: true |
| 266 | + presented: |
| 267 | + - date: "November\_2020" |
| 268 | + url: at |
| 269 | + title: <code>.at()</code> |
219 | 270 | tests:
|
220 | 271 | - 'https://github.com/tc39/test262/pull/2812'
|
221 |
| -- title: Import Assertions |
222 |
| - id: proposal-import-assertions |
223 |
| - example: >- |
224 |
| - new Worker("foo.wasm", { type: "module", assert: { type: |
225 |
| - "webassembly" } }); |
226 |
| - presented: |
227 |
| - - date: September 2020 |
228 |
| - url: import-assertions |
229 |
| - has_specification: true |
230 |
| - description: A proposal for syntax to import ES modules with assertions. |
| 272 | +- id: proposal-import-assertions |
231 | 273 | authors:
|
232 | 274 | - Myles Borins
|
233 | 275 | - Sven Sauleau
|
|
238 | 280 | - Sven Sauleau
|
239 | 281 | - Dan Clark
|
240 | 282 | - Daniel Ehrenberg
|
| 283 | + description: A proposal for syntax to import ES modules with assertions. |
| 284 | + example: >- |
| 285 | + new Worker("foo.wasm", { type: "module", assert: { type: |
| 286 | + "webassembly" } }); |
| 287 | + has_specification: true |
| 288 | + presented: |
| 289 | + - date: "September\_2020" |
| 290 | + url: >- |
| 291 | + https://github.com/tc39/notes/blob/master/meetings/2020-09/sept-22.md#import-assertions-for-stage-3 |
| 292 | + title: Import Assertions |
0 commit comments