@idlizer/core 2.1.2 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +3 -3
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +36 -30
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +26 -13
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +26 -52
  5. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +2 -1
  6. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +16 -5
  7. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +4 -2
  8. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +20 -12
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +7 -17
  10. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +4 -2
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +9 -3
  12. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +2 -1
  13. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +24 -4
  14. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -2
  15. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +47 -28
  16. package/build/lib/src/LanguageWriters/nameConvertor.d.ts +3 -1
  17. package/build/lib/src/LanguageWriters/nameConvertor.js +5 -1
  18. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +12 -9
  19. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +10 -37
  20. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +4 -1
  21. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +1 -1
  22. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +9 -9
  23. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +15 -24
  24. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +14 -8
  25. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +18 -18
  26. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +4 -6
  27. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +15 -14
  28. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +7 -5
  29. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +22 -43
  30. package/build/lib/src/LibraryInterface.d.ts +1 -4
  31. package/build/lib/src/config.d.ts +206 -66
  32. package/build/lib/src/config.js +7 -3
  33. package/build/lib/src/configDescriber.d.ts +30 -3
  34. package/build/lib/src/configDescriber.js +99 -1
  35. package/build/lib/src/from-idl/DtsPrinter.js +30 -18
  36. package/build/lib/src/from-idl/IDLLinter.d.ts +40 -7
  37. package/build/lib/src/from-idl/IDLLinter.js +211 -25
  38. package/build/lib/src/from-idl/common.js +1 -1
  39. package/build/lib/src/from-idl/deserialize.d.ts +4 -1
  40. package/build/lib/src/from-idl/deserialize.js +434 -346
  41. package/build/lib/src/idl.d.ts +25 -17
  42. package/build/lib/src/idl.js +363 -109
  43. package/build/lib/src/idlize.d.ts +2 -1
  44. package/build/lib/src/idlize.js +82 -26
  45. package/build/lib/src/index.d.ts +4 -3
  46. package/build/lib/src/index.js +3 -2
  47. package/build/lib/src/options.d.ts +1 -1
  48. package/build/lib/src/peer-generation/BuilderClass.d.ts +0 -2
  49. package/build/lib/src/peer-generation/BuilderClass.js +0 -8
  50. package/build/lib/src/peer-generation/LayoutManager.d.ts +10 -3
  51. package/build/lib/src/peer-generation/LayoutManager.js +3 -2
  52. package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
  53. package/build/lib/src/peer-generation/Materialized.js +2 -2
  54. package/build/lib/src/peer-generation/PeerClass.d.ts +3 -8
  55. package/build/lib/src/peer-generation/PeerClass.js +0 -1
  56. package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
  57. package/build/lib/src/peer-generation/PeerFile.js +1 -1
  58. package/build/lib/src/peer-generation/PeerLibrary.d.ts +12 -7
  59. package/build/lib/src/peer-generation/PeerLibrary.js +129 -65
  60. package/build/lib/src/peer-generation/ReferenceResolver.d.ts +1 -1
  61. package/build/lib/src/peer-generation/ReferenceResolver.js +2 -2
  62. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +1 -0
  63. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +6 -2
  64. package/build/lib/src/peer-generation/idl/common.d.ts +2 -1
  65. package/build/lib/src/peer-generation/idl/common.js +13 -2
  66. package/build/lib/src/peer-generation/isMaterialized.js +25 -8
  67. package/build/lib/src/peer-generation/unions.d.ts +3 -2
  68. package/build/lib/src/peer-generation/unions.js +6 -2
  69. package/build/lib/src/resolveNamedNode.d.ts +3 -0
  70. package/build/lib/src/resolveNamedNode.js +105 -0
  71. package/build/lib/src/util.d.ts +6 -0
  72. package/build/lib/src/util.js +33 -0
  73. package/build/lib/src/visitor.d.ts +0 -1
  74. package/build/lib/src/visitor.js +1 -7
  75. package/package.json +2 -2
  76. package/webidl2.js/LICENSE +21 -0
  77. package/webidl2.js/README.md +827 -0
  78. package/webidl2.js/dist/package.json +3 -0
  79. package/webidl2.js/dist/webidl2.js +35 -7
@@ -123,7 +123,7 @@ export declare class BigIntToU64Convertor extends BaseArgConvertor {
123
123
  isPointerType(): boolean;
124
124
  }
