Skip to content

Commit 743f84c

Browse files
authored
feat: support [Exposed=*] (#634)
* reformat webpack config * feat: support `[Exposed=*]` * fix writer
1 parent c1131e3 commit 743f84c

File tree

6 files changed

+55
-16
lines changed

6 files changed

+55
-16
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,7 @@ Extended attributes look like this:
726726
* `"decimal-list"`
727727
* `"integer"`
728728
* `"integer-list"`
729+
* `"*"`
729730
* `parent`: The container of this type as an Object.
730731

731732
### Default and Const Values

lib/productions/extended-attributes.js

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ class ExtendedAttributeParameters extends Base {
5757
const ret = autoParenter(
5858
new ExtendedAttributeParameters({ source: tokeniser.source, tokens })
5959
);
60+
ret.list = [];
6061
if (tokens.assign) {
62+
tokens.asterisk = tokeniser.consume("*");
63+
if (tokens.asterisk) {
64+
return ret.this;
65+
}
6166
tokens.secondaryName = tokeniser.consumeKind(...extAttrValueSyntax);
6267
}
6368
tokens.open = tokeniser.consume("(");
@@ -77,13 +82,18 @@ class ExtendedAttributeParameters extends Base {
7782
}
7883

7984
get rhsIsList() {
80-
return this.tokens.assign && !this.tokens.secondaryName;
85+
return (
86+
this.tokens.assign && !this.tokens.asterisk && !this.tokens.secondaryName
87+
);
8188
}
8289

8390
get rhsType() {
8491
if (this.rhsIsList) {
8592
return this.list[0].tokens.value.type + "-list";
8693
}
94+
if (this.tokens.asterisk) {
95+
return "*";
96+
}
8797
if (this.tokens.secondaryName) {
8898
return this.tokens.secondaryName.type;
8999
}
@@ -95,15 +105,14 @@ class ExtendedAttributeParameters extends Base {
95105
const { rhsType } = this;
96106
return w.ts.wrap([
97107
w.token(this.tokens.assign),
108+
w.token(this.tokens.asterisk),
98109
w.reference_token(this.tokens.secondaryName, this.parent),
99110
w.token(this.tokens.open),
100-
...(!this.list
101-
? []
102-
: this.list.map((p) => {
103-
return rhsType === "identifier-list"
104-
? w.identifier(p, this.parent)
105-
: p.write(w);
106-
})),
111+
...this.list.map((p) => {
112+
return rhsType === "identifier-list"
113+
? w.identifier(p, this.parent)
114+
: p.write(w);
115+
}),
107116
w.token(this.tokens.close),
108117
]);
109118
}
@@ -143,7 +152,9 @@ export class SimpleExtendedAttribute extends Base {
143152
}
144153
const value = this.params.rhsIsList
145154
? list
146-
: unescape(tokens.secondaryName.value);
155+
: this.params.tokens.secondaryName
156+
? unescape(tokens.secondaryName.value)
157+
: null;
147158
return { type, value };
148159
}
149160
get arguments() {

lib/tokeniser.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ const punctuations = [
103103
"=",
104104
">",
105105
"?",
106+
"*",
106107
"[",
107108
"]",
108109
"{",
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[
2+
{
3+
"type": "interface",
4+
"name": "X",
5+
"inheritance": null,
6+
"members": [],
7+
"extAttrs": [
8+
{
9+
"type": "extended-attribute",
10+
"name": "Exposed",
11+
"rhs": {
12+
"type": "*",
13+
"value": null
14+
},
15+
"arguments": []
16+
}
17+
],
18+
"partial": false
19+
},
20+
{
21+
"type": "eof",
22+
"value": ""
23+
}
24+
]
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[Exposed=*]
2+
interface X {};

webpack.config.cjs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
const path = require("path");
2-
const TerserPlugin = require('terser-webpack-plugin');
2+
const TerserPlugin = require("terser-webpack-plugin");
33
module.exports = {
44
entry: "./index.js",
55
output: {
66
filename: "webidl2.js",
77
path: path.resolve(__dirname, "dist"),
88
library: "WebIDL2",
99
libraryTarget: "umd",
10-
globalObject: "globalThis"
10+
globalObject: "globalThis",
1111
},
1212
mode: "production",
1313
devtool: "source-map",
@@ -16,9 +16,9 @@ module.exports = {
1616
new TerserPlugin({
1717
terserOptions: {
1818
keep_classnames: true,
19-
sourceMap: true
20-
}
21-
})
22-
]
23-
}
19+
sourceMap: true,
20+
},
21+
}),
22+
],
23+
},
2424
};

0 commit comments

Comments
 (0)