Skip to content

Commit fb30192

Browse files
rutvik110kevmoo
andauthored
[feat] LegacyNamespace extended attributes support on IDL interfaces (Resolves #283) (#297)
* updates * changelog updated * package changelog updated * dart formatting updates * Update web/CHANGELOG.md Co-authored-by: Kevin Moore <[email protected]> * formatting updates --------- Co-authored-by: Kevin Moore <[email protected]>
1 parent 6a8c3c5 commit fb30192

File tree

5 files changed

+38
-2
lines changed

5 files changed

+38
-2
lines changed

web/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- Exposed constants with primitive values as non-`external` so they can be
1212
`switch`ed over.
1313
- Add an extension `responseHeaders` to `XMLHttpRequest`.
14+
- Correctly namespace `WebAssembly` types.
1415

1516
## 1.0.0
1617

web/lib/src/dom/wasm_js_api.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ extension type ModuleImportDescriptor._(JSObject _) implements JSObject {
7373
external ImportExportKind get kind;
7474
external set kind(ImportExportKind value);
7575
}
76+
@JS('WebAssembly.Module')
7677
extension type Module._(JSObject _) implements JSObject {
7778
external factory Module(BufferSource bytes);
7879

@@ -83,6 +84,7 @@ extension type Module._(JSObject _) implements JSObject {
8384
String sectionName,
8485
);
8586
}
87+
@JS('WebAssembly.Instance')
8688
extension type Instance._(JSObject _) implements JSObject {
8789
external factory Instance(
8890
Module module, [
@@ -102,6 +104,7 @@ extension type MemoryDescriptor._(JSObject _) implements JSObject {
102104
external int get maximum;
103105
external set maximum(int value);
104106
}
107+
@JS('WebAssembly.Memory')
105108
extension type Memory._(JSObject _) implements JSObject {
106109
external factory Memory(MemoryDescriptor descriptor);
107110

@@ -122,6 +125,7 @@ extension type TableDescriptor._(JSObject _) implements JSObject {
122125
external int get maximum;
123126
external set maximum(int value);
124127
}
128+
@JS('WebAssembly.Table')
125129
extension type Table._(JSObject _) implements JSObject {
126130
external factory Table(
127131
TableDescriptor descriptor, [
@@ -150,6 +154,7 @@ extension type GlobalDescriptor._(JSObject _) implements JSObject {
150154
external bool get mutable;
151155
external set mutable(bool value);
152156
}
157+
@JS('WebAssembly.Global')
153158
extension type Global._(JSObject _) implements JSObject {
154159
external factory Global(
155160
GlobalDescriptor descriptor, [

web_generator/CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
## 1.0.0-wip
22

3-
- Initial separation of `web_generator` from `web`.
3+
- Initial separation of `web_generator` from `web`.
4+
- New IDL interface `RHL` added. `ExtendedAttribute` idl interface updated to
5+
expose its `rhs` property and `Interfacelike` idl interface updated to expose
6+
`extAttrs` property. The generator now adds a
7+
`JS(LegacyNamespace.$extensionTypeName)` annotation on `JS` objects if
8+
they've an IDL extended attribute `[LegacyNamespace=Foo]` defined in their IDL
9+
description.
10+
11+

web_generator/lib/src/translator.dart

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'dart:js_interop';
66

77
import 'package:code_builder/code_builder.dart' as code;
8+
import 'package:collection/collection.dart';
89
import 'package:path/path.dart' as p;
910

1011
import 'banned_names.dart';
@@ -1244,6 +1245,7 @@ class Translator {
12441245
code.ExtensionType _extensionType({
12451246
required String jsName,
12461247
required String dartClassName,
1248+
required List<idl.ExtendedAttribute> extendedAttributes,
12471249
required MdnInterface? mdnInterface,
12481250
required BCDInterfaceStatus? interfaceStatus,
12491251
required List<String> implements,
@@ -1257,6 +1259,12 @@ class Translator {
12571259

12581260
final jsObject = _typeReference(_RawType('JSObject', false));
12591261
const representationFieldName = '_';
1262+
final legacyNameSpace = extendedAttributes
1263+
.firstWhereOrNull(
1264+
(extendedAttribute) => extendedAttribute.name == 'LegacyNamespace',
1265+
)
1266+
?.rhs
1267+
.value;
12601268
final instancePropertyMethods = <code.Method>[];
12611269
final staticPropertyMethods = <code.Method>[];
12621270
final propertySpecs = _properties(properties, mdnInterface);
@@ -1267,7 +1275,12 @@ class Translator {
12671275
return code.ExtensionType((b) => b
12681276
..docs.addAll(docs)
12691277
..annotations.addAll(
1270-
_jsOverride(isObjectLiteral || jsName == dartClassName ? '' : jsName))
1278+
_jsOverride(
1279+
legacyNameSpace != null
1280+
? '$legacyNameSpace.$jsName'
1281+
: (isObjectLiteral || jsName == dartClassName ? '' : jsName),
1282+
),
1283+
)
12711284
..name = dartClassName
12721285
..primaryConstructorName = '_'
12731286
..representationDeclaration = code.RepresentationDeclaration((b) => b
@@ -1300,6 +1313,7 @@ class Translator {
13001313
final type = interfacelike.type;
13011314
final isNamespace = type == 'namespace';
13021315
final isDictionary = type == 'dictionary';
1316+
final extendedAttributes = idlInterfacelike.extAttrs.toDart;
13031317

13041318
final mdnInterface = docProvider.interfaceFor(jsName);
13051319

@@ -1327,6 +1341,7 @@ class Translator {
13271341
_extensionType(
13281342
jsName: jsName,
13291343
dartClassName: dartClassName,
1344+
extendedAttributes: extendedAttributes,
13301345
mdnInterface: mdnInterface,
13311346
interfaceStatus: interfaceStatus,
13321347
implements: implements,

web_generator/lib/src/webidl_api.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ extension type Interfacelike._(JSObject _) implements Named {
3535
external bool get partial;
3636
external JSArray<Member> get members;
3737
external String? get inheritance;
38+
external JSArray<ExtendedAttribute> get extAttrs;
3839
}
3940

4041
extension type Callback._(JSObject _) implements Named {
@@ -66,6 +67,12 @@ extension type Member._(JSObject _) implements JSObject {
6667

6768
extension type ExtendedAttribute._(JSObject _) implements JSObject {
6869
external String get name;
70+
external RHS get rhs;
71+
}
72+
73+
extension type RHS._(JSObject _) implements JSObject {
74+
external String get type;
75+
external String get value;
6976
}
7077

7178
extension type Argument._(JSObject _) implements JSObject {

0 commit comments

Comments
 (0)