125
125
  export declare class ObjectConvertor extends BaseArgConvertor {
126
- constructor(param: string);
126
+ constructor(param: string, type: idl.IDLType);
127
127
  convertorArg(param: string, writer: LanguageWriter): string;
128
128
  convertorSerialize(param: string, value: string, printer: LanguageWriter): void;
129
129
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
@@ -293,8 +293,7 @@ export declare class UnionConvertor extends BaseArgConvertor {
293
293
  }
294
294
  export declare class FunctionConvertor extends BaseArgConvertor {
295
295
  private library;
296
- protected type: idl.IDLReferenceType;
297
- constructor(library: LibraryInterface, param: string, type: idl.IDLReferenceType);
296
+ constructor(library: LibraryInterface, param: string);
298
297
  convertorArg(param: string, writer: LanguageWriter): string;
299
298
  convertorSerialize(param: string, value: string, writer: LanguageWriter): void;
300
299
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
@@ -334,6 +333,7 @@ export declare class CallbackConvertor extends BaseArgConvertor {
334
333
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter, useSyncVersion?: boolean): LanguageStatement;
335
334
  nativeType(): idl.IDLType;
336
335
  isPointerType(): boolean;
336
+ unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
337
337
  }
338
338
  export declare const CallbackKind = "CallbackKind";
339
339
  export declare function generateCallbackKindName(callback: idl.IDLCallback): string;
@@ -16,7 +16,7 @@ import * as idl from "../idl";
16
16
  import { Language } from "../Language";
17
17
  import { BlockStatement, PrintHint, StringExpression, MethodModifier } from "./LanguageWriter";
18
18
  import { RuntimeType } from "./common";
19
- import { generatorTypePrefix } from "../config";
19
+ import { generatorConfiguration, generatorTypePrefix } from "../config";
20
20
  import { hashCodeFromString, warn } from "../util";
21
21
  import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
22
22
  import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
@@ -29,9 +29,10 @@ export function isDirectConvertedType(originalType, library) {
29
29
  return true; // TODO: is it correct?
30
30
  if (debug)
31
31
  console.log(`IDL type ${idl.DebugUtils.debugPrintType(originalType)}`);
32
- if (originalType == idl.IDLInteropReturnBufferType) {
32
+ if (originalType == idl.IDLInteropReturnBufferType)
33
33
  return false;
34
- }
34
+ if (originalType == idl.IDLThisType)
35
+ return true; /* Because this type for native is pointer, right? */
35
36
  if (originalType == idl.IDLSerializerBuffer)
36
37
  return true;
37
38
  let convertor = library.typeConvertor("x", originalType, false);
@@ -46,7 +47,10 @@ export function isDirectConvertedType(originalType, library) {
46
47
  convertor instanceof MapConvertor ||
47
48
  convertor instanceof TupleConvertor ||
48
49
  convertor instanceof AggregateConvertor ||
49
- convertor instanceof OptionConvertor) {
50
+ convertor instanceof UnionConvertor ||
51
+ convertor instanceof OptionConvertor ||
52
+ convertor instanceof ImportTypeConvertor) {
53
+ // try { console.log(`convertor is ${convertor.constructor.name} for ${JSON.stringify(originalType)}`) } catch (e) {}
50
54
  return false;
51
55
  }
52
56
  let type = convertor.interopType();
@@ -71,7 +75,8 @@ export function isVMContextMethod(method) {
71
75
  var _a, _b;
72
76
  return !!idl.asPromise(method.signature.returnType) ||
73
77
  !!((_a = method.modifiers) === null || _a === void 0 ? void 0 : _a.includes(MethodModifier.THROWS)) ||
74
- !!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT));
78
+ !!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT)) ||
79
+ generatorConfiguration().forceContext.includes(method.name);
75
80
  }
76
81
  export function isDirectMethod(method, library) {
77
82
  if (isVMContextMethod(method)) {
@@ -218,20 +223,18 @@ export class EnumConvertor extends BaseArgConvertor {
218
223
  this.enumEntry = enumEntry;
219
224
  }
220
225
  convertorArg(param, writer) {
221
- return writer.makeEnumCast(this.enumEntry, writer.escapeKeyword(param));
226
+ return writer.i32FromEnum(writer.makeString(writer.escapeKeyword(param)), this.enumEntry).asString();
222
227
  }
223
228
  convertorSerialize(param, value, writer) {
224
- writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.makeEnumCast(this.enumEntry, value)]);
229
+ writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.i32FromEnum(writer.makeString(value), this.enumEntry).asString()]);
225
230
  }
226
231
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
227
232
  const readExpr = writer.makeMethodCall(`${deserializerName}`, "readInt32", []);
228
- const enumExpr = idl.isStringEnum(this.enumEntry)
229
- ? writer.enumFromOrdinal(readExpr, idl.createReferenceType(this.enumEntry))
230
- : writer.makeCast(readExpr, idl.createReferenceType(this.enumEntry));
233
+ const enumExpr = writer.enumFromI32(readExpr, this.enumEntry);
231
234
  return assigneer(enumExpr);
232
235
  }
233
236
  nativeType() {
234
- return idl.createReferenceType(this.enumEntry);
237
+ return this.idlType;
235
238
  }
236
239
  interopType() {
237
240
  return idl.IDLI32Type;
@@ -306,24 +309,24 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
306
309
  return writer.escapeKeyword(param);
307
310
  }
