@idlizer/core 2.1.2 → 2.1.7

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 (80) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +3 -4
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +43 -32
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +35 -17
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +30 -56
  5. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +3 -1
  6. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +32 -11
  7. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +5 -2
  8. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +71 -62
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +1 -1
  10. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +9 -19
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +4 -2
  12. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +10 -3
  13. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +2 -1
  14. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +24 -4
  15. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +8 -4
  16. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +87 -33
  17. package/build/lib/src/LanguageWriters/nameConvertor.d.ts +3 -1
  18. package/build/lib/src/LanguageWriters/nameConvertor.js +5 -1
  19. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +19 -11
  20. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +34 -47
  21. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +4 -1
  22. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +1 -1
  23. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +9 -9
  24. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +15 -24
  25. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +17 -8
  26. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +48 -23
  27. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +4 -6
  28. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +15 -14
  29. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +13 -8
  30. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +33 -52
  31. package/build/lib/src/LibraryInterface.d.ts +1 -4
  32. package/build/lib/src/config.d.ts +813 -110
  33. package/build/lib/src/config.js +25 -3
  34. package/build/lib/src/configDescriber.d.ts +31 -4
  35. package/build/lib/src/configDescriber.js +101 -3
  36. package/build/lib/src/from-idl/DtsPrinter.js +31 -18
  37. package/build/lib/src/from-idl/IDLLinter.d.ts +40 -7
  38. package/build/lib/src/from-idl/IDLLinter.js +211 -25
  39. package/build/lib/src/from-idl/common.js +1 -1
  40. package/build/lib/src/from-idl/deserialize.d.ts +10 -1
  41. package/build/lib/src/from-idl/deserialize.js +486 -352
  42. package/build/lib/src/idl.d.ts +29 -19
  43. package/build/lib/src/idl.js +404 -119
  44. package/build/lib/src/idlize.d.ts +2 -1
  45. package/build/lib/src/idlize.js +82 -26
  46. package/build/lib/src/index.d.ts +4 -3
  47. package/build/lib/src/index.js +3 -2
  48. package/build/lib/src/options.d.ts +1 -1
  49. package/build/lib/src/peer-generation/BuilderClass.d.ts +0 -2
  50. package/build/lib/src/peer-generation/BuilderClass.js +0 -8
  51. package/build/lib/src/peer-generation/LayoutManager.d.ts +10 -3
  52. package/build/lib/src/peer-generation/LayoutManager.js +3 -2
  53. package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
  54. package/build/lib/src/peer-generation/Materialized.js +3 -3
  55. package/build/lib/src/peer-generation/PeerClass.d.ts +3 -8
  56. package/build/lib/src/peer-generation/PeerClass.js +0 -1
  57. package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
  58. package/build/lib/src/peer-generation/PeerFile.js +1 -1
  59. package/build/lib/src/peer-generation/PeerLibrary.d.ts +12 -7
  60. package/build/lib/src/peer-generation/PeerLibrary.js +131 -67
  61. package/build/lib/src/peer-generation/ReferenceResolver.d.ts +1 -1
  62. package/build/lib/src/peer-generation/ReferenceResolver.js +2 -2
  63. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +1 -0
  64. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +6 -2
  65. package/build/lib/src/peer-generation/idl/common.d.ts +3 -1
  66. package/build/lib/src/peer-generation/idl/common.js +21 -4
  67. package/build/lib/src/peer-generation/isMaterialized.js +28 -7
  68. package/build/lib/src/peer-generation/unions.d.ts +3 -2
  69. package/build/lib/src/peer-generation/unions.js +7 -3
  70. package/build/lib/src/resolveNamedNode.d.ts +3 -0
  71. package/build/lib/src/resolveNamedNode.js +105 -0
  72. package/build/lib/src/util.d.ts +8 -1
  73. package/build/lib/src/util.js +41 -3
  74. package/build/lib/src/visitor.d.ts +2 -1
  75. package/build/lib/src/visitor.js +109 -7
  76. package/package.json +2 -2
  77. package/webidl2.js/LICENSE +21 -0
  78. package/webidl2.js/README.md +827 -0
  79. package/webidl2.js/dist/package.json +3 -0
  80. package/webidl2.js/dist/webidl2.js +93 -19
@@ -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;
@@ -263,7 +263,6 @@ export declare class CustomTypeConvertor extends BaseArgConvertor {
263
263
  isPointerType(): boolean;
264
264
  }
