@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.
- package/build/lib/src/LanguageWriters/ArgConvertors.js +26 -3
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +7 -4
- package/build/lib/src/LanguageWriters/LanguageWriter.js +41 -24
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +3 -2
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +1 -14
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +3 -45
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +7 -11
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +9 -2
- package/build/lib/src/from-idl/parser.d.ts +1 -1
- package/build/lib/src/from-idl/parser.js +3 -3
- package/build/lib/src/idl/dump.js +2 -1
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +2 -1
- package/build/lib/src/peer-generation/PeerLibrary.js +2 -1
- package/build/lib/src/transformers/FqnTransformer.js +12 -2
- package/build/lib/src/transformers/GenericTransformer.js +5 -5
- package/build/lib/src/util.d.ts +2 -0
- package/build/lib/src/util.js +6 -0
- package/package.json +2 -2
|
@@ -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
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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
|
-
|
|
493
|
-
this.print(
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
18
|
+
import { IDLThisType } from '../../idl';
|
|
19
19
|
import { AggregateConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor } from "../ArgConvertors";
|
|
20
20
|
import * as idl from '../../idl';
|
|
21
|
-
import {
|
|
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}).
|
|
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
|
-
|
|
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.
|
|
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('
|
|
239
|
+
let implementsClause = interfaces ? `${interfaces.join(', ')}` : undefined;
|
|
240
240
|
let inheritancePart = [extendsClause, implementsClause]
|
|
241
241
|
.filter(isDefined)
|
|
242
|
-
.join('
|
|
243
|
-
inheritancePart = inheritancePart.length != 0 ? '
|
|
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
|
-
|
|
623
|
-
this.
|
|
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.
|
|
450
|
-
|
|
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
|
-
|
|
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), (
|
|
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 &&
|
|
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((
|
|
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)}<${((
|
|
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
|
}
|
package/build/lib/src/util.d.ts
CHANGED
|
@@ -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
|
package/build/lib/src/util.js
CHANGED
|
@@ -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-
|
|
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.
|
|
39
|
+
"@types/node": "^18.19.127",
|
|
40
40
|
"rimraf": "^6.0.1"
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|