fix(ct-angular): resolve Angular component usages

This commit is contained in:
Younes Jaaidi 2024-03-27 22:09:28 +01:00
parent 78596d9bad
commit 89b885a273
No known key found for this signature in database
GPG key ID: 3126C5717BDF3241

View file

@ -21,6 +21,7 @@ import { setTransformData } from 'playwright/lib/transform/transform';
const t: typeof T = types;
let jsxComponentNames: Set<string>;
let classComponentNames: Set<string>;
let importInfos: Map<string, ImportInfo>;
export default declare((api: BabelAPI) => {
@ -32,6 +33,7 @@ export default declare((api: BabelAPI) => {
Program: {
enter(path) {
jsxComponentNames = collectJsxComponentUsages(path.node);
classComponentNames = collectClassMountUsages(path.node);
importInfos = new Map();
},
exit(path) {
@ -93,7 +95,7 @@ export default declare((api: BabelAPI) => {
if (t.isImportNamespaceSpecifier(specifier))
continue;
const { localName, info } = importInfo(importNode, specifier, this.filename!);
if (jsxComponentNames.has(localName)) {
if (jsxComponentNames.has(localName) || classComponentNames.has(localName)) {
importInfos.set(localName, info);
++importCount;
}
@ -141,6 +143,20 @@ function collectJsxComponentUsages(node: T.Node): Set<string> {
return names;
}
function collectClassMountUsages(node: T.Node): Set<string> {
const names = new Set<string>();
traverse(node, {
enter: p => {
// Treat calls to mount as component usages.
// e.g. mount(MyComponent, ...)
if (t.isCallExpression(p.node) && t.isIdentifier(p.node.callee) && p.node.callee.name === 'mount' && t.isIdentifier(p.node.arguments[0]))
names.add(p.node.arguments[0].name);
}
});
return names;
}
export type ImportInfo = {
id: string;
filename: string;