265
265
  export declare class OptionConvertor extends BaseArgConvertor {
266
- private library;
267
266
  type: idl.IDLType;
268
267
  private readonly typeConvertor;
269
268
  constructor(library: LibraryInterface, param: string, type: idl.IDLType);
@@ -293,8 +292,7 @@ export declare class UnionConvertor extends BaseArgConvertor {
293
292
  }
294
293
  export declare class FunctionConvertor extends BaseArgConvertor {
295
294
  private library;
296
- protected type: idl.IDLReferenceType;
297
- constructor(library: LibraryInterface, param: string, type: idl.IDLReferenceType);
295
+ constructor(library: LibraryInterface, param: string);
298
296
  convertorArg(param: string, writer: LanguageWriter): string;
299
297
  convertorSerialize(param: string, value: string, writer: LanguageWriter): void;
300
298
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
@@ -334,6 +332,7 @@ export declare class CallbackConvertor extends BaseArgConvertor {
334
332
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter, useSyncVersion?: boolean): LanguageStatement;
335
333
  nativeType(): idl.IDLType;
336
334
  isPointerType(): boolean;
335
+ unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
337
336
  }
338
337
  export declare const CallbackKind = "CallbackKind";
339
338
  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,9 @@ 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 OptionConvertor ||
51
+ convertor instanceof ImportTypeConvertor) {
52
+ // try { console.log(`convertor is ${convertor.constructor.name} for ${JSON.stringify(originalType)}`) } catch (e) {}
50
53
  return false;
51
54
  }
52
55
  let type = convertor.interopType();
@@ -71,7 +74,8 @@ export function isVMContextMethod(method) {
71
74
  var _a, _b;
72
75
  return !!idl.asPromise(method.signature.returnType) ||
73
76
  !!((_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));
77
+ !!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT)) ||
78
+ generatorConfiguration().forceContext.includes(method.name);
75
79
  }
76
80
  export function isDirectMethod(method, library) {
77
81
  if (isVMContextMethod(method)) {
@@ -218,20 +222,18 @@ export class EnumConvertor extends BaseArgConvertor {
218
222
  this.enumEntry = enumEntry;
219
223
  }
220
224
  convertorArg(param, writer) {
221
- return writer.makeEnumCast(this.enumEntry, writer.escapeKeyword(param));
225
+ return writer.i32FromEnum(writer.makeString(writer.escapeKeyword(param)), this.enumEntry).asString();
222
226
  }
223
227
  convertorSerialize(param, value, writer) {
224
- writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.makeEnumCast(this.enumEntry, value)]);
228
+ writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.i32FromEnum(writer.makeString(value), this.enumEntry).asString()]);
225
229
  }
226
230
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
227
231
  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));
232
+ const enumExpr = writer.enumFromI32(readExpr, this.enumEntry);
231
233
  return assigneer(enumExpr);
232
234
  }
233
235
  nativeType() {
234
- return idl.createReferenceType(this.enumEntry);
236
+ return this.idlType;
235
237
  }
236
238
  interopType() {
237
239
  return idl.IDLI32Type;
@@ -306,24 +308,24 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
306
308
  return writer.escapeKeyword(param);
307
309
  }
308
310
  convertorSerialize(param, value, printer) {
309
- printer.writeMethodCall(`${param}Serializer`, "writeUInt64", [value]);
311
+ printer.writeMethodCall(`${param}Serializer`, "writeInt64", [value]);
310
312
  }
311
313
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
312
- return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readUInt64()`), this.idlType, { optional: false }));
314
+ return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readInt64()`), this.idlType, { optional: false }));
313
315
  }
314
316
  nativeType() {
315
- return idl.IDLU64Type;
317
+ return idl.IDLI64Type;
316
318
  }
317
319
  interopType() {
318
- return idl.IDLU64Type;
320
+ return idl.IDLI64Type;
319
321
  }
320
322
  isPointerType() {
321
323
  return false;
322
324
  }
323
325
  }
