@idlizer/core 2.0.19 → 2.0.21
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 +1 -1
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +1 -0
- package/build/lib/src/LanguageWriters/LanguageWriter.js +3 -0
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +4 -0
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +11 -1
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +7 -1
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +22 -1
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +58 -0
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +275 -0
- package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +4 -0
- package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +11 -0
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +2 -1
- package/build/lib/src/LanguageWriters/index.d.ts +6 -1
- package/build/lib/src/LanguageWriters/index.js +38 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +2 -1
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +7 -4
- package/build/lib/src/config.d.ts +6 -0
- package/build/lib/src/config.js +13 -3
- package/build/lib/src/index.d.ts +3 -1
- package/build/lib/src/index.js +3 -1
- package/build/lib/src/peer-generation/LayoutManager.d.ts +3 -3
- package/build/lib/src/peer-generation/Materialized.d.ts +5 -3
- package/build/lib/src/peer-generation/Materialized.js +3 -1
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +2 -0
- package/build/lib/src/peer-generation/PeerLibrary.js +10 -3
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +4 -1
- package/build/lib/src/visitor.d.ts +43 -0
- package/build/lib/src/visitor.js +143 -0
- package/package.json +2 -2
|
@@ -19,7 +19,7 @@ import { RuntimeType } from "./common";
|
|
|
19
19
|
import { generatorTypePrefix } from "../config";
|
|
20
20
|
import { hashCodeFromString, warn } from "../util";
|
|
21
21
|
import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
|
|
22
|
-
import { InteropNameConvertor } from "./
|
|
22
|
+
import { InteropNameConvertor } from "./convertors/InteropConvertors";
|
|
23
23
|
import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
24
24
|
import { CppInteropConvertor } from "./convertors/CppConvertors";
|
|
25
25
|
import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
|
|
@@ -273,6 +273,7 @@ export declare abstract class LanguageWriter {
|
|
|
273
273
|
writeStatement(stmt: LanguageStatement): void;
|
|
274
274
|
writeStatements(...statements: LanguageStatement[]): void;
|
|
275
275
|
writeExpressionStatement(smth: LanguageExpression): void;
|
|
276
|
+
writeExpressionStatements(...statements: LanguageExpression[]): void;
|
|
276
277
|
writeStaticBlock(op: (writer: this) => void): void;
|
|
277
278
|
makeRef(type: idl.IDLType, _options?: MakeRefOptions): idl.IDLType;
|
|
278
279
|
makeThis(): LanguageExpression;
|
|
@@ -437,6 +437,9 @@ export class LanguageWriter {
|
|
|
437
437
|
writeExpressionStatement(smth) {
|
|
438
438
|
this.writeStatement(new ExpressionStatement(smth));
|
|
439
439
|
}
|
|
440
|
+
writeExpressionStatements(...statements) {
|
|
441
|
+
statements.forEach(it => this.writeExpressionStatement(it));
|
|
442
|
+
}
|
|
440
443
|
writeStaticBlock(op) {
|
|
441
444
|
this.print("static {");
|
|
442
445
|
this.pushIndent();
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as idl from '../../idl';
|
|
2
2
|
import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
|
|
3
3
|
import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
|
|
4
|
+
import { InteropArgConvertor } from './InteropConvertors';
|
|
4
5
|
export declare class CJTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
|
|
5
6
|
protected resolver: ReferenceResolver;
|
|
6
7
|
constructor(resolver: ReferenceResolver);
|
|
@@ -27,4 +28,7 @@ export declare class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvert
|
|
|
27
28
|
convert(type: idl.IDLNode): string;
|
|
28
29
|
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
29
30
|
}
|
|
31
|
+
export declare class CJInteropArgConvertor extends InteropArgConvertor {
|
|
32
|
+
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
33
|
+
}
|
|
30
34
|
//# sourceMappingURL=CJConvertors.d.ts.map
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
16
|
import { convertNode, convertType } from '../nameConvertor';
|
|
17
|
+
import { InteropArgConvertor } from './InteropConvertors';
|
|
17
18
|
export class CJTypeNameConvertor {
|
|
18
19
|
constructor(resolver) {
|
|
19
20
|
this.resolver = resolver;
|
|
@@ -105,7 +106,7 @@ export class CJTypeNameConvertor {
|
|
|
105
106
|
case idl.IDLF64Type: return 'Float64';
|
|
106
107
|
case idl.IDLPointerType: return 'UInt64';
|
|
107
108
|
case idl.IDLVoidType: return 'Unit';
|
|
108
|
-
case idl.IDLBufferType: return '
|
|
109
|
+
case idl.IDLBufferType: return 'Array<UInt8>';
|
|
109
110
|
}
|
|
110
111
|
throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
|
|
111
112
|
}
|
|
@@ -151,4 +152,13 @@ export class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvertor {
|
|
|
151
152
|
return super.convertPrimitiveType(type);
|
|
152
153
|
}
|
|
153
154
|
}
|
|
155
|
+
export class CJInteropArgConvertor extends InteropArgConvertor {
|
|
156
|
+
convertPrimitiveType(type) {
|
|
157
|
+
switch (type) {
|
|
158
|
+
case idl.IDLNumberType: return "Float64";
|
|
159
|
+
case idl.IDLLengthType: return "Ark_Length";
|
|
160
|
+
}
|
|
161
|
+
return super.convertPrimitiveType(type);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
154
164
|
//# sourceMappingURL=CJConvertors.js.map
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import * as idl from '../../idl';
|
|
2
2
|
import { IdlNameConvertor } from "../nameConvertor";
|
|
3
|
-
import { InteropConvertor } from '
|
|
3
|
+
import { InteropConvertor } from './InteropConvertors';
|
|
4
|
+
import { InteropArgConvertor } from './InteropConvertors';
|
|
4
5
|
export declare class CppInteropConvertor extends InteropConvertor implements IdlNameConvertor {
|
|
5
6
|
private unwrap;
|
|
6
7
|
convert(node: idl.IDLNode): string;
|
|
7
8
|
}
|
|
9
|
+
export declare class CppInteropArgConvertor extends InteropArgConvertor {
|
|
10
|
+
static INSTANCE: CppInteropArgConvertor;
|
|
11
|
+
convertOptional(type: idl.IDLOptionalType): string;
|
|
12
|
+
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
13
|
+
}
|
|
8
14
|
//# sourceMappingURL=CppConvertors.d.ts.map
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
16
|
import { generatorConfiguration } from "../../config";
|
|
17
|
-
import { InteropConvertor } from '
|
|
17
|
+
import { InteropConvertor } from './InteropConvertors';
|
|
18
|
+
import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
|
|
19
|
+
import { InteropArgConvertor } from './InteropConvertors';
|
|
18
20
|
export class CppInteropConvertor extends InteropConvertor {
|
|
19
21
|
unwrap(type, result) {
|
|
20
22
|
const conf = generatorConfiguration();
|
|
@@ -34,4 +36,23 @@ export class CppInteropConvertor extends InteropConvertor {
|
|
|
34
36
|
return this.unwrap(node, this.convertNode(node));
|
|
35
37
|
}
|
|
36
38
|
}
|
|
39
|
+
export class CppInteropArgConvertor extends InteropArgConvertor {
|
|
40
|
+
convertOptional(type) {
|
|
41
|
+
return PrimitiveTypesInstance.NativePointer.getText();
|
|
42
|
+
}
|
|
43
|
+
convertPrimitiveType(type) {
|
|
44
|
+
switch (type) {
|
|
45
|
+
case idl.IDLBooleanType: return PrimitiveTypesInstance.Boolean.getText();
|
|
46
|
+
case idl.IDLI32Type: return PrimitiveTypesInstance.Int32.getText();
|
|
47
|
+
case idl.IDLNumberType: return "KInteropNumber";
|
|
48
|
+
case idl.IDLBufferType: return "Ark_Buffer";
|
|
49
|
+
case idl.IDLLengthType: return "KLength";
|
|
50
|
+
case idl.IDLFunctionType: return PrimitiveTypesInstance.Int32.getText();
|
|
51
|
+
case idl.IDLDate: return PrimitiveTypesInstance.Int64.getText();
|
|
52
|
+
case idl.IDLPointerType: return PrimitiveTypesInstance.NativePointer.getText();
|
|
53
|
+
}
|
|
54
|
+
return super.convertPrimitiveType(type);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
CppInteropArgConvertor.INSTANCE = new CppInteropArgConvertor();
|
|
37
58
|
//# sourceMappingURL=CppConvertors.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as idl from '../../idl';
|
|
2
|
+
import { PeerMethod } from '../../peer-generation/PeerMethod';
|
|
3
|
+
import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
|
|
4
|
+
import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
|
|
5
|
+
export interface ConvertResult {
|
|
6
|
+
text: string;
|
|
7
|
+
noPrefix: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class InteropConvertor implements NodeConvertor<ConvertResult> {
|
|
10
|
+
protected resolver: ReferenceResolver;
|
|
11
|
+
constructor(resolver: ReferenceResolver);
|
|
12
|
+
private make;
|
|
13
|
+
convertNode(node: idl.IDLNode): ConvertResult;
|
|
14
|
+
convertNamespace(node: idl.IDLNamespace): ConvertResult;
|
|
15
|
+
convertInterface(node: idl.IDLInterface): ConvertResult;
|
|
16
|
+
convertEnum(node: idl.IDLEnum): ConvertResult;
|
|
17
|
+
convertTypedef(node: idl.IDLTypedef): ConvertResult;
|
|
18
|
+
convertCallback(node: idl.IDLCallback): ConvertResult;
|
|
19
|
+
convertMethod(node: idl.IDLMethod): ConvertResult;
|
|
20
|
+
convertConstant(node: idl.IDLConstant): ConvertResult;
|
|
21
|
+
convertOptional(type: idl.IDLOptionalType): ConvertResult;
|
|
22
|
+
convertUnion(type: idl.IDLUnionType): ConvertResult;
|
|
23
|
+
convertContainer(type: idl.IDLContainerType): ConvertResult;
|
|
24
|
+
convertImport(type: idl.IDLReferenceType, _: string): ConvertResult;
|
|
25
|
+
convertTypeReference(type: idl.IDLReferenceType): ConvertResult;
|
|
26
|
+
convertTypeParameter(type: idl.IDLTypeParameterType): ConvertResult;
|
|
27
|
+
convertPrimitiveType(type: idl.IDLPrimitiveType): ConvertResult;
|
|
28
|
+
private enumName;
|
|
29
|
+
private computeTargetTypeLiteralName;
|
|
30
|
+
}
|
|
31
|
+
export declare class InteropNameConvertor implements IdlNameConvertor {
|
|
32
|
+
protected resolver: ReferenceResolver;
|
|
33
|
+
private readonly interopConvertor;
|
|
34
|
+
constructor(resolver: ReferenceResolver);
|
|
35
|
+
convert(node: idl.IDLNode): string;
|
|
36
|
+
}
|
|
37
|
+
export declare class InteropReturnTypeConvertor implements TypeConvertor<string> {
|
|
38
|
+
isVoid(method: PeerMethod): boolean;
|
|
39
|
+
convert(type: idl.IDLType): string;
|
|
40
|
+
convertContainer(type: idl.IDLContainerType): string;
|
|
41
|
+
convertImport(type: idl.IDLReferenceType, importClause: string): string;
|
|
42
|
+
convertOptional(type: idl.IDLOptionalType): string;
|
|
43
|
+
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
44
|
+
convertTypeParameter(type: idl.IDLTypeParameterType): string;
|
|
45
|
+
convertTypeReference(type: idl.IDLReferenceType): string;
|
|
46
|
+
convertUnion(type: idl.IDLUnionType): string;
|
|
47
|
+
}
|
|
48
|
+
export declare class InteropArgConvertor implements TypeConvertor<string> {
|
|
49
|
+
convert(type: idl.IDLType): string;
|
|
50
|
+
convertContainer(type: idl.IDLContainerType): string;
|
|
51
|
+
convertImport(type: idl.IDLReferenceType, importClause: string): string;
|
|
52
|
+
convertOptional(type: idl.IDLOptionalType): string;
|
|
53
|
+
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
54
|
+
convertTypeParameter(type: idl.IDLTypeParameterType): string;
|
|
55
|
+
convertTypeReference(type: idl.IDLReferenceType): string;
|
|
56
|
+
convertUnion(type: idl.IDLUnionType): string;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=InteropConvertors.d.ts.map
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*/
|
|
15
|
+
import { generatorConfiguration } from '../../config';
|
|
16
|
+
import * as idl from '../../idl';
|
|
17
|
+
import { qualifiedName } from '../../peer-generation/idl/common';
|
|
18
|
+
import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
|
|
19
|
+
import { capitalize } from '../../util';
|
|
20
|
+
import { maybeTransformManagedCallback } from '../ArgConvertors';
|
|
21
|
+
import { convertNode, convertType } from '../nameConvertor';
|
|
22
|
+
export class InteropConvertor {
|
|
23
|
+
constructor(resolver) {
|
|
24
|
+
this.resolver = resolver;
|
|
25
|
+
}
|
|
26
|
+
make(text, noPrefix = false) {
|
|
27
|
+
return { text, noPrefix };
|
|
28
|
+
}
|
|
29
|
+
convertNode(node) {
|
|
30
|
+
return convertNode(this, node);
|
|
31
|
+
}
|
|
32
|
+
convertNamespace(node) {
|
|
33
|
+
throw new Error("Internal error: namespaces are not allowed on the interop layer");
|
|
34
|
+
}
|
|
35
|
+
convertInterface(node) {
|
|
36
|
+
switch (node.subkind) {
|
|
37
|
+
case idl.IDLInterfaceSubkind.AnonymousInterface:
|
|
38
|
+
return node.name
|
|
39
|
+
? this.make(node.name)
|
|
40
|
+
: this.make(this.computeTargetTypeLiteralName(node), true);
|
|
41
|
+
case idl.IDLInterfaceSubkind.Interface:
|
|
42
|
+
case idl.IDLInterfaceSubkind.Class:
|
|
43
|
+
if (idl.hasExtAttribute(node, idl.IDLExtendedAttributes.Predefined)) {
|
|
44
|
+
return this.make(node.name, true);
|
|
45
|
+
}
|
|
46
|
+
return this.make(node.name);
|
|
47
|
+
case idl.IDLInterfaceSubkind.Tuple:
|
|
48
|
+
return node.name
|
|
49
|
+
? this.make(node.name)
|
|
50
|
+
: this.make(`Tuple_${node.properties.map(it => this.convertNode(idl.maybeOptional(it.type, it.isOptional)).text).join("_")}`, true);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
convertEnum(node) {
|
|
54
|
+
return this.make(this.enumName(node));
|
|
55
|
+
}
|
|
56
|
+
convertTypedef(node) {
|
|
57
|
+
return this.make(node.name);
|
|
58
|
+
}
|
|
59
|
+
convertCallback(node) {
|
|
60
|
+
return this.make(generatorConfiguration().param("LibraryPrefix") + node.name, true);
|
|
61
|
+
}
|
|
62
|
+
convertMethod(node) {
|
|
63
|
+
return this.make(node.name);
|
|
64
|
+
}
|
|
65
|
+
convertConstant(node) {
|
|
66
|
+
return this.make(node.name);
|
|
67
|
+
}
|
|
68
|
+
/////////////////////////////////////////////////////////////////////////////////////////
|
|
69
|
+
convertOptional(type) {
|
|
70
|
+
return this.convertNode(type.type);
|
|
71
|
+
}
|
|
72
|
+
convertUnion(type) {
|
|
73
|
+
return this.make(type.name, false);
|
|
74
|
+
}
|
|
75
|
+
convertContainer(type) {
|
|
76
|
+
if (idl.IDLContainerUtils.isPromise(type)) {
|
|
77
|
+
return this.make(`Promise_${this.convertNode(type.elementType[0]).text}`);
|
|
78
|
+
}
|
|
79
|
+
if (idl.IDLContainerUtils.isSequence(type)) {
|
|
80
|
+
if (type.elementType[0] === idl.IDLU8Type) {
|
|
81
|
+
return this.make(`uint8_t*`, true);
|
|
82
|
+
}
|
|
83
|
+
return this.make(`Array_${this.convertNode(type.elementType[0]).text}`, true);
|
|
84
|
+
}
|
|
85
|
+
if (idl.IDLContainerUtils.isRecord(type)) {
|
|
86
|
+
return this.make(`Map_${this.convertNode(type.elementType[0]).text}_${this.convertNode(type.elementType[1]).text}`, true);
|
|
87
|
+
}
|
|
88
|
+
throw new Error(`Unmapped container type ${idl.DebugUtils.debugPrintType(type)}`);
|
|
89
|
+
}
|
|
90
|
+
convertImport(type, _) {
|
|
91
|
+
return this.make(idl.IDLCustomObjectType.name);
|
|
92
|
+
}
|
|
93
|
+
convertTypeReference(type) {
|
|
94
|
+
var _a;
|
|
95
|
+
const refName = type.name;
|
|
96
|
+
switch (refName) {
|
|
97
|
+
case "object":
|
|
98
|
+
case "Object":
|
|
99
|
+
return this.make('CustomObject');
|
|
100
|
+
}
|
|
101
|
+
if (generatorConfiguration().paramArray("knownParameterized").includes(refName)) {
|
|
102
|
+
return this.make('CustomObject');
|
|
103
|
+
}
|
|
104
|
+
let decl = this.resolver.toDeclaration(type);
|
|
105
|
+
if (idl.isCallback(decl)) {
|
|
106
|
+
decl = (_a = maybeTransformManagedCallback(decl)) !== null && _a !== void 0 ? _a : decl;
|
|
107
|
+
}
|
|
108
|
+
if (idl.isType(decl)) {
|
|
109
|
+
if (idl.isReferenceType(decl)) {
|
|
110
|
+
return this.make(`${capitalize(decl.name)}`);
|
|
111
|
+
}
|
|
112
|
+
return this.convertNode(decl);
|
|
113
|
+
}
|
|
114
|
+
let res = this.convertNode(decl);
|
|
115
|
+
if (type.name === "Optional")
|
|
116
|
+
res = this.make("Opt_" + res.text, true);
|
|
117
|
+
return res;
|
|
118
|
+
}
|
|
119
|
+
convertTypeParameter(type) {
|
|
120
|
+
return this.make('CustomObject');
|
|
121
|
+
}
|
|
122
|
+
convertPrimitiveType(type) {
|
|
123
|
+
switch (type) {
|
|
124
|
+
case idl.IDLVoidType: return this.make('void', true);
|
|
125
|
+
case idl.IDLI8Type: return this.make(`Int8`);
|
|
126
|
+
case idl.IDLU8Type: return this.make(`UInt8`);
|
|
127
|
+
case idl.IDLI16Type: return this.make(`Int16`);
|
|
128
|
+
case idl.IDLU16Type: return this.make(`UInt16`);
|
|
129
|
+
case idl.IDLI32Type: return this.make(`Int32`);
|
|
130
|
+
case idl.IDLU32Type: return this.make(`UInt32`);
|
|
131
|
+
case idl.IDLI64Type: return this.make(`Int64`);
|
|
132
|
+
case idl.IDLU64Type: return this.make(`UInt64`);
|
|
133
|
+
case idl.IDLF32Type: return this.make(`Float32`);
|
|
134
|
+
case idl.IDLF64Type: return this.make(`Float64`);
|
|
135
|
+
case idl.IDLNumberType: return this.make(`Number`);
|
|
136
|
+
case idl.IDLStringType: return this.make(`String`);
|
|
137
|
+
case idl.IDLBooleanType: return this.make(`Boolean`);
|
|
138
|
+
case idl.IDLPointerType: return this.make('NativePointer');
|
|
139
|
+
case idl.IDLUnknownType:
|
|
140
|
+
case idl.IDLCustomObjectType:
|
|
141
|
+
case idl.IDLAnyType: return this.make(`CustomObject`);
|
|
142
|
+
case idl.IDLUndefinedType: return this.make(`Undefined`);
|
|
143
|
+
case idl.IDLLengthType: return this.make(`Length`);
|
|
144
|
+
case idl.IDLFunctionType: return this.make(`Function`);
|
|
145
|
+
case idl.IDLDate: return this.make(`Date`);
|
|
146
|
+
case idl.IDLBufferType: return this.make('Buffer');
|
|
147
|
+
case idl.IDLPointerType: return this.make('Pointer');
|
|
148
|
+
}
|
|
149
|
+
throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
|
|
150
|
+
}
|
|
151
|
+
enumName(target) {
|
|
152
|
+
return qualifiedName(target, "_");
|
|
153
|
+
}
|
|
154
|
+
computeTargetTypeLiteralName(decl) {
|
|
155
|
+
const map = new Map();
|
|
156
|
+
for (const prop of decl.properties) {
|
|
157
|
+
const type = this.convertNode(prop.type);
|
|
158
|
+
const values = map.has(type.text) ? map.get(type.text) : [];
|
|
159
|
+
values.push(prop.name);
|
|
160
|
+
map.set(type.text, values);
|
|
161
|
+
}
|
|
162
|
+
const names = Array.from(map.keys()).map(key => `${key}_${map.get(key).join('_')}`);
|
|
163
|
+
return `Literal_${names.join('_')}`;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export class InteropNameConvertor {
|
|
167
|
+
constructor(resolver) {
|
|
168
|
+
this.resolver = resolver;
|
|
169
|
+
this.interopConvertor = new InteropConvertor(resolver);
|
|
170
|
+
}
|
|
171
|
+
convert(node) {
|
|
172
|
+
return this.interopConvertor.convertNode(node).text;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
export class InteropReturnTypeConvertor {
|
|
176
|
+
isVoid(method) {
|
|
177
|
+
return this.convert(method.returnType) === idl.IDLVoidType.name;
|
|
178
|
+
}
|
|
179
|
+
convert(type) {
|
|
180
|
+
return convertType(this, type);
|
|
181
|
+
}
|
|
182
|
+
convertContainer(type) {
|
|
183
|
+
if (idl.IDLContainerUtils.isSequence(type) || idl.IDLContainerUtils.isPromise(type)) {
|
|
184
|
+
// TODO return array by some way
|
|
185
|
+
return "void";
|
|
186
|
+
}
|
|
187
|
+
else
|
|
188
|
+
return PrimitiveTypesInstance.NativePointer.getText();
|
|
189
|
+
}
|
|
190
|
+
convertImport(type, importClause) {
|
|
191
|
+
throw new Error(`Cannot pass import type ${type.name} through interop`);
|
|
192
|
+
}
|
|
193
|
+
convertOptional(type) {
|
|
194
|
+
return this.convert(type.type);
|
|
195
|
+
}
|
|
196
|
+
convertPrimitiveType(type) {
|
|
197
|
+
switch (type) {
|
|
198
|
+
case idl.IDLI8Type:
|
|
199
|
+
case idl.IDLU8Type:
|
|
200
|
+
case idl.IDLI16Type:
|
|
201
|
+
case idl.IDLU16Type:
|
|
202
|
+
case idl.IDLI32Type:
|
|
203
|
+
case idl.IDLU32Type:
|
|
204
|
+
case idl.IDLI64Type:
|
|
205
|
+
case idl.IDLU64Type:
|
|
206
|
+
case idl.IDLF16Type:
|
|
207
|
+
case idl.IDLF32Type:
|
|
208
|
+
case idl.IDLF64Type:
|
|
209
|
+
case idl.IDLNumberType: return PrimitiveTypesInstance.Int32.getText();
|
|
210
|
+
case idl.IDLBooleanType: return PrimitiveTypesInstance.Boolean.getText();
|
|
211
|
+
case idl.IDLAnyType:
|
|
212
|
+
case idl.IDLBufferType:
|
|
213
|
+
case idl.IDLStringType:
|
|
214
|
+
case idl.IDLThisType:
|
|
215
|
+
case idl.IDLUndefinedType:
|
|
216
|
+
case idl.IDLUnknownType:
|
|
217
|
+
case idl.IDLVoidType: return idl.IDLVoidType.name;
|
|
218
|
+
case idl.IDLPointerType: return PrimitiveTypesInstance.NativePointer.getText();
|
|
219
|
+
}
|
|
220
|
+
throw new Error(`Cannot pass primitive type ${type.name} through interop`);
|
|
221
|
+
}
|
|
222
|
+
convertTypeParameter(type) {
|
|
223
|
+
return idl.IDLVoidType.name;
|
|
224
|
+
}
|
|
225
|
+
convertTypeReference(type) {
|
|
226
|
+
if (type.name.endsWith("Attribute"))
|
|
227
|
+
return idl.IDLVoidType.name;
|
|
228
|
+
return PrimitiveTypesInstance.NativePointer.getText();
|
|
229
|
+
}
|
|
230
|
+
convertUnion(type) {
|
|
231
|
+
return PrimitiveTypesInstance.NativePointer.getText();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
export class InteropArgConvertor {
|
|
235
|
+
convert(type) {
|
|
236
|
+
return convertType(this, type);
|
|
237
|
+
}
|
|
238
|
+
convertContainer(type) {
|
|
239
|
+
throw new Error(`Cannot pass container types through interop`);
|
|
240
|
+
}
|
|
241
|
+
convertImport(type, importClause) {
|
|
242
|
+
throw new Error(`Cannot pass import types through interop`);
|
|
243
|
+
}
|
|
244
|
+
convertOptional(type) {
|
|
245
|
+
return "KNativePointer";
|
|
246
|
+
}
|
|
247
|
+
convertPrimitiveType(type) {
|
|
248
|
+
switch (type) {
|
|
249
|
+
case idl.IDLI32Type: return "KInt";
|
|
250
|
+
case idl.IDLF32Type: return "KFloat";
|
|
251
|
+
case idl.IDLNumberType: return 'number';
|
|
252
|
+
case idl.IDLBigintType: return 'bigint';
|
|
253
|
+
case idl.IDLBooleanType:
|
|
254
|
+
case idl.IDLFunctionType: return 'KInt';
|
|
255
|
+
case idl.IDLStringType: return 'KStringPtr';
|
|
256
|
+
case idl.IDLBufferType: return `ArrayBuffer`;
|
|
257
|
+
case idl.IDLLengthType: return 'Length';
|
|
258
|
+
case idl.IDLDate: return 'KLong';
|
|
259
|
+
case idl.IDLUndefinedType:
|
|
260
|
+
case idl.IDLVoidType: return PrimitiveTypesInstance.NativePointer.getText();
|
|
261
|
+
case idl.IDLPointerType: return "KPointer"; //PrimitiveType.NativePointer.getText()
|
|
262
|
+
}
|
|
263
|
+
throw new Error(`Cannot pass primitive type ${type.name} through interop`);
|
|
264
|
+
}
|
|
265
|
+
convertTypeParameter(type) {
|
|
266
|
+
throw new Error("Cannot pass type parameters through interop");
|
|
267
|
+
}
|
|
268
|
+
convertTypeReference(type) {
|
|
269
|
+
throw new Error(`Cannot pass type references through interop`);
|
|
270
|
+
}
|
|
271
|
+
convertUnion(type) {
|
|
272
|
+
throw new Error("Cannot pass union types through interop");
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=InteropConvertors.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as idl from '../../idl';
|
|
2
2
|
import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
|
|
3
3
|
import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
|
|
4
|
+
import { InteropArgConvertor } from './InteropConvertors';
|
|
4
5
|
export declare class JavaTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
|
|
5
6
|
private resolver;
|
|
6
7
|
constructor(resolver: ReferenceResolver);
|
|
@@ -28,5 +29,8 @@ declare class JavaIdlNodeToSolidStringConvertor extends JavaTypeNameConvertor {
|
|
|
28
29
|
protected solidConvertor: import("../../util").Lazy<this>;
|
|
29
30
|
convertContainer(type: idl.IDLContainerType): string;
|
|
30
31
|
}
|
|
32
|
+
export declare class JavaInteropArgConvertor extends InteropArgConvertor {
|
|
33
|
+
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
34
|
+
}
|
|
31
35
|
export {};
|
|
32
36
|
//# sourceMappingURL=JavaConvertors.d.ts.map
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
16
|
import { lazy } from '../../util';
|
|
17
17
|
import { convertNode, convertType } from '../nameConvertor';
|
|
18
|
+
import { InteropArgConvertor } from './InteropConvertors';
|
|
18
19
|
function convertJavaOptional(type) {
|
|
19
20
|
switch (type) {
|
|
20
21
|
case 'boolean': return 'Opt_Boolean';
|
|
@@ -172,4 +173,14 @@ class JavaIdlNodeToSolidStringConvertor extends JavaTypeNameConvertor {
|
|
|
172
173
|
throw new Error(`IDL type ${idl.DebugUtils.debugPrintType(type)} not supported`);
|
|
173
174
|
}
|
|
174
175
|
}
|
|
176
|
+
export class JavaInteropArgConvertor extends InteropArgConvertor {
|
|
177
|
+
convertPrimitiveType(type) {
|
|
178
|
+
switch (type) {
|
|
179
|
+
case idl.IDLNumberType: return "double";
|
|
180
|
+
case idl.IDLLengthType: return "String";
|
|
181
|
+
case idl.IDLBooleanType: return "boolean";
|
|
182
|
+
}
|
|
183
|
+
return super.convertPrimitiveType(type);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
175
186
|
//# sourceMappingURL=JavaConvertors.js.map
|
|
@@ -126,6 +126,8 @@ export class TSTypeNameConvertor {
|
|
|
126
126
|
case idl.IDLBooleanType: return 'boolean';
|
|
127
127
|
case idl.IDLI32Type:
|
|
128
128
|
return 'int32';
|
|
129
|
+
case idl.IDLF32Type:
|
|
130
|
+
return 'float32';
|
|
129
131
|
case idl.IDLI8Type:
|
|
130
132
|
case idl.IDLU8Type:
|
|
131
133
|
case idl.IDLI16Type:
|
|
@@ -133,7 +135,6 @@ export class TSTypeNameConvertor {
|
|
|
133
135
|
case idl.IDLU32Type:
|
|
134
136
|
case idl.IDLI64Type:
|
|
135
137
|
case idl.IDLU64Type:
|
|
136
|
-
case idl.IDLF32Type:
|
|
137
138
|
case idl.IDLF64Type:
|
|
138
139
|
case idl.IDLNumberType:
|
|
139
140
|
return 'number';
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import { Language } from "../Language";
|
|
2
|
+
import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
3
|
+
import { InteropArgConvertor } from "./convertors/InteropConvertors";
|
|
4
|
+
import { LanguageWriter } from "./LanguageWriter";
|
|
1
5
|
export * from "./nameConvertor";
|
|
2
|
-
export
|
|
6
|
+
export declare function createLanguageWriter(language: Language, resolver?: ReferenceResolver): LanguageWriter;
|
|
7
|
+
export declare function createInteropArgConvertor(language: Language): InteropArgConvertor;
|
|
3
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
import { IndentedPrinter } from "../IndentedPrinter";
|
|
2
|
+
import { Language } from "../Language";
|
|
3
|
+
import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
|
|
4
|
+
import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
5
|
+
import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameConvertor } from "./convertors/CJConvertors";
|
|
6
|
+
import { CppInteropArgConvertor, CppInteropConvertor } from "./convertors/CppConvertors";
|
|
7
|
+
import { ETSTypeNameConvertor } from "./convertors/ETSConvertors";
|
|
8
|
+
import { InteropArgConvertor } from "./convertors/InteropConvertors";
|
|
9
|
+
import { JavaInteropArgConvertor, JavaTypeNameConvertor } from "./convertors/JavaConvertors";
|
|
10
|
+
import { TSTypeNameConvertor } from "./convertors/TSConvertors";
|
|
11
|
+
import { CJLanguageWriter } from "./writers/CJLanguageWriter";
|
|
12
|
+
import { CppLanguageWriter } from "./writers/CppLanguageWriter";
|
|
13
|
+
import { ETSLanguageWriter } from "./writers/ETSLanguageWriter";
|
|
14
|
+
import { JavaLanguageWriter } from "./writers/JavaLanguageWriter";
|
|
15
|
+
import { TSLanguageWriter } from "./writers/TsLanguageWriter";
|
|
1
16
|
export * from "./nameConvertor";
|
|
2
|
-
export
|
|
17
|
+
export function createLanguageWriter(language, resolver) {
|
|
18
|
+
resolver !== null && resolver !== void 0 ? resolver : (resolver = EmptyReferenceResolver);
|
|
19
|
+
const printer = new IndentedPrinter();
|
|
20
|
+
switch (language) {
|
|
21
|
+
case Language.TS: return new TSLanguageWriter(printer, resolver, new TSTypeNameConvertor(resolver));
|
|
22
|
+
case Language.ARKTS: return new ETSLanguageWriter(printer, resolver, new ETSTypeNameConvertor(resolver), new CppInteropConvertor(resolver));
|
|
23
|
+
case Language.JAVA: return new JavaLanguageWriter(printer, resolver, new JavaTypeNameConvertor(resolver));
|
|
24
|
+
case Language.CPP: return new CppLanguageWriter(printer, resolver, new CppInteropConvertor(resolver), PrimitiveTypesInstance);
|
|
25
|
+
case Language.CJ: return new CJLanguageWriter(printer, resolver, new CJTypeNameConvertor(resolver), new CJIDLTypeToForeignStringConvertor(resolver));
|
|
26
|
+
default: throw new Error(`Language ${language.toString()} is not supported`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function createInteropArgConvertor(language) {
|
|
30
|
+
switch (language) {
|
|
31
|
+
case Language.TS:
|
|
32
|
+
case Language.ARKTS: return new InteropArgConvertor();
|
|
33
|
+
case Language.CPP: return CppInteropArgConvertor.INSTANCE;
|
|
34
|
+
case Language.JAVA: return new JavaInteropArgConvertor();
|
|
35
|
+
case Language.CJ: return new CJInteropArgConvertor();
|
|
36
|
+
}
|
|
37
|
+
throw new Error(`InteropArgConvertor for language ${language} not implemented`);
|
|
38
|
+
}
|
|
39
|
+
const EmptyReferenceResolver = createEmptyReferenceResolver();
|
|
3
40
|
//# sourceMappingURL=index.js.map
|
|
@@ -329,7 +329,7 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
329
329
|
const init = initExpr != undefined ? ` = ${initExpr.asString()}` : ``;
|
|
330
330
|
name = this.escapeKeyword(name);
|
|
331
331
|
let prefix = this.makeFieldModifiersList(modifiers);
|
|
332
|
-
this.printer.print(`${prefix ? prefix.concat(" ") : ""}var ${name}: ${this.getNodeName(type)}${init}`);
|
|
332
|
+
this.printer.print(`${prefix ? prefix.concat(" ") : ""}var ${name}: ${this.getNodeName(idl.maybeOptional(type, optional))}${init}`);
|
|
333
333
|
}
|
|
334
334
|
writeMethodDeclaration(name, signature, modifiers) {
|
|
335
335
|
this.writeDeclaration(name, signature, modifiers);
|
|
@@ -395,6 +395,7 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
395
395
|
}
|
|
396
396
|
writeNativeMethodDeclaration(name, signature) {
|
|
397
397
|
let signture = `${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.typeForeignConvertor.convert(it)}`).join(", ")}`;
|
|
398
|
+
name = name.startsWith('_') ? name.slice(1) : name;
|
|
398
399
|
this.print(`func ${name}(${signture}): ${this.typeForeignConvertor.convert(signature.returnType)}`);
|
|
399
400
|
}
|
|
400
401
|
makeEnumCast(enumName, _unsafe, _convertor) {
|
|
@@ -37,7 +37,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
37
37
|
resolver?: ReferenceResolver;
|
|
38
38
|
}): LanguageWriter;
|
|
39
39
|
getNodeName(type: idl.IDLNode): string;
|
|
40
|
-
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean): void;
|
|
40
|
+
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
|
|
41
41
|
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], isDeclared?: boolean): void;
|
|
42
42
|
writeFunctionDeclaration(name: string, signature: MethodSignature): void;
|
|
43
43
|
writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
|
|
@@ -135,11 +135,13 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
135
135
|
getNodeName(type) {
|
|
136
136
|
return this.typeConvertor.convert(type);
|
|
137
137
|
}
|
|
138
|
-
writeClass(name, op, superClass, interfaces, generics, isDeclared) {
|
|
138
|
+
writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
|
|
139
139
|
let extendsClause = superClass ? ` extends ${superClass}` : '';
|
|
140
140
|
let implementsClause = interfaces ? ` implements ${interfaces.join(",")}` : '';
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
let genericsClause = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : '';
|
|
142
|
+
let declaredClause = isDeclared ? ` declare` : '';
|
|
143
|
+
let abstractClause = isAbstract ? ` abstract` : '';
|
|
144
|
+
this.printer.print(`export${declaredClause}${abstractClause} class ${name}${genericsClause}${extendsClause}${implementsClause} {`);
|
|
143
145
|
this.pushIndent();
|
|
144
146
|
op(this);
|
|
145
147
|
this.popIndent();
|
|
@@ -165,7 +167,8 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
165
167
|
}
|
|
166
168
|
generateFunctionDeclaration(name, signature) {
|
|
167
169
|
const args = signature.args.map((it, index) => `${signature.argName(index)}${idl.isOptionalType(it) ? '?' : ''}: ${this.getNodeName(it)}`);
|
|
168
|
-
|
|
170
|
+
const returnType = this.getNodeName(signature.returnType);
|
|
171
|
+
return `export function ${name}(${args.join(", ")}): ${returnType}`;
|
|
169
172
|
}
|
|
170
173
|
writeEnum(name, members) {
|
|
171
174
|
this.printer.print(`export enum ${name} {`);
|
|
@@ -2,6 +2,12 @@ export interface GeneratorConfiguration {
|
|
|
2
2
|
param<T>(name: string): T;
|
|
3
3
|
paramArray<T>(name: string): T[];
|
|
4
4
|
}
|
|
5
|
+
export declare class BaseGeneratorConfiguration implements GeneratorConfiguration {
|
|
6
|
+
protected params: Record<string, any>;
|
|
7
|
+
constructor(params?: Record<string, any>);
|
|
8
|
+
param<T>(name: string): T;
|
|
9
|
+
paramArray<T>(name: string): T[];
|
|
10
|
+
}
|
|
5
11
|
export declare function setDefaultConfiguration(config: GeneratorConfiguration): void;
|
|
6
12
|
export declare function generatorConfiguration(): GeneratorConfiguration;
|
|
7
13
|
export declare function generatorTypePrefix(): string;
|
package/build/lib/src/config.js
CHANGED
|
@@ -12,15 +12,25 @@
|
|
|
12
12
|
* See the License for the specific language governing permissions and
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
|
-
class
|
|
15
|
+
export class BaseGeneratorConfiguration {
|
|
16
|
+
constructor(params = {}) {
|
|
17
|
+
this.params = {};
|
|
18
|
+
Object.assign(this.params, params);
|
|
19
|
+
}
|
|
16
20
|
param(name) {
|
|
21
|
+
if (name in this.params) {
|
|
22
|
+
return this.params[name];
|
|
23
|
+
}
|
|
17
24
|
throw new Error(`${name} is unknown`);
|
|
18
25
|
}
|
|
19
26
|
paramArray(name) {
|
|
20
|
-
|
|
27
|
+
if (name in this.params) {
|
|
28
|
+
return this.params[name];
|
|
29
|
+
}
|
|
30
|
+
throw new Error(`${name} is unknown`);
|
|
21
31
|
}
|
|
22
32
|
}
|
|
23
|
-
let currentConfig = new
|
|
33
|
+
let currentConfig = new BaseGeneratorConfiguration();
|
|
24
34
|
export function setDefaultConfiguration(config) {
|
|
25
35
|
currentConfig = config;
|
|
26
36
|
}
|
package/build/lib/src/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from "./config";
|
|
2
2
|
export * from "./configMerge";
|
|
3
3
|
export * from "./idl";
|
|
4
|
+
export * from "./visitor";
|
|
4
5
|
export * from "./library";
|
|
5
6
|
export * from "./idlize";
|
|
6
7
|
export * from "./inheritance";
|
|
@@ -15,18 +16,19 @@ export * from "./LanguageWriters/LanguageWriter";
|
|
|
15
16
|
export * from "./LanguageWriters/ArgConvertors";
|
|
16
17
|
export * from "./LanguageWriters/common";
|
|
17
18
|
export * from "./LanguageWriters/nameConvertor";
|
|
18
|
-
export * from "./LanguageWriters/InteropConvertor";
|
|
19
19
|
export * from "./LanguageWriters/convertors/CppConvertors";
|
|
20
20
|
export * from "./LanguageWriters/convertors/TSConvertors";
|
|
21
21
|
export * from "./LanguageWriters/convertors/ETSConvertors";
|
|
22
22
|
export * from "./LanguageWriters/convertors/JavaConvertors";
|
|
23
23
|
export * from "./LanguageWriters/convertors/CJConvertors";
|
|
24
|
+
export * from "./LanguageWriters/convertors/InteropConvertors";
|
|
24
25
|
export * from "./LanguageWriters/writers/CJLanguageWriter";
|
|
25
26
|
export * from "./LanguageWriters/writers/CLikeLanguageWriter";
|
|
26
27
|
export * from "./LanguageWriters/writers/CppLanguageWriter";
|
|
27
28
|
export * from "./LanguageWriters/writers/JavaLanguageWriter";
|
|
28
29
|
export * from "./LanguageWriters/writers/TsLanguageWriter";
|
|
29
30
|
export * from "./LanguageWriters/writers/ETSLanguageWriter";
|
|
31
|
+
export * from "./LanguageWriters/nameConvertor";
|
|
30
32
|
export * from "./peer-generation/idl/IdlNameConvertor";
|
|
31
33
|
export * from "./peer-generation/LayoutManager";
|
|
32
34
|
export * from "./peer-generation/PrimitiveType";
|
package/build/lib/src/index.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
export * from "./config";
|
|
16
16
|
export * from "./configMerge";
|
|
17
17
|
export * from "./idl";
|
|
18
|
+
export * from "./visitor";
|
|
18
19
|
export * from "./library";
|
|
19
20
|
export * from "./idlize";
|
|
20
21
|
export * from "./inheritance";
|
|
@@ -29,18 +30,19 @@ export * from "./LanguageWriters/LanguageWriter";
|
|
|
29
30
|
export * from "./LanguageWriters/ArgConvertors";
|
|
30
31
|
export * from "./LanguageWriters/common";
|
|
31
32
|
export * from "./LanguageWriters/nameConvertor";
|
|
32
|
-
export * from "./LanguageWriters/InteropConvertor";
|
|
33
33
|
export * from "./LanguageWriters/convertors/CppConvertors";
|
|
34
34
|
export * from "./LanguageWriters/convertors/TSConvertors";
|
|
35
35
|
export * from "./LanguageWriters/convertors/ETSConvertors";
|
|
36
36
|
export * from "./LanguageWriters/convertors/JavaConvertors";
|
|
37
37
|
export * from "./LanguageWriters/convertors/CJConvertors";
|
|
38
|
+
export * from "./LanguageWriters/convertors/InteropConvertors";
|
|
38
39
|
export * from "./LanguageWriters/writers/CJLanguageWriter";
|
|
39
40
|
export * from "./LanguageWriters/writers/CLikeLanguageWriter";
|
|
40
41
|
export * from "./LanguageWriters/writers/CppLanguageWriter";
|
|
41
42
|
export * from "./LanguageWriters/writers/JavaLanguageWriter";
|
|
42
43
|
export * from "./LanguageWriters/writers/TsLanguageWriter";
|
|
43
44
|
export * from "./LanguageWriters/writers/ETSLanguageWriter";
|
|
45
|
+
export * from "./LanguageWriters/nameConvertor";
|
|
44
46
|
export * from "./peer-generation/idl/IdlNameConvertor";
|
|
45
47
|
export * from "./peer-generation/LayoutManager";
|
|
46
48
|
export * from "./peer-generation/PrimitiveType";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IDLEntry } from "../idl";
|
|
2
2
|
export declare enum LayoutNodeRole {
|
|
3
3
|
PEER = 0,
|
|
4
4
|
INTERFACE = 1
|
|
5
5
|
}
|
|
6
6
|
export interface LayoutManagerStrategy {
|
|
7
|
-
resolve(node:
|
|
7
|
+
resolve(node: IDLEntry, role: LayoutNodeRole): string;
|
|
8
8
|
}
|
|
9
9
|
export declare class LayoutManager {
|
|
10
10
|
private strategy;
|
|
11
11
|
constructor(strategy: LayoutManagerStrategy);
|
|
12
|
-
resolve(node:
|
|
12
|
+
resolve(node: IDLEntry, role: LayoutNodeRole): string;
|
|
13
13
|
static Empty(): LayoutManager;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=LayoutManager.d.ts.map
|
|
@@ -42,12 +42,14 @@ export declare class MaterializedClass implements PeerClassBase {
|
|
|
42
42
|
readonly interfaces: idl.IDLReferenceType[] | undefined;
|
|
43
43
|
readonly generics: string[] | undefined;
|
|
44
44
|
readonly fields: MaterializedField[];
|
|
45
|
-
readonly ctor: MaterializedMethod;
|
|
46
|
-
readonly finalizer: MaterializedMethod;
|
|
45
|
+
readonly ctor: MaterializedMethod | undefined;
|
|
46
|
+
readonly finalizer: MaterializedMethod | undefined;
|
|
47
47
|
readonly methods: MaterializedMethod[];
|
|
48
48
|
readonly needBeGenerated: boolean;
|
|
49
49
|
readonly taggedMethods: idl.IDLMethod[];
|
|
50
|
-
constructor(decl: idl.IDLInterface, className: string, isInterface: boolean, superClass: idl.IDLReferenceType | undefined, interfaces: idl.IDLReferenceType[] | undefined, generics: string[] | undefined, fields: MaterializedField[], ctor: MaterializedMethod
|
|
50
|
+
constructor(decl: idl.IDLInterface, className: string, isInterface: boolean, superClass: idl.IDLReferenceType | undefined, interfaces: idl.IDLReferenceType[] | undefined, generics: string[] | undefined, fields: MaterializedField[], ctor: MaterializedMethod | undefined, // undefined when used for global functions
|
|
51
|
+
finalizer: MaterializedMethod | undefined, // undefined when used for global functions
|
|
52
|
+
methods: MaterializedMethod[], needBeGenerated?: boolean, taggedMethods?: idl.IDLMethod[]);
|
|
51
53
|
getComponentName(): string;
|
|
52
54
|
getImplementationName(): string;
|
|
53
55
|
generatedName(isCallSignature: boolean): string;
|
|
@@ -134,7 +134,9 @@ export function copyMaterializedMethod(method, overrides) {
|
|
|
134
134
|
return copied;
|
|
135
135
|
}
|
|
136
136
|
export class MaterializedClass {
|
|
137
|
-
constructor(decl, className, isInterface, superClass, interfaces, generics, fields, ctor,
|
|
137
|
+
constructor(decl, className, isInterface, superClass, interfaces, generics, fields, ctor, // undefined when used for global functions
|
|
138
|
+
finalizer, // undefined when used for global functions
|
|
139
|
+
methods, needBeGenerated = true, taggedMethods = []) {
|
|
138
140
|
this.decl = decl;
|
|
139
141
|
this.className = className;
|
|
140
142
|
this.isInterface = isInterface;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as idl from '../idl';
|
|
2
2
|
import { Language } from '../Language';
|
|
3
|
+
import { LanguageWriter } from '../LanguageWriters/LanguageWriter';
|
|
3
4
|
import { IdlNameConvertor } from '../LanguageWriters';
|
|
4
5
|
import { ArgConvertor } from "../LanguageWriters/ArgConvertors";
|
|
5
6
|
import { LibraryInterface } from '../LibraryInterface';
|
|
@@ -24,6 +25,7 @@ export declare class PeerLibrary implements LibraryInterface {
|
|
|
24
25
|
constructor(language: Language);
|
|
25
26
|
name: string;
|
|
26
27
|
readonly customComponentMethods: string[];
|
|
28
|
+
createLanguageWriter(language?: Language): LanguageWriter;
|
|
27
29
|
createTypeNameConvertor(language: Language): IdlNameConvertor;
|
|
28
30
|
protected readonly targetNameConvertorInstance: IdlNameConvertor;
|
|
29
31
|
private readonly interopNameConvertorInstance;
|
|
@@ -15,13 +15,15 @@
|
|
|
15
15
|
import { warn } from 'console';
|
|
16
16
|
import * as idl from '../idl';
|
|
17
17
|
import { Language } from '../Language';
|
|
18
|
-
import {
|
|
18
|
+
import { createLanguageWriter } from '../LanguageWriters';
|
|
19
19
|
import { BufferConvertor, CallbackConvertor, DateConvertor, MapConvertor, PointerConvertor, TupleConvertor, TypeAliasConvertor, AggregateConvertor, StringConvertor, ClassConvertor, ArrayConvertor, FunctionConvertor, OptionConvertor, NumberConvertor, NumericConvertor, CustomTypeConvertor, UnionConvertor, MaterializedClassConvertor, BooleanConvertor, EnumConvertor, UndefinedConvertor, VoidConvertor, ImportTypeConvertor, InterfaceConvertor, } from "../LanguageWriters/ArgConvertors";
|
|
20
|
+
import { InteropNameConvertor } from '../LanguageWriters/convertors/InteropConvertors';
|
|
20
21
|
import { CJTypeNameConvertor } from '../LanguageWriters/convertors/CJConvertors';
|
|
21
22
|
import { CppInteropConvertor } from '../LanguageWriters/convertors/CppConvertors';
|
|
22
23
|
import { ETSTypeNameConvertor } from '../LanguageWriters/convertors/ETSConvertors';
|
|
23
24
|
import { JavaTypeNameConvertor } from '../LanguageWriters/convertors/JavaConvertors';
|
|
24
25
|
import { TSTypeNameConvertor } from '../LanguageWriters/convertors/TSConvertors';
|
|
26
|
+
import { isBuilderClass } from './BuilderClass';
|
|
25
27
|
import { generateSyntheticFunctionName, isImportAttr } from './idl/common';
|
|
26
28
|
import { isMaterialized } from './Materialized';
|
|
27
29
|
import { LayoutManager } from './LayoutManager';
|
|
@@ -53,6 +55,9 @@ export class PeerLibrary {
|
|
|
53
55
|
this.targetNameConvertorInstance = this.createTypeNameConvertor(this.language);
|
|
54
56
|
this.interopNameConvertorInstance = new InteropNameConvertor(this);
|
|
55
57
|
}
|
|
58
|
+
createLanguageWriter(language) {
|
|
59
|
+
return createLanguageWriter(language !== null && language !== void 0 ? language : this.language, this);
|
|
60
|
+
}
|
|
56
61
|
createTypeNameConvertor(language) {
|
|
57
62
|
switch (language) {
|
|
58
63
|
case Language.TS: return new TSTypeNameConvertor(this);
|
|
@@ -243,11 +248,13 @@ export class PeerLibrary {
|
|
|
243
248
|
if (isMaterialized(declaration, this)) {
|
|
244
249
|
return new MaterializedClassConvertor(param, declaration);
|
|
245
250
|
}
|
|
251
|
+
if (isBuilderClass(declaration)) {
|
|
252
|
+
return new ClassConvertor(this, declarationName, param, declaration);
|
|
253
|
+
}
|
|
246
254
|
switch (declaration.subkind) {
|
|
247
255
|
case idl.IDLInterfaceSubkind.Interface:
|
|
248
|
-
return new InterfaceConvertor(this, declarationName, param, declaration);
|
|
249
256
|
case idl.IDLInterfaceSubkind.Class:
|
|
250
|
-
return new
|
|
257
|
+
return new InterfaceConvertor(this, declarationName, param, declaration);
|
|
251
258
|
case idl.IDLInterfaceSubkind.AnonymousInterface:
|
|
252
259
|
return new AggregateConvertor(this, param, type, declaration);
|
|
253
260
|
case idl.IDLInterfaceSubkind.Tuple:
|
|
@@ -41,7 +41,10 @@ export class DeclarationNameConvertor {
|
|
|
41
41
|
DeclarationNameConvertor.I = new DeclarationNameConvertor();
|
|
42
42
|
export class TSFeatureNameConvertor extends DeclarationNameConvertor {
|
|
43
43
|
convertEnum(decl) {
|
|
44
|
-
|
|
44
|
+
const namespace = idl.getNamespacesPathFor(decl).map(it => it.name);
|
|
45
|
+
if (namespace.length > 0)
|
|
46
|
+
return namespace[0];
|
|
47
|
+
return decl.name;
|
|
45
48
|
}
|
|
46
49
|
}
|
|
47
50
|
TSFeatureNameConvertor.I = new TSFeatureNameConvertor();
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as idl from './idl';
|
|
2
|
+
import { ReferenceResolver } from './peer-generation/ReferenceResolver';
|
|
3
|
+
export interface IDLConverter<T> {
|
|
4
|
+
visitOptional(type: idl.IDLOptionalType): T;
|
|
5
|
+
visitUnion(type: idl.IDLUnionType): T;
|
|
6
|
+
visitContainer(type: idl.IDLContainerType): T;
|
|
7
|
+
visitImport(type: idl.IDLReferenceType, importClause: string): T;
|
|
8
|
+
visitTypeReference(type: idl.IDLReferenceType): T;
|
|
9
|
+
visitTypeParameter(type: idl.IDLTypeParameterType): T;
|
|
10
|
+
visitPrimitiveType(type: idl.IDLPrimitiveType): T;
|
|
11
|
+
visitNamespace(node: idl.IDLNamespace): T;
|
|
12
|
+
visitInterface(node: idl.IDLInterface): T;
|
|
13
|
+
visitEnum(node: idl.IDLEnum): T;
|
|
14
|
+
visitTypedef(node: idl.IDLTypedef): T;
|
|
15
|
+
visitCallback(node: idl.IDLCallback): T;
|
|
16
|
+
visitMethod(node: idl.IDLMethod): T;
|
|
17
|
+
visitProperty(node: idl.IDLProperty): T;
|
|
18
|
+
visitConstant(node: idl.IDLConstant): T;
|
|
19
|
+
}
|
|
20
|
+
export declare function walkIDL<T>(convertor: IDLConverter<T>, node: idl.IDLNode): T;
|
|
21
|
+
export declare class IDLDependencyCollector implements IDLConverter<idl.IDLNode[]> {
|
|
22
|
+
private readonly resolver;
|
|
23
|
+
constructor(resolver: ReferenceResolver);
|
|
24
|
+
visitOptional(type: idl.IDLOptionalType): idl.IDLNode[];
|
|
25
|
+
visitUnion(type: idl.IDLUnionType): idl.IDLNode[];
|
|
26
|
+
visitContainer(type: idl.IDLContainerType): idl.IDLNode[];
|
|
27
|
+
visitImport(type: idl.IDLReferenceType): idl.IDLNode[];
|
|
28
|
+
visitTypeReference(type: idl.IDLReferenceType): idl.IDLNode[];
|
|
29
|
+
visitTypeParameter(): idl.IDLNode[];
|
|
30
|
+
visitPrimitiveType(): idl.IDLNode[];
|
|
31
|
+
visitNamespace(decl: idl.IDLNamespace): idl.IDLNode[];
|
|
32
|
+
visitInterface(decl: idl.IDLInterface): idl.IDLNode[];
|
|
33
|
+
protected visitSupertype(type: idl.IDLType | idl.IDLInterface): idl.IDLNode[];
|
|
34
|
+
visitEnum(): idl.IDLNode[];
|
|
35
|
+
visitTypedef(decl: idl.IDLTypedef): idl.IDLNode[];
|
|
36
|
+
visitCallback(decl: idl.IDLCallback): idl.IDLNode[];
|
|
37
|
+
visitMethod(decl: idl.IDLMethod): idl.IDLNode[];
|
|
38
|
+
visitProperty(node: idl.IDLProperty): idl.IDLNode[];
|
|
39
|
+
visitConstant(decl: idl.IDLConstant): idl.IDLNode[];
|
|
40
|
+
walk(node?: idl.IDLNode): idl.IDLNode[];
|
|
41
|
+
}
|
|
42
|
+
export declare function collectDependencies(resolver: ReferenceResolver, node: idl.IDLNode): idl.IDLNode[];
|
|
43
|
+
//# sourceMappingURL=visitor.d.ts.map
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*/
|
|
15
|
+
import * as idl from './idl';
|
|
16
|
+
export function walkIDL(convertor, node) {
|
|
17
|
+
if (idl.isNamespace(node))
|
|
18
|
+
return convertor.visitNamespace(node);
|
|
19
|
+
if (idl.isInterface(node))
|
|
20
|
+
return convertor.visitInterface(node);
|
|
21
|
+
if (idl.isEnum(node))
|
|
22
|
+
return convertor.visitEnum(node);
|
|
23
|
+
if (idl.isEnumMember(node))
|
|
24
|
+
return convertor.visitEnum(node.parent);
|
|
25
|
+
if (idl.isTypedef(node))
|
|
26
|
+
return convertor.visitTypedef(node);
|
|
27
|
+
if (idl.isCallback(node))
|
|
28
|
+
return convertor.visitCallback(node);
|
|
29
|
+
if (idl.isMethod(node))
|
|
30
|
+
return convertor.visitMethod(node);
|
|
31
|
+
if (idl.isProperty(node))
|
|
32
|
+
return convertor.visitProperty(node);
|
|
33
|
+
if (idl.isConstant(node))
|
|
34
|
+
return convertor.visitConstant(node);
|
|
35
|
+
if (idl.isOptionalType(node))
|
|
36
|
+
return convertor.visitOptional(node);
|
|
37
|
+
if (idl.isUnionType(node))
|
|
38
|
+
return convertor.visitUnion(node);
|
|
39
|
+
if (idl.isContainerType(node))
|
|
40
|
+
return convertor.visitContainer(node);
|
|
41
|
+
if (idl.isReferenceType(node)) {
|
|
42
|
+
const importAttr = idl.getExtAttribute(node, idl.IDLExtendedAttributes.Import);
|
|
43
|
+
return importAttr
|
|
44
|
+
? convertor.visitImport(node, importAttr)
|
|
45
|
+
: convertor.visitTypeReference(node);
|
|
46
|
+
}
|
|
47
|
+
if (idl.isTypeParameterType(node))
|
|
48
|
+
return convertor.visitTypeParameter(node);
|
|
49
|
+
if (idl.isPrimitiveType(node))
|
|
50
|
+
return convertor.visitPrimitiveType(node);
|
|
51
|
+
throw new Error(`Unknown kind ${idl.IDLKind[node.kind]}`);
|
|
52
|
+
}
|
|
53
|
+
////////////////////////////////////////////////////////////////////////////
|
|
54
|
+
export class IDLDependencyCollector {
|
|
55
|
+
constructor(resolver) {
|
|
56
|
+
this.resolver = resolver;
|
|
57
|
+
}
|
|
58
|
+
visitOptional(type) {
|
|
59
|
+
return this.walk(type.type);
|
|
60
|
+
}
|
|
61
|
+
visitUnion(type) {
|
|
62
|
+
return type.types.flatMap(ty => this.walk(ty));
|
|
63
|
+
}
|
|
64
|
+
visitContainer(type) {
|
|
65
|
+
return type.elementType.flatMap(ty => this.walk(ty));
|
|
66
|
+
}
|
|
67
|
+
visitImport(type) {
|
|
68
|
+
const maybeDecl = this.resolver.resolveTypeReference(type);
|
|
69
|
+
return maybeDecl ? [maybeDecl] : [];
|
|
70
|
+
}
|
|
71
|
+
visitTypeReference(type) {
|
|
72
|
+
const decl = this.resolver.resolveTypeReference(type);
|
|
73
|
+
const result = !decl ? []
|
|
74
|
+
: idl.isEnumMember(decl) ? [decl.parent] : [decl];
|
|
75
|
+
if (type.typeArguments) {
|
|
76
|
+
result.push(...type.typeArguments.flatMap(it => this.walk(it)));
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
visitTypeParameter() {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
visitPrimitiveType() {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
visitNamespace(decl) {
|
|
87
|
+
return decl.members.flatMap(it => this.walk(it));
|
|
88
|
+
}
|
|
89
|
+
visitInterface(decl) {
|
|
90
|
+
return [
|
|
91
|
+
...decl.inheritance
|
|
92
|
+
.filter(it => it !== idl.IDLTopType)
|
|
93
|
+
.flatMap(it => this.visitSupertype(it)),
|
|
94
|
+
...decl.properties
|
|
95
|
+
.filter(it => !it.isStatic)
|
|
96
|
+
.flatMap(it => this.walk(it.type)),
|
|
97
|
+
...[...decl.constructors, ...decl.callables, ...decl.methods]
|
|
98
|
+
.flatMap(it => [
|
|
99
|
+
...it.parameters.flatMap(param => this.walk(param.type)),
|
|
100
|
+
...this.walk(it.returnType)
|
|
101
|
+
])
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
visitSupertype(type) {
|
|
105
|
+
if (idl.isInterface(type)) {
|
|
106
|
+
return this.walk(idl.createReferenceType(type.name, undefined, type));
|
|
107
|
+
}
|
|
108
|
+
return this.walk(type);
|
|
109
|
+
}
|
|
110
|
+
visitEnum() {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
visitTypedef(decl) {
|
|
114
|
+
return this.walk(decl.type);
|
|
115
|
+
}
|
|
116
|
+
visitCallback(decl) {
|
|
117
|
+
return [
|
|
118
|
+
...decl.parameters.flatMap(it => this.walk(it.type)),
|
|
119
|
+
...this.walk(decl.returnType),
|
|
120
|
+
];
|
|
121
|
+
}
|
|
122
|
+
visitMethod(decl) {
|
|
123
|
+
return [
|
|
124
|
+
...decl.parameters.flatMap(it => this.walk(it.type)),
|
|
125
|
+
...this.walk(decl.returnType),
|
|
126
|
+
];
|
|
127
|
+
}
|
|
128
|
+
visitProperty(node) {
|
|
129
|
+
return this.walk(node.type);
|
|
130
|
+
}
|
|
131
|
+
visitConstant(decl) {
|
|
132
|
+
return this.walk(decl.type);
|
|
133
|
+
}
|
|
134
|
+
walk(node) {
|
|
135
|
+
if (node === undefined)
|
|
136
|
+
return [];
|
|
137
|
+
return walkIDL(this, node);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export function collectDependencies(resolver, node) {
|
|
141
|
+
return walkIDL(new IDLDependencyCollector(resolver), node);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=visitor.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@idlizer/core",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.21",
|
|
4
4
|
"description": "",
|
|
5
5
|
"types": "build/lib/src/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"keywords": [],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@koalaui/interop": "1.4.
|
|
37
|
+
"@koalaui/interop": "1.4.8",
|
|
38
38
|
"typescript": "4.9.5",
|
|
39
39
|
"@types/node": "^18.0.0"
|
|
40
40
|
},
|