@idlizer/core 2.0.20 → 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/LanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/LanguageWriter.js +1 -1
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +1 -1
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +1 -0
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +2 -1
- package/build/lib/src/LanguageWriters/index.d.ts +3 -0
- package/build/lib/src/LanguageWriters/index.js +26 -3
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +2 -1
- package/build/lib/src/index.d.ts +2 -0
- package/build/lib/src/index.js +2 -0
- 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 +9 -2
- 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
|
@@ -273,7 +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
|
+
writeExpressionStatements(...statements: LanguageExpression[]): void;
|
|
277
277
|
writeStaticBlock(op: (writer: this) => void): void;
|
|
278
278
|
makeRef(type: idl.IDLType, _options?: MakeRefOptions): idl.IDLType;
|
|
279
279
|
makeThis(): LanguageExpression;
|
|
@@ -437,7 +437,7 @@ export class LanguageWriter {
|
|
|
437
437
|
writeExpressionStatement(smth) {
|
|
438
438
|
this.writeStatement(new ExpressionStatement(smth));
|
|
439
439
|
}
|
|
440
|
-
writeExpressionStatements(statements) {
|
|
440
|
+
writeExpressionStatements(...statements) {
|
|
441
441
|
statements.forEach(it => this.writeExpressionStatement(it));
|
|
442
442
|
}
|
|
443
443
|
writeStaticBlock(op) {
|
|
@@ -106,7 +106,7 @@ export class CJTypeNameConvertor {
|
|
|
106
106
|
case idl.IDLF64Type: return 'Float64';
|
|
107
107
|
case idl.IDLPointerType: return 'UInt64';
|
|
108
108
|
case idl.IDLVoidType: return 'Unit';
|
|
109
|
-
case idl.IDLBufferType: return '
|
|
109
|
+
case idl.IDLBufferType: return 'Array<UInt8>';
|
|
110
110
|
}
|
|
111
111
|
throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
|
|
112
112
|
}
|
|
@@ -247,6 +247,7 @@ export class InteropArgConvertor {
|
|
|
247
247
|
convertPrimitiveType(type) {
|
|
248
248
|
switch (type) {
|
|
249
249
|
case idl.IDLI32Type: return "KInt";
|
|
250
|
+
case idl.IDLF32Type: return "KFloat";
|
|
250
251
|
case idl.IDLNumberType: return 'number';
|
|
251
252
|
case idl.IDLBigintType: return 'bigint';
|
|
252
253
|
case idl.IDLBooleanType:
|
|
@@ -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,5 +1,8 @@
|
|
|
1
1
|
import { Language } from "../Language";
|
|
2
|
+
import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
2
3
|
import { InteropArgConvertor } from "./convertors/InteropConvertors";
|
|
4
|
+
import { LanguageWriter } from "./LanguageWriter";
|
|
3
5
|
export * from "./nameConvertor";
|
|
6
|
+
export declare function createLanguageWriter(language: Language, resolver?: ReferenceResolver): LanguageWriter;
|
|
4
7
|
export declare function createInteropArgConvertor(language: Language): InteropArgConvertor;
|
|
5
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,9 +1,31 @@
|
|
|
1
|
+
import { IndentedPrinter } from "../IndentedPrinter";
|
|
1
2
|
import { Language } from "../Language";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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";
|
|
4
8
|
import { InteropArgConvertor } from "./convertors/InteropConvertors";
|
|
5
|
-
import { JavaInteropArgConvertor } from "./convertors/JavaConvertors";
|
|
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";
|
|
6
16
|
export * from "./nameConvertor";
|
|
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
|
+
}
|
|
7
29
|
export function createInteropArgConvertor(language) {
|
|
8
30
|
switch (language) {
|
|
9
31
|
case Language.TS:
|
|
@@ -14,4 +36,5 @@ export function createInteropArgConvertor(language) {
|
|
|
14
36
|
}
|
|
15
37
|
throw new Error(`InteropArgConvertor for language ${language} not implemented`);
|
|
16
38
|
}
|
|
39
|
+
const EmptyReferenceResolver = createEmptyReferenceResolver();
|
|
17
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) {
|
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";
|
|
@@ -27,6 +28,7 @@ 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";
|
|
@@ -41,6 +42,7 @@ 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,6 +15,7 @@
|
|
|
15
15
|
import { warn } from 'console';
|
|
16
16
|
import * as idl from '../idl';
|
|
17
17
|
import { Language } from '../Language';
|
|
18
|
+
import { createLanguageWriter } from '../LanguageWriters';
|
|
18
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";
|
|
19
20
|
import { InteropNameConvertor } from '../LanguageWriters/convertors/InteropConvertors';
|
|
20
21
|
import { CJTypeNameConvertor } from '../LanguageWriters/convertors/CJConvertors';
|
|
@@ -22,6 +23,7 @@ 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
|
},
|