324
326
  export class ObjectConvertor extends BaseArgConvertor {
325
- constructor(param) {
326
- super(idl.IDLAnyType, [
327
+ constructor(param, type) {
328
+ super(type, [
327
329
  RuntimeType.BIGINT,
328
330
  RuntimeType.BOOLEAN,
329
331
  RuntimeType.FUNCTION,
@@ -332,7 +334,6 @@ export class ObjectConvertor extends BaseArgConvertor {
332
334
  RuntimeType.OBJECT,
333
335
  RuntimeType.STRING,
334
336
  RuntimeType.SYMBOL,
335
- RuntimeType.UNDEFINED
336
337
  ], false, true, param);
337
338
  }
338
339
  convertorArg(param, writer) {
@@ -463,7 +464,7 @@ export class AggregateConvertor extends BaseArgConvertor {
463
464
  * todo: check UnionType name creation for union of unnamed nodes (isNamedNode() == false)
464
465
  */
465
466
  const memberType = prop.isOptional
466
- ? idl.createUnionType([idl.IDLUndefinedType, prop.type], "$NOT TO BE PRINTED%")
467
+ ? idl.createUnionType([idl.IDLUndefinedType, prop.type])
467
468
  : prop.type;
468
469
  return writer.makeAssign(`${bufferName}_${prop.name}`, memberType, expr, true, true);
469
470
  }, writer));
@@ -558,7 +559,7 @@ export class InterfaceConvertor extends BaseArgConvertor {
558
559
  interopType() {
559
560
  // Actually shouldn't be used!
560
561
  // throw new Error("Must never be used")
561
- return idl.IDLObjectType;
562
+ return idl.IDLSerializerBuffer;
562
563
  }
563
564
  isPointerType() {
564
565
  return true;
@@ -601,7 +602,7 @@ export class ArrayConvertor extends BaseArgConvertor {
601
602
  printer.writeStatement(printer.makeLoop(loopCounter, valueLength));
602
603
  printer.pushIndent();
603
604
  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);
605
+ this.elementConvertor.convertorSerialize(param, `${value}_element`, printer);
605
606
  printer.popIndent();
606
607
  printer.print(`}`);
607
608
  }
@@ -807,12 +808,18 @@ export class OptionConvertor extends BaseArgConvertor {
807
808
  // TODO: be smarter here, and for smth like Length|undefined or number|undefined pass without serializer.
808
809
  constructor(library, param, type) {
809
810
  let conv = library.typeConvertor(param, type);
811
+ let currentConv = conv;
812
+ while (currentConv instanceof ProxyConvertor) {
813
+ currentConv = currentConv.convertor;
814
+ }
815
+ if (currentConv instanceof OptionConvertor) {
816
+ conv = currentConv.typeConvertor;
817
+ }
810
818
  let runtimeTypes = conv.runtimeTypes;
811
819
  if (!runtimeTypes.includes(RuntimeType.UNDEFINED)) {
812
820
  runtimeTypes.push(RuntimeType.UNDEFINED);
813
821
  }
814
822
  super(idl.createOptionalType(conv.idlType), runtimeTypes, conv.isScoped, true, param);
815
- this.library = library;
816
823
  this.type = type;
817
824
  this.typeConvertor = conv;
818
825
  }
@@ -820,7 +827,7 @@ export class OptionConvertor extends BaseArgConvertor {
820
827
  throw new Error("Must never be used");
821
828
  }
822
829
  convertorSerialize(param, value, printer) {
823
- const valueType = `${value}_type`;
830
+ const valueType = `${value}_type`.replaceAll('.', '_');
824
831
  const serializedType = (printer.language == Language.JAVA ? undefined : idl.IDLI32Type);
825
832
  printer.writeStatement(printer.makeAssign(valueType, serializedType, printer.makeRuntimeType(RuntimeType.UNDEFINED), true, false));
826
833
  if (printer.language != Language.CJ) {
@@ -832,8 +839,9 @@ export class OptionConvertor extends BaseArgConvertor {
832
839
  if (printer.language == Language.CJ) {
833
840
  printer.writeMethodCall(`${param}Serializer`, "writeInt8", ["RuntimeType.OBJECT.ordinal"]); // everything is object, except None<T>
834
841
  }
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);
842
+ const valueValue = `${value}_value`.replaceAll('.', '_');
843
+ printer.writeStatement(printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true));
844
+ this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer);
837
845
  printer.popIndent();
838
846
  printer.print(`}`);
839
847
  if (printer.language == Language.CJ) {
@@ -937,7 +945,7 @@ export class UnionConvertor extends BaseArgConvertor {
937
945
  return { expr, stmt };
938
946
  });
939
947
  statements.push(writer.makeMultiBranchCondition(branches, writer.makeThrowError(`One of the branches for ${bufferName} has to be chosen through deserialisation.`)));
940
- statements.push(assigneer(writer.makeCast(writer.makeString(bufferName), this.type)));
948
+ statements.push(assigneer(writer.makeCast(writer.makeString(bufferName), this.nativeType())));
941
949
  return new BlockStatement(statements, false);
942
950
  }
943
951
  nativeType() {
@@ -958,11 +966,10 @@ export class UnionConvertor extends BaseArgConvertor {
958
966
  }
959
967
  }
960
968
  export class FunctionConvertor extends BaseArgConvertor {
961
- constructor(library, param, type) {
969
+ constructor(library, param) {
962
970
  // TODO: pass functions as integers to native side.
963
971
  super(idl.IDLFunctionType, [RuntimeType.FUNCTION], false, false, param);
964
972
  this.library = library;
965
- this.type = type;
966
973
  }
967
974
  convertorArg(param, writer) {
968
975
  return writer.language == Language.CPP ? `makeArkFunctionFromId(${param})` : `registerCallback(${param})`;
@@ -971,7 +978,7 @@ export class FunctionConvertor extends BaseArgConvertor {
971
978
  writer.writeMethodCall(`${param}Serializer`, "writeFunction", [value]);
972
979
  }
973
980
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
974
- return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`), this.type, { optional: true }));
981
+ return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`), idl.IDLFunctionType, { optional: true }));
975
982
  }
976
983
  nativeType() {
977
984
  return idl.IDLFunctionType;
@@ -991,7 +998,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
991
998
  convertorArg(param, writer) {
992
999
  switch (writer.language) {
993
1000
  case Language.CPP:
994
- return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_")}>(${param})`;
1001
+ return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
995
1002
  case Language.JAVA:
996
1003
  case Language.CJ:
997
1004
  return `MaterializedBase.toPeerPtr(${param})`;
@@ -1000,12 +1007,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
1000
1007
  }
1001
1008
  }
1002
1009
  convertorSerialize(param, value, printer) {
1003
- printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_")}`, [
1010
+ printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_", "namespace.name")}`, [
1004
1011
  printer.makeString(value)
1005
1012
  ])));
1006
1013
  }
1007
1014
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1008
- const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_")}`, []), idl.createReferenceType(this.declaration));
1015
+ const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_", "namespace.name")}`, []), this.declaration);
1009
1016
  return assigneer(readStatement);
1010
1017
  }
