@idlizer/core 2.0.31 → 2.0.33

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.
Files changed (34) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +3 -2
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +19 -19
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +9 -7
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +10 -7
  5. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +3 -5
  6. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +0 -1
  7. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +1 -8
  8. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +2 -2
  9. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +1 -1
  10. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +1 -1
  11. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +7 -3
  12. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +14 -3
  13. package/build/lib/src/from-idl/DtsPrinter.d.ts +1 -1
  14. package/build/lib/src/from-idl/DtsPrinter.js +28 -22
  15. package/build/lib/src/from-idl/deserialize.d.ts +1 -2
  16. package/build/lib/src/from-idl/deserialize.js +10 -12
  17. package/build/lib/src/idl.d.ts +19 -8
  18. package/build/lib/src/idl.js +82 -39
  19. package/build/lib/src/idlize.d.ts +12 -2
  20. package/build/lib/src/idlize.js +24 -9
  21. package/build/lib/src/library.d.ts +5 -10
  22. package/build/lib/src/library.js +2 -2
  23. package/build/lib/src/peer-generation/PeerFile.d.ts +4 -3
  24. package/build/lib/src/peer-generation/PeerFile.js +10 -3
  25. package/build/lib/src/peer-generation/PeerLibrary.d.ts +4 -6
  26. package/build/lib/src/peer-generation/PeerLibrary.js +18 -36
  27. package/build/lib/src/peer-generation/PeerMethod.js +5 -1
  28. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +5 -4
  29. package/build/lib/src/peer-generation/idl/common.js +3 -3
  30. package/build/lib/src/util.d.ts +2 -0
  31. package/build/lib/src/util.js +4 -0
  32. package/build/lib/src/visitor.js +1 -1
  33. package/package.json +1 -1
  34. package/webidl2.js/dist/webidl2.js +20 -19
@@ -3,6 +3,7 @@ import { Language } from "../Language";
3
3
  import { LanguageExpression, LanguageStatement, LanguageWriter, ExpressionAssigner } from "./LanguageWriter";
4
4
  import { RuntimeType } from "./common";
5
5
  import { LibraryInterface } from "../LibraryInterface";
