@idlizer/core 2.1.2 → 2.1.5

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 (79) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +3 -3
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +36 -30
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +26 -13
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +26 -52
  5. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +2 -1
  6. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +16 -5
  7. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +4 -2
  8. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +20 -12
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +7 -17
  10. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +4 -2
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +9 -3
  12. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +2 -1
  13. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +24 -4
  14. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -2
  15. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +47 -28
  16. package/build/lib/src/LanguageWriters/nameConvertor.d.ts +3 -1
  17. package/build/lib/src/LanguageWriters/nameConvertor.js +5 -1
  18. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +12 -9
  19. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +10 -37
  20. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +4 -1
  21. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +1 -1
  22. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +9 -9
  23. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +15 -24
  24. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +14 -8
  25. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +18 -18
  26. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +4 -6
  27. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +15 -14
  28. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +7 -5
  29. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +22 -43
  30. package/build/lib/src/LibraryInterface.d.ts +1 -4
  31. package/build/lib/src/config.d.ts +206 -66
  32. package/build/lib/src/config.js +7 -3
  33. package/build/lib/src/configDescriber.d.ts +30 -3
  34. package/build/lib/src/configDescriber.js +99 -1
  35. package/build/lib/src/from-idl/DtsPrinter.js +30 -18
  36. package/build/lib/src/from-idl/IDLLinter.d.ts +40 -7
  37. package/build/lib/src/from-idl/IDLLinter.js +211 -25
  38. package/build/lib/src/from-idl/common.js +1 -1
  39. package/build/lib/src/from-idl/deserialize.d.ts +4 -1
  40. package/build/lib/src/from-idl/deserialize.js +434 -346
  41. package/build/lib/src/idl.d.ts +25 -17
  42. package/build/lib/src/idl.js +363 -109
  43. package/build/lib/src/idlize.d.ts +2 -1
  44. package/build/lib/src/idlize.js +82 -26
  45. package/build/lib/src/index.d.ts +4 -3
  46. package/build/lib/src/index.js +3 -2
  47. package/build/lib/src/options.d.ts +1 -1
  48. package/build/lib/src/peer-generation/BuilderClass.d.ts +0 -2
  49. package/build/lib/src/peer-generation/BuilderClass.js +0 -8
  50. package/build/lib/src/peer-generation/LayoutManager.d.ts +10 -3
  51. package/build/lib/src/peer-generation/LayoutManager.js +3 -2
  52. package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
  53. package/build/lib/src/peer-generation/Materialized.js +2 -2
  54. package/build/lib/src/peer-generation/PeerClass.d.ts +3 -8
  55. package/build/lib/src/peer-generation/PeerClass.js +0 -1
  56. package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
  57. package/build/lib/src/peer-generation/PeerFile.js +1 -1
  58. package/build/lib/src/peer-generation/PeerLibrary.d.ts +12 -7
  59. package/build/lib/src/peer-generation/PeerLibrary.js +129 -65
  60. package/build/lib/src/peer-generation/ReferenceResolver.d.ts +1 -1
  61. package/build/lib/src/peer-generation/ReferenceResolver.js +2 -2
  62. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +1 -0
  63. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +6 -2
  64. package/build/lib/src/peer-generation/idl/common.d.ts +2 -1
  65. package/build/lib/src/peer-generation/idl/common.js +13 -2
  66. package/build/lib/src/peer-generation/isMaterialized.js +25 -8
  67. package/build/lib/src/peer-generation/unions.d.ts +3 -2
  68. package/build/lib/src/peer-generation/unions.js +6 -2
  69. package/build/lib/src/resolveNamedNode.d.ts +3 -0
  70. package/build/lib/src/resolveNamedNode.js +105 -0
  71. package/build/lib/src/util.d.ts +6 -0
  72. package/build/lib/src/util.js +33 -0
  73. package/build/lib/src/visitor.d.ts +0 -1
  74. package/build/lib/src/visitor.js +1 -7
  75. package/package.json +2 -2
  76. package/webidl2.js/LICENSE +21 -0
  77. package/webidl2.js/README.md +827 -0
  78. package/webidl2.js/dist/package.json +3 -0
  79. package/webidl2.js/dist/webidl2.js +35 -7
