@idlizer/core 2.0.20 → 2.0.22

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.
@@ -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 'ArrayList<UInt8>';
109
+ case idl.IDLBufferType: return 'Array<UInt8>';
110
110
  }
111
111
  throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
112
112
  }
@@ -35,6 +35,8 @@ export declare class InteropNameConvertor implements IdlNameConvertor {
35
35
  convert(node: idl.IDLNode): string;
36
36
  }
37
37
  export declare class InteropReturnTypeConvertor implements TypeConvertor<string> {
38
+ protected readonly resolver?: ReferenceResolver | undefined;
39
+ constructor(resolver?: ReferenceResolver | undefined);
38
40
  isVoid(method: PeerMethod): boolean;
39
41
  convert(type: idl.IDLType): string;
40
42
  convertContainer(type: idl.IDLContainerType): string;
@@ -173,6 +173,9 @@ export class InteropNameConvertor {
173
173
  }
174
174
  }
175
175
  export class InteropReturnTypeConvertor {
176
+ constructor(resolver) {
177
+ this.resolver = resolver;
178
+ }
176
179
  isVoid(method) {
177
180
  return this.convert(method.returnType) === idl.IDLVoidType.name;
178
181
  }
@@ -225,6 +228,10 @@ export class InteropReturnTypeConvertor {
225
228
  convertTypeReference(type) {
226
229
  if (type.name.endsWith("Attribute"))
227
230
  return idl.IDLVoidType.name;
231
+ // Callbacks and array types return by value
232
+ if (this.resolver && idl.isCallback(this.resolver.toDeclaration(type))) {
233
+ return type.name;
234
+ }
228
235
  return PrimitiveTypesInstance.NativePointer.getText();
229
236
  }
230
237
  convertUnion(type) {
@@ -247,6 +254,7 @@ export class InteropArgConvertor {
247
254
  convertPrimitiveType(type) {
248
255
  switch (type) {
249
256
  case idl.IDLI32Type: return "KInt";
257
+ case idl.IDLF32Type: return "KFloat";
250
258
  case idl.IDLNumberType: return 'number';
251
259
  case idl.IDLBigintType: return 'bigint';
252
260
  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 { CJInteropArgConvertor } from "./convertors/CJConvertors";
3
- import { CppInteropArgConvertor } from "./convertors/CppConvertors";
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) {
@@ -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";
@@ -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 { IDLNode } from "../idl";
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: IDLNode, role: LayoutNodeRole): string;
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: IDLNode, role: LayoutNodeRole): string;
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, finalizer: MaterializedMethod, methods: MaterializedMethod[], needBeGenerated?: boolean, 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 | 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;
@@ -87,6 +87,9 @@ export class MaterializedMethod extends PeerMethod {
87
87
  }
88
88
  return `(void*) 300`;
89
89
  }
90
+ if (idl.isReferenceType(this.method.signature.returnType)) {
91
+ return "{}";
92
+ }
90
93
  return undefined;
91
94
  }
92
95
  get receiverType() {
@@ -134,7 +137,9 @@ export function copyMaterializedMethod(method, overrides) {
134
137
  return copied;
135
138
  }
136
139
  export class MaterializedClass {
137
- constructor(decl, className, isInterface, superClass, interfaces, generics, fields, ctor, finalizer, methods, needBeGenerated = true, taggedMethods = []) {
140
+ constructor(decl, className, isInterface, superClass, interfaces, generics, fields, ctor, // undefined when used for global functions
141
+ finalizer, // undefined when used for global functions
142
+ methods, needBeGenerated = true, taggedMethods = []) {
138
143
  this.decl = decl;
139
144
  this.className = className;
140
145
  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 ClassConvertor(this, declarationName, param, declaration);
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
- return `${idl.getNamespacesPathFor(decl).join('')}${decl.name}`;
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.20",
3
+ "version": "2.0.22",
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.7",
37
+ "@koalaui/interop": "1.4.9",
38
38
  "typescript": "4.9.5",
39
39
  "@types/node": "^18.0.0"
40
40
  },