@idlizer/core 2.1.0 → 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 (82) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +15 -2
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +93 -33
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +34 -14
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +29 -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 +25 -15
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +7 -18
  10. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +4 -2
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +13 -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 +49 -29
  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 +21 -10
  19. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +56 -65
  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 +16 -10
  23. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +18 -27
  24. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +14 -9
  25. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +18 -21
  26. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +11 -7
  27. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +42 -18
  28. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +14 -6
  29. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +49 -44
  30. package/build/lib/src/LibraryInterface.d.ts +1 -5
  31. package/build/lib/src/config.d.ts +1029 -66
  32. package/build/lib/src/config.js +15 -2
  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 +32 -20
  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 +28 -18
  42. package/build/lib/src/idl.js +376 -111
  43. package/build/lib/src/idlize.d.ts +3 -1
  44. package/build/lib/src/idlize.js +85 -28
  45. package/build/lib/src/index.d.ts +6 -3
  46. package/build/lib/src/index.js +5 -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 -9
  59. package/build/lib/src/peer-generation/PeerLibrary.js +136 -71
  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/isEnumType.d.ts +5 -0
  67. package/build/lib/src/peer-generation/isEnumType.js +29 -0
  68. package/build/lib/src/peer-generation/isMaterialized.js +25 -8
  69. package/build/lib/src/peer-generation/modules.d.ts +10 -0
  70. package/build/lib/src/peer-generation/modules.js +38 -0
  71. package/build/lib/src/peer-generation/unions.d.ts +3 -2
  72. package/build/lib/src/peer-generation/unions.js +6 -2
  73. package/build/lib/src/resolveNamedNode.d.ts +3 -0
  74. package/build/lib/src/resolveNamedNode.js +105 -0
  75. package/build/lib/src/util.d.ts +7 -0
  76. package/build/lib/src/util.js +39 -0
  77. package/build/lib/src/visitor.d.ts +0 -1
  78. package/build/lib/src/visitor.js +1 -7
  79. package/package.json +2 -2
  80. package/webidl2.js/dist/webidl2.js +35 -7
  81. package/build/lib/src/configMerge.d.ts +0 -2
  82. package/build/lib/src/configMerge.js +0 -42
@@ -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;
@@ -51,7 +57,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
51
57
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
52
58
  makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
53
59
  makeMapSize(map: string): LanguageExpression;
54
- makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
60
+ makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
55
61
  makeStatement(expr: LanguageExpression): LanguageStatement;
56
62
  makeUnionSelector(value: string, valueType: string): LanguageStatement;
57
63
  makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, _type: string, convertorIndex: number): LanguageExpression;
@@ -63,7 +69,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
63
69
  getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
64
70
  makeUndefined(): LanguageExpression;
65
71
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
66
- makeRuntimeTypeGetterCall(value: string): LanguageExpression;
72
+ protected makeRuntimeTypeGetterCall(value: string): LanguageExpression;
67
73
  makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
68
74
  getTagType(): idl.IDLType;
69
75
  getRuntimeType(): idl.IDLType;
@@ -74,12 +80,10 @@ 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;
78
- ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
83
+ enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
79
84
  makeValueFromOption(value: string): LanguageExpression;
80
85
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
81
- makeEnumCast(_enumEntry: idl.IDLEnum, enumName: string): string;
86
+ i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
82
87
  castToBoolean(value: string): string;
83
- makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
84
88
  }
85
89
  //# sourceMappingURL=JavaLanguageWriter.d.ts.map
@@ -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";
@@ -100,6 +100,13 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
100
100
  this.typeConvertor = typeConvertor;
101
101
  }
102
102
  getNodeName(type) {
103
+ // another stub. Bad one.
104
+ // I hope that I will rewrite LWs soon
105
+ if (idl.isType(type) && idl.isReferenceType(type)) {
106
+ if (type.name.startsWith('%TEXT%:')) {
107
+ return type.name.substring(7);
108
+ }
109
+ }
103
110
  return this.typeConvertor.convert(type);
104
111
  }
105
112
  fork(options) {
@@ -149,8 +156,29 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
149
156
  this.popIndent();
150
157
  this.printer.print(`}`);
151
158
  }
