@idlizer/core 2.1.10-arktscgen-6 → 2.1.10-arktscgen-9

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.
@@ -17,14 +17,15 @@ import { Language } from "../Language";
17
17
  import { BlockStatement, PrintHint, StringExpression, NamedMethodSignature, ProxyStatement, ExpressionStatement } from "./LanguageWriter";
18
18
  import { RuntimeType } from "./common";
19
19
  import { generatorConfiguration, generatorTypePrefix } from "../config";
20
- import { capitalize, getExtractor, getTransformer, hashCodeFromString, throwException, warn } from "../util";
20
+ import { capitalize, getExtractor, entryToFunctionName as entryToFunctionName, getTransformer, hashCodeFromString, throwException, warn } from "../util";
21
21
  import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
22
22
  import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
23
23
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
24
24
  import { LayoutNodeRole } from "../peer-generation/LayoutManager";
25
25
  import { isInExternalModule } from "../peer-generation/modules";
26
+ import { maybeRestoreGenerics } from "../transformers/GenericTransformer";
26
27
  export function getSerializerName(_library, _language, declaration) {
27
- return `${idl.getQualifiedName(declaration, "package.namespace.name").split('.').map(capitalize).join('')}SerializerImpl`;
28
+ return entryToFunctionName(_language, declaration, "", "SerializerImpl");
28
29
  }
29
30
  export class BaseArgConvertor {
30
31
  constructor(idlType, runtimeTypes, isScoped, useArray, param) {
@@ -900,8 +901,9 @@ export class UnionConvertor extends BaseArgConvertor {
900
901
  statements.push(printer.makeAssign(varName, undefined, printer.makeUnionVariantCast(convertor.getObjectAccessor(printer.language, value), printer.getNodeName(convertor.idlType), convertor, index), true));
901
902
  statements.push(convertor.convertorSerialize(param, varName, printer));
902
903
  }
904
+ const genericDiscriminator = withGenericDiscriminator(this.library, this.memberConvertors, value, discriminator, type, printer);
903
905
  const stmt = new BlockStatement(statements, false);
904
- return { expr: discriminator, stmt };
906
+ return { expr: genericDiscriminator, stmt };
905
907
  }
906
908
  makeArrayBranch(param, value, printer, arrayConvertorItems) {
907
909
  if (arrayConvertorItems.length == 0)
@@ -1349,4 +1351,25 @@ export function createOutArgConvertor(library, type, otherParams) {
1349
1351
  }
1350
1352
  return undefined;
1351
1353
  }
1354
+ function withGenericDiscriminator(library, convertors, value, discriminator, type, writer) {
1355
+ if (writer.language == Language.CPP)
1356
+ return discriminator;
1357
+ if (!idl.isReferenceType(type))
1358
+ return discriminator;
1359
+ const mayBeGeneric = maybeRestoreGenerics(type, writer.resolver);
1360
+ if (mayBeGeneric == undefined)
1361
+ return discriminator;
1362
+ const count = convertors
1363
+ .map(it => it.idlType)
1364
+ .filter(it => idl.isReferenceType(it))
1365
+ .map(it => idl.isReferenceType(it) ? maybeRestoreGenerics(it, writer.resolver) : undefined)
1366
+ .filter(it => it && idl.isReferenceType(it) && it.name == mayBeGeneric.name)
1367
+ .length;
1368
+ if (count < 2)
1369
+ return discriminator;
1370
+ writer.addFeature("typechecks", library.layout.handwrittenPackage());
1371
+ const decl = writer.resolver.resolveTypeReference(type);
1372
+ const checkGenericFunc = entryToFunctionName(writer.language, decl, "isGeneric_", "");
1373
+ return writer.makeAnd(discriminator, writer.makeFunctionCall(`typechecks.${checkGenericFunc}`, [writer.makeString(value)]));
1374
+ }
1352
1375
  //# sourceMappingURL=ArgConvertors.js.map
@@ -123,7 +123,6 @@ export declare class TsEnumEntityStatement implements LanguageStatement {
123
123
  isDeclare: boolean;
124
124
  });
125
125
  write(writer: LanguageWriter): void;
126
- private maybeQuoted;
127
126
  }