308
311
  convertorSerialize(param, value, printer) {
309
- printer.writeMethodCall(`${param}Serializer`, "writeUInt64", [value]);
312
+ printer.writeMethodCall(`${param}Serializer`, "writeInt64", [value]);
310
313
  }
311
314
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
312
- return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readUInt64()`), this.idlType, { optional: false }));
315
+ return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readInt64()`), this.idlType, { optional: false }));
313
316
  }
314
317
  nativeType() {
315
- return idl.IDLU64Type;
318
+ return idl.IDLI64Type;
316
319
  }
317
320
  interopType() {
318
- return idl.IDLU64Type;
321
+ return idl.IDLI64Type;
319
322
  }
320
323
  isPointerType() {
321
324
  return false;
322
325
  }
323
326
  }
324
327
  export class ObjectConvertor extends BaseArgConvertor {
325
- constructor(param) {
326
- super(idl.IDLAnyType, [
328
+ constructor(param, type) {
329
+ super(type, [
327
330
  RuntimeType.BIGINT,
328
331
  RuntimeType.BOOLEAN,
329
332
  RuntimeType.FUNCTION,
@@ -332,7 +335,6 @@ export class ObjectConvertor extends BaseArgConvertor {
332
335
  RuntimeType.OBJECT,
333
336
  RuntimeType.STRING,
334
337
  RuntimeType.SYMBOL,
335
- RuntimeType.UNDEFINED
336
338
  ], false, true, param);
337
339
  }
338
340
  convertorArg(param, writer) {
@@ -463,7 +465,7 @@ export class AggregateConvertor extends BaseArgConvertor {
463
465
  * todo: check UnionType name creation for union of unnamed nodes (isNamedNode() == false)
464
466
  */
465
467
  const memberType = prop.isOptional
466
- ? idl.createUnionType([idl.IDLUndefinedType, prop.type], "$NOT TO BE PRINTED%")
468
+ ? idl.createUnionType([idl.IDLUndefinedType, prop.type])
467
469
  : prop.type;
468
470
  return writer.makeAssign(`${bufferName}_${prop.name}`, memberType, expr, true, true);
469
471
  }, writer));
@@ -558,7 +560,7 @@ export class InterfaceConvertor extends BaseArgConvertor {
558
560
  interopType() {
559
561
  // Actually shouldn't be used!
560
562
  // throw new Error("Must never be used")
561
- return idl.IDLObjectType;
563
+ return idl.IDLSerializerBuffer;
562
564
  }
563
565
  isPointerType() {
564
566
  return true;
@@ -601,7 +603,7 @@ export class ArrayConvertor extends BaseArgConvertor {
601
603
  printer.writeStatement(printer.makeLoop(loopCounter, valueLength));
602
604
  printer.pushIndent();
603
605
  printer.writeStatement(printer.makeAssign(`${value}_element`, this.elementType, printer.makeArrayAccess(value, loopCounter), true));
604
- this.elementConvertor.convertorSerialize(param, this.elementConvertor.getObjectAccessor(printer.language, `${value}_element`), printer);
606
+ this.elementConvertor.convertorSerialize(param, `${value}_element`, printer);
605
607
  printer.popIndent();
606
608
  printer.print(`}`);
607
609
  }
@@ -820,7 +822,7 @@ export class OptionConvertor extends BaseArgConvertor {
820
822
  throw new Error("Must never be used");
821
823
  }
822
824
  convertorSerialize(param, value, printer) {
823
- const valueType = `${value}_type`;
825
+ const valueType = `${value}_type`.replaceAll('.', '_');
824
826
  const serializedType = (printer.language == Language.JAVA ? undefined : idl.IDLI32Type);
825
827
  printer.writeStatement(printer.makeAssign(valueType, serializedType, printer.makeRuntimeType(RuntimeType.UNDEFINED), true, false));
826
828
  if (printer.language != Language.CJ) {
@@ -832,8 +834,9 @@ export class OptionConvertor extends BaseArgConvertor {
832
834
  if (printer.language == Language.CJ) {
833
835
  printer.writeMethodCall(`${param}Serializer`, "writeInt8", ["RuntimeType.OBJECT.ordinal"]); // everything is object, except None<T>
834
836
  }
835
- printer.writeStatement(printer.makeAssign(`${value}_value`, undefined, printer.makeValueFromOption(value, this.typeConvertor), true));
836
- this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, `${value}_value`), printer);
837
+ const valueValue = `${value}_value`.replaceAll('.', '_');
838
+ printer.writeStatement(printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true));
839
+ this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer);
837
840
  printer.popIndent();
838
841
  printer.print(`}`);
839
842
  if (printer.language == Language.CJ) {
@@ -958,11 +961,10 @@ export class UnionConvertor extends BaseArgConvertor {
958
961
  }
959
962
  }
960
963
  export class FunctionConvertor extends BaseArgConvertor {
961
- constructor(library, param, type) {
964
+ constructor(library, param) {
962
965
  // TODO: pass functions as integers to native side.
963
966
  super(idl.IDLFunctionType, [RuntimeType.FUNCTION], false, false, param);
964
967
  this.library = library;
965
- this.type = type;
966
968
  }
967
969
  convertorArg(param, writer) {
968
970
  return writer.language == Language.CPP ? `makeArkFunctionFromId(${param})` : `registerCallback(${param})`;
@@ -971,7 +973,7 @@ export class FunctionConvertor extends BaseArgConvertor {
971
973
  writer.writeMethodCall(`${param}Serializer`, "writeFunction", [value]);
972
974
  }
973
975
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
974
- return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`), this.type, { optional: true }));
976
+ return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`), idl.IDLFunctionType, { optional: true }));
975
977
  }
976
978
  nativeType() {
977
979
  return idl.IDLFunctionType;
@@ -991,7 +993,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
991
993
  convertorArg(param, writer) {
992
994
  switch (writer.language) {
993
995
  case Language.CPP:
994
- return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_")}>(${param})`;
996
+ return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
995
997
  case Language.JAVA:
996
998
  case Language.CJ:
997
999
  return `MaterializedBase.toPeerPtr(${param})`;
@@ -1000,12 +1002,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
1000
1002
  }
1001
1003
  }
1002
1004
  convertorSerialize(param, value, printer) {
1003
- printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_")}`, [
1005
+ printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_", "namespace.name")}`, [
1004
1006
  printer.makeString(value)
1005
1007
  ])));
1006
1008
  }
1007
1009
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1008
- const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_")}`, []), idl.createReferenceType(this.declaration));
1010
+ const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_", "namespace.name")}`, []), this.declaration);
1009
1011
  return assigneer(readStatement);
1010
1012
  }
