@idlizer/core 2.1.10-arktscgen-9 → 2.1.10-arktscgen-10

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 (75) hide show
  1. package/build/lib/src/IndentedPrinter.js +2 -2
  2. package/build/lib/src/Language.d.ts +1 -0
  3. package/build/lib/src/Language.js +8 -0
  4. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +47 -3
  5. package/build/lib/src/LanguageWriters/ArgConvertors.js +194 -20
  6. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +5 -1
  7. package/build/lib/src/LanguageWriters/LanguageWriter.js +15 -0
  8. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +6 -2
  9. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +7 -1
  10. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +3 -0
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -0
  12. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +10 -5
  13. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +138 -51
  14. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +5 -1
  15. package/build/lib/src/LanguageWriters/index.d.ts +1 -2
  16. package/build/lib/src/LanguageWriters/index.js +17 -3
  17. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -1
  18. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +5 -3
  19. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +1 -1
  20. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +5 -3
  21. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -1
  22. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +8 -3
  23. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +3 -9
  24. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +5 -3
  25. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +52 -31
  26. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +1 -1
  27. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +5 -3
  28. package/build/lib/src/LibraryInterface.d.ts +6 -0
  29. package/build/lib/src/LibraryInterface.js +22 -1
  30. package/build/lib/src/from-idl/DtsPrinter.d.ts +3 -2
  31. package/build/lib/src/from-idl/DtsPrinter.js +9 -6
  32. package/build/lib/src/idl/builders.d.ts +36 -1
  33. package/build/lib/src/idl/builders.js +62 -2
  34. package/build/lib/src/idl/dump.d.ts +3 -0
  35. package/build/lib/src/idl/dump.js +20 -3
  36. package/build/lib/src/idl/index.d.ts +0 -1
  37. package/build/lib/src/idl/index.js +0 -1
  38. package/build/lib/src/idl/node.d.ts +1 -0
  39. package/build/lib/src/idl/node.js +1 -0
  40. package/build/lib/src/idl/stdlib.d.ts +1 -0
  41. package/build/lib/src/idl/stdlib.js +1 -0
  42. package/build/lib/src/idl/utils.d.ts +4 -3
  43. package/build/lib/src/idl/utils.js +26 -13
  44. package/build/lib/src/idl/visitors.js +24 -104
  45. package/build/lib/src/index.d.ts +4 -1
  46. package/build/lib/src/index.js +4 -1
  47. package/build/lib/src/peer-generation/Extractors.d.ts +7 -0
  48. package/build/lib/src/peer-generation/Extractors.js +40 -0
  49. package/build/lib/src/peer-generation/Initializers.d.ts +5 -0
  50. package/build/lib/src/peer-generation/Initializers.js +28 -0
  51. package/build/lib/src/peer-generation/Materialized.d.ts +0 -4
  52. package/build/lib/src/peer-generation/Materialized.js +13 -24
  53. package/build/lib/src/peer-generation/PeerLibrary.d.ts +2 -2
  54. package/build/lib/src/peer-generation/PeerLibrary.js +55 -5
  55. package/build/lib/src/peer-generation/PeerMethod.d.ts +1 -0
  56. package/build/lib/src/peer-generation/PeerMethod.js +1 -0
  57. package/build/lib/src/peer-generation/idl/common.d.ts +0 -2
  58. package/build/lib/src/peer-generation/idl/common.js +3 -25
  59. package/build/lib/src/peer-generation/isMaterialized.d.ts +4 -0
  60. package/build/lib/src/peer-generation/isMaterialized.js +12 -0
  61. package/build/lib/src/peer-generation/unions.d.ts +1 -27
  62. package/build/lib/src/peer-generation/unions.js +1 -99
  63. package/build/lib/src/transformers/FqnTransformer.js +14 -0
  64. package/build/lib/src/transformers/GenericTransformer.d.ts +0 -2
  65. package/build/lib/src/transformers/GenericTransformer.js +19 -19
  66. package/build/lib/src/transformers/IdlTransformer.js +14 -0
  67. package/build/lib/src/transformers/NullTransformer.js +16 -3
  68. package/build/lib/src/transformers/OnSerializeTransformer.js +14 -0
  69. package/build/lib/src/transformers/ThrowsTransformer.d.ts +3 -0
  70. package/build/lib/src/transformers/ThrowsTransformer.js +51 -0
  71. package/build/lib/src/transformers/transformUtils.d.ts +7 -0
  72. package/build/lib/src/transformers/transformUtils.js +55 -0
  73. package/build/lib/src/util.d.ts +0 -16
  74. package/build/lib/src/util.js +2 -76
  75. package/package.json +10 -4
@@ -12,9 +12,9 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- import * as fs from "fs";
15
+ import * as fs from "node:fs";
16
16
  import { indentedBy } from "./util";
