@idlizer/core 2.0.41 → 2.1.0
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.d.ts +4 -1
- package/build/lib/src/LanguageWriters/ArgConvertors.js +61 -13
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +7 -5
- package/build/lib/src/LanguageWriters/LanguageWriter.js +8 -3
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +2 -1
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +27 -12
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +3 -1
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +3 -1
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -4
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +11 -1
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +44 -1
- package/build/lib/src/LanguageWriters/index.d.ts +2 -2
- package/build/lib/src/LanguageWriters/index.js +4 -5
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +4 -4
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +6 -5
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +4 -3
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +5 -8
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +6 -5
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +26 -30
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +3 -3
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +4 -4
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +3 -3
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +21 -12
- package/build/lib/src/config.d.ts +958 -12
- package/build/lib/src/config.js +24 -2
- package/build/lib/src/configDescriber.d.ts +85 -0
- package/build/lib/src/configDescriber.js +297 -0
- package/build/lib/src/from-idl/DtsPrinter.js +4 -2
- package/build/lib/src/from-idl/IDLLinter.d.ts +24 -0
- package/build/lib/src/from-idl/IDLLinter.js +81 -0
- package/build/lib/src/from-idl/deserialize.js +41 -4
- package/build/lib/src/from-idl/webidl2-utils.d.ts +1 -0
- package/build/lib/src/from-idl/webidl2-utils.js +3 -0
- package/build/lib/src/idl.d.ts +23 -26
- package/build/lib/src/idl.js +31 -29
- package/build/lib/src/idlize.d.ts +10 -1
- package/build/lib/src/idlize.js +54 -26
- package/build/lib/src/index.d.ts +2 -0
- package/build/lib/src/index.js +2 -0
- package/build/lib/src/options.d.ts +1 -0
- package/build/lib/src/peer-generation/Materialized.d.ts +2 -1
- package/build/lib/src/peer-generation/Materialized.js +3 -2
- package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
- package/build/lib/src/peer-generation/PeerFile.js +1 -2
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +0 -1
- package/build/lib/src/peer-generation/PeerLibrary.js +16 -3
- package/build/lib/src/peer-generation/PeerMethod.js +2 -16
- package/build/lib/src/peer-generation/idl/common.js +2 -2
- package/build/lib/src/peer-generation/isMaterialized.d.ts +1 -0
- package/build/lib/src/peer-generation/isMaterialized.js +21 -0
- package/build/lib/src/util.d.ts +1 -0
- package/build/lib/src/util.js +9 -0
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
2
|
-
import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
|
|
2
|
+
import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
|
|
3
3
|
import { TSLanguageWriter } from "./TsLanguageWriter";
|
|
4
4
|
import { IDLEnum, IDLType } from '../../idl';
|
|
5
5
|
import { ArgConvertor } from "../ArgConvertors";
|
|
@@ -28,6 +28,8 @@ export declare class ETSLambdaExpression extends LambdaExpression {
|
|
|
28
28
|
asString(): string;
|
|
29
29
|
}
|
|
30
30
|
export declare function generateTypeCheckerName(typeName: string): string;
|
|
31
|
+
export declare function generateEnumToOrdinalName(typeName: string): string;
|
|
32
|
+
export declare function generateEnumFromOrdinalName(typeName: string): string;
|
|
31
33
|
export declare function makeArrayTypeCheckCall(valueAccessor: string, typeName: string, writer: LanguageWriter): LanguageExpression;
|
|
32
34
|
export declare class ETSLanguageWriter extends TSLanguageWriter {
|
|
33
35
|
private arrayConvertor;
|
|
@@ -35,17 +37,15 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
35
37
|
fork(options?: {
|
|
36
38
|
resolver?: ReferenceResolver;
|
|
37
39
|
}): LanguageWriter;
|
|
38
|
-
writeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
|
|
39
40
|
makeAssign(variableName: string, type: IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
|
|
40
41
|
makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
|
|
41
42
|
makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
|
|
42
43
|
makeMapSize(map: string): LanguageExpression;
|
|
43
44
|
get supportedModifiers(): MethodModifier[];
|
|
44
|
-
makeUnsafeCast(convertor: ArgConvertor, param: string): string;
|
|
45
45
|
runtimeType(param: ArgConvertor, valueType: string, value: string): void;
|
|
46
46
|
makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index?: number): LanguageExpression;
|
|
47
47
|
enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
|
|
48
|
-
ordinalFromEnum(value: LanguageExpression,
|
|
48
|
+
ordinalFromEnum(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
|
|
49
49
|
makeDiscriminatorFromFields(convertor: {
|
|
50
50
|
targetType: (writer: LanguageWriter) => string;
|
|
51
51
|
}, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
|
|
@@ -54,8 +54,9 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
54
54
|
makeEnumEntity(enumEntity: IDLEnum, isExport: boolean): LanguageStatement;
|
|
55
55
|
getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
|
|
56
56
|
writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
57
|
+
isQuickType(type: IDLType): boolean;
|
|
58
|
+
writeNativeMethodDeclaration(method: Method): void;
|
|
57
59
|
writeProperty(propName: string, propType: IDLType): void;
|
|
58
|
-
makeEnumCast(value: string, _unsafe: boolean, convertor: ArgConvertor | undefined): string;
|
|
59
60
|
makeUnionVariantCondition(convertor: ArgConvertor, valueName: string, valueType: string, type: string, convertorIndex: number, runtimeTypeIndex: number): LanguageExpression;
|
|
60
61
|
makeCastCustomObject(customName: string, isGenericType: boolean): LanguageExpression;
|
|
61
62
|
makeHasOwnProperty(value: string, valueTypeName: string, property: string, propertyTypeName: string): LanguageExpression;
|
|
@@ -15,14 +15,13 @@
|
|
|
15
15
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
16
16
|
import { LambdaExpression, MethodModifier } from "../LanguageWriter";
|
|
17
17
|
import { TSCastExpression, TSLanguageWriter } from "./TsLanguageWriter";
|
|
18
|
-
import { getExtAttribute,
|
|
19
|
-
import { AggregateConvertor, ArrayConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor, OptionConvertor, UnionConvertor } from "../ArgConvertors";
|
|
18
|
+
import { getExtAttribute, IDLThisType } from '../../idl';
|
|
19
|
+
import { AggregateConvertor, ArrayConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor, OptionConvertor, UnionConvertor, BufferConvertor } from "../ArgConvertors";
|
|
20
20
|
import * as idl from '../../idl';
|
|
21
21
|
import { convertDeclaration } from "../nameConvertor";
|
|
22
22
|
import { createDeclarationNameConvertor } from "../../peer-generation/idl/IdlNameConvertor";
|
|
23
23
|
import { Language } from "../../Language";
|
|
24
24
|
import { RuntimeType } from "../common";
|
|
25
|
-
import { throwException } from "../../util";
|
|
26
25
|
////////////////////////////////////////////////////////////////
|
|
27
26
|
// STATEMENTS //
|
|
28
27
|
////////////////////////////////////////////////////////////////
|
|
@@ -138,6 +137,14 @@ export function generateTypeCheckerName(typeName) {
|
|
|
138
137
|
.replaceAll('.', ''); // Todo: hack for namespaces
|
|
139
138
|
return `is${typeName.replaceAll('[]', 'Brackets')}`;
|
|
140
139
|
}
|
|
140
|
+
export function generateEnumToOrdinalName(typeName) {
|
|
141
|
+
typeName = typeName.split(".").join("_");
|
|
142
|
+
return `${typeName}_ToOrdinal`;
|
|
143
|
+
}
|
|
144
|
+
export function generateEnumFromOrdinalName(typeName) {
|
|
145
|
+
typeName = typeName.split(".").join("_");
|
|
146
|
+
return `${typeName}_FromOrdinal`;
|
|
147
|
+
}
|
|
141
148
|
export function makeArrayTypeCheckCall(valueAccessor, typeName, writer) {
|
|
142
149
|
return writer.makeMethodCall("TypeChecker", generateTypeCheckerName(typeName), [writer.makeString(valueAccessor)
|
|
143
150
|
]);
|
|
@@ -154,12 +161,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
154
161
|
var _a;
|
|
155
162
|
return new ETSLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.arrayConvertor);
|
|
156
163
|
}
|
|
157
|
-
writeNativeMethodDeclaration(name, signature) {
|
|
158
|
-
if (signature.returnType === IDLThisType) {
|
|
159
|
-
throw new Error('static method can not return this!');
|
|
160
|
-
}
|
|
161
|
-
this.writeMethodDeclaration(name, signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
|
|
162
|
-
}
|
|
163
164
|
makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
|
|
164
165
|
return new EtsAssignStatement(variableName, type, expr, isDeclared, isConst);
|
|
165
166
|
}
|
|
@@ -175,13 +176,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
175
176
|
get supportedModifiers() {
|
|
176
177
|
return [MethodModifier.PUBLIC, MethodModifier.PRIVATE, MethodModifier.NATIVE, MethodModifier.STATIC];
|
|
177
178
|
}
|
|
178
|
-
makeUnsafeCast(convertor, param) {
|
|
179
|
-
if (idl.isEnum(convertor.idlType) && !param.endsWith(".value")) {
|
|
180
|
-
const isStringEnum = idl.isStringEnum(convertor.idlType);
|
|
181
|
-
return `(${param} as ${this.typeConvertor.convert(convertor.idlType)}).${isStringEnum ? 'ordinal' : 'value'}`;
|
|
182
|
-
}
|
|
183
|
-
return super.makeUnsafeCast(convertor, param);
|
|
184
|
-
}
|
|
185
179
|
runtimeType(param, valueType, value) {
|
|
186
180
|
super.runtimeType(param, valueType, value);
|
|
187
181
|
}
|
|
@@ -190,10 +184,11 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
190
184
|
}
|
|
191
185
|
enumFromOrdinal(value, enumEntry) {
|
|
192
186
|
const enumName = this.getNodeName(enumEntry);
|
|
193
|
-
return this.makeString(
|
|
187
|
+
return this.makeMethodCall('TypeChecker', generateEnumFromOrdinalName(enumName), [this.makeString(value.asString())]);
|
|
194
188
|
}
|
|
195
|
-
ordinalFromEnum(value,
|
|
196
|
-
|
|
189
|
+
ordinalFromEnum(value, enumEntry) {
|
|
190
|
+
const enumName = this.getNodeName(enumEntry);
|
|
191
|
+
return this.makeMethodCall('TypeChecker', generateEnumToOrdinalName(enumName), [this.makeString(value.asString())]);
|
|
197
192
|
}
|
|
198
193
|
makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
|
|
199
194
|
if (convertor instanceof AggregateConvertor
|
|
@@ -223,19 +218,17 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
223
218
|
// ArkTS does not support - 'this.?'
|
|
224
219
|
super.writeMethodCall(receiver, method, params, nullable && receiver !== "this");
|
|
225
220
|
}
|
|
226
|
-
|
|
227
|
-
|
|
221
|
+
isQuickType(type) {
|
|
222
|
+
return idl.asPromise(type) == undefined;
|
|
228
223
|
}
|
|
229
|
-
|
|
230
|
-
if (
|
|
231
|
-
|
|
232
|
-
}
|
|
233
|
-
const decl = this.resolver.toDeclaration(convertor.nativeType());
|
|
234
|
-
if (!idl.isEnum(decl)) {
|
|
235
|
-
throwException(`Declaration type must be Enum`);
|
|
224
|
+
writeNativeMethodDeclaration(method) {
|
|
225
|
+
if (method.signature.returnType === IDLThisType) {
|
|
226
|
+
throw new Error('static method can not return this!');
|
|
236
227
|
}
|
|
237
|
-
|
|
238
|
-
|
|
228
|
+
this.writeMethodDeclaration(method.name, method.signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
|
|
229
|
+
}
|
|
230
|
+
writeProperty(propName, propType) {
|
|
231
|
+
throw new Error("writeProperty for ArkTS is not implemented yet.");
|
|
239
232
|
}
|
|
240
233
|
makeUnionVariantCondition(convertor, valueName, valueType, type, convertorIndex, runtimeTypeIndex) {
|
|
241
234
|
if (idl.isEnum(this.resolver.toDeclaration(convertor.nativeType()))) {
|
|
@@ -289,6 +282,9 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
289
282
|
if (convertor instanceof InterfaceConvertor || convertor instanceof MaterializedClassConvertor) {
|
|
290
283
|
return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), convertor.declaration.properties.filter(it => !it.isStatic).map(it => it.name), duplicateMembers, this);
|
|
291
284
|
}
|
|
285
|
+
if (convertor instanceof BufferConvertor) {
|
|
286
|
+
return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), [], new Set(), this);
|
|
287
|
+
}
|
|
292
288
|
if (convertor instanceof AggregateConvertor) {
|
|
293
289
|
return makeInterfaceTypeCheckerCall(value, convertor.aliasName !== undefined ? convertor.aliasName : this.getNodeName(convertor.idlType), convertor.members.map(it => it[0]), duplicateMembers, this);
|
|
294
290
|
}
|
|
@@ -35,10 +35,10 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
35
35
|
resolver?: ReferenceResolver;
|
|
36
36
|
}): LanguageWriter;
|
|
37
37
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
|
|
38
|
-
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[]): void;
|
|
38
|
+
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
|
|
39
39
|
writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
40
40
|
writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
41
|
-
writeNativeMethodDeclaration(
|
|
41
|
+
writeNativeMethodDeclaration(method: Method): void;
|
|
42
42
|
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
43
43
|
writeProperty(propName: string, propType: idl.IDLType): void;
|
|
44
44
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
@@ -78,7 +78,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
78
78
|
ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
|
|
79
79
|
makeValueFromOption(value: string): LanguageExpression;
|
|
80
80
|
runtimeType(param: ArgConvertor, valueType: string, value: string): void;
|
|
81
|
-
makeEnumCast(
|
|
81
|
+
makeEnumCast(_enumEntry: idl.IDLEnum, enumName: string): string;
|
|
82
82
|
castToBoolean(value: string): string;
|
|
83
83
|
makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
|
|
84
84
|
}
|
|
@@ -116,7 +116,7 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
116
116
|
this.popIndent();
|
|
117
117
|
this.printer.print(`}`);
|
|
118
118
|
}
|
|
119
|
-
writeInterface(name, op, superInterfaces) {
|
|
119
|
+
writeInterface(name, op, superInterfaces, generics) {
|
|
120
120
|
let extendsClause = superInterfaces ? ` extends ${superInterfaces.join(",")}` : '';
|
|
121
121
|
this.printer.print(`interface ${name}${extendsClause} {`);
|
|
122
122
|
this.pushIndent();
|
|
@@ -136,8 +136,8 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
136
136
|
let prefix = this.makeFieldModifiersList(modifiers);
|
|
137
137
|
this.printer.print(`${prefix} ${(this.getNodeName(type))} ${name}${initExpr ? ` = ${initExpr.asString()}` : ""};`);
|
|
138
138
|
}
|
|
139
|
-
writeNativeMethodDeclaration(
|
|
140
|
-
this.writeMethodDeclaration(name, signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
|
|
139
|
+
writeNativeMethodDeclaration(method) {
|
|
140
|
+
this.writeMethodDeclaration(method.name, method.signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
|
|
141
141
|
}
|
|
142
142
|
writeConstructorImplementation(className, signature, op, superCall, modifiers) {
|
|
143
143
|
this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') : ''} ${className}(${signature.args.map((it, index) => `${this.getNodeName(it)} ${signature.argName(index)}`).join(", ")}) {`);
|
|
@@ -267,7 +267,7 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
267
267
|
runtimeType(param, valueType, value) {
|
|
268
268
|
this.writeStatement(this.makeAssign(valueType, undefined, this.makeRuntimeTypeGetterCall(value), false));
|
|
269
269
|
}
|
|
270
|
-
makeEnumCast(
|
|
270
|
+
makeEnumCast(_enumEntry, enumName) {
|
|
271
271
|
return `${enumName}.value`;
|
|
272
272
|
}
|
|
273
273
|
castToBoolean(value) { return value; }
|
|
@@ -38,7 +38,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
38
38
|
}): LanguageWriter;
|
|
39
39
|
getNodeName(type: idl.IDLNode): string;
|
|
40
40
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
|
|
41
|
-
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], isDeclared?: boolean): void;
|
|
41
|
+
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
|
|
42
42
|
writeFunctionDeclaration(name: string, signature: MethodSignature): void;
|
|
43
43
|
writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
|
|
44
44
|
private generateFunctionDeclaration;
|
|
@@ -49,7 +49,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
49
49
|
numberId: number;
|
|
50
50
|
}[]): void;
|
|
51
51
|
writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
52
|
-
writeNativeMethodDeclaration(
|
|
52
|
+
writeNativeMethodDeclaration(method: Method): void;
|
|
53
53
|
writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
|
|
54
54
|
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
55
55
|
writeMethodImplementation(method: Method, op: (writer: this) => void): void;
|
|
@@ -85,7 +85,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
85
85
|
get supportedFieldModifiers(): FieldModifier[];
|
|
86
86
|
enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
|
|
87
87
|
ordinalFromEnum(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
|
|
88
|
-
makeEnumCast(
|
|
88
|
+
makeEnumCast(enumEntry: idl.IDLEnum, param: string): string;
|
|
89
89
|
castToBoolean(value: string): string;
|
|
90
90
|
makeCallIsObject(value: string): LanguageExpression;
|
|
91
91
|
escapeKeyword(keyword: string): string;
|
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
|
+
import { isOptionalType } from '../../idl';
|
|
16
17
|
import { Language } from '../../Language';
|
|
17
18
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
18
19
|
import { AssignStatement, BlockStatement, CheckOptionalStatement, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
|
|
19
20
|
import { RuntimeType } from "../common";
|
|
20
|
-
import { throwException } from "../../util";
|
|
21
|
+
import { rightmostIndexOf, throwException } from "../../util";
|
|
21
22
|
import { TSKeywords } from '../../languageSpecificKeywords';
|
|
22
23
|
////////////////////////////////////////////////////////////////
|
|
23
24
|
// EXPRESSIONS //
|
|
@@ -155,9 +156,10 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
155
156
|
this.popIndent();
|
|
156
157
|
this.printer.print(`}`);
|
|
157
158
|
}
|
|
158
|
-
writeInterface(name, op, superInterfaces, isDeclared) {
|
|
159
|
+
writeInterface(name, op, superInterfaces, generics, isDeclared) {
|
|
160
|
+
const genericsClause = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : '';
|
|
159
161
|
let extendsClause = superInterfaces ? ` extends ${superInterfaces.join(",")}` : '';
|
|
160
|
-
this.printer.print(`export ${isDeclared ? "declare " : ""}interface ${name}${extendsClause} {`);
|
|
162
|
+
this.printer.print(`export ${isDeclared ? "declare " : ""}interface ${name}${genericsClause}${extendsClause} {`);
|
|
161
163
|
this.pushIndent();
|
|
162
164
|
op(this);
|
|
163
165
|
this.popIndent();
|
|
@@ -174,7 +176,11 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
174
176
|
this.printer.print('}');
|
|
175
177
|
}
|
|
176
178
|
generateFunctionDeclaration(name, signature) {
|
|
177
|
-
const
|
|
179
|
+
const rightmostRegularParameterIndex = rightmostIndexOf(signature.args, it => !isOptionalType(it));
|
|
180
|
+
const args = signature.args.map((it, index) => {
|
|
181
|
+
const optionalToken = idl.isOptionalType(it) && index > rightmostRegularParameterIndex ? '?' : '';
|
|
182
|
+
return `${signature.argName(index)}${optionalToken}: ${this.getNodeName(it)}`;
|
|
183
|
+
});
|
|
178
184
|
const returnType = this.getNodeName(signature.returnType);
|
|
179
185
|
return `export function ${name}(${args.join(", ")}): ${returnType}`;
|
|
180
186
|
}
|
|
@@ -202,7 +208,9 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
202
208
|
prefix += " ";
|
|
203
209
|
this.printer.print(`${prefix}${name}${optional ? "?" : ""}: ${this.getNodeName(type)}${init}`);
|
|
204
210
|
}
|
|
205
|
-
writeNativeMethodDeclaration(
|
|
211
|
+
writeNativeMethodDeclaration(method) {
|
|
212
|
+
let name = method.name;
|
|
213
|
+
let signature = method.signature;
|
|
206
214
|
this.writeMethodImplementation(new Method(name, signature, [MethodModifier.STATIC]), writer => {
|
|
207
215
|
const selfCallExpression = writer.makeFunctionCall(`this.${name}`, signature.args.map((_, i) => writer.makeString(this.escapeKeyword(signature.argName(i)))));
|
|
208
216
|
writer.writeStatement(new IfStatement(new NaryOpExpression("==", [writer.makeFunctionCall("this._LoadOnce", []), writer.makeString("true")]), new BlockStatement([
|
|
@@ -272,7 +280,7 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
272
280
|
canBeOptional.reverse();
|
|
273
281
|
const isOptional = signature.args.map((it, i) => idl.isOptionalType(it) && canBeOptional[i] && !isSetter);
|
|
274
282
|
const normalizedArgs = signature.args.map((it, i) => idl.isOptionalType(it) && isOptional[i] ? idl.maybeUnwrapOptionalType(it) : it);
|
|
275
|
-
this.printer.print(`${prefix}${name}${typeParams}(${normalizedArgs.map((it, index) => `${this.escapeKeyword(signature.argName(index))}${isOptional[index] ? "?" : ""}: ${this.getNodeName(it)}${signature.argDefault(index) ? ' = ' + signature.argDefault(index) : ""}`).join(", ")})${needReturn ? ": " + this.getNodeName(signature.returnType) : ""}
|
|
283
|
+
this.printer.print(`${prefix}${name}${typeParams}(${normalizedArgs.map((it, index) => `${this.escapeKeyword(signature.argName(index))}${isOptional[index] ? "?" : ""}: ${this.getNodeName(it)}${signature.argDefault(index) ? ' = ' + signature.argDefault(index) : ""}`).join(", ")})${needReturn ? ": " + this.getNodeName(signature.returnType) : ""}${needBracket ? " {" : ""}`);
|
|
276
284
|
}
|
|
277
285
|
makeNull() {
|
|
278
286
|
return new StringExpression("undefined");
|
|
@@ -364,7 +372,7 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
364
372
|
return this.makeAssign(receiver, undefined, this.makeString(`[${fields.map(it => `${it}!`).join(",")}]`), false);
|
|
365
373
|
}
|
|
366
374
|
get supportedModifiers() {
|
|
367
|
-
return [MethodModifier.PUBLIC, MethodModifier.PRIVATE, MethodModifier.STATIC];
|
|
375
|
+
return [MethodModifier.PUBLIC, MethodModifier.PRIVATE, MethodModifier.PROTECTED, MethodModifier.STATIC];
|
|
368
376
|
}
|
|
369
377
|
get supportedFieldModifiers() {
|
|
370
378
|
return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY, FieldModifier.STATIC];
|
|
@@ -380,11 +388,12 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
380
388
|
}
|
|
381
389
|
return value;
|
|
382
390
|
}
|
|
383
|
-
makeEnumCast(
|
|
384
|
-
if
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
391
|
+
makeEnumCast(enumEntry, param) {
|
|
392
|
+
// Take the ordinal value if Enum is a string, and valueOf when it is an integer
|
|
393
|
+
// Enum.valueOf() - compatible with ArkTS/TS
|
|
394
|
+
return idl.isStringEnum(enumEntry)
|
|
395
|
+
? this.ordinalFromEnum(this.makeString(param), idl.createReferenceType(enumEntry)).asString()
|
|
396
|
+
: `${param}.valueOf()`;
|
|
388
397
|
}
|
|
389
398
|
castToBoolean(value) { return `+${value}`; }
|
|
390
399
|
makeCallIsObject(value) {
|