@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
@@ -17,8 +17,11 @@ export declare class EtsAssignStatement implements LanguageStatement {
17
17
  }
18
18
  export declare class ArkTSEnumEntityStatement implements LanguageStatement {
19
19
  private readonly enumEntity;
20
- private readonly isExport;
21
- constructor(enumEntity: IDLEnum, isExport: boolean);
20
+ private readonly options;
21
+ constructor(enumEntity: IDLEnum, options: {
22
+ isExport: boolean;
23
+ isDeclare: boolean;
24
+ });
22
25
  write(writer: LanguageWriter): void;
23
26
  }
24
27
  export declare class ETSLambdaExpression extends LambdaExpression {
@@ -28,8 +31,8 @@ export declare class ETSLambdaExpression extends LambdaExpression {
28
31
  asString(): string;
29
32
  }
30
33
  export declare function generateTypeCheckerName(typeName: string): string;
31
- export declare function generateEnumToOrdinalName(typeName: string): string;
32
- export declare function generateEnumFromOrdinalName(typeName: string): string;
34
+ export declare function generateEnumToNumericName(typeName: string): string;
35
+ export declare function generateEnumFromNumericName(typeName: string): string;
33
36
  export declare function makeArrayTypeCheckCall(valueAccessor: string, typeName: string, writer: LanguageWriter): LanguageExpression;
34
37
  export declare class ETSLanguageWriter extends TSLanguageWriter {
35
38
  private arrayConvertor;
@@ -44,14 +47,17 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
44
47
  get supportedModifiers(): MethodModifier[];
45
48
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
46
49
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index?: number): LanguageExpression;
47
- enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
48
- ordinalFromEnum(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
50
+ i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
51
+ enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
49
52
  makeDiscriminatorFromFields(convertor: {
50
53
  targetType: (writer: LanguageWriter) => string;
51
54
  }, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
52
55
  makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
53
56
  makeIsTypeCall(value: string, decl: idl.IDLInterface): LanguageExpression;
54
- makeEnumEntity(enumEntity: IDLEnum, isExport: boolean): LanguageStatement;
57
+ makeEnumEntity(enumEntity: IDLEnum, options: {
58
+ isExport: boolean;
59
+ isDeclare?: boolean;
60
+ }): LanguageStatement;
55
61
  getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
56
62
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
57
63
  isQuickType(type: IDLType): boolean;
@@ -66,7 +72,10 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
66
72
  instanceOf(convertor: ArgConvertor, value: string, duplicateMembers?: Set<string>): LanguageExpression;
67
73
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
68
74
  makeTypeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
69
- makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
75
+ makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
76
+ static _isUseTypeChecker: boolean;
77
+ static get isUseTypeChecker(): boolean;
78
+ static useTypeChecker<T>(isUseTypeChecker: boolean, op: () => T): T;
70
79
  }
71
80
  export declare function makeEnumTypeCheckerCall(valueAccessor: string, enumName: string, writer: LanguageWriter): LanguageExpression;
72
81
  //# sourceMappingURL=ETSLanguageWriter.d.ts.map
@@ -63,9 +63,9 @@ class ArkTSMapForEachStatement {
63
63
  }
64
64
  }
65
65
  export class ArkTSEnumEntityStatement {
66
- constructor(enumEntity, isExport) {
66
+ constructor(enumEntity, options) {
67
67
  this.enumEntity = enumEntity;
68
- this.isExport = isExport;
68
+ this.options = options;
69
69
  }
70
70
  write(writer) {
71
71
  let enumName = convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), this.enumEntity);
@@ -99,10 +99,7 @@ export class ArkTSEnumEntityStatement {
99
99
  }
100
100
  return res;
101
101
  });
