@idlizer/core 2.1.10-arktscgen-4 → 2.1.10-arktscgen-6
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/Language.d.ts +0 -1
- package/build/lib/src/Language.js +1 -3
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +18 -7
- package/build/lib/src/LanguageWriters/ArgConvertors.js +95 -103
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +13 -7
- package/build/lib/src/LanguageWriters/LanguageWriter.js +10 -2
- package/build/lib/src/LanguageWriters/common.d.ts +1 -0
- package/build/lib/src/LanguageWriters/common.js +2 -1
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +0 -1
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +1 -3
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +14 -8
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +88 -36
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +1 -0
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +10 -8
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +1 -1
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +9 -5
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -4
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +98 -44
- package/build/lib/src/LanguageWriters/index.d.ts +5 -4
- package/build/lib/src/LanguageWriters/index.js +8 -15
- package/build/lib/src/LanguageWriters/nameConvertor.d.ts +2 -0
- package/build/lib/src/LanguageWriters/nameConvertor.js +11 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +2 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +13 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -0
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +8 -2
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +2 -10
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +52 -92
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +8 -0
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +75 -27
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +5 -0
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +58 -18
- package/build/lib/src/LibraryInterface.d.ts +0 -1
- package/build/lib/src/config.d.ts +2 -1461
- package/build/lib/src/config.js +16 -32
- package/build/lib/src/configMerge.d.ts +3 -0
- package/build/lib/src/configMerge.js +63 -0
- package/build/lib/src/diagnostictypes.d.ts +1 -5
- package/build/lib/src/diagnostictypes.js +1 -27
- package/build/lib/src/from-idl/DtsPrinter.js +13 -6
- package/build/lib/src/from-idl/IDLLinter.d.ts +3 -4
- package/build/lib/src/from-idl/IDLLinter.js +30 -32
- package/build/lib/src/from-idl/deserialize.d.ts +3 -4
- package/build/lib/src/from-idl/deserialize.js +30 -642
- package/build/lib/src/from-idl/parser.d.ts +20 -2
- package/build/lib/src/from-idl/parser.js +97 -29
- package/build/lib/src/idl/builders.d.ts +43 -0
- package/build/lib/src/idl/builders.js +135 -0
- package/build/lib/src/idl/discriminators.d.ts +53 -0
- package/build/lib/src/idl/discriminators.js +232 -0
- package/build/lib/src/idl/dump.d.ts +48 -0
- package/build/lib/src/idl/dump.js +327 -0
- package/build/lib/src/idl/index.d.ts +9 -0
- package/build/lib/src/idl/index.js +23 -0
- package/build/lib/src/idl/keywords.d.ts +2 -0
- package/build/lib/src/{options.js → idl/keywords.js} +7 -3
- package/build/lib/src/idl/node.d.ts +233 -0
- package/build/lib/src/idl/node.js +103 -0
- package/build/lib/src/idl/stdlib.d.ts +34 -0
- package/build/lib/src/idl/stdlib.js +54 -0
- package/build/lib/src/idl/utils.d.ts +44 -0
- package/build/lib/src/idl/utils.js +215 -0
- package/build/lib/src/idl/visitors.d.ts +15 -0
- package/build/lib/src/idl/visitors.js +593 -0
- package/build/lib/src/index.d.ts +5 -6
- package/build/lib/src/index.js +6 -7
- package/build/lib/src/inheritance.d.ts +0 -2
- package/build/lib/src/inheritance.js +0 -17
- package/build/lib/src/inputPaths.d.ts +11 -0
- package/build/lib/src/inputPaths.js +81 -0
- package/build/lib/src/languageSpecificKeywords.d.ts +0 -1
- package/build/lib/src/languageSpecificKeywords.js +0 -5
- package/build/lib/src/peer-generation/ConflictingDeclarations.d.ts +6 -0
- package/build/lib/src/peer-generation/ConflictingDeclarations.js +43 -0
- package/build/lib/src/peer-generation/LayoutManager.d.ts +3 -1
- package/build/lib/src/peer-generation/LayoutManager.js +15 -0
- package/build/lib/src/peer-generation/Materialized.d.ts +8 -0
- package/build/lib/src/peer-generation/Materialized.js +26 -1
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +10 -18
- package/build/lib/src/peer-generation/PeerLibrary.js +63 -227
- package/build/lib/src/peer-generation/ReferenceResolver.d.ts +6 -1
- package/build/lib/src/peer-generation/ReferenceResolver.js +93 -2
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +6 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +15 -3
- package/build/lib/src/peer-generation/idl/common.d.ts +6 -2
- package/build/lib/src/peer-generation/idl/common.js +7 -7
- package/build/lib/src/peer-generation/isMaterialized.js +2 -3
- package/build/lib/src/peer-generation/modules.js +2 -0
- package/build/lib/src/peer-generation/toDeclaration.d.ts +4 -0
- package/build/lib/src/peer-generation/toDeclaration.js +53 -0
- package/build/lib/src/peer-generation/unions.d.ts +1 -1
- package/build/lib/src/peer-generation/unions.js +15 -7
- package/build/lib/src/resolveNamedNode.d.ts +1 -0
- package/build/lib/src/resolveNamedNode.js +7 -0
- package/build/lib/src/transformers/FqnTransformer.d.ts +1 -1
- package/build/lib/src/transformers/FqnTransformer.js +20 -12
- package/build/lib/src/transformers/GenericTransformer.d.ts +4 -3
- package/build/lib/src/transformers/GenericTransformer.js +252 -158
- package/build/lib/src/transformers/IdlTransformer.d.ts +6 -0
- package/build/lib/src/transformers/IdlTransformer.js +7 -0
- package/build/lib/src/transformers/NullTransformer.d.ts +1 -1
- package/build/lib/src/transformers/NullTransformer.js +27 -21
- package/build/lib/src/transformers/OnSerializeTransformer.d.ts +1 -1
- package/build/lib/src/transformers/OnSerializeTransformer.js +28 -13
- package/build/lib/src/util.d.ts +9 -39
- package/build/lib/src/util.js +65 -369
- package/package.json +44 -49
- package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +0 -37
- package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +0 -210
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +0 -83
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +0 -295
- package/build/lib/src/from-idl/webidl2-utils.d.ts +0 -21
- package/build/lib/src/from-idl/webidl2-utils.js +0 -87
- package/build/lib/src/idl.d.ts +0 -439
- package/build/lib/src/idl.js +0 -1367
- package/build/lib/src/idlize.d.ts +0 -25
- package/build/lib/src/idlize.js +0 -198
- package/build/lib/src/options.d.ts +0 -13
- package/build/lib/src/peer-generation/BuilderClass.d.ts +0 -20
- package/build/lib/src/peer-generation/BuilderClass.js +0 -68
- package/webidl2.js/dist/webidl2.js +0 -4622
- package/webidl2.js/package.json +0 -55
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
16
|
import { Language } from '../../Language';
|
|
17
17
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
18
|
-
import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, ReturnStatement } from "../LanguageWriter";
|
|
18
|
+
import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, ReturnStatement, } from "../LanguageWriter";
|
|
19
19
|
import { RuntimeType } from "../common";
|
|
20
20
|
import { isDefined } from "../../util";
|
|
21
|
-
import { removePoints } from '
|
|
21
|
+
import { removePoints } from '../../util';
|
|
22
22
|
export class KotlinLambdaReturnStatement {
|
|
23
23
|
constructor(expression) {
|
|
24
24
|
this.expression = expression;
|
|
@@ -87,7 +87,7 @@ export class KotlinEnumWithGetter {
|
|
|
87
87
|
const enumType = idl.createReferenceType(this.enumEntity);
|
|
88
88
|
writer.makeStaticBlock(() => {
|
|
89
89
|
members.forEach(it => {
|
|
90
|
-
writer.writeFieldDeclaration(it.name,
|
|
90
|
+
writer.writeFieldDeclaration(it.name, enumType, [FieldModifier.PUBLIC, FieldModifier.STATIC, FieldModifier.FINAL], false, writer.makeString(`${mangledName}(${it.stringId ? `\"${it.stringId}\"` : it.numberId})`));
|
|
91
91
|
});
|
|
92
92
|
});
|
|
93
93
|
const value = 'value';
|
|
@@ -230,6 +230,10 @@ export class KotlinLanguageWriter extends LanguageWriter {
|
|
|
230
230
|
}
|
|
231
231
|
return this.typeConvertor.convert(type);
|
|
232
232
|
}
|
|
233
|
+
get interopModule() {
|
|
234
|
+
return "koalaui.interop";
|
|
235
|
+
}
|
|
236
|
+
maybeSemicolon() { return ""; }
|
|
233
237
|
writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
|
|
234
238
|
let extendsClause = superClass ? `${superClass}` : undefined;
|
|
235
239
|
let implementsClause = interfaces ? `${interfaces.join(' , ')}` : undefined;
|
|
@@ -293,32 +297,75 @@ export class KotlinLanguageWriter extends LanguageWriter {
|
|
|
293
297
|
let name = method.name;
|
|
294
298
|
let signature = method.signature;
|
|
295
299
|
this.writeMethodImplementation(new Method(name, signature, [MethodModifier.STATIC]), writer => {
|
|
300
|
+
const pins = signature.args.flatMap((type, index) => this.pinArrayArgument(signature.argName(index), type));
|
|
301
|
+
const unpins = signature.args.flatMap((type, index) => this.unpinArrayArgument(signature.argName(index), type));
|
|
302
|
+
pins.filter(it => !!it).forEach(it => this.writeStatement(it));
|
|
296
303
|
const args = signature.args.map((type, index) => this.convertInteropArgument(signature.argName(index), type));
|
|
304
|
+
this.printForeignApiOptIn();
|
|
297
305
|
const interopCallExpression = this.makeFunctionCall(`kotlin${name}`, args);
|
|
298
306
|
if (signature.returnType === idl.IDLVoidType) {
|
|
299
307
|
this.writeExpressionStatement(interopCallExpression);
|
|
308
|
+
unpins.filter(it => !!it).forEach(it => this.writeStatement(it));
|
|
300
309
|
return;
|
|
301
310
|
}
|
|
302
311
|
const retval = "retval";
|
|
303
312
|
this.writeStatement(this.makeAssign(retval, undefined, interopCallExpression));
|
|
313
|
+
unpins.filter(it => !!it).forEach(it => this.writeStatement(it));
|
|
314
|
+
this.printForeignApiOptIn();
|
|
304
315
|
this.writeStatement(this.makeReturn(this.convertInteropReturnValue(retval, signature.returnType)));
|
|
305
316
|
});
|
|
306
317
|
}
|
|
318
|
+
printForeignApiOptIn() {
|
|
319
|
+
this.writeStatement(this.foreignApiOptIn);
|
|
320
|
+
}
|
|
321
|
+
get foreignApiOptIn() {
|
|
322
|
+
return new ExpressionStatement(this.makeString("@OptIn(ExperimentalForeignApi::class)"));
|
|
323
|
+
}
|
|
324
|
+
isPrimitiveArray(type) {
|
|
325
|
+
if (!idl.IDLContainerUtils.isSequence(type)) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
const elementType = type.elementType[0];
|
|
329
|
+
const allowedTypes = [idl.IDLU8Type, idl.IDLI32Type, idl.IDLF32Type];
|
|
330
|
+
return allowedTypes.includes(elementType);
|
|
331
|
+
}
|
|
332
|
+
pinArrayArgument(varName, type) {
|
|
333
|
+
if (this.isPrimitiveArray(type)) {
|
|
334
|
+
const pinCall = this.makeMethodCall(varName, "pin", []);
|
|
335
|
+
const assign = this.makeAssign(`${varName}Pinned`, undefined, pinCall, true, true);
|
|
336
|
+
return [this.foreignApiOptIn, assign];
|
|
337
|
+
}
|
|
338
|
+
return [];
|
|
339
|
+
}
|
|
340
|
+
unpinArrayArgument(varName, type) {
|
|
341
|
+
if (this.isPrimitiveArray(type)) {
|
|
342
|
+
const call = new ExpressionStatement(this.makeMethodCall(`${varName}Pinned`, "unpin", []));
|
|
343
|
+
return [this.foreignApiOptIn, call];
|
|
344
|
+
}
|
|
345
|
+
return [];
|
|
346
|
+
}
|
|
307
347
|
convertInteropArgument(varName, type) {
|
|
308
348
|
const realInteropType = this.getNodeName(type);
|
|
309
349
|
let expr;
|
|
310
350
|
switch (realInteropType) {
|
|
351
|
+
case "UByteArray":
|
|
352
|
+
case "IntArray":
|
|
353
|
+
case "FloatArray":
|
|
354
|
+
expr = `${varName}Pinned.addressOf(0)`;
|
|
355
|
+
break;
|
|
311
356
|
case "KPointer":
|
|
357
|
+
case "KNativePointer":
|
|
312
358
|
case "KSerializerBuffer":
|
|
313
359
|
expr = `${varName}.toCPointer<CPointed>()!!`;
|
|
314
360
|
break;
|
|
361
|
+
case "BigInteger":
|
|
315
362
|
case "KInt":
|
|
316
363
|
case "KLong":
|
|
317
364
|
case "KFloat":
|
|
318
365
|
case "KDouble":
|
|
366
|
+
case "String":
|
|
319
367
|
case "KStringPtr":
|
|
320
368
|
case "KBoolean":
|
|
321
|
-
case "Float64":
|
|
322
369
|
case "Float":
|
|
323
370
|
case "Double":
|
|
324
371
|
case "UInt":
|
|
@@ -333,12 +380,13 @@ export class KotlinLanguageWriter extends LanguageWriter {
|
|
|
333
380
|
const realInteropType = this.getNodeName(type);
|
|
334
381
|
let expr;
|
|
335
382
|
switch (realInteropType) {
|
|
383
|
+
case "KNativePointer":
|
|
336
384
|
case "KPointer":
|
|
337
385
|
expr = `${varName}.toLong()`;
|
|
338
386
|
break;
|
|
339
387
|
case "KInt":
|
|
340
388
|
case "KLong":
|
|
341
|
-
case "
|
|
389
|
+
case "BigInteger":
|
|
342
390
|
case "Float":
|
|
343
391
|
case "Double":
|
|
344
392
|
case "Long":
|
|
@@ -389,30 +437,21 @@ export class KotlinLanguageWriter extends LanguageWriter {
|
|
|
389
437
|
writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
|
|
390
438
|
let containerName = propName.concat("_container");
|
|
391
439
|
let truePropName = this.escapeKeyword(propName);
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
}
|
|
397
|
-
let isMutable = !modifiers.includes(FieldModifier.READONLY);
|
|
440
|
+
const isReadonly = modifiers.includes(FieldModifier.READONLY);
|
|
441
|
+
const isGetter = modifiers.includes(FieldModifier.GET);
|
|
442
|
+
const isSetter = modifiers.includes(FieldModifier.SET);
|
|
443
|
+
const isImmutable = isReadonly || (isGetter && !isSetter);
|
|
398
444
|
let isOverride = modifiers.includes(FieldModifier.OVERRIDE);
|
|
399
445
|
let initializer = initExpr ? ` = ${initExpr.asString()}` : "";
|
|
400
|
-
this.print(`${isOverride ? 'override ' : ''}public ${
|
|
446
|
+
this.print(`${isOverride ? 'override ' : ''}public ${isImmutable ? "val " : "var "}${truePropName}: ${this.getNodeName(propType)}${initializer}`);
|
|
401
447
|
if (getter) {
|
|
402
448
|
this.pushIndent();
|
|
403
449
|
this.writeGetterImplementation(getter.method, getter.op);
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
this.print(`set(${truePropName}) {`);
|
|
410
|
-
this.pushIndent();
|
|
411
|
-
this.print(`${containerName} = ${truePropName}`);
|
|
412
|
-
this.popIndent();
|
|
413
|
-
this.print(`}`);
|
|
414
|
-
}
|
|
415
|
-
}
|
|
450
|
+
this.popIndent();
|
|
451
|
+
}
|
|
452
|
+
if (setter) {
|
|
453
|
+
this.pushIndent();
|
|
454
|
+
this.writeSetterImplementation(setter.method, setter ? setter.op : (writer) => { writer.print(`${containerName} = ${truePropName}`); });
|
|
416
455
|
this.popIndent();
|
|
417
456
|
}
|
|
418
457
|
}
|
|
@@ -434,7 +473,16 @@ export class KotlinLanguageWriter extends LanguageWriter {
|
|
|
434
473
|
throw new Error("Not implemented");
|
|
435
474
|
}
|
|
436
475
|
writeConstant(constName, constType, constVal) {
|
|
437
|
-
|
|
476
|
+
this.print(`val ${constName} = ${constVal}`);
|
|
477
|
+
}
|
|
478
|
+
writeImports(moduleName, importedFeatures, aliases) {
|
|
479
|
+
if (importedFeatures.length !== aliases.length) {
|
|
480
|
+
throw new Error(`Inconsistent imports from ${moduleName}`);
|
|
481
|
+
}
|
|
482
|
+
for (let i = 0; i < importedFeatures.length; i++) {
|
|
483
|
+
const alias = aliases[i] ? ` as ${aliases[i]}` : ``;
|
|
484
|
+
this.writeExpressionStatement(this.makeString(`import ${moduleName}.${importedFeatures[i]}` + alias));
|
|
485
|
+
}
|
|
438
486
|
}
|
|
439
487
|
makeNull() {
|
|
440
488
|
return this.makeString('null');
|
|
@@ -529,14 +577,14 @@ export class KotlinLanguageWriter extends LanguageWriter {
|
|
|
529
577
|
}
|
|
530
578
|
else {
|
|
531
579
|
const op = equals ? "==" : "!=";
|
|
532
|
-
return this.makeNaryOp(op, [this.makeRuntimeType(type), this.makeString(`${typeVarName}
|
|
580
|
+
return this.makeNaryOp(op, [this.makeRuntimeType(type), this.makeString(`${typeVarName}`)]);
|
|
533
581
|
}
|
|
534
582
|
}
|
|
535
583
|
getTagType() {
|
|
536
584
|
return idl.createReferenceType("Tag");
|
|
537
585
|
}
|
|
538
586
|
getRuntimeType() {
|
|
539
|
-
return idl.
|
|
587
|
+
return idl.IDLI8Type;
|
|
540
588
|
}
|
|
541
589
|
makeTupleAssign(receiver, fields) {
|
|
542
590
|
throw new Error("Not implemented");
|
|
@@ -37,6 +37,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
37
37
|
resolver?: ReferenceResolver;
|
|
38
38
|
}): LanguageWriter;
|
|
39
39
|
getNodeName(type: idl.IDLNode): string;
|
|
40
|
+
get interopModule(): string;
|
|
40
41
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
|
|
41
42
|
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
|
|
42
43
|
writeFunctionDeclaration(name: string, signature: MethodSignature, generics?: string[]): void;
|
|
@@ -65,6 +66,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
65
66
|
}, initExpr?: LanguageExpression): void;
|
|
66
67
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
67
68
|
writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
69
|
+
writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
|
|
68
70
|
private writeDeclaration;
|
|
69
71
|
makeNull(type?: idl.IDLOptionalType): LanguageExpression;
|
|
70
72
|
makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
|
|
@@ -76,6 +78,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
76
78
|
makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
|
|
77
79
|
writePrintLog(message: string): void;
|
|
78
80
|
makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
|
|
81
|
+
instanceOf(value: string, type: idl.IDLType): LanguageExpression;
|
|
79
82
|
typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
|
|
80
83
|
getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
|
|
81
84
|
makeUndefined(): LanguageExpression;
|
|
@@ -98,5 +101,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
98
101
|
makeCallIsObject(value: string): LanguageExpression;
|
|
99
102
|
escapeKeyword(keyword: string): string;
|
|
100
103
|
discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
|
|
104
|
+
private writingClassBody;
|
|
105
|
+
classOp(op: () => void): void;
|
|
101
106
|
}
|
|
102
107
|
//# sourceMappingURL=TsLanguageWriter.d.ts.map
|
|
@@ -16,7 +16,7 @@ import * as idl from '../../idl';
|
|
|
16
16
|
import { isOptionalType } from '../../idl';
|
|
17
17
|
import { Language } from '../../Language';
|
|
18
18
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
19
|
-
import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
|
|
19
|
+
import { ACCESS_MODIFIERS_SET, AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
|
|
20
20
|
import { RuntimeType } from "../common";
|
|
21
21
|
import { rightmostIndexOf } from "../../util";
|
|
22
22
|
import { TSKeywords } from '../../languageSpecificKeywords';
|
|
@@ -67,7 +67,7 @@ class TSThrowErrorStatement {
|
|
|
67
67
|
this.message = message;
|
|
68
68
|
}
|
|
69
69
|
write(writer) {
|
|
70
|
-
writer.print(`throw new Error(
|
|
70
|
+
writer.print(`throw new Error('${this.message}')`);
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
export class TSReturnStatement extends ReturnStatement {
|
|
@@ -121,6 +121,7 @@ export class TsTupleAllocStatement {
|
|
|
121
121
|
export class TSLanguageWriter extends LanguageWriter {
|
|
122
122
|
constructor(printer, resolver, typeConvertor, language = Language.TS) {
|
|
123
123
|
super(printer, resolver, language);
|
|
124
|
+
this.writingClassBody = false;
|
|
124
125
|
this.typeConvertor = typeConvertor;
|
|
125
126
|
}
|
|
126
127
|
maybeSemicolon() { return ""; }
|
|
@@ -148,6 +149,9 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
148
149
|
}
|
|
149
150
|
return this.typeConvertor.convert(type);
|
|
150
151
|
}
|
|
152
|
+
get interopModule() {
|
|
153
|
+
return "@koalaui/interop";
|
|
154
|
+
}
|
|
151
155
|
writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
|
|
152
156
|
let extendsClause = superClass ? ` extends ${superClass}` : '';
|
|
153
157
|
let implementsClause = interfaces ? ` implements ${interfaces.join(",")}` : '';
|
|
@@ -156,7 +160,7 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
156
160
|
let abstractClause = isAbstract ? ` abstract` : '';
|
|
157
161
|
this.printer.print(`export${declaredClause}${abstractClause} class ${name}${genericsClause}${extendsClause}${implementsClause} {`);
|
|
158
162
|
this.pushIndent();
|
|
159
|
-
op(this);
|
|
163
|
+
this.classOp(() => op(this));
|
|
160
164
|
this.popIndent();
|
|
161
165
|
this.printer.print(`}`);
|
|
162
166
|
}
|
|
@@ -198,7 +202,7 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
198
202
|
value = member.alias;
|
|
199
203
|
}
|
|
200
204
|
else {
|
|
201
|
-
value = `${member.stringId != undefined ? `
|
|
205
|
+
value = `${member.stringId != undefined ? `'${member.stringId}'` : `${member.numberId}`}`;
|
|
202
206
|
}
|
|
203
207
|
const maybeComma = index < members.length - 1 ? "," : "";
|
|
204
208
|
this.printer.print(`${member.name} = ${value}${maybeComma}`);
|
|
@@ -207,11 +211,27 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
207
211
|
this.printer.print("}");
|
|
208
212
|
}
|
|
209
213
|
writeFieldDeclaration(name, type, modifiers, optional, initExpr) {
|
|
210
|
-
|
|
214
|
+
var _a;
|
|
215
|
+
if (this.writingClassBody && !(modifiers === null || modifiers === void 0 ? void 0 : modifiers.some(m => ACCESS_MODIFIERS_SET.has(m)))) {
|
|
216
|
+
modifiers = (_a = modifiers === null || modifiers === void 0 ? void 0 : modifiers.slice()) !== null && _a !== void 0 ? _a : [];
|
|
217
|
+
modifiers.unshift(FieldModifier.PUBLIC);
|
|
218
|
+
}
|
|
211
219
|
let prefix = this.makeFieldModifiersList(modifiers);
|
|
212
220
|
if (prefix)
|
|
213
221
|
prefix += " ";
|
|
214
|
-
|
|
222
|
+
const typeName = this.getNodeName(type);
|
|
223
|
+
const isGetter = modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(FieldModifier.GET);
|
|
224
|
+
const isSetter = modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(FieldModifier.SET);
|
|
225
|
+
if (isGetter) {
|
|
226
|
+
this.printer.print(`${prefix}get ${name}(): ${typeName}`);
|
|
227
|
+
}
|
|
228
|
+
if (isSetter) {
|
|
229
|
+
this.printer.print(`${prefix}set ${name}(value: ${typeName})`);
|
|
230
|
+
}
|
|
231
|
+
if (isGetter || isSetter)
|
|
232
|
+
return;
|
|
233
|
+
const init = initExpr != undefined ? ` = ${initExpr.asString()}` : ``;
|
|
234
|
+
this.printer.print(`${prefix}${name}${optional ? "?" : ""}: ${typeName}${init}`);
|
|
215
235
|
}
|
|
216
236
|
writeNativeMethodDeclaration(method) {
|
|
217
237
|
let name = method.name;
|
|
@@ -248,7 +268,6 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
248
268
|
}
|
|
249
269
|
writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
|
|
250
270
|
let isStatic = modifiers.includes(FieldModifier.STATIC);
|
|
251
|
-
let isMutable = !modifiers.includes(FieldModifier.READONLY);
|
|
252
271
|
let containerName = propName.concat("_container");
|
|
253
272
|
if (getter) {
|
|
254
273
|
if (!getter.op) {
|
|
@@ -258,17 +277,17 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
258
277
|
(writer) => {
|
|
259
278
|
writer.print(`return ${containerName}`);
|
|
260
279
|
});
|
|
261
|
-
if (isMutable) {
|
|
262
|
-
const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
|
|
263
|
-
this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC] : []), setter ? setter.op :
|
|
264
|
-
(writer) => {
|
|
265
|
-
writer.print(`${containerName} = ${propName}`);
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
280
|
}
|
|
269
|
-
|
|
270
|
-
|
|
281
|
+
if (setter) {
|
|
282
|
+
const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
|
|
283
|
+
this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC] : []), setter ? setter.op :
|
|
284
|
+
(writer) => {
|
|
285
|
+
writer.print(`${containerName} = ${propName}`);
|
|
286
|
+
});
|
|
271
287
|
}
|
|
288
|
+
if (getter || setter)
|
|
289
|
+
return;
|
|
290
|
+
this.writeFieldDeclaration(propName, propType, modifiers, idl.isOptionalType(propType), initExpr);
|
|
272
291
|
}
|
|
273
292
|
writeTypeDeclaration(decl) {
|
|
274
293
|
var _a;
|
|
@@ -279,6 +298,16 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
279
298
|
writeConstant(constName, constType, constVal) {
|
|
280
299
|
this.print(`export const ${constName}: ${this.getNodeName(constType)}${constVal ? ' = ' + constVal : ''}`);
|
|
281
300
|
}
|
|
301
|
+
writeImports(moduleName, importedFeatures, aliases) {
|
|
302
|
+
if (importedFeatures.length !== aliases.length) {
|
|
303
|
+
throw new Error(`Inconsistent imports from ${moduleName}`);
|
|
304
|
+
}
|
|
305
|
+
const importNodes = [];
|
|
306
|
+
for (let i = 0; i < importedFeatures.length; i++) {
|
|
307
|
+
importNodes.push(importedFeatures[i] + (aliases[i] ? ` as ${aliases[i]}` : ``));
|
|
308
|
+
}
|
|
309
|
+
this.writeExpressionStatement(this.makeString(`import { ${importNodes.join(', ')} } from '${moduleName}'`));
|
|
310
|
+
}
|
|
282
311
|
writeDeclaration(name, signature, needReturn, needBracket, modifiers, generics) {
|
|
283
312
|
let prefix = !modifiers ? undefined : this.supportedModifiers
|
|
284
313
|
.filter(it => modifiers.includes(it))
|
|
@@ -331,6 +360,11 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
331
360
|
var _a;
|
|
332
361
|
return new TSCastExpression(value, this.getNodeName(node), (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
|
|
333
362
|
}
|
|
363
|
+
instanceOf(value, type) {
|
|
364
|
+
return idl.IDLContainerUtils.isSequence(type)
|
|
365
|
+
? this.makeString(`Array.isArray(${value})`)
|
|
366
|
+
: super.instanceOf(value, type);
|
|
367
|
+
}
|
|
334
368
|
typeInstanceOf(type, value, members) {
|
|
335
369
|
if (idl.isInterface(type)) {
|
|
336
370
|
if (idl.isInterfaceSubkind(type)) {
|
|
@@ -417,16 +451,22 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
417
451
|
}
|
|
418
452
|
return this.makeString(`${value.asString()}.valueOf()`);
|
|
419
453
|
}
|
|
420
|
-
castToBoolean(value) { return
|
|
454
|
+
castToBoolean(value) { return `!!${value}`; }
|
|
421
455
|
makeCallIsObject(value) {
|
|
422
456
|
return this.makeString(`${value} instanceof Object`);
|
|
423
457
|
}
|
|
424
458
|
escapeKeyword(keyword) {
|
|
425
|
-
return TSKeywords.has(keyword) ? keyword + "
|
|
459
|
+
return TSKeywords.has(keyword) ? keyword + "Val" : keyword;
|
|
426
460
|
}
|
|
427
461
|
discriminate(value, index, type, runtimeTypes) {
|
|
428
462
|
const runtimeTypeList = runtimeTypes.map(ty => "RuntimeType." + RuntimeType[ty]).join(", ");
|
|
429
463
|
return `[${runtimeTypeList}].includes(runtimeType(${value}))`;
|
|
430
464
|
}
|
|
465
|
+
classOp(op) {
|
|
466
|
+
const old = this.writingClassBody;
|
|
467
|
+
this.writingClassBody = true;
|
|
468
|
+
op();
|
|
469
|
+
this.writingClassBody = old;
|
|
470
|
+
}
|
|
431
471
|
}
|
|
432
472
|
//# sourceMappingURL=TsLanguageWriter.js.map
|
|
@@ -9,7 +9,6 @@ export interface LibraryInterface extends ReferenceResolver {
|
|
|
9
9
|
get files(): idl.IDLFile[];
|
|
10
10
|
typeConvertor(param: string, type: idl.IDLType, isOptionalParam?: boolean): ArgConvertor;
|
|
11
11
|
declarationConvertor(param: string, type: idl.IDLReferenceType, declaration: idl.IDLEntry | undefined): ArgConvertor;
|
|
12
|
-
getInteropName(node: idl.IDLNode): string;
|
|
13
12
|
createTypeNameConvertor(language: Language): IdlNameConvertor;
|
|
14
13
|
createContinuationCallbackReference(continuationType: idl.IDLType): idl.IDLReferenceType;
|
|
15
14
|
getCurrentContext(): string | undefined;
|