128
127
  export declare class ReturnStatement implements LanguageStatement {
129
128
  expression?: LanguageExpression | undefined;
@@ -169,7 +168,8 @@ export declare enum MethodModifier {
169
168
  THROWS = 8,
170
169
  FREE = 9,
171
170
  FORCE_CONTEXT = 10,
172
- OVERRIDE = 11
171
+ OVERRIDE = 11,
172
+ OPEN = 12
173
173
  }
174
174
  export declare enum ClassModifier {
175
175
  PUBLIC = 0,
@@ -327,7 +327,8 @@ export declare abstract class LanguageWriter {
327
327
  writeStatements(...statements: LanguageStatement[]): void;
328
328
  writeExpressionStatement(smth: LanguageExpression): void;
329
329
  writeExpressionStatements(...statements: LanguageExpression[]): void;
330
- writeStaticBlock(op: (writer: this) => void): void;
330
+ writePrefixedBlock(prefix: string, op: (writer: this) => void): void;
331
+ writeStaticInitBlock(op: (writer: this) => void): void;
331
332
  makeRef(type: idl.IDLType, _options?: MakeRefOptions): idl.IDLType;
332
333
  makeThis(): LanguageExpression;
333
334
  makeNull(type?: idl.IDLOptionalType): LanguageExpression;
@@ -388,12 +389,14 @@ export declare abstract class LanguageWriter {
388
389
  makeHasOwnProperty(value: string, property: string, propertyTypeName?: string): LanguageExpression;
389
390
  discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
390
391
  makeNot(expr: LanguageExpression): LanguageExpression;
392
+ makeAnd(...args: LanguageExpression[]): LanguageExpression;
393
+ makeOr(...args: LanguageExpression[]): LanguageExpression;
391
394
  makeSerializedBufferGetter(serializer: string): LanguageExpression;
392
395
  makeEquals(args: LanguageExpression[]): LanguageExpression;
393
396
  castToInt(value: string, bitness: 8 | 32): string;
394
397
  castToBoolean(value: string): string;
395
398
  makeCallIsObject(value: string): LanguageExpression;
396
- makeStaticBlock(op: (writer: LanguageWriter) => void): void;
399
+ writeStaticEntitiesBlock(op: (writer: LanguageWriter) => void): void;
397
400
  instanceOf(value: string, type: idl.IDLType): LanguageExpression;
398
401
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
399
402
  /**
@@ -12,10 +12,12 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
+ import { Language } from "../Language";
15
16
  import * as idl from "../idl";
16
17
  import * as fs from "fs";
17
18
  import { RuntimeType } from "./common";
18
- import { withInsideInstanceof } from "./nameConvertor";
19
+ import { convertDeclaration, withInsideInstanceof } from "./nameConvertor";
20
+ import { createDeclarationNameConvertor } from "../peer-generation/idl/IdlNameConvertor";
19
21
  export class TernaryExpression {
20
22
  constructor(condition, trueExpression, falseExpression) {
21
23
  this.condition = condition;
@@ -235,28 +237,33 @@ export class TsEnumEntityStatement {
235
237
  this.options = options;
236
238
  }
237
239
  write(writer) {
238
- // writer.print(this.enumEntity.comment)
239
- writer.print(`${this.options.isExport ? "export " : ""}${this.options.isDeclare ? "declare " : ""}enum ${this.enumEntity.name} {`);
240
- writer.pushIndent();
240
+ let enumName = convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), this.enumEntity);
241
+ enumName = enumName.split('.').at(-1);
242
+ const correctStyleNames = [];
243
+ const originalStyleNames = [];
241
244
  this.enumEntity.elements.forEach((member, index) => {
242
- // writer.print(member.comment)
243
- const initValue = member.initializer
244
- ? ` = ${this.maybeQuoted(member.initializer)}` : ``;
245
- writer.print(`${member.name}${initValue},`);
246
- let originalName = idl.getExtAttribute(member, idl.IDLExtendedAttributes.OriginalEnumMemberName);
247
- if (originalName) {
248
- const initValue = ` = ${member.name}`;
249
- writer.print(`${originalName}${initValue},`);
250
- }
245
+ var _a;
246
+ const initText = (_a = member.initializer) !== null && _a !== void 0 ? _a : index;
247
+ const isTypeString = typeof initText !== "number";
248
+ const originalName = idl.getExtAttribute(member, idl.IDLExtendedAttributes.OriginalEnumMemberName);
249
+ correctStyleNames.push({
250
+ name: originalName ? member.name : `${member.name}_DUMMY`,
251
+ alias: undefined,
252
+ stringId: isTypeString ? initText : undefined,
253
+ numberId: initText
254
+ });
255
+ originalStyleNames.push({
256
+ name: originalName !== null && originalName !== void 0 ? originalName : member.name,
257
+ alias: undefined,
258
+ stringId: isTypeString ? initText : undefined,
259
+ numberId: initText
260
+ });
251
261
  });
252
- writer.popIndent();
253
- writer.print(`}`);
254
- }
255
- maybeQuoted(value) {
256
- if (typeof value == "string")
257
- return `"${value}"`;
258
- else
259
- return `${value}`;
262
+ let members = originalStyleNames;
263
+ if (this.enumEntity.elements.some(it => idl.hasExtAttribute(it, idl.IDLExtendedAttributes.OriginalEnumMemberName))) {
264
+ members = members.concat(correctStyleNames);
265
+ }
266
+ writer.writeEnum(enumName, members, { isExport: this.options.isExport, isDeclare: this.options.isDeclare });
260
267
  }
261
268
  }
262
269
  export class ReturnStatement {
@@ -330,6 +337,7 @@ export var MethodModifier;
330
337
  MethodModifier[MethodModifier["FREE"] = 9] = "FREE";
331
338
  MethodModifier[MethodModifier["FORCE_CONTEXT"] = 10] = "FORCE_CONTEXT";
332
339
  MethodModifier[MethodModifier["OVERRIDE"] = 11] = "OVERRIDE";
340
+ MethodModifier[MethodModifier["OPEN"] = 12] = "OPEN";
333
341
  })(MethodModifier || (MethodModifier = {}));
334
342
  export var ClassModifier;
335
343
  (function (ClassModifier) {
@@ -489,13 +497,16 @@ export class LanguageWriter {
489
497
  writeExpressionStatements(...statements) {
490
498
  statements.forEach(it => this.writeExpressionStatement(it));
491
499
  }
492
- writeStaticBlock(op) {
493
- this.print("static {");
500
+ writePrefixedBlock(prefix, op) {
501
+ this.print(`${prefix} {`);
494
502
  this.pushIndent();
495
503
  op(this);
496
504
  this.popIndent();
497
505
  this.print("}");
498
506
  }
507
+ writeStaticInitBlock(op) {
508
+ this.writePrefixedBlock("static", op);
509
+ }
499
510
  makeRef(type, _options) {
500
511
  return type;
501
512
  }
@@ -676,6 +687,12 @@ export class LanguageWriter {
676
687
  makeNot(expr) {
677
688
  return this.makeString(`!(${expr.asString()})`);
678
689
  }
690
+ makeAnd(...args) {
691
+ return this.makeNaryOp("&&", args);
692
+ }
693
+ makeOr(...args) {
694
+ return this.makeNaryOp("||", args);
695
+ }
679
696
  makeSerializedBufferGetter(serializer) {
680
697
  return this.makeMethodCall(serializer, `asBuffer`, []);
681
698
  }
@@ -687,7 +704,7 @@ export class LanguageWriter {
687
704
  makeCallIsObject(value) {
688
705
  return this.makeString(`typeof ${value} === "object"`);
689
706
  }
690
- makeStaticBlock(op) {
707
+ writeStaticEntitiesBlock(op) {
691
708
  op(this);
692
709
  }
693
710
  instanceOf(value, type) {
@@ -17,7 +17,7 @@ import { Language } from '../../Language';
17
17
  import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
18
18
  import { isDeclaredInCurrentFile, LayoutNodeRole } from '../../peer-generation/LayoutManager';
19
19
  import { maybeRestoreGenerics } from '../../transformers/GenericTransformer';
20
- import { convertNode, convertType, isInsideInstanceof } from '../nameConvertor';
20
+ import { convertNode, convertType, isInsideInstanceof, withInsideInstanceof } from '../nameConvertor';
21
21
  export class TSTypeNameConvertor {
22
22
  constructor(library) {
23
23
  this.library = library;
@@ -142,7 +142,8 @@ export class TSTypeNameConvertor {
142
142
  }
143
143
  let typeSpec = type.name;
144
144
  let typeArgs = !isInsideInstanceof() || decl && idl.isCallback(decl)
145
- ? (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : []
145
+ // there is a bug with panda - if we're inside callback generics, we need to expand other generics too. So withInsideInstanceof is used
146
+ ? (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => withInsideInstanceof(false, () => this.convert(it)))) !== null && _b !== void 0 ? _b : []
146
147
  : [];
147
148
  if (typeSpec === `Optional`)
148
149
  return `${typeArgs} | undefined`;
@@ -1,7 +1,7 @@
1
1
  import { IndentedPrinter } from "../../IndentedPrinter";
2
2
  import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, Method, MethodModifier, MethodSignature } from "../LanguageWriter";
3
3
  import { TSLanguageWriter } from "./TsLanguageWriter";
4
- import { IDLEnum, IDLType } from '../../idl';
4
+ import { IDLType } from '../../idl';
5
5
  import { ArgConvertor } from "../ArgConvertors";
6
6
  import * as idl from '../../idl';
7
7
  import { IdlNameConvertor } from "../nameConvertor";
@@ -23,15 +23,6 @@ export declare class EtsAssignStatement implements LanguageStatement {
23
23
  constructor(variableName: string, type: IDLType | undefined, expression: LanguageExpression, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions | undefined);
24
24
  write(writer: LanguageWriter): void;
25
25
  }
26
- export declare class ArkTSEnumEntityStatement implements LanguageStatement {
27
- private readonly enumEntity;
28
- private readonly options;
29
- constructor(enumEntity: IDLEnum, options: {
30
- isExport: boolean;
31
- isDeclare: boolean;
32
- });
33
- write(writer: LanguageWriter): void;
34
- }
35
26
  export declare class ETSLambdaExpression extends LambdaExpression {
36
27
  private convertor;
37
28
  constructor(writer: LanguageWriter, convertor: IdlNameConvertor, signature: MethodSignature, resolver: ReferenceResolver, body?: LanguageStatement[]);
@@ -60,10 +51,6 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
60
51
  targetType: (writer: LanguageWriter) => string;
61
52
  }, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
62
53
  makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
63
- makeEnumEntity(enumEntity: IDLEnum, options: {
64
- isExport: boolean;
65
- isDeclare?: boolean;
66
- }): LanguageStatement;
67
54
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
68
55
  isQuickType(type: IDLType): boolean;
69
56
  writeNativeMethodDeclaration(method: Method): void;
@@ -15,11 +15,10 @@
15
15
  import { IndentedPrinter } from "../../IndentedPrinter";
16
16
  import { BlockStatement, LambdaExpression, MethodModifier } from "../LanguageWriter";
17
17
  import { TSCastExpression, TSLanguageWriter } from "./TsLanguageWriter";
18
- import { getExtAttribute, IDLThisType } from '../../idl';
18
+ import { IDLThisType } from '../../idl';
19
19
  import { AggregateConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor } from "../ArgConvertors";
20
20
  import * as idl from '../../idl';
21
- import { convertDeclaration, withInsideInstanceof } from "../nameConvertor";
22
- import { createDeclarationNameConvertor } from "../../peer-generation/idl/IdlNameConvertor";
21
+ import { withInsideInstanceof } from "../nameConvertor";
23
22
  import { Language } from "../../Language";
24
23
  ////////////////////////////////////////////////////////////////
25
24
  // EXPRESSIONS //
@@ -82,41 +81,6 @@ class ArkTSMapForEachStatement {
82
81
  writer.print(`}`);
83
82
  }
84
83
  }
85
- export class ArkTSEnumEntityStatement {
86
- constructor(enumEntity, options) {
87
- this.enumEntity = enumEntity;
88
- this.options = options;
89
- }
90
- write(writer) {
91
- let enumName = convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), this.enumEntity);
92
- enumName = enumName.split('.').at(-1);
93
- const correctStyleNames = [];
94
- const originalStyleNames = [];
95
- this.enumEntity.elements.forEach((member, index) => {
96
- var _a;
97
- const initText = (_a = member.initializer) !== null && _a !== void 0 ? _a : index;
98
- const isTypeString = typeof initText !== "number";
99
- const originalName = getExtAttribute(member, idl.IDLExtendedAttributes.OriginalEnumMemberName);
100
- correctStyleNames.push({
101
- name: originalName ? member.name : `${member.name}_DUMMY`,
102
- alias: undefined,
103
- stringId: isTypeString ? initText : undefined,
104
- numberId: initText
105
- });
106
- originalStyleNames.push({
107
- name: originalName !== null && originalName !== void 0 ? originalName : member.name,
108
- alias: undefined,
109
- stringId: isTypeString ? initText : undefined,
110
- numberId: initText
111
- });
112
- });
113
- let members = originalStyleNames;
114
- if (this.enumEntity.elements.some(it => idl.hasExtAttribute(it, idl.IDLExtendedAttributes.OriginalEnumMemberName))) {
115
- members = members.concat(correctStyleNames);
116
- }
117
- writer.writeEnum(enumName, members, { isExport: this.options.isExport, isDeclare: this.options.isDeclare });
118
- }
119
- }
120
84
  export class ETSLambdaExpression extends LambdaExpression {
121
85
  constructor(writer, convertor, signature, resolver, body) {
122
86
  super(writer, signature, resolver, body);
@@ -224,12 +188,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
224
188
  }
225
189
  return super.makeValueFromOption(value, destinationConvertor);
226
190
  }
227
- makeEnumEntity(enumEntity, options) {
228
- return new ArkTSEnumEntityStatement(enumEntity, {
229
- isExport: options === null || options === void 0 ? void 0 : options.isExport,
230
- isDeclare: !!(options === null || options === void 0 ? void 0 : options.isDeclare),
231
- });
232
- }
233
191
  writeMethodCall(receiver, method, params, nullable = false) {
234
192
  // ArkTS does not support - 'this.?'
235
193
  super.writeMethodCall(receiver, method, params, nullable && receiver !== "this");
@@ -271,7 +229,7 @@ export class ETSLanguageWriter extends TSLanguageWriter {
271
229
  // The explicit cast forces ui2abc to call valueOf on an int, which fails the compilation
272
230
  // TODO Fix this cast
273
231
  if (bitness === 8)
274
- return `(${value}).toChar()`;
232
+ return `(${value}).toByte()`;
275
233
  return `(${value}).toInt()`; // FIXME: is there int8 in ARKTS?
276
234
  }
277
235
  castToBoolean(value) { return `${value} ? true : false`; }
@@ -148,7 +148,7 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
148
148
  makeCallIsObject(value: string): LanguageExpression;
149
149
  makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
150
150
  escapeKeyword(keyword: string): string;
151
- makeStaticBlock(op: (writer: LanguageWriter) => void): void;
151
+ writeStaticEntitiesBlock(op: (writer: LanguageWriter) => void): void;
152
152
  pushNamespace(namespace: string, options: NamespaceOptions): void;
153
153
  popNamespace(options: {
154
154
  ident: boolean;
@@ -85,7 +85,7 @@ export class KotlinEnumWithGetter {
85
85
  let mangledName = removePoints(idl.getQualifiedName(this.enumEntity, 'namespace.name'));
86
86
  writer.writeClass(mangledName, () => {
87
87
  const enumType = idl.createReferenceType(this.enumEntity);
88
- writer.makeStaticBlock(() => {
88
+ writer.writeStaticEntitiesBlock(() => {
89
89
  members.forEach(it => {
90
90
  writer.writeFieldDeclaration(it.name, enumType, [FieldModifier.PUBLIC, FieldModifier.STATIC, FieldModifier.FINAL], false, writer.makeString(`${mangledName}(${it.stringId ? `\"${it.stringId}\"` : it.numberId})`));
91
91
  });
@@ -236,11 +236,11 @@ export class KotlinLanguageWriter extends LanguageWriter {
236
236
  maybeSemicolon() { return ""; }
237
237
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
238
238
  let extendsClause = superClass ? `${superClass}` : undefined;
239
- let implementsClause = interfaces ? `${interfaces.join(' , ')}` : undefined;
239
+ let implementsClause = interfaces ? `${interfaces.join(', ')}` : undefined;
240
240
  let inheritancePart = [extendsClause, implementsClause]
241
241
  .filter(isDefined)
242
- .join(' , ');
243
- inheritancePart = inheritancePart.length != 0 ? ' : '.concat(inheritancePart) : '';
242
+ .join(', ');
243
+ inheritancePart = inheritancePart.length != 0 ? ': '.concat(inheritancePart) : '';
244
244
  this.printer.print(`public open class ${name}${inheritancePart} {`);
245
245
  this.pushIndent();
246
246
  op(this);
@@ -590,7 +590,7 @@ export class KotlinLanguageWriter extends LanguageWriter {
590
590
  throw new Error("Not implemented");
591
591
  }
592
592
  get supportedModifiers() {
593
- return [MethodModifier.PUBLIC, MethodModifier.PRIVATE, MethodModifier.OVERRIDE];
593
+ return [MethodModifier.PUBLIC, MethodModifier.PROTECTED, MethodModifier.PRIVATE, MethodModifier.OVERRIDE, MethodModifier.OPEN];
594
594
  }
595
595
  get supportedFieldModifiers() {
596
596
  return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY, FieldModifier.OVERRIDE];
@@ -619,12 +619,8 @@ export class KotlinLanguageWriter extends LanguageWriter {
619
619
  escapeKeyword(keyword) {
620
620
  return keyword;
621
621
  }
622
- makeStaticBlock(op) {
623
- this.printer.print('companion object {');
624
- this.printer.pushIndent();
625
- op(this);
626
- this.popIndent();
627
- this.printer.print('}');
622
+ writeStaticEntitiesBlock(op) {
623
+ this.writePrefixedBlock("companion object", op);
628
624
  }
629
625
  pushNamespace(namespace, options) { }
630
626
  popNamespace(options) { }
@@ -446,8 +446,15 @@ export class TSLanguageWriter extends LanguageWriter {
446
446
  }
447
447
  i32FromEnum(value, enumEntry) {
448
448
  const enumName = this.getNodeName(enumEntry);
449
- if (idl.isEnum(enumEntry) && idl.isStringEnum(enumEntry)) {
450
- return this.makeString(`Object.values(${enumName}).indexOf(${value.asString()})`);
449
+ if (idl.isStringEnum(enumEntry)) {
450
+ let extractorStatement = this.makeString(`Object.values(${enumName}).indexOf(${value.asString()})`);
451
+ if (enumEntry.elements.some(it => idl.hasExtAttribute(it, idl.IDLExtendedAttributes.OriginalEnumMemberName))) {
452
+ extractorStatement = this.makeNaryOp('%', [
453
+ extractorStatement,
454
+ this.makeString(enumEntry.elements.length.toString())
455
+ ]);
456
+ }
457
+ return extractorStatement;
451
458
  }
452
459
  return this.makeString(`${value.asString()}.valueOf()`);
453
460
  }
@@ -31,7 +31,7 @@ interface Token {
31
31
  value: string;
32
32
  location: Location;
33
33
  }
34
- type ModifierToken = "static" | "readonly" | "async";
34
+ type ModifierToken = "static" | "readonly" | "async" | "optional";
35
35
  type ModifiersContainer = {
36
36
  [Key in ModifierToken]?: Token;
37
37
  };
@@ -69,7 +69,7 @@ const unsupportedDeclarations = new Set(["deleter", "getter", "includes", "inher
69
69
  const interfaceContent = new Set([idl.IDLKind.Constructor, idl.IDLKind.Const, idl.IDLKind.Property, idl.IDLKind.Method, idl.IDLKind.Callable]);
70
70
  const globalContent = new Set([idl.IDLKind.Namespace, idl.IDLKind.Interface, idl.IDLKind.Enum, idl.IDLKind.Method, idl.IDLKind.Typedef, idl.IDLKind.Callback, idl.IDLKind.Import, idl.IDLKind.Version, idl.IDLKind.Const]);
71
71
  const havingBlocks = new Set([idl.IDLKind.Namespace, idl.IDLKind.Interface, idl.IDLKind.Enum]);
72
- const modifierTokens = new Set(["static", "readonly", "async"]);
72
+ const modifierTokens = new Set(["static", "readonly", "async", "optional"]);
73
73
  // Uncomment in case of parser debugging
74
74
  function trac(s) {
75
75
  // console.log(s)
@@ -402,7 +402,7 @@ export class Parser {
402
402
  }
403
403
  switch (this.curValue) {
404
404
  case "attribute":
405
- this.assertPossibleModifiers("static", "readonly");
405
+ this.assertPossibleModifiers("static", "readonly", "optional");
406
406
  return this.parseAttribute();
407
407
  case "callback":
408
408
  return this.parseCallback();
@@ -737,7 +737,7 @@ export class Parser {
737
737
  const ext = this.consumeCurrentExtended();
738
738
  const isReadonly = !!this.currentModifiers.readonly;
739
739
  const isStatic = !!this.currentModifiers.static;
740
- const isOptional = extractOptional(ext);
740
+ let isOptional = !!this.currentModifiers.optional || extractOptional(ext);
741
741
  this.skip("attribute");
742
742
  const type = this.parseType();
743
743
  const name = this.parseSingleIdentifier();
@@ -128,8 +128,9 @@ export class IDLWriter {
128
128
  printProperty(idl) {
129
129
  const staticMod = idl.isStatic ? "static " : "";
130
130
  const readonlyMod = idl.isReadonly ? "readonly " : "";
131
+ const optional = idl.isOptional ? "optional " : "";
131
132
  return this.printExtendedAttributes(idl)
132
- .print(`${staticMod}${readonlyMod}attribute ${nameWithType(idl)};`);
133
+ .print(`${staticMod}${readonlyMod}${optional}attribute ${nameWithType(idl)};`);
133
134
  }
134
135
  printExtendedAttributes(idl) {
135
136
  var _a;
@@ -10255,6 +10255,7 @@ export declare class PeerLibrary implements LibraryInterface {
10255
10255
  language: Language;
10256
10256
  interopNativeModule: NativeModuleType;
10257
10257
  readonly useMemoM3: boolean;
10258
+ readonly useComponentNamedOverloads: boolean;
10258
10259
  private _cachedIdlLibrary?;
10259
10260
  asIDLLibrary(): IDLLibrary;
10260
10261
  get globals(): GlobalScopeDeclarations[];
@@ -10266,7 +10267,7 @@ export declare class PeerLibrary implements LibraryInterface {
10266
10267
  private resolver;
10267
10268
  readonly materializedClasses: Map<string, MaterializedClass>;
10268
10269
  get orderedMaterialized(): MaterializedClass[];
10269
- constructor(language: Language, interopNativeModule: NativeModuleType, useMemoM3?: boolean);
10270
+ constructor(language: Language, interopNativeModule: NativeModuleType, useMemoM3?: boolean, useComponentNamedOverloads?: boolean);
10270
10271
  name: string;
10271
10272
  readonly customComponentMethods: string[];
10272
10273
  createLanguageWriter(language?: Language): LanguageWriter;
@@ -91,10 +91,11 @@ export class PeerLibrary {
91
91
  return Array.from(this.materializedClasses.values()).filter(it => it.needBeGenerated)
92
92
  .sort((a, b) => accessorName(a.decl).localeCompare(accessorName(b.decl)));
93
93
  }
94
- constructor(language, interopNativeModule, useMemoM3 = false) {
94
+ constructor(language, interopNativeModule, useMemoM3 = false, useComponentNamedOverloads = true) {
95
95
  this.language = language;
96
96
  this.interopNativeModule = interopNativeModule;
97
97
  this.useMemoM3 = useMemoM3;
98
+ this.useComponentNamedOverloads = useComponentNamedOverloads;
98
99
  this.layout = LayoutManager.Empty();
99
100
  this._files = [];
100
101
  this.auxFiles = [];
@@ -10,14 +10,24 @@ class FqnTransformer extends IdlTransformer {
10
10
  this.resolver = resolver;
11
11
  }
12
12
  visit(node) {
13
- var _a;
13
+ var _a, _b;
14
+ const defaultGenericReferenceAttribute = (_a = node.extendedAttributes) === null || _a === void 0 ? void 0 : _a.find(a => a.name === idl.IDLExtendedAttributes.TypeParametersDefaults);
15
+ if (defaultGenericReferenceAttribute && defaultGenericReferenceAttribute.typesValue) {
16
+ const fqVisited = defaultGenericReferenceAttribute.typesValue.map(type => {
17
+ const tmpType = idl.clone(type);
18
+ tmpType.parent = node;
19
+ return this.visit(tmpType);
20
+ });
21
+ defaultGenericReferenceAttribute.typesValue = fqVisited;
22
+ return this.visitEachChild(node);
23
+ }
14
24
  if (idl.isReferenceType(node)) {
15
25
  const resolved = this.resolver.resolveTypeReference(node);
16
26
  if (resolved === undefined) {
17
27
  this.resolver.resolveTypeReference(node);
18
28
  throw new Error("Can not expand FQN for " + idl.DebugUtils.debugPrintType(node));
19
29
  }
20
- return idl.createReferenceType(idl.getFQName(resolved), (_a = node.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.visit(it)), idl.cloneNodeInitializer(node));
30
+ return idl.createReferenceType(idl.getFQName(resolved), (_b = node.typeArguments) === null || _b === void 0 ? void 0 : _b.map(it => this.visit(it)), idl.cloneNodeInitializer(node));
21
31
  }
22
32
  return this.visitEachChild(node);
23
33
  }
@@ -80,7 +80,7 @@ class DefaultGenericsTransformer extends IdlTransformer {
80
80
  this.resolver = resolver;
81
81
  }
82
82
  visit(node) {
83
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
83
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
84
84
  if (idl.isReferenceType(node)) {
85
85
  const decl = this.resolver.resolveTypeReference(node);
86
86
  if (!decl) {
@@ -91,14 +91,14 @@ class DefaultGenericsTransformer extends IdlTransformer {
91
91
  return this.visitEachChild(node);
92
92
  }
93
93
  if (((_c = (_b = decl.typeParameters) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > ((_e = (_d = node.typeArguments) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0)) {
94
- const defaults = (_h = (_g = (_f = decl.extendedAttributes) === null || _f === void 0 ? void 0 : _f.find(it => it.name === idl.IDLExtendedAttributes.TypeParametersDefaults)) === null || _g === void 0 ? void 0 : _g.typesValue) !== null && _h !== void 0 ? _h : [];
94
+ const defaults = (_j = (_h = (_g = (_f = decl.extendedAttributes) === null || _f === void 0 ? void 0 : _f.find(it => it.name === idl.IDLExtendedAttributes.TypeParametersDefaults)) === null || _g === void 0 ? void 0 : _g.typesValue) === null || _h === void 0 ? void 0 : _h.slice()) !== null && _j !== void 0 ? _j : [];
95
95
  while (defaults.length < decl.typeParameters.length) {
96
96
  defaults.unshift(undefined);
97
97
  }
98
- const typeArguments = Array.from((_j = node.typeArguments) !== null && _j !== void 0 ? _j : []);
98
+ const typeArguments = Array.from((_k = node.typeArguments) !== null && _k !== void 0 ? _k : []);
99
99
  while (decl.typeParameters.length > typeArguments.length) {
100
100
  if (defaults[typeArguments.length] === undefined) {
101
- const declarationDetails = `${idl.getFQName(decl)}<${((_k = decl.typeParameters) !== null && _k !== void 0 ? _k : [])
101
+ const declarationDetails = `${idl.getFQName(decl)}<${((_l = decl.typeParameters) !== null && _l !== void 0 ? _l : [])
102
102
  .map((it, index) => `${it}${defaults[index] ? '=' + defaults[index] : ''}`)
103
103
  .join(', ')}>`;
104
104
  const referenceDetails = `${node.name}<${typeArguments.map(it => idl.printType(it)).join(", ")}>`;
@@ -139,7 +139,7 @@ class GenericsTransformer extends IdlTransformer {
139
139
  throw new Error(`Unsupported generics target ${resolved.kind}`);
140
140
  }
141
141
  const inplacedRef = idl.createReferenceType(idl.deriveQualifiedNameFrom(monomorphisedEntryName(resolved, ref.typeArguments, this.options), resolved), undefined, idl.cloneNodeInitializer(ref));
142
- if (!this.resolver.resolveTypeReference(inplacedRef)) {
142
+ if (!this.resolver.resolveTypeReference(inplacedRef, { unresolvedOk: true })) {
143
143
  const monomorphizedEntry = this.visit(this.monomorphizeEntry(resolved, ref.typeArguments));
144
144
  this.producer({ anchor: idl.getFQName(resolved), produced: monomorphizedEntry });
145
145
  }
@@ -18,6 +18,7 @@ export declare function snakeCaseToCamelCase(input: string, tailToLowerCase?: bo
18
18
  export declare function toCamelCase(input: string): string;
19
19
  export declare function isUpperCase(s: string): boolean;
20
20
  export declare function camelCaseToUpperSnakeCase(input: string): string;
21
+ export declare function camelCaseToLowerSnakeCase(input: string): string;
21
22
  export declare function snakeToLowCamelNode(node: idl.IDLEntry): string;
22
23
  export declare function renameDtsToPeer(fileName: string, language: Language, withFileExtension?: boolean): string;
23
24
  export declare function renameDtsToComponent(fileName: string, language: Language, withFileExtension?: boolean): string;
@@ -25,6 +26,7 @@ export declare function renameDtsToInterfaces(fileName: string, language: Langua
25
26
  export declare function renameClassToBuilderClass(className: string, language: Language, withFileExtension?: boolean): string;
26
27
  export declare function renameClassToMaterialized(className: string, language: Language, withFileExtension?: boolean): string;
27
28
  export declare function throwException(message: string): never;
29
+ export declare function entryToFunctionName(_language: Language, declaration: idl.IDLEntry, prefix: string, postfix: string): string;
28
30
  /**
29
31
  * Add a prefix to an enum value which camel case name coincidence
30
32
  * with the the same upper case name for an another enum value
@@ -122,6 +122,9 @@ export function camelCaseToUpperSnakeCase(input) {
122
122
  .map(s => toUpperSnakeCase(s))
123
123
  .join('_');
124
124
  }
125
+ export function camelCaseToLowerSnakeCase(input) {
126
+ return camelCaseToUpperSnakeCase(input).toLowerCase();
127
+ }
125
128
  export function snakeToLowCamelNode(node) {
126
129
  if (!node.fileName) {
127
130
  throw new Error("Invalid Convert");
@@ -191,6 +194,9 @@ export function renameClassToMaterialized(className, language, withFileExtension
191
194
  export function throwException(message) {
192
195
  throw new Error(message);
193
196
  }
197
+ export function entryToFunctionName(_language, declaration, prefix, postfix) {
198
+ return `${prefix}${idl.getQualifiedName(declaration, "package.namespace.name").split('.').map(capitalize).join('')}${postfix}`;
199
+ }
194
200
  /**
195
201
  * Add a prefix to an enum value which camel case name coincidence
196
202
  * with the the same upper case name for an another enum value
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idlizer/core",
3
- "version": "2.1.10-arktscgen-6",
3
+ "version": "2.1.10-arktscgen-9",
4
4
  "description": "",
5
5
  "types": "build/lib/src/index.d.ts",
6
6
  "exports": {
@@ -36,7 +36,7 @@
36
36
  "mocha": "^9.2.2",
37
37
  "ts-node": "^10.9.2",
38
38
  "typescript": "4.9.5",
39
- "@types/node": "^18.0.0",
39
+ "@types/node": "^18.19.127",
40
40
  "rimraf": "^6.0.1"
41
41
  },
42
42
  "scripts": {