@idlizer/core 2.1.0 → 2.1.2

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 (42) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +13 -0
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +66 -12
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +8 -1
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +3 -0
  5. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +5 -3
  6. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +0 -1
  7. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -0
  8. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +2 -1
  9. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +9 -1
  10. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +46 -28
  11. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +7 -1
  12. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +3 -3
  13. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +0 -1
  14. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -3
  15. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +8 -2
  16. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +29 -6
  17. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +7 -1
  18. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +31 -5
  19. package/build/lib/src/LibraryInterface.d.ts +0 -1
  20. package/build/lib/src/config.d.ts +823 -0
  21. package/build/lib/src/config.js +9 -0
  22. package/build/lib/src/from-idl/DtsPrinter.js +2 -2
  23. package/build/lib/src/idl.d.ts +4 -2
  24. package/build/lib/src/idl.js +13 -2
  25. package/build/lib/src/idlize.d.ts +1 -0
  26. package/build/lib/src/idlize.js +3 -2
  27. package/build/lib/src/index.d.ts +2 -0
  28. package/build/lib/src/index.js +2 -0
  29. package/build/lib/src/peer-generation/PeerLibrary.d.ts +1 -3
  30. package/build/lib/src/peer-generation/PeerLibrary.js +10 -9
  31. package/build/lib/src/peer-generation/isEnumType.d.ts +5 -0
  32. package/build/lib/src/peer-generation/isEnumType.js +29 -0
  33. package/build/lib/src/peer-generation/modules.d.ts +10 -0
  34. package/build/lib/src/peer-generation/modules.js +38 -0
  35. package/build/lib/src/util.d.ts +1 -0
  36. package/build/lib/src/util.js +6 -0
  37. package/package.json +2 -2
  38. package/build/lib/src/configMerge.d.ts +0 -2
  39. package/build/lib/src/configMerge.js +0 -42
  40. package/webidl2.js/LICENSE +0 -21
  41. package/webidl2.js/README.md +0 -827
  42. package/webidl2.js/dist/package.json +0 -3
