chrome-devtools-frontend 1.0.1014346 → 1.0.1014853

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35,245 +35,311 @@ export const GLOBAL_ATTRIBUTES = new Set([
35
35
  * The "applicable" members for certain "states" that WebIDL types can be in.
36
36
  * In other words, some members are "valid" only valid in certain situations:
37
37
  * for example, with the HTML input element, the set of valid members are
38
- * determined by the "type" attribute.
38
+ * determined by the "type" property.
39
39
  */
40
- export const VALID_MEMBERS = {
40
+ export const APPLICABLE_MEMBERS = {
41
41
  // https://html.spec.whatwg.org/multipage/input.html#input-type-attr-summary
42
- HTMLInputElement: {
43
- '[type=hidden]': new Set([
44
- 'autocomplete',
45
- 'value',
46
- ]),
47
- '[type=text]': new Set([
48
- 'autocomplete',
49
- 'dirname',
50
- 'list',
51
- 'maxlength',
52
- 'minlength',
53
- 'pattern',
54
- 'placeholder',
55
- 'readonly',
56
- 'required',
57
- 'size',
58
- 'value',
59
- 'list',
60
- 'selectionstart',
61
- 'selectionend',
62
- 'selectiondirection',
63
- ]),
64
- '[type=search]': new Set([
65
- 'autocomplete',
66
- 'dirname',
67
- 'list',
68
- 'maxlength',
69
- 'minlength',
70
- 'pattern',
71
- 'placeholder',
72
- 'readonly',
73
- 'required',
74
- 'size',
75
- 'value',
76
- 'list',
77
- 'selectionstart',
78
- 'selectionend',
79
- 'selectiondirection',
80
- ]),
81
- '[type=url]': new Set([
82
- 'autocomplete',
83
- 'list',
84
- 'maxlength',
85
- 'minlength',
86
- 'pattern',
87
- 'placeholder',
88
- 'readonly',
89
- 'required',
90
- 'size',
91
- 'value',
92
- 'list',
93
- 'selectionstart',
94
- 'selectionend',
95
- 'selectiondirection',
96
- ]),
97
- '[type=tel]': new Set([
98
- 'autocomplete',
99
- 'list',
100
- 'maxlength',
101
- 'minlength',
102
- 'pattern',
103
- 'placeholder',
104
- 'readonly',
105
- 'required',
106
- 'size',
107
- 'value',
108
- 'list',
109
- 'selectionstart',
110
- 'selectionend',
111
- 'selectiondirection',
112
- ]),
113
- '[type=email]': new Set([
114
- 'autocomplete',
115
- 'list',
116
- 'maxlength',
117
- 'minlength',
118
- 'multiple',
119
- 'pattern',
120
- 'placeholder',
121
- 'readonly',
122
- 'required',
123
- 'size',
124
- 'value',
125
- 'list',
126
- ]),
127
- '[type=password]': new Set([
128
- 'autocomplete',
129
- 'maxlength',
130
- 'minlength',
131
- 'pattern',
132
- 'placeholder',
133
- 'readonly',
134
- 'required',
135
- 'size',
136
- 'value',
137
- 'selectionstart',
138
- 'selectionend',
139
- 'selectiondirection',
140
- ]),
141
- '[type=date]': new Set([
142
- 'autocomplete',
143
- 'list',
144
- 'max',
145
- 'min',
146
- 'readonly',
147
- 'required',
148
- 'step',
149
- 'value',
150
- 'valueasdate',
151
- 'valueasnumber',
152
- 'list',
153
- ]),
154
- '[type=month]': new Set([
155
- 'autocomplete',
156
- 'list',
157
- 'max',
158
- 'min',
159
- 'readonly',
160
- 'required',
161
- 'step',
162
- 'value',
163
- 'valueasdate',
164
- 'valueasnumber',
165
- 'list',
166
- ]),
167
- '[type=week]': new Set([
168
- 'autocomplete',
169
- 'list',
170
- 'max',
171
- 'min',
172
- 'readonly',
173
- 'required',
174
- 'step',
175
- 'value',
176
- 'valueasdate',
177
- 'valueasnumber',
178
- 'list',
179
- ]),
180
- '[type=time]': new Set([
181
- 'autocomplete',
182
- 'list',
183
- 'max',
184
- 'min',
185
- 'readonly',
186
- 'required',
187
- 'step',
188
- 'value',
189
- 'valueasdate',
190
- 'valueasnumber',
191
- 'list',
192
- ]),
193
- '[type=datetime-local]': new Set([
194
- 'autocomplete',
195
- 'list',
196
- 'max',
197
- 'min',
198
- 'readonly',
199
- 'required',
200
- 'step',
201
- 'value',
202
- 'valueasnumber',
203
- 'list',
204
- ]),
205
- '[type=number]': new Set([
206
- 'autocomplete',
207
- 'list',
208
- 'max',
209
- 'min',
210
- 'placeholder',
211
- 'readonly',
212
- 'required',
213
- 'step',
214
- 'value',
215
- 'valueasnumber',
216
- 'list',
217
- ]),
218
- '[type=range]': new Set([
219
- 'autocomplete',
220
- 'list',
221
- 'max',
222
- 'min',
223
- 'step',
224
- 'value',
225
- 'valueasnumber',
226
- 'list',
227
- ]),
228
- '[type=color]': new Set([
229
- 'autocomplete',
230
- 'list',
231
- 'value',
232
- ]),
233
- '[type=checkbox]': new Set([
234
- 'checked',
235
- 'required',
236
- 'checked',
237
- 'value',
238
- ]),
239
- '[type=radio]': new Set([
240
- 'checked',
241
- 'required',
242
- 'checked',
243
- 'value',
244
- ]),
245
- '[type=file]': new Set([
246
- 'accept',
247
- 'multiple',
248
- 'required',
249
- 'files',
250
- 'value',
251
- ]),
252
- '[type=submit]': new Set([
253
- 'formaction',
254
- 'formenctype',
255
- 'formmethod',
256
- 'formnovalidate',
257
- 'formtarget',
258
- 'value',
259
- ]),
260
- '[type=image]': new Set([
261
- 'alt',
262
- 'formaction',
263
- 'formenctype',
264
- 'formmethod',
265
- 'formnovalidate',
266
- 'formtarget',
267
- 'height',
268
- 'src',
269
- 'width',
270
- 'value',
271
- ]),
272
- '[type=reset]': new Set([
273
- 'value',
274
- ]),
275
- '[type=button]': new Set([
276
- 'value',
277
- ]),
278
- },
42
+ HTMLInputElement: [
43
+ {
44
+ rule: {when: 'type', is: 'hidden'},
45
+ members: new Set([
46
+ 'autocomplete',
47
+ 'value',
48
+ ])
49
+ },
50
+ {
51
+ rule: {when: 'type', is: 'text'},
52
+ members: new Set([
53
+ 'autocomplete',
54
+ 'dirname',
55
+ 'list',
56
+ 'maxlength',
57
+ 'minlength',
58
+ 'pattern',
59
+ 'placeholder',
60
+ 'readonly',
61
+ 'required',
62
+ 'size',
63
+ 'value',
64
+ 'list',
65
+ 'selectionstart',
66
+ 'selectionend',
67
+ 'selectiondirection',
68
+ ])
69
+ },
70
+ {
71
+ rule: {when: 'type', is: 'search'},
72
+ members: new Set([
73
+ 'autocomplete',
74
+ 'dirname',
75
+ 'list',
76
+ 'maxlength',
77
+ 'minlength',
78
+ 'pattern',
79
+ 'placeholder',
80
+ 'readonly',
81
+ 'required',
82
+ 'size',
83
+ 'value',
84
+ 'list',
85
+ 'selectionstart',
86
+ 'selectionend',
87
+ 'selectiondirection',
88
+ ])
89
+ },
90
+ {
91
+ rule: {when: 'type', is: 'url'},
92
+ members: new Set([
93
+ 'autocomplete',
94
+ 'list',
95
+ 'maxlength',
96
+ 'minlength',
97
+ 'pattern',
98
+ 'placeholder',
99
+ 'readonly',
100
+ 'required',
101
+ 'size',
102
+ 'value',
103
+ 'list',
104
+ 'selectionstart',
105
+ 'selectionend',
106
+ 'selectiondirection',
107
+ ])
108
+ },
109
+ {
110
+ rule: {when: 'type', is: 'tel'},
111
+ members: new Set([
112
+ 'autocomplete',
113
+ 'list',
114
+ 'maxlength',
115
+ 'minlength',
116
+ 'pattern',
117
+ 'placeholder',
118
+ 'readonly',
119
+ 'required',
120
+ 'size',
121
+ 'value',
122
+ 'list',
123
+ 'selectionstart',
124
+ 'selectionend',
125
+ 'selectiondirection',
126
+ ])
127
+ },
128
+ {
129
+ rule: {when: 'type', is: 'email'},
130
+ members: new Set([
131
+ 'autocomplete',
132
+ 'list',
133
+ 'maxlength',
134
+ 'minlength',
135
+ 'multiple',
136
+ 'pattern',
137
+ 'placeholder',
138
+ 'readonly',
139
+ 'required',
140
+ 'size',
141
+ 'value',
142
+ 'list',
143
+ ])
144
+ },
145
+ {
146
+ rule: {when: 'type', is: 'password'},
147
+ members: new Set([
148
+ 'autocomplete',
149
+ 'maxlength',
150
+ 'minlength',
151
+ 'pattern',
152
+ 'placeholder',
153
+ 'readonly',
154
+ 'required',
155
+ 'size',
156
+ 'value',
157
+ 'selectionstart',
158
+ 'selectionend',
159
+ 'selectiondirection',
160
+ ])
161
+ },
162
+ {
163
+ rule: {when: 'type', is: 'date'},
164
+ members: new Set([
165
+ 'autocomplete',
166
+ 'list',
167
+ 'max',
168
+ 'min',
169
+ 'readonly',
170
+ 'required',
171
+ 'step',
172
+ 'value',
173
+ 'valueasdate',
174
+ 'valueasnumber',
175
+ 'list',
176
+ ])
177
+ },
178
+ {
179
+ rule: {when: 'type', is: 'month'},
180
+ members: new Set([
181
+ 'autocomplete',
182
+ 'list',
183
+ 'max',
184
+ 'min',
185
+ 'readonly',
186
+ 'required',
187
+ 'step',
188
+ 'value',
189
+ 'valueasdate',
190
+ 'valueasnumber',
191
+ 'list',
192
+ ])
193
+ },
194
+ {
195
+ rule: {when: 'type', is: 'week'},
196
+ members: new Set([
197
+ 'autocomplete',
198
+ 'list',
199
+ 'max',
200
+ 'min',
201
+ 'readonly',
202
+ 'required',
203
+ 'step',
204
+ 'value',
205
+ 'valueasdate',
206
+ 'valueasnumber',
207
+ 'list',
208
+ ])
209
+ },
210
+ {
211
+ rule: {when: 'type', is: 'time'},
212
+ members: new Set([
213
+ 'autocomplete',
214
+ 'list',
215
+ 'max',
216
+ 'min',
217
+ 'readonly',
218
+ 'required',
219
+ 'step',
220
+ 'value',
221
+ 'valueasdate',
222
+ 'valueasnumber',
223
+ 'list',
224
+ ])
225
+ },
226
+ {
227
+ rule: {when: 'type', is: 'datetime-local'},
228
+ members: new Set([
229
+ 'autocomplete',
230
+ 'list',
231
+ 'max',
232
+ 'min',
233
+ 'readonly',
234
+ 'required',
235
+ 'step',
236
+ 'value',
237
+ 'valueasnumber',
238
+ 'list',
239
+ ])
240
+ },
241
+ {
242
+ rule: {when: 'type', is: 'number'},
243
+ members: new Set([
244
+ 'autocomplete',
245
+ 'list',
246
+ 'max',
247
+ 'min',
248
+ 'placeholder',
249
+ 'readonly',
250
+ 'required',
251
+ 'step',
252
+ 'value',
253
+ 'valueasnumber',
254
+ 'list',
255
+ ])
256
+ },
257
+ {
258
+ rule: {when: 'type', is: 'range'},
259
+ members: new Set([
260
+ 'autocomplete',
261
+ 'list',
262
+ 'max',
263
+ 'min',
264
+ 'step',
265
+ 'value',
266
+ 'valueasnumber',
267
+ 'list',
268
+ ])
269
+ },
270
+ {
271
+ rule: {when: 'type', is: 'color'},
272
+ members: new Set([
273
+ 'autocomplete',
274
+ 'list',
275
+ 'value',
276
+ ])
277
+ },
278
+ {
279
+ rule: {when: 'type', is: 'checkbox'},
280
+ members: new Set([
281
+ 'checked',
282
+ 'required',
283
+ 'checked',
284
+ 'value',
285
+ ])
286
+ },
287
+ {
288
+ rule: {when: 'type', is: 'radio'},
289
+ members: new Set([
290
+ 'checked',
291
+ 'required',
292
+ 'checked',
293
+ 'value',
294
+ ])
295
+ },
296
+ {
297
+ rule: {when: 'type', is: 'file'},
298
+ members: new Set([
299
+ 'accept',
300
+ 'multiple',
301
+ 'required',
302
+ 'files',
303
+ 'value',
304
+ ])
305
+ },
306
+ {
307
+ rule: {when: 'type', is: 'submit'},
308
+ members: new Set([
309
+ 'formaction',
310
+ 'formenctype',
311
+ 'formmethod',
312
+ 'formnovalidate',
313
+ 'formtarget',
314
+ 'value',
315
+ ])
316
+ },
317
+ {
318
+ rule: {when: 'type', is: 'image'},
319
+ members: new Set([
320
+ 'alt',
321
+ 'formaction',
322
+ 'formenctype',
323
+ 'formmethod',
324
+ 'formnovalidate',
325
+ 'formtarget',
326
+ 'height',
327
+ 'src',
328
+ 'width',
329
+ 'value',
330
+ ])
331
+ },
332
+ {
333
+ rule: {when: 'type', is: 'reset'},
334
+ members: new Set([
335
+ 'value',
336
+ ])
337
+ },
338
+ {
339
+ rule: {when: 'type', is: 'button'},
340
+ members: new Set([
341
+ 'value',
342
+ ])
343
+ },
344
+ ],
279
345
  };
@@ -2,7 +2,7 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
- import {GLOBAL_ATTRIBUTES, SPECS, VALID_MEMBERS} from './config.js';
5
+ import {APPLICABLE_MEMBERS, GLOBAL_ATTRIBUTES, SPECS} from './config.js';
6
6
  import {merge} from './util.js';
7
7
 
8
8
  /**
@@ -40,7 +40,7 @@ function transform({name, idls}, output = {}) {
40
40
  case 'dictionary': {
41
41
  output[idl.name] = output[idl.name] ?? makeEntry();
42
42
  let props = idl.members?.filter(member => ACCEPTED_MEMBER_TYPES.has(member.type));
43
- props = props?.map(member => [member.name, {global: GLOBAL_ATTRIBUTES.has(member.name), specs: [name]}, ]);
43
+ props = props?.map(member => [member.name, {specs: [name]}]);
44
44
  merge(output[idl.name], {
45
45
  inheritance: idl.inheritance,
46
46
  props: Object.fromEntries(props),
@@ -71,22 +71,33 @@ function transform({name, idls}, output = {}) {
71
71
  /**
72
72
  * Adds additional metadata to the DOM pinned properties dataset.
73
73
  *
74
- * Currently only adds information about which properties are valid based on
75
- * some state, such as for the HTMLInputElement. See `VALID_MEMBERS`.
74
+ * Currently:
75
+ * - Adds a field specifying whether a member is a global attribute or not.
76
+ * - Adds information about which properties are "applicable" members for
77
+ * certain "states" their parent WebIDL type can be in, such as for the
78
+ * HTMLInputElement where the set of valid members are determined by the "type"
79
+ * property. See `APPLICABLE_MEMBERS`.
76
80
  *
77
81
  * @param {*} output
78
82
  */
79
83
  export function addMetadata(output) {
80
84
  for (const [key, value] of Object.entries(output)) {
81
- const rule = VALID_MEMBERS[key];
82
- if (!rule) {
83
- continue;
85
+ for (const [name, prop] of Object.entries(value.props)) {
86
+ prop.global = GLOBAL_ATTRIBUTES.has(name);
87
+
88
+ const rules = APPLICABLE_MEMBERS[key];
89
+ if (!rules) {
90
+ continue;
91
+ }
92
+
93
+ for (const {rule, members} of rules) {
94
+ if (members.has(name.toLowerCase())) {
95
+ merge(prop, {rules: [rule]});
96
+ }
97
+ }
98
+
99
+ value.rules = rules.map(({rule}) => rule);
84
100
  }
85
- const states = Object.entries(rule).map(([selector, allowlist]) => {
86
- const valid = Object.entries(value.props).filter(([prop]) => allowlist.has(prop.toLowerCase()));
87
- return [selector, Object.fromEntries(valid)];
88
- });
89
- value.states = Object.fromEntries(states);
90
101
  }
91
102
  return output;
92
103
  }