@idlizer/core 2.0.19 → 2.0.20

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.
@@ -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;
@@ -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,274 @@
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.IDLNumberType: return 'number';
251
+ case idl.IDLBigintType: return 'bigint';
252
+ case idl.IDLBooleanType:
253
+ case idl.IDLFunctionType: return 'KInt';
254
+ case idl.IDLStringType: return 'KStringPtr';
255
+ case idl.IDLBufferType: return `ArrayBuffer`;
256
+ case idl.IDLLengthType: return 'Length';
257
+ case idl.IDLDate: return 'KLong';
258
+ case idl.IDLUndefinedType:
259
+ case idl.IDLVoidType: return PrimitiveTypesInstance.NativePointer.getText();
260
+ case idl.IDLPointerType: return "KPointer"; //PrimitiveType.NativePointer.getText()
261
+ }
262
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
263
+ }
264
+ convertTypeParameter(type) {
265
+ throw new Error("Cannot pass type parameters through interop");
266
+ }
267
+ convertTypeReference(type) {
268
+ throw new Error(`Cannot pass type references through interop`);
269
+ }
270
+ convertUnion(type) {
271
+ throw new Error("Cannot pass union types through interop");
272
+ }
273
+ }
274
+ //# 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
@@ -1,3 +1,5 @@
1
+ import { Language } from "../Language";
2
+ import { InteropArgConvertor } from "./convertors/InteropConvertors";
1
3
  export * from "./nameConvertor";
2
- export * from "./InteropConvertor";
4
+ export declare function createInteropArgConvertor(language: Language): InteropArgConvertor;
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,17 @@
1
+ import { Language } from "../Language";
2
+ import { CJInteropArgConvertor } from "./convertors/CJConvertors";
3
+ import { CppInteropArgConvertor } from "./convertors/CppConvertors";
4
+ import { InteropArgConvertor } from "./convertors/InteropConvertors";
5
+ import { JavaInteropArgConvertor } from "./convertors/JavaConvertors";
1
6
  export * from "./nameConvertor";
2
- export * from "./InteropConvertor";
7
+ export function createInteropArgConvertor(language) {
8
+ switch (language) {
9
+ case Language.TS:
10
+ case Language.ARKTS: return new InteropArgConvertor();
11
+ case Language.CPP: return CppInteropArgConvertor.INSTANCE;
12
+ case Language.JAVA: return new JavaInteropArgConvertor();
13
+ case Language.CJ: return new CJInteropArgConvertor();
14
+ }
15
+ throw new Error(`InteropArgConvertor for language ${language} not implemented`);
16
+ }
3
17
  //# sourceMappingURL=index.js.map
@@ -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
  }
@@ -15,12 +15,12 @@ export * from "./LanguageWriters/LanguageWriter";
15
15
  export * from "./LanguageWriters/ArgConvertors";
16
16
  export * from "./LanguageWriters/common";
17
17
  export * from "./LanguageWriters/nameConvertor";
18
- export * from "./LanguageWriters/InteropConvertor";
19
18
  export * from "./LanguageWriters/convertors/CppConvertors";
20
19
  export * from "./LanguageWriters/convertors/TSConvertors";
21
20
  export * from "./LanguageWriters/convertors/ETSConvertors";
22
21
  export * from "./LanguageWriters/convertors/JavaConvertors";
23
22
  export * from "./LanguageWriters/convertors/CJConvertors";
23
+ export * from "./LanguageWriters/convertors/InteropConvertors";
24
24
  export * from "./LanguageWriters/writers/CJLanguageWriter";
25
25
  export * from "./LanguageWriters/writers/CLikeLanguageWriter";
26
26
  export * from "./LanguageWriters/writers/CppLanguageWriter";
@@ -29,12 +29,12 @@ export * from "./LanguageWriters/LanguageWriter";
29
29
  export * from "./LanguageWriters/ArgConvertors";
30
30
  export * from "./LanguageWriters/common";
31
31
  export * from "./LanguageWriters/nameConvertor";
32
- export * from "./LanguageWriters/InteropConvertor";
33
32
  export * from "./LanguageWriters/convertors/CppConvertors";
34
33
  export * from "./LanguageWriters/convertors/TSConvertors";
35
34
  export * from "./LanguageWriters/convertors/ETSConvertors";
36
35
  export * from "./LanguageWriters/convertors/JavaConvertors";
37
36
  export * from "./LanguageWriters/convertors/CJConvertors";
37
+ export * from "./LanguageWriters/convertors/InteropConvertors";
38
38
  export * from "./LanguageWriters/writers/CJLanguageWriter";
39
39
  export * from "./LanguageWriters/writers/CLikeLanguageWriter";
40
40
  export * from "./LanguageWriters/writers/CppLanguageWriter";
@@ -15,8 +15,8 @@
15
15
  import { warn } from 'console';
16
16
  import * as idl from '../idl';
17
17
  import { Language } from '../Language';
18
- import { InteropNameConvertor } from '../LanguageWriters';
19
18
  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";
19
+ import { InteropNameConvertor } from '../LanguageWriters/convertors/InteropConvertors';
20
20
  import { CJTypeNameConvertor } from '../LanguageWriters/convertors/CJConvertors';
21
21
  import { CppInteropConvertor } from '../LanguageWriters/convertors/CppConvertors';
22
22
  import { ETSTypeNameConvertor } from '../LanguageWriters/convertors/ETSConvertors';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idlizer/core",
3
- "version": "2.0.19",
3
+ "version": "2.0.20",
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.7",
38
38
  "typescript": "4.9.5",
39
39
  "@types/node": "^18.0.0"
40
40
  },