@idlizer/core 2.0.19 → 2.0.21

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 (30) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.js +1 -1
  2. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +1 -0
  3. package/build/lib/src/LanguageWriters/LanguageWriter.js +3 -0
  4. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +4 -0
  5. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +11 -1
  6. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +7 -1
  7. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +22 -1
  8. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +58 -0
  9. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +275 -0
  10. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +4 -0
  11. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +11 -0
  12. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +2 -1
  13. package/build/lib/src/LanguageWriters/index.d.ts +6 -1
  14. package/build/lib/src/LanguageWriters/index.js +38 -1
  15. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +2 -1
  16. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +1 -1
  17. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +7 -4
  18. package/build/lib/src/config.d.ts +6 -0
  19. package/build/lib/src/config.js +13 -3
  20. package/build/lib/src/index.d.ts +3 -1
  21. package/build/lib/src/index.js +3 -1
  22. package/build/lib/src/peer-generation/LayoutManager.d.ts +3 -3
  23. package/build/lib/src/peer-generation/Materialized.d.ts +5 -3
  24. package/build/lib/src/peer-generation/Materialized.js +3 -1
  25. package/build/lib/src/peer-generation/PeerLibrary.d.ts +2 -0
  26. package/build/lib/src/peer-generation/PeerLibrary.js +10 -3
  27. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +4 -1
  28. package/build/lib/src/visitor.d.ts +43 -0
  29. package/build/lib/src/visitor.js +143 -0
  30. package/package.json +2 -2
@@ -19,7 +19,7 @@ import { RuntimeType } from "./common";
19
19
  import { generatorTypePrefix } from "../config";
20
20
  import { hashCodeFromString, warn } from "../util";
21
21
  import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
22
- import { InteropNameConvertor } from "./InteropConvertor";
22
+ import { InteropNameConvertor } from "./convertors/InteropConvertors";
23
23
  import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
24
24
  import { CppInteropConvertor } from "./convertors/CppConvertors";