17
- import path from "path";
17
+ import path from "node:path";
18
18
  export class IndentedPrinter {
19
19
  constructor(output = [], indent = 0) {
20
20
  this.output = output;
@@ -10,5 +10,6 @@ export declare class Language {
10
10
  toString(): string;
11
11
  get directory(): string;
12
12
  static fromString(name: string): Language;
13
+ static supportNS(lang: Language): boolean;
13
14
  }
14
15
  //# sourceMappingURL=Language.d.ts.map
@@ -33,6 +33,14 @@ export class Language {
33
33
  default: throw new Error(`Unsupported language ${name}`);
34
34
  }
35
35
  }
36
+ static supportNS(lang) {
37
+ switch (lang.name) {
38
+ case "ArkTS": return true;
39
+ case "TS": return true;
40
+ case "C++": return true;
41
+ default: return false;
42
+ }
43
+ }
36
44
  }
37
45
  Language.TS = new Language("TS", ".ts");
38
46
  Language.ARKTS = new Language("ArkTS", ".ts"); // using .ts for ArkTS until we get rit of tsc preprocessing
@@ -3,9 +3,13 @@ import { Language } from "../Language";
3
3
  import { BranchStatement, ExpressionAssigner, LanguageExpression, LanguageStatement, LanguageWriter } from "./LanguageWriter";
4
4
  import { NativeModuleType, RuntimeType } from "./common";
5
5
  import { LibraryInterface } from "../LibraryInterface";
6
- import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
7
6
  import { PeerLibrary } from "../peer-generation/PeerLibrary";
7
+ import { TypeConvertor } from "./nameConvertor";
8
+ import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
8
9
  export declare function getSerializerName(_library: LibraryInterface, _language: Language, declaration: idl.IDLEntry): string;