152
- writeProperty(propName, propType) {
153
- throw new Error("writeProperty for Java is not implemented yet.");
159
+ writeProperty(propName, propType, modifiers, getter, setter) {
160
+ let isStatic = modifiers.includes(FieldModifier.STATIC);
161
+ let isMutable = !modifiers.includes(FieldModifier.READONLY);
162
+ let containerName = propName.concat("_container");
163
+ if (getter) {
164
+ if (!getter.op) {
165
+ this.print(`private var ${this.getNodeName(propType)} ${containerName};`);
166
+ }
167
+ this.writeGetterImplementation(new Method(propName, new MethodSignature(propType, []), isStatic ? [MethodModifier.STATIC, MethodModifier.PUBLIC] : [MethodModifier.PUBLIC]), getter ? getter.op :
168
+ (writer) => {
169
+ writer.print(`return ${containerName}`);
170
+ });
171
+ if (isMutable) {
172
+ const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
173
+ this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC, MethodModifier.PUBLIC] : [MethodModifier.PUBLIC]), setter ? setter.op :
174
+ (writer) => {
175
+ writer.print(`${containerName} = ${propName};`);
176
+ });
177
+ }
178
+ }
179
+ else {
180
+ this.writeMethodDeclaration(propName, new MethodSignature(propType, []));
181
+ }
154
182
  }