102
- const nss = idl.getNamespacesPathFor(this.enumEntity);
103
- nss.forEach(it => writer.pushNamespace(it.name));
104
- writer.writeEnum(enumName, members);
105
- nss.forEach(() => writer.popNamespace());
102
+ writer.writeEnum(enumName, members, { isExport: this.options.isExport, isDeclare: this.options.isDeclare });
106
103
  }
107
104
  }
108
105
  export class ETSLambdaExpression extends LambdaExpression {
@@ -133,17 +130,18 @@ export class ETSLambdaExpression extends LambdaExpression {
133
130
  // UTILS //
134
131
  ////////////////////////////////////////////////////////////////
135
132
  export function generateTypeCheckerName(typeName) {
136
- typeName = typeName.replaceAll('[]', 'BracketsArray')
137
- .replaceAll('.', ''); // Todo: hack for namespaces
133
+ typeName = typeName
134
+ .replaceAll('[]', 'BracketsArray')
135
+ .split('.').at(-1); // Todo: hack for namespaces. Remove when ready to use FQNames
138
136
  return `is${typeName.replaceAll('[]', 'Brackets')}`;
139
137
  }
140
- export function generateEnumToOrdinalName(typeName) {
141
- typeName = typeName.split(".").join("_");
142
- return `${typeName}_ToOrdinal`;
138
+ export function generateEnumToNumericName(typeName) {
139
+ typeName = typeName.split('.').at(-1); // Todo: hack for namespaces. Remove when ready to use FQNames
140
+ return `${typeName}_ToNumeric`;
143
141
  }
144
- export function generateEnumFromOrdinalName(typeName) {
145
- typeName = typeName.split(".").join("_");
146
- return `${typeName}_FromOrdinal`;
142
+ export function generateEnumFromNumericName(typeName) {
143
+ typeName = typeName.split('.').at(-1); // Todo: hack for namespaces. Remove when ready to use FQNames
144
+ return `${typeName}_FromNumeric`;
147
145
  }
148
146
  export function makeArrayTypeCheckCall(valueAccessor, typeName, writer) {
149
147
  return writer.makeMethodCall("TypeChecker", generateTypeCheckerName(typeName), [writer.makeString(valueAccessor)
@@ -182,13 +180,23 @@ export class ETSLanguageWriter extends TSLanguageWriter {
182
180
  makeUnionVariantCast(value, type, convertor, index) {
183
181
  return this.makeString(`${value} as ${type}`);
184
182
  }
185
- enumFromOrdinal(value, enumEntry) {
186
- const enumName = this.getNodeName(enumEntry);
187
- return this.makeMethodCall('TypeChecker', generateEnumFromOrdinalName(enumName), [this.makeString(value.asString())]);
183
+ i32FromEnum(value, enumEntry) {
184
+ if (ETSLanguageWriter.isUseTypeChecker) {
185
+ const enumName = this.getNodeName(enumEntry);
186
+ return this.makeMethodCall('TypeChecker', generateEnumToNumericName(enumName), [value]);
187
+ }
188
+ return idl.isStringEnum(enumEntry)
189
+ ? this.makeMethodCall(value.asString(), 'getOrdinal', [])
190
+ : this.makeMethodCall(value.asString(), 'valueOf', []);
188
191
  }
189
- ordinalFromEnum(value, enumEntry) {
192
+ enumFromI32(value, enumEntry) {
190
193
  const enumName = this.getNodeName(enumEntry);
191
- return this.makeMethodCall('TypeChecker', generateEnumToOrdinalName(enumName), [this.makeString(value.asString())]);
194
+ if (ETSLanguageWriter.isUseTypeChecker) {
195
+ return this.makeMethodCall('TypeChecker', generateEnumFromNumericName(enumName), [value]);
196
+ }
197
+ return idl.isStringEnum(enumEntry)
198
+ ? this.makeString(`${enumName}.values()[${value.asString()}]`)
199
+ : this.makeMethodCall(enumName, 'fromValue', [value]);
192
200
  }
193
201
  makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
194
202
  if (convertor instanceof AggregateConvertor
@@ -208,8 +216,11 @@ export class ETSLanguageWriter extends TSLanguageWriter {
208
216
  makeIsTypeCall(value, decl) {
209
217
  return makeInterfaceTypeCheckerCall(value, decl.name, decl.properties.map(it => it.name), new Set(), this);
210
218
  }
211
- makeEnumEntity(enumEntity, isExport) {
212
- return new ArkTSEnumEntityStatement(enumEntity, isExport);
219
+ makeEnumEntity(enumEntity, options) {
220
+ return new ArkTSEnumEntityStatement(enumEntity, {
221
+ isExport: options === null || options === void 0 ? void 0 : options.isExport,
222
+ isDeclare: !!(options === null || options === void 0 ? void 0 : options.isDeclare),
223
+ });
213
224
  }
214
225
  getObjectAccessor(convertor, value, args) {
215
226
  return super.getObjectAccessor(convertor, value, args);
@@ -269,6 +280,11 @@ export class ETSLanguageWriter extends TSLanguageWriter {
269
280
  // ])
270
281
  }
271
282
  castToInt(value, bitness) {
283
+ // This fix is used to avoid unnecessary writeInt8(value as int32) call, which is generated if value is already an int32
284
+ // The explicit cast forces ui2abc to call valueOf on an int, which fails the compilation
285
+ // TODO Fix this cast
286
+ if (bitness === 8)
287
+ return value;
272
288
  return `${value} as int32`; // FIXME: is there int8 in ARKTS?
273
289
  }
274
290
  castToBoolean(value) { return `${value} ? 1 : 0`; }
@@ -304,11 +320,20 @@ export class ETSLanguageWriter extends TSLanguageWriter {
304
320
  makeTypeCast(value, type, options) {
305
321
  return this.makeString(`TypeChecker.typeCast<${this.getNodeName(type)}>(value)`);
306
322
  }
307
- makeCast(value, type, options) {
323
+ makeCast(value, node, options) {
308
324
  var _a;
309
- return new TSCastExpression(value, `${this.getNodeName(type)}`, (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
325
+ return new TSCastExpression(value, `${this.getNodeName(node)}`, (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
326
+ }
327
+ static get isUseTypeChecker() { return this._isUseTypeChecker; }
328
+ static useTypeChecker(isUseTypeChecker, op) {
329
+ const prevIsUse = this.isReferenceRelativeToNamespaces;
330
+ this._isUseTypeChecker = isUseTypeChecker;
331
+ const result = op();
332
+ this._isUseTypeChecker = prevIsUse;
333
+ return result;
310
334
  }
311
335
  }
336
+ ETSLanguageWriter._isUseTypeChecker = true;
312
337
  function makeInterfaceTypeCheckerCall(valueAccessor, interfaceName, allFields, duplicates, writer) {
313
338
  return writer.makeMethodCall("TypeChecker", generateTypeCheckerName(interfaceName), [writer.makeString(valueAccessor),
314
339
  ...allFields.map(it => {
@@ -57,7 +57,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
57
57
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
58
58
  makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
59
59
  makeMapSize(map: string): LanguageExpression;
60
- makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
60
+ makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
61
61
  makeStatement(expr: LanguageExpression): LanguageStatement;
62
62
  makeUnionSelector(value: string, valueType: string): LanguageStatement;
63
63
  makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, _type: string, convertorIndex: number): LanguageExpression;
@@ -69,7 +69,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
69
69
  getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
70
70
  makeUndefined(): LanguageExpression;
71
71
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
72
- makeRuntimeTypeGetterCall(value: string): LanguageExpression;
72
+ protected makeRuntimeTypeGetterCall(value: string): LanguageExpression;
73
73
  makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
74
74
  getTagType(): idl.IDLType;
75
75
  getRuntimeType(): idl.IDLType;
@@ -80,12 +80,10 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
80
80
  makeClassInit(type: idl.IDLType, paramenters: LanguageExpression[]): LanguageExpression;
81
81
  makeMapInit(type: idl.IDLType): LanguageExpression;
82
82
  makeTupleAccess(value: string, index: number): LanguageExpression;
83
- enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
84
- ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
83
+ enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
85
84
  makeValueFromOption(value: string): LanguageExpression;
86
85
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
87
- makeEnumCast(_enumEntry: idl.IDLEnum, enumName: string): string;
86
+ i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
88
87
  castToBoolean(value: string): string;
89
- makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
90
88
  }
91
89
  //# sourceMappingURL=JavaLanguageWriter.d.ts.map
@@ -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) {
@@ -203,9 +210,9 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
203
210
  makeMapSize(map) {
204
211
  return this.makeString(`${map}.size()`);
205
212
  }
206
- makeCast(value, type, options) {
213
+ makeCast(value, node, options) {
207
214
  var _a;
208
- 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);
209
216
  }
210
217
  makeStatement(expr) {
211
218
  return new CLikeExpressionStatement(expr);
@@ -276,29 +283,23 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
276
283
  makeTupleAccess(value, index) {
277
284
  return this.makeString(`${value}.value${index}`);
278
285
  }
279
- enumFromOrdinal(value, enumEntry) {
286
+ enumFromI32(value, enumEntry) {
280
287
  const enumName = idl.forceAsNamedNode(enumEntry).name;
281
288
  const ordinal = value.asString();
282
289
  return this.makeString(`${enumName}.values()[${ordinal}]`);
283
290
  }
284
- ordinalFromEnum(value, _) {
285
- return this.makeString(`${value.asString()}.ordinal()`);
286
- }
287
291
  makeValueFromOption(value) {
288
292
  return this.makeString(`${value}`);
289
293
  }
290
294
  runtimeType(param, valueType, value) {
291
295
  this.writeStatement(this.makeAssign(valueType, undefined, this.makeRuntimeTypeGetterCall(value), false));
292
296
  }
293
- makeEnumCast(_enumEntry, enumName) {
294
- 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);
295
302
  }
296
303
  castToBoolean(value) { return value; }
297
- makeLengthSerializer(serializer, value) {
298
- return this.makeBlock([
299
- this.makeStatement(this.makeMethodCall(serializer, "writeInt8", [this.makeRuntimeType(RuntimeType.STRING)])),
300
- this.makeStatement(this.makeMethodCall(serializer, "writeString", [this.makeString(`${value}.value`)]))
301
- ], false);
302
- }
303
304
  }
304
305
  //# sourceMappingURL=JavaLanguageWriter.js.map
@@ -32,22 +32,28 @@ export declare class TSLanguageWriter extends LanguageWriter {
32
32
  protected typeConvertor: IdlNameConvertor;
33
33
  constructor(printer: IndentedPrinter, resolver: ReferenceResolver, typeConvertor: IdlNameConvertor, language?: Language);
34
34
  maybeSemicolon(): string;
35
- pushNamespace(namespace: string, ident?: boolean): void;
35
+ pushNamespace(namespace: string, options: {
36
+ ident: boolean;
37
+ isDeclared?: boolean;
38
+ }): void;
36
39
  fork(options?: {
37
40
  resolver?: ReferenceResolver;
38
41
  }): LanguageWriter;
39
42
  getNodeName(type: idl.IDLNode): string;
40
43
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
41
44
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
42
- writeFunctionDeclaration(name: string, signature: MethodSignature): void;
43
- writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
45
+ writeFunctionDeclaration(name: string, signature: MethodSignature, generics?: string[]): void;
46
+ writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void, generics?: string[]): void;
44
47
  private generateFunctionDeclaration;
45
48
  writeEnum(name: string, members: {
46
49
  name: string;
47
50
  alias?: string | undefined;
48
51
  stringId: string | undefined;
49
52
  numberId: number;
50
- }[]): void;
53
+ }[], options: {
54
+ isDeclare?: boolean;
55
+ isExport: boolean;
56
+ }): void;
51
57
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
52
58
  writeNativeMethodDeclaration(method: Method): void;
53
59
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
@@ -73,7 +79,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
73
79
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
74
80
  makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
75
81
  writePrintLog(message: string): void;
76
- makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
82
+ makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
77
83
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
78
84
  getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
79
85
  makeUndefined(): LanguageExpression;
@@ -89,9 +95,8 @@ export declare class TSLanguageWriter extends LanguageWriter {
89
95
  makeTupleAssign(receiver: string, fields: string[]): LanguageStatement;
90
96
  get supportedModifiers(): MethodModifier[];
91
97
  get supportedFieldModifiers(): FieldModifier[];
92
- enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
93
- ordinalFromEnum(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
94
- makeEnumCast(enumEntry: idl.IDLEnum, param: string): string;
98
+ enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
99
+ i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
95
100
  castToBoolean(value: string): string;
96
101
  makeCallIsObject(value: string): LanguageExpression;
97
102
  escapeKeyword(keyword: string): string;
@@ -20,7 +20,6 @@ import { AssignStatement, BlockStatement, CheckOptionalStatement, ExpressionStat
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';
24
23
  ////////////////////////////////////////////////////////////////
25
24
  // EXPRESSIONS //
26
25
  ////////////////////////////////////////////////////////////////
@@ -125,10 +124,11 @@ export class TSLanguageWriter extends LanguageWriter {
125
124
  this.typeConvertor = typeConvertor;
126
125
  }
127
126
  maybeSemicolon() { return ""; }
128
- pushNamespace(namespace, ident = true) {
127
+ pushNamespace(namespace, options) {
129
128
  this.namespaceStack.push(namespace);
130
- this.print(`export namespace ${namespace} {`);
131
- if (ident)
129
+ const declaredPrefix = options.isDeclared ? "declare " : "";
130
+ this.print(`export ${declaredPrefix}namespace ${namespace} {`);
131
+ if (options.ident)
132
132
  this.pushIndent();
133
133
  }
134
134
  fork(options) {
@@ -136,14 +136,14 @@ export class TSLanguageWriter extends LanguageWriter {
136
136
  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);
137
137
  }
138
138
  getNodeName(type) {
139
- // just stub.
140
- // language writers and name convertors are subject to rework for namespaces
141
- const row = this.typeConvertor.convert(type);
142
- const nsPrefix = this.namespaceStack.join('.') + '.';
143
- if (row.startsWith(nsPrefix)) {
144
- return row.substring(nsPrefix.length);
139
+ // another stub. Bad one.
140
+ // I hope that I will rewrite LWs soon
141
+ if (idl.isType(type) && idl.isReferenceType(type)) {
142
+ if (type.name.startsWith('%TEXT%:')) {
143
+ return type.name.substring(7);
144
+ }
145
145
  }
146
- return row;
146
+ return this.typeConvertor.convert(type);
147
147
  }
148
148
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
149
149
  let extendsClause = superClass ? ` extends ${superClass}` : '';
@@ -166,27 +166,28 @@ export class TSLanguageWriter extends LanguageWriter {
166
166
  this.popIndent();
167
167
  this.printer.print(`}`);
168
168
  }
169
- writeFunctionDeclaration(name, signature) {
170
- this.printer.print(this.generateFunctionDeclaration(name, signature));
169
+ writeFunctionDeclaration(name, signature, generics) {
170
+ this.printer.print(this.generateFunctionDeclaration(name, signature, generics));
171
171
  }
172
- writeFunctionImplementation(name, signature, op) {
173
- this.printer.print(`${this.generateFunctionDeclaration(name, signature)} {`);
172
+ writeFunctionImplementation(name, signature, op, generics) {
173
+ this.printer.print(`${this.generateFunctionDeclaration(name, signature, generics)} {`);
174
174
  this.printer.pushIndent();
175
175
  op(this);
176
176
  this.printer.popIndent();
177
177
  this.printer.print('}');
178
178
  }
179
- generateFunctionDeclaration(name, signature) {
179
+ generateFunctionDeclaration(name, signature, generics) {
180
180
  const rightmostRegularParameterIndex = rightmostIndexOf(signature.args, it => !isOptionalType(it));
181
181
  const args = signature.args.map((it, index) => {
182
182
  const optionalToken = idl.isOptionalType(it) && index > rightmostRegularParameterIndex ? '?' : '';
183
183
  return `${signature.argName(index)}${optionalToken}: ${this.getNodeName(it)}`;
184
184
  });
185
185
  const returnType = this.getNodeName(signature.returnType);
186
- return `export function ${name}(${args.join(", ")}): ${returnType}`;
186
+ const typeParams = generics && generics.length ? '<' + (generics === null || generics === void 0 ? void 0 : generics.join(', ')) + '>' : '';
187
+ return `export function ${name}${typeParams}(${args.join(", ")}): ${returnType}`;
187
188
  }
188
- writeEnum(name, members) {
189
- this.printer.print(`export enum ${name} {`);
189
+ writeEnum(name, members, options) {
190
+ this.printer.print(`${options.isExport ? "export " : ""}${options.isDeclare ? "declare " : ""}enum ${name} {`);
190
191
  this.printer.pushIndent();
191
192
  for (const [index, member] of members.entries()) {
192
193
  let value;
@@ -274,7 +275,6 @@ export class TSLanguageWriter extends LanguageWriter {
274
275
  this.print(`export const ${constName}: ${this.getNodeName(constType)}${constVal ? ' = ' + constVal : ''}`);
275
276
  }
276
277
  writeDeclaration(name, signature, needReturn, needBracket, modifiers, generics) {
277
- var _a;
278
278
  let prefix = !modifiers ? undefined : this.supportedModifiers
279
279
  .filter(it => modifiers.includes(it))
280
280
  .map(it => this.mapMethodModifier(it)).join(" ");
@@ -290,19 +290,8 @@ export class TSLanguageWriter extends LanguageWriter {
290
290
  }
291
291
  prefix = prefix ? prefix.trim() + " " : "";
292
292
  const typeParams = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : "";
293
- // FIXME:
294
- const isSetter = modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.SETTER);
295
- const canBeOptional = [];
296
- for (let i = signature.args.length - 1; i >= 0; --i) {
297
- const prevCanBeOptional = (_a = canBeOptional.at(-1)) !== null && _a !== void 0 ? _a : true;
298
- const curr = signature.args[i];
299
- const result = prevCanBeOptional && (idl.isOptionalType(curr) || signature.argDefault(i) !== undefined);
300
- canBeOptional.push(result);
301
- }
302
- canBeOptional.reverse();
303
- const isOptional = signature.args.map((it, i) => idl.isOptionalType(it) && canBeOptional[i] && !isSetter);
304
- const normalizedArgs = signature.args.map((it, i) => idl.isOptionalType(it) && isOptional[i] ? idl.maybeUnwrapOptionalType(it) : it);
305
- 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 ? " {" : ""}`);
293
+ const normalizedArgs = signature.args.map((it, i) => idl.isOptionalType(it) && signature.isArgOptional(i) ? idl.maybeUnwrapOptionalType(it) : it);
294
+ 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 ? " {" : ""}`);
306
295
  }
307
296
  makeNull() {
308
297
  return new StringExpression("undefined");
@@ -334,9 +323,9 @@ export class TSLanguageWriter extends LanguageWriter {
334
323
  writePrintLog(message) {
335
324
  this.print(`console.log("${message}")`);
336
325
  }
337
- makeCast(value, type, options) {
326
+ makeCast(value, node, options) {
338
327
  var _a;
339
- 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);
328
+ return new TSCastExpression(value, this.getNodeName(node), (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
340
329
  }
341
330
  typeInstanceOf(type, value, members) {
342
331
  if (idl.isInterface(type)) {
@@ -399,27 +388,19 @@ export class TSLanguageWriter extends LanguageWriter {
399
388
  get supportedFieldModifiers() {
400
389
  return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY, FieldModifier.STATIC];
401
390
  }
402
- enumFromOrdinal(value, enumEntry) {
403
- const enumName = idl.forceAsNamedNode(enumEntry).name;
391
+ enumFromI32(value, enumEntry) {
392
+ const enumName = enumEntry.name;
404
393
  const ordinal = value.asString();
405
- return isStringEnumType(enumEntry, this.resolver)
394
+ return idl.isStringEnum(enumEntry)
406
395
  ? this.makeString(`Object.values(${enumName})[${ordinal}]`)
407
- : this.makeString(`${ordinal}`);
396
+ : this.makeString(ordinal);
408
397
  }
409
- ordinalFromEnum(value, enumEntry) {
410
- const enumName = idl.forceAsNamedNode(enumEntry).name;
411
- const decl = idl.isReferenceType(enumEntry) ? this.resolver.resolveTypeReference(enumEntry) : undefined;
412
- if (decl && idl.isEnum(decl) && idl.isStringEnum(decl)) {
398
+ i32FromEnum(value, enumEntry) {
399
+ const enumName = this.getNodeName(enumEntry);
400
+ if (idl.isEnum(enumEntry) && idl.isStringEnum(enumEntry)) {
413
401
  return this.makeString(`Object.values(${enumName}).indexOf(${value.asString()})`);
414
402
  }
415
- return value;
416
- }
417
- makeEnumCast(enumEntry, param) {
418
- // Take the ordinal value if Enum is a string, and valueOf when it is an integer
419
- // Enum.valueOf() - compatible with ArkTS/TS
420
- return idl.isStringEnum(enumEntry)
421
- ? this.ordinalFromEnum(this.makeString(param), idl.createReferenceType(enumEntry)).asString()
422
- : `${param}.valueOf()`;
403
+ return this.makeString(`${value.asString()}.valueOf()`);
423
404
  }
424
405
  castToBoolean(value) { return `+${value}`; }
425
406
  makeCallIsObject(value) {
@@ -437,7 +418,7 @@ export class TSLanguageWriter extends LanguageWriter {
437
418
  throwException(`The type reference ${decl === null || decl === void 0 ? void 0 : decl.name} must be Enum`);
438
419
  }
439
420
  const ordinal = idl.isStringEnum(decl)
440
- ? this.ordinalFromEnum(this.makeCast(this.makeString(this.getObjectAccessor(convertor, value)), convertor.idlType), idl.createReferenceType(this.getNodeName(convertor.nativeType())))
421
+ ? this.i32FromEnum(this.makeCast(this.makeString(this.getObjectAccessor(convertor, value)), convertor.idlType), decl)
441
422
  : this.makeUnionVariantCast(this.getObjectAccessor(convertor, value), this.getNodeName(idl.IDLI32Type), convertor, index);
442
423
  const { low, high } = idl.extremumOfOrdinals(decl);
443
424
  return this.discriminatorFromExpressions(value, convertor.runtimeTypes[0], [
@@ -3,12 +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[];
8
+ get files(): idl.IDLFile[];
12
9
  typeConvertor(param: string, type: idl.IDLType, isOptionalParam?: boolean): ArgConvertor;
13
10
  declarationConvertor(param: string, type: idl.IDLReferenceType, declaration: idl.IDLEntry | undefined): ArgConvertor;
14
11
  getInteropName(node: idl.IDLNode): string;