From 89b885a273ffdd52a106c9e818d29174a30d2e6d Mon Sep 17 00:00:00 2001 From: Younes Jaaidi Date: Wed, 27 Mar 2024 22:09:28 +0100 Subject: [PATCH] fix(ct-angular): resolve Angular component usages --- .../playwright-ct-core/src/tsxTransform.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/playwright-ct-core/src/tsxTransform.ts b/packages/playwright-ct-core/src/tsxTransform.ts index 0af7c181b9..a27410e5c0 100644 --- a/packages/playwright-ct-core/src/tsxTransform.ts +++ b/packages/playwright-ct-core/src/tsxTransform.ts @@ -21,6 +21,7 @@ import { setTransformData } from 'playwright/lib/transform/transform'; const t: typeof T = types; let jsxComponentNames: Set; +let classComponentNames: Set; let importInfos: Map; 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 { return names; } +function collectClassMountUsages(node: T.Node): Set { + const names = new Set(); + 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;