@idlizer/core 2.1.5 → 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 (41) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +0 -1
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +8 -3
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +9 -4
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +4 -4
  5. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +1 -0
  6. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +16 -6
  7. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +1 -0
  8. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +55 -54
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +1 -1
  10. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +2 -2
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +1 -0
  12. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -2
  13. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +44 -9
  14. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +7 -2
  15. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +24 -10
  16. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +3 -0
  17. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +32 -7
  18. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +6 -3
  19. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +11 -9
  20. package/build/lib/src/config.d.ts +607 -44
  21. package/build/lib/src/config.js +18 -0
  22. package/build/lib/src/configDescriber.d.ts +1 -1
  23. package/build/lib/src/configDescriber.js +2 -2
  24. package/build/lib/src/from-idl/DtsPrinter.js +3 -2
  25. package/build/lib/src/from-idl/IDLLinter.js +1 -1
  26. package/build/lib/src/from-idl/deserialize.d.ts +7 -1
  27. package/build/lib/src/from-idl/deserialize.js +79 -33
  28. package/build/lib/src/idl.d.ts +4 -2
  29. package/build/lib/src/idl.js +64 -33
  30. package/build/lib/src/peer-generation/Materialized.js +1 -1
  31. package/build/lib/src/peer-generation/PeerLibrary.js +4 -4
  32. package/build/lib/src/peer-generation/idl/common.d.ts +1 -0
  33. package/build/lib/src/peer-generation/idl/common.js +8 -2
  34. package/build/lib/src/peer-generation/isMaterialized.js +4 -0
  35. package/build/lib/src/peer-generation/unions.js +1 -1
  36. package/build/lib/src/util.d.ts +2 -1
  37. package/build/lib/src/util.js +8 -3
  38. package/build/lib/src/visitor.d.ts +2 -0
  39. package/build/lib/src/visitor.js +108 -0
  40. package/package.json +2 -2
  41. package/webidl2.js/dist/webidl2.js +62 -16
@@ -130,16 +130,17 @@ export class ETSLambdaExpression extends LambdaExpression {
130
130
  // UTILS //
131
131
  ////////////////////////////////////////////////////////////////
132
132
  export function generateTypeCheckerName(typeName) {
133
- typeName = typeName.replaceAll('[]', 'BracketsArray')
134
- .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
135
136
  return `is${typeName.replaceAll('[]', 'Brackets')}`;
136
137
  }
137
138
  export function generateEnumToNumericName(typeName) {
138
- typeName = typeName.split(".").join("_");
139
+ typeName = typeName.split('.').at(-1); // Todo: hack for namespaces. Remove when ready to use FQNames
139
140
  return `${typeName}_ToNumeric`;
140
141
  }
141
142
  export function generateEnumFromNumericName(typeName) {
142
- typeName = typeName.split(".").join("_");
143
+ typeName = typeName.split('.').at(-1); // Todo: hack for namespaces. Remove when ready to use FQNames
143
144
  return `${typeName}_FromNumeric`;
144
145
  }
145
146
  export function makeArrayTypeCheckCall(valueAccessor, typeName, writer) {
@@ -180,12 +181,22 @@ export class ETSLanguageWriter extends TSLanguageWriter {
180
181
  return this.makeString(`${value} as ${type}`);
181
182
  }
182
183
  i32FromEnum(value, enumEntry) {
183
- const enumName = this.getNodeName(enumEntry);
184
- return this.makeMethodCall('TypeChecker', generateEnumToNumericName(enumName), [value]);
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', []);
185
191
  }
186
192
  enumFromI32(value, enumEntry) {
187
193
  const enumName = this.getNodeName(enumEntry);
188
- return this.makeMethodCall('TypeChecker', generateEnumFromNumericName(enumName), [value]);
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]);
189
200
  }
190
201
  makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
191
202
  if (convertor instanceof AggregateConvertor
@@ -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`; }
@@ -308,7 +324,16 @@ export class ETSLanguageWriter extends TSLanguageWriter {
308
324
  var _a;
309
325
  return new TSCastExpression(value, `${this.getNodeName(node)}`, (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
310
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;
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 => {
@@ -32,15 +32,18 @@ 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;
@@ -124,10 +124,11 @@ export class TSLanguageWriter extends LanguageWriter {
124
124
  this.typeConvertor = typeConvertor;
125
125
  }
126
126
  maybeSemicolon() { return ""; }
127
- pushNamespace(namespace, ident = true) {
127
+ pushNamespace(namespace, options) {
128
128
  this.namespaceStack.push(namespace);
129
- this.print(`export namespace ${namespace} {`);
130
- if (ident)
129
+ const declaredPrefix = options.isDeclared ? "declare " : "";
130
+ this.print(`export ${declaredPrefix}namespace ${namespace} {`);
131
+ if (options.ident)
131
132
  this.pushIndent();
132
133
  }
133
134
  fork(options) {
@@ -165,24 +166,25 @@ export class TSLanguageWriter extends LanguageWriter {
165
166
  this.popIndent();
166
167
  this.printer.print(`}`);
167
168
  }
168
- writeFunctionDeclaration(name, signature) {
169
- this.printer.print(this.generateFunctionDeclaration(name, signature));
169
+ writeFunctionDeclaration(name, signature, generics) {
170
+ this.printer.print(this.generateFunctionDeclaration(name, signature, generics));
170
171
  }
171
- writeFunctionImplementation(name, signature, op) {
172
- this.printer.print(`${this.generateFunctionDeclaration(name, signature)} {`);
172
+ writeFunctionImplementation(name, signature, op, generics) {
173
+ this.printer.print(`${this.generateFunctionDeclaration(name, signature, generics)} {`);
173
174
  this.printer.pushIndent();
174
175
  op(this);
175
176
  this.printer.popIndent();
176
177
  this.printer.print('}');
177
178
  }
178
- generateFunctionDeclaration(name, signature) {
179
+ generateFunctionDeclaration(name, signature, generics) {
179
180
  const rightmostRegularParameterIndex = rightmostIndexOf(signature.args, it => !isOptionalType(it));
180
181
  const args = signature.args.map((it, index) => {
181
182
  const optionalToken = idl.isOptionalType(it) && index > rightmostRegularParameterIndex ? '?' : '';
182
183
  return `${signature.argName(index)}${optionalToken}: ${this.getNodeName(it)}`;
183
184
  });
184
185
  const returnType = this.getNodeName(signature.returnType);
185
- 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}`;
186
188
  }
187
189
  writeEnum(name, members, options) {
188
190
  this.printer.print(`${options.isExport ? "export " : ""}${options.isDeclare ? "declare " : ""}enum ${name} {`);