@@ -70,7 +70,7 @@ export class GenericCppConvertor {
70
70
  }
71
71
  /////////////////////////////////////////////////////////////////////////////////////////
72
72
  convertOptional(type) {
73
- return this.convertNode(type.type);
73
+ return { text: generatorConfiguration().OptionalPrefix + this.convertNode(type.type).text, noPrefix: true };
74
74
  }
75
75
  convertUnion(type) {
76
76
  return this.make(type.name, false);
@@ -90,16 +90,21 @@ export class GenericCppConvertor {
90
90
  }
91
91
  throw new Error(`Unmapped container type ${idl.DebugUtils.debugPrintType(type)}`);
92
92
  }
93
- convertImport(type, _) {
93
+ convertImport(type) {
94
+ console.warn("Imports are not implemented yet");
94
95
  return this.make(idl.IDLCustomObjectType.name);
95
96
  }
97
+ convertTypeReferenceAsImport(type, _) {
98
+ return this.convertTypeReference(type);
99
+ }
96
100
  convertTypeReference(type) {
97
101
  var _a;
98
102
  const refName = type.name;
99
103
  switch (refName) {
100
104
  case "object":
101
105
  case "Object":
102
- return this.make('CustomObject');
106
+ // treat object as interop resource
107
+ return this.make('Object');
103
108
  }
104
109
  if (generatorConfiguration().parameterized.includes(refName)) {
105
110
  return this.make('CustomObject');
@@ -138,13 +143,12 @@ export class GenericCppConvertor {
138
143
  case idl.IDLNumberType: return this.make(`Number`);
139
144
  case idl.IDLStringType: return this.make(`String`);
140
145
  case idl.IDLBooleanType: return this.make(`Boolean`);
141
- case idl.IDLBigintType: return this.make(`UInt64`); // TODO add arbitrary precision numeric type
146
+ case idl.IDLBigintType: return this.make(`Int64`); // TODO add arbitrary precision numeric type
142
147
  case idl.IDLPointerType: return this.make('NativePointer');
143
148
  case idl.IDLCustomObjectType: return this.make('CustomObject');
144
149
  case idl.IDLUnknownType:
145
150
  case idl.IDLAnyType: return this.make(`Object`);
146
151
  case idl.IDLUndefinedType: return this.make(`Undefined`);
147
- case idl.IDLLengthType: return this.make(`Length`);
148
152
  case idl.IDLFunctionType: return this.make(`Function`);
149
153
  case idl.IDLDate: return this.make(`Date`);
150
154
  case idl.IDLBufferType: return this.make('Buffer');
@@ -154,7 +158,7 @@ export class GenericCppConvertor {
154
158
  throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
155
159
  }
156
160
  qualifiedName(target) {
157
- return qualifiedName(target, "_");
161
+ return qualifiedName(target, "_", "namespace.name");
158
162
  }
159
163
  computeTargetTypeLiteralName(decl) {
160
164
  const map = new Map();
@@ -171,9 +175,6 @@ export class GenericCppConvertor {
171
175
  export class CppConvertor extends GenericCppConvertor {
172
176
  unwrap(type, result) {
173
177
  const conf = generatorConfiguration();
174
- if (idl.isType(type) && idl.isOptionalType(type)) {
175
- return `${conf.OptionalPrefix}${result.text}`;
176
- }
177
178
  if (result.noPrefix) {
178
179
  return result.text;
179
180
  }
@@ -187,12 +188,16 @@ export class CppConvertor extends GenericCppConvertor {
187
188
  if (!idl.isType(type))
188
189
  return false;
189
190
  const { resolver } = this;
191
+ const seen = new Set;
190
192
  while (type && idl.isReferenceType(type)) {
191
193
  const resolved = resolver.resolveTypeReference(type);
192
194
  if (!resolved)
193
195
  return false;
194
196
  if (!idl.isTypedef(resolved))
195
197
  break;
198
+ if (seen.has(resolved))
199
+ return false;
200
+ seen.add(resolved);
196
201
  type = resolved.type;
197
202
  }
198
203
  return idl.isPrimitiveType(type);
@@ -221,7 +226,6 @@ export class CppInteropArgConvertor extends InteropArgConvertor {
221
226
  case idl.IDLNumberType: return "KInteropNumber";
222
227
  case idl.IDLSerializerBuffer: return "KSerializerBuffer";
223
228
  case idl.IDLBufferType: return "KInteropBuffer";
224
- case idl.IDLLengthType: return "KLength";
225
229
  case idl.IDLFunctionType: return PrimitiveTypesInstance.Int32.getText();
226
230
  case idl.IDLDate: return PrimitiveTypesInstance.Int64.getText();
227
231
  case idl.IDLPointerType: return PrimitiveTypesInstance.NativePointer.getText();
@@ -247,7 +251,11 @@ export class CppReturnTypeConvertor {
247
251
  return 'void';
248
252
  return this.convertor.convert(type);
249
253
  }
250
- convertImport(type, importClause) {
254
+ convertImport(type) {
255
+ console.warn("Imports are not implemented yet");
256
+ return "void";
257
+ }
258
+ convertTypeReferenceAsImport(type, importClause) {
251
259
  return this.convertor.convert(type);
252
260
  }
253
261
  convertOptional(type) {
@@ -264,7 +272,7 @@ export class CppReturnTypeConvertor {
264
272
  convertTypeReference(type) {
265
273
  const decl = this.resolver.resolveTypeReference(type);
266
274
  if (decl && idl.isInterface(decl) && isMaterialized(decl, this.resolver)) {
267
- return generatorTypePrefix() + qualifiedName(decl, "_");
275
+ return generatorTypePrefix() + qualifiedName(decl, "_", "namespace.name");
268
276
  }
269
277
  return this.convertor.convert(type);
270
278
  }
@@ -13,27 +13,16 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from "../../idl";
16
- import { Language } from "../../Language";
17
- import { createDeclarationNameConvertor } from "../../peer-generation/idl/IdlNameConvertor";
18
- import { convertDeclaration } from "../nameConvertor";
16
+ import { LanguageWriter } from "../LanguageWriter";
19
17
  import { TSInteropArgConvertor, TSTypeNameConvertor } from "./TSConvertors";
20
18
  export class ETSTypeNameConvertor extends TSTypeNameConvertor {
21
19
  convertTypeReference(type) {
22
- // Only to deal with namespaces. TODO: remove later
23
- const decl = this.resolver.resolveTypeReference(type);
24
- if (decl && idl.isEnum(decl)) {
25
- return convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), decl);
20
+ let typeName = super.convertTypeReference(type);
21
+ if (LanguageWriter.isReferenceRelativeToNamespaces && idl.isReferenceType(type)) {
22
+ const namespacesPath = idl.getNamespacesPathFor(type).map(it => `${it.name}.`).join("");
23
+ if (typeName.startsWith(namespacesPath))
24
+ typeName = typeName.substring(namespacesPath.length);
26
25
  }
27
- // TODO: Needs to be implemented properly
28
- const types = type.name.split(".");
29
- if (types.length > 1) {
30
- // Takes only name without the namespace prefix
31
- const decl = this.resolver.resolveTypeReference(idl.createReferenceType(types.slice(-1).join()));
32
- if (decl !== undefined) {
33
- return convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), decl);
34
- }
35
- }
36
- const typeName = super.convertTypeReference(type);
37
26
  // TODO: Fix for 'TypeError: Type 'Function<R>' is generic but type argument were not provided.'
38
27
  if (typeName === "Function") {
39
28
  return "Function<void>";
@@ -77,6 +66,7 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
77
66
  case idl.IDLStringType: return 'string';
78
67
  case idl.IDLFunctionType: return 'Object';
79
68
  case idl.IDLBigintType: return 'long';
69
+ case idl.IDLCustomObjectType: return 'object';
80
70
  }
81
71
  return super.convertPrimitiveType(type);
82
72
  }
@@ -9,7 +9,8 @@ export declare class InteropReturnTypeConvertor implements TypeConvertor<string>
9
9
  isReturnInteropBuffer(type: idl.IDLType): boolean;
10
10
  convert(type: idl.IDLType): string;
11
11
  convertContainer(type: idl.IDLContainerType): string;
12
- convertImport(type: idl.IDLReferenceType, importClause: string): string;
12
+ convertImport(type: idl.IDLImport): string;
13
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
13
14
  convertOptional(type: idl.IDLOptionalType): string;
14
15
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
15
16
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
@@ -19,7 +20,8 @@ export declare class InteropReturnTypeConvertor implements TypeConvertor<string>
19
20
  export declare class InteropArgConvertor implements TypeConvertor<string> {
20
21
  convert(type: idl.IDLType): string;
21
22
  convertContainer(type: idl.IDLContainerType): string;
22
- convertImport(type: idl.IDLReferenceType, importClause: string): string;
23
+ convertImport(type: idl.IDLImport): string;
24
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
23
25
  convertOptional(type: idl.IDLOptionalType): string;
24
26
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
25
27
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
@@ -37,9 +37,12 @@ export class InteropReturnTypeConvertor {
37
37
  }
38
38
  return KInteropReturnBuffer;
39
39
  }
40
- convertImport(type, importClause) {
40
+ convertImport(type) {
41
41
  throw new Error(`Cannot pass import type ${type.name} through interop`);
42
42
  }
43
+ convertTypeReferenceAsImport(type, importClause) {
44
+ return this.convertTypeReference(type);
45
+ }
43
46
  convertOptional(type) {
44
47
  return KInteropReturnBuffer;
45
48
  }
@@ -105,7 +108,10 @@ export class InteropArgConvertor {
105
108
  convertContainer(type) {
106
109
  throw new Error(`Cannot pass container types through interop`);
107
110
  }
108
- convertImport(type, importClause) {
111
+ convertImport(type) {
112
+ throw new Error(`Cannot pass import types through interop`);
113
+ }
114
+ convertTypeReferenceAsImport(type, importClause) {
109
115
  throw new Error(`Cannot pass import types through interop`);
110
116
  }
111
117
  convertOptional(type) {
@@ -116,6 +122,7 @@ export class InteropArgConvertor {
116
122
  case idl.IDLI64Type: return "KLong";
117
123
  case idl.IDLU64Type: return "KLong";
118
124
  case idl.IDLI32Type: return "KInt";
125
+ case idl.IDLU32Type: return "KInt";
119
126
  case idl.IDLF32Type: return "KFloat";
120
127
  case idl.IDLNumberType: return 'KInteropNumber';
121
128
  case idl.IDLBigintType: return 'KLong';
@@ -124,7 +131,6 @@ export class InteropArgConvertor {
124
131
  case idl.IDLFunctionType: return 'KInt';
125
132
  case idl.IDLStringType: return 'KStringPtr';
126
133
  case idl.IDLBufferType: return `KInteropBuffer`;
127
- case idl.IDLLengthType: return 'Length';
128
134
  case idl.IDLDate: return 'KLong';
129
135
  case idl.IDLUndefinedType:
130
136
  case idl.IDLVoidType:
@@ -17,7 +17,8 @@ export declare class JavaTypeNameConvertor implements NodeConvertor<string>, Idl
17
17
  convertCallback(type: idl.IDLCallback): string;
18
18
  convertMethod(type: idl.IDLMethod): string;
19
19
  convertConstant(type: idl.IDLConstant): string;
20
- convertImport(type: idl.IDLReferenceType, importClause: string): string;
20
+ convertImport(type: idl.IDLImport): string;
21
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
21
22
  convertTypeReference(type: idl.IDLReferenceType): string;
22
23
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
23
24
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
@@ -84,13 +84,17 @@ export class JavaTypeNameConvertor {
84
84
  convertConstant(type) {
85
85
  throw new Error('Method not implemented.'); // TODO: namespace-related-to-rework
86
86
  }
87
- convertImport(type, importClause) {
87
+ convertImport(type) {
88
+ console.warn("Imports are not implemented yet");
89
+ return type.name;
90
+ }
91
+ convertTypeReferenceAsImport(type, importClause) {
88
92
  return type.name;
89
93
  }
90
94
  convertTypeReference(type) {
91
95
  const importAttr = idl.getExtAttribute(type, idl.IDLExtendedAttributes.Import);
92
96
  if (importAttr) {
93
- return this.convertImport(type, importAttr);
97
+ return this.convertTypeReferenceAsImport(type, importAttr);
94
98
  }
95
99
  const decl = this.resolver.resolveTypeReference(type);
96
100
  if (decl) {
@@ -127,6 +131,9 @@ export class JavaTypeNameConvertor {
127
131
  case idl.IDLDate: return 'Date';
128
132
  case idl.IDLBufferType: return 'byte[]';
129
133
  case idl.IDLInteropReturnBufferType: return 'byte[]';
134
+ case idl.IDLSerializerBuffer: return 'long';
135
+ case idl.IDLAnyType: return 'Ark_Object';
136
+ case idl.IDLUnknownType: return 'Ark_Object';
130
137
  }
131
138
  throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
132
139
  }
@@ -154,7 +161,7 @@ export class JavaTypeNameConvertor {
154
161
  case 'KStringPtr': return 'String';
155
162
  case 'string': return 'String';
156
163
  }
157
- return name;
164
+ return name.split(".").at(-1);
158
165
  }
159
166
  }
160
167
  class JavaIdlNodeToSolidStringConvertor extends JavaTypeNameConvertor {
@@ -178,8 +185,21 @@ export class JavaInteropArgConvertor extends InteropArgConvertor {
178
185
  convertPrimitiveType(type) {
179
186
  switch (type) {
180
187
  case idl.IDLNumberType: return "double";
181
- case idl.IDLLengthType: return "String";
182
188
  case idl.IDLBooleanType: return "boolean";
189
+ case idl.IDLI64Type: return "long";
190
+ case idl.IDLU64Type: return "long";
191
+ case idl.IDLI32Type: return "int";
192
+ case idl.IDLU32Type: return "int";
193
+ case idl.IDLF32Type: return "float";
194
+ case idl.IDLBigintType: return "long";
195
+ case idl.IDLSerializerBuffer: return "long";
196
+ case idl.IDLFunctionType: return "int";
197
+ case idl.IDLStringType: return "String";
198
+ case idl.IDLBufferType: return "byte[]";
199
+ case idl.IDLDate: return "long";
200
+ case idl.IDLVoidType: return "void";
201
+ case idl.IDLUndefinedType: return "long";
202
+ case idl.IDLPointerType: return "long"; // return PrimitiveTypesInstance.NativePointer.getText()
183
203
  }
184
204
  return super.convertPrimitiveType(type);
185
205
  }
@@ -15,7 +15,8 @@ export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNa
15
15
  convertOptional(type: idl.IDLOptionalType): string;
16
16
  convertUnion(type: idl.IDLUnionType): string;
17
17
  convertContainer(type: idl.IDLContainerType): string;
18
- convertImport(type: idl.IDLReferenceType, importClause: string): string;
18
+ convertImport(type: idl.IDLImport): string;
19
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
19
20
  convertTypeReference(type: idl.IDLReferenceType): string;
20
21
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
21
22
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
@@ -27,10 +28,11 @@ export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNa
27
28
  export declare class TSInteropArgConvertor implements TypeConvertor<string> {
28
29
  convert(type: idl.IDLType): string;
29
30
  convertContainer(type: idl.IDLContainerType): string;
30
- convertImport(type: idl.IDLReferenceType, importClause: string): string;
31
+ convertImport(type: idl.IDLImport): string;
31
32
  convertOptional(type: idl.IDLOptionalType): string;
32
33
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
33
34
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
35
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
34
36
  convertTypeReference(type: idl.IDLReferenceType): string;
35
37
  convertUnion(type: idl.IDLUnionType): string;
36
38
  }
@@ -25,16 +25,18 @@ export class TSTypeNameConvertor {
25
25
  return node.name;
26
26
  }
27
27
  convertInterface(node) {
28
- return idl.getFQName(node);
28
+ return idl.getQualifiedName(node, "namespace.name");
29
29
  }
30
30
  convertEnum(node) {
31
- return idl.getFQName(node);
31
+ return idl.getQualifiedName(node, "namespace.name");
32
32
  }
33
33
  convertTypedef(node) {
34
34
  return node.name;
35
35
  }
36
36
  convertCallback(node) {
37
- return node.name;
37
+ return idl.isSyntheticEntry(node)
38
+ ? this.mapCallback(node)
39
+ : node.name;
38
40
  }
39
41
  convertMethod(node) {
40
42
  return node.name;
@@ -72,11 +74,23 @@ export class TSTypeNameConvertor {
72
74
  }
73
75
  throw new Error(`Unmapped container type ${idl.DebugUtils.debugPrintType(type)}`);
74
76
  }
75
- convertImport(type, importClause) {
77
+ convertImport(type) {
78
+ console.warn("Imports are not implemented yet");
76
79
  return type.name;
77
80
  }
81
+ convertTypeReferenceAsImport(type, importClause) {
82
+ var _a;
83
+ const maybeTypeArguments = ((_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.length) ? `<${type.typeArguments.join(', ')}>` : "";
84
+ let decl = this.resolver.resolveTypeReference(type);
85
+ if (decl)
86
+ return `${decl.name}${maybeTypeArguments}`;
87
+ return `${type.name}${maybeTypeArguments}`;
88
+ }
78
89
  convertTypeReference(type) {
79
90
  var _a, _b;
91
+ if (type.name === idl.IDLObjectType.name) {
92
+ return type.name;
93
+ }
80
94
  let decl = this.resolver.resolveTypeReference(type);
81
95
  if (decl) {
82
96
  if (idl.isSyntheticEntry(decl)) {
@@ -89,33 +103,35 @@ export class TSTypeNameConvertor {
89
103
  return this.productType(decl, isTuple, !isTuple);
90
104
  }
91
105
  }
106
+ // FIXME: isEnumMember is not TYPE!
107
+ if (decl && idl.isEnumMember(decl) && decl.parent) {
108
+ // when `interface A { field?: MyEnum.Value1 }` is generated, it is not possible
109
+ // to deserialize A, because there is no such type information in declaration target
110
+ // (can not cast MyEnum to exact MyEnum.Value1)
111
+ decl = decl.parent;
112
+ }
113
+ let typeSpec = type.name;
114
+ let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : [];
115
+ if (typeSpec === `Optional`)
116
+ return `${typeArgs} | undefined`;
117
+ if (typeSpec === `Function`)
118
+ return this.mapFunctionType(typeArgs);
119
+ const maybeTypeArguments = !(typeArgs === null || typeArgs === void 0 ? void 0 : typeArgs.length) ? '' : `<${typeArgs.join(', ')}>`;
120
+ if (decl) {
121
+ const path = idl.getNamespacesPathFor(decl).map(it => it.name);
122
+ path.push(decl.name);
123
+ return `${path.join(".")}${maybeTypeArguments}`;
124
+ }
125
+ return `${type.name}${maybeTypeArguments}`;
92
126
  }
93
- // FIXME: isEnumMember is not TYPE!
94
- if (decl && idl.isEnumMember(decl) && decl.parent) {
95
- // when `interface A { field?: MyEnum.Value1 }` is generated, it is not possible
96
- // to deserialize A, because there is no such type information in declaration target
97
- // (can not cast MyEnum to exact MyEnum.Value1)
98
- decl = decl.parent;
99
- }
100
- let typeSpec = type.name;
101
- let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => idl.printType(it))) !== null && _b !== void 0 ? _b : [];
102
- if (typeSpec === `Optional`)
103
- return `${typeArgs} | undefined`;
104
- if (typeSpec === `Function`)
105
- return this.mapFunctionType(typeArgs);
106
- const maybeTypeArguments = !(typeArgs === null || typeArgs === void 0 ? void 0 : typeArgs.length) ? '' : `<${typeArgs.join(', ')}>`;
107
- if (decl) {
108
- const path = idl.getNamespacesPathFor(decl).map(it => it.name);
109
- path.push(decl.name);
110
- return `${path.join(".")}${maybeTypeArguments}`;
111
- }
112
- return `${type.name}${maybeTypeArguments}`;
127
+ return this.convert(idl.IDLCustomObjectType);
113
128
  }
114
129
  convertTypeParameter(type) {
115
130
  return type.name;
116
131
  }
117
132
  convertPrimitiveType(type) {
118
133
  switch (type) {
134
+ case idl.IDLFunctionType: return 'Function';
119
135
  case idl.IDLUnknownType:
120
136
  case idl.IDLCustomObjectType: return 'unknown';
121
137
  case idl.IDLThisType: return 'this';
@@ -156,7 +172,7 @@ export class TSTypeNameConvertor {
156
172
  return idlProperty;
157
173
  }
158
174
  mapCallback(decl) {
159
- const params = decl.parameters.map(it => `${it.isVariadic ? "..." : ""}${it.name}${it.isOptional ? "?" : ""}: ${this.convert(it.type)}`);
175
+ const params = decl.parameters.map(it => `${it.isVariadic ? "..." : ""}${it.name}${it.isOptional ? "?" : ""}: ${this.convert(it.type)}${it.isVariadic ? "[]" : ""}`);
160
176
  return `((${params.join(", ")}) => ${this.convert(decl.returnType)})`;
161
177
  }
162
178
  productType(decl, isTuple, includeFieldNames) {
@@ -181,7 +197,7 @@ export class TSInteropArgConvertor {
181
197
  convertContainer(type) {
182
198
  throw new Error(`Cannot pass container types through interop`);
183
199
  }
184
- convertImport(type, importClause) {
200
+ convertImport(type) {
185
201
  throw new Error(`Cannot pass import types through interop`);
186
202
  }
187
203
  convertOptional(type) {
@@ -192,14 +208,14 @@ export class TSInteropArgConvertor {
192
208
  case idl.IDLI64Type: return "KLong";
193
209
  case idl.IDLU64Type: return "KLong";
194
210
  case idl.IDLI32Type: return "KInt";
211
+ case idl.IDLU32Type: return "KInt";
195
212
  case idl.IDLF32Type: return "KFloat";
196
213
  case idl.IDLNumberType: return 'number';
197
214
  case idl.IDLBigintType: return 'bigint';
198
215
  case idl.IDLBooleanType:
199
216
  case idl.IDLFunctionType: return 'KInt';
200
217
  case idl.IDLStringType: return 'KStringPtr';
201
- case idl.IDLBufferType: return `ArrayBuffer`;
202
- case idl.IDLLengthType: return 'Length';
218
+ case idl.IDLBufferType: return 'ArrayBuffer';
203
219
  case idl.IDLDate: return 'number';
204
220
  case idl.IDLUndefinedType:
205
221
  case idl.IDLVoidType:
@@ -210,6 +226,9 @@ export class TSInteropArgConvertor {
210
226
  convertTypeParameter(type) {
211
227
  throw new Error("Cannot pass type parameters through interop");
212
228
  }
229
+ convertTypeReferenceAsImport(type, importClause) {
230
+ throw new Error(`Cannot pass import types through interop`);
231
+ }
213
232
  convertTypeReference(type) {
214
233
  throw new Error(`Cannot pass type references through interop`);
215
234
  }
@@ -6,13 +6,15 @@ export interface TypeConvertor<T> {
6
6
  convertOptional(type: idl.IDLOptionalType): T;
7
7
  convertUnion(type: idl.IDLUnionType): T;
8
8
  convertContainer(type: idl.IDLContainerType): T;
9
- convertImport(type: idl.IDLReferenceType, importClause: string): T;
9
+ convertImport(type: idl.IDLImport): T;
10
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): T;
10
11
  convertTypeReference(type: idl.IDLReferenceType): T;
11
12
  convertTypeParameter(type: idl.IDLTypeParameterType): T;
12
13
  convertPrimitiveType(type: idl.IDLPrimitiveType): T;
13
14
  }
14
15
  export declare function convertType<T>(convertor: TypeConvertor<T>, type: idl.IDLType): T;
15
16
  export interface DeclarationConvertor<T> {
17
+ convertImport(node: idl.IDLImport): T;
16
18
  convertNamespace(node: idl.IDLNamespace): T;
17
19
  convertInterface(node: idl.IDLInterface): T;
18
20
  convertEnum(node: idl.IDLEnum): T;
@@ -20,10 +20,12 @@ export function convertType(convertor, type) {
20
20
  return convertor.convertUnion(type);
21
21
  if (idl.isContainerType(type))
22
22
  return convertor.convertContainer(type);
23
+ if (idl.isImport(type))
24
+ return convertor.convertImport(type);
23
25
  if (idl.isReferenceType(type)) {
24
26
  const importAttr = idl.getExtAttribute(type, idl.IDLExtendedAttributes.Import);
25
27
  return importAttr
26
- ? convertor.convertImport(type, importAttr)
28
+ ? convertor.convertTypeReferenceAsImport(type, importAttr)
27
29
  : convertor.convertTypeReference(type);
28
30
  }
29
31
  if (idl.isTypeParameterType(type))
@@ -33,6 +35,8 @@ export function convertType(convertor, type) {
33
35
  throw new Error(`Unknown type ${idl.IDLKind[type.kind]}`);
34
36
  }
35
37
  export function convertDeclaration(convertor, decl) {
38
+ if (idl.isImport(decl))
39
+ return convertor.convertImport(decl);
36
40
  if (idl.isNamespace(decl))
37
41
  return convertor.convertNamespace(decl);
38
42
  if (idl.isInterface(decl))
@@ -80,7 +80,10 @@ export declare class CJLanguageWriter extends LanguageWriter {
80
80
  name: string;
81
81
  stringId: string | undefined;
82
82
  numberId: number;
83
- }[], op: (writer: LanguageWriter) => void): void;
83
+ }[], options: {
84
+ isExport: boolean;
85
+ isDeclare?: boolean;
86
+ }, op: (writer: LanguageWriter) => void): void;
84
87
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
85
88
  writeFunctionDeclaration(name: string, signature: MethodSignature): void;
86
89
  writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
@@ -105,7 +108,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
105
108
  private writeDeclaration;
106
109
  writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
107
110
  writeNativeMethodDeclaration(method: Method): void;
108
- makeEnumCast(_enumEntry: idl.IDLEnum, enumName: string): string;
111
+ i32FromEnum(value: LanguageExpression, _enumEntry: idl.IDLEnum): LanguageExpression;
109
112
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
110
113
  makeClassInit(type: idl.IDLType, parameters: LanguageExpression[]): LanguageExpression;
111
114
  makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
@@ -125,14 +128,14 @@ export declare class CJLanguageWriter extends LanguageWriter {
125
128
  makeDefinedCheck(value: string): LanguageExpression;
126
129
  makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
127
130
  writePrintLog(message: string): void;
128
- makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
131
+ makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
129
132
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
130
133
  getObjectAccessor(convertor: BaseArgConvertor, value: string, args?: ObjectArgs): string;
131
134
  makeUndefined(): LanguageExpression;
132
135
  makeUnwrapOptional(expression: LambdaExpression): LanguageExpression;
133
136
  makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
134
137
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
135
- makeRuntimeTypeGetterCall(value: string): LanguageExpression;
138
+ protected makeRuntimeTypeGetterCall(value: string): LanguageExpression;
136
139
  makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
137
140
  makeNull(value?: string): LanguageExpression;
138
141
  getTagType(): idl.IDLType;
@@ -144,9 +147,11 @@ export declare class CJLanguageWriter extends LanguageWriter {
144
147
  makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, convertorIndex?: number): LanguageExpression;
145
148
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index: number): LanguageExpression;
146
149
  makeTupleAccess(value: string, index: number): LanguageExpression;
147
- enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
148
- ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
149
- makeEnumEntity(enumEntity: idl.IDLEnum, isExport: boolean): LanguageStatement;
150
+ enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
151
+ makeEnumEntity(enumEntity: idl.IDLEnum, options: {
152
+ isExport: boolean;
153
+ isDeclare?: boolean;
154
+ }): LanguageStatement;
150
155
  makeEquals(args: LanguageExpression[]): LanguageExpression;
151
156
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
152
157
  escapeKeyword(word: string): string;
@@ -154,7 +159,5 @@ export declare class CJLanguageWriter extends LanguageWriter {
154
159
  popNamespace(ident?: boolean): void;
155
160
  castToInt(value: string, bitness: 8 | 32): string;
156
161
  castToBoolean(value: string): string;
157
- makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
158
- makeLengthDeserializer(deserializer: string): LanguageStatement | undefined;
159
162
  }
160
163
  //# sourceMappingURL=CJLanguageWriter.d.ts.map