155
183
  writeTypeDeclaration(decl) {
156
184
  throw new Error(`Type declarations do not exist in Java, use something else`);
@@ -182,9 +210,9 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
182
210
  makeMapSize(map) {
183
211
  return this.makeString(`${map}.size()`);
184
212
  }
185
- makeCast(value, type, options) {
213
+ makeCast(value, node, options) {
186
214
  var _a;
187
- return new JavaCastExpression(value, this.getNodeName(type), (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
215
+ return new JavaCastExpression(value, this.getNodeName(node), (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
188
216
  }
189
217
  makeStatement(expr) {
190
218
  return new CLikeExpressionStatement(expr);
@@ -255,11 +283,10 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
255
283
  makeTupleAccess(value, index) {
256
284
  return this.makeString(`${value}.value${index}`);
257
285
  }
258
- enumFromOrdinal(value, _) {
259
- throw new Error("Method not implemented.");
260
- }
261
- ordinalFromEnum(value, _) {
262
- return this.makeString(`${value.asString()}.value`);
286
+ enumFromI32(value, enumEntry) {
287
+ const enumName = idl.forceAsNamedNode(enumEntry).name;
288
+ const ordinal = value.asString();
289
+ return this.makeString(`${enumName}.values()[${ordinal}]`);
263
290
  }
264
291
  makeValueFromOption(value) {
265
292
  return this.makeString(`${value}`);
@@ -267,15 +294,12 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
267
294
  runtimeType(param, valueType, value) {
268
295
  this.writeStatement(this.makeAssign(valueType, undefined, this.makeRuntimeTypeGetterCall(value), false));
269
296
  }
270
- makeEnumCast(_enumEntry, enumName) {
271
- return `${enumName}.value`;
297
+ i32FromEnum(value, enumEntry) {
298
+ const i32Value = idl.isStringEnum(enumEntry)
299
+ ? `${value.asString()}.ordinal`
300
+ : `${value.asString()}.value`;
301
+ return this.makeString(i32Value);
272
302
  }
273
303
  castToBoolean(value) { return value; }
274
- makeLengthSerializer(serializer, value) {
275
- return this.makeBlock([
276
- this.makeStatement(this.makeMethodCall(serializer, "writeInt8", [this.makeRuntimeType(RuntimeType.STRING)])),
277
- this.makeStatement(this.makeMethodCall(serializer, "writeString", [this.makeString(`${value}.value`)]))
278
- ], false);
279
- }
280
304
  }
281
305
  //# sourceMappingURL=JavaLanguageWriter.js.map
@@ -47,13 +47,22 @@ export declare class TSLanguageWriter extends LanguageWriter {
47
47
  alias?: string | undefined;
48
48
  stringId: string | undefined;
49
49
  numberId: number;
50
- }[]): void;
50
+ }[], options: {
51
+ isDeclare?: boolean;
52
+ isExport: boolean;
53
+ }): void;
51
54
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
52
55
  writeNativeMethodDeclaration(method: Method): void;
53
56
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
54
57
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
55
58
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
56
- writeProperty(propName: string, propType: idl.IDLType): void;
59
+ writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
60
+ method: Method;
61
+ op: () => void;
62
+ }, setter?: {
63
+ method: Method;
64
+ op: () => void;
65
+ }): void;
57
66
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
58
67
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
59
68
  private writeDeclaration;
@@ -67,7 +76,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
67
76
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
68
77
  makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
69
78
  writePrintLog(message: string): void;
70
- makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
79
+ makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
71
80
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
72
81
  getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
73
82
  makeUndefined(): LanguageExpression;
@@ -83,9 +92,8 @@ export declare class TSLanguageWriter extends LanguageWriter {
83
92
  makeTupleAssign(receiver: string, fields: string[]): LanguageStatement;
84
93
  get supportedModifiers(): MethodModifier[];
85
94
  get supportedFieldModifiers(): FieldModifier[];
86
- enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
87
- ordinalFromEnum(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
88
- makeEnumCast(enumEntry: idl.IDLEnum, param: string): string;
95
+ enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
96
+ i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
89
97
  castToBoolean(value: string): string;
90
98
  makeCallIsObject(value: string): LanguageExpression;
91
99
  escapeKeyword(keyword: string): string;
@@ -16,7 +16,7 @@ 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';
@@ -135,14 +135,14 @@ export class TSLanguageWriter extends LanguageWriter {
135
135
  return new TSLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.language);
136
136
  }
137
137
  getNodeName(type) {
138
- // just stub.
139
- // language writers and name convertors are subject to rework for namespaces
140
- const row = this.typeConvertor.convert(type);
141
- const nsPrefix = this.namespaceStack.join('.') + '.';
142
- if (row.startsWith(nsPrefix)) {
143
- return row.substring(nsPrefix.length);
138
+ // another stub. Bad one.
139
+ // I hope that I will rewrite LWs soon
140
+ if (idl.isType(type) && idl.isReferenceType(type)) {
141
+ if (type.name.startsWith('%TEXT%:')) {
142
+ return type.name.substring(7);
143
+ }
144
144
  }
145
- return row;
145
+ return this.typeConvertor.convert(type);
146
146
  }
147
147
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
148
148
  let extendsClause = superClass ? ` extends ${superClass}` : '';
@@ -184,8 +184,8 @@ export class TSLanguageWriter extends LanguageWriter {
184
184
  const returnType = this.getNodeName(signature.returnType);
185
185
  return `export function ${name}(${args.join(", ")}): ${returnType}`;
186
186
  }
187
- writeEnum(name, members) {
188
- this.printer.print(`export enum ${name} {`);
187
+ writeEnum(name, members, options) {
188
+ this.printer.print(`${options.isExport ? "export " : ""}${options.isDeclare ? "declare " : ""}enum ${name} {`);
189
189
  this.printer.pushIndent();
190
190
  for (const [index, member] of members.entries()) {
191
191
  let value;
@@ -223,7 +223,7 @@ export class TSLanguageWriter extends LanguageWriter {
223
223
  this.writeDeclaration(name, signature, true, false, modifiers);
224
224
  }
225
225
  writeConstructorImplementation(className, signature, op, superCall, modifiers) {
226
- this.writeDeclaration(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') : ''} constructor`, signature, false, true);
226
+ this.writeDeclaration(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}constructor`, signature, false, true);
227
227
  this.pushIndent();
228
228
  if (superCall) {
229
229
  this.print(`super(${superCall.signature.args.map((_, i) => superCall === null || superCall === void 0 ? void 0 : superCall.signature.argName(i)).join(", ")})`);
@@ -239,8 +239,29 @@ export class TSLanguageWriter extends LanguageWriter {
239
239
  this.popIndent();
240
240
  this.printer.print(`}`);
241
241
  }
242
- writeProperty(propName, propType) {
243
- throw new Error("writeProperty for TS is not implemented yet.");
242
+ writeProperty(propName, propType, modifiers, getter, setter) {
243
+ let isStatic = modifiers.includes(FieldModifier.STATIC);
244
+ let isMutable = !modifiers.includes(FieldModifier.READONLY);
245
+ let containerName = propName.concat("_container");
246
+ if (getter) {
247
+ if (!getter.op) {
248
+ this.print(`private var ${this.getNodeName(propType)} ${containerName}`);
249
+ }
250
+ this.writeGetterImplementation(new Method(propName, new MethodSignature(propType, []), isStatic ? [MethodModifier.STATIC] : []), getter ? getter.op :
251
+ (writer) => {
252
+ writer.print(`return ${containerName}`);
253
+ });
254
+ if (isMutable) {
255
+ const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
256
+ this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC] : []), setter ? setter.op :
257
+ (writer) => {
258
+ writer.print(`${containerName} = ${propName}`);
259
+ });
260
+ }
261
+ }
262
+ else {
263
+ this.writeFieldDeclaration(propName, propType, modifiers, idl.isOptionalType(propType));
264
+ }
244
265
  }
245
266
  writeTypeDeclaration(decl) {
246
267
  var _a;
@@ -252,7 +273,6 @@ export class TSLanguageWriter extends LanguageWriter {
252
273
  this.print(`export const ${constName}: ${this.getNodeName(constType)}${constVal ? ' = ' + constVal : ''}`);
253
274
  }
254
275
  writeDeclaration(name, signature, needReturn, needBracket, modifiers, generics) {
255
- var _a;
256
276
  let prefix = !modifiers ? undefined : this.supportedModifiers
257
277
  .filter(it => modifiers.includes(it))
258
278
  .map(it => this.mapMethodModifier(it)).join(" ");
@@ -268,19 +288,8 @@ export class TSLanguageWriter extends LanguageWriter {
268
288
  }
269
289
  prefix = prefix ? prefix.trim() + " " : "";
270
290
  const typeParams = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : "";
271
- // FIXME:
272
- const isSetter = modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.SETTER);
273
- const canBeOptional = [];
274
- for (let i = signature.args.length - 1; i >= 0; --i) {
275
- const prevCanBeOptional = (_a = canBeOptional.at(-1)) !== null && _a !== void 0 ? _a : true;
276
- const curr = signature.args[i];
277
- const result = prevCanBeOptional && (idl.isOptionalType(curr) || signature.argDefault(i) !== undefined);
278
- canBeOptional.push(result);
279
- }
280
- canBeOptional.reverse();
281
- const isOptional = signature.args.map((it, i) => idl.isOptionalType(it) && canBeOptional[i] && !isSetter);
282
- const normalizedArgs = signature.args.map((it, i) => idl.isOptionalType(it) && isOptional[i] ? idl.maybeUnwrapOptionalType(it) : it);
283
- this.printer.print(`${prefix}${name}${typeParams}(${normalizedArgs.map((it, index) => `${this.escapeKeyword(signature.argName(index))}${isOptional[index] ? "?" : ""}: ${this.getNodeName(it)}${signature.argDefault(index) ? ' = ' + signature.argDefault(index) : ""}`).join(", ")})${needReturn ? ": " + this.getNodeName(signature.returnType) : ""}${needBracket ? " {" : ""}`);
291
+ const normalizedArgs = signature.args.map((it, i) => idl.isOptionalType(it) && signature.isArgOptional(i) ? idl.maybeUnwrapOptionalType(it) : it);
292
+ this.printer.print(`${prefix}${name}${typeParams}(${normalizedArgs.map((it, index) => `${this.escapeKeyword(signature.argName(index))}${signature.isArgOptional(index) ? "?" : ``}: ${this.getNodeName(it)}${signature.argDefault(index) ? ' = ' + signature.argDefault(index) : ""}`).join(", ")})${needReturn ? ": " + this.getNodeName(signature.returnType) : ""}${needBracket ? " {" : ""}`);
284
293
  }
285
294
  makeNull() {
286
295
  return new StringExpression("undefined");
@@ -312,9 +321,9 @@ export class TSLanguageWriter extends LanguageWriter {
312
321
  writePrintLog(message) {
313
322
  this.print(`console.log("${message}")`);
314
323
  }
315
- makeCast(value, type, options) {
324
+ makeCast(value, node, options) {
316
325
  var _a;
317
- return new TSCastExpression(value, this.getNodeName(/* FIXME: */ idl.maybeUnwrapOptionalType(type)), (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
326
+ return new TSCastExpression(value, this.getNodeName(node), (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
318
327
  }
319
328
  typeInstanceOf(type, value, members) {
320
329
  if (idl.isInterface(type)) {
@@ -377,23 +386,19 @@ export class TSLanguageWriter extends LanguageWriter {
377
386
  get supportedFieldModifiers() {
378
387
  return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY, FieldModifier.STATIC];
379
388
  }
380
- enumFromOrdinal(value, enumEntry) {
381
- return this.makeString(`Object.values(${idl.forceAsNamedNode(enumEntry).name})[${value.asString()}]`);
389
+ enumFromI32(value, enumEntry) {
390
+ const enumName = enumEntry.name;
391
+ const ordinal = value.asString();
392
+ return idl.isStringEnum(enumEntry)
393
+ ? this.makeString(`Object.values(${enumName})[${ordinal}]`)
394
+ : this.makeString(ordinal);
382
395
  }
383
- ordinalFromEnum(value, enumEntry) {
384
- const enumName = idl.forceAsNamedNode(enumEntry).name;
385
- const decl = idl.isReferenceType(enumEntry) ? this.resolver.resolveTypeReference(enumEntry) : undefined;
386
- if (decl && idl.isEnum(decl) && idl.isStringEnum(decl)) {
396
+ i32FromEnum(value, enumEntry) {
397
+ const enumName = this.getNodeName(enumEntry);
398
+ if (idl.isEnum(enumEntry) && idl.isStringEnum(enumEntry)) {
387
399
  return this.makeString(`Object.values(${enumName}).indexOf(${value.asString()})`);
388
400
  }
389
- return value;
390
- }
391
- makeEnumCast(enumEntry, param) {
392
- // Take the ordinal value if Enum is a string, and valueOf when it is an integer
393
- // Enum.valueOf() - compatible with ArkTS/TS
394
- return idl.isStringEnum(enumEntry)
395
- ? this.ordinalFromEnum(this.makeString(param), idl.createReferenceType(enumEntry)).asString()
396
- : `${param}.valueOf()`;
401
+ return this.makeString(`${value.asString()}.valueOf()`);
397
402
  }
398
403
  castToBoolean(value) { return `+${value}`; }
399
404
  makeCallIsObject(value) {
@@ -411,7 +416,7 @@ export class TSLanguageWriter extends LanguageWriter {
411
416
  throwException(`The type reference ${decl === null || decl === void 0 ? void 0 : decl.name} must be Enum`);
412
417
  }
413
418
  const ordinal = idl.isStringEnum(decl)
414
- ? this.ordinalFromEnum(this.makeCast(this.makeString(this.getObjectAccessor(convertor, value)), convertor.idlType), idl.createReferenceType(this.getNodeName(convertor.nativeType())))
419
+ ? this.i32FromEnum(this.makeCast(this.makeString(this.getObjectAccessor(convertor, value)), convertor.idlType), decl)
415
420
  : this.makeUnionVariantCast(this.getObjectAccessor(convertor, value), this.getNodeName(idl.IDLI32Type), convertor, index);
416
421
  const { low, high } = idl.extremumOfOrdinals(decl);
417
422
  return this.discriminatorFromExpressions(value, convertor.runtimeTypes[0], [
@@ -3,13 +3,9 @@ import { Language } from "./Language";
3
3
  import { IdlNameConvertor } from "./LanguageWriters";
4
4
  import { ArgConvertor } from "./LanguageWriters/ArgConvertors";
5
5
  import { ReferenceResolver } from "./peer-generation/ReferenceResolver";
6
- export interface LibraryFileInterface {
7
- get entries(): idl.IDLEntry[];
8
- }
9
6
  export interface LibraryInterface extends ReferenceResolver {
10
7
  language: Language;
11
- get files(): LibraryFileInterface[];
12
- get libraryPackages(): string[] | undefined;
8
+ get files(): idl.IDLFile[];
13
9
  typeConvertor(param: string, type: idl.IDLType, isOptionalParam?: boolean): ArgConvertor;
14
10
  declarationConvertor(param: string, type: idl.IDLReferenceType, declaration: idl.IDLEntry | undefined): ArgConvertor;
15
11
  getInteropName(node: idl.IDLNode): string;