1011
1013
  nativeType() {
@@ -1108,6 +1110,10 @@ export class CallbackConvertor extends BaseArgConvertor {
1108
1110
  isPointerType() {
1109
1111
  return true;
1110
1112
  }
1113
+ unionDiscriminator(value, index, writer, duplicates) {
1114
+ // We serialize callbacks as table offsets, so don't need to discriminate them. Runtime type check is enough
1115
+ return writer.makeUnionVariantCondition(this, value, `${value}_type`, RuntimeType[RuntimeType.FUNCTION]);
1116
+ }
1111
1117
  }
1112
1118
  ////////////////////////////////////////////////////////////////////////////////
1113
1119
  // UTILS
@@ -114,8 +114,11 @@ export declare class CheckOptionalStatement implements LanguageStatement {
114
114
  }
115
115
  export declare class TsEnumEntityStatement implements LanguageStatement {
116
116
  private readonly enumEntity;
117
- private readonly isExport;
118
- constructor(enumEntity: idl.IDLEnum, isExport: boolean);
117
+ private readonly options;
118
+ constructor(enumEntity: idl.IDLEnum, options: {
119
+ isExport: boolean;
120
+ isDeclare: boolean;
121
+ });
119
122
  write(writer: LanguageWriter): void;
120
123
  private maybeQuoted;
121
124
  }
@@ -134,6 +137,9 @@ export declare abstract class LambdaExpression implements LanguageExpression {
134
137
  abstract asString(): string;
135
138
  bodyAsString(): string;
136
139
  }
140
+ export declare enum ArgumentModifier {
141
+ OPTIONAL = 0
142
+ }
137
143
  export declare enum FieldModifier {
138
144
  READONLY = 0,
139
145
  PRIVATE = 1,
@@ -191,16 +197,18 @@ export declare class MethodSignature {
191
197
  defaults: stringOrNone[] | undefined;
192
198
  printHints?: MethodArgPrintHintOrNone[] | undefined;
193
199
  argNames?: string[] | undefined;
194
- constructor(returnType: idl.IDLType, args: idl.IDLType[], defaults?: stringOrNone[] | undefined, printHints?: MethodArgPrintHintOrNone[] | undefined, argNames?: string[] | undefined);
200
+ argsModifiers: ArgumentModifier[][] | undefined;
201
+ constructor(returnType: idl.IDLType, args: idl.IDLType[], defaults?: stringOrNone[] | undefined, argsModifiers?: (ArgumentModifier[] | ArgumentModifier | undefined)[] | undefined, printHints?: MethodArgPrintHintOrNone[] | undefined, argNames?: string[] | undefined);
195
202
  argName(index: number): string;
196
203
  argDefault(index: number): string | undefined;
204
+ isArgOptional(index: number): boolean;
197
205
  retHint(): PrintHint | undefined;
198
206
  argHint(index: number): PrintHint | undefined;
199
207
  toString(): string;
200
208
  }
201
209
  export declare class NamedMethodSignature extends MethodSignature {
202
210
  argsNames: string[];
203
- constructor(returnType: idl.IDLType, args?: idl.IDLType[], argsNames?: string[], defaults?: stringOrNone[] | undefined, printHints?: MethodArgPrintHintOrNone[]);
211
+ constructor(returnType: idl.IDLType, args?: idl.IDLType[], argsNames?: string[], defaults?: stringOrNone[] | undefined, argsModifiers?: (ArgumentModifier[] | ArgumentModifier | undefined)[] | undefined, printHints?: MethodArgPrintHintOrNone[]);
204
212
  static make(returnType: idl.IDLType, args: {
205
213
  name: string;
206
214
  type: idl.IDLType;
@@ -228,7 +236,10 @@ export declare abstract class LanguageWriter {
228
236
  alias?: string;
229
237
  stringId: string | undefined;
230
238
  numberId: number;
231
- }[], op?: (writer: this) => void): void;
239
+ }[], options: {
240
+ isExport: boolean;
241
+ isDeclare?: boolean;
242
+ }, op?: (writer: this) => void): void;
232
243
  abstract writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
233
244
  abstract writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
234
245
  abstract writeFunctionDeclaration(name: string, signature: MethodSignature): void;
@@ -252,7 +263,7 @@ export declare abstract class LanguageWriter {
252
263
  abstract makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
253
264
  abstract makeRuntimeType(rt: RuntimeType): LanguageExpression;
254
265
  abstract getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
255
- abstract makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
266
+ abstract makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
256
267
  makeTypeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
257
268
  abstract writePrintLog(message: string): void;
258
269
  abstract makeUndefined(): LanguageExpression;
@@ -269,9 +280,8 @@ export declare abstract class LanguageWriter {
269
280
  abstract makeTupleAssign(receiver: string, tupleFields: string[]): LanguageStatement;
270
281
  abstract get supportedModifiers(): MethodModifier[];
271
282
  abstract get supportedFieldModifiers(): FieldModifier[];
272
- abstract enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
273
- abstract ordinalFromEnum(value: LanguageExpression, enumReference: idl.IDLType): LanguageExpression;
274
- abstract makeEnumCast(enumEntry: idl.IDLEnum, enumName: string): string;
283
+ abstract enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
284
+ abstract i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
275
285
  abstract getNodeName(type: idl.IDLNode): string;
276
286
  abstract fork(options?: {
277
287
  resolver?: ReferenceResolver;
@@ -313,7 +323,6 @@ export declare abstract class LanguageWriter {
313
323
  makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, _convertorIndex?: number, _runtimeTypeIndex?: number): LanguageExpression;
314
324
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index?: number): LanguageExpression;
315
325
  makeUnionTypeDefaultInitializer(): LanguageExpression;
316
- makeRuntimeTypeGetterCall(value: string): LanguageExpression;
317
326
  makeArrayResize(array: string, arrayType: string, length: string, deserializer: string): LanguageStatement;
318
327
  makeMapResize(mapTypeName: string, keyType: idl.IDLType, valueType: idl.IDLType, map: string, size: string, deserializer: string): LanguageStatement;
319
328
  makeMapSize(map: string): LanguageExpression;
@@ -345,7 +354,10 @@ export declare abstract class LanguageWriter {
345
354
  targetType: (writer: LanguageWriter) => string;
346
355
  }, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
347
356
  makeIsTypeCall(value: string, decl: idl.IDLInterface): LanguageExpression;
348
- makeEnumEntity(enumEntity: idl.IDLEnum, isExport: boolean): LanguageStatement;
357
+ makeEnumEntity(enumEntity: idl.IDLEnum, options: {
358
+ isExport: boolean;
359
+ isDeclare?: boolean;
360
+ }): LanguageStatement;
349
361
  makeFieldModifiersList(modifiers: FieldModifier[] | undefined, customFieldFilter?: (field: FieldModifier) => boolean): string;
350
362
  escapeKeyword(keyword: string): string;
351
363
  makeCastCustomObject(customName: string, _isGenericType: boolean): LanguageExpression;
@@ -360,8 +372,6 @@ export declare abstract class LanguageWriter {
360
372
  makeCallIsObject(value: string): LanguageExpression;
361
373
  instanceOf(convertor: ArgConvertor, value: string, _duplicateMembers?: Set<string>): LanguageExpression;
362
374
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
363
- makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
364
- makeLengthDeserializer(deserializer: string): LanguageStatement | undefined;
365
375
  stringifyTypeOrEmpty(type: idl.IDLType | undefined): string;
366
376
  /**
367
377
  * Writes `namespace <namespace> {` and adds extra indent
@@ -372,6 +382,9 @@ export declare abstract class LanguageWriter {
372
382
  * Writes closing brace of namespace block and removes one level of indent
373
383
  */
374
384
  popNamespace(ident?: boolean): void;
385
+ static _isReferenceRelativeToNamespaces: boolean;
386
+ static get isReferenceRelativeToNamespaces(): boolean;
387
+ static relativeReferences<T>(isRelative: boolean, op: () => T): T;
375
388
  }
376
389
  export declare function mangleMethodName(method: Method, id?: number): string;
377
390
  export declare function printMethodDeclaration(printer: IndentedPrinter, retType: string, methodName: string, apiParameters: string[], postfix?: string): void;
@@ -231,14 +231,13 @@ export class CheckOptionalStatement {
231
231
  }
232
232
  // maybe rename or move of fix
233
233
  export class TsEnumEntityStatement {
234
- constructor(enumEntity, isExport) {
234
+ constructor(enumEntity, options) {
235
235
  this.enumEntity = enumEntity;
236
- this.isExport = isExport;
236
+ this.options = options;
237
237
  }
238
238
  write(writer) {
239
239
  // writer.print(this.enumEntity.comment)
240
- idl.getNamespacesPathFor(this.enumEntity).forEach(it => writer.pushNamespace(it.name));
241
- writer.print(`${this.isExport ? "export " : ""}enum ${this.enumEntity.name} {`);
240
+ writer.print(`${this.options.isExport ? "export " : ""}${this.options.isDeclare ? "declare " : ""}enum ${this.enumEntity.name} {`);
242
241
  writer.pushIndent();
243
242
  this.enumEntity.elements.forEach((member, index) => {
244
243
  // writer.print(member.comment)
@@ -253,7 +252,6 @@ export class TsEnumEntityStatement {
253
252
  });
254
253
  writer.popIndent();
255
254
  writer.print(`}`);
256
- idl.getNamespacesPathFor(this.enumEntity).forEach(it => writer.popNamespace());
257
255
  }
258
256
  maybeQuoted(value) {
259
257
  if (typeof value == "string")
@@ -294,6 +292,10 @@ export class LambdaExpression {
294
292
  ////////////////////////////////////////////////////////////////
295
293
  // SIGNATURES //
296
294
  ////////////////////////////////////////////////////////////////
295
+ export var ArgumentModifier;
296
+ (function (ArgumentModifier) {
297
+ ArgumentModifier[ArgumentModifier["OPTIONAL"] = 0] = "OPTIONAL";
298
+ })(ArgumentModifier || (ArgumentModifier = {}));
297
299
  export var FieldModifier;
298
300
  (function (FieldModifier) {
299
301
  FieldModifier[FieldModifier["READONLY"] = 0] = "READONLY";
@@ -354,12 +356,13 @@ PrintHint.AsConstPointer = new PrintHint('AsConstPointer');
354
356
  PrintHint.AsValue = new PrintHint('AsValue');
355
357
  PrintHint.AsConstReference = new PrintHint('AsConstReference');
356
358
  export class MethodSignature {
357
- constructor(returnType, args, defaults = undefined, printHints, argNames) {
359
+ constructor(returnType, args, defaults = undefined, argsModifiers = undefined, printHints, argNames) {
358
360
  this.returnType = returnType;
359
361
  this.args = args;
360
362
  this.defaults = defaults;
361
363
  this.printHints = printHints;
362
364
  this.argNames = argNames;
365
+ this.argsModifiers = argsModifiers === null || argsModifiers === void 0 ? void 0 : argsModifiers.map(it => it === undefined ? [] : Array.isArray(it) ? it : [it]);
363
366
  }
364
367
  argName(index) {
365
368
  var _a, _b;
@@ -369,6 +372,10 @@ export class MethodSignature {
369
372
  var _a;
370
373
  return (_a = this.defaults) === null || _a === void 0 ? void 0 : _a[index];
371
374
  }
375
+ isArgOptional(index) {
376
+ var _a, _b, _c;
377
+ return (_c = (_b = (_a = this.argsModifiers) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.includes(ArgumentModifier.OPTIONAL)) !== null && _c !== void 0 ? _c : false;
378
+ }
372
379
  retHint() {
373
380
  var _a;
374
381
  return (_a = this.printHints) === null || _a === void 0 ? void 0 : _a[0];
@@ -382,8 +389,8 @@ export class MethodSignature {
382
389
  }
383
390
  }
384
391
  export class NamedMethodSignature extends MethodSignature {
385
- constructor(returnType, args = [], argsNames = [], defaults = undefined, printHints) {
386
- super(returnType, args, defaults, printHints);
392
+ constructor(returnType, args = [], argsNames = [], defaults = undefined, argsModifiers = undefined, printHints) {
393
+ super(returnType, args, defaults, argsModifiers, printHints);
387
394
  this.argsNames = argsNames;
388
395
  }
389
396
  static make(returnType, args) {
@@ -538,9 +545,6 @@ export class LanguageWriter {
538
545
  makeUnionTypeDefaultInitializer() {
539
546
  return this.makeRuntimeType(RuntimeType.UNDEFINED);
540
547
  }
541
- makeRuntimeTypeGetterCall(value) {
542
- return this.makeFunctionCall("runtimeType", [this.makeString(value)]);
543
- }
544
548
  makeArrayResize(array, arrayType, length, deserializer) {
545
549
  return new ExpressionStatement(new StringExpression(""));
546
550
  }
@@ -627,8 +631,8 @@ export class LanguageWriter {
627
631
  makeIsTypeCall(value, decl) {
628
632
  return this.makeString(`is${decl.name}(${value})`);
629
633
  }
630
- makeEnumEntity(enumEntity, isExport) {
631
- return new TsEnumEntityStatement(enumEntity, isExport);
634
+ makeEnumEntity(enumEntity, options) {
635
+ return new TsEnumEntityStatement(enumEntity, { isExport: options.isExport, isDeclare: !!options.isDeclare });
632
636
  }
633
637
  makeFieldModifiersList(modifiers, customFieldFilter) {
634
638
  let allowedModifiers = this.supportedFieldModifiers;
@@ -681,45 +685,6 @@ export class LanguageWriter {
681
685
  typeInstanceOf(type, value, members) {
682
686
  return this.makeString(`${value} instanceof ${this.getNodeName(type)}`);
683
687
  }
684
- makeLengthSerializer(serializer, value) {
685
- const valueType = "valueType";
686
- return this.makeBlock([
687
- this.makeAssign(valueType, undefined, this.makeFunctionCall("runtimeType", [this.makeString(value)]), true),
688
- this.makeStatement(this.makeMethodCall(serializer, "writeInt8", [this.makeString(valueType)])),
689
- this.makeMultiBranchCondition([
690
- {
691
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.NUMBER),
692
- stmt: this.makeStatement(this.makeMethodCall(serializer, "writeFloat32", [this.makeString(`${value} as float32`)]))
693
- },
694
- {
695
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.STRING),
696
- stmt: this.makeStatement(this.makeMethodCall(serializer, "writeString", [this.makeString(`${value} as string`)]))
697
- },
698
- {
699
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.OBJECT),
700
- stmt: this.makeStatement(this.makeMethodCall(serializer, "writeInt32", [this.makeString(`(${value} as Resource).id as int32`)]))
701
- },
702
- ]),
703
- ], false);
704
- }
705
- makeLengthDeserializer(deserializer) {
706
- const valueType = "valueType";
707
- return this.makeBlock([
708
- this.makeAssign(valueType, undefined, this.makeMethodCall(deserializer, "readInt8", []), true),
709
- this.makeMultiBranchCondition([{
710
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.NUMBER),
711
- stmt: this.makeReturn(this.makeString(`${deserializer}.readFloat32() as number`))
712
- },
713
- {
714
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.STRING),
715
- stmt: this.makeReturn(this.makeMethodCall(deserializer, "readString", []))
716
- },
717
- {
718
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.OBJECT),
719
- stmt: this.makeReturn(this.makeString(`({id: ${deserializer}.readInt32(), bundleName: "", moduleName: ""}) as Resource`))
720
- }], this.makeReturn(this.makeUndefined())),
721
- ], false);
722
- }
723
688
  stringifyTypeOrEmpty(type) {
724
689
  if (type === undefined)
725
690
  return "";
@@ -743,7 +708,16 @@ export class LanguageWriter {
743
708
  this.popIndent();
744
709
  this.print(`}`);
745
710
  }
711
+ static get isReferenceRelativeToNamespaces() { return this._isReferenceRelativeToNamespaces; }
712
+ static relativeReferences(isRelative, op) {
713
+ const prevIsRelative = this.isReferenceRelativeToNamespaces;
714
+ this._isReferenceRelativeToNamespaces = isRelative;
715
+ const result = op();
716
+ this._isReferenceRelativeToNamespaces = prevIsRelative;
717
+ return result;
718
+ }
746
719
  }
720
+ LanguageWriter._isReferenceRelativeToNamespaces = false;
747
721
  export function mangleMethodName(method, id) {
748
722
  return `${method.name}${id !== null && id !== void 0 ? id : ""}`;
749
723
  }
@@ -17,7 +17,8 @@ export declare class CJTypeNameConvertor implements NodeConvertor<string>, IdlNa
17
17
  convertCallback(type: idl.IDLCallback): string;
18
18
  convertMethod(node: idl.IDLMethod): string;
19
19
  convertConstant(node: idl.IDLConstant): string;
20
- convertImport(type: idl.IDLReferenceType, importClause: string): string;
20
+ convertImport(type: idl.IDLImport): string;
21
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
21
22
  convertTypeReference(type: idl.IDLReferenceType): string;
22
23
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
23
24
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
@@ -20,6 +20,11 @@ export class CJTypeNameConvertor {
20
20
  this.resolver = resolver;
21
21
  }
22
22
  convert(node) {
23
+ if (idl.isType(node) && idl.isReferenceType(node)) {
24
+ if (node.name.startsWith('%TEXT%:')) {
25
+ return node.name.substring(7);
26
+ }
27
+ }
23
28
  return convertNode(this, node);
24
29
  }
25
30
  /***** TypeConvertor<string> **********************************/
@@ -35,7 +40,7 @@ export class CJTypeNameConvertor {
35
40
  }
36
41
  if (idl.IDLContainerUtils.isRecord(type)) {
37
42
  const stringes = type.elementType.slice(0, 2).map(it => convertType(this, it));
38
- return `Map<${stringes[0]}, ${stringes[1]}>`;
43
+ return `HashMap<${stringes[0]}, ${stringes[1]}>`;
39
44
  }
40
45
  if (idl.IDLContainerUtils.isPromise(type)) {
41
46
  return `Any`;
@@ -56,7 +61,7 @@ export class CJTypeNameConvertor {
56
61
  }
57
62
  convertCallback(type) {
58
63
  const params = type.parameters.map(it => `${it.name}: ${it.isOptional ? "?" : ""}${this.convert(it.type)}`);
59
- return `\{(${params.join(", ")}) => ${this.convert(type.returnType)}\}`;
64
+ return `(${params.join(", ")}) -> ${this.convert(type.returnType)}`;
60
65
  }
61
66
  convertMethod(node) {
62
67
  throw new Error('Method not implemented.');
@@ -64,7 +69,11 @@ export class CJTypeNameConvertor {
64
69
  convertConstant(node) {
65
70
  throw new Error('Method not implemented.');
66
71
  }
67
- convertImport(type, importClause) {
72
+ convertImport(type) {
73
+ console.warn("Imports are not implemented yet");
74
+ return type.name;
75
+ }
76
+ convertTypeReferenceAsImport(type, importClause) {
68
77
  return type.name;
69
78
  }
70
79
  convertTypeReference(type) {
@@ -72,7 +81,7 @@ export class CJTypeNameConvertor {
72
81
  return "KPointer";
73
82
  const importAttr = idl.getExtAttribute(type, idl.IDLExtendedAttributes.Import);
74
83
  if (importAttr) {
75
- return this.convertImport(type, importAttr);
84
+ return this.convertTypeReferenceAsImport(type, importAttr);
76
85
  }
77
86
  // resolve synthetic types
78
87
  const decl = this.resolver.resolveTypeReference(type);
@@ -112,6 +121,8 @@ export class CJTypeNameConvertor {
112
121
  case idl.IDLBufferType: return 'Array<UInt8>';
113
122
  case idl.IDLInteropReturnBufferType: return 'Array<UInt8>';
114
123
  case idl.IDLBigintType: return 'Int64';
124
+ case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
125
+ case idl.IDLAnyType: return 'Any';
115
126
  }
116
127
  throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
117
128
  }
@@ -131,6 +142,7 @@ export class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvertor {
131
142
  switch (type) {
132
143
  case idl.IDLStringType: return 'CString';
133
144
  case idl.IDLInteropReturnBufferType: return 'KInteropReturnBuffer';
145
+ case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
134
146
  }
135
147
  }
136
148
  if (idl.isContainerType(type)) {
@@ -162,7 +174,6 @@ export class CJInteropArgConvertor extends InteropArgConvertor {
162
174
  convertPrimitiveType(type) {
163
175
  switch (type) {
164
176
  case idl.IDLNumberType: return "Float64";
165
- case idl.IDLLengthType: return "Ark_Length";
166
177
  }
167
178
  return super.convertPrimitiveType(type);
168
179
  }
@@ -21,7 +21,8 @@ export declare class GenericCppConvertor implements NodeConvertor<ConvertResult>
21
21
  convertOptional(type: idl.IDLOptionalType): ConvertResult;
22
22
  convertUnion(type: idl.IDLUnionType): ConvertResult;
23
23
  convertContainer(type: idl.IDLContainerType): ConvertResult;
24
- convertImport(type: idl.IDLReferenceType, _: string): ConvertResult;
24
+ convertImport(type: idl.IDLImport): ConvertResult;
25
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, _: string): ConvertResult;
25
26
  convertTypeReference(type: idl.IDLReferenceType): ConvertResult;
26
27
  convertTypeParameter(type: idl.IDLTypeParameterType): ConvertResult;
27
28
  convertPrimitiveType(type: idl.IDLPrimitiveType): ConvertResult;
@@ -51,7 +52,8 @@ export declare class CppReturnTypeConvertor implements TypeConvertor<string> {
51
52
  isVoid(returnType: idl.IDLType): boolean;
52
53
  convert(type: idl.IDLType): string;
53
54
  convertContainer(type: idl.IDLContainerType): string;
54
- convertImport(type: idl.IDLReferenceType, importClause: string): string;
55
+ convertImport(type: idl.IDLImport): string;
56
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
55
57
  convertOptional(type: idl.IDLOptionalType): string;
56
58
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
57
59
  convertTypeParameter(type: idl.IDLTypeParameterType): string;