1011
1018
  nativeType() {
@@ -1108,6 +1115,10 @@ export class CallbackConvertor extends BaseArgConvertor {
1108
1115
  isPointerType() {
1109
1116
  return true;
1110
1117
  }
1118
+ unionDiscriminator(value, index, writer, duplicates) {
1119
+ // We serialize callbacks as table offsets, so don't need to discriminate them. Runtime type check is enough
1120
+ return writer.makeUnionVariantCondition(this, value, `${value}_type`, RuntimeType[RuntimeType.FUNCTION]);
1121
+ }
1111
1122
  }
1112
1123
  ////////////////////////////////////////////////////////////////////////////////
1113
1124
  // 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,11 +236,14 @@ 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
- abstract writeFunctionDeclaration(name: string, signature: MethodSignature): void;
235
- abstract writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
245
+ abstract writeFunctionDeclaration(name: string, signature: MethodSignature, generics?: string[]): void;
246
+ abstract writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void, generics?: string[]): void;
236
247
  abstract writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
237
248
  abstract writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
238
249
  abstract writeMethodImplementation(method: Method, op: (writer: this) => void): 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,18 +372,24 @@ 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
368
378
  * @param namespace Namespace to begin
369
379
  */
370
- pushNamespace(namespace: string, ident?: boolean): void;
380
+ pushNamespace(namespace: string, options: {
381
+ ident: boolean;
382
+ isDeclared?: boolean;
383
+ }): void;
371
384
  /**
372
385
  * Writes closing brace of namespace block and removes one level of indent
373
386
  */
374
- popNamespace(ident?: boolean): void;
387
+ popNamespace(options: {
388
+ ident: boolean;
389
+ }): void;
390
+ static _isReferenceRelativeToNamespaces: boolean;
391
+ static get isReferenceRelativeToNamespaces(): boolean;
392
+ static relativeReferences<T>(isRelative: boolean, op: () => T): T;
375
393
  }
376
394
  export declare function mangleMethodName(method: Method, id?: number): string;
377
395
  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 "";
@@ -729,21 +694,30 @@ export class LanguageWriter {
729
694
  * Writes `namespace <namespace> {` and adds extra indent
730
695
  * @param namespace Namespace to begin
731
696
  */
732
- pushNamespace(namespace, ident = true) {
697
+ pushNamespace(namespace, options) {
733
698
  this.print(`namespace ${namespace} {`);
734
- if (ident)
699
+ if (options.ident)
735
700
  this.pushIndent();
736
701
  }
737
702
  /**
738
703
  * Writes closing brace of namespace block and removes one level of indent
739
704
  */
740
- popNamespace(ident = true) {
705
+ popNamespace(options) {
741
706
  this.namespaceStack.pop();
742
- if (ident)
707
+ if (options.ident)
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;
@@ -31,4 +32,5 @@ export declare class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvert
31
32
  export declare class CJInteropArgConvertor extends InteropArgConvertor {
32
33
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
33
34
  }
35
+ export declare function removePoints(s: string): string;
34
36
  //# sourceMappingURL=CJConvertors.d.ts.map