6
+ import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
6
7
  export interface ArgConvertor {
7
8
  param: string;
8
9
  idlType: idl.IDLType;
@@ -220,7 +221,7 @@ export declare class DateConvertor extends BaseArgConvertor {
220
221
  }
221
222
  export declare class ProxyConvertor extends BaseArgConvertor {
222
223
  convertor: ArgConvertor;
223
- constructor(convertor: ArgConvertor, suggestedName?: string);
224
+ constructor(convertor: ArgConvertor, suggestedReference?: idl.IDLReferenceType);
224
225
  convertorArg(param: string, writer: LanguageWriter): string;
225
226
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
226
227
  convertorSerialize(param: string, value: string, printer: LanguageWriter): void;
@@ -323,5 +324,5 @@ export declare function generateCallbackKindName(callback: idl.IDLCallback): str
323
324
  export declare function generateCallbackKindAccess(callback: idl.IDLCallback, language: Language): string;
324
325
  export declare function generateCallbackKindValue(callback: idl.IDLCallback): number;
325
326
  export declare function generateCallbackAPIArguments(library: LibraryInterface, callback: idl.IDLCallback): string[];
326
- export declare function maybeTransformManagedCallback(callback: idl.IDLCallback): idl.IDLCallback | undefined;
327
+ export declare function maybeTransformManagedCallback(callback: idl.IDLCallback, library: ReferenceResolver): idl.IDLCallback | undefined;
327
328
  //# sourceMappingURL=ArgConvertors.d.ts.map
@@ -154,7 +154,7 @@ export class StringConvertor extends BaseArgConvertor {
154
154
  }
155
155
  export class EnumConvertor extends BaseArgConvertor {
156
156
  constructor(param, enumEntry) {
157
- super(idl.createReferenceType(enumEntry.name, undefined, enumEntry), [idl.isStringEnum(enumEntry) ? RuntimeType.STRING : RuntimeType.NUMBER], false, false, param);
157
+ super(idl.createReferenceType(enumEntry), [idl.isStringEnum(enumEntry) ? RuntimeType.STRING : RuntimeType.NUMBER], false, false, param);
158
158
  this.enumEntry = enumEntry;
159
159
  }
160
160
  convertorArg(param, writer) {
@@ -163,19 +163,19 @@ export class EnumConvertor extends BaseArgConvertor {
163
163
  convertorSerialize(param, value, writer) {
164
164
  value =
165
165
  idl.isStringEnum(this.enumEntry)
166
- ? writer.ordinalFromEnum(writer.makeString(value), idl.createReferenceType(this.enumEntry.name, undefined, this.enumEntry)).asString()
166
+ ? writer.ordinalFromEnum(writer.makeString(value), idl.createReferenceType(this.enumEntry)).asString()
167
167
  : writer.makeEnumCast(value, false, this);
168
168
  writer.writeMethodCall(`${param}Serializer`, "writeInt32", [value]);
169
169
  }
170
170
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
171
171
  const readExpr = writer.makeMethodCall(`${deserializerName}`, "readInt32", []);
172
172
  const enumExpr = idl.isStringEnum(this.enumEntry)
173
- ? writer.enumFromOrdinal(readExpr, idl.createReferenceType(this.enumEntry.name, undefined, this.enumEntry))
174
- : writer.makeCast(readExpr, idl.createReferenceType(this.enumEntry.name, undefined, this.enumEntry));
173
+ ? writer.enumFromOrdinal(readExpr, idl.createReferenceType(this.enumEntry))
174
+ : writer.makeCast(readExpr, idl.createReferenceType(this.enumEntry));
175
175
  return assigneer(enumExpr);
176
176
  }
177
177
  nativeType() {
178
- return idl.createReferenceType(this.enumEntry.name, undefined, this.enumEntry);
178
+ return idl.createReferenceType(this.enumEntry);
179
179
  }
180
180
  interopType() {
181
181
  return idl.IDLI32Type;
@@ -388,7 +388,7 @@ export class AggregateConvertor extends BaseArgConvertor {
388
388
  return writer.makeCast(writer.makeString(`{${content}}`), this.idlType);
389
389
  }
390
390
  nativeType() {
391
- return idl.createReferenceType(this.decl.name, undefined, this.decl);
391
+ return idl.createReferenceType(this.decl);
392
392
  }
393
393
  interopType() {
394
394
  throw new Error("Must never be used");
@@ -421,7 +421,7 @@ export class TupleConvertor extends AggregateConvertor {
421
421
  return writer.makeCast(writer.makeString(`[${fields.map(it => it[1].asString()).join(', ')}]`), this.idlType);
422
422
  }
423
423
  nativeType() {
424
- return idl.createReferenceType(this.decl.name, undefined, this.decl);
424
+ return idl.createReferenceType(this.decl);
425
425
  }
426
426
  interopType() {
427
427
  throw new Error("Must never be used");
@@ -439,7 +439,7 @@ export class TupleConvertor extends AggregateConvertor {
439
439
  }
440
440
  export class InterfaceConvertor extends BaseArgConvertor {
441
441
  constructor(library, name /* change to IDLReferenceType */, param, declaration) {
442
- super(idl.createReferenceType(name, undefined, declaration), [RuntimeType.OBJECT], false, true, param);
442
+ super(idl.createReferenceType(declaration), [RuntimeType.OBJECT], false, true, param);
443
443
  this.library = library;
444
444
  this.declaration = declaration;
445
445
  }
@@ -637,8 +637,8 @@ export class DateConvertor extends BaseArgConvertor {
637
637
  }
638
638
  }
639
639
  export class ProxyConvertor extends BaseArgConvertor {
640
- constructor(convertor, suggestedName) {
641
- super(suggestedName ? idl.createReferenceType(suggestedName, undefined, convertor.idlType) : convertor.idlType, convertor.runtimeTypes, convertor.isScoped, convertor.useArray, convertor.param);
640
+ constructor(convertor, suggestedReference) {
641
+ super(suggestedReference ? suggestedReference : convertor.idlType, convertor.runtimeTypes, convertor.isScoped, convertor.useArray, convertor.param);
642
642
  this.convertor = convertor;
643
643
  }
644
644
  convertorArg(param, writer) {
@@ -668,7 +668,7 @@ export class ProxyConvertor extends BaseArgConvertor {
668
668
  }
669
669
  export class TypeAliasConvertor extends ProxyConvertor {
670
670
  constructor(library, param, typedef) {
671
- super(library.typeConvertor(param, typedef.type), typedef.name);
671
+ super(library.typeConvertor(param, typedef.type), idl.createReferenceType(typedef));
672
672
  }
673
673
  }
674
674
  export class CustomTypeConvertor extends BaseArgConvertor {
@@ -888,7 +888,7 @@ export class FunctionConvertor extends BaseArgConvertor {
888
888
  }
889
889
  export class MaterializedClassConvertor extends BaseArgConvertor {
890
890
  constructor(param, declaration) {
891
- super(idl.createReferenceType(declaration.name, undefined, declaration), [RuntimeType.OBJECT], false, true, param);
891
+ super(idl.createReferenceType(declaration), [RuntimeType.OBJECT], false, true, param);
892
892
  this.declaration = declaration;
893
893
  }
894
894
  convertorArg(param, writer) {
@@ -900,11 +900,11 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
900
900
  ])));
901
901
  }
902
902
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
903
- const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${this.declaration.name}`, []), idl.createReferenceType(this.declaration.name, undefined, this.declaration));
903
+ const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${this.declaration.name}`, []), idl.createReferenceType(this.declaration));
904
904
  return assigneer(readStatement);
905
905
  }
906
906
  nativeType() {
907
- return idl.createReferenceType(this.declaration.name, undefined, this.declaration);
907
+ return idl.createReferenceType(this.declaration);
908
908
  }
909
909
  interopType() {
910
910
  throw new Error("Must never be used");
@@ -952,7 +952,7 @@ export class ImportTypeConvertor extends BaseArgConvertor {
952
952
  }
953
953
  export class CallbackConvertor extends BaseArgConvertor {
954
954
  constructor(library, param, decl) {
955
- super(idl.createReferenceType(decl.name, undefined, decl), [RuntimeType.FUNCTION], false, true, param);
955
+ super(idl.createReferenceType(decl), [RuntimeType.FUNCTION], false, true, param);
956
956
  this.library = library;
957
957
  this.decl = decl;
958
958
  }
@@ -961,7 +961,7 @@ export class CallbackConvertor extends BaseArgConvertor {
961
961
  }
962
962
  get transformedDecl() {
963
963
  var _a;
964
- return (_a = maybeTransformManagedCallback(this.decl)) !== null && _a !== void 0 ? _a : this.decl;
964
+ return (_a = maybeTransformManagedCallback(this.decl, this.library)) !== null && _a !== void 0 ? _a : this.decl;
965
965
  }
966
966
  convertorArg(param, writer) {
967
967
  throw new Error("Must never be used");
@@ -998,7 +998,7 @@ export class CallbackConvertor extends BaseArgConvertor {
998
998
  return assigneer(result);
999
999
  }
1000
1000
  nativeType() {
1001
- return idl.createReferenceType(this.transformedDecl.name, undefined, this.decl);
1001
+ return idl.createReferenceType(this.decl);
1002
1002
  }
1003
1003
  isPointerType() {
1004
1004
  return true;
@@ -1042,9 +1042,9 @@ export function generateCallbackAPIArguments(library, callback) {
1042
1042
  }
1043
1043
  return args;
1044
1044
  }
1045
- export function maybeTransformManagedCallback(callback) {
1045
+ export function maybeTransformManagedCallback(callback, library) {
1046
1046
  if (callback.name === "CustomBuilder")
1047
- return idl.createCallback("CustomNodeBuilder", [idl.createParameter("parentNode", idl.IDLPointerType)], idl.IDLPointerType, { extendedAttributes: [{ name: idl.IDLExtendedAttributes.Synthetic }] });
1047
+ return library.resolveTypeReference(idl.createReferenceType("CustomNodeBuilder"));
1048
1048
  return undefined;
1049
1049
  }
1050
1050
  //# sourceMappingURL=ArgConvertors.js.map
@@ -147,13 +147,14 @@ export declare enum FieldModifier {
147
147
  export declare enum MethodModifier {
148
148
  PUBLIC = 0,
149
149
  PRIVATE = 1,
150
- STATIC = 2,
151
- NATIVE = 3,
152
- INLINE = 4,
153
- GETTER = 5,
154
- SETTER = 6,
155
- PROTECTED = 7,
156
- FREE = 8
150
+ PROTECTED = 2,
151
+ STATIC = 3,
152
+ NATIVE = 4,
153
+ INLINE = 5,
154
+ GETTER = 6,
155
+ SETTER = 7,
156
+ THROWS = 8,
157
+ FREE = 9
157
158
  }
158
159
  export declare enum ClassModifier {
159
160
  PUBLIC = 0,
@@ -214,6 +215,7 @@ export declare abstract class LanguageWriter {
214
215
  printer: IndentedPrinter;
215
216
  resolver: ReferenceResolver;
216
217
  language: Language;
218
+ protected namespaceStack: string[];
217
219
  constructor(printer: IndentedPrinter, resolver: ReferenceResolver, // TODO make protected again
218
220
  language: Language);
219
221
  indentDepth(): number;
@@ -309,13 +309,14 @@ export var MethodModifier;
309
309
  (function (MethodModifier) {
310
310
  MethodModifier[MethodModifier["PUBLIC"] = 0] = "PUBLIC";
311
311
  MethodModifier[MethodModifier["PRIVATE"] = 1] = "PRIVATE";
312
- MethodModifier[MethodModifier["STATIC"] = 2] = "STATIC";
313
- MethodModifier[MethodModifier["NATIVE"] = 3] = "NATIVE";
314
- MethodModifier[MethodModifier["INLINE"] = 4] = "INLINE";
315
- MethodModifier[MethodModifier["GETTER"] = 5] = "GETTER";
316
- MethodModifier[MethodModifier["SETTER"] = 6] = "SETTER";
317
- MethodModifier[MethodModifier["PROTECTED"] = 7] = "PROTECTED";
318
- MethodModifier[MethodModifier["FREE"] = 8] = "FREE";
312
+ MethodModifier[MethodModifier["PROTECTED"] = 2] = "PROTECTED";
313
+ MethodModifier[MethodModifier["STATIC"] = 3] = "STATIC";
314
+ MethodModifier[MethodModifier["NATIVE"] = 4] = "NATIVE";
315
+ MethodModifier[MethodModifier["INLINE"] = 5] = "INLINE";
316
+ MethodModifier[MethodModifier["GETTER"] = 6] = "GETTER";
317
+ MethodModifier[MethodModifier["SETTER"] = 7] = "SETTER";
318
+ MethodModifier[MethodModifier["THROWS"] = 8] = "THROWS";
319
+ MethodModifier[MethodModifier["FREE"] = 9] = "FREE";
319
320
  })(MethodModifier || (MethodModifier = {}));
320
321
  export var ClassModifier;
321
322
  (function (ClassModifier) {
@@ -396,6 +397,7 @@ export class LanguageWriter {
396
397
  this.printer = printer;
397
398
  this.resolver = resolver;
398
399
  this.language = language;
400
+ this.namespaceStack = [];
399
401
  }
400
402
  indentDepth() {
401
403
  return this.printer.indentDepth();
@@ -731,6 +733,7 @@ export class LanguageWriter {
731
733
  * Writes closing brace of namespace block and removes one level of indent
732
734
  */
733
735
  popNamespace(ident = true) {
736
+ this.namespaceStack.pop();
734
737
  if (ident)
735
738
  this.popIndent();
736
739
  this.print(`}`);
@@ -13,7 +13,7 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
- import { generatorConfiguration } from "../../config";
16
+ import { generatorConfiguration, generatorTypePrefix } from "../../config";
17
17
  import { convertNode, convertType } from "../nameConvertor";
18
18
  import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
19
19
  import { InteropArgConvertor } from './InteropConvertors';
@@ -105,7 +105,7 @@ export class GenericCppConvertor {
105
105
  }
106
106
  let decl = this.resolver.toDeclaration(type);
107
107
  if (idl.isCallback(decl)) {
108
- decl = (_a = maybeTransformManagedCallback(decl)) !== null && _a !== void 0 ? _a : decl;
108
+ decl = (_a = maybeTransformManagedCallback(decl, this.resolver)) !== null && _a !== void 0 ? _a : decl;
109
109
  }
110
110
  if (idl.isType(decl)) {
111
111
  if (idl.isReferenceType(decl)) {
@@ -239,8 +239,6 @@ export class CppReturnTypeConvertor {
239
239
  convertPrimitiveType(type) {
240
240
  if (type == idl.IDLUndefinedType)
241
241
  return 'void';
242
- if (type == idl.IDLStringType)
243
- return 'void';
244
242
  if (type == idl.IDLNumberType)
245
243
  return generatorConfiguration().TypePrefix + 'Int32'; // :(
246
244
  return this.convertor.convert(type);
@@ -251,7 +249,7 @@ export class CppReturnTypeConvertor {
251
249
  convertTypeReference(type) {
252
250
  const decl = this.resolver.resolveTypeReference(type);
253
251
  if (decl && idl.isInterface(decl) && isMaterialized(decl, this.resolver)) {
254
- return generatorConfiguration().TypePrefix + decl.name;
252
+ return generatorTypePrefix() + decl.name;
255
253
  }
256
254
  return this.convertor.convert(type);
257
255
  }
@@ -2,7 +2,6 @@ import * as idl from "../../idl";
2
2
  import { TSTypeNameConvertor } from "./TSConvertors";
3
3
  export declare class ETSTypeNameConvertor extends TSTypeNameConvertor {
4
4
  convertTypeReference(type: idl.IDLReferenceType): string;
5
- convertEnum(node: idl.IDLEnum): string;
6
5
  convertContainer(type: idl.IDLContainerType): string;
7
6
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
8
7
  protected productType(decl: idl.IDLInterface, isTuple: boolean, includeFieldNames: boolean): string;
@@ -28,7 +28,7 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
28
28
  const types = type.name.split(".");
29
29
  if (types.length > 1) {
30
30
  // Takes only name without the namespace prefix
31
- const decl = this.resolver.resolveTypeReference(idl.createReferenceType(types.slice(-1).join(), undefined, type));
31
+ const decl = this.resolver.resolveTypeReference(idl.createReferenceType(types.slice(-1).join()));
32
32
  if (decl !== undefined) {
33
33
  return convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), decl);
34
34
  }
@@ -40,13 +40,6 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
40
40
  }
41
41
  return typeName;
42
42
  }
43
- convertEnum(node) {
44
- let ns = idl.getNamespaceName(node).split('.').join('_');
45
- if (ns !== '') {
46
- ns += '_';
47
- }
48
- return ns + node.name;
49
- }
50
43
  convertContainer(type) {
51
44
  if (idl.IDLContainerUtils.isSequence(type)) {
52
45
  switch (type.elementType[0]) {
@@ -25,10 +25,10 @@ export class TSTypeNameConvertor {
25
25
  return node.name;
26
26
  }
27
27
  convertInterface(node) {
28
- return node.name;
28
+ return idl.getFQName(node);
29
29
  }
30
30
  convertEnum(node) {
31
- return node.name;
31
+ return idl.getFQName(node);
32
32
  }
33
33
  convertTypedef(node) {
34
34
  return node.name;
@@ -186,7 +186,7 @@ export class CJEnumWithGetter {
186
186
  }
187
187
  let enumName = this.enumEntity.name;
188
188
  writer.writeClass(enumName, () => {
189
- const enumType = idl.createReferenceType(enumName, undefined, this.enumEntity);
189
+ const enumType = idl.createReferenceType(this.enumEntity);
190
190
  members.forEach(it => {
191
191
  writer.writeFieldDeclaration(it.name, enumType, [FieldModifier.PUBLIC, FieldModifier.STATIC, FieldModifier.FINAL], false, writer.makeString(`${enumName}(${it.numberId})`));
192
192
  });
@@ -243,7 +243,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
243
243
  this.print(`#include <${path}>`);
244
244
  }
245
245
  makeRef(type, options) {
246
- return createReferenceType(`${this.stringifyTypeWithReceiver(type, options === null || options === void 0 ? void 0 : options.receiver)}&`, undefined, type);
246
+ return createReferenceType(`${this.stringifyTypeWithReceiver(type, options === null || options === void 0 ? void 0 : options.receiver)}&`);
247
247
  }
248
248
  makeThis() {
249
249
  return new StringExpression("*this");
@@ -63,7 +63,8 @@ export class ArkTSEnumEntityStatement {
63
63
  this.isExport = isExport;
64
64
  }
65
65
  write(writer) {
66
- const enumName = convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), this.enumEntity);
66
+ let enumName = convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), this.enumEntity);
67
+ enumName = enumName.split('.').at(-1);
67
68
  const members = this.enumEntity.elements
68
69
  .flatMap((member, index) => {
69
70
  var _a;
@@ -93,7 +94,10 @@ export class ArkTSEnumEntityStatement {
93
94
  }
94
95
  return res;
95
96
  });
97
+ const nss = idl.getNamespacesPathFor(this.enumEntity);
98
+ nss.forEach(it => writer.pushNamespace(it.name));
96
99
  writer.writeEnum(enumName, members);
100
+ nss.forEach(() => writer.popNamespace());
97
101
  }
98
102
  }
99
103
  export class ETSLambdaExpression extends LambdaExpression {
@@ -113,7 +117,7 @@ export class ETSLambdaExpression extends LambdaExpression {
113
117
  // Issue: https://rnd-gitlab-msc.huawei.com/rus-os-team/virtual-machines-and-tools/panda/-/issues/21333
114
118
  let isRetTypeCallback = idl.isCallback(this.signature.returnType);
115
119
  if (idl.isReferenceType(this.signature.returnType)) {
116
- const resolved = this.resolver.resolveTypeReference(idl.createReferenceType(this.signature.returnType.name, undefined, this.signature.returnType));
120
+ const resolved = this.resolver.resolveTypeReference(this.signature.returnType);
117
121
  isRetTypeCallback = resolved !== undefined && idl.isCallback(resolved);
118
122
  }
119
123
  return `(${params.join(", ")})${isRetTypeCallback
@@ -237,7 +241,7 @@ export class ETSLanguageWriter extends TSLanguageWriter {
237
241
  ? convertor.nativeType().types[runtimeTypeIndex]
238
242
  : idl.maybeUnwrapOptionalType(convertor.nativeType());
239
243
  if (idlType !== undefined && idl.isReferenceType(idlType)) {
240
- const resolved = this.resolver.resolveTypeReference(idl.createReferenceType(idlType.name, undefined, idlType));
244
+ const resolved = this.resolver.resolveTypeReference(idlType);
241
245
  type = resolved != undefined && idl.isEnum(resolved) ? RuntimeType[RuntimeType.OBJECT] : type;
242
246
  }
243
247
  }
@@ -124,6 +124,7 @@ export class TSLanguageWriter extends LanguageWriter {
124
124
  }
125
125
  maybeSemicolon() { return ""; }
126
126
  pushNamespace(namespace, ident = true) {
127
+ this.namespaceStack.push(namespace);
127
128
  this.print(`export namespace ${namespace} {`);
128
129
  if (ident)
129
130
  this.pushIndent();
@@ -133,7 +134,14 @@ export class TSLanguageWriter extends LanguageWriter {
133
134
  return new TSLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.language);
134
135
  }
135
136
  getNodeName(type) {
136
- return this.typeConvertor.convert(type);
137
+ // just stub.
138
+ // language writers and name convertors are subject to rework for namespaces
139
+ const row = this.typeConvertor.convert(type);
140
+ const nsPrefix = this.namespaceStack.join('.') + '.';
141
+ if (row.startsWith(nsPrefix)) {
142
+ return row.substring(nsPrefix.length);
143
+ }
144
+ return row;
137
145
  }
138
146
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
139
147
  let extendsClause = superClass ? ` extends ${superClass}` : '';
@@ -377,12 +385,15 @@ export class TSLanguageWriter extends LanguageWriter {
377
385
  return TSKeywords.has(keyword) ? keyword + "_" : keyword;
378
386
  }
379
387
  makeDiscriminatorConvertor(convertor, value, index) {
380
- const decl = this.resolver.resolveTypeReference(idl.createReferenceType(this.getNodeName(convertor.nativeType()), undefined, convertor.idlType));
388
+ const convertorNativeType = convertor.nativeType();
389
+ const decl = this.resolver.resolveTypeReference(idl.isReferenceType(convertorNativeType)
390
+ ? convertorNativeType
391
+ : idl.createReferenceType(this.getNodeName(convertorNativeType)));
381
392
  if (decl === undefined || !idl.isEnum(decl)) {
382
393
  throwException(`The type reference ${decl === null || decl === void 0 ? void 0 : decl.name} must be Enum`);
383
394
  }
384
395
  const ordinal = idl.isStringEnum(decl)
385
- ? this.ordinalFromEnum(this.makeCast(this.makeString(this.getObjectAccessor(convertor, value)), convertor.idlType), idl.createReferenceType(this.getNodeName(convertor.nativeType()), undefined, convertor.idlType))
396
+ ? this.ordinalFromEnum(this.makeCast(this.makeString(this.getObjectAccessor(convertor, value)), convertor.idlType), idl.createReferenceType(this.getNodeName(convertor.nativeType())))
386
397
  : this.makeUnionVariantCast(this.getObjectAccessor(convertor, value), this.getNodeName(idl.IDLI32Type), convertor, index);
387
398
  const { low, high } = idl.extremumOfOrdinals(decl);
388
399
  return this.discriminatorFromExpressions(value, convertor.runtimeTypes[0], [
@@ -11,7 +11,7 @@ export declare class CustomPrintVisitor {
11
11
  printMetadata(node: IDLEnum): void;
12
12
  printConstant(node: IDLConstant): void;
13
13
  printInterface(node: IDLInterface): void;
14
- printMethod(node: IDLMethod | IDLConstructor | IDLCallable, isGlobal?: boolean): void;
14
+ printMethod(node: IDLMethod | IDLConstructor | IDLCallable, forceAsFree?: boolean): void;
15
15
  paramText(paramOrTag: IDLParameter | SignatureTag): string;
16
16
  printProperty(node: IDLProperty): void;
17
17
  printEnum(node: IDLEnum): void;
@@ -12,11 +12,12 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- import { indentedBy } from "../util";
16
- import { IDLEntity, IDLKind, getExtAttribute, getVerbatimDts, hasExtAttribute, isCallback, isConstructor, isContainerType, isEnum, isInterface, isMethod, isPrimitiveType, isProperty, isReferenceType, isSyntheticEntry, isTypeParameterType, isTypedef, isUnionType, isPackage, isImport, isVersion, isNamespace, IDLExtendedAttributes, IDLAccessorAttribute, IDLVoidType, IDLStringType, IDLUndefinedType, isCallable, getSuperType, IDLAnyType, IDLContainerUtils, DebugUtils, mixMethodParametersAndTags, createReferenceType, transformMethodsAsync2ReturnPromise, isNamedNode, IDLThisType, isOptionalType, IDLI8Type, IDLU8Type, IDLI16Type, IDLU16Type, IDLI32Type, IDLU32Type, IDLI64Type, IDLU64Type, IDLF16Type, IDLF32Type, IDLF64Type, IDLBufferType, isUnspecifiedGenericType, IDLUnknownType, IDLBooleanType, IDLNumberType, IDLPointerType, IDLInterfaceSubkind, escapeIDLKeyword, getNamespacesPathFor } from "../idl";
15
+ import { indentedBy, isInNamespace } from "../util";
16
+ import { IDLEntity, IDLKind, getExtAttribute, getVerbatimDts, hasExtAttribute, isCallback, isConstructor, isContainerType, isEnum, isInterface, isMethod, isPrimitiveType, isProperty, isReferenceType, isSyntheticEntry, isTypeParameterType, isTypedef, isUnionType, isPackage, isImport, isVersion, isNamespace, IDLExtendedAttributes, IDLAccessorAttribute, IDLVoidType, IDLStringType, IDLUndefinedType, isCallable, getSuperType, IDLAnyType, IDLContainerUtils, DebugUtils, mixMethodParametersAndTags, createReferenceType, transformMethodsAsync2ReturnPromise, isNamedNode, IDLThisType, isOptionalType, IDLI8Type, IDLU8Type, IDLI16Type, IDLU16Type, IDLI32Type, IDLU32Type, IDLI64Type, IDLU64Type, IDLF16Type, IDLF32Type, IDLF64Type, IDLBufferType, isUnspecifiedGenericType, IDLUnknownType, IDLBooleanType, IDLNumberType, IDLPointerType, IDLInterfaceSubkind, escapeIDLKeyword, getNamespacesPathFor, IDLBigintType } from "../idl";
17
17
  import * as webidl2 from "webidl2";
18
18
  import { resolveSyntheticType, toIDLNode } from "./deserialize";
19
19
  import { Language } from "../Language";
20
+ import { warn } from "../util";
20
21
  export class CustomPrintVisitor {
21
22
  constructor(resolver, language) {
22
23
  this.resolver = resolver;
@@ -27,7 +28,8 @@ export class CustomPrintVisitor {
27
28
  visit(node, wrapNamespaces = false) {
28
29
  const namespacesPath = wrapNamespaces ? getNamespacesPathFor(node) : [];
29
30
  for (const namespace of namespacesPath) {
30
- this.print(`${namespace.namespace ? "" : "declare "}namespace ${namespace.name} {`);
31
+ const isTopmost = namespacesPath[0] === namespace;
32
+ this.print(`${!isTopmost ? "" : "declare "}namespace ${namespace.name} {`);
31
33
  this.pushIndent();
32
34
  }
33
35
  if (hasExtAttribute(node, IDLExtendedAttributes.TSType) && this.language == Language.TS)
@@ -82,7 +84,7 @@ export class CustomPrintVisitor {
82
84
  this.print(exports);
83
85
  }
84
86
  printConstant(node) {
85
- this.print(`${node.namespace ? "" : "declare "}const ${node.name} : ${isPrimitiveType(node.type) ? "" : "typeof"} ${this.printTypeForTS(node.type)} = ${node.value}`);
87
+ this.print(`${isInNamespace(node) ? "" : "declare "}const ${node.name} : ${isPrimitiveType(node.type) ? "" : "typeof"} ${this.printTypeForTS(node.type)} = ${node.value}`);
86
88
  }
87
89
  printInterface(node) {
88
90
  var _a;
@@ -92,13 +94,13 @@ export class CustomPrintVisitor {
92
94
  typeSpec = "WrappedBuilder<Args extends any[]>";
93
95
  const entity = (_a = getExtAttribute(node, IDLExtendedAttributes.Entity)) !== null && _a !== void 0 ? _a : IDLEntity.Interface;
94
96
  if (entity === IDLEntity.Literal) {
95
- this.print(`${node.namespace ? "" : "declare "}type ${typeSpec} = ${this.literal(node, false, true)}`);
97
+ this.print(`${isInNamespace(node) ? "" : "declare "}type ${typeSpec} = ${this.literal(node, false, true)}`);
96
98
  }
97
99
  else if (entity === IDLEntity.Tuple) {
98
- this.print(`${node.namespace ? "" : "declare "}type ${typeSpec} = ${this.literal(node, true, false)}`);
100
+ this.print(`${isInNamespace(node) ? "" : "declare "}type ${typeSpec} = ${this.literal(node, true, false)}`);
99
101
  }
100
102
  else if (entity === IDLEntity.NamedTuple) {
101
- this.print(`${node.namespace ? "" : "declare "}type ${typeSpec} = ${this.literal(node, true, true)}`);
103
+ this.print(`${isInNamespace(node) ? "" : "declare "}type ${typeSpec} = ${this.literal(node, true, true)}`);
102
104
  }
103
105
  else {
104
106
  // restore globalScope
@@ -118,7 +120,7 @@ export class CustomPrintVisitor {
118
120
  }
119
121
  if (interfaces.length > 0)
120
122
  typeSpec += ` ${keyword} ${interfaces.map(it => this.toTypeName(it)).join(", ")}`;
121
- this.print(`${node.namespace ? "" : "declare "}${entity.toLowerCase()} ${typeSpec} {`);
123
+ this.print(`${isInNamespace(node) ? "" : "declare "}${entity.toLowerCase()} ${typeSpec} {`);
122
124
  this.currentInterface = node;
123
125
  this.pushIndent();
124
126
  node.constructors.map(it => this.visit(it));
@@ -135,8 +137,7 @@ export class CustomPrintVisitor {
135
137
  this.print("}");
136
138
  }
137
139
  }
138
- // TODO: namespace-related-to-rework: drop 'isGlobal'
139
- printMethod(node, isGlobal = false) {
140
+ printMethod(node, forceAsFree = false) {
140
141
  const returnType = node.returnType && !(isConstructor(node) && this.currentInterface.subkind === IDLInterfaceSubkind.Class)
141
142
  ? `: ${this.printTypeForTS(node.returnType, true)}` : "";
142
143
  const name = isConstructor(node)
@@ -145,13 +146,16 @@ export class CustomPrintVisitor {
145
146
  const typeParams = (node.typeParameters && node.typeParameters.length > 0) ? `<${node.typeParameters.join(",")}>` : "";
146
147
  let preamble = "";
147
148
  if (!isCallable(node)) {
148
- const isStatic = isMethod(node) && node.isStatic && !node.isFree;
149
+ let isStatic = isMethod(node) && node.isStatic;
149
150
  const isProtected = hasExtAttribute(node, IDLExtendedAttributes.Protected);
150
151
  const isOptional = isMethod(node) && node.isOptional;
151
- const isFree = isMethod(node) && node.isFree;
152
- if (isGlobal && !isFree) // TODO: namespace-related-to-rework
153
- throw new Error("internal error");
154
- preamble = `${isFree ? `${node.namespace ? "" : "declare "}function ` : ""}${isProtected ? "protected " : ""}${isStatic ? "static " : ""}${name}${isOptional ? "?" : ""}`;
152
+ let isFree = isMethod(node) && node.isFree;
153
+ if (forceAsFree) {
154
+ isStatic = false;
155
+ isFree = true;
156
+ }
157
+ const inNamespace = getNamespacesPathFor(node).length > 0;
158
+ preamble = `${isFree ? `${isInNamespace(node) ? "" : "declare "}function ` : ""}${isProtected ? "protected " : ""}${isStatic ? "static " : ""}${name}${isOptional ? "?" : ""}`;
155
159
  }
156
160
  this.print(`${preamble}${typeParams}(${mixMethodParametersAndTags(node).map(p => this.paramText(p)).join(", ")})${returnType};`);
157
161
  }
@@ -187,7 +191,7 @@ export class CustomPrintVisitor {
187
191
  }
188
192
  }
189
193
  printEnum(node) {
190
- this.print(`${node.namespace ? "" : "declare "}enum ${node.name} {`);
194
+ this.print(`${isInNamespace(node) ? "" : "declare "}enum ${node.name} {`);
191
195
  this.pushIndent();
192
196
  node.elements.forEach(it => {
193
197
  const initializer = (it.type === IDLStringType ? `"${it.initializer}"` : `${it.initializer}`);
@@ -204,10 +208,11 @@ export class CustomPrintVisitor {
204
208
  // Let's skip imported declarations
205
209
  if (isTypedef(node) &&
206
210
  hasExtAttribute(node, IDLExtendedAttributes.Import)) {
207
- let definition = this.resolver(createReferenceType(node.name, undefined, node));
211
+ let definition = this.resolver(createReferenceType(node));
208
212
  // TODO: handle namespace case better!
209
213
  // TODO: namespace-related-to-rework
210
- throw new Error("not implemented yet");
214
+ //throw new Error("not implemented yet")
215
+ warn("Typedef-with-Import is not implemented yet");
211
216
  // if (definition && !isTypedef(definition) && !hasExtAttribute(definition, IDLExtendedAttributes.Namespace)) {
212
217
  // console.log(`Has better definition for ${node.name}: ${definition.fileName} ${definition.kind}`)
213
218
  // return
@@ -217,7 +222,7 @@ export class CustomPrintVisitor {
217
222
  : hasExtAttribute(node, IDLExtendedAttributes.Import) ? IDLAnyType.name
218
223
  : this.printTypeForTS(node.type);
219
224
  const typeParams = node.typeParameters && node.typeParameters.length > 0 ? `<${node.typeParameters.join(",")}>` : "";
220
- this.print(`${node.namespace ? '' : 'declare '}type ${getName(node)}${typeParams} = ${text};`);
225
+ this.print(`${isInNamespace(node) ? '' : 'declare '}type ${getName(node)}${typeParams} = ${text};`);
221
226
  }
222
227
  printVersion(node) {
223
228
  let text = node.value.join(".");
@@ -229,17 +234,17 @@ export class CustomPrintVisitor {
229
234
  this.print(verbatimDts);
230
235
  return;
231
236
  }
232
- this.print(`${node.namespace ? "" : "declare "} namespace ${node.name} {`);
237
+ this.print(`${isInNamespace(node) ? "" : "declare "} namespace ${node.name} {`);
233
238
  this.pushIndent();
234
239
  node.members.forEach(member => this.visit(member));
235
240
  this.popIndent();
236
241
  this.print("}");
237
242
  }
238
243
  printImport(node) {
239
- this.print(`// import ${node.name}`);
244
+ this.print(`// import ${node.clause.join(".")}${node.name ? " as " : ""}${node.name || ""}`);
240
245
  }
241
246
  printPackage(node) {
242
- this.print(`// package ${node.name}`);
247
+ this.print(`// package ${node.clause.join(".")}`);
243
248
  }
244
249
  checkVerbatim(node) {
245
250
  let verbatim = getExtAttribute(node, IDLExtendedAttributes.VerbatimDts);
@@ -291,6 +296,7 @@ export class CustomPrintVisitor {
291
296
  case IDLStringType: return "string";
292
297
  case IDLVoidType: return "void";
293
298
  case IDLThisType: return "T";
299
+ case IDLBigintType:
294
300
  case IDLPointerType: return "number|bigint";
295
301
  default: throw new Error(`Unknown primitive type ${DebugUtils.debugPrintType(type)}`);
296
302
  }
@@ -1,9 +1,8 @@
1
1
  import * as webidl2 from "webidl2";
2
2
  import * as idl from "../idl";
3
- import * as lib from "../library";
4
3
  export declare function addSyntheticType(name: string, type: idl.IDLEntry): void;
5
4
  export declare function resolveSyntheticType(type: idl.IDLReferenceType): idl.IDLEntry | undefined;
6
5
  export declare function toIDLNode(file: string, node: webidl2.IDLRootType): idl.IDLEntry;
7
6
  export declare function toIDL(file: string): idl.IDLEntry[];
8
- export declare function toIDLFile(fileName: string): lib.IDLFile;
7
+ export declare function toIDLFile(fileName: string): idl.IDLFile;
9
8
  //# sourceMappingURL=deserialize.d.ts.map
@@ -29,9 +29,7 @@ export function resolveSyntheticType(type) {
29
29
  return syntheticTypes.get(type.name);
30
30
  }
31
31
  export function toIDLNode(file, node) {
32
- const result = toIDLNodeForward(file, node);
33
- idl.linkNamespacesBack(result);
34
- return result;
32
+ return toIDLNodeForward(file, node);
35
33
  }
36
34
  function toIDLNodeForward(file, node) {
37
35
  if (isEnum(node)) {
@@ -88,11 +86,15 @@ function isCallable(node) {
88
86
  return node.extAttrs.some(it => it.name == "Invoke");
89
87
  }
90
88
  function toIDLPackage(node) {
91
- return idl.createPackage(node.nameValue);
89
+ if (node.clause.startsWith('"')) { // TODO: remove after new schema formation
90
+ //node.clause = node.clause.substring(1, node.clause.length - 1)
91
+ throw new Error("Obsolete IDL-source syntax detected");
92
+ }
93
+ return idl.createPackage(node.clause.split("."));
92
94
  }
93
95
  function toIDLImport(node) {
94
96
  // console.log(node)
95
- return idl.createImport(node.nameValue);
97
+ return idl.createImport(node.clause.split("."), node.alias || undefined);
96
98
  }
97
99
  function toIDLInterface(file, node) {
98
100
  var _a;
@@ -373,12 +375,8 @@ export function toIDL(file) {
373
375
  }
374
376
  export function toIDLFile(fileName) {
375
377
  const content = fs.readFileSync(fileName).toString();
376
- const entities = webidl2.parse(content).map(it => toIDLNode(fileName, it));
377
- const pack = entities.find(idl.isPackage);
378
- return {
379
- fileName,
380
- entities,
381
- package: pack,
382
- };
378
+ const entries = webidl2.parse(content).map(it => toIDLNode(fileName, it));
379
+ const file = idl.createFile(entries, fileName);
380
+ return idl.linkParentBack(file);
383
381
  }
384
382
  //# sourceMappingURL=deserialize.js.map