25
25
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
@@ -273,6 +273,7 @@ export declare abstract class LanguageWriter {
273
273
  writeStatement(stmt: LanguageStatement): void;
274
274
  writeStatements(...statements: LanguageStatement[]): void;
275
275
  writeExpressionStatement(smth: LanguageExpression): void;
276
+ writeExpressionStatements(...statements: LanguageExpression[]): void;
276
277
  writeStaticBlock(op: (writer: this) => void): void;
277
278
  makeRef(type: idl.IDLType, _options?: MakeRefOptions): idl.IDLType;
278
279
  makeThis(): LanguageExpression;
@@ -437,6 +437,9 @@ export class LanguageWriter {
437
437
  writeExpressionStatement(smth) {
438
438
  this.writeStatement(new ExpressionStatement(smth));
439
439
  }
440
+ writeExpressionStatements(...statements) {
441
+ statements.forEach(it => this.writeExpressionStatement(it));
442
+ }
440
443
  writeStaticBlock(op) {
441
444
  this.print("static {");
442
445
  this.pushIndent();
@@ -1,6 +1,7 @@
1
1
  import * as idl from '../../idl';
2
2
  import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
3
  import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
4
+ import { InteropArgConvertor } from './InteropConvertors';
4
5
  export declare class CJTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
6
  protected resolver: ReferenceResolver;
6
7
  constructor(resolver: ReferenceResolver);
@@ -27,4 +28,7 @@ export declare class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvert
27
28
  convert(type: idl.IDLNode): string;
28
29
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
29
30
  }
31
+ export declare class CJInteropArgConvertor extends InteropArgConvertor {
32
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
33
+ }
30
34
  //# sourceMappingURL=CJConvertors.d.ts.map
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import * as idl from '../../idl';
16
16
  import { convertNode, convertType } from '../nameConvertor';
17
+ import { InteropArgConvertor } from './InteropConvertors';
17
18
  export class CJTypeNameConvertor {
18
19
  constructor(resolver) {
19
20
  this.resolver = resolver;
@@ -105,7 +106,7 @@ export class CJTypeNameConvertor {
105
106
  case idl.IDLF64Type: return 'Float64';
106
107
  case idl.IDLPointerType: return 'UInt64';
107
108
  case idl.IDLVoidType: return 'Unit';
108
- case idl.IDLBufferType: return 'ArrayList<UInt8>';
109
+ case idl.IDLBufferType: return 'Array<UInt8>';
109
110
  }
110
111
  throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
111
112
  }
@@ -151,4 +152,13 @@ export class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvertor {
151
152
  return super.convertPrimitiveType(type);
152
153
  }
153
154
  }
155
+ export class CJInteropArgConvertor extends InteropArgConvertor {
156
+ convertPrimitiveType(type) {
157
+ switch (type) {
158
+ case idl.IDLNumberType: return "Float64";
159
+ case idl.IDLLengthType: return "Ark_Length";
160
+ }
161
+ return super.convertPrimitiveType(type);
162
+ }
163
+ }
154
164
  //# sourceMappingURL=CJConvertors.js.map
@@ -1,8 +1,14 @@
1
1
  import * as idl from '../../idl';
2
2
  import { IdlNameConvertor } from "../nameConvertor";
3
- import { InteropConvertor } from '../InteropConvertor';
3
+ import { InteropConvertor } from './InteropConvertors';
4
+ import { InteropArgConvertor } from './InteropConvertors';
4
5
  export declare class CppInteropConvertor extends InteropConvertor implements IdlNameConvertor {
5
6
  private unwrap;
6
7
  convert(node: idl.IDLNode): string;
7
8
  }
9
+ export declare class CppInteropArgConvertor extends InteropArgConvertor {
10
+ static INSTANCE: CppInteropArgConvertor;
11
+ convertOptional(type: idl.IDLOptionalType): string;
12
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
13
+ }
8
14
  //# sourceMappingURL=CppConvertors.d.ts.map
@@ -14,7 +14,9 @@
14
14
  */
15
15
  import * as idl from '../../idl';
16
16
  import { generatorConfiguration } from "../../config";
17
- import { InteropConvertor } from '../InteropConvertor';
17
+ import { InteropConvertor } from './InteropConvertors';
18
+ import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
19
+ import { InteropArgConvertor } from './InteropConvertors';
18
20
  export class CppInteropConvertor extends InteropConvertor {
19
21
  unwrap(type, result) {
20
22
  const conf = generatorConfiguration();
@@ -34,4 +36,23 @@ export class CppInteropConvertor extends InteropConvertor {
34
36
  return this.unwrap(node, this.convertNode(node));
35
37
  }
36
38
  }
39
+ export class CppInteropArgConvertor extends InteropArgConvertor {
40
+ convertOptional(type) {
41
+ return PrimitiveTypesInstance.NativePointer.getText();
42
+ }
43
+ convertPrimitiveType(type) {
44
+ switch (type) {
45
+ case idl.IDLBooleanType: return PrimitiveTypesInstance.Boolean.getText();
46
+ case idl.IDLI32Type: return PrimitiveTypesInstance.Int32.getText();
47
+ case idl.IDLNumberType: return "KInteropNumber";
48
+ case idl.IDLBufferType: return "Ark_Buffer";
49
+ case idl.IDLLengthType: return "KLength";
50
+ case idl.IDLFunctionType: return PrimitiveTypesInstance.Int32.getText();
51
+ case idl.IDLDate: return PrimitiveTypesInstance.Int64.getText();
52
+ case idl.IDLPointerType: return PrimitiveTypesInstance.NativePointer.getText();
53
+ }
54
+ return super.convertPrimitiveType(type);
55
+ }
56
+ }
57
+ CppInteropArgConvertor.INSTANCE = new CppInteropArgConvertor();
37
58
  //# sourceMappingURL=CppConvertors.js.map
@@ -0,0 +1,58 @@
1
+ import * as idl from '../../idl';
2
+ import { PeerMethod } from '../../peer-generation/PeerMethod';
3
+ import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
4
+ import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
5
+ export interface ConvertResult {
6
+ text: string;
7
+ noPrefix: boolean;
8
+ }
9
+ export declare class InteropConvertor implements NodeConvertor<ConvertResult> {
10
+ protected resolver: ReferenceResolver;
11
+ constructor(resolver: ReferenceResolver);
12
+ private make;
13
+ convertNode(node: idl.IDLNode): ConvertResult;
14
+ convertNamespace(node: idl.IDLNamespace): ConvertResult;
15
+ convertInterface(node: idl.IDLInterface): ConvertResult;
16
+ convertEnum(node: idl.IDLEnum): ConvertResult;
17
+ convertTypedef(node: idl.IDLTypedef): ConvertResult;
18
+ convertCallback(node: idl.IDLCallback): ConvertResult;
19
+ convertMethod(node: idl.IDLMethod): ConvertResult;
20
+ convertConstant(node: idl.IDLConstant): ConvertResult;
21
+ convertOptional(type: idl.IDLOptionalType): ConvertResult;
22
+ convertUnion(type: idl.IDLUnionType): ConvertResult;
23
+ convertContainer(type: idl.IDLContainerType): ConvertResult;
24
+ convertImport(type: idl.IDLReferenceType, _: string): ConvertResult;
25
+ convertTypeReference(type: idl.IDLReferenceType): ConvertResult;
26
+ convertTypeParameter(type: idl.IDLTypeParameterType): ConvertResult;
27
+ convertPrimitiveType(type: idl.IDLPrimitiveType): ConvertResult;
28
+ private enumName;
29
+ private computeTargetTypeLiteralName;
30
+ }
31
+ export declare class InteropNameConvertor implements IdlNameConvertor {
32
+ protected resolver: ReferenceResolver;
33
+ private readonly interopConvertor;
34
+ constructor(resolver: ReferenceResolver);
35
+ convert(node: idl.IDLNode): string;
36
+ }
37
+ export declare class InteropReturnTypeConvertor implements TypeConvertor<string> {
38
+ isVoid(method: PeerMethod): boolean;
39
+ convert(type: idl.IDLType): string;
40
+ convertContainer(type: idl.IDLContainerType): string;
41
+ convertImport(type: idl.IDLReferenceType, importClause: string): string;
42
+ convertOptional(type: idl.IDLOptionalType): string;
43
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
44
+ convertTypeParameter(type: idl.IDLTypeParameterType): string;
45
+ convertTypeReference(type: idl.IDLReferenceType): string;
46
+ convertUnion(type: idl.IDLUnionType): string;
47
+ }
48
+ export declare class InteropArgConvertor implements TypeConvertor<string> {
49
+ convert(type: idl.IDLType): string;
50
+ convertContainer(type: idl.IDLContainerType): string;
51
+ convertImport(type: idl.IDLReferenceType, importClause: string): string;
52
+ convertOptional(type: idl.IDLOptionalType): string;
53
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
54
+ convertTypeParameter(type: idl.IDLTypeParameterType): string;
55
+ convertTypeReference(type: idl.IDLReferenceType): string;
56
+ convertUnion(type: idl.IDLUnionType): string;
57
+ }
58
+ //# sourceMappingURL=InteropConvertors.d.ts.map
@@ -0,0 +1,275 @@
1
+ /*
2
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+ import { generatorConfiguration } from '../../config';
16
+ import * as idl from '../../idl';
17
+ import { qualifiedName } from '../../peer-generation/idl/common';
18
+ import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
19
+ import { capitalize } from '../../util';
20
+ import { maybeTransformManagedCallback } from '../ArgConvertors';
21
+ import { convertNode, convertType } from '../nameConvertor';
22
+ export class InteropConvertor {
23
+ constructor(resolver) {
24
+ this.resolver = resolver;
25
+ }
26
+ make(text, noPrefix = false) {
27
+ return { text, noPrefix };
28
+ }
29
+ convertNode(node) {
30
+ return convertNode(this, node);
31
+ }
32
+ convertNamespace(node) {
33
+ throw new Error("Internal error: namespaces are not allowed on the interop layer");
34
+ }
35
+ convertInterface(node) {
36
+ switch (node.subkind) {
37
+ case idl.IDLInterfaceSubkind.AnonymousInterface:
38
+ return node.name
39
+ ? this.make(node.name)
40
+ : this.make(this.computeTargetTypeLiteralName(node), true);
41
+ case idl.IDLInterfaceSubkind.Interface:
42
+ case idl.IDLInterfaceSubkind.Class:
43
+ if (idl.hasExtAttribute(node, idl.IDLExtendedAttributes.Predefined)) {
44
+ return this.make(node.name, true);
45
+ }
46
+ return this.make(node.name);
47
+ case idl.IDLInterfaceSubkind.Tuple:
48
+ return node.name
49
+ ? this.make(node.name)
50
+ : this.make(`Tuple_${node.properties.map(it => this.convertNode(idl.maybeOptional(it.type, it.isOptional)).text).join("_")}`, true);
51
+ }
52
+ }
53
+ convertEnum(node) {
54
+ return this.make(this.enumName(node));
55
+ }
56
+ convertTypedef(node) {
57
+ return this.make(node.name);
58
+ }
59
+ convertCallback(node) {
60
+ return this.make(generatorConfiguration().param("LibraryPrefix") + node.name, true);
61
+ }
62
+ convertMethod(node) {
63
+ return this.make(node.name);
64
+ }
65
+ convertConstant(node) {
66
+ return this.make(node.name);
67
+ }
68
+ /////////////////////////////////////////////////////////////////////////////////////////
69
+ convertOptional(type) {
70
+ return this.convertNode(type.type);
71
+ }
72
+ convertUnion(type) {
73
+ return this.make(type.name, false);
74
+ }
75
+ convertContainer(type) {
76
+ if (idl.IDLContainerUtils.isPromise(type)) {
77
+ return this.make(`Promise_${this.convertNode(type.elementType[0]).text}`);
78
+ }
79
+ if (idl.IDLContainerUtils.isSequence(type)) {
80
+ if (type.elementType[0] === idl.IDLU8Type) {
81
+ return this.make(`uint8_t*`, true);
82
+ }
83
+ return this.make(`Array_${this.convertNode(type.elementType[0]).text}`, true);
84
+ }
85
+ if (idl.IDLContainerUtils.isRecord(type)) {
86
+ return this.make(`Map_${this.convertNode(type.elementType[0]).text}_${this.convertNode(type.elementType[1]).text}`, true);
87
+ }
88
+ throw new Error(`Unmapped container type ${idl.DebugUtils.debugPrintType(type)}`);
89
+ }
90
+ convertImport(type, _) {
91
+ return this.make(idl.IDLCustomObjectType.name);
92
+ }
93
+ convertTypeReference(type) {
94
+ var _a;
95
+ const refName = type.name;
96
+ switch (refName) {
97
+ case "object":
98
+ case "Object":
99
+ return this.make('CustomObject');
100
+ }
101
+ if (generatorConfiguration().paramArray("knownParameterized").includes(refName)) {
102
+ return this.make('CustomObject');
103
+ }
104
+ let decl = this.resolver.toDeclaration(type);
105
+ if (idl.isCallback(decl)) {
106
+ decl = (_a = maybeTransformManagedCallback(decl)) !== null && _a !== void 0 ? _a : decl;
107
+ }
108
+ if (idl.isType(decl)) {
109
+ if (idl.isReferenceType(decl)) {
110
+ return this.make(`${capitalize(decl.name)}`);
111
+ }
112
+ return this.convertNode(decl);
113
+ }
114
+ let res = this.convertNode(decl);
115
+ if (type.name === "Optional")
116
+ res = this.make("Opt_" + res.text, true);
117
+ return res;
118
+ }
119
+ convertTypeParameter(type) {
120
+ return this.make('CustomObject');
121
+ }
122
+ convertPrimitiveType(type) {
123
+ switch (type) {
124
+ case idl.IDLVoidType: return this.make('void', true);
125
+ case idl.IDLI8Type: return this.make(`Int8`);
126
+ case idl.IDLU8Type: return this.make(`UInt8`);
127
+ case idl.IDLI16Type: return this.make(`Int16`);
128
+ case idl.IDLU16Type: return this.make(`UInt16`);
129
+ case idl.IDLI32Type: return this.make(`Int32`);
130
+ case idl.IDLU32Type: return this.make(`UInt32`);
131
+ case idl.IDLI64Type: return this.make(`Int64`);
132
+ case idl.IDLU64Type: return this.make(`UInt64`);
133
+ case idl.IDLF32Type: return this.make(`Float32`);
134
+ case idl.IDLF64Type: return this.make(`Float64`);
135
+ case idl.IDLNumberType: return this.make(`Number`);
136
+ case idl.IDLStringType: return this.make(`String`);
137
+ case idl.IDLBooleanType: return this.make(`Boolean`);
138
+ case idl.IDLPointerType: return this.make('NativePointer');
139
+ case idl.IDLUnknownType:
140
+ case idl.IDLCustomObjectType:
141
+ case idl.IDLAnyType: return this.make(`CustomObject`);
142
+ case idl.IDLUndefinedType: return this.make(`Undefined`);
143
+ case idl.IDLLengthType: return this.make(`Length`);
144
+ case idl.IDLFunctionType: return this.make(`Function`);
145
+ case idl.IDLDate: return this.make(`Date`);
146
+ case idl.IDLBufferType: return this.make('Buffer');
147
+ case idl.IDLPointerType: return this.make('Pointer');
148
+ }
149
+ throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
150
+ }
151
+ enumName(target) {
152
+ return qualifiedName(target, "_");
153
+ }
154
+ computeTargetTypeLiteralName(decl) {
155
+ const map = new Map();
156
+ for (const prop of decl.properties) {
157
+ const type = this.convertNode(prop.type);
158
+ const values = map.has(type.text) ? map.get(type.text) : [];
159
+ values.push(prop.name);
160
+ map.set(type.text, values);
161
+ }
162
+ const names = Array.from(map.keys()).map(key => `${key}_${map.get(key).join('_')}`);
163
+ return `Literal_${names.join('_')}`;
164
+ }
165
+ }
166
+ export class InteropNameConvertor {
167
+ constructor(resolver) {
168
+ this.resolver = resolver;
169
+ this.interopConvertor = new InteropConvertor(resolver);
170
+ }
171
+ convert(node) {
172
+ return this.interopConvertor.convertNode(node).text;
173
+ }
174
+ }
175
+ export class InteropReturnTypeConvertor {
176
+ isVoid(method) {
177
+ return this.convert(method.returnType) === idl.IDLVoidType.name;
178
+ }
179
+ convert(type) {
180
+ return convertType(this, type);
181
+ }
182
+ convertContainer(type) {
183
+ if (idl.IDLContainerUtils.isSequence(type) || idl.IDLContainerUtils.isPromise(type)) {
184
+ // TODO return array by some way
185
+ return "void";
186
+ }
187
+ else
188
+ return PrimitiveTypesInstance.NativePointer.getText();
189
+ }
190
+ convertImport(type, importClause) {
191
+ throw new Error(`Cannot pass import type ${type.name} through interop`);
192
+ }
193
+ convertOptional(type) {
194
+ return this.convert(type.type);
195
+ }
196
+ convertPrimitiveType(type) {
197
+ switch (type) {
198
+ case idl.IDLI8Type:
199
+ case idl.IDLU8Type:
200
+ case idl.IDLI16Type:
201
+ case idl.IDLU16Type:
202
+ case idl.IDLI32Type:
203
+ case idl.IDLU32Type:
204
+ case idl.IDLI64Type:
205
+ case idl.IDLU64Type:
206
+ case idl.IDLF16Type:
207
+ case idl.IDLF32Type:
208
+ case idl.IDLF64Type:
209
+ case idl.IDLNumberType: return PrimitiveTypesInstance.Int32.getText();
210
+ case idl.IDLBooleanType: return PrimitiveTypesInstance.Boolean.getText();
211
+ case idl.IDLAnyType:
212
+ case idl.IDLBufferType:
213
+ case idl.IDLStringType:
214
+ case idl.IDLThisType:
215
+ case idl.IDLUndefinedType:
216
+ case idl.IDLUnknownType:
217
+ case idl.IDLVoidType: return idl.IDLVoidType.name;
218
+ case idl.IDLPointerType: return PrimitiveTypesInstance.NativePointer.getText();
219
+ }
220
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
221
+ }
222
+ convertTypeParameter(type) {
223
+ return idl.IDLVoidType.name;
224
+ }
225
+ convertTypeReference(type) {
226
+ if (type.name.endsWith("Attribute"))
227
+ return idl.IDLVoidType.name;
228
+ return PrimitiveTypesInstance.NativePointer.getText();
229
+ }
230
+ convertUnion(type) {
231
+ return PrimitiveTypesInstance.NativePointer.getText();
232
+ }
233
+ }
234
+ export class InteropArgConvertor {
235
+ convert(type) {
236
+ return convertType(this, type);
237
+ }
238
+ convertContainer(type) {
239
+ throw new Error(`Cannot pass container types through interop`);
240
+ }
241
+ convertImport(type, importClause) {
242
+ throw new Error(`Cannot pass import types through interop`);
243
+ }
244
+ convertOptional(type) {
245
+ return "KNativePointer";
246
+ }
247
+ convertPrimitiveType(type) {
248
+ switch (type) {
249
+ case idl.IDLI32Type: return "KInt";
250
+ case idl.IDLF32Type: return "KFloat";
251
+ case idl.IDLNumberType: return 'number';
252
+ case idl.IDLBigintType: return 'bigint';
253
+ case idl.IDLBooleanType:
254
+ case idl.IDLFunctionType: return 'KInt';
255
+ case idl.IDLStringType: return 'KStringPtr';
256
+ case idl.IDLBufferType: return `ArrayBuffer`;
257
+ case idl.IDLLengthType: return 'Length';
258
+ case idl.IDLDate: return 'KLong';
259
+ case idl.IDLUndefinedType:
260
+ case idl.IDLVoidType: return PrimitiveTypesInstance.NativePointer.getText();
261
+ case idl.IDLPointerType: return "KPointer"; //PrimitiveType.NativePointer.getText()
262
+ }
263
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
264
+ }
265
+ convertTypeParameter(type) {
266
+ throw new Error("Cannot pass type parameters through interop");
267
+ }
268
+ convertTypeReference(type) {
269
+ throw new Error(`Cannot pass type references through interop`);
270
+ }
271
+ convertUnion(type) {
272
+ throw new Error("Cannot pass union types through interop");
273
+ }
274
+ }
275
+ //# sourceMappingURL=InteropConvertors.js.map
@@ -1,6 +1,7 @@
1
1
  import * as idl from '../../idl';
2
2
  import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
3
  import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
4
+ import { InteropArgConvertor } from './InteropConvertors';
4
5
  export declare class JavaTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
6
  private resolver;
6
7
  constructor(resolver: ReferenceResolver);
@@ -28,5 +29,8 @@ declare class JavaIdlNodeToSolidStringConvertor extends JavaTypeNameConvertor {
28
29
  protected solidConvertor: import("../../util").Lazy<this>;
29
30
  convertContainer(type: idl.IDLContainerType): string;
30
31
  }
32
+ export declare class JavaInteropArgConvertor extends InteropArgConvertor {
33
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
34
+ }
31
35
  export {};
32
36
  //# sourceMappingURL=JavaConvertors.d.ts.map
@@ -15,6 +15,7 @@
15
15
  import * as idl from '../../idl';
16
16
  import { lazy } from '../../util';
17
17
  import { convertNode, convertType } from '../nameConvertor';
18
+ import { InteropArgConvertor } from './InteropConvertors';
18
19
  function convertJavaOptional(type) {
19
20
  switch (type) {
20
21
  case 'boolean': return 'Opt_Boolean';
@@ -172,4 +173,14 @@ class JavaIdlNodeToSolidStringConvertor extends JavaTypeNameConvertor {
172
173
  throw new Error(`IDL type ${idl.DebugUtils.debugPrintType(type)} not supported`);
173
174
  }
174
175
  }
176
+ export class JavaInteropArgConvertor extends InteropArgConvertor {
177
+ convertPrimitiveType(type) {
178
+ switch (type) {
179
+ case idl.IDLNumberType: return "double";
180
+ case idl.IDLLengthType: return "String";
181
+ case idl.IDLBooleanType: return "boolean";
182
+ }
183
+ return super.convertPrimitiveType(type);
184
+ }
185
+ }
175
186
  //# sourceMappingURL=JavaConvertors.js.map
@@ -126,6 +126,8 @@ export class TSTypeNameConvertor {
126
126
  case idl.IDLBooleanType: return 'boolean';
127
127
  case idl.IDLI32Type:
128
128
  return 'int32';
129
+ case idl.IDLF32Type:
130
+ return 'float32';
129
131
  case idl.IDLI8Type:
130
132
  case idl.IDLU8Type:
131
133
  case idl.IDLI16Type:
@@ -133,7 +135,6 @@ export class TSTypeNameConvertor {
133
135
  case idl.IDLU32Type:
134
136
  case idl.IDLI64Type:
135
137
  case idl.IDLU64Type:
136
- case idl.IDLF32Type:
137
138
  case idl.IDLF64Type:
138
139
  case idl.IDLNumberType:
139
140
  return 'number';
@@ -1,3 +1,8 @@
1
+ import { Language } from "../Language";
2
+ import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
3
+ import { InteropArgConvertor } from "./convertors/InteropConvertors";
4
+ import { LanguageWriter } from "./LanguageWriter";
1
5
  export * from "./nameConvertor";
2
- export * from "./InteropConvertor";
6
+ export declare function createLanguageWriter(language: Language, resolver?: ReferenceResolver): LanguageWriter;
7
+ export declare function createInteropArgConvertor(language: Language): InteropArgConvertor;
3
8
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,40 @@
1
+ import { IndentedPrinter } from "../IndentedPrinter";
2
+ import { Language } from "../Language";
3
+ import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
4
+ import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
5
+ import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameConvertor } from "./convertors/CJConvertors";
6
+ import { CppInteropArgConvertor, CppInteropConvertor } from "./convertors/CppConvertors";
7
+ import { ETSTypeNameConvertor } from "./convertors/ETSConvertors";
8
+ import { InteropArgConvertor } from "./convertors/InteropConvertors";
9
+ import { JavaInteropArgConvertor, JavaTypeNameConvertor } from "./convertors/JavaConvertors";
10
+ import { TSTypeNameConvertor } from "./convertors/TSConvertors";
11
+ import { CJLanguageWriter } from "./writers/CJLanguageWriter";
12
+ import { CppLanguageWriter } from "./writers/CppLanguageWriter";
13
+ import { ETSLanguageWriter } from "./writers/ETSLanguageWriter";
14
+ import { JavaLanguageWriter } from "./writers/JavaLanguageWriter";
15
+ import { TSLanguageWriter } from "./writers/TsLanguageWriter";
1
16
  export * from "./nameConvertor";
2
- export * from "./InteropConvertor";
17
+ export function createLanguageWriter(language, resolver) {
18
+ resolver !== null && resolver !== void 0 ? resolver : (resolver = EmptyReferenceResolver);
19
+ const printer = new IndentedPrinter();
20
+ switch (language) {
21
+ case Language.TS: return new TSLanguageWriter(printer, resolver, new TSTypeNameConvertor(resolver));
22
+ case Language.ARKTS: return new ETSLanguageWriter(printer, resolver, new ETSTypeNameConvertor(resolver), new CppInteropConvertor(resolver));
23
+ case Language.JAVA: return new JavaLanguageWriter(printer, resolver, new JavaTypeNameConvertor(resolver));
24
+ case Language.CPP: return new CppLanguageWriter(printer, resolver, new CppInteropConvertor(resolver), PrimitiveTypesInstance);
25
+ case Language.CJ: return new CJLanguageWriter(printer, resolver, new CJTypeNameConvertor(resolver), new CJIDLTypeToForeignStringConvertor(resolver));
26
+ default: throw new Error(`Language ${language.toString()} is not supported`);
27
+ }
28
+ }
29
+ export function createInteropArgConvertor(language) {
30
+ switch (language) {
31
+ case Language.TS:
32
+ case Language.ARKTS: return new InteropArgConvertor();
33
+ case Language.CPP: return CppInteropArgConvertor.INSTANCE;
34
+ case Language.JAVA: return new JavaInteropArgConvertor();
35
+ case Language.CJ: return new CJInteropArgConvertor();
36
+ }
37
+ throw new Error(`InteropArgConvertor for language ${language} not implemented`);
38
+ }
39
+ const EmptyReferenceResolver = createEmptyReferenceResolver();
3
40
  //# sourceMappingURL=index.js.map
@@ -329,7 +329,7 @@ export class CJLanguageWriter extends LanguageWriter {
329
329
  const init = initExpr != undefined ? ` = ${initExpr.asString()}` : ``;
330
330
  name = this.escapeKeyword(name);
331
331
  let prefix = this.makeFieldModifiersList(modifiers);
332
- this.printer.print(`${prefix ? prefix.concat(" ") : ""}var ${name}: ${this.getNodeName(type)}${init}`);
332
+ this.printer.print(`${prefix ? prefix.concat(" ") : ""}var ${name}: ${this.getNodeName(idl.maybeOptional(type, optional))}${init}`);
333
333
  }
334
334
  writeMethodDeclaration(name, signature, modifiers) {
335
335
  this.writeDeclaration(name, signature, modifiers);
@@ -395,6 +395,7 @@ export class CJLanguageWriter extends LanguageWriter {
395
395
  }
396
396
  writeNativeMethodDeclaration(name, signature) {
397
397
  let signture = `${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.typeForeignConvertor.convert(it)}`).join(", ")}`;
398
+ name = name.startsWith('_') ? name.slice(1) : name;
398
399
  this.print(`func ${name}(${signture}): ${this.typeForeignConvertor.convert(signature.returnType)}`);
399
400
  }
400
401
  makeEnumCast(enumName, _unsafe, _convertor) {
@@ -37,7 +37,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
37
37
  resolver?: ReferenceResolver;
38
38
  }): LanguageWriter;
39
39
  getNodeName(type: idl.IDLNode): string;
40
- writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean): void;
40
+ writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
41
41
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], isDeclared?: boolean): void;
42
42
  writeFunctionDeclaration(name: string, signature: MethodSignature): void;
43
43
  writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
@@ -135,11 +135,13 @@ export class TSLanguageWriter extends LanguageWriter {
135
135
  getNodeName(type) {
136
136
  return this.typeConvertor.convert(type);
137
137
  }
138
- writeClass(name, op, superClass, interfaces, generics, isDeclared) {
138
+ writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
139
139
  let extendsClause = superClass ? ` extends ${superClass}` : '';
140
140
  let implementsClause = interfaces ? ` implements ${interfaces.join(",")}` : '';
141
- const genericsClause = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : '';
142
- this.printer.print(`export${isDeclared ? " declare" : ""} class ${name}${genericsClause}${extendsClause}${implementsClause} {`);
141
+ let genericsClause = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : '';
142
+ let declaredClause = isDeclared ? ` declare` : '';
143
+ let abstractClause = isAbstract ? ` abstract` : '';
144
+ this.printer.print(`export${declaredClause}${abstractClause} class ${name}${genericsClause}${extendsClause}${implementsClause} {`);
143
145
  this.pushIndent();
144
146
  op(this);
145
147
  this.popIndent();
@@ -165,7 +167,8 @@ export class TSLanguageWriter extends LanguageWriter {
165
167
  }
166
168
  generateFunctionDeclaration(name, signature) {
167
169
  const args = signature.args.map((it, index) => `${signature.argName(index)}${idl.isOptionalType(it) ? '?' : ''}: ${this.getNodeName(it)}`);
168
- return `export function ${name}(${args.join(", ")})`;
170
+ const returnType = this.getNodeName(signature.returnType);
171
+ return `export function ${name}(${args.join(", ")}): ${returnType}`;
169
172
  }
170
173
  writeEnum(name, members) {
171
174
  this.printer.print(`export enum ${name} {`);
@@ -2,6 +2,12 @@ export interface GeneratorConfiguration {
2
2
  param<T>(name: string): T;
3
3
  paramArray<T>(name: string): T[];
4
4
  }
5
+ export declare class BaseGeneratorConfiguration implements GeneratorConfiguration {
6
+ protected params: Record<string, any>;
7
+ constructor(params?: Record<string, any>);
8
+ param<T>(name: string): T;
9
+ paramArray<T>(name: string): T[];
10
+ }
5
11
  export declare function setDefaultConfiguration(config: GeneratorConfiguration): void;
6
12
  export declare function generatorConfiguration(): GeneratorConfiguration;
7
13
  export declare function generatorTypePrefix(): string;
@@ -12,15 +12,25 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- class EmptyGeneratorConfiguration {
15
+ export class BaseGeneratorConfiguration {
16
+ constructor(params = {}) {
17
+ this.params = {};
18
+ Object.assign(this.params, params);
19
+ }
16
20
  param(name) {
21
+ if (name in this.params) {
22
+ return this.params[name];
23
+ }
17
24
  throw new Error(`${name} is unknown`);
18
25
  }
19
26
  paramArray(name) {
20
- throw new Error(`array ${name} is unknown`);
27
+ if (name in this.params) {
28
+ return this.params[name];
29
+ }
30
+ throw new Error(`${name} is unknown`);
21
31
  }
22
32
  }
23
- let currentConfig = new EmptyGeneratorConfiguration();
33
+ let currentConfig = new BaseGeneratorConfiguration();
24
34
  export function setDefaultConfiguration(config) {
25
35
  currentConfig = config;
26
36
  }
@@ -1,6 +1,7 @@
1
1
  export * from "./config";
2
2
  export * from "./configMerge";
3
3
  export * from "./idl";
4
+ export * from "./visitor";
4
5
  export * from "./library";
5
6
  export * from "./idlize";
6
7
  export * from "./inheritance";
@@ -15,18 +16,19 @@ export * from "./LanguageWriters/LanguageWriter";
15
16
  export * from "./LanguageWriters/ArgConvertors";
16
17
  export * from "./LanguageWriters/common";
17
18
  export * from "./LanguageWriters/nameConvertor";
18
- export * from "./LanguageWriters/InteropConvertor";
19
19
  export * from "./LanguageWriters/convertors/CppConvertors";
20
20
  export * from "./LanguageWriters/convertors/TSConvertors";
21
21
  export * from "./LanguageWriters/convertors/ETSConvertors";
22
22
  export * from "./LanguageWriters/convertors/JavaConvertors";
23
23
  export * from "./LanguageWriters/convertors/CJConvertors";
24
+ export * from "./LanguageWriters/convertors/InteropConvertors";
24
25
  export * from "./LanguageWriters/writers/CJLanguageWriter";
25
26
  export * from "./LanguageWriters/writers/CLikeLanguageWriter";
26
27
  export * from "./LanguageWriters/writers/CppLanguageWriter";
27
28
  export * from "./LanguageWriters/writers/JavaLanguageWriter";
28
29
  export * from "./LanguageWriters/writers/TsLanguageWriter";
29
30
  export * from "./LanguageWriters/writers/ETSLanguageWriter";
31
+ export * from "./LanguageWriters/nameConvertor";
30
32
  export * from "./peer-generation/idl/IdlNameConvertor";
31
33
  export * from "./peer-generation/LayoutManager";
32
34
  export * from "./peer-generation/PrimitiveType";
@@ -15,6 +15,7 @@
15
15
  export * from "./config";
16
16
  export * from "./configMerge";
17
17
  export * from "./idl";
18
+ export * from "./visitor";
18
19
  export * from "./library";
19
20
  export * from "./idlize";
20
21
  export * from "./inheritance";
@@ -29,18 +30,19 @@ export * from "./LanguageWriters/LanguageWriter";
29
30
  export * from "./LanguageWriters/ArgConvertors";
30
31
  export * from "./LanguageWriters/common";
31
32
  export * from "./LanguageWriters/nameConvertor";
32
- export * from "./LanguageWriters/InteropConvertor";
33
33
  export * from "./LanguageWriters/convertors/CppConvertors";
34
34
  export * from "./LanguageWriters/convertors/TSConvertors";
35
35
  export * from "./LanguageWriters/convertors/ETSConvertors";
36
36
  export * from "./LanguageWriters/convertors/JavaConvertors";
37
37
  export * from "./LanguageWriters/convertors/CJConvertors";
38
+ export * from "./LanguageWriters/convertors/InteropConvertors";
38
39
  export * from "./LanguageWriters/writers/CJLanguageWriter";
39
40
  export * from "./LanguageWriters/writers/CLikeLanguageWriter";
40
41
  export * from "./LanguageWriters/writers/CppLanguageWriter";
41
42
  export * from "./LanguageWriters/writers/JavaLanguageWriter";
42
43
  export * from "./LanguageWriters/writers/TsLanguageWriter";
43
44
  export * from "./LanguageWriters/writers/ETSLanguageWriter";
45
+ export * from "./LanguageWriters/nameConvertor";
44
46
  export * from "./peer-generation/idl/IdlNameConvertor";
45
47
  export * from "./peer-generation/LayoutManager";
46
48
  export * from "./peer-generation/PrimitiveType";
@@ -1,15 +1,15 @@
1
- import { IDLNode } from "../idl";
1
+ import { IDLEntry } from "../idl";
2
2
  export declare enum LayoutNodeRole {
3
3
  PEER = 0,
4
4
  INTERFACE = 1
5
5
  }
6
6
  export interface LayoutManagerStrategy {
7
- resolve(node: IDLNode, role: LayoutNodeRole): string;
7
+ resolve(node: IDLEntry, role: LayoutNodeRole): string;
8
8
  }
9
9
  export declare class LayoutManager {
10
10
  private strategy;
11
11
  constructor(strategy: LayoutManagerStrategy);
12
- resolve(node: IDLNode, role: LayoutNodeRole): string;
12
+ resolve(node: IDLEntry, role: LayoutNodeRole): string;
13
13
  static Empty(): LayoutManager;
14
14
  }
15
15
  //# sourceMappingURL=LayoutManager.d.ts.map
@@ -42,12 +42,14 @@ export declare class MaterializedClass implements PeerClassBase {
42
42
  readonly interfaces: idl.IDLReferenceType[] | undefined;
43
43
  readonly generics: string[] | undefined;
44
44
  readonly fields: MaterializedField[];
45
- readonly ctor: MaterializedMethod;
46
- readonly finalizer: MaterializedMethod;
45
+ readonly ctor: MaterializedMethod | undefined;
46
+ readonly finalizer: MaterializedMethod | undefined;
47
47
  readonly methods: MaterializedMethod[];
48
48
  readonly needBeGenerated: boolean;
49
49
  readonly taggedMethods: idl.IDLMethod[];
50
- constructor(decl: idl.IDLInterface, className: string, isInterface: boolean, superClass: idl.IDLReferenceType | undefined, interfaces: idl.IDLReferenceType[] | undefined, generics: string[] | undefined, fields: MaterializedField[], ctor: MaterializedMethod, finalizer: MaterializedMethod, methods: MaterializedMethod[], needBeGenerated?: boolean, taggedMethods?: idl.IDLMethod[]);
50
+ constructor(decl: idl.IDLInterface, className: string, isInterface: boolean, superClass: idl.IDLReferenceType | undefined, interfaces: idl.IDLReferenceType[] | undefined, generics: string[] | undefined, fields: MaterializedField[], ctor: MaterializedMethod | undefined, // undefined when used for global functions
51
+ finalizer: MaterializedMethod | undefined, // undefined when used for global functions
52
+ methods: MaterializedMethod[], needBeGenerated?: boolean, taggedMethods?: idl.IDLMethod[]);
51
53
  getComponentName(): string;
52
54
  getImplementationName(): string;
53
55
  generatedName(isCallSignature: boolean): string;
@@ -134,7 +134,9 @@ export function copyMaterializedMethod(method, overrides) {
134
134
  return copied;
135
135
  }
136
136
  export class MaterializedClass {
137
- constructor(decl, className, isInterface, superClass, interfaces, generics, fields, ctor, finalizer, methods, needBeGenerated = true, taggedMethods = []) {
137
+ constructor(decl, className, isInterface, superClass, interfaces, generics, fields, ctor, // undefined when used for global functions
138
+ finalizer, // undefined when used for global functions
139
+ methods, needBeGenerated = true, taggedMethods = []) {
138
140
  this.decl = decl;
139
141
  this.className = className;
140
142
  this.isInterface = isInterface;
@@ -1,5 +1,6 @@
1
1
  import * as idl from '../idl';
2
2
  import { Language } from '../Language';
3
+ import { LanguageWriter } from '../LanguageWriters/LanguageWriter';
3
4
  import { IdlNameConvertor } from '../LanguageWriters';
4
5
  import { ArgConvertor } from "../LanguageWriters/ArgConvertors";
5
6
  import { LibraryInterface } from '../LibraryInterface';
@@ -24,6 +25,7 @@ export declare class PeerLibrary implements LibraryInterface {
24
25
  constructor(language: Language);
25
26
  name: string;
26
27
  readonly customComponentMethods: string[];
28
+ createLanguageWriter(language?: Language): LanguageWriter;
27
29
  createTypeNameConvertor(language: Language): IdlNameConvertor;
28
30
  protected readonly targetNameConvertorInstance: IdlNameConvertor;
29
31
  private readonly interopNameConvertorInstance;
@@ -15,13 +15,15 @@
15
15
  import { warn } from 'console';
16
16
  import * as idl from '../idl';
17
17
  import { Language } from '../Language';
18
- import { InteropNameConvertor } from '../LanguageWriters';
18
+ import { createLanguageWriter } from '../LanguageWriters';
19
19
  import { BufferConvertor, CallbackConvertor, DateConvertor, MapConvertor, PointerConvertor, TupleConvertor, TypeAliasConvertor, AggregateConvertor, StringConvertor, ClassConvertor, ArrayConvertor, FunctionConvertor, OptionConvertor, NumberConvertor, NumericConvertor, CustomTypeConvertor, UnionConvertor, MaterializedClassConvertor, BooleanConvertor, EnumConvertor, UndefinedConvertor, VoidConvertor, ImportTypeConvertor, InterfaceConvertor, } from "../LanguageWriters/ArgConvertors";
20
+ import { InteropNameConvertor } from '../LanguageWriters/convertors/InteropConvertors';
20
21
  import { CJTypeNameConvertor } from '../LanguageWriters/convertors/CJConvertors';
21
22
  import { CppInteropConvertor } from '../LanguageWriters/convertors/CppConvertors';
22
23
  import { ETSTypeNameConvertor } from '../LanguageWriters/convertors/ETSConvertors';
23
24
  import { JavaTypeNameConvertor } from '../LanguageWriters/convertors/JavaConvertors';
24
25
  import { TSTypeNameConvertor } from '../LanguageWriters/convertors/TSConvertors';
26
+ import { isBuilderClass } from './BuilderClass';
25
27
  import { generateSyntheticFunctionName, isImportAttr } from './idl/common';
26
28
  import { isMaterialized } from './Materialized';
27
29
  import { LayoutManager } from './LayoutManager';
@@ -53,6 +55,9 @@ export class PeerLibrary {
53
55
  this.targetNameConvertorInstance = this.createTypeNameConvertor(this.language);
54
56
  this.interopNameConvertorInstance = new InteropNameConvertor(this);
55
57
  }
58
+ createLanguageWriter(language) {
59
+ return createLanguageWriter(language !== null && language !== void 0 ? language : this.language, this);
60
+ }
56
61
  createTypeNameConvertor(language) {
57
62
  switch (language) {
58
63
  case Language.TS: return new TSTypeNameConvertor(this);
@@ -243,11 +248,13 @@ export class PeerLibrary {
243
248
  if (isMaterialized(declaration, this)) {
244
249
  return new MaterializedClassConvertor(param, declaration);
245
250
  }
251
+ if (isBuilderClass(declaration)) {
252
+ return new ClassConvertor(this, declarationName, param, declaration);
253
+ }
246
254
  switch (declaration.subkind) {
247
255
  case idl.IDLInterfaceSubkind.Interface:
248
- return new InterfaceConvertor(this, declarationName, param, declaration);
249
256
  case idl.IDLInterfaceSubkind.Class:
250
- return new ClassConvertor(this, declarationName, param, declaration);
257
+ return new InterfaceConvertor(this, declarationName, param, declaration);
251
258
  case idl.IDLInterfaceSubkind.AnonymousInterface:
252
259
  return new AggregateConvertor(this, param, type, declaration);
253
260
  case idl.IDLInterfaceSubkind.Tuple:
@@ -41,7 +41,10 @@ export class DeclarationNameConvertor {
41
41
  DeclarationNameConvertor.I = new DeclarationNameConvertor();
42
42
  export class TSFeatureNameConvertor extends DeclarationNameConvertor {
43
43
  convertEnum(decl) {
44
- return `${idl.getNamespacesPathFor(decl).join('')}${decl.name}`;
44
+ const namespace = idl.getNamespacesPathFor(decl).map(it => it.name);
45
+ if (namespace.length > 0)
46
+ return namespace[0];
47
+ return decl.name;
45
48
  }
46
49
  }
47
50
  TSFeatureNameConvertor.I = new TSFeatureNameConvertor();
@@ -0,0 +1,43 @@
1
+ import * as idl from './idl';
2
+ import { ReferenceResolver } from './peer-generation/ReferenceResolver';
3
+ export interface IDLConverter<T> {
4
+ visitOptional(type: idl.IDLOptionalType): T;
5
+ visitUnion(type: idl.IDLUnionType): T;
6
+ visitContainer(type: idl.IDLContainerType): T;
7
+ visitImport(type: idl.IDLReferenceType, importClause: string): T;
8
+ visitTypeReference(type: idl.IDLReferenceType): T;
9
+ visitTypeParameter(type: idl.IDLTypeParameterType): T;
10
+ visitPrimitiveType(type: idl.IDLPrimitiveType): T;
11
+ visitNamespace(node: idl.IDLNamespace): T;
12
+ visitInterface(node: idl.IDLInterface): T;
13
+ visitEnum(node: idl.IDLEnum): T;
14
+ visitTypedef(node: idl.IDLTypedef): T;
15
+ visitCallback(node: idl.IDLCallback): T;
16
+ visitMethod(node: idl.IDLMethod): T;
17
+ visitProperty(node: idl.IDLProperty): T;
18
+ visitConstant(node: idl.IDLConstant): T;
19
+ }
20
+ export declare function walkIDL<T>(convertor: IDLConverter<T>, node: idl.IDLNode): T;
21
+ export declare class IDLDependencyCollector implements IDLConverter<idl.IDLNode[]> {
22
+ private readonly resolver;
23
+ constructor(resolver: ReferenceResolver);
24
+ visitOptional(type: idl.IDLOptionalType): idl.IDLNode[];
25
+ visitUnion(type: idl.IDLUnionType): idl.IDLNode[];
26
+ visitContainer(type: idl.IDLContainerType): idl.IDLNode[];
27
+ visitImport(type: idl.IDLReferenceType): idl.IDLNode[];
28
+ visitTypeReference(type: idl.IDLReferenceType): idl.IDLNode[];
29
+ visitTypeParameter(): idl.IDLNode[];
30
+ visitPrimitiveType(): idl.IDLNode[];
31
+ visitNamespace(decl: idl.IDLNamespace): idl.IDLNode[];
32
+ visitInterface(decl: idl.IDLInterface): idl.IDLNode[];
33
+ protected visitSupertype(type: idl.IDLType | idl.IDLInterface): idl.IDLNode[];
34
+ visitEnum(): idl.IDLNode[];
35
+ visitTypedef(decl: idl.IDLTypedef): idl.IDLNode[];
36
+ visitCallback(decl: idl.IDLCallback): idl.IDLNode[];
37
+ visitMethod(decl: idl.IDLMethod): idl.IDLNode[];
38
+ visitProperty(node: idl.IDLProperty): idl.IDLNode[];
39
+ visitConstant(decl: idl.IDLConstant): idl.IDLNode[];
40
+ walk(node?: idl.IDLNode): idl.IDLNode[];
41
+ }
42
+ export declare function collectDependencies(resolver: ReferenceResolver, node: idl.IDLNode): idl.IDLNode[];
43
+ //# sourceMappingURL=visitor.d.ts.map
@@ -0,0 +1,143 @@
1
+ /*
2
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+ import * as idl from './idl';
16
+ export function walkIDL(convertor, node) {
17
+ if (idl.isNamespace(node))
18
+ return convertor.visitNamespace(node);
19
+ if (idl.isInterface(node))
20
+ return convertor.visitInterface(node);
21
+ if (idl.isEnum(node))
22
+ return convertor.visitEnum(node);
23
+ if (idl.isEnumMember(node))
24
+ return convertor.visitEnum(node.parent);
25
+ if (idl.isTypedef(node))
26
+ return convertor.visitTypedef(node);
27
+ if (idl.isCallback(node))
28
+ return convertor.visitCallback(node);
29
+ if (idl.isMethod(node))
30
+ return convertor.visitMethod(node);
31
+ if (idl.isProperty(node))
32
+ return convertor.visitProperty(node);
33
+ if (idl.isConstant(node))
34
+ return convertor.visitConstant(node);
35
+ if (idl.isOptionalType(node))
36
+ return convertor.visitOptional(node);
37
+ if (idl.isUnionType(node))
38
+ return convertor.visitUnion(node);
39
+ if (idl.isContainerType(node))
40
+ return convertor.visitContainer(node);
41
+ if (idl.isReferenceType(node)) {
42
+ const importAttr = idl.getExtAttribute(node, idl.IDLExtendedAttributes.Import);
43
+ return importAttr
44
+ ? convertor.visitImport(node, importAttr)
45
+ : convertor.visitTypeReference(node);
46
+ }
47
+ if (idl.isTypeParameterType(node))
48
+ return convertor.visitTypeParameter(node);
49
+ if (idl.isPrimitiveType(node))
50
+ return convertor.visitPrimitiveType(node);
51
+ throw new Error(`Unknown kind ${idl.IDLKind[node.kind]}`);
52
+ }
53
+ ////////////////////////////////////////////////////////////////////////////
54
+ export class IDLDependencyCollector {
55
+ constructor(resolver) {
56
+ this.resolver = resolver;
57
+ }
58
+ visitOptional(type) {
59
+ return this.walk(type.type);
60
+ }
61
+ visitUnion(type) {
62
+ return type.types.flatMap(ty => this.walk(ty));
63
+ }
64
+ visitContainer(type) {
65
+ return type.elementType.flatMap(ty => this.walk(ty));
66
+ }
67
+ visitImport(type) {
68
+ const maybeDecl = this.resolver.resolveTypeReference(type);
69
+ return maybeDecl ? [maybeDecl] : [];
70
+ }
71
+ visitTypeReference(type) {
72
+ const decl = this.resolver.resolveTypeReference(type);
73
+ const result = !decl ? []
74
+ : idl.isEnumMember(decl) ? [decl.parent] : [decl];
75
+ if (type.typeArguments) {
76
+ result.push(...type.typeArguments.flatMap(it => this.walk(it)));
77
+ }
78
+ return result;
79
+ }
80
+ visitTypeParameter() {
81
+ return [];
82
+ }
83
+ visitPrimitiveType() {
84
+ return [];
85
+ }
86
+ visitNamespace(decl) {
87
+ return decl.members.flatMap(it => this.walk(it));
88
+ }
89
+ visitInterface(decl) {
90
+ return [
91
+ ...decl.inheritance
92
+ .filter(it => it !== idl.IDLTopType)
93
+ .flatMap(it => this.visitSupertype(it)),
94
+ ...decl.properties
95
+ .filter(it => !it.isStatic)
96
+ .flatMap(it => this.walk(it.type)),
97
+ ...[...decl.constructors, ...decl.callables, ...decl.methods]
98
+ .flatMap(it => [
99
+ ...it.parameters.flatMap(param => this.walk(param.type)),
100
+ ...this.walk(it.returnType)
101
+ ])
102
+ ];
103
+ }
104
+ visitSupertype(type) {
105
+ if (idl.isInterface(type)) {
106
+ return this.walk(idl.createReferenceType(type.name, undefined, type));
107
+ }
108
+ return this.walk(type);
109
+ }
110
+ visitEnum() {
111
+ return [];
112
+ }
113
+ visitTypedef(decl) {
114
+ return this.walk(decl.type);
115
+ }
116
+ visitCallback(decl) {
117
+ return [
118
+ ...decl.parameters.flatMap(it => this.walk(it.type)),
119
+ ...this.walk(decl.returnType),
120
+ ];
121
+ }
122
+ visitMethod(decl) {
123
+ return [
124
+ ...decl.parameters.flatMap(it => this.walk(it.type)),
125
+ ...this.walk(decl.returnType),
126
+ ];
127
+ }
128
+ visitProperty(node) {
129
+ return this.walk(node.type);
130
+ }
131
+ visitConstant(decl) {
132
+ return this.walk(decl.type);
133
+ }
134
+ walk(node) {
135
+ if (node === undefined)
136
+ return [];
137
+ return walkIDL(this, node);
138
+ }
139
+ }
140
+ export function collectDependencies(resolver, node) {
141
+ return walkIDL(new IDLDependencyCollector(resolver), node);
142
+ }
143
+ //# sourceMappingURL=visitor.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idlizer/core",
3
- "version": "2.0.19",
3
+ "version": "2.0.21",
4
4
  "description": "",
5
5
  "types": "build/lib/src/index.d.ts",
6
6
  "exports": {
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "keywords": [],
36
36
  "dependencies": {
37
- "@koalaui/interop": "1.4.6",
37
+ "@koalaui/interop": "1.4.8",
38
38
  "typescript": "4.9.5",
39
39
  "@types/node": "^18.0.0"
40
40
  },