@@ -15,6 +15,7 @@ export interface ArgConvertor {
15
15
  convertorArg(param: string, writer: LanguageWriter): string;
16
16
  convertorSerialize(param: string, value: string, writer: LanguageWriter): void;
17
17
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
18
+ holdResource(resourceName: string, holder: string, writer: LanguageWriter): void;
18
19
  interopType(): idl.IDLType;
19
20
  nativeType(): idl.IDLType;
20
21
  targetType(writer: LanguageWriter): string;
@@ -23,6 +24,7 @@ export interface ArgConvertor {
23
24
  getMembers(): string[];
24
25
  getObjectAccessor(languge: Language, value: string, args?: Record<string, string>, writer?: LanguageWriter): string;
25
26
  }
27
+ export declare function isDirectConvertedType(originalType: idl.IDLType | undefined, library: PeerLibrary): boolean;
26
28
  export declare function isVMContextMethod(method: Method): boolean;
27
29
  export declare function isDirectMethod(method: Method, library: PeerLibrary): boolean;
28
30
  export declare abstract class BaseArgConvertor implements ArgConvertor {
@@ -32,6 +34,7 @@ export declare abstract class BaseArgConvertor implements ArgConvertor {
32
34
  useArray: boolean;
33
35
  param: string;
34
36
  protected constructor(idlType: idl.IDLType, runtimeTypes: RuntimeType[], isScoped: boolean, useArray: boolean, param: string);
37
+ holdResource(_resourceName: string, _holder: string, _writer: LanguageWriter): void;
35
38
  nativeType(): idl.IDLType;
36
39
  isPointerType(): boolean;
37
40
  interopType(): idl.IDLType;
@@ -119,6 +122,16 @@ export declare class BigIntToU64Convertor extends BaseArgConvertor {
119
122
  interopType(): idl.IDLType;
120
123
  isPointerType(): boolean;
121
124
  }
125
+ export declare class ObjectConvertor extends BaseArgConvertor {
126
+ constructor(param: string);
127
+ convertorArg(param: string, writer: LanguageWriter): string;
128
+ convertorSerialize(param: string, value: string, printer: LanguageWriter): void;
129
+ convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
130
+ holdResource(name: string, holder: string, writer: LanguageWriter): void;
131
+ nativeType(): idl.IDLType;
132
+ interopType(): idl.IDLType;
133
+ isPointerType(): boolean;
134
+ }
122
135
  export declare class PointerConvertor extends BaseArgConvertor {
123
136
  constructor(param: string);
124
137
  convertorArg(param: string, writer: LanguageWriter): string;
@@ -23,30 +23,35 @@ import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
23
23
  import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
24
24
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
25
25
  import { qualifiedName } from "../peer-generation/idl/common";
26
- function isDirectConvertedType(originalType, library) {
26
+ export function isDirectConvertedType(originalType, library) {
27
+ const debug = false;
27
28
  if (originalType == undefined)
28
29
  return true; // TODO: is it correct?
29
- if (originalType == idl.IDLInteropReturnBufferType)
30
+ if (debug)
31
+ console.log(`IDL type ${idl.DebugUtils.debugPrintType(originalType)}`);
32
+ if (originalType == idl.IDLInteropReturnBufferType) {
30
33
  return false;
31
- if (originalType == idl.IDLThisType)
34
+ }
35
+ if (originalType == idl.IDLSerializerBuffer)
32
36
  return true;
33
37
  let convertor = library.typeConvertor("x", originalType, false);
34
38
  // Resolve aliases.
35
39
  while (convertor instanceof TypeAliasConvertor) {
36
40
  convertor = convertor.convertor;
37
41
  }
38
- // Temporary!
39
42
  if (convertor instanceof ArrayConvertor ||
40
- convertor instanceof MapConvertor ||
41
43
  convertor instanceof CustomTypeConvertor ||
44
+ convertor instanceof UnionConvertor ||
42
45
  convertor instanceof CallbackConvertor ||
46
+ convertor instanceof MapConvertor ||
47
+ convertor instanceof TupleConvertor ||
43
48
  convertor instanceof AggregateConvertor ||
44
- convertor instanceof UnionConvertor) {
45
- // try { console.log(`convertor is ${convertor.constructor.name} for ${JSON.stringify(originalType)}`) } catch (e) {}
49
+ convertor instanceof OptionConvertor) {
46
50
  return false;
47
51
  }
48
52
  let type = convertor.interopType();
49
- // TODO: make 'number' be direct!
53
+ if (debug)
54
+ console.log(`converted type ${idl.DebugUtils.debugPrintType(originalType)}`);
50
55
  let result = type == idl.IDLI8Type || type == idl.IDLU8Type
51
56
  || type == idl.IDLI16Type || type == idl.IDLU16Type
52
57
  || type == idl.IDLI32Type || type == idl.IDLU32Type
@@ -55,8 +60,11 @@ function isDirectConvertedType(originalType, library) {
55
60
  || type == idl.IDLPointerType
56
61
  || type == idl.IDLBooleanType
57
62
  || type == idl.IDLVoidType
58
- || type == idl.IDLUndefinedType;
59
- // try { if (!result) console.log(`type ${JSON.stringify(type)} is not direct`) } catch (e) {}
63
+ || type == idl.IDLUndefinedType
64
+ || type == idl.IDLSerializerBuffer
65
+ || type == idl.IDLNumberType;
66
+ if (!result && debug)
67
+ console.log(`type ${idl.DebugUtils.debugPrintType(type)} is not direct`);
60
68
  return result;
61
69
  }
62
70
  export function isVMContextMethod(method) {
@@ -66,11 +74,12 @@ export function isVMContextMethod(method) {
66
74
  !!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT));
67
75
  }
68
76
  export function isDirectMethod(method, library) {
69
- if (isVMContextMethod(method))
77
+ if (isVMContextMethod(method)) {
70
78
  return false;
79
+ }
71
80
  let result = isDirectConvertedType(method.signature.returnType, library) &&
72
81
  method.signature.args.every((arg) => isDirectConvertedType(arg, library));
73
- //if (!result) console.log(`method ${method.name} is not direct`)
82
+ // if (!result) console.log(`method ${method.name} is not direct`)
74
83
  return result;
75
84
  }
76
85
  export class BaseArgConvertor {
@@ -81,6 +90,7 @@ export class BaseArgConvertor {
81
90
  this.useArray = useArray;
82
91
  this.param = param;
83
92
  }
93
+ holdResource(_resourceName, _holder, _writer) { }
84
94
  nativeType() {
85
95
  throw new Error("Define");
86
96
  }
@@ -311,6 +321,50 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
311
321
  return false;
312
322
  }
313
323
  }
324
+ export class ObjectConvertor extends BaseArgConvertor {
325
+ constructor(param) {
326
+ super(idl.IDLAnyType, [
327
+ RuntimeType.BIGINT,
328
+ RuntimeType.BOOLEAN,
329
+ RuntimeType.FUNCTION,
330
+ RuntimeType.MATERIALIZED,
331
+ RuntimeType.NUMBER,
332
+ RuntimeType.OBJECT,
333
+ RuntimeType.STRING,
334
+ RuntimeType.SYMBOL,
335
+ RuntimeType.UNDEFINED
336
+ ], false, true, param);
337
+ }
338
+ convertorArg(param, writer) {
339
+ return writer.escapeKeyword(param);
340
+ }
341
+ convertorSerialize(param, value, printer) {
342
+ if (printer.language === Language.CPP) {
343
+ printer.writeMethodCall(`${param}Serializer`, "writeObject", [value]);
344
+ }
345
+ else {
346
+ printer.writeMethodCall(`${param}Serializer`, "holdAndWriteObject", [value]);
347
+ }
348
+ }
349
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
350
+ return assigneer(writer.makeCast(writer.makeMethodCall(deserializerName, 'readObject', []), this.idlType, { optional: false }));
351
+ }
352
+ holdResource(name, holder, writer) {
353
+ writer.writeStatement(writer.makeAssign(name, idl.createReferenceType(`CallbackResource`), writer.makeString(`{${this.param}.resource.resourceId, holdManagedCallbackResource, releaseManagedCallbackResource}`), true));
354
+ writer.writeExpressionStatement(writer.makeMethodCall(holder, 'holdCallbackResource', [
355
+ writer.makeString('&' + name)
356
+ ]));
357
+ }
358
+ nativeType() {
359
+ return idl.IDLAnyType;
360
+ }
361
+ interopType() {
362
+ return idl.IDLAnyType;
363
+ }
364
+ isPointerType() {
365
+ return true;
366
+ }
367
+ }
314
368
  export class PointerConvertor extends BaseArgConvertor {
315
369
  constructor(param) {
316
370
  // check numericPrimitiveTypes.include(type)
@@ -236,7 +236,13 @@ export declare abstract class LanguageWriter {
236
236
  abstract writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
237
237
  abstract writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
238
238
  abstract writeMethodImplementation(method: Method, op: (writer: this) => void): void;
239
- abstract writeProperty(propName: string, propType: idl.IDLType, mutable?: boolean, getterLambda?: (writer: this) => void, setterLambda?: (writer: this) => void): void;
239
+ abstract writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
240
+ method: Method;
241
+ op?: () => void;
242
+ }, setter?: {
243
+ method: Method;
244
+ op: () => void;
245
+ }): void;
240
246
  abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
241
247
  abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
242
248
  abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
@@ -347,6 +353,7 @@ export declare abstract class LanguageWriter {
347
353
  discriminatorFromExpressions(value: string, runtimeType: RuntimeType, exprs: LanguageExpression[]): LanguageExpression;
348
354
  makeDiscriminatorConvertor(_convertor: ArgConvertor, _value: string, _index: number): LanguageExpression | undefined;
349
355
  makeNot(expr: LanguageExpression): LanguageExpression;
356
+ makeSerializedBufferGetter(serializer: string): LanguageExpression;
350
357
  makeEquals(args: LanguageExpression[]): LanguageExpression;
351
358
  castToInt(value: string, bitness: 8 | 32): string;
352
359
  castToBoolean(value: string): string;
@@ -663,6 +663,9 @@ export class LanguageWriter {
663
663
  makeNot(expr) {
664
664
  return this.makeString(`!(${expr.asString()})`);
665
665
  }
666
+ makeSerializedBufferGetter(serializer) {
667
+ return this.makeMethodCall(serializer, `asBuffer`, []);
668
+ }
666
669
  makeEquals(args) {
667
670
  return this.makeNaryOp("===", args);
668
671
  }
@@ -140,15 +140,16 @@ export class GenericCppConvertor {
140
140
  case idl.IDLBooleanType: return this.make(`Boolean`);
141
141
  case idl.IDLBigintType: return this.make(`UInt64`); // TODO add arbitrary precision numeric type
142
142
  case idl.IDLPointerType: return this.make('NativePointer');
143
+ case idl.IDLCustomObjectType: return this.make('CustomObject');
143
144
  case idl.IDLUnknownType:
144
- case idl.IDLCustomObjectType:
145
- case idl.IDLAnyType: return this.make(`CustomObject`);
145
+ case idl.IDLAnyType: return this.make(`Object`);
146
146
  case idl.IDLUndefinedType: return this.make(`Undefined`);
147
147
  case idl.IDLLengthType: return this.make(`Length`);
148
148
  case idl.IDLFunctionType: return this.make(`Function`);
149
149
  case idl.IDLDate: return this.make(`Date`);
150
150
  case idl.IDLBufferType: return this.make('Buffer');
151
151
  case idl.IDLPointerType: return this.make('Pointer');
152
+ case idl.IDLSerializerBuffer: return { text: 'KSerializerBuffer', noPrefix: true };
152
153
  }
153
154
  throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
154
155
  }
@@ -218,7 +219,8 @@ export class CppInteropArgConvertor extends InteropArgConvertor {
218
219
  case idl.IDLBooleanType: return PrimitiveTypesInstance.Boolean.getText();
219
220
  case idl.IDLI32Type: return PrimitiveTypesInstance.Int32.getText();
220
221
  case idl.IDLNumberType: return "KInteropNumber";
221
- case idl.IDLBufferType: return "Ark_Buffer";
222
+ case idl.IDLSerializerBuffer: return "KSerializerBuffer";
223
+ case idl.IDLBufferType: return "KInteropBuffer";
222
224
  case idl.IDLLengthType: return "KLength";
223
225
  case idl.IDLFunctionType: return PrimitiveTypesInstance.Int32.getText();
224
226
  case idl.IDLDate: return PrimitiveTypesInstance.Int64.getText();
@@ -76,7 +76,6 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
76
76
  return 'number';
77
77
  case idl.IDLStringType: return 'string';
78
78
  case idl.IDLFunctionType: return 'Object';
79
- case idl.IDLBufferType: return 'NativeBuffer';
80
79
  case idl.IDLBigintType: return 'long';
81
80
  }
82
81
  return super.convertPrimitiveType(type);
@@ -88,6 +88,9 @@ export class InteropReturnTypeConvertor {
88
88
  }
89
89
  return KInteropReturnBuffer;
90
90
  }
91
+ if (idl.isEnum(decl)) {
92
+ return PrimitiveTypesInstance.Int32.getText();
93
+ }
91
94
  }
92
95
  return "void";
93
96
  }
@@ -116,6 +119,7 @@ export class InteropArgConvertor {
116
119
  case idl.IDLF32Type: return "KFloat";
117
120
  case idl.IDLNumberType: return 'KInteropNumber';
118
121
  case idl.IDLBigintType: return 'KLong';
122
+ case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
119
123
  case idl.IDLBooleanType:
120
124
  case idl.IDLFunctionType: return 'KInt';
121
125
  case idl.IDLStringType: return 'KStringPtr';
@@ -122,6 +122,7 @@ export class TSTypeNameConvertor {
122
122
  case idl.IDLAnyType: return 'any';
123
123
  case idl.IDLUndefinedType: return 'undefined';
124
124
  case idl.IDLPointerType: return 'KPointer';
125
+ case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
125
126
  case idl.IDLVoidType: return 'void';
126
127
  case idl.IDLBooleanType: return 'boolean';
127
128
  case idl.IDLI32Type:
@@ -145,7 +146,7 @@ export class TSTypeNameConvertor {
145
146
  case idl.IDLDate:
146
147
  return 'Date';
147
148
  case idl.IDLBufferType:
148
- return `ArrayBuffer`;
149
+ return 'NativeBuffer';
149
150
  case idl.IDLInteropReturnBufferType:
150
151
  return `KInteropReturnBuffer`;
151
152
  }
@@ -89,10 +89,18 @@ export declare class CJLanguageWriter extends LanguageWriter {
89
89
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
90
90
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
91
91
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
92
- writeProperty(propName: string, propType: idl.IDLType, mutable?: boolean, getterLambda?: (writer: this) => void, setterLambda?: (writer: this) => void): void;
93
92
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
94
93
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
95
94
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
95
+ writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
96
+ method: Method;
97
+ op?: () => void;
98
+ }, setter?: {
99
+ method: Method;
100
+ op: () => void;
101
+ }): void;
102
+ writeGetterImplementation(method: Method, op?: (writer: this) => void): void;
103
+ writeSetterImplementation(method: Method, op: (writer: this) => void): void;
96
104
  writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
97
105
  private writeDeclaration;
98
106
  writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
@@ -348,33 +348,6 @@ export class CJLanguageWriter extends LanguageWriter {
348
348
  this.popIndent();
349
349
  this.printer.print(`}`);
350
350
  }
351
- writeProperty(propName, propType, mutable, getterLambda, setterLambda) {
352
- let shortName = propName.concat("_container");
353
- if (!getterLambda) {
354
- this.print(`private var ${shortName}: ${this.getNodeName(propType)}`);
355
- }
356
- this.print(`${mutable ? "mut " : ""}prop ${propName}: ${this.getNodeName(propType)} {`);
357
- this.pushIndent();
358
- this.print(`get() {`);
359
- this.pushIndent();
360
- if (getterLambda) {
361
- getterLambda(this);
362
- }
363
- else {
364
- this.print(`return ${shortName}`);
365
- }
366
- this.popIndent();
367
- this.print(`}`);
368
- if (mutable) {
369
- this.print(`set(x) { ${shortName} = x }`);
370
- this.pushIndent();
371
- if (setterLambda)
372
- setterLambda(this);
373
- this.popIndent();
374
- }
375
- this.popIndent();
376
- this.print(`}`);
377
- }
378
351
  writeTypeDeclaration(decl) {
379
352
  throw new Error(`writeTypeDeclaration not implemented`);
380
353
  }
@@ -389,6 +362,51 @@ export class CJLanguageWriter extends LanguageWriter {
389
362
  this.popIndent();
390
363
  this.printer.print(`}`);
391
364
  }
365
+ writeProperty(propName, propType, modifiers, getter, setter) {
366
+ let containerName = propName.concat("_container");
367
+ let truePropName = this.escapeKeyword(propName);
368
+ if (getter) {
369
+ if (!getter.op) {
370
+ this.print(`private var ${containerName}: ${this.getNodeName(propType)}`);
371
+ }
372
+ }
373
+ let isStatic = modifiers.includes(FieldModifier.STATIC);
374
+ let isMutable = !modifiers.includes(FieldModifier.READONLY);
375
+ this.print(`public ${isMutable ? "mut " : ""}${isStatic ? "static " : "open "}prop ${truePropName}: ${this.getNodeName(propType)}`);
376
+ if (getter) {
377
+ this.print('{');
378
+ this.pushIndent();
379
+ this.writeGetterImplementation(getter.method, getter.op);
380
+ if (isMutable) {
381
+ if (setter) {
382
+ this.writeSetterImplementation(setter.method, setter ? setter.op : (writer) => { this.print(`${containerName} = ${truePropName}`); });
383
+ }
384
+ else {
385
+ this.print(`set(${truePropName}) {`);
386
+ this.pushIndent();
387
+ this.print(`${containerName} = ${truePropName}`);
388
+ this.popIndent();
389
+ this.print(`}`);
390
+ }
391
+ }
392
+ this.popIndent();
393
+ this.print('}');
394
+ }
395
+ }
396
+ writeGetterImplementation(method, op) {
397
+ this.print(`get() {`);
398
+ this.pushIndent();
399
+ op ? op(this) : this.print(`return ${method.signature.argsNames.map(arg => `${arg}_container`).join(', ')}`);
400
+ this.popIndent();
401
+ this.print('}');
402
+ }
403
+ writeSetterImplementation(method, op) {
404
+ this.print(`set(${method.signature.argsNames.join(', ')}) {`);
405
+ this.pushIndent();
406
+ op(this);
407
+ this.popIndent();
408
+ this.print('}');
409
+ }
392
410
  writeCJForeign(op) {
393
411
  this.print(`foreign {`);
394
412
  this.pushIndent();
@@ -399,7 +417,7 @@ export class CJLanguageWriter extends LanguageWriter {
399
417
  writeDeclaration(name, signature, modifiers, postfix) {
400
418
  let prefix = modifiers === null || modifiers === void 0 ? void 0 : modifiers.filter(it => this.supportedModifiers.includes(it)).map(it => this.mapMethodModifier(it)).join(" ");
401
419
  prefix = prefix ? prefix + " " : "";
402
- this.print(`${prefix}func ${name}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}): ${this.getNodeName(signature.returnType)}${postfix !== null && postfix !== void 0 ? postfix : ""}`);
420
+ this.print(`${prefix}${((modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.SETTER)) || (modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.GETTER))) ? '' : 'func '}${name}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}): ${this.getNodeName(signature.returnType)}${postfix !== null && postfix !== void 0 ? postfix : ""}`);
403
421
  }
404
422
  writeNativeFunctionCall(printer, name, signature) {
405
423
  printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${signature.argName(index)}`).join(", ")}) }`);
@@ -46,7 +46,13 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
46
46
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
47
47
  writeFieldDeclaration(name: string, type: IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
48
48
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
49
- writeProperty(propName: string, propType: IDLType, mutable?: boolean): void;
49
+ writeProperty(propName: string, propType: IDLType, modifiers: FieldModifier[], getter?: {
50
+ method: Method;
51
+ op: () => void;
52
+ }, setter?: {
53
+ method: Method;
54
+ op: () => void;
55
+ }): void;
50
56
  writeTypeDeclaration(decl: IDLTypedef): void;
51
57
  writeConstant(constName: string, constType: IDLType, constVal?: string): void;
52
58
  /**
@@ -12,7 +12,7 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- import { createReferenceType, forceAsNamedNode, IDLU32Type, IDLUint8ArrayType, IDLVoidType } from '../../idl';
15
+ import { createReferenceType, forceAsNamedNode, IDLU32Type, IDLVoidType } from '../../idl';
16
16
  import { Language } from '../../Language';
17
17
  import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
18
18
  import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifier, NamedMethodSignature, StringExpression } from "../LanguageWriter";
@@ -217,7 +217,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
217
217
  this.popIndent();
218
218
  this.print(`}`);
219
219
  }
220
- writeProperty(propName, propType, mutable = true) {
220
+ writeProperty(propName, propType, modifiers, getter, setter) {
221
221
  throw new Error("writeProperty for c++ is not implemented yet.");
222
222
  }
223
223
  writeTypeDeclaration(decl) {
@@ -460,7 +460,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
460
460
  }
461
461
  makeSerializerConstructorSignatures() {
462
462
  const fromBufferCtor = new NamedMethodSignature(IDLVoidType, [
463
- IDLUint8ArrayType,
463
+ idl.IDLSerializerBuffer,
464
464
  IDLU32Type,
465
465
  createReferenceType("CallbackResourceHolder")
466
466
  ], ["data", "dataLength", "resourceHolder"], [undefined, `0`, `nullptr`], [undefined, undefined, undefined, PrintHint.AsPointer]);
@@ -56,7 +56,6 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
56
56
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
57
57
  isQuickType(type: IDLType): boolean;
58
58
  writeNativeMethodDeclaration(method: Method): void;
59
- writeProperty(propName: string, propType: IDLType): void;
60
59
  makeUnionVariantCondition(convertor: ArgConvertor, valueName: string, valueType: string, type: string, convertorIndex: number, runtimeTypeIndex: number): LanguageExpression;
61
60
  makeCastCustomObject(customName: string, isGenericType: boolean): LanguageExpression;
62
61
  makeHasOwnProperty(value: string, valueTypeName: string, property: string, propertyTypeName: string): LanguageExpression;
@@ -227,9 +227,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
227
227
  }
228
228
  this.writeMethodDeclaration(method.name, method.signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
229
229
  }
230
- writeProperty(propName, propType) {
231
- throw new Error("writeProperty for ArkTS is not implemented yet.");
232
- }
233
230
  makeUnionVariantCondition(convertor, valueName, valueType, type, convertorIndex, runtimeTypeIndex) {
234
231
  if (idl.isEnum(this.resolver.toDeclaration(convertor.nativeType()))) {
235
232
  return this.instanceOf(convertor, valueName);
@@ -40,7 +40,13 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
40
40
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
41
41
  writeNativeMethodDeclaration(method: Method): void;
42
42
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
43
- writeProperty(propName: string, propType: idl.IDLType): void;
43
+ writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
44
+ method: Method;
45
+ op: () => void;
46
+ }, setter?: {
47
+ method: Method;
48
+ op: () => void;
49
+ }): void;
44
50
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
45
51
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
46
52
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
@@ -74,7 +80,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
74
80
  makeClassInit(type: idl.IDLType, paramenters: LanguageExpression[]): LanguageExpression;
75
81
  makeMapInit(type: idl.IDLType): LanguageExpression;
76
82
  makeTupleAccess(value: string, index: number): LanguageExpression;
77
- enumFromOrdinal(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
83
+ enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
78
84
  ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
79
85
  makeValueFromOption(value: string): LanguageExpression;
80
86
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { Language } from '../../Language';
16
16
  import { IndentedPrinter } from "../../IndentedPrinter";
17
- import { AssignStatement, CheckOptionalStatement, FieldModifier, LambdaExpression, MethodModifier, } from "../LanguageWriter";
17
+ import { AssignStatement, CheckOptionalStatement, FieldModifier, LambdaExpression, Method, MethodModifier, MethodSignature, NamedMethodSignature, } from "../LanguageWriter";
18
18
  import { CLikeExpressionStatement, CLikeLanguageWriter, CLikeLoopStatement, CLikeReturnStatement } from "./CLikeLanguageWriter";
19
19
  import * as idl from '../../idl';
20
20
  import { RuntimeType } from "../common";
@@ -149,8 +149,29 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
149
149
  this.popIndent();
150
150
  this.printer.print(`}`);
151
151
  }
152
- writeProperty(propName, propType) {
153
- throw new Error("writeProperty for Java is not implemented yet.");
152
+ writeProperty(propName, propType, modifiers, getter, setter) {
153
+ let isStatic = modifiers.includes(FieldModifier.STATIC);
154
+ let isMutable = !modifiers.includes(FieldModifier.READONLY);
155
+ let containerName = propName.concat("_container");
156
+ if (getter) {
157
+ if (!getter.op) {
158
+ this.print(`private var ${this.getNodeName(propType)} ${containerName};`);
159
+ }
160
+ this.writeGetterImplementation(new Method(propName, new MethodSignature(propType, []), isStatic ? [MethodModifier.STATIC, MethodModifier.PUBLIC] : [MethodModifier.PUBLIC]), getter ? getter.op :
161
+ (writer) => {
162
+ writer.print(`return ${containerName}`);
163
+ });
164
+ if (isMutable) {
165
+ const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
166
+ this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC, MethodModifier.PUBLIC] : [MethodModifier.PUBLIC]), setter ? setter.op :
167
+ (writer) => {
168
+ writer.print(`${containerName} = ${propName};`);
169
+ });
170
+ }
171
+ }
172
+ else {
173
+ this.writeMethodDeclaration(propName, new MethodSignature(propType, []));
174
+ }
154
175
  }
155
176
  writeTypeDeclaration(decl) {
156
177
  throw new Error(`Type declarations do not exist in Java, use something else`);
@@ -255,11 +276,13 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
255
276
  makeTupleAccess(value, index) {
256
277
  return this.makeString(`${value}.value${index}`);
257
278
  }
258
- enumFromOrdinal(value, _) {
259
- throw new Error("Method not implemented.");
279
+ enumFromOrdinal(value, enumEntry) {
280
+ const enumName = idl.forceAsNamedNode(enumEntry).name;
281
+ const ordinal = value.asString();
282
+ return this.makeString(`${enumName}.values()[${ordinal}]`);
260
283
  }
261
284
  ordinalFromEnum(value, _) {
262
- return this.makeString(`${value.asString()}.value`);
285
+ return this.makeString(`${value.asString()}.ordinal()`);
263
286
  }
264
287
  makeValueFromOption(value) {
265
288
  return this.makeString(`${value}`);
@@ -53,7 +53,13 @@ export declare class TSLanguageWriter extends LanguageWriter {
53
53
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
54
54
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
55
55
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
56
- writeProperty(propName: string, propType: idl.IDLType): void;
56
+ writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
57
+ method: Method;
58
+ op: () => void;
59
+ }, setter?: {
60
+ method: Method;
61
+ op: () => void;
62
+ }): void;
57
63
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
58
64
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
59
65
  private writeDeclaration;
@@ -16,10 +16,11 @@ import * as idl from '../../idl';
16
16
  import { isOptionalType } from '../../idl';
17
17
  import { Language } from '../../Language';
18
18
  import { IndentedPrinter } from "../../IndentedPrinter";
19
- import { AssignStatement, BlockStatement, CheckOptionalStatement, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
19
+ import { AssignStatement, BlockStatement, CheckOptionalStatement, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
20
20
  import { RuntimeType } from "../common";
21
21
  import { rightmostIndexOf, throwException } from "../../util";
22
22
  import { TSKeywords } from '../../languageSpecificKeywords';
23
+ import { isStringEnumType } from '../../peer-generation/isEnumType';
23
24
  ////////////////////////////////////////////////////////////////
24
25
  // EXPRESSIONS //
25
26
  ////////////////////////////////////////////////////////////////
@@ -223,7 +224,7 @@ export class TSLanguageWriter extends LanguageWriter {
223
224
  this.writeDeclaration(name, signature, true, false, modifiers);
224
225
  }
225
226
  writeConstructorImplementation(className, signature, op, superCall, modifiers) {
226
- this.writeDeclaration(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') : ''} constructor`, signature, false, true);
227
+ this.writeDeclaration(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}constructor`, signature, false, true);
227
228
  this.pushIndent();
228
229
  if (superCall) {
229
230
  this.print(`super(${superCall.signature.args.map((_, i) => superCall === null || superCall === void 0 ? void 0 : superCall.signature.argName(i)).join(", ")})`);
@@ -239,8 +240,29 @@ export class TSLanguageWriter extends LanguageWriter {
239
240
  this.popIndent();
240
241
  this.printer.print(`}`);
241
242
  }
242
- writeProperty(propName, propType) {
243
- throw new Error("writeProperty for TS is not implemented yet.");
243
+ writeProperty(propName, propType, modifiers, getter, setter) {
244
+ let isStatic = modifiers.includes(FieldModifier.STATIC);
245
+ let isMutable = !modifiers.includes(FieldModifier.READONLY);
246
+ let containerName = propName.concat("_container");
247
+ if (getter) {
248
+ if (!getter.op) {
249
+ this.print(`private var ${this.getNodeName(propType)} ${containerName}`);
250
+ }
251
+ this.writeGetterImplementation(new Method(propName, new MethodSignature(propType, []), isStatic ? [MethodModifier.STATIC] : []), getter ? getter.op :
252
+ (writer) => {
253
+ writer.print(`return ${containerName}`);
254
+ });
255
+ if (isMutable) {
256
+ const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
257
+ this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC] : []), setter ? setter.op :
258
+ (writer) => {
259
+ writer.print(`${containerName} = ${propName}`);
260
+ });
261
+ }
262
+ }
263
+ else {
264
+ this.writeFieldDeclaration(propName, propType, modifiers, idl.isOptionalType(propType));
265
+ }
244
266
  }
245
267
  writeTypeDeclaration(decl) {
246
268
  var _a;
@@ -378,7 +400,11 @@ export class TSLanguageWriter extends LanguageWriter {
378
400
  return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY, FieldModifier.STATIC];
379
401
  }
380
402
  enumFromOrdinal(value, enumEntry) {
381
- return this.makeString(`Object.values(${idl.forceAsNamedNode(enumEntry).name})[${value.asString()}]`);
403
+ const enumName = idl.forceAsNamedNode(enumEntry).name;
404
+ const ordinal = value.asString();
405
+ return isStringEnumType(enumEntry, this.resolver)
406
+ ? this.makeString(`Object.values(${enumName})[${ordinal}]`)
407
+ : this.makeString(`${ordinal}`);
382
408
  }
383
409
  ordinalFromEnum(value, enumEntry) {
384
410
  const enumName = idl.forceAsNamedNode(enumEntry).name;
@@ -9,7 +9,6 @@ export interface LibraryFileInterface {
9
9
  export interface LibraryInterface extends ReferenceResolver {
10
10
  language: Language;
11
11
  get files(): LibraryFileInterface[];
12
- get libraryPackages(): string[] | undefined;
13
12
  typeConvertor(param: string, type: idl.IDLType, isOptionalParam?: boolean): ArgConvertor;
14
13
  declarationConvertor(param: string, type: idl.IDLReferenceType, declaration: idl.IDLEntry | undefined): ArgConvertor;
15
14
  getInteropName(node: idl.IDLNode): string;