10
+ export declare function makeETSDiscriminatorFromFields(self: LanguageWriter, convertor: {
11
+ targetType: (writer: LanguageWriter) => string;
12
+ }, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
9
13
  export interface ArgConvertor {
10
14
  param: string;
11
15
  idlType: idl.IDLType;
@@ -302,6 +306,18 @@ export declare class UnionConvertor extends BaseArgConvertor {
302
306
  getObjectAccessor(language: Language, value: string, args?: Record<string, string>): string;
303
307
  unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
304
308
  }
309
+ export declare class ThrowsConvertor extends BaseArgConvertor {
310
+ private library;
311
+ private decl;
312
+ private convertor;
313
+ constructor(library: LibraryInterface, param: string, decl: idl.IDLInterface);
314
+ convertorArg(param: string, writer: LanguageWriter): string;
315
+ convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
316
+ convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
317
+ nativeType(): idl.IDLType;
318
+ interopType(): idl.IDLType;
319
+ isPointerType(): boolean;
320
+ }
305
321
  export declare class FunctionConvertor extends BaseArgConvertor {
306
322
  private library;
307
323
  constructor(library: LibraryInterface, param: string);
@@ -352,19 +368,47 @@ export declare function generateCallbackKindName(callback: idl.IDLCallback): str
352
368
  export declare function generateCallbackKindAccess(callback: idl.IDLCallback, language: Language): string;
353
369
  export declare function generateCallbackKindValue(callback: idl.IDLCallback): number;
354
370
  export declare function generateCallbackAPIArguments(library: LibraryInterface, callback: idl.IDLCallback): string[];
355
- export declare function maybeTransformManagedCallback(callback: idl.IDLCallback, library: ReferenceResolver): idl.IDLCallback | undefined;
356
371
  export declare class TransformOnSerializeConvertor extends BaseArgConvertor {
357
372
  protected library: PeerLibrary;
358
373
  protected managedDeclaration: idl.IDLEntry;
374
+ protected source: idl.IDLType;
359
375
  protected target: idl.IDLType;
360
376
  private targetConvertor;
361
- constructor(param: string, library: PeerLibrary, managedDeclaration: idl.IDLEntry, target: idl.IDLType);
377
+ constructor(param: string, library: PeerLibrary, managedDeclaration: idl.IDLEntry, source: idl.IDLType, target: idl.IDLType);
378
+ getSourceType(): idl.IDLType;
379
+ getTargetType(): idl.IDLType;
362
380
  isPointerType(): boolean;
363
381
  nativeType(): idl.IDLType;
364
382
  convertorArg(param: string, writer: LanguageWriter): string;
383
+ addImport(transformerInfo: {
384
+ module: string;
385
+ ns?: string;
386
+ method: string;
387
+ }, writer: LanguageWriter): void;
365
388
  convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
366
389
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
367
390
  }
368
391
  export declare function createOutArgConvertor(library: PeerLibrary, type: idl.IDLType | undefined, otherParams: string[]): ArgConvertor | undefined;
392
+ export declare class UnionFlattener implements TypeConvertor<idl.IDLType[]> {
393
+ private resolver;
394
+ constructor(resolver: ReferenceResolver);
395
+ convertImport(type: idl.IDLImport): idl.IDLType[];
396
+ convertUnion(type: idl.IDLUnionType): idl.IDLType[];
397
+ convertTypeReference(type: idl.IDLReferenceType): idl.IDLType[];
398
+ convertOptional(type: idl.IDLOptionalType): idl.IDLType[];
399
+ convertContainer(type: idl.IDLContainerType): idl.IDLType[];
400
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): idl.IDLType[];
401
+ convertPrimitiveType(type: idl.IDLPrimitiveType): idl.IDLType[];
402
+ convertTypeParameter(type: idl.IDLTypeParameterType): idl.IDLType[];
403
+ }
404
+ export declare class UnionRuntimeTypeChecker {
405
+ private convertors;
406
+ private conflictingConvertors;
407
+ private duplicateMembers;
408
+ constructor(convertors: ArgConvertor[]);
409
+ private checkConflicts;
410
+ makeDiscriminator(value: string, convertorIndex: number, writer: LanguageWriter, library: LibraryInterface, type?: idl.IDLType): LanguageExpression;
411
+ }
412
+ export declare function flattenUnionType(library: LibraryInterface, type: idl.IDLType): idl.IDLType;
369
413
  export {};
370
414
  //# sourceMappingURL=ArgConvertors.d.ts.map
@@ -17,15 +17,27 @@ import { Language } from "../Language";
17
17
  import { BlockStatement, PrintHint, StringExpression, NamedMethodSignature, ProxyStatement, ExpressionStatement } from "./LanguageWriter";
18
18
  import { RuntimeType } from "./common";
19
19
  import { generatorConfiguration, generatorTypePrefix } from "../config";
20
- import { capitalize, getExtractor, entryToFunctionName as entryToFunctionName, getTransformer, hashCodeFromString, throwException, warn } from "../util";
21
- import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
20
+ import { getTransformer } from "../LibraryInterface";
21
+ import { capitalize, hashCodeFromString, throwException, warn } from "../util";
22
22
  import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
23
23
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
24
24
  import { LayoutNodeRole } from "../peer-generation/LayoutManager";
25
25
  import { isInExternalModule } from "../peer-generation/modules";
26
- import { maybeRestoreGenerics } from "../transformers/GenericTransformer";
26
+ import { getExtractor } from "../peer-generation/Extractors";
27
+ import { maybeRestoreGenerics, maybeRestoreThrows, maybeTransformManagedCallback } from "../transformers/transformUtils";
28
+ import { convertType, withInsideInstanceof } from "./nameConvertor";
29
+ import { collapseTypes } from "../peer-generation/idl/common";
27
30
  export function getSerializerName(_library, _language, declaration) {
28
- return entryToFunctionName(_language, declaration, "", "SerializerImpl");
31
+ return idl.entryToFunctionName(_language, declaration, "", "SerializerImpl");
32
+ }
33
+ export function makeETSDiscriminatorFromFields(self, convertor, value, accessors, duplicates) {
34
+ if (convertor instanceof AggregateConvertor
35
+ || convertor instanceof InterfaceConvertor
36
+ || convertor instanceof MaterializedClassConvertor
37
+ || convertor instanceof CustomTypeConvertor) {
38
+ return self.instanceOf(value, convertor.idlType);
39
+ }
40
+ return self.makeString(`${value} instanceof ${withInsideInstanceof(true, () => convertor.targetType(self))}`);
29
41
  }
30
42
  export class BaseArgConvertor {
31
43
  constructor(idlType, runtimeTypes, isScoped, useArray, param) {
@@ -608,7 +620,7 @@ export class ArrayConvertor extends BaseArgConvertor {
608
620
  }
609
621
  export class MapConvertor extends BaseArgConvertor {
610
622
  constructor(library, param, type, keyType, valueType) {
611
- super(idl.createContainerType('record', [keyType, valueType]), [RuntimeType.OBJECT], false, true, param);
623
+ super(idl.createContainerType('record', [keyType, valueType], { extendedAttributes: type.extendedAttributes }), [RuntimeType.OBJECT], false, true, param);
612
624
  this.library = library;
613
625
  this.keyType = keyType;
614
626
  this.valueType = valueType;
@@ -879,7 +891,7 @@ export class UnionConvertor extends BaseArgConvertor {
879
891
  return false;
880
892
  }
881
893
  convertorSerialize(param, value, printer) {
882
- const convertorItems = this.memberConvertors.map((it, index) => new ConvertorItem(it, index, it.idlType));
894
+ const convertorItems = this.memberConvertors.map((it, index) => new ConvertorItem(it, index, getSourceType(it)));
883
895
  if (this.isIndexedDiscriminator(printer))
884
896
  return printer.makeMultiBranchCondition(convertorItems.map(it => this.makeBranch(param, value, printer, it)));
885
897
  // Make arrays type descrimination
@@ -898,7 +910,7 @@ export class UnionConvertor extends BaseArgConvertor {
898
910
  statements.push(this.makeStoreSelector(param, index, printer));
899
911
  if (!(convertor instanceof UndefinedConvertor)) {
900
912
  const varName = `${value}ForIdx${index}`;
901
- statements.push(printer.makeAssign(varName, undefined, printer.makeUnionVariantCast(convertor.getObjectAccessor(printer.language, value), printer.getNodeName(convertor.idlType), convertor, index), true));
913
+ statements.push(printer.makeAssign(varName, undefined, printer.makeUnionVariantCast(convertor.getObjectAccessor(printer.language, value), printer.getNodeName(getSourceType(convertor)), convertor, index), true));
902
914
  statements.push(convertor.convertorSerialize(param, varName, printer));
903
915
  }
904
916
  const genericDiscriminator = withGenericDiscriminator(this.library, this.memberConvertors, value, discriminator, type, printer);
@@ -978,6 +990,55 @@ export class UnionConvertor extends BaseArgConvertor {
978
990
  return writer.makeNaryOp("||", this.memberConvertors.map((_, n) => this.unionChecker.makeDiscriminator(value, n, writer, this.library)));
979
991
  }
980
992
  }
993
+ export class ThrowsConvertor extends BaseArgConvertor {
994
+ constructor(library, param, decl) {
995
+ super(idl.createReferenceType(decl), [RuntimeType.OBJECT], false, true, param);
996
+ this.library = library;
997
+ this.decl = decl;
998
+ const restoredThrow = maybeRestoreThrows(decl, library);
999
+ this.convertor = restoredThrow !== idl.IDLVoidType && restoredThrow !== idl.IDLThisType ? library.typeConvertor(param, restoredThrow) : undefined;
1000
+ }
1001
+ convertorArg(param, writer) {
1002
+ throw new Error("Method not implemented.");
1003
+ }
1004
+ convertorSerialize(param, value, writer) {
1005
+ var _a;
1006
+ if (writer.language === Language.CPP) {
1007
+ return writer.makeBlock([
1008
+ writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, 'writeBoolean', [writer.makeString(`${value}.hasException`)])),
1009
+ writer.makeCondition(writer.makeString(`${value}.hasException`), writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, 'writeException', [writer.makeString(`${value}.exception`)])), !this.convertor ? undefined : writer.makeBlock([
1010
+ writer.makeAssign(`${value}Value`, undefined, writer.makeString(`${value}.value`), true),
1011
+ (_a = this.convertor) === null || _a === void 0 ? void 0 : _a.convertorSerialize(param, `${value}Value`, writer),
1012
+ ]))
1013
+ ]);
1014
+ }
1015
+ else {
1016
+ throw new Error("Not expected to serialize exceptions in managed, currently they're only one directional from native to managed");
1017
+ }
1018
+ }
1019
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1020
+ var _a;
1021
+ if (writer.language === Language.CPP) {
1022
+ throw new Error("Not expected to deserialize exceptions in CPP, currently they're only one directional from native to managed");
1023
+ }
1024
+ else {
1025
+ return writer.makeCondition(writer.makeMethodCall(deserializerName, 'readBoolean', []), writer.makeBlock([
1026
+ writer.makeThrowError(writer.makeMethodCall(deserializerName, 'readException', [])),
1027
+ ]), !this.convertor ? undefined : writer.makeBlock([
1028
+ (_a = this.convertor) === null || _a === void 0 ? void 0 : _a.convertorDeserialize(bufferName, deserializerName, assigneer, writer),
1029
+ ]));
1030
+ }
1031
+ }
1032
+ nativeType() {
1033
+ return idl.createReferenceType(this.decl);
1034
+ }
1035
+ interopType() {
1036
+ throw new Error("ThrowsConvertor");
1037
+ }
1038
+ isPointerType() {
1039
+ return true;
1040
+ }
1041
+ }
981
1042
  export class FunctionConvertor extends BaseArgConvertor {
982
1043
  constructor(library, param) {
983
1044
  // TODO: pass functions as integers to native side.
@@ -1160,7 +1221,7 @@ export class CallbackConvertor extends BaseArgConvertor {
1160
1221
  }),
1161
1222
  ];
1162
1223
  }
1163
- const result = writer.makeLambda(callbackSignature, [
1224
+ const closure = writer.makeLambda(callbackSignature, [
1164
1225
  writer.makeAssign(`${argsSerializer}Serializer`, idl.createReferenceType('idlize.internal.SerializerBase'), writer.makeMethodCall('SerializerBase', 'hold', []), true),
1165
1226
  new ExpressionStatement(writer.makeMethodCall(`${argsSerializer}Serializer`, `writeInt32`, [writer.makeString(`${resourceName}.resourceId`)])),
1166
1227
  new ExpressionStatement(writer.makeMethodCall(`${argsSerializer}Serializer`, `writePointer`, [writer.makeString(callName)])),
@@ -1192,9 +1253,14 @@ export class CallbackConvertor extends BaseArgConvertor {
1192
1253
  writer.makeString(continuationValueName), this.decl.returnType)
1193
1254
  : undefined),
1194
1255
  ]);
1256
+ writer.addFeature(idl.createReferenceType('idlize.internal.resourceFinalizerRegister'));
1257
+ statements.push(writer.makeAssign(`${bufferName}Closure`, undefined, closure, true), writer.makeStatement(writer.makeFunctionCall(`resourceFinalizerRegister`, [
1258
+ writer.makeString(`${bufferName}Closure`),
1259
+ writer.makeString(resourceName)
1260
+ ])));
1195
1261
  return writer.makeBlock([
1196
1262
  ...statements,
1197
- assigneer(result)
1263
+ assigneer(writer.makeString(`${bufferName}Closure`))
1198
1264
  ], false);
1199
1265
  }
1200
1266
  nativeType() {
@@ -1242,11 +1308,6 @@ export function generateCallbackAPIArguments(library, callback) {
1242
1308
  }
1243
1309
  return args;
1244
1310
  }
1245
- export function maybeTransformManagedCallback(callback, library) {
1246
- if (callback.name === "CustomBuilder")
1247
- return library.resolveTypeReference(idl.createReferenceType("arkui.component.idlize.CustomNodeBuilder"));
1248
- return undefined;
1249
- }
1250
1311
  class PromiseOutArgConvertor extends BaseArgConvertor {
1251
1312
  constructor(library, param, promise) {
1252
1313
  super(library.createContinuationCallbackReference(promise), [RuntimeType.FUNCTION], false, true, param);
@@ -1289,14 +1350,21 @@ class PromiseOutArgConvertor extends BaseArgConvertor {
1289
1350
  }
1290
1351
  }
1291
1352
  export class TransformOnSerializeConvertor extends BaseArgConvertor {
1292
- constructor(param, library, managedDeclaration, target) {
1353
+ constructor(param, library, managedDeclaration, source, target) {
1293
1354
  const targetConvertor = library.typeConvertor(param, target);
1294
1355
  super(target, targetConvertor.runtimeTypes, false, targetConvertor.useArray, param);
1295
1356
  this.library = library;
1296
1357
  this.managedDeclaration = managedDeclaration;
1358
+ this.source = source;
1297
1359
  this.target = target;
1298
1360
  this.targetConvertor = targetConvertor;
1299
1361
  }
1362
+ getSourceType() {
1363
+ return this.source;
1364
+ }
1365
+ getTargetType() {
1366
+ return this.target;
1367
+ }
1300
1368
  isPointerType() {
1301
1369
  return this.targetConvertor.isPointerType();
1302
1370
  }
@@ -1306,6 +1374,11 @@ export class TransformOnSerializeConvertor extends BaseArgConvertor {
1306
1374
  convertorArg(param, writer) {
1307
1375
  throw new Error("Method not implemented.");
1308
1376
  }
1377
+ addImport(transformerInfo, writer) {
1378
+ transformerInfo.ns
1379
+ ? writer.addFeature(transformerInfo.ns, transformerInfo.module)
1380
+ : writer.addFeature(transformerInfo.method, transformerInfo.module);
1381
+ }
1309
1382
  convertorSerialize(param, value, writer) {
1310
1383
  if (writer.language === Language.CPP) {
1311
1384
  return this.targetConvertor.convertorSerialize(param, value, writer);
@@ -1314,8 +1387,9 @@ export class TransformOnSerializeConvertor extends BaseArgConvertor {
1314
1387
  writer.addFeature(this.target);
1315
1388
  }
1316
1389
  const transformerInfo = getTransformer(this.library, this.managedDeclaration, this.target);
1317
- const transformCallExpression = transformerInfo.receiver
1318
- ? writer.makeMethodCall(transformerInfo.receiver, transformerInfo.method, [writer.makeString(value)])
1390
+ this.addImport(transformerInfo, writer);
1391
+ const transformCallExpression = transformerInfo.ns
1392
+ ? writer.makeMethodCall(transformerInfo.ns, transformerInfo.method, [writer.makeString(value)])
1319
1393
  : writer.makeFunctionCall(transformerInfo.method, [writer.makeString(value)]);
1320
1394
  const statements = [
1321
1395
  writer.makeAssign(`${value}Transformed`, this.target, transformCallExpression, true),
@@ -1332,8 +1406,9 @@ export class TransformOnSerializeConvertor extends BaseArgConvertor {
1332
1406
  }
1333
1407
  const targetDeserialize = this.targetConvertor.convertorDeserialize(`${bufferName}D`, deserializerName, (expr) => writer.makeAssign(`${bufferName}Deserialized`, this.target, expr, true), writer);
1334
1408
  const transformerInfo = getTransformer(this.library, this.target, this.managedDeclaration);
1335
- const transformCallExpression = transformerInfo.receiver
1336
- ? writer.makeMethodCall(transformerInfo.receiver, transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)])
1409
+ this.addImport(transformerInfo, writer);
1410
+ const transformCallExpression = transformerInfo.ns
1411
+ ? writer.makeMethodCall(transformerInfo.ns, transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)])
1337
1412
  : writer.makeFunctionCall(transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)]);
1338
1413
  return writer.makeBlock([
1339
1414
  targetDeserialize,
@@ -1369,7 +1444,106 @@ function withGenericDiscriminator(library, convertors, value, discriminator, typ
1369
1444
  return discriminator;
1370
1445
  writer.addFeature("typechecks", library.layout.handwrittenPackage());
1371
1446
  const decl = writer.resolver.resolveTypeReference(type);
1372
- const checkGenericFunc = entryToFunctionName(writer.language, decl, "isGeneric_", "");
1447
+ const checkGenericFunc = idl.entryToFunctionName(writer.language, decl, "isGeneric_", "");
1373
1448
  return writer.makeAnd(discriminator, writer.makeFunctionCall(`typechecks.${checkGenericFunc}`, [writer.makeString(value)]));
1374
1449
  }
1450
+ export class UnionFlattener {
1451
+ constructor(resolver) {
1452
+ this.resolver = resolver;
1453
+ }
1454
+ convertImport(type) {
1455
+ console.warn("Imports are not implemented yet");
1456
+ return [];
1457
+ }
1458
+ convertUnion(type) {
1459
+ return type.types.flatMap(it => convertType(this, it));
1460
+ }
1461
+ convertTypeReference(type) {
1462
+ const decl = this.resolver.toDeclaration(type);
1463
+ return idl.isType(decl) && decl !== idl.IDLCustomObjectType ? convertType(this, decl) : [type];
1464
+ }
1465
+ convertOptional(type) {
1466
+ return [type.type, idl.IDLUndefinedType];
1467
+ }
1468
+ convertContainer(type) {
1469
+ return [type];
1470
+ }
1471
+ convertTypeReferenceAsImport(type, importClause) {
1472
+ return [type];
1473
+ }
1474
+ convertPrimitiveType(type) {
1475
+ return [type];
1476
+ }
1477
+ convertTypeParameter(type) {
1478
+ return [type];
1479
+ }
1480
+ }
1481
+ export class UnionRuntimeTypeChecker {
1482
+ constructor(convertors) {
1483
+ this.convertors = convertors;
1484
+ this.conflictingConvertors = new Set();
1485
+ this.duplicateMembers = new Set();
1486
+ this.checkConflicts();
1487
+ }
1488
+ checkConflicts() {
1489
+ const runtimeTypeConflicts = new Map();
1490
+ this.convertors.forEach(conv => {
1491
+ conv.runtimeTypes.forEach(rtType => {
1492
+ const convertors = runtimeTypeConflicts.get(rtType);
1493
+ if (convertors)
1494
+ convertors.push(conv);
1495
+ else
1496
+ runtimeTypeConflicts.set(rtType, [conv]);
1497
+ });
1498
+ });
1499
+ runtimeTypeConflicts.forEach((convertors, rtType) => {
1500
+ if (convertors.length > 1) {
1501
+ const allMembers = new Set();
1502
+ if (rtType === RuntimeType.OBJECT) {
1503
+ convertors.forEach(convertor => {
1504
+ convertor.getMembers().forEach(member => {
1505
+ if (allMembers.has(member))
1506
+ this.duplicateMembers.add(member);
1507
+ allMembers.add(member);
1508
+ });
1509
+ });
1510
+ }
1511
+ convertors.forEach(convertor => {
1512
+ this.conflictingConvertors.add(convertor);
1513
+ });
1514
+ }
1515
+ });
1516
+ }
1517
+ makeDiscriminator(value, convertorIndex, writer, library, type) {
1518
+ let convertor = this.convertors[convertorIndex];
1519
+ if (writer.language === Language.TS) {
1520
+ const isArray = idl.IDLContainerUtils.isSequence(convertor.idlType);
1521
+ if (isArray || this.conflictingConvertors.has(convertor)) {
1522
+ // Check elements inside array
1523
+ if (type && convertor.idlType != type) {
1524
+ convertor = library.typeConvertor("", type);
1525
+ }
1526
+ const discriminator = convertor.unionDiscriminator(value, convertorIndex, writer, this.duplicateMembers);
1527
+ if (discriminator)
1528
+ return discriminator;
1529
+ }
1530
+ }
1531
+ return writer.makeString(writer.discriminate(value, convertorIndex, type !== null && type !== void 0 ? type : convertor.idlType, convertor.runtimeTypes));
1532
+ }
1533
+ }
1534
+ export function flattenUnionType(library, type) {
1535
+ if (idl.isUnionType(type)) {
1536
+ const unionFlattener = new UnionFlattener(library);
1537
+ const allTypes = type.types.flatMap(it => convertType(unionFlattener, it));
1538
+ const uniqueTypes = new Set(allTypes);
1539
+ return uniqueTypes.size === allTypes.length ? type : collapseTypes(Array.from(uniqueTypes));
1540
+ }
1541
+ return type;
1542
+ }
1543
+ function getSourceType(convertor) {
1544
+ if (convertor instanceof TransformOnSerializeConvertor) {
1545
+ return convertor.getSourceType();
1546
+ }
1547
+ return convertor.idlType;
1548
+ }
1375
1549
  //# sourceMappingURL=ArgConvertors.js.map
@@ -171,6 +171,7 @@ export declare enum MethodModifier {
171
171
  OVERRIDE = 11,
172
172
  OPEN = 12
173
173
  }
174
+ export declare const METHOD_ACCESS_MODIFIERS: Set<MethodModifier>;
174
175
  export declare enum ClassModifier {
175
176
  PUBLIC = 0,
176
177
  PRIVATE = 1,
@@ -288,7 +289,7 @@ export declare abstract class LanguageWriter {
288
289
  abstract writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
289
290
  abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
290
291
  abstract makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
291
- abstract makeThrowError(message: string): LanguageStatement;
292
+ abstract makeThrowError(message: string | LanguageExpression): LanguageStatement;
292
293
  abstract makeReturn(expr?: LanguageExpression): LanguageStatement;
293
294
  abstract makeRuntimeType(rt: RuntimeType): LanguageExpression;
294
295
  abstract getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
@@ -339,6 +340,8 @@ export declare abstract class LanguageWriter {
339
340
  makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
340
341
  makeFunctionCall(name: string | LanguageExpression, params: LanguageExpression[]): LanguageExpression;
341
342
  makeMethodCall(receiver: string, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
343
+ makeFunctionReference(name: string): LanguageExpression;
344
+ makeMethodReference(receiver: string, method: string): LanguageExpression;
342
345
  makeThisCall(params: LanguageExpression[]): LanguageExpression;
343
346
  makeStaticMethodCall(receiver: string, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
344
347
  makeFieldAccess(receiver: string, method: string, nullable?: boolean): LanguageExpression;
@@ -438,5 +441,6 @@ export type MakeAssignOptions = {
438
441
  overrideTypeName?: string;
439
442
  };
440
443
  export type ExpressionAssigner = (expression: LanguageExpression) => LanguageStatement;
444
+ export declare function hasAccessModifier(modifiers: MethodModifier[] | undefined): boolean;
441
445
  export {};
442
446
  //# sourceMappingURL=LanguageWriter.d.ts.map
@@ -339,6 +339,11 @@ export var MethodModifier;
339
339
  MethodModifier[MethodModifier["OVERRIDE"] = 11] = "OVERRIDE";
340
340
  MethodModifier[MethodModifier["OPEN"] = 12] = "OPEN";
341
341
  })(MethodModifier || (MethodModifier = {}));
342
+ export const METHOD_ACCESS_MODIFIERS = new Set([
343
+ MethodModifier.PUBLIC,
344
+ MethodModifier.PRIVATE,
345
+ MethodModifier.PROTECTED
346
+ ]);
342
347
  export var ClassModifier;
343
348
  (function (ClassModifier) {
344
349
  ClassModifier[ClassModifier["PUBLIC"] = 0] = "PUBLIC";
@@ -541,6 +546,12 @@ export class LanguageWriter {
541
546
  makeMethodCall(receiver, method, params, nullable) {
542
547
  return new MethodCallExpression(receiver, method, params, nullable);
543
548
  }
549
+ makeFunctionReference(name) {
550
+ return this.makeString(name);
551
+ }
552
+ makeMethodReference(receiver, method) {
553
+ return this.makeString(`${receiver}.${method}`);
554
+ }
544
555
  // Deprecated
545
556
  // Use instead declarationCall parameter in writeConstructorImplementation(...) with DelegationType.THIS
546
557
  makeThisCall(params) {
@@ -763,4 +774,8 @@ export function copyMethod(method, overrides) {
763
774
  var _a, _b, _c, _d;
764
775
  return new Method((_a = overrides.name) !== null && _a !== void 0 ? _a : method.name, (_b = overrides.signature) !== null && _b !== void 0 ? _b : method.signature, (_c = overrides.modifiers) !== null && _c !== void 0 ? _c : method.modifiers, (_d = overrides.generics) !== null && _d !== void 0 ? _d : method.generics);
765
776
  }
777
+ export function hasAccessModifier(modifiers) {
778
+ const modifier = modifiers === null || modifiers === void 0 ? void 0 : modifiers.find(value => METHOD_ACCESS_MODIFIERS.has(value));
779
+ return modifier !== undefined;
780
+ }
766
781
  //# sourceMappingURL=LanguageWriter.js.map
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import * as idl from '../../idl';
16
16
  import { CJKeywords } from '../../languageSpecificKeywords';
17
- import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
17
+ import { maybeRestoreThrows } from '../../transformers/transformUtils';
18
18
  import { removePoints } from '../../util';
19
19
  import { convertNode, convertType } from '../nameConvertor';
20
20
  import { InteropArgConvertor } from './InteropConvertors';
@@ -35,7 +35,7 @@ export class CJTypeNameConvertor {
35
35
  return `Option<${this.convert(type.type)}>`;
36
36
  }
37
37
  convertUnion(type) {
38
- return "Union_" + type.types.map(it => generateSyntheticIdlNodeName(it)).join("_");
38
+ return "Union_" + type.types.map(it => idl.generateSyntheticIdlNodeName(it)).join("_");
39
39
  }
40
40
  convertContainer(type) {
41
41
  if (idl.IDLContainerUtils.isSequence(type)) {
@@ -96,6 +96,10 @@ export class CJTypeNameConvertor {
96
96
  return "KPointer";
97
97
  // resolve synthetic types
98
98
  const decl = this.resolver.resolveTypeReference(type);
99
+ let restoredThrow;
100
+ if (restoredThrow = maybeRestoreThrows(decl, this.resolver)) {
101
+ return this.convert(restoredThrow);
102
+ }
99
103
  if (decl && idl.isSyntheticEntry(decl)) {
100
104
  if (idl.isCallback(decl)) {
101
105
  return this.callbackType(decl);
@@ -17,11 +17,11 @@ import { generatorConfiguration } from "../../config";
17
17
  import { convertNode, convertType } from "../nameConvertor";
18
18
  import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
19
19
  import { InteropArgConvertor } from './InteropConvertors';
20
- import { maybeTransformManagedCallback } from '../ArgConvertors';
21
20
  import { qualifiedName } from '../../peer-generation/idl/common';
22
21
  import { isInIdlizeInternal } from '../../idl';
23
22
  import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
24
23
  import { Language } from '../../Language';
24
+ import { maybeRestoreThrows, maybeTransformManagedCallback } from '../../transformers/transformUtils';
25
25
  function isSubtypeTopLevelConflicted(library, node) {
26
26
  let hasConflicts = false;
27
27
  idl.forEachChild(node, (child) => {
@@ -49,6 +49,12 @@ export class GenericCppConvertor {
49
49
  throw new Error("Internal error: namespaces are not allowed on the interop layer");
50
50
  }
51
51
  convertInterface(node) {
52
+ let restoredThrow;
53
+ if (restoredThrow = maybeRestoreThrows(node, this.library)) {
54
+ if (restoredThrow === idl.IDLThisType)
55
+ restoredThrow = idl.IDLVoidType;
56
+ return this.make(`Throws_${this.convertNode(restoredThrow).text}`, idl.createReferenceType(node), true);
57
+ }
52
58
  switch (node.subkind) {
53
59
  case idl.IDLInterfaceSubkind.AnonymousInterface:
54
60
  return node.name
@@ -34,6 +34,9 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
34
34
  if (idl.IDLContainerUtils.isSequence(type)) {
35
35
  return isInsideInstanceof() ? `Array` : `Array<${this.convert(type.elementType[0])}>`;
36
36
  }
37
+ if (idl.IDLContainerUtils.isRecord(type) && idl.hasExtAttribute(type, idl.IDLExtendedAttributes.AsRecord)) {
38
+ return isInsideInstanceof() ? 'Record' : `Record<${this.convert(type.elementType[0])}, ${this.convert(type.elementType[1])}>`;
39
+ }
37
40
  return super.convertContainer(type);
38
41
  }
39
42
  convertPrimitiveType(type) {
@@ -15,6 +15,7 @@
15
15
  import * as idl from '../../idl';
16
16
  import { isMaterialized } from '../../peer-generation/isMaterialized';
17
17
  import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
18
+ import { maybeRestoreThrows } from '../../transformers/transformUtils';
18
19
  import { convertType } from '../nameConvertor';
19
20
  const KInteropReturnBuffer = 'KInteropReturnBuffer';
20
21
  export class InteropReturnTypeConvertor {
@@ -86,6 +87,9 @@ export class InteropReturnTypeConvertor {
86
87
  if (idl.isCallback(this.resolver.toDeclaration(type))) {
87
88
  return KInteropReturnBuffer;
88
89
  }
90
+ if (maybeRestoreThrows(decl, this.resolver)) {
91
+ return KInteropReturnBuffer;
92
+ }
89
93
  if (idl.isInterface(decl)) {
90
94
  if (isMaterialized(decl, this.resolver)) {
91
95
  return PrimitiveTypesInstance.NativePointer.getText();
@@ -1,10 +1,10 @@
1
1
  import * as idl from '../../idl';
2
- import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
2
  import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
4
- import { InteropReturnTypeConvertor } from './InteropConvertors';
3
+ import { InteropArgConvertor, InteropReturnTypeConvertor } from './InteropConvertors';
4
+ import { LibraryInterface } from '../../LibraryInterface';
5
5
  export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
6
- protected resolver: ReferenceResolver;
7
- constructor(resolver: ReferenceResolver);
6
+ protected library: LibraryInterface;
7
+ constructor(library: LibraryInterface);
8
8
  convert(node: idl.IDLNode): string;
9
9
  convertNamespace(node: idl.IDLNamespace): string;
10
10
  convertInterface(node: idl.IDLInterface): string;
@@ -21,7 +21,12 @@ export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, I
21
21
  convertTypeReference(type: idl.IDLReferenceType): string;
22
22
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
23
23
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
24
- private callbackType;
24
+ private mangleTopLevel;
25
+ private mapCallback;
26
+ }
27
+ export declare class KotlinInteropArgConvertor extends InteropArgConvertor {
28
+ convertContainer(type: idl.IDLContainerType): string;
29
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
25
30
  }
26
31
  export declare class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConvertor {
27
32
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;