hermex 1.1.2 → 1.2.0

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/README.md CHANGED
@@ -97,6 +97,8 @@ Options:
97
97
  --patterns [mode] Show patterns table/chart (table, chart)
98
98
  (default: "table")
99
99
  --no-patterns Do not show patterns
100
+ --ignore-errors Continue scanning even if some files fail to
101
+ parse
100
102
  -h, --help display help for command
101
103
  ```
102
104
 
@@ -118,9 +120,9 @@ Running a basic scan (uses default pattern `**/*.{tsx,jsx,ts,js}`):
118
120
  ┌──────────────────────┬───────┐
119
121
  │ Pattern │ Count │
120
122
  ├──────────────────────┼───────┤
121
- │ Named Imports │ 126
123
+ │ Named Imports │ 130
122
124
  ├──────────────────────┼───────┤
123
- │ Default Imports │ 49
125
+ │ Default Imports │ 51
124
126
  ├──────────────────────┼───────┤
125
127
  │ JSX Usage │ 45 │
126
128
  ├──────────────────────┼───────┤
@@ -139,14 +141,14 @@ Running a basic scan (uses default pattern `**/*.{tsx,jsx,ts,js}`):
139
141
  │ Portal Usage │ 1 │
140
142
  └──────────────────────┴───────┘
141
143
 
142
- Total: 266 patterns detected
144
+ Total: 272 patterns detected
143
145
 
144
146
  📊 Summary
145
147
 
146
148
  ┌─────────────────────┬───────┐
147
149
  │ Metric │ Count │
148
150
  ├─────────────────────┼───────┤
149
- │ Files Analyzed │ 45
151
+ │ Files Analyzed │ 46
150
152
  ├─────────────────────┼───────┤
151
153
  │ External Packages │ 0 │
152
154
  ├─────────────────────┼───────┤
package/dist/cli.js CHANGED
@@ -650,8 +650,15 @@ function parseCode(code, options = {}) {
650
650
  return report;
651
651
  }
652
652
  function parseFile(filePath, options = {}) {
653
- const code = fs3.readFileSync(filePath, "utf8");
654
- return parseCode(code, options);
653
+ try {
654
+ const code = fs3.readFileSync(filePath, "utf8");
655
+ return parseCode(code, options);
656
+ } catch (error) {
657
+ if (options.ignoreErrors) {
658
+ return null;
659
+ }
660
+ throw error;
661
+ }
655
662
  }
656
663
  function filterReportByLibrary(report, libraryName) {
657
664
  const isFromLibrary = (source) => source.startsWith(libraryName) || source.includes(libraryName);
@@ -691,7 +698,7 @@ function filterReportByLibrary(report, libraryName) {
691
698
  }
692
699
 
693
700
  // src/utils/aggregator.ts
694
- function aggregateReports(reports, versions = {}) {
701
+ function aggregateReports(reports, versions = {}, errors = []) {
695
702
  const componentUsageMap = /* @__PURE__ */ new Map();
696
703
  let totalImports = 0;
697
704
  let totalUsagePatterns = 0;
@@ -744,7 +751,8 @@ function aggregateReports(reports, versions = {}) {
744
751
  topComponents,
745
752
  allComponents,
746
753
  packageDistribution,
747
- reports
754
+ reports,
755
+ errors
748
756
  };
749
757
  }
750
758
  function resolvePackageFromImportPath(importPath, availablePackages) {
@@ -1143,6 +1151,31 @@ function printPackagesChart(packages) {
1143
1151
  );
1144
1152
  });
1145
1153
  }
1154
+ function printHeader5(errorCount) {
1155
+ console.log(chalk5.red.bold(`
1156
+ \u274C Parse Errors (${errorCount})
1157
+ `));
1158
+ }
1159
+ function printErrors(aggregated) {
1160
+ const errors = aggregated.errors;
1161
+ if (errors.length === 0) {
1162
+ return;
1163
+ }
1164
+ printHeader5(errors.length);
1165
+ const table = new Table({
1166
+ head: ["File", "Error"],
1167
+ style: {
1168
+ head: ["cyan"],
1169
+ border: ["gray"]
1170
+ },
1171
+ colWidths: [50, 80],
1172
+ wordWrap: true
1173
+ });
1174
+ errors.forEach((error) => {
1175
+ table.push([chalk5.yellow(error.file), chalk5.red(error.message)]);
1176
+ });
1177
+ console.log(table.toString());
1178
+ }
1146
1179
  async function findFiles(pattern, ignorePatterns) {
1147
1180
  const files = await glob(pattern, {
1148
1181
  ignore: ignorePatterns,
@@ -1358,7 +1391,10 @@ function registerScanCommand(program2) {
1358
1391
  "--patterns [mode]",
1359
1392
  "Show patterns table/chart (table, chart)",
1360
1393
  "table"
1361
- ).option("--no-patterns", "Do not show patterns").action(async (pattern, options) => {
1394
+ ).option("--no-patterns", "Do not show patterns").option(
1395
+ "--ignore-errors",
1396
+ "Continue scanning even if some files fail to parse"
1397
+ ).action(async (pattern, options) => {
1362
1398
  const normalizedOptions = normalizeOptions(options);
1363
1399
  await executeScan(pattern, normalizedOptions);
1364
1400
  });
@@ -1379,7 +1415,8 @@ function normalizeOptions(options) {
1379
1415
  patterns: options.patterns || "table",
1380
1416
  ignore: normalizeArray(options.ignore),
1381
1417
  allowPackages: normalizeArray(options.allowPackages),
1382
- ignorePackages: normalizeArray(options.ignorePackages)
1418
+ ignorePackages: normalizeArray(options.ignorePackages),
1419
+ ignoreErrors: options.ignoreErrors || false
1383
1420
  };
1384
1421
  }
1385
1422
  async function executeScan(pattern, options) {
@@ -1409,18 +1446,36 @@ async function executeScan(pattern, options) {
1409
1446
  spinner.succeed(chalk5.green(` Found ${files.length} files`));
1410
1447
  spinner.start("Analyzing files...");
1411
1448
  const reports = [];
1449
+ const errors = [];
1412
1450
  for (let i = 0; i < files.length; i++) {
1413
1451
  const file = files[i];
1414
1452
  if (!options.verbose) {
1415
1453
  spinner.text = `Analyzing files... (${i + 1}/${files.length})`;
1416
1454
  }
1417
- const report = parseFile(file);
1418
- if (report) {
1419
- reports.push(report);
1455
+ try {
1456
+ const report = parseFile(file, { ignoreErrors: options.ignoreErrors });
1457
+ if (report) {
1458
+ reports.push(report);
1459
+ } else if (options.ignoreErrors) {
1460
+ errors.push({
1461
+ file,
1462
+ message: "Failed to parse file"
1463
+ });
1464
+ }
1465
+ } catch (error) {
1466
+ if (options.ignoreErrors) {
1467
+ errors.push({
1468
+ file,
1469
+ message: error.message || "Unknown error"
1470
+ });
1471
+ } else {
1472
+ throw error;
1473
+ }
1420
1474
  }
1421
1475
  }
1422
1476
  const elapsedTime = (Date.now() - startTime) / 1e3;
1423
- const aggregated = aggregateReports(reports, filteredVersions);
1477
+ const aggregated = aggregateReports(reports, filteredVersions, errors);
1478
+ printErrors(aggregated);
1424
1479
  if (options.packages && !options.noPackages) {
1425
1480
  printPackages(aggregated, options.packages);
1426
1481
  }
@@ -1434,12 +1489,15 @@ async function executeScan(pattern, options) {
1434
1489
  printSummary(aggregated);
1435
1490
  }
1436
1491
  console.log("");
1437
- spinner.succeed(
1438
- chalk5.green.bold(
1439
- ` Analysis complete! Analyzed ${reports.length} files in ${formatDuration(elapsedTime)}
1440
- `
1441
- )
1442
- );
1492
+ const successMessage = aggregated.errors.length > 0 ? ` Analysis complete with ${aggregated.errors.length} error(s)! Analyzed ${reports.length}/${files.length} files in ${formatDuration(elapsedTime)}
1493
+ ` : ` Analysis complete! Analyzed ${reports.length} files in ${formatDuration(elapsedTime)}
1494
+ `;
1495
+ if (aggregated.errors.length > 0) {
1496
+ spinner.warn(chalk5.yellow.bold(successMessage));
1497
+ process.exit(1);
1498
+ } else {
1499
+ spinner.succeed(chalk5.green.bold(successMessage));
1500
+ }
1443
1501
  } catch (error) {
1444
1502
  spinner.fail(chalk5.red("Analysis failed: " + error.message));
1445
1503
  console.error(error);
@@ -1449,7 +1507,7 @@ async function executeScan(pattern, options) {
1449
1507
 
1450
1508
  // package.json
1451
1509
  var package_default = {
1452
- version: "1.1.1"};
1510
+ version: "1.1.2"};
1453
1511
 
1454
1512
  // src/cli.ts
1455
1513
  var program = new Command();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/swc-parser/core/state.ts","../src/swc-parser/patterns/imports.ts","../src/swc-parser/utils/jsx-helpers.ts","../src/swc-parser/patterns/props.ts","../src/swc-parser/patterns/jsx.ts","../src/swc-parser/utils/matchers.ts","../src/swc-parser/patterns/variables.ts","../src/swc-parser/patterns/conditionals.ts","../src/swc-parser/patterns/collections.ts","../src/swc-parser/patterns/lazy-dynamic.ts","../src/swc-parser/patterns/advanced.ts","../src/swc-parser/core/visitor.ts","../src/swc-parser/core/report.ts","../src/swc-parser/index.ts","../src/utils/aggregator.ts","../src/utils/format-utils.ts","../src/utils/print-summary.ts","../src/utils/chart-renderer.ts","../src/utils/print-components.ts","../src/utils/print-patterns.ts","../src/utils/print-packages.ts","../src/utils/file-utils.ts","../src/lock-parser/patterns/npm.ts","../src/lock-parser/patterns/pnpm.ts","../src/lock-parser/patterns/yarn.ts","../src/lock-parser/index.ts","../src/commands/scan.ts","../package.json","../src/cli.ts"],"names":["fs","chalk","printHeader","Table","path","program"],"mappings":"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","file":"cli.js","sourcesContent":["import type { ParserState, UsagePatterns } from '../types';\n\nexport function createState(): ParserState {\n const usagePatterns: UsagePatterns = {\n directImports: new Set(),\n namedImports: new Set(),\n namespaceImports: new Set(),\n defaultImports: new Set(),\n aliasedImports: new Map(),\n variableAssignments: new Map(),\n componentMappings: new Set(),\n lazyImports: new Set(),\n dynamicImports: new Set(),\n conditionalUsage: new Set(),\n arrayMappings: new Set(),\n objectMappings: new Set(),\n hocUsage: new Set(),\n renderProps: new Set(),\n contextUsage: new Set(),\n forwardedRefs: new Set(),\n memoizedComponents: new Set(),\n portalUsage: new Set(),\n jsxUsage: new Map(),\n destructuredUsage: new Set(),\n propsAnalysis: new Map(),\n };\n\n return {\n usagePatterns,\n componentNames: new Set(),\n allIdentifiers: new Set(),\n };\n}\n","import type { ImportDeclaration } from '@swc/core';\nimport type { ParserState } from '../types';\n\n/**\n * Analyzes import declarations and tracks all types:\n * - Default imports\n * - Named imports\n * - Namespace imports\n * - Aliased imports\n */\nexport function analyzeImportDeclaration(\n node: ImportDeclaration,\n state: ParserState,\n): void {\n const source = node.source.value;\n\n // console.log(`📦 Found import: ${source}`);\n\n for (const spec of node.specifiers) {\n switch (spec.type) {\n case 'ImportDefaultSpecifier':\n analyzeDefaultImport(spec, source, node, state);\n break;\n\n case 'ImportNamespaceSpecifier':\n analyzeNamespaceImport(spec, source, node, state);\n break;\n\n case 'ImportSpecifier':\n analyzeNamedImport(spec, source, node, state);\n break;\n }\n }\n}\n\nfunction analyzeDefaultImport(\n spec: any,\n source: string,\n node: ImportDeclaration,\n state: ParserState,\n): void {\n const name = spec.local.value;\n\n state.usagePatterns.defaultImports.add({\n name,\n source,\n line: node.span?.start || 0,\n });\n\n state.componentNames.add(name);\n}\n\nfunction analyzeNamespaceImport(\n spec: any,\n source: string,\n node: ImportDeclaration,\n state: ParserState,\n): void {\n const name = spec.local.value;\n\n state.usagePatterns.namespaceImports.add({\n name,\n source,\n line: node.span?.start || 0,\n });\n\n state.allIdentifiers.add(name);\n}\n\nfunction analyzeNamedImport(\n spec: any,\n source: string,\n node: ImportDeclaration,\n state: ParserState,\n): void {\n const importedName = spec.imported ? spec.imported.value : spec.local.value;\n const localName = spec.local.value;\n\n state.usagePatterns.namedImports.add({\n name: importedName,\n source,\n line: node.span?.start || 0,\n });\n\n // Track aliases\n if (importedName !== localName) {\n state.usagePatterns.aliasedImports.set(localName, {\n imported: importedName,\n local: localName,\n source,\n line: node.span?.start || 0,\n });\n }\n\n state.componentNames.add(localName);\n}\n","import type { ParserState } from '../types';\n\n/**\n * Extracts the name from a JSX element (handles identifiers and member expressions)\n */\nexport function getJSXElementName(nameNode: any): string {\n if (!nameNode) return '';\n\n switch (nameNode.type) {\n case 'Identifier':\n return nameNode.value;\n case 'JSXMemberExpression':\n return `${getJSXElementName(nameNode.object)}.${nameNode.property.value}`;\n default:\n return '';\n }\n}\n\n/**\n * Checks if a JSX member expression is a known component\n */\nexport function isMemberExpressionComponent(\n nameNode: any,\n state: ParserState,\n): boolean {\n if (nameNode?.type === 'JSXMemberExpression') {\n const objectName = getJSXElementName(nameNode.object);\n return state.allIdentifiers.has(objectName);\n }\n return false;\n}\n\n/**\n * Extracts props from JSX attributes\n */\nexport function extractJSXProps(attributes: any[]): Array<{\n name: string;\n value: any;\n isSpread?: boolean;\n}> {\n if (!attributes) return [];\n\n return attributes\n .map((attr) => {\n if (attr.type === 'JSXAttribute') {\n return {\n name: attr.name?.value || attr.name?.name?.value,\n value: extractJSXAttributeValue(attr.value),\n };\n }\n if (attr.type === 'SpreadElement') {\n return {\n name: '...',\n value: '[spread]',\n isSpread: true,\n };\n }\n return null;\n })\n .filter(Boolean) as Array<{\n name: string;\n value: any;\n isSpread?: boolean;\n }>;\n}\n\n/**\n * Extracts value from JSX attribute\n */\nexport function extractJSXAttributeValue(value: any): any {\n if (!value) return true; // boolean attribute\n\n switch (value.type) {\n case 'StringLiteral':\n return value.value;\n case 'JSXExpressionContainer':\n return extractExpressionValue(value.expression);\n default:\n return '[complex]';\n }\n}\n\n/**\n * Extracts a readable value from an expression\n */\nexport function extractExpressionValue(expr: any): any {\n if (!expr) return '[unknown]';\n\n switch (expr.type) {\n case 'StringLiteral':\n case 'NumericLiteral':\n case 'BooleanLiteral':\n return expr.value;\n case 'Identifier':\n return `{${expr.value}}`;\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n return '[function]';\n case 'ObjectExpression':\n return '[object]';\n case 'ArrayExpression':\n return '[array]';\n default:\n return '[expression]';\n }\n}\n\n/**\n * Determines the context where a component is being used\n */\nexport function getUsageContext(parent: any): string {\n if (!parent) return 'direct';\n\n switch (parent.type) {\n case 'ConditionalExpression':\n return 'conditional';\n case 'ArrayExpression':\n return 'array';\n case 'ObjectExpression':\n return 'object';\n case 'CallExpression':\n return 'hoc';\n case 'VariableDeclarator':\n return 'variable';\n default:\n return 'jsx';\n }\n}\n","import type { PropsAnalysis, PropDetail, ParserState } from '../types';\n\n/**\n * Analyzes props in detail for a component\n */\nexport function analyzePropsInDetail(\n attributes: any[],\n componentName: string,\n state: ParserState,\n): PropsAnalysis {\n const analysis: PropsAnalysis = {\n namedProps: [],\n hasSpread: false,\n hasComplexProps: false,\n hasEventHandlers: false,\n propDetails: [],\n };\n\n if (!attributes) return analysis;\n\n for (const attr of attributes) {\n if (attr.type === 'JSXAttribute') {\n const propName = attr.name?.value || attr.name?.name?.value;\n if (propName) {\n analysis.namedProps.push(propName);\n\n const propDetail: PropDetail = {\n name: propName,\n type: getPropType(attr.value),\n isEventHandler: propName.startsWith('on'),\n isComplex: isComplexProp(attr.value),\n };\n\n if (propDetail.isEventHandler) {\n analysis.hasEventHandlers = true;\n }\n if (propDetail.isComplex) {\n analysis.hasComplexProps = true;\n }\n\n analysis.propDetails.push(propDetail);\n }\n } else if (attr.type === 'SpreadElement') {\n analysis.hasSpread = true;\n analysis.propDetails.push({\n name: '...',\n type: 'spread',\n isSpread: true,\n isComplex: true,\n isEventHandler: false,\n warning: 'Spread props cannot be statically analyzed',\n });\n analysis.hasComplexProps = true;\n }\n }\n\n // Store in state\n state.usagePatterns.propsAnalysis.set(componentName, analysis);\n\n return analysis;\n}\n\n/**\n * Determines the type of a prop value\n */\nfunction getPropType(value: any): string {\n if (!value) return 'boolean';\n\n switch (value.type) {\n case 'StringLiteral':\n return 'string';\n case 'JSXExpressionContainer': {\n const expr = value.expression;\n if (!expr) return 'unknown';\n switch (expr.type) {\n case 'NumericLiteral':\n return 'number';\n case 'BooleanLiteral':\n return 'boolean';\n case 'StringLiteral':\n return 'string';\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n return 'function';\n case 'ObjectExpression':\n return 'object';\n case 'ArrayExpression':\n return 'array';\n case 'Identifier':\n return 'variable';\n default:\n return 'expression';\n }\n }\n default:\n return 'unknown';\n }\n}\n\n/**\n * Checks if a prop value is complex (object, array, call, conditional)\n */\nfunction isComplexProp(value: any): boolean {\n if (!value) return false;\n if (value.type === 'JSXExpressionContainer') {\n const expr = value.expression;\n if (!expr) return false;\n return (\n expr.type === 'ObjectExpression' ||\n expr.type === 'ArrayExpression' ||\n expr.type === 'CallExpression' ||\n expr.type === 'ConditionalExpression'\n );\n }\n return false;\n}\n","import type { ParserState, JSXUsage } from '../types';\nimport {\n getJSXElementName,\n isMemberExpressionComponent,\n extractJSXProps,\n getUsageContext,\n} from '../utils/jsx-helpers';\nimport { analyzePropsInDetail } from './props';\n\n/**\n * Analyzes JSX element usage\n */\nexport function analyzeJSXElement(node: any, state: ParserState): void {\n if (node.opening) {\n analyzeJSXOpeningElement(node.opening, state, node);\n }\n}\n\n/**\n * Analyzes JSX opening element and tracks component usage\n */\nexport function analyzeJSXOpeningElement(\n node: any,\n state: ParserState,\n parent?: any,\n): void {\n const elementName = getJSXElementName(node.name);\n\n // Check if this is a known component\n if (\n !state.componentNames.has(elementName) &&\n !isMemberExpressionComponent(node.name, state)\n ) {\n return;\n }\n\n const propsAnalysis = analyzePropsInDetail(\n node.attributes,\n elementName,\n state,\n );\n const usage: JSXUsage = {\n component: elementName,\n props: extractJSXProps(node.attributes).map((p) => p.name),\n propsAnalysis,\n line: node.span?.start || 0,\n context: getUsageContext(parent),\n };\n\n // Track JSX usage\n if (!state.usagePatterns.jsxUsage.has(elementName)) {\n state.usagePatterns.jsxUsage.set(elementName, usage);\n }\n\n // console.log(`🎨 JSX Usage: <${elementName}>`);\n}\n","import type { ParserState } from '../types';\n\n/**\n * Checks if a name is a known component from imports\n */\nexport function isKnownComponent(name: string, state: ParserState): boolean {\n return state.componentNames.has(name) || state.allIdentifiers.has(name);\n}\n\n/**\n * Checks if a function name matches HOC patterns\n */\nexport function isHOCPattern(name: string): boolean {\n const hocPatterns = ['with', 'enhance', 'wrap', 'connect', 'create'];\n return hocPatterns.some((pattern) => name.startsWith(pattern));\n}\n\n/**\n * Checks if a node represents a HOC function call\n */\nexport function isHOCFunction(callee: any): boolean {\n if (!callee) return false;\n\n if (callee.type === 'Identifier') {\n return isHOCPattern(callee.value);\n }\n\n if (callee.type === 'MemberExpression') {\n const prop = callee.property;\n return prop?.value && isHOCPattern(prop.value);\n }\n\n return false;\n}\n\n/**\n * Checks if an expression looks like a React component\n * (starts with capital letter)\n */\nexport function looksLikeComponent(name: string): boolean {\n return /^[A-Z]/.test(name);\n}\n\n/**\n * Checks if source is from a specific library (for filtering)\n */\nexport function isFromLibrary(source: string, libraryName: string): boolean {\n return source.startsWith(libraryName) || source.includes(libraryName);\n}\n","import type { ParserState } from '../types';\nimport { isKnownComponent } from '../utils/matchers';\n\n/**\n * Analyzes variable declarations for component assignments\n */\nexport function analyzeVariableDeclaration(\n node: any,\n state: ParserState,\n): void {\n if (!node.declarations) return;\n\n for (const decl of node.declarations) {\n if (decl.id?.type === 'Identifier') {\n const varName = decl.id.value;\n\n // Check if it's assigning a component\n if (decl.init) {\n const assignment = extractAssignmentInfo(decl.init);\n if (assignment && isKnownComponent(assignment, state)) {\n state.usagePatterns.variableAssignments.set(varName, {\n assignment,\n line: node.span?.start || 0,\n });\n state.componentNames.add(varName);\n // console.log(`📝 Variable assignment: ${varName} = ${assignment}`);\n }\n }\n }\n\n // Handle destructuring assignments\n if (decl.id?.type === 'ObjectPattern') {\n analyzeDestructuringPattern(decl.id, decl.init, state);\n }\n }\n}\n\n/**\n * Analyzes destructuring patterns\n */\nexport function analyzeDestructuringPattern(\n pattern: any,\n init: any,\n state: ParserState,\n): void {\n if (!pattern.properties) return;\n\n for (const prop of pattern.properties) {\n if (\n prop.type === 'AssignmentPatternProperty' &&\n prop.key?.type === 'Identifier'\n ) {\n const propName = prop.key.value;\n\n if (init?.type === 'Identifier' && state.allIdentifiers.has(init.value)) {\n state.usagePatterns.destructuredUsage.add({\n property: propName,\n source: init.value,\n line: pattern.span?.start || 0,\n });\n state.componentNames.add(propName);\n // console.log(`🔧 Destructuring: ${propName} from ${init.value}`);\n }\n }\n }\n}\n\n/**\n * Extracts assignment information from various node types\n */\nfunction extractAssignmentInfo(node: any): string | null {\n switch (node.type) {\n case 'Identifier':\n return node.value;\n case 'MemberExpression':\n return `${extractAssignmentInfo(node.object)}.${node.property.value}`;\n case 'ConditionalExpression':\n return `${extractAssignmentInfo(node.consequent)} | ${extractAssignmentInfo(node.alternate)}`;\n default:\n return null;\n }\n}\n","import type { ParserState } from '../types';\n\n/**\n * Analyzes conditional expressions (ternary operators) with components\n */\nexport function analyzeConditionalExpression(\n node: any,\n state: ParserState,\n): void {\n const consequent =\n node.consequent?.type === 'Identifier' ? node.consequent.value : null;\n const alternate =\n node.alternate?.type === 'Identifier' ? node.alternate.value : null;\n\n if (\n (consequent && state.componentNames.has(consequent)) ||\n (alternate && state.componentNames.has(alternate))\n ) {\n state.usagePatterns.conditionalUsage.add({\n consequent: consequent || '',\n alternate: alternate || '',\n line: node.span?.start || 0,\n });\n // console.log('🔀 Conditional component usage found');\n }\n}\n","import type { ParserState } from '../types';\n\n/**\n * Analyzes array expressions containing components\n */\nexport function analyzeArrayExpression(node: any, state: ParserState): void {\n // Check if array contains components\n const hasComponents = node.elements?.some((elem: any) => {\n if (elem?.type === 'Identifier') {\n return state.componentNames.has(elem.value);\n }\n return false;\n });\n\n if (hasComponents) {\n state.usagePatterns.arrayMappings.add({\n components: node.elements\n ?.map((elem: any) => elem?.value)\n .filter(Boolean),\n line: node.span?.start || 0,\n });\n // console.log('📋 Array with components found');\n }\n}\n\n/**\n * Analyzes object expressions with component mappings\n */\nexport function analyzeObjectExpression(node: any, state: ParserState): void {\n // Check if object contains component mappings\n const componentProps = node.properties?.filter((prop: any) => {\n if (prop.type === 'KeyValueProperty' && prop.value?.type === 'Identifier') {\n return state.componentNames.has(prop.value.value);\n }\n return false;\n });\n\n if (componentProps?.length > 0) {\n state.usagePatterns.objectMappings.add({\n mappings: componentProps.map((prop: any) => ({\n key: prop.key?.value || '[computed]',\n component: prop.value?.value,\n })),\n line: node.span?.start || 0,\n });\n // console.log('🗺️ Object mapping with components found');\n }\n}\n","import type { ParserState } from '../types';\n\n/**\n * Analyzes React.lazy() imports\n */\nexport function analyzeLazyImport(node: any, state: ParserState): void {\n const arg = node.arguments?.[0];\n if (\n arg?.type === 'ArrowFunctionExpression' &&\n arg.body?.type === 'CallExpression'\n ) {\n const importCall = arg.body;\n if (importCall.callee?.type === 'Import') {\n const source = importCall.arguments?.[0]?.value;\n if (source) {\n state.usagePatterns.lazyImports.add({\n source,\n line: node.span?.start || 0,\n });\n // console.log(`🔄 Found lazy import: ${source}`);\n }\n }\n }\n}\n\n/**\n * Analyzes dynamic import() calls\n */\nexport function analyzeDynamicImport(node: any, state: ParserState): void {\n const source = node.arguments?.[0]?.value;\n if (source) {\n state.usagePatterns.dynamicImports.add({\n source,\n line: node.span?.start || 0,\n });\n // console.log(`⚡ Found dynamic import: ${source}`);\n }\n}\n","import type { ParserState } from '../types';\n\n/**\n * Analyzes Higher-Order Component (HOC) usage\n */\nexport function analyzeHOCUsage(node: any, state: ParserState): void {\n state.usagePatterns.hocUsage.add({\n function: node.callee?.value || '[unknown]',\n component: node.arguments?.[0]?.value || '[unknown]',\n line: node.span?.start || 0,\n });\n // console.log(`🎁 HOC usage found`);\n}\n\n/**\n * Analyzes React.memo() usage\n */\nexport function analyzeMemoUsage(node: any, state: ParserState): void {\n const component = node.arguments?.[0];\n if (\n component?.type === 'Identifier' &&\n state.componentNames.has(component.value)\n ) {\n state.usagePatterns.memoizedComponents.add({\n component: component.value,\n line: node.span?.start || 0,\n });\n // console.log(`🧠 Memoized component: ${component.value}`);\n }\n}\n\n/**\n * Analyzes React.forwardRef() usage\n */\nexport function analyzeForwardRefUsage(node: any, state: ParserState): void {\n state.usagePatterns.forwardedRefs.add({\n line: node.span?.start || 0,\n });\n // console.log('↗️ ForwardRef usage found');\n}\n\n/**\n * Analyzes ReactDOM.createPortal() usage\n */\nexport function analyzePortalUsage(node: any, state: ParserState): void {\n state.usagePatterns.portalUsage.add({\n line: node.span?.start || 0,\n });\n // console.log('🌀 Portal usage found');\n}\n\n/**\n * Analyzes member expression access (e.g., Foundation.Button)\n */\nexport function analyzeMemberExpression(node: any, state: ParserState): void {\n // Check if this is a namespace access like Foundation.Button\n if (\n node.object?.type === 'Identifier' &&\n state.allIdentifiers.has(node.object.value)\n ) {\n // const namespaceName = node.object.value;\n const propertyName = node.property?.value;\n\n if (propertyName) {\n // Track namespace property access\n state.componentNames.add(propertyName);\n // console.log(`🔗 Namespace access: ${namespaceName}.${propertyName}`);\n }\n }\n}\n\n/**\n * Checks if a node represents HOC pattern\n */\nexport function isHOCPattern(node: any, state: ParserState): boolean {\n // Simple heuristic: function that returns a component-like structure\n return (\n node.callee?.type === 'Identifier' &&\n node.arguments?.some(\n (arg: any) =>\n arg.type === 'Identifier' && state.componentNames.has(arg.value),\n )\n );\n}\n","import type { ParserState, VisitorContext } from '../types';\nimport { analyzeImportDeclaration } from '../patterns/imports';\nimport { analyzeJSXElement, analyzeJSXOpeningElement } from '../patterns/jsx';\nimport { analyzeVariableDeclaration } from '../patterns/variables';\nimport { analyzeConditionalExpression } from '../patterns/conditionals';\nimport {\n analyzeArrayExpression,\n analyzeObjectExpression,\n} from '../patterns/collections';\nimport {\n analyzeLazyImport,\n analyzeDynamicImport,\n} from '../patterns/lazy-dynamic';\nimport {\n analyzeHOCUsage,\n analyzeMemoUsage,\n analyzeForwardRefUsage,\n analyzePortalUsage,\n analyzeMemberExpression,\n isHOCPattern,\n} from '../patterns/advanced';\n\n/**\n * Main AST visitor that routes nodes to appropriate pattern analyzers\n */\nexport function visitNode(\n node: any,\n state: ParserState,\n context: VisitorContext = {},\n): void {\n if (!node) return;\n\n switch (node.type) {\n case 'Module':\n // Process imports first (they populate componentNames)\n if (node.body) {\n for (const item of node.body) {\n if (item.type === 'ImportDeclaration') {\n visitNode(item, state, context);\n }\n }\n // Then process everything else\n for (const item of node.body) {\n if (item.type !== 'ImportDeclaration') {\n visitNode(item, state, { ...context, parent: node });\n }\n }\n }\n break;\n\n case 'ImportDeclaration':\n analyzeImportDeclaration(node, state);\n break;\n\n case 'CallExpression':\n analyzeCallExpression(node, state, context);\n break;\n\n case 'VariableDeclaration':\n analyzeVariableDeclaration(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'JSXElement':\n case 'JSXFragment':\n analyzeJSXElement(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'JSXOpeningElement':\n analyzeJSXOpeningElement(node, state, context.parent);\n break;\n\n case 'ArrayExpression':\n analyzeArrayExpression(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'ObjectExpression':\n analyzeObjectExpression(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'MemberExpression':\n analyzeMemberExpression(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'ConditionalExpression':\n analyzeConditionalExpression(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'FunctionDeclaration':\n case 'ClassDeclaration':\n case 'ExpressionStatement':\n case 'ReturnStatement':\n case 'VariableDeclarator':\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n visitChildren(node, state, { ...context, parent: node });\n break;\n\n default:\n visitChildren(node, state, context);\n break;\n }\n}\n\n/**\n * Analyzes call expressions and routes to specific analyzers\n */\nfunction analyzeCallExpression(\n node: any,\n state: ParserState,\n context: VisitorContext,\n): void {\n // Analyze lazy imports\n if (\n node.callee?.value === 'lazy' ||\n (node.callee?.object?.value === 'React' &&\n node.callee?.property?.value === 'lazy')\n ) {\n analyzeLazyImport(node, state);\n }\n\n // Analyze dynamic imports\n if (node.callee?.type === 'Import') {\n analyzeDynamicImport(node, state);\n }\n\n // Analyze HOC patterns\n if (isHOCPattern(node, state)) {\n analyzeHOCUsage(node, state);\n }\n\n // Analyze React.memo, React.forwardRef\n if (node.callee?.object?.value === 'React') {\n if (node.callee?.property?.value === 'memo') {\n analyzeMemoUsage(node, state);\n } else if (node.callee?.property?.value === 'forwardRef') {\n analyzeForwardRefUsage(node, state);\n }\n }\n\n // Analyze createPortal\n if (\n node.callee?.property?.value === 'createPortal' ||\n node.callee?.value === 'createPortal'\n ) {\n analyzePortalUsage(node, state);\n }\n\n visitChildren(node, state, context);\n}\n\n/**\n * Visits all children of a node\n */\nfunction visitChildren(\n node: any,\n state: ParserState,\n context: VisitorContext,\n): void {\n if (!node) return;\n\n for (const key in node) {\n const value = node[key];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item && typeof item === 'object') {\n visitNode(item, state, { ...context, parent: node });\n }\n }\n } else if (value && typeof value === 'object' && value.type) {\n visitNode(value, state, { ...context, parent: node });\n }\n }\n}\n","import type { ParserState, UsageReport } from '../types';\n\n/**\n * Generates a comprehensive usage report from parser state\n */\nexport function generateReport(state: ParserState): UsageReport {\n const report: UsageReport = {\n summary: {\n totalImports:\n state.usagePatterns.defaultImports.size +\n state.usagePatterns.namedImports.size +\n state.usagePatterns.namespaceImports.size,\n totalComponents: state.componentNames.size,\n totalUsagePatterns: calculateTotalPatterns(state),\n },\n patterns: {\n imports: {\n default: Array.from(state.usagePatterns.defaultImports),\n named: Array.from(state.usagePatterns.namedImports),\n namespace: Array.from(state.usagePatterns.namespaceImports),\n aliased: Array.from(state.usagePatterns.aliasedImports.values()),\n },\n usage: {\n jsx: Array.from(state.usagePatterns.jsxUsage.values()),\n variables: Array.from(\n state.usagePatterns.variableAssignments.entries(),\n ).map(([key, value]) => ({\n variable: key,\n assignment: value.assignment,\n })),\n destructuring: Array.from(state.usagePatterns.destructuredUsage),\n conditional: Array.from(state.usagePatterns.conditionalUsage),\n arrays: Array.from(state.usagePatterns.arrayMappings),\n objects: Array.from(state.usagePatterns.objectMappings),\n },\n advanced: {\n lazy: Array.from(state.usagePatterns.lazyImports),\n dynamic: Array.from(state.usagePatterns.dynamicImports),\n hoc: Array.from(state.usagePatterns.hocUsage),\n memo: Array.from(state.usagePatterns.memoizedComponents),\n forwardRef: Array.from(state.usagePatterns.forwardedRefs),\n portal: Array.from(state.usagePatterns.portalUsage),\n },\n props: Array.from(state.usagePatterns.propsAnalysis.entries()).map(\n ([component, analysis]) => ({\n component,\n analysis,\n }),\n ),\n },\n components: Array.from(state.componentNames).sort(),\n };\n\n return report;\n}\n\n/**\n * Calculates total number of usage patterns found\n */\nfunction calculateTotalPatterns(state: ParserState): number {\n let sum = 0;\n const patterns = state.usagePatterns;\n\n for (const key in patterns) {\n const pattern = (patterns as any)[key];\n if (pattern instanceof Set) {\n sum += pattern.size;\n } else if (pattern instanceof Map) {\n sum += pattern.size;\n }\n }\n\n return sum;\n}\n","import { parseSync } from '@swc/core';\nimport fs from 'node:fs';\nimport type { ParseOptions, UsageReport } from './types';\nimport { createState } from './core/state';\nimport { visitNode } from './core/visitor';\nimport { generateReport } from './core/report';\n\n/**\n * Parses code and analyzes React component usage patterns\n */\nexport function parseCode(\n code: string,\n options: ParseOptions = {},\n): UsageReport {\n const state = createState();\n\n // Parse code to AST\n const ast = parseSync(code, {\n syntax: 'typescript',\n tsx: true,\n decorators: true,\n dynamicImport: true,\n });\n\n // Visit all nodes and analyze patterns\n visitNode(ast, state);\n\n // Generate report\n const report = generateReport(state);\n\n // Optional: Filter by library if specified\n if (options.libraryName) {\n return filterReportByLibrary(report, options.libraryName);\n }\n\n return report;\n}\n\n/**\n * Parses a file and analyzes React component usage patterns\n */\nexport function parseFile(\n filePath: string,\n options: ParseOptions = {},\n): UsageReport | null {\n const code = fs.readFileSync(filePath, 'utf8');\n return parseCode(code, options);\n}\n\n/**\n * Filters report to only include imports/usage from a specific library\n */\nfunction filterReportByLibrary(\n report: UsageReport,\n libraryName: string,\n): UsageReport {\n const isFromLibrary = (source: string) =>\n source.startsWith(libraryName) || source.includes(libraryName);\n\n return {\n ...report,\n patterns: {\n imports: {\n default: report.patterns.imports.default.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n named: report.patterns.imports.named.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n namespace: report.patterns.imports.namespace.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n aliased: report.patterns.imports.aliased.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n },\n usage: report.patterns.usage,\n advanced: {\n lazy: report.patterns.advanced.lazy.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n dynamic: report.patterns.advanced.dynamic.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n hoc: report.patterns.advanced.hoc,\n memo: report.patterns.advanced.memo,\n forwardRef: report.patterns.advanced.forwardRef,\n portal: report.patterns.advanced.portal,\n },\n props: report.patterns.props,\n },\n };\n}\n\n// Re-export types for convenience\nexport type { UsageReport, ParseOptions } from './types';\n","import type { UsageReport } from '../swc-parser';\n\nexport interface ComponentUsage {\n name: string;\n source: string;\n count: number;\n files: Set<string>;\n}\n\nexport interface PackageDistribution {\n packageName: string;\n version: string | null;\n componentCount: number;\n usageCount: number;\n percentage: number;\n components: string[];\n}\n\nexport interface PatternCount {\n patternType: string;\n displayName: string;\n count: number;\n}\n\nexport interface AggregatedReport {\n filesAnalyzed: number;\n totalImports: number;\n totalComponents: number;\n totalUsagePatterns: number;\n patternCounts: PatternCount[];\n componentUsage: Map<string, ComponentUsage>;\n topComponents: ComponentUsage[];\n allComponents: string[];\n packageDistribution: PackageDistribution[];\n reports: UsageReport[];\n}\n\nexport function aggregateReports(\n reports: UsageReport[],\n versions: Record<string, string> = {},\n): AggregatedReport {\n const componentUsageMap = new Map<string, ComponentUsage>();\n let totalImports = 0;\n let totalUsagePatterns = 0;\n const patternCountMap = new Map<string, number>();\n\n // Create package resolver with available packages from lockfile\n const availablePackages = Object.keys(versions);\n\n // Aggregate data from all reports\n for (const report of reports) {\n totalImports += report.summary.totalImports;\n totalUsagePatterns += report.summary.totalUsagePatterns;\n\n // Aggregate component usage from JSX patterns\n for (const jsx of report.patterns.usage.jsx) {\n const key = jsx.component;\n const existing = componentUsageMap.get(key);\n\n if (existing) {\n existing.count++;\n } else {\n // Try to find the source from imports\n const source = findComponentSource(\n jsx.component,\n report,\n availablePackages,\n );\n componentUsageMap.set(key, {\n name: jsx.component,\n source,\n count: 1,\n files: new Set(),\n });\n }\n }\n\n // Count patterns\n countPatterns(report, patternCountMap);\n }\n\n // Convert to arrays and sort\n const topComponents = Array.from(componentUsageMap.values()).sort(\n (a, b) => b.count - a.count,\n );\n\n const allComponents = Array.from(componentUsageMap.keys()).sort();\n\n const patternCounts = Array.from(patternCountMap.entries())\n .map(([type, count]) => ({\n patternType: type,\n displayName: getPatternDisplayName(type),\n count,\n }))\n .sort((a, b) => b.count - a.count);\n\n const packageDistribution = calculatePackageDistribution(\n componentUsageMap,\n versions,\n );\n\n return {\n filesAnalyzed: reports.length,\n totalImports,\n totalComponents: componentUsageMap.size,\n totalUsagePatterns,\n patternCounts,\n componentUsage: componentUsageMap,\n topComponents,\n allComponents,\n packageDistribution,\n reports,\n };\n}\n\nfunction resolvePackageFromImportPath(\n importPath: string,\n availablePackages: string[],\n): string {\n // If it's a relative import, return 'local'\n if (importPath.startsWith('.') || importPath.startsWith('/')) {\n console.log('importPath', importPath); // TODO remove\n return 'local';\n }\n\n // Try to find a matching package from available packages\n // Sort by length (descending) to match most specific package first\n // e.g., '@design-system/foundation' before '@design-system'\n const sortedPackages = [...availablePackages].sort(\n (a, b) => b.length - a.length,\n );\n\n for (const pkg of sortedPackages) {\n // Exact match\n if (importPath === pkg) {\n return pkg;\n }\n\n // Subpath import match (e.g., '@design-system/foundation/button' matches '@design-system/foundation')\n if (importPath.startsWith(`${pkg}/`)) {\n return pkg;\n }\n }\n\n // If no package matches, it's likely not in the lockfile\n return 'unknown';\n}\n\nfunction findComponentSource(\n componentName: string,\n report: UsageReport,\n availablePackages: string[],\n): string {\n // Check named imports\n const namedImport = report.patterns.imports.named.find(\n (imp) => imp.name === componentName,\n );\n if (namedImport)\n return resolvePackageFromImportPath(namedImport.source, availablePackages);\n\n // Check default imports\n const defaultImport = report.patterns.imports.default.find(\n (imp) => imp.name === componentName,\n );\n if (defaultImport)\n return resolvePackageFromImportPath(\n defaultImport.source,\n availablePackages,\n );\n\n // Check aliased imports\n const aliasedImport = report.patterns.imports.aliased.find(\n (imp) => imp.local === componentName,\n );\n if (aliasedImport)\n return resolvePackageFromImportPath(\n aliasedImport.source,\n availablePackages,\n );\n\n return 'unknown';\n}\n\nfunction countPatterns(report: UsageReport, patternMap: Map<string, number>) {\n // Count import patterns\n increment(\n patternMap,\n 'imports.default',\n report.patterns.imports.default.length,\n );\n increment(patternMap, 'imports.named', report.patterns.imports.named.length);\n increment(\n patternMap,\n 'imports.namespace',\n report.patterns.imports.namespace.length,\n );\n increment(\n patternMap,\n 'imports.aliased',\n report.patterns.imports.aliased.length,\n );\n\n // Count usage patterns\n increment(patternMap, 'usage.jsx', report.patterns.usage.jsx.length);\n increment(\n patternMap,\n 'usage.variables',\n report.patterns.usage.variables.length,\n );\n increment(\n patternMap,\n 'usage.destructuring',\n report.patterns.usage.destructuring.length,\n );\n increment(\n patternMap,\n 'usage.conditional',\n report.patterns.usage.conditional.length,\n );\n increment(patternMap, 'usage.arrays', report.patterns.usage.arrays.length);\n increment(patternMap, 'usage.objects', report.patterns.usage.objects.length);\n\n // Count advanced patterns\n increment(patternMap, 'advanced.lazy', report.patterns.advanced.lazy.length);\n increment(\n patternMap,\n 'advanced.dynamic',\n report.patterns.advanced.dynamic.length,\n );\n increment(patternMap, 'advanced.hoc', report.patterns.advanced.hoc.length);\n increment(patternMap, 'advanced.memo', report.patterns.advanced.memo.length);\n increment(\n patternMap,\n 'advanced.forwardRef',\n report.patterns.advanced.forwardRef.length,\n );\n increment(\n patternMap,\n 'advanced.portal',\n report.patterns.advanced.portal.length,\n );\n}\n\nfunction increment(map: Map<string, number>, key: string, value: number) {\n map.set(key, (map.get(key) || 0) + value);\n}\n\nfunction getPatternDisplayName(patternType: string): string {\n const displayNames: Record<string, string> = {\n 'imports.default': 'Default Imports',\n 'imports.named': 'Named Imports',\n 'imports.namespace': 'Namespace Imports',\n 'imports.aliased': 'Aliased Imports',\n 'usage.jsx': 'JSX Usage',\n 'usage.variables': 'Variable Assignments',\n 'usage.destructuring': 'Destructuring',\n 'usage.conditional': 'Conditional Usage',\n 'usage.arrays': 'Array Mappings',\n 'usage.objects': 'Object Mappings',\n 'advanced.lazy': 'Lazy Loading',\n 'advanced.dynamic': 'Dynamic Imports',\n 'advanced.hoc': 'Higher-Order Components',\n 'advanced.memo': 'Memoized Components',\n 'advanced.forwardRef': 'Forward Refs',\n 'advanced.portal': 'Portal Usage',\n };\n return displayNames[patternType] || patternType;\n}\n\nfunction getPackageVersion(\n packageName: string,\n versions: Record<string, string>,\n): string | null {\n // First try exact match\n if (versions[packageName]) {\n return versions[packageName];\n }\n\n // Handle subpath imports like '@design-system/foundation/button'\n // Try to find the base package '@design-system/foundation'\n if (packageName.includes('/')) {\n const parts = packageName.split('/');\n\n // For scoped packages like '@scope/package/subpath'\n if (packageName.startsWith('@') && parts.length > 2) {\n const basePackage = `${parts[0]}/${parts[1]}`;\n if (versions[basePackage]) {\n return versions[basePackage];\n }\n }\n\n // For non-scoped packages like 'package/subpath'\n if (!packageName.startsWith('@') && parts.length > 1) {\n const basePackage = parts[0];\n if (versions[basePackage]) {\n return versions[basePackage];\n }\n }\n }\n\n return null;\n}\n\nfunction calculatePackageDistribution(\n componentUsageMap: Map<string, ComponentUsage>,\n versions: Record<string, string>,\n): PackageDistribution[] {\n const packageMap = new Map<string, PackageDistribution>();\n\n // Group components by package\n for (const component of componentUsageMap.values()) {\n if (component.source === 'unknown') continue;\n\n const existing = packageMap.get(component.source);\n if (existing) {\n existing.componentCount++;\n existing.usageCount += component.count;\n existing.components.push(component.name);\n } else {\n packageMap.set(component.source, {\n packageName: component.source,\n version: getPackageVersion(component.source, versions),\n componentCount: 1,\n usageCount: component.count,\n percentage: 0,\n components: [component.name],\n });\n }\n }\n\n // Calculate percentages based on total external package usage (not all patterns)\n const distribution = Array.from(packageMap.values());\n const totalExternalUsage = distribution.reduce(\n (sum, pkg) => sum + pkg.usageCount,\n 0,\n );\n\n for (const pkg of distribution) {\n pkg.percentage =\n totalExternalUsage > 0 ? (pkg.usageCount / totalExternalUsage) * 100 : 0;\n }\n\n return distribution.sort((a, b) => b.usageCount - a.usageCount);\n}\n","/**\n * Format a number with thousand separators\n * @param num - Number to format\n * @returns Formatted string (e.g., 1,234,567)\n */\nexport function formatCount(num: number): string {\n return num.toLocaleString();\n}\n\n/**\n * Format duration in seconds to a readable string\n * @param seconds - Duration in seconds\n * @returns Formatted string (e.g., 10.21s, 1.57s, 0.12s)\n */\nexport function formatDuration(seconds: number): string {\n return `${seconds.toFixed(2)}s`;\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport } from './aggregator';\nimport { formatCount } from './format-utils';\n\nfunction printHeader() {\n console.log(chalk.green.bold('\\n📊 Summary\\n'));\n}\n\nexport function printSummary(aggregated: AggregatedReport) {\n printHeader();\n\n const table = new Table({\n head: ['Metric', 'Count'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n // Calculate external components only (filter out unknown and local)\n const externalComponents = aggregated.topComponents.filter(\n (comp) => comp.source !== 'unknown' && comp.source !== 'local',\n ).length;\n\n // Calculate total external package usage\n const totalExternalUsage = aggregated.packageDistribution.reduce(\n (sum, pkg) => sum + pkg.usageCount,\n 0,\n );\n\n table.push(\n ['Files Analyzed', formatCount(aggregated.filesAnalyzed)],\n ['External Packages', formatCount(aggregated.packageDistribution.length)],\n ['External Components', formatCount(externalComponents)],\n ['Total Usages', formatCount(totalExternalUsage)],\n );\n\n console.log(table.toString());\n}\n","import chalk from 'chalk';\nimport { formatCount } from './format-utils';\n\nexport interface ChartData {\n label: string;\n value: number;\n}\n\nexport interface ChartOptions {\n maxWidth?: number;\n showValues?: boolean;\n barChar?: string;\n emptyChar?: string;\n}\n\nexport function renderBarChart(data: ChartData[], options: ChartOptions = {}) {\n const {\n maxWidth = 50,\n showValues = true,\n barChar = '█',\n emptyChar = '░',\n } = options;\n\n if (data.length === 0) {\n console.log(chalk.gray(' No data to display'));\n return;\n }\n\n // Find max value for scaling\n const maxValue = Math.max(...data.map((d) => d.value));\n if (maxValue === 0) {\n console.log(chalk.gray(' All values are zero'));\n return;\n }\n\n // Find longest label for alignment\n const maxLabelLength = Math.max(...data.map((d) => d.label.length));\n\n // Render each bar\n for (const item of data) {\n const percentage = item.value / maxValue;\n const barLength = Math.round(percentage * maxWidth);\n const emptyLength = maxWidth - barLength;\n\n // Pad label\n const paddedLabel = item.label.padEnd(maxLabelLength, ' ');\n\n // Build bar\n const bar =\n chalk.green(barChar.repeat(barLength)) +\n chalk.gray(emptyChar.repeat(emptyLength));\n\n // Build value string\n const valueStr = showValues ? ` ${formatCount(item.value)}` : '';\n\n console.log(`${paddedLabel} ${bar}${valueStr}\\n`);\n }\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport, ComponentUsage } from './aggregator';\nimport { renderBarChart } from './chart-renderer';\n\nfunction printHeader() {\n // FIXME why double space, if single space output is wrong somehow?\n console.log(chalk.magenta.bold('\\n⚛️ Components\\n'));\n}\n\nexport function printComponents(\n aggregated: AggregatedReport,\n mode: 'table' | 'chart',\n) {\n const components = aggregated.topComponents;\n\n if (mode === 'table') {\n printComponentsTable(components);\n } else if (mode === 'chart') {\n printComponentsChart(components);\n }\n}\n\nfunction printComponentsTable(components: ComponentUsage[]) {\n printHeader();\n\n // Filter out unknown and local components - only show external packages\n const externalComponents = components.filter(\n (comp) => comp.source !== 'unknown' && comp.source !== 'local',\n );\n\n if (externalComponents.length === 0) {\n console.log(chalk.gray(' No external components found'));\n return;\n }\n\n const table = new Table({\n head: ['Component', 'Package', 'Count'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n externalComponents.forEach((comp) => {\n table.push([comp.name, comp.source, comp.count.toString()]);\n });\n\n console.log(table.toString());\n}\n\nfunction printComponentsChart(components: ComponentUsage[]) {\n printHeader();\n\n // Filter out unknown and local components - only show external packages\n const externalComponents = components.filter(\n (comp) => comp.source !== 'unknown' && comp.source !== 'local',\n );\n\n if (externalComponents.length === 0) {\n console.log(chalk.gray(' No external components found'));\n return;\n }\n\n const data = externalComponents.map((comp) => ({\n label: comp.name,\n value: comp.count,\n }));\n\n renderBarChart(data, { maxWidth: 50 });\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport, PatternCount } from './aggregator';\nimport { renderBarChart } from './chart-renderer';\n\nfunction printHeader() {\n console.log(chalk.blue.bold('\\n🔍 Code Patterns\\n'));\n}\n\nexport function printPatterns(\n aggregated: AggregatedReport,\n mode: 'table' | 'chart',\n) {\n const patterns = aggregated.patternCounts.filter((p) => p.count > 0);\n\n if (mode === 'table') {\n printPatternsTable(patterns);\n } else if (mode === 'chart') {\n printPatternsChart(patterns);\n }\n}\n\nfunction printPatternsTable(patterns: PatternCount[]) {\n printHeader();\n\n if (patterns.length === 0) {\n console.log(chalk.gray(' No patterns found'));\n return;\n }\n\n const table = new Table({\n head: ['Pattern', 'Count'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n patterns.forEach((pattern) => {\n table.push([pattern.displayName, pattern.count.toString()]);\n });\n\n console.log(table.toString());\n\n // Show total patterns count\n const totalPatterns = patterns.reduce((sum, p) => sum + p.count, 0);\n console.log(chalk.gray(`\\nTotal: ${totalPatterns} patterns detected`));\n}\n\nfunction printPatternsChart(patterns: PatternCount[]) {\n printHeader();\n\n if (patterns.length === 0) {\n console.log(chalk.gray(' No patterns found'));\n return;\n }\n\n const data = patterns.map((pattern) => ({\n label: pattern.displayName,\n value: pattern.count,\n }));\n\n renderBarChart(data, { maxWidth: 50 });\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport, PackageDistribution } from './aggregator';\nimport { formatCount } from './format-utils';\n\nfunction printHeader() {\n console.log(chalk.blueBright.bold('\\n📦 Packages\\n'));\n}\n\nexport function printPackages(\n aggregated: AggregatedReport,\n mode: 'table' | 'chart',\n) {\n const packages = aggregated.packageDistribution;\n\n if (mode === 'table') {\n printPackagesTable(packages);\n } else if (mode === 'chart') {\n printPackagesChart(packages);\n }\n}\n\nfunction printPackagesTable(packages: PackageDistribution[]) {\n printHeader();\n\n if (packages.length === 0) {\n console.log(chalk.gray(' No packages found'));\n return;\n }\n\n const table = new Table({\n head: ['Package', 'Version', 'Components', 'Usage', 'Percentage'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n packages.forEach((pkg) => {\n table.push([\n pkg.packageName,\n pkg.version || 'N/A',\n formatCount(pkg.componentCount),\n formatCount(pkg.usageCount),\n `${pkg.percentage.toFixed(1)}%`,\n ]);\n });\n\n console.log(table.toString());\n\n const totalComponents = packages.reduce(\n (sum, p) => sum + p.componentCount,\n 0,\n );\n const totalExternalUsage = packages.reduce((sum, p) => sum + p.usageCount, 0);\n console.log(\n chalk.gray(\n `\\nTotal: ${formatCount(packages.length)} packages | ${formatCount(totalComponents)} unique components | ${formatCount(totalExternalUsage)} total usages`,\n ),\n );\n}\n\nfunction printPackagesChart(packages: PackageDistribution[]) {\n printHeader();\n\n if (packages.length === 0) {\n console.log(chalk.gray(' No packages found'));\n return;\n }\n\n const maxBarWidth = 40;\n const maxPercentage = Math.max(...packages.map((p) => p.percentage));\n const maxLabelLength = Math.max(...packages.map((p) => p.packageName.length));\n\n packages.forEach((pkg) => {\n const barLength = Math.round(\n (pkg.percentage / maxPercentage) * maxBarWidth,\n );\n const emptyLength = maxBarWidth - barLength;\n const paddedLabel = pkg.packageName.padEnd(maxLabelLength, ' ');\n\n const bar =\n chalk.green('█'.repeat(barLength)) + chalk.gray('░'.repeat(emptyLength));\n\n console.log(\n `${paddedLabel} ${bar} ${chalk.bold(pkg.percentage.toFixed(1) + '%')} (${pkg.usageCount})`,\n );\n });\n}\n","import fs from 'fs';\nimport { glob } from 'glob';\n\n/**\n * Find files matching a glob pattern\n * @param pattern - Glob pattern\n * @param ignorePatterns - Glob pattenrs to ignore\n * @returns Array of file paths\n */\nexport async function findFiles(\n pattern: string,\n ignorePatterns: string[],\n): Promise<string[]> {\n const files = await glob(pattern, {\n ignore: ignorePatterns,\n nodir: true,\n absolute: true,\n windowsPathsNoEscape: true,\n });\n\n return files;\n}\n\n/**\n * Read file content\n * @param filePath - Path to file\n * @returns File content\n */\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf8');\n}\n","import fs from 'fs';\nimport path from 'path';\nimport type { LockfileAdapter } from '../lock-file-adapter';\n\nexport class NpmLockfileAdapter implements LockfileAdapter {\n name = 'npm';\n supportedVersions = ['v2', 'v3'];\n\n detect(projectPath: string): string | null {\n const lockfilePath = path.join(projectPath, 'package-lock.json');\n return fs.existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n parse(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const lockData = JSON.parse(content);\n const versions: Record<string, string> = {};\n\n // npm v7+ uses \"packages\" field (lockfileVersion 2, 3)\n if (lockData.packages) {\n Object.entries(lockData.packages).forEach(\n ([pkgPath, pkgData]: [string, any]) => {\n if (!pkgPath || pkgPath === '') return; // Skip root\n\n // Remove leading \"node_modules/\"\n const pkgName = pkgPath.replace(/^node_modules\\//, '');\n\n if (pkgData.version) {\n versions[pkgName] = pkgData.version;\n }\n },\n );\n }\n\n // npm v6 uses \"dependencies\" field (fallback)\n if (lockData.dependencies && Object.keys(versions).length === 0) {\n function extractVersions(deps: any, prefix = ''): void {\n Object.entries(deps).forEach(([name, data]: [string, any]) => {\n const fullName = prefix ? `${prefix}/${name}` : name;\n if (data.version) {\n versions[fullName] = data.version;\n }\n if (data.dependencies) {\n extractVersions(data.dependencies, fullName);\n }\n });\n }\n extractVersions(lockData.dependencies);\n }\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse package-lock.json: ${message}`);\n return {}; // why?\n }\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport yaml from 'js-yaml';\nimport type { LockfileAdapter } from '../lock-file-adapter';\n\nexport class PnpmLockfileAdapter implements LockfileAdapter {\n name = 'pnpm';\n supportedVersions = ['v5', 'v6', 'v9'];\n\n detect(projectPath: string): string | null {\n const lockfilePath = path.join(projectPath, 'pnpm-lock.yaml');\n return fs.existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n parse(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const lockData = yaml.load(content) as any;\n const versions: Record<string, string> = {};\n\n // pnpm v9+ uses \"importers\" field\n if (lockData.importers) {\n const rootImporter = lockData.importers['.'];\n if (rootImporter) {\n // Parse dependencies\n if (rootImporter.dependencies) {\n for (const [name, data] of Object.entries(\n rootImporter.dependencies,\n )) {\n if (\n typeof data === 'object' &&\n data !== null &&\n 'version' in data\n ) {\n versions[name] = (data as any).version;\n }\n }\n }\n // Parse devDependencies\n if (rootImporter.devDependencies) {\n for (const [name, data] of Object.entries(\n rootImporter.devDependencies,\n )) {\n if (\n typeof data === 'object' &&\n data !== null &&\n 'version' in data\n ) {\n versions[name] = (data as any).version;\n }\n }\n }\n }\n }\n\n // pnpm v6-8 uses \"packages\" field\n if (lockData.packages && Object.keys(versions).length === 0) {\n Object.keys(lockData.packages).forEach((key) => {\n // Key format: \"/@babel/core/7.22.5\" or \"/package/1.0.0\"\n const match = key.match(/\\/(.+?)\\/(\\d+\\.\\d+\\.\\d+.*?)(?:_|$)/);\n if (match) {\n const [, pkgName, version] = match;\n versions[pkgName] = version;\n }\n });\n }\n\n // pnpm v5 uses \"dependencies\" and \"specifiers\"\n if (lockData.dependencies && Object.keys(versions).length === 0) {\n Object.entries(lockData.dependencies).forEach(\n ([name, versionSpec]: [string, any]) => {\n // versionSpec format: \"1.0.0\" or \"link:../package\"\n if (\n typeof versionSpec === 'string' &&\n !versionSpec.startsWith('link:')\n ) {\n versions[name] = versionSpec;\n } else if (typeof versionSpec === 'object' && versionSpec.version) {\n versions[name] = versionSpec.version;\n }\n },\n );\n }\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse pnpm-lock.yaml: ${message}`);\n return {};\n }\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport lockfile from '@yarnpkg/lockfile';\nimport type { LockfileAdapter } from '../lock-file-adapter';\n\nexport class YarnLockfileAdapter implements LockfileAdapter {\n name = 'yarn';\n supportedVersions = ['v1', 'v2+'];\n\n detect(projectPath: string): string | null {\n const lockfilePath = path.join(projectPath, 'yarn.lock');\n return fs.existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n parse(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const parsed = lockfile.parse(content);\n\n if (parsed.type !== 'success') {\n console.warn('Warning: Failed to parse yarn.lock');\n return {};\n }\n\n const versions: Record<string, string> = {};\n\n Object.entries(parsed.object).forEach(([key, value]: [string, any]) => {\n // Key format: \"package@^1.0.0\" or \"@scope/package@^1.0.0\"\n // Extract package name (without version specifier)\n let pkgName = key;\n\n // Handle scoped packages\n if (key.startsWith('@')) {\n const match = key.match(/^(@[^@]+\\/[^@]+)@/);\n if (match) {\n pkgName = match[1];\n }\n } else {\n const match = key.match(/^([^@]+)@/);\n if (match) {\n pkgName = match[1];\n }\n }\n\n if (value.version && (!versions[pkgName] || value.version)) {\n versions[pkgName] = value.version;\n }\n });\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse yarn.lock: ${message}`);\n return {};\n }\n }\n}\n","import { NpmLockfileAdapter } from './patterns/npm';\nimport { PnpmLockfileAdapter } from './patterns/pnpm';\nimport { YarnLockfileAdapter } from './patterns/yarn';\n\n/**\n * Lockfile parse result\n */\nexport interface LockfileResult {\n versions: Record<string, string>;\n lockfileType: 'npm' | 'yarn' | 'pnpm' | null;\n lockfilePath: string | null;\n supportedVersions: string[];\n}\n\nconst LOCKFILE_ADAPTERS = [\n new NpmLockfileAdapter(),\n new YarnLockfileAdapter(),\n new PnpmLockfileAdapter(),\n];\n\n/**\n * Find and parse the appropriate lockfile in a directory\n * @param projectPath - Path to the project directory\n * @returns Object with versions map and lockfile type\n */\nexport function findAndParseLockfile(projectPath: string): LockfileResult {\n for (const adapter of LOCKFILE_ADAPTERS) {\n const lockfilePath = adapter.detect(projectPath);\n if (lockfilePath) {\n const versions = adapter.parse(lockfilePath);\n return {\n versions,\n lockfileType: adapter.name as 'npm' | 'yarn' | 'pnpm',\n lockfilePath,\n supportedVersions: adapter.supportedVersions,\n };\n }\n }\n\n throw new Error('No supported lockfile found');\n}\n\n/**\n * Get the version of a specific package from lockfile\n * @param projectPath - Path to the project directory\n * @param packageName - Name of the package\n * @returns Version string or null if not found\n */\nexport function getPackageVersion(\n projectPath: string,\n packageName: string,\n): string | null {\n const { versions } = findAndParseLockfile(projectPath);\n return versions[packageName] || null;\n}\n\n/**\n * Get versions for multiple packages\n * @param projectPath - Path to the project directory\n * @param packageNames - Array of package names\n * @returns Map of package names to versions\n */\nexport function getPackageVersions(\n projectPath: string,\n packageNames: string[],\n): Record<string, string> {\n const { versions } = findAndParseLockfile(projectPath);\n const result: Record<string, string> = {};\n\n packageNames.forEach((pkgName) => {\n if (versions[pkgName]) {\n result[pkgName] = versions[pkgName];\n }\n });\n\n return result;\n}\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport { minimatch } from 'minimatch';\nimport { parseFile } from '../swc-parser';\nimport type { UsageReport } from '../swc-parser';\nimport { aggregateReports } from '../utils/aggregator';\nimport { printSummary } from '../utils/print-summary';\nimport { printComponents } from '../utils/print-components';\nimport { printPatterns } from '../utils/print-patterns';\nimport { printPackages } from '../utils/print-packages';\nimport { findFiles } from '../utils/file-utils';\nimport { findAndParseLockfile } from '../lock-parser';\nimport { formatDuration } from '../utils/format-utils';\n\ninterface ScanOptions {\n verbose?: boolean;\n summary?: string | boolean;\n noSummary?: boolean;\n components?: string;\n noComponents?: boolean;\n noPackages?: boolean;\n noPatterns?: boolean;\n packages?: string;\n patterns?: string;\n ignore?: string | string[];\n allowPackages?: string | string[];\n ignorePackages?: string | string[];\n}\n\ninterface NormalizedScanOptions {\n verbose: boolean;\n summary: 'log' | false;\n noSummary?: boolean;\n components: 'table' | 'chart' | false;\n noComponents?: boolean;\n noPackages?: boolean;\n noPatterns?: boolean;\n packages: 'table' | 'chart' | false;\n patterns: 'table' | 'chart';\n ignore: string[];\n allowPackages: string[];\n ignorePackages: string[];\n}\n\nexport function registerScanCommand(program: Command) {\n program\n .command('scan')\n .description('Scan and analyze local files')\n .argument(\n '[pattern]',\n 'Glob pattern for files to analyze (defaults to current directory recursively)',\n '**/*.{tsx,jsx,ts,js}',\n )\n .option('--ignore <pattern>', 'Glob pattern for files to ignore', [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n ])\n .option('--allow-packages <pattern>', 'Pattern for what packages to scan', [\n '**',\n ])\n .option(\n '--ignore-packages <pattern>',\n 'Pattern for what packages to ignore',\n [],\n )\n .option('--no-summary', 'Hide summary', 'table')\n .option(\n '--components [mode]',\n 'Show components table/chart (table, chart)',\n 'table',\n )\n .option('--no-components', 'Do not show components')\n .option(\n '--packages [mode]',\n 'Show packages table/chart (table, chart)',\n 'table',\n )\n .option('--no-packages', 'Do not show packages')\n .option(\n '--patterns [mode]',\n 'Show patterns table/chart (table, chart)',\n 'table',\n )\n .option('--no-patterns', 'Do not show patterns')\n .action(async (pattern: string, options: ScanOptions) => {\n const normalizedOptions = normalizeOptions(options);\n\n await executeScan(pattern, normalizedOptions);\n });\n}\n\nfunction normalizeArray(value?: string | string[]) {\n if (!value) {\n return [];\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction normalizeOptions(options: ScanOptions): NormalizedScanOptions {\n return {\n verbose: options.verbose || false,\n summary:\n options.summary === false || options.summary === 'false' ? false : 'log',\n noSummary: options.noSummary || false,\n components: (options.components as any) || 'table',\n packages: (options.packages as any) || 'table',\n patterns: (options.patterns as any) || 'table',\n ignore: normalizeArray(options.ignore),\n allowPackages: normalizeArray(options.allowPackages),\n ignorePackages: normalizeArray(options.ignorePackages),\n };\n}\n\nasync function executeScan(pattern: string, options: NormalizedScanOptions) {\n const startTime = Date.now();\n const spinner = ora('Parsing lockfile...').start();\n\n try {\n // Parse lockfile - start from current directory\n const lockfileResult = findAndParseLockfile(process.cwd());\n\n // Filter packages based on allow/ignore patterns\n const allPackages = Object.keys(lockfileResult.versions);\n const filteredPackages = allPackages.filter((pkg) => {\n // Must match allow patterns (default ['*'] = all)\n const allowed = options.allowPackages.some((p) => minimatch(pkg, p));\n\n // Must NOT match ignore patterns\n const ignored = options.ignorePackages.some((p) => minimatch(pkg, p));\n\n return allowed && !ignored;\n });\n\n // Create filtered versions object\n const filteredVersions: Record<string, string> = {};\n for (const pkg of filteredPackages) {\n filteredVersions[pkg] = lockfileResult.versions[pkg];\n }\n\n spinner.succeed(\n `Found ${lockfileResult.lockfileType} lockfile (supports: ${lockfileResult.supportedVersions.join(', ')}) - ${filteredPackages.length}/${allPackages.length} packages`,\n );\n\n // Find files matching pattern\n spinner.start('Finding files...');\n const files = await findFiles(pattern, options.ignore);\n\n if (files.length === 0) {\n spinner.fail(`No files found matching pattern: ${pattern}`);\n\n return;\n }\n\n spinner.succeed(chalk.green(` Found ${files.length} files`));\n\n // Analyze all files\n spinner.start('Analyzing files...');\n const reports: UsageReport[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n\n if (!options.verbose) {\n spinner.text = `Analyzing files... (${i + 1}/${files.length})`;\n }\n\n const report = parseFile(file);\n if (report) {\n reports.push(report);\n }\n }\n\n // Calculate elapsed time\n const elapsedTime = (Date.now() - startTime) / 1000;\n\n // Aggregate reports using filtered versions\n const aggregated = aggregateReports(reports, filteredVersions);\n\n if (options.packages && !options.noPackages) {\n printPackages(aggregated, options.packages);\n }\n\n if (options.components && !options.noComponents) {\n printComponents(aggregated, options.components);\n }\n\n if (options.patterns && !options.noPatterns) {\n printPatterns(aggregated, options.patterns);\n }\n\n if (options.summary && !options.noSummary) {\n printSummary(aggregated);\n }\n\n console.log('');\n\n spinner.succeed(\n chalk.green.bold(\n ` Analysis complete! Analyzed ${reports.length} files in ${formatDuration(elapsedTime)}\\n`,\n ),\n );\n } catch (error: any) {\n spinner.fail(chalk.red('Analysis failed: ' + error.message));\n console.error(error);\n\n process.exit(1);\n }\n}\n","{\n \"name\": \"hermex\",\n \"version\": \"1.1.1\",\n \"type\": \"module\",\n \"description\": \"SWC-based AST parser for analyzing code and React component usage patterns across entire codebases\",\n \"homepage\": \"https://github.com/Gallevy/hermex\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/Gallevy/hermex.git\"\n },\n \"main\": \"./dist/cli.js\",\n \"bin\": {\n \"hermex\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE.md\"\n ],\n \"scripts\": {\n \"check\": \"biome check\",\n \"format\": \"biome format --write\",\n \"format:ci\": \"biome ci\",\n \"lint\": \"oxlint\",\n \"lint:ci\": \"oxlint\",\n \"test\": \"vitest\",\n \"test:ci\": \"vitest run\",\n \"build\": \"tsup\",\n \"build:ci\": \"tsup --clean\",\n \"docs:update\": \"node scripts/update-docs.js\",\n \"dev:scan\": \"pnpm run build && cd fixtures && node ../dist/cli.js scan \\\"**/*.tsx\\\"\"\n },\n \"keywords\": [\n \"hermex\",\n \"react\",\n \"ast\",\n \"parser\",\n \"swc\",\n \"component\",\n \"analysis\",\n \"usage\",\n \"patterns\",\n \"cli\"\n ],\n \"dependencies\": {\n \"@semantic-release/github\": \"^12.0.2\",\n \"@swc/core\": \"^1.3.107\",\n \"@swc/types\": \"^0.1.5\",\n \"@yarnpkg/lockfile\": \"^1.1.0\",\n \"chalk\": \"^5.6.2\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^14.0.2\",\n \"glob\": \"^13.0.0\",\n \"js-yaml\": \"^4.1.1\",\n \"micromatch\": \"^4.0.8\",\n \"ora\": \"^9.0.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"2.3.8\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/commit-analyzer\": \"^13.0.1\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/npm\": \"^13.1.2\",\n \"@semantic-release/release-notes-generator\": \"^14.1.0\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.10.1\",\n \"@types/tmp\": \"^0.2.6\",\n \"oxlint\": \"^1.31.0\",\n \"semantic-release\": \"^25.0.2\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.3.3\",\n \"vitest\": \"^4.0.15\"\n },\n \"engines\": {\n \"node\": \">=24.11.1\"\n },\n \"author\": \"Gallevy\",\n \"license\": \"MIT\"\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { registerScanCommand } from './commands/scan';\nimport packageJson from '../package.json';\n\nexport const program = new Command();\n\nprogram\n .name('hermex')\n .description('Analyze React component usage patterns in your codebase')\n .version(packageJson.version);\n\nregisterScanCommand(program);\n\nprogram.parse(process.argv);\n"]}
1
+ {"version":3,"sources":["../src/swc-parser/core/state.ts","../src/swc-parser/patterns/imports.ts","../src/swc-parser/utils/jsx-helpers.ts","../src/swc-parser/patterns/props.ts","../src/swc-parser/patterns/jsx.ts","../src/swc-parser/utils/matchers.ts","../src/swc-parser/patterns/variables.ts","../src/swc-parser/patterns/conditionals.ts","../src/swc-parser/patterns/collections.ts","../src/swc-parser/patterns/lazy-dynamic.ts","../src/swc-parser/patterns/advanced.ts","../src/swc-parser/core/visitor.ts","../src/swc-parser/core/report.ts","../src/swc-parser/index.ts","../src/utils/aggregator.ts","../src/utils/format-utils.ts","../src/utils/print-summary.ts","../src/utils/chart-renderer.ts","../src/utils/print-components.ts","../src/utils/print-patterns.ts","../src/utils/print-packages.ts","../src/utils/print-errors.ts","../src/utils/file-utils.ts","../src/lock-parser/patterns/npm.ts","../src/lock-parser/patterns/pnpm.ts","../src/lock-parser/patterns/yarn.ts","../src/lock-parser/index.ts","../src/commands/scan.ts","../package.json","../src/cli.ts"],"names":["fs","chalk","printHeader","Table","path","program"],"mappings":"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","file":"cli.js","sourcesContent":["import type { ParserState, UsagePatterns } from '../types';\n\nexport function createState(): ParserState {\n const usagePatterns: UsagePatterns = {\n directImports: new Set(),\n namedImports: new Set(),\n namespaceImports: new Set(),\n defaultImports: new Set(),\n aliasedImports: new Map(),\n variableAssignments: new Map(),\n componentMappings: new Set(),\n lazyImports: new Set(),\n dynamicImports: new Set(),\n conditionalUsage: new Set(),\n arrayMappings: new Set(),\n objectMappings: new Set(),\n hocUsage: new Set(),\n renderProps: new Set(),\n contextUsage: new Set(),\n forwardedRefs: new Set(),\n memoizedComponents: new Set(),\n portalUsage: new Set(),\n jsxUsage: new Map(),\n destructuredUsage: new Set(),\n propsAnalysis: new Map(),\n };\n\n return {\n usagePatterns,\n componentNames: new Set(),\n allIdentifiers: new Set(),\n };\n}\n","import type { ImportDeclaration } from '@swc/core';\nimport type { ParserState } from '../types';\n\n/**\n * Analyzes import declarations and tracks all types:\n * - Default imports\n * - Named imports\n * - Namespace imports\n * - Aliased imports\n */\nexport function analyzeImportDeclaration(\n node: ImportDeclaration,\n state: ParserState,\n): void {\n const source = node.source.value;\n\n // console.log(`📦 Found import: ${source}`);\n\n for (const spec of node.specifiers) {\n switch (spec.type) {\n case 'ImportDefaultSpecifier':\n analyzeDefaultImport(spec, source, node, state);\n break;\n\n case 'ImportNamespaceSpecifier':\n analyzeNamespaceImport(spec, source, node, state);\n break;\n\n case 'ImportSpecifier':\n analyzeNamedImport(spec, source, node, state);\n break;\n }\n }\n}\n\nfunction analyzeDefaultImport(\n spec: any,\n source: string,\n node: ImportDeclaration,\n state: ParserState,\n): void {\n const name = spec.local.value;\n\n state.usagePatterns.defaultImports.add({\n name,\n source,\n line: node.span?.start || 0,\n });\n\n state.componentNames.add(name);\n}\n\nfunction analyzeNamespaceImport(\n spec: any,\n source: string,\n node: ImportDeclaration,\n state: ParserState,\n): void {\n const name = spec.local.value;\n\n state.usagePatterns.namespaceImports.add({\n name,\n source,\n line: node.span?.start || 0,\n });\n\n state.allIdentifiers.add(name);\n}\n\nfunction analyzeNamedImport(\n spec: any,\n source: string,\n node: ImportDeclaration,\n state: ParserState,\n): void {\n const importedName = spec.imported ? spec.imported.value : spec.local.value;\n const localName = spec.local.value;\n\n state.usagePatterns.namedImports.add({\n name: importedName,\n source,\n line: node.span?.start || 0,\n });\n\n // Track aliases\n if (importedName !== localName) {\n state.usagePatterns.aliasedImports.set(localName, {\n imported: importedName,\n local: localName,\n source,\n line: node.span?.start || 0,\n });\n }\n\n state.componentNames.add(localName);\n}\n","import type { ParserState } from '../types';\n\n/**\n * Extracts the name from a JSX element (handles identifiers and member expressions)\n */\nexport function getJSXElementName(nameNode: any): string {\n if (!nameNode) return '';\n\n switch (nameNode.type) {\n case 'Identifier':\n return nameNode.value;\n case 'JSXMemberExpression':\n return `${getJSXElementName(nameNode.object)}.${nameNode.property.value}`;\n default:\n return '';\n }\n}\n\n/**\n * Checks if a JSX member expression is a known component\n */\nexport function isMemberExpressionComponent(\n nameNode: any,\n state: ParserState,\n): boolean {\n if (nameNode?.type === 'JSXMemberExpression') {\n const objectName = getJSXElementName(nameNode.object);\n return state.allIdentifiers.has(objectName);\n }\n return false;\n}\n\n/**\n * Extracts props from JSX attributes\n */\nexport function extractJSXProps(attributes: any[]): Array<{\n name: string;\n value: any;\n isSpread?: boolean;\n}> {\n if (!attributes) return [];\n\n return attributes\n .map((attr) => {\n if (attr.type === 'JSXAttribute') {\n return {\n name: attr.name?.value || attr.name?.name?.value,\n value: extractJSXAttributeValue(attr.value),\n };\n }\n if (attr.type === 'SpreadElement') {\n return {\n name: '...',\n value: '[spread]',\n isSpread: true,\n };\n }\n return null;\n })\n .filter(Boolean) as Array<{\n name: string;\n value: any;\n isSpread?: boolean;\n }>;\n}\n\n/**\n * Extracts value from JSX attribute\n */\nexport function extractJSXAttributeValue(value: any): any {\n if (!value) return true; // boolean attribute\n\n switch (value.type) {\n case 'StringLiteral':\n return value.value;\n case 'JSXExpressionContainer':\n return extractExpressionValue(value.expression);\n default:\n return '[complex]';\n }\n}\n\n/**\n * Extracts a readable value from an expression\n */\nexport function extractExpressionValue(expr: any): any {\n if (!expr) return '[unknown]';\n\n switch (expr.type) {\n case 'StringLiteral':\n case 'NumericLiteral':\n case 'BooleanLiteral':\n return expr.value;\n case 'Identifier':\n return `{${expr.value}}`;\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n return '[function]';\n case 'ObjectExpression':\n return '[object]';\n case 'ArrayExpression':\n return '[array]';\n default:\n return '[expression]';\n }\n}\n\n/**\n * Determines the context where a component is being used\n */\nexport function getUsageContext(parent: any): string {\n if (!parent) return 'direct';\n\n switch (parent.type) {\n case 'ConditionalExpression':\n return 'conditional';\n case 'ArrayExpression':\n return 'array';\n case 'ObjectExpression':\n return 'object';\n case 'CallExpression':\n return 'hoc';\n case 'VariableDeclarator':\n return 'variable';\n default:\n return 'jsx';\n }\n}\n","import type { PropsAnalysis, PropDetail, ParserState } from '../types';\n\n/**\n * Analyzes props in detail for a component\n */\nexport function analyzePropsInDetail(\n attributes: any[],\n componentName: string,\n state: ParserState,\n): PropsAnalysis {\n const analysis: PropsAnalysis = {\n namedProps: [],\n hasSpread: false,\n hasComplexProps: false,\n hasEventHandlers: false,\n propDetails: [],\n };\n\n if (!attributes) return analysis;\n\n for (const attr of attributes) {\n if (attr.type === 'JSXAttribute') {\n const propName = attr.name?.value || attr.name?.name?.value;\n if (propName) {\n analysis.namedProps.push(propName);\n\n const propDetail: PropDetail = {\n name: propName,\n type: getPropType(attr.value),\n isEventHandler: propName.startsWith('on'),\n isComplex: isComplexProp(attr.value),\n };\n\n if (propDetail.isEventHandler) {\n analysis.hasEventHandlers = true;\n }\n if (propDetail.isComplex) {\n analysis.hasComplexProps = true;\n }\n\n analysis.propDetails.push(propDetail);\n }\n } else if (attr.type === 'SpreadElement') {\n analysis.hasSpread = true;\n analysis.propDetails.push({\n name: '...',\n type: 'spread',\n isSpread: true,\n isComplex: true,\n isEventHandler: false,\n warning: 'Spread props cannot be statically analyzed',\n });\n analysis.hasComplexProps = true;\n }\n }\n\n // Store in state\n state.usagePatterns.propsAnalysis.set(componentName, analysis);\n\n return analysis;\n}\n\n/**\n * Determines the type of a prop value\n */\nfunction getPropType(value: any): string {\n if (!value) return 'boolean';\n\n switch (value.type) {\n case 'StringLiteral':\n return 'string';\n case 'JSXExpressionContainer': {\n const expr = value.expression;\n if (!expr) return 'unknown';\n switch (expr.type) {\n case 'NumericLiteral':\n return 'number';\n case 'BooleanLiteral':\n return 'boolean';\n case 'StringLiteral':\n return 'string';\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n return 'function';\n case 'ObjectExpression':\n return 'object';\n case 'ArrayExpression':\n return 'array';\n case 'Identifier':\n return 'variable';\n default:\n return 'expression';\n }\n }\n default:\n return 'unknown';\n }\n}\n\n/**\n * Checks if a prop value is complex (object, array, call, conditional)\n */\nfunction isComplexProp(value: any): boolean {\n if (!value) return false;\n if (value.type === 'JSXExpressionContainer') {\n const expr = value.expression;\n if (!expr) return false;\n return (\n expr.type === 'ObjectExpression' ||\n expr.type === 'ArrayExpression' ||\n expr.type === 'CallExpression' ||\n expr.type === 'ConditionalExpression'\n );\n }\n return false;\n}\n","import type { ParserState, JSXUsage } from '../types';\nimport {\n getJSXElementName,\n isMemberExpressionComponent,\n extractJSXProps,\n getUsageContext,\n} from '../utils/jsx-helpers';\nimport { analyzePropsInDetail } from './props';\n\n/**\n * Analyzes JSX element usage\n */\nexport function analyzeJSXElement(node: any, state: ParserState): void {\n if (node.opening) {\n analyzeJSXOpeningElement(node.opening, state, node);\n }\n}\n\n/**\n * Analyzes JSX opening element and tracks component usage\n */\nexport function analyzeJSXOpeningElement(\n node: any,\n state: ParserState,\n parent?: any,\n): void {\n const elementName = getJSXElementName(node.name);\n\n // Check if this is a known component\n if (\n !state.componentNames.has(elementName) &&\n !isMemberExpressionComponent(node.name, state)\n ) {\n return;\n }\n\n const propsAnalysis = analyzePropsInDetail(\n node.attributes,\n elementName,\n state,\n );\n const usage: JSXUsage = {\n component: elementName,\n props: extractJSXProps(node.attributes).map((p) => p.name),\n propsAnalysis,\n line: node.span?.start || 0,\n context: getUsageContext(parent),\n };\n\n // Track JSX usage\n if (!state.usagePatterns.jsxUsage.has(elementName)) {\n state.usagePatterns.jsxUsage.set(elementName, usage);\n }\n\n // console.log(`🎨 JSX Usage: <${elementName}>`);\n}\n","import type { ParserState } from '../types';\n\n/**\n * Checks if a name is a known component from imports\n */\nexport function isKnownComponent(name: string, state: ParserState): boolean {\n return state.componentNames.has(name) || state.allIdentifiers.has(name);\n}\n\n/**\n * Checks if a function name matches HOC patterns\n */\nexport function isHOCPattern(name: string): boolean {\n const hocPatterns = ['with', 'enhance', 'wrap', 'connect', 'create'];\n return hocPatterns.some((pattern) => name.startsWith(pattern));\n}\n\n/**\n * Checks if a node represents a HOC function call\n */\nexport function isHOCFunction(callee: any): boolean {\n if (!callee) return false;\n\n if (callee.type === 'Identifier') {\n return isHOCPattern(callee.value);\n }\n\n if (callee.type === 'MemberExpression') {\n const prop = callee.property;\n return prop?.value && isHOCPattern(prop.value);\n }\n\n return false;\n}\n\n/**\n * Checks if an expression looks like a React component\n * (starts with capital letter)\n */\nexport function looksLikeComponent(name: string): boolean {\n return /^[A-Z]/.test(name);\n}\n\n/**\n * Checks if source is from a specific library (for filtering)\n */\nexport function isFromLibrary(source: string, libraryName: string): boolean {\n return source.startsWith(libraryName) || source.includes(libraryName);\n}\n","import type { ParserState } from '../types';\nimport { isKnownComponent } from '../utils/matchers';\n\n/**\n * Analyzes variable declarations for component assignments\n */\nexport function analyzeVariableDeclaration(\n node: any,\n state: ParserState,\n): void {\n if (!node.declarations) return;\n\n for (const decl of node.declarations) {\n if (decl.id?.type === 'Identifier') {\n const varName = decl.id.value;\n\n // Check if it's assigning a component\n if (decl.init) {\n const assignment = extractAssignmentInfo(decl.init);\n if (assignment && isKnownComponent(assignment, state)) {\n state.usagePatterns.variableAssignments.set(varName, {\n assignment,\n line: node.span?.start || 0,\n });\n state.componentNames.add(varName);\n // console.log(`📝 Variable assignment: ${varName} = ${assignment}`);\n }\n }\n }\n\n // Handle destructuring assignments\n if (decl.id?.type === 'ObjectPattern') {\n analyzeDestructuringPattern(decl.id, decl.init, state);\n }\n }\n}\n\n/**\n * Analyzes destructuring patterns\n */\nexport function analyzeDestructuringPattern(\n pattern: any,\n init: any,\n state: ParserState,\n): void {\n if (!pattern.properties) return;\n\n for (const prop of pattern.properties) {\n if (\n prop.type === 'AssignmentPatternProperty' &&\n prop.key?.type === 'Identifier'\n ) {\n const propName = prop.key.value;\n\n if (init?.type === 'Identifier' && state.allIdentifiers.has(init.value)) {\n state.usagePatterns.destructuredUsage.add({\n property: propName,\n source: init.value,\n line: pattern.span?.start || 0,\n });\n state.componentNames.add(propName);\n // console.log(`🔧 Destructuring: ${propName} from ${init.value}`);\n }\n }\n }\n}\n\n/**\n * Extracts assignment information from various node types\n */\nfunction extractAssignmentInfo(node: any): string | null {\n switch (node.type) {\n case 'Identifier':\n return node.value;\n case 'MemberExpression':\n return `${extractAssignmentInfo(node.object)}.${node.property.value}`;\n case 'ConditionalExpression':\n return `${extractAssignmentInfo(node.consequent)} | ${extractAssignmentInfo(node.alternate)}`;\n default:\n return null;\n }\n}\n","import type { ParserState } from '../types';\n\n/**\n * Analyzes conditional expressions (ternary operators) with components\n */\nexport function analyzeConditionalExpression(\n node: any,\n state: ParserState,\n): void {\n const consequent =\n node.consequent?.type === 'Identifier' ? node.consequent.value : null;\n const alternate =\n node.alternate?.type === 'Identifier' ? node.alternate.value : null;\n\n if (\n (consequent && state.componentNames.has(consequent)) ||\n (alternate && state.componentNames.has(alternate))\n ) {\n state.usagePatterns.conditionalUsage.add({\n consequent: consequent || '',\n alternate: alternate || '',\n line: node.span?.start || 0,\n });\n // console.log('🔀 Conditional component usage found');\n }\n}\n","import type { ParserState } from '../types';\n\n/**\n * Analyzes array expressions containing components\n */\nexport function analyzeArrayExpression(node: any, state: ParserState): void {\n // Check if array contains components\n const hasComponents = node.elements?.some((elem: any) => {\n if (elem?.type === 'Identifier') {\n return state.componentNames.has(elem.value);\n }\n return false;\n });\n\n if (hasComponents) {\n state.usagePatterns.arrayMappings.add({\n components: node.elements\n ?.map((elem: any) => elem?.value)\n .filter(Boolean),\n line: node.span?.start || 0,\n });\n // console.log('📋 Array with components found');\n }\n}\n\n/**\n * Analyzes object expressions with component mappings\n */\nexport function analyzeObjectExpression(node: any, state: ParserState): void {\n // Check if object contains component mappings\n const componentProps = node.properties?.filter((prop: any) => {\n if (prop.type === 'KeyValueProperty' && prop.value?.type === 'Identifier') {\n return state.componentNames.has(prop.value.value);\n }\n return false;\n });\n\n if (componentProps?.length > 0) {\n state.usagePatterns.objectMappings.add({\n mappings: componentProps.map((prop: any) => ({\n key: prop.key?.value || '[computed]',\n component: prop.value?.value,\n })),\n line: node.span?.start || 0,\n });\n // console.log('🗺️ Object mapping with components found');\n }\n}\n","import type { ParserState } from '../types';\n\n/**\n * Analyzes React.lazy() imports\n */\nexport function analyzeLazyImport(node: any, state: ParserState): void {\n const arg = node.arguments?.[0];\n if (\n arg?.type === 'ArrowFunctionExpression' &&\n arg.body?.type === 'CallExpression'\n ) {\n const importCall = arg.body;\n if (importCall.callee?.type === 'Import') {\n const source = importCall.arguments?.[0]?.value;\n if (source) {\n state.usagePatterns.lazyImports.add({\n source,\n line: node.span?.start || 0,\n });\n // console.log(`🔄 Found lazy import: ${source}`);\n }\n }\n }\n}\n\n/**\n * Analyzes dynamic import() calls\n */\nexport function analyzeDynamicImport(node: any, state: ParserState): void {\n const source = node.arguments?.[0]?.value;\n if (source) {\n state.usagePatterns.dynamicImports.add({\n source,\n line: node.span?.start || 0,\n });\n // console.log(`⚡ Found dynamic import: ${source}`);\n }\n}\n","import type { ParserState } from '../types';\n\n/**\n * Analyzes Higher-Order Component (HOC) usage\n */\nexport function analyzeHOCUsage(node: any, state: ParserState): void {\n state.usagePatterns.hocUsage.add({\n function: node.callee?.value || '[unknown]',\n component: node.arguments?.[0]?.value || '[unknown]',\n line: node.span?.start || 0,\n });\n // console.log(`🎁 HOC usage found`);\n}\n\n/**\n * Analyzes React.memo() usage\n */\nexport function analyzeMemoUsage(node: any, state: ParserState): void {\n const component = node.arguments?.[0];\n if (\n component?.type === 'Identifier' &&\n state.componentNames.has(component.value)\n ) {\n state.usagePatterns.memoizedComponents.add({\n component: component.value,\n line: node.span?.start || 0,\n });\n // console.log(`🧠 Memoized component: ${component.value}`);\n }\n}\n\n/**\n * Analyzes React.forwardRef() usage\n */\nexport function analyzeForwardRefUsage(node: any, state: ParserState): void {\n state.usagePatterns.forwardedRefs.add({\n line: node.span?.start || 0,\n });\n // console.log('↗️ ForwardRef usage found');\n}\n\n/**\n * Analyzes ReactDOM.createPortal() usage\n */\nexport function analyzePortalUsage(node: any, state: ParserState): void {\n state.usagePatterns.portalUsage.add({\n line: node.span?.start || 0,\n });\n // console.log('🌀 Portal usage found');\n}\n\n/**\n * Analyzes member expression access (e.g., Foundation.Button)\n */\nexport function analyzeMemberExpression(node: any, state: ParserState): void {\n // Check if this is a namespace access like Foundation.Button\n if (\n node.object?.type === 'Identifier' &&\n state.allIdentifiers.has(node.object.value)\n ) {\n // const namespaceName = node.object.value;\n const propertyName = node.property?.value;\n\n if (propertyName) {\n // Track namespace property access\n state.componentNames.add(propertyName);\n // console.log(`🔗 Namespace access: ${namespaceName}.${propertyName}`);\n }\n }\n}\n\n/**\n * Checks if a node represents HOC pattern\n */\nexport function isHOCPattern(node: any, state: ParserState): boolean {\n // Simple heuristic: function that returns a component-like structure\n return (\n node.callee?.type === 'Identifier' &&\n node.arguments?.some(\n (arg: any) =>\n arg.type === 'Identifier' && state.componentNames.has(arg.value),\n )\n );\n}\n","import type { ParserState, VisitorContext } from '../types';\nimport { analyzeImportDeclaration } from '../patterns/imports';\nimport { analyzeJSXElement, analyzeJSXOpeningElement } from '../patterns/jsx';\nimport { analyzeVariableDeclaration } from '../patterns/variables';\nimport { analyzeConditionalExpression } from '../patterns/conditionals';\nimport {\n analyzeArrayExpression,\n analyzeObjectExpression,\n} from '../patterns/collections';\nimport {\n analyzeLazyImport,\n analyzeDynamicImport,\n} from '../patterns/lazy-dynamic';\nimport {\n analyzeHOCUsage,\n analyzeMemoUsage,\n analyzeForwardRefUsage,\n analyzePortalUsage,\n analyzeMemberExpression,\n isHOCPattern,\n} from '../patterns/advanced';\n\n/**\n * Main AST visitor that routes nodes to appropriate pattern analyzers\n */\nexport function visitNode(\n node: any,\n state: ParserState,\n context: VisitorContext = {},\n): void {\n if (!node) return;\n\n switch (node.type) {\n case 'Module':\n // Process imports first (they populate componentNames)\n if (node.body) {\n for (const item of node.body) {\n if (item.type === 'ImportDeclaration') {\n visitNode(item, state, context);\n }\n }\n // Then process everything else\n for (const item of node.body) {\n if (item.type !== 'ImportDeclaration') {\n visitNode(item, state, { ...context, parent: node });\n }\n }\n }\n break;\n\n case 'ImportDeclaration':\n analyzeImportDeclaration(node, state);\n break;\n\n case 'CallExpression':\n analyzeCallExpression(node, state, context);\n break;\n\n case 'VariableDeclaration':\n analyzeVariableDeclaration(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'JSXElement':\n case 'JSXFragment':\n analyzeJSXElement(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'JSXOpeningElement':\n analyzeJSXOpeningElement(node, state, context.parent);\n break;\n\n case 'ArrayExpression':\n analyzeArrayExpression(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'ObjectExpression':\n analyzeObjectExpression(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'MemberExpression':\n analyzeMemberExpression(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'ConditionalExpression':\n analyzeConditionalExpression(node, state);\n visitChildren(node, state, context);\n break;\n\n case 'FunctionDeclaration':\n case 'ClassDeclaration':\n case 'ExpressionStatement':\n case 'ReturnStatement':\n case 'VariableDeclarator':\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n visitChildren(node, state, { ...context, parent: node });\n break;\n\n default:\n visitChildren(node, state, context);\n break;\n }\n}\n\n/**\n * Analyzes call expressions and routes to specific analyzers\n */\nfunction analyzeCallExpression(\n node: any,\n state: ParserState,\n context: VisitorContext,\n): void {\n // Analyze lazy imports\n if (\n node.callee?.value === 'lazy' ||\n (node.callee?.object?.value === 'React' &&\n node.callee?.property?.value === 'lazy')\n ) {\n analyzeLazyImport(node, state);\n }\n\n // Analyze dynamic imports\n if (node.callee?.type === 'Import') {\n analyzeDynamicImport(node, state);\n }\n\n // Analyze HOC patterns\n if (isHOCPattern(node, state)) {\n analyzeHOCUsage(node, state);\n }\n\n // Analyze React.memo, React.forwardRef\n if (node.callee?.object?.value === 'React') {\n if (node.callee?.property?.value === 'memo') {\n analyzeMemoUsage(node, state);\n } else if (node.callee?.property?.value === 'forwardRef') {\n analyzeForwardRefUsage(node, state);\n }\n }\n\n // Analyze createPortal\n if (\n node.callee?.property?.value === 'createPortal' ||\n node.callee?.value === 'createPortal'\n ) {\n analyzePortalUsage(node, state);\n }\n\n visitChildren(node, state, context);\n}\n\n/**\n * Visits all children of a node\n */\nfunction visitChildren(\n node: any,\n state: ParserState,\n context: VisitorContext,\n): void {\n if (!node) return;\n\n for (const key in node) {\n const value = node[key];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item && typeof item === 'object') {\n visitNode(item, state, { ...context, parent: node });\n }\n }\n } else if (value && typeof value === 'object' && value.type) {\n visitNode(value, state, { ...context, parent: node });\n }\n }\n}\n","import type { ParserState, UsageReport } from '../types';\n\n/**\n * Generates a comprehensive usage report from parser state\n */\nexport function generateReport(state: ParserState): UsageReport {\n const report: UsageReport = {\n summary: {\n totalImports:\n state.usagePatterns.defaultImports.size +\n state.usagePatterns.namedImports.size +\n state.usagePatterns.namespaceImports.size,\n totalComponents: state.componentNames.size,\n totalUsagePatterns: calculateTotalPatterns(state),\n },\n patterns: {\n imports: {\n default: Array.from(state.usagePatterns.defaultImports),\n named: Array.from(state.usagePatterns.namedImports),\n namespace: Array.from(state.usagePatterns.namespaceImports),\n aliased: Array.from(state.usagePatterns.aliasedImports.values()),\n },\n usage: {\n jsx: Array.from(state.usagePatterns.jsxUsage.values()),\n variables: Array.from(\n state.usagePatterns.variableAssignments.entries(),\n ).map(([key, value]) => ({\n variable: key,\n assignment: value.assignment,\n })),\n destructuring: Array.from(state.usagePatterns.destructuredUsage),\n conditional: Array.from(state.usagePatterns.conditionalUsage),\n arrays: Array.from(state.usagePatterns.arrayMappings),\n objects: Array.from(state.usagePatterns.objectMappings),\n },\n advanced: {\n lazy: Array.from(state.usagePatterns.lazyImports),\n dynamic: Array.from(state.usagePatterns.dynamicImports),\n hoc: Array.from(state.usagePatterns.hocUsage),\n memo: Array.from(state.usagePatterns.memoizedComponents),\n forwardRef: Array.from(state.usagePatterns.forwardedRefs),\n portal: Array.from(state.usagePatterns.portalUsage),\n },\n props: Array.from(state.usagePatterns.propsAnalysis.entries()).map(\n ([component, analysis]) => ({\n component,\n analysis,\n }),\n ),\n },\n components: Array.from(state.componentNames).sort(),\n };\n\n return report;\n}\n\n/**\n * Calculates total number of usage patterns found\n */\nfunction calculateTotalPatterns(state: ParserState): number {\n let sum = 0;\n const patterns = state.usagePatterns;\n\n for (const key in patterns) {\n const pattern = (patterns as any)[key];\n if (pattern instanceof Set) {\n sum += pattern.size;\n } else if (pattern instanceof Map) {\n sum += pattern.size;\n }\n }\n\n return sum;\n}\n","import { parseSync } from '@swc/core';\nimport fs from 'node:fs';\nimport type { ParseOptions, UsageReport } from './types';\nimport { createState } from './core/state';\nimport { visitNode } from './core/visitor';\nimport { generateReport } from './core/report';\n\n/**\n * Parses code and analyzes React component usage patterns\n */\nexport function parseCode(\n code: string,\n options: ParseOptions = {},\n): UsageReport {\n const state = createState();\n\n // Parse code to AST\n const ast = parseSync(code, {\n syntax: 'typescript',\n tsx: true,\n decorators: true,\n dynamicImport: true,\n });\n\n // Visit all nodes and analyze patterns\n visitNode(ast, state);\n\n // Generate report\n const report = generateReport(state);\n\n // Optional: Filter by library if specified\n if (options.libraryName) {\n return filterReportByLibrary(report, options.libraryName);\n }\n\n return report;\n}\n\n/**\n * Parses a file and analyzes React component usage patterns\n * Returns null if parsing fails and ignoreErrors is true\n * Throws error if parsing fails and ignoreErrors is false (default)\n */\nexport function parseFile(\n filePath: string,\n options: ParseOptions = {},\n): UsageReport | null {\n try {\n const code = fs.readFileSync(filePath, 'utf8');\n return parseCode(code, options);\n } catch (error) {\n // If ignoreErrors is true, return null and let caller handle the error\n if (options.ignoreErrors) {\n return null;\n }\n // Otherwise, throw the error (default behavior)\n throw error;\n }\n}\n\n/**\n * Filters report to only include imports/usage from a specific library\n */\nfunction filterReportByLibrary(\n report: UsageReport,\n libraryName: string,\n): UsageReport {\n const isFromLibrary = (source: string) =>\n source.startsWith(libraryName) || source.includes(libraryName);\n\n return {\n ...report,\n patterns: {\n imports: {\n default: report.patterns.imports.default.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n named: report.patterns.imports.named.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n namespace: report.patterns.imports.namespace.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n aliased: report.patterns.imports.aliased.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n },\n usage: report.patterns.usage,\n advanced: {\n lazy: report.patterns.advanced.lazy.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n dynamic: report.patterns.advanced.dynamic.filter((imp) =>\n isFromLibrary(imp.source),\n ),\n hoc: report.patterns.advanced.hoc,\n memo: report.patterns.advanced.memo,\n forwardRef: report.patterns.advanced.forwardRef,\n portal: report.patterns.advanced.portal,\n },\n props: report.patterns.props,\n },\n };\n}\n\n// Re-export types for convenience\nexport type { UsageReport, ParseOptions } from './types';\n","import type { UsageReport, ParseError } from '../swc-parser/types';\n\nexport interface ComponentUsage {\n name: string;\n source: string;\n count: number;\n files: Set<string>;\n}\n\nexport interface PackageDistribution {\n packageName: string;\n version: string | null;\n componentCount: number;\n usageCount: number;\n percentage: number;\n components: string[];\n}\n\nexport interface PatternCount {\n patternType: string;\n displayName: string;\n count: number;\n}\n\nexport interface AggregatedReport {\n filesAnalyzed: number;\n totalImports: number;\n totalComponents: number;\n totalUsagePatterns: number;\n patternCounts: PatternCount[];\n componentUsage: Map<string, ComponentUsage>;\n topComponents: ComponentUsage[];\n allComponents: string[];\n packageDistribution: PackageDistribution[];\n reports: UsageReport[];\n errors: ParseError[];\n}\n\nexport function aggregateReports(\n reports: UsageReport[],\n versions: Record<string, string> = {},\n errors: ParseError[] = [],\n): AggregatedReport {\n const componentUsageMap = new Map<string, ComponentUsage>();\n let totalImports = 0;\n let totalUsagePatterns = 0;\n const patternCountMap = new Map<string, number>();\n\n // Create package resolver with available packages from lockfile\n const availablePackages = Object.keys(versions);\n\n // Aggregate data from all reports\n for (const report of reports) {\n totalImports += report.summary.totalImports;\n totalUsagePatterns += report.summary.totalUsagePatterns;\n\n // Aggregate component usage from JSX patterns\n for (const jsx of report.patterns.usage.jsx) {\n const key = jsx.component;\n const existing = componentUsageMap.get(key);\n\n if (existing) {\n existing.count++;\n } else {\n // Try to find the source from imports\n const source = findComponentSource(\n jsx.component,\n report,\n availablePackages,\n );\n componentUsageMap.set(key, {\n name: jsx.component,\n source,\n count: 1,\n files: new Set(),\n });\n }\n }\n\n // Count patterns\n countPatterns(report, patternCountMap);\n }\n\n // Convert to arrays and sort\n const topComponents = Array.from(componentUsageMap.values()).sort(\n (a, b) => b.count - a.count,\n );\n\n const allComponents = Array.from(componentUsageMap.keys()).sort();\n\n const patternCounts = Array.from(patternCountMap.entries())\n .map(([type, count]) => ({\n patternType: type,\n displayName: getPatternDisplayName(type),\n count,\n }))\n .sort((a, b) => b.count - a.count);\n\n const packageDistribution = calculatePackageDistribution(\n componentUsageMap,\n versions,\n );\n\n return {\n filesAnalyzed: reports.length,\n totalImports,\n totalComponents: componentUsageMap.size,\n totalUsagePatterns,\n patternCounts,\n componentUsage: componentUsageMap,\n topComponents,\n allComponents,\n packageDistribution,\n reports,\n errors,\n };\n}\n\nfunction resolvePackageFromImportPath(\n importPath: string,\n availablePackages: string[],\n): string {\n // If it's a relative import, return 'local'\n if (importPath.startsWith('.') || importPath.startsWith('/')) {\n console.log('importPath', importPath); // TODO remove\n return 'local';\n }\n\n // Try to find a matching package from available packages\n // Sort by length (descending) to match most specific package first\n // e.g., '@design-system/foundation' before '@design-system'\n const sortedPackages = [...availablePackages].sort(\n (a, b) => b.length - a.length,\n );\n\n for (const pkg of sortedPackages) {\n // Exact match\n if (importPath === pkg) {\n return pkg;\n }\n\n // Subpath import match (e.g., '@design-system/foundation/button' matches '@design-system/foundation')\n if (importPath.startsWith(`${pkg}/`)) {\n return pkg;\n }\n }\n\n // If no package matches, it's likely not in the lockfile\n return 'unknown';\n}\n\nfunction findComponentSource(\n componentName: string,\n report: UsageReport,\n availablePackages: string[],\n): string {\n // Check named imports\n const namedImport = report.patterns.imports.named.find(\n (imp) => imp.name === componentName,\n );\n if (namedImport)\n return resolvePackageFromImportPath(namedImport.source, availablePackages);\n\n // Check default imports\n const defaultImport = report.patterns.imports.default.find(\n (imp) => imp.name === componentName,\n );\n if (defaultImport)\n return resolvePackageFromImportPath(\n defaultImport.source,\n availablePackages,\n );\n\n // Check aliased imports\n const aliasedImport = report.patterns.imports.aliased.find(\n (imp) => imp.local === componentName,\n );\n if (aliasedImport)\n return resolvePackageFromImportPath(\n aliasedImport.source,\n availablePackages,\n );\n\n return 'unknown';\n}\n\nfunction countPatterns(report: UsageReport, patternMap: Map<string, number>) {\n // Count import patterns\n increment(\n patternMap,\n 'imports.default',\n report.patterns.imports.default.length,\n );\n increment(patternMap, 'imports.named', report.patterns.imports.named.length);\n increment(\n patternMap,\n 'imports.namespace',\n report.patterns.imports.namespace.length,\n );\n increment(\n patternMap,\n 'imports.aliased',\n report.patterns.imports.aliased.length,\n );\n\n // Count usage patterns\n increment(patternMap, 'usage.jsx', report.patterns.usage.jsx.length);\n increment(\n patternMap,\n 'usage.variables',\n report.patterns.usage.variables.length,\n );\n increment(\n patternMap,\n 'usage.destructuring',\n report.patterns.usage.destructuring.length,\n );\n increment(\n patternMap,\n 'usage.conditional',\n report.patterns.usage.conditional.length,\n );\n increment(patternMap, 'usage.arrays', report.patterns.usage.arrays.length);\n increment(patternMap, 'usage.objects', report.patterns.usage.objects.length);\n\n // Count advanced patterns\n increment(patternMap, 'advanced.lazy', report.patterns.advanced.lazy.length);\n increment(\n patternMap,\n 'advanced.dynamic',\n report.patterns.advanced.dynamic.length,\n );\n increment(patternMap, 'advanced.hoc', report.patterns.advanced.hoc.length);\n increment(patternMap, 'advanced.memo', report.patterns.advanced.memo.length);\n increment(\n patternMap,\n 'advanced.forwardRef',\n report.patterns.advanced.forwardRef.length,\n );\n increment(\n patternMap,\n 'advanced.portal',\n report.patterns.advanced.portal.length,\n );\n}\n\nfunction increment(map: Map<string, number>, key: string, value: number) {\n map.set(key, (map.get(key) || 0) + value);\n}\n\nfunction getPatternDisplayName(patternType: string): string {\n const displayNames: Record<string, string> = {\n 'imports.default': 'Default Imports',\n 'imports.named': 'Named Imports',\n 'imports.namespace': 'Namespace Imports',\n 'imports.aliased': 'Aliased Imports',\n 'usage.jsx': 'JSX Usage',\n 'usage.variables': 'Variable Assignments',\n 'usage.destructuring': 'Destructuring',\n 'usage.conditional': 'Conditional Usage',\n 'usage.arrays': 'Array Mappings',\n 'usage.objects': 'Object Mappings',\n 'advanced.lazy': 'Lazy Loading',\n 'advanced.dynamic': 'Dynamic Imports',\n 'advanced.hoc': 'Higher-Order Components',\n 'advanced.memo': 'Memoized Components',\n 'advanced.forwardRef': 'Forward Refs',\n 'advanced.portal': 'Portal Usage',\n };\n return displayNames[patternType] || patternType;\n}\n\nfunction getPackageVersion(\n packageName: string,\n versions: Record<string, string>,\n): string | null {\n // First try exact match\n if (versions[packageName]) {\n return versions[packageName];\n }\n\n // Handle subpath imports like '@design-system/foundation/button'\n // Try to find the base package '@design-system/foundation'\n if (packageName.includes('/')) {\n const parts = packageName.split('/');\n\n // For scoped packages like '@scope/package/subpath'\n if (packageName.startsWith('@') && parts.length > 2) {\n const basePackage = `${parts[0]}/${parts[1]}`;\n if (versions[basePackage]) {\n return versions[basePackage];\n }\n }\n\n // For non-scoped packages like 'package/subpath'\n if (!packageName.startsWith('@') && parts.length > 1) {\n const basePackage = parts[0];\n if (versions[basePackage]) {\n return versions[basePackage];\n }\n }\n }\n\n return null;\n}\n\nfunction calculatePackageDistribution(\n componentUsageMap: Map<string, ComponentUsage>,\n versions: Record<string, string>,\n): PackageDistribution[] {\n const packageMap = new Map<string, PackageDistribution>();\n\n // Group components by package\n for (const component of componentUsageMap.values()) {\n if (component.source === 'unknown') continue;\n\n const existing = packageMap.get(component.source);\n if (existing) {\n existing.componentCount++;\n existing.usageCount += component.count;\n existing.components.push(component.name);\n } else {\n packageMap.set(component.source, {\n packageName: component.source,\n version: getPackageVersion(component.source, versions),\n componentCount: 1,\n usageCount: component.count,\n percentage: 0,\n components: [component.name],\n });\n }\n }\n\n // Calculate percentages based on total external package usage (not all patterns)\n const distribution = Array.from(packageMap.values());\n const totalExternalUsage = distribution.reduce(\n (sum, pkg) => sum + pkg.usageCount,\n 0,\n );\n\n for (const pkg of distribution) {\n pkg.percentage =\n totalExternalUsage > 0 ? (pkg.usageCount / totalExternalUsage) * 100 : 0;\n }\n\n return distribution.sort((a, b) => b.usageCount - a.usageCount);\n}\n","/**\n * Format a number with thousand separators\n * @param num - Number to format\n * @returns Formatted string (e.g., 1,234,567)\n */\nexport function formatCount(num: number): string {\n return num.toLocaleString();\n}\n\n/**\n * Format duration in seconds to a readable string\n * @param seconds - Duration in seconds\n * @returns Formatted string (e.g., 10.21s, 1.57s, 0.12s)\n */\nexport function formatDuration(seconds: number): string {\n return `${seconds.toFixed(2)}s`;\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport } from './aggregator';\nimport { formatCount } from './format-utils';\n\nfunction printHeader() {\n console.log(chalk.green.bold('\\n📊 Summary\\n'));\n}\n\nexport function printSummary(aggregated: AggregatedReport) {\n printHeader();\n\n const table = new Table({\n head: ['Metric', 'Count'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n // Calculate external components only (filter out unknown and local)\n const externalComponents = aggregated.topComponents.filter(\n (comp) => comp.source !== 'unknown' && comp.source !== 'local',\n ).length;\n\n // Calculate total external package usage\n const totalExternalUsage = aggregated.packageDistribution.reduce(\n (sum, pkg) => sum + pkg.usageCount,\n 0,\n );\n\n table.push(\n ['Files Analyzed', formatCount(aggregated.filesAnalyzed)],\n ['External Packages', formatCount(aggregated.packageDistribution.length)],\n ['External Components', formatCount(externalComponents)],\n ['Total Usages', formatCount(totalExternalUsage)],\n );\n\n console.log(table.toString());\n}\n","import chalk from 'chalk';\nimport { formatCount } from './format-utils';\n\nexport interface ChartData {\n label: string;\n value: number;\n}\n\nexport interface ChartOptions {\n maxWidth?: number;\n showValues?: boolean;\n barChar?: string;\n emptyChar?: string;\n}\n\nexport function renderBarChart(data: ChartData[], options: ChartOptions = {}) {\n const {\n maxWidth = 50,\n showValues = true,\n barChar = '█',\n emptyChar = '░',\n } = options;\n\n if (data.length === 0) {\n console.log(chalk.gray(' No data to display'));\n return;\n }\n\n // Find max value for scaling\n const maxValue = Math.max(...data.map((d) => d.value));\n if (maxValue === 0) {\n console.log(chalk.gray(' All values are zero'));\n return;\n }\n\n // Find longest label for alignment\n const maxLabelLength = Math.max(...data.map((d) => d.label.length));\n\n // Render each bar\n for (const item of data) {\n const percentage = item.value / maxValue;\n const barLength = Math.round(percentage * maxWidth);\n const emptyLength = maxWidth - barLength;\n\n // Pad label\n const paddedLabel = item.label.padEnd(maxLabelLength, ' ');\n\n // Build bar\n const bar =\n chalk.green(barChar.repeat(barLength)) +\n chalk.gray(emptyChar.repeat(emptyLength));\n\n // Build value string\n const valueStr = showValues ? ` ${formatCount(item.value)}` : '';\n\n console.log(`${paddedLabel} ${bar}${valueStr}\\n`);\n }\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport, ComponentUsage } from './aggregator';\nimport { renderBarChart } from './chart-renderer';\n\nfunction printHeader() {\n // FIXME why double space, if single space output is wrong somehow?\n console.log(chalk.magenta.bold('\\n⚛️ Components\\n'));\n}\n\nexport function printComponents(\n aggregated: AggregatedReport,\n mode: 'table' | 'chart',\n) {\n const components = aggregated.topComponents;\n\n if (mode === 'table') {\n printComponentsTable(components);\n } else if (mode === 'chart') {\n printComponentsChart(components);\n }\n}\n\nfunction printComponentsTable(components: ComponentUsage[]) {\n printHeader();\n\n // Filter out unknown and local components - only show external packages\n const externalComponents = components.filter(\n (comp) => comp.source !== 'unknown' && comp.source !== 'local',\n );\n\n if (externalComponents.length === 0) {\n console.log(chalk.gray(' No external components found'));\n return;\n }\n\n const table = new Table({\n head: ['Component', 'Package', 'Count'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n externalComponents.forEach((comp) => {\n table.push([comp.name, comp.source, comp.count.toString()]);\n });\n\n console.log(table.toString());\n}\n\nfunction printComponentsChart(components: ComponentUsage[]) {\n printHeader();\n\n // Filter out unknown and local components - only show external packages\n const externalComponents = components.filter(\n (comp) => comp.source !== 'unknown' && comp.source !== 'local',\n );\n\n if (externalComponents.length === 0) {\n console.log(chalk.gray(' No external components found'));\n return;\n }\n\n const data = externalComponents.map((comp) => ({\n label: comp.name,\n value: comp.count,\n }));\n\n renderBarChart(data, { maxWidth: 50 });\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport, PatternCount } from './aggregator';\nimport { renderBarChart } from './chart-renderer';\n\nfunction printHeader() {\n console.log(chalk.blue.bold('\\n🔍 Code Patterns\\n'));\n}\n\nexport function printPatterns(\n aggregated: AggregatedReport,\n mode: 'table' | 'chart',\n) {\n const patterns = aggregated.patternCounts.filter((p) => p.count > 0);\n\n if (mode === 'table') {\n printPatternsTable(patterns);\n } else if (mode === 'chart') {\n printPatternsChart(patterns);\n }\n}\n\nfunction printPatternsTable(patterns: PatternCount[]) {\n printHeader();\n\n if (patterns.length === 0) {\n console.log(chalk.gray(' No patterns found'));\n return;\n }\n\n const table = new Table({\n head: ['Pattern', 'Count'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n patterns.forEach((pattern) => {\n table.push([pattern.displayName, pattern.count.toString()]);\n });\n\n console.log(table.toString());\n\n // Show total patterns count\n const totalPatterns = patterns.reduce((sum, p) => sum + p.count, 0);\n console.log(chalk.gray(`\\nTotal: ${totalPatterns} patterns detected`));\n}\n\nfunction printPatternsChart(patterns: PatternCount[]) {\n printHeader();\n\n if (patterns.length === 0) {\n console.log(chalk.gray(' No patterns found'));\n return;\n }\n\n const data = patterns.map((pattern) => ({\n label: pattern.displayName,\n value: pattern.count,\n }));\n\n renderBarChart(data, { maxWidth: 50 });\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport, PackageDistribution } from './aggregator';\nimport { formatCount } from './format-utils';\n\nfunction printHeader() {\n console.log(chalk.blueBright.bold('\\n📦 Packages\\n'));\n}\n\nexport function printPackages(\n aggregated: AggregatedReport,\n mode: 'table' | 'chart',\n) {\n const packages = aggregated.packageDistribution;\n\n if (mode === 'table') {\n printPackagesTable(packages);\n } else if (mode === 'chart') {\n printPackagesChart(packages);\n }\n}\n\nfunction printPackagesTable(packages: PackageDistribution[]) {\n printHeader();\n\n if (packages.length === 0) {\n console.log(chalk.gray(' No packages found'));\n return;\n }\n\n const table = new Table({\n head: ['Package', 'Version', 'Components', 'Usage', 'Percentage'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n packages.forEach((pkg) => {\n table.push([\n pkg.packageName,\n pkg.version || 'N/A',\n formatCount(pkg.componentCount),\n formatCount(pkg.usageCount),\n `${pkg.percentage.toFixed(1)}%`,\n ]);\n });\n\n console.log(table.toString());\n\n const totalComponents = packages.reduce(\n (sum, p) => sum + p.componentCount,\n 0,\n );\n const totalExternalUsage = packages.reduce((sum, p) => sum + p.usageCount, 0);\n console.log(\n chalk.gray(\n `\\nTotal: ${formatCount(packages.length)} packages | ${formatCount(totalComponents)} unique components | ${formatCount(totalExternalUsage)} total usages`,\n ),\n );\n}\n\nfunction printPackagesChart(packages: PackageDistribution[]) {\n printHeader();\n\n if (packages.length === 0) {\n console.log(chalk.gray(' No packages found'));\n return;\n }\n\n const maxBarWidth = 40;\n const maxPercentage = Math.max(...packages.map((p) => p.percentage));\n const maxLabelLength = Math.max(...packages.map((p) => p.packageName.length));\n\n packages.forEach((pkg) => {\n const barLength = Math.round(\n (pkg.percentage / maxPercentage) * maxBarWidth,\n );\n const emptyLength = maxBarWidth - barLength;\n const paddedLabel = pkg.packageName.padEnd(maxLabelLength, ' ');\n\n const bar =\n chalk.green('█'.repeat(barLength)) + chalk.gray('░'.repeat(emptyLength));\n\n console.log(\n `${paddedLabel} ${bar} ${chalk.bold(pkg.percentage.toFixed(1) + '%')} (${pkg.usageCount})`,\n );\n });\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport type { AggregatedReport } from './aggregator';\n\nfunction printHeader(errorCount: number) {\n console.log(chalk.red.bold(`\\n❌ Parse Errors (${errorCount})\\n`));\n}\n\nexport function printErrors(aggregated: AggregatedReport) {\n const errors = aggregated.errors;\n\n if (errors.length === 0) {\n return; // Don't show section if no errors\n }\n\n printHeader(errors.length);\n\n const table = new Table({\n head: ['File', 'Error'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n colWidths: [50, 80],\n wordWrap: true,\n });\n\n errors.forEach((error) => {\n table.push([chalk.yellow(error.file), chalk.red(error.message)]);\n });\n\n console.log(table.toString());\n}\n","import fs from 'fs';\nimport { glob } from 'glob';\n\n/**\n * Find files matching a glob pattern\n * @param pattern - Glob pattern\n * @param ignorePatterns - Glob pattenrs to ignore\n * @returns Array of file paths\n */\nexport async function findFiles(\n pattern: string,\n ignorePatterns: string[],\n): Promise<string[]> {\n const files = await glob(pattern, {\n ignore: ignorePatterns,\n nodir: true,\n absolute: true,\n windowsPathsNoEscape: true,\n });\n\n return files;\n}\n\n/**\n * Read file content\n * @param filePath - Path to file\n * @returns File content\n */\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf8');\n}\n","import fs from 'fs';\nimport path from 'path';\nimport type { LockfileAdapter } from '../lock-file-adapter';\n\nexport class NpmLockfileAdapter implements LockfileAdapter {\n name = 'npm';\n supportedVersions = ['v2', 'v3'];\n\n detect(projectPath: string): string | null {\n const lockfilePath = path.join(projectPath, 'package-lock.json');\n return fs.existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n parse(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const lockData = JSON.parse(content);\n const versions: Record<string, string> = {};\n\n // npm v7+ uses \"packages\" field (lockfileVersion 2, 3)\n if (lockData.packages) {\n Object.entries(lockData.packages).forEach(\n ([pkgPath, pkgData]: [string, any]) => {\n if (!pkgPath || pkgPath === '') return; // Skip root\n\n // Remove leading \"node_modules/\"\n const pkgName = pkgPath.replace(/^node_modules\\//, '');\n\n if (pkgData.version) {\n versions[pkgName] = pkgData.version;\n }\n },\n );\n }\n\n // npm v6 uses \"dependencies\" field (fallback)\n if (lockData.dependencies && Object.keys(versions).length === 0) {\n function extractVersions(deps: any, prefix = ''): void {\n Object.entries(deps).forEach(([name, data]: [string, any]) => {\n const fullName = prefix ? `${prefix}/${name}` : name;\n if (data.version) {\n versions[fullName] = data.version;\n }\n if (data.dependencies) {\n extractVersions(data.dependencies, fullName);\n }\n });\n }\n extractVersions(lockData.dependencies);\n }\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse package-lock.json: ${message}`);\n return {}; // why?\n }\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport yaml from 'js-yaml';\nimport type { LockfileAdapter } from '../lock-file-adapter';\n\nexport class PnpmLockfileAdapter implements LockfileAdapter {\n name = 'pnpm';\n supportedVersions = ['v5', 'v6', 'v9'];\n\n detect(projectPath: string): string | null {\n const lockfilePath = path.join(projectPath, 'pnpm-lock.yaml');\n return fs.existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n parse(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const lockData = yaml.load(content) as any;\n const versions: Record<string, string> = {};\n\n // pnpm v9+ uses \"importers\" field\n if (lockData.importers) {\n const rootImporter = lockData.importers['.'];\n if (rootImporter) {\n // Parse dependencies\n if (rootImporter.dependencies) {\n for (const [name, data] of Object.entries(\n rootImporter.dependencies,\n )) {\n if (\n typeof data === 'object' &&\n data !== null &&\n 'version' in data\n ) {\n versions[name] = (data as any).version;\n }\n }\n }\n // Parse devDependencies\n if (rootImporter.devDependencies) {\n for (const [name, data] of Object.entries(\n rootImporter.devDependencies,\n )) {\n if (\n typeof data === 'object' &&\n data !== null &&\n 'version' in data\n ) {\n versions[name] = (data as any).version;\n }\n }\n }\n }\n }\n\n // pnpm v6-8 uses \"packages\" field\n if (lockData.packages && Object.keys(versions).length === 0) {\n Object.keys(lockData.packages).forEach((key) => {\n // Key format: \"/@babel/core/7.22.5\" or \"/package/1.0.0\"\n const match = key.match(/\\/(.+?)\\/(\\d+\\.\\d+\\.\\d+.*?)(?:_|$)/);\n if (match) {\n const [, pkgName, version] = match;\n versions[pkgName] = version;\n }\n });\n }\n\n // pnpm v5 uses \"dependencies\" and \"specifiers\"\n if (lockData.dependencies && Object.keys(versions).length === 0) {\n Object.entries(lockData.dependencies).forEach(\n ([name, versionSpec]: [string, any]) => {\n // versionSpec format: \"1.0.0\" or \"link:../package\"\n if (\n typeof versionSpec === 'string' &&\n !versionSpec.startsWith('link:')\n ) {\n versions[name] = versionSpec;\n } else if (typeof versionSpec === 'object' && versionSpec.version) {\n versions[name] = versionSpec.version;\n }\n },\n );\n }\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse pnpm-lock.yaml: ${message}`);\n return {};\n }\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport lockfile from '@yarnpkg/lockfile';\nimport type { LockfileAdapter } from '../lock-file-adapter';\n\nexport class YarnLockfileAdapter implements LockfileAdapter {\n name = 'yarn';\n supportedVersions = ['v1', 'v2+'];\n\n detect(projectPath: string): string | null {\n const lockfilePath = path.join(projectPath, 'yarn.lock');\n return fs.existsSync(lockfilePath) ? lockfilePath : null;\n }\n\n parse(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const parsed = lockfile.parse(content);\n\n if (parsed.type !== 'success') {\n console.warn('Warning: Failed to parse yarn.lock');\n return {};\n }\n\n const versions: Record<string, string> = {};\n\n Object.entries(parsed.object).forEach(([key, value]: [string, any]) => {\n // Key format: \"package@^1.0.0\" or \"@scope/package@^1.0.0\"\n // Extract package name (without version specifier)\n let pkgName = key;\n\n // Handle scoped packages\n if (key.startsWith('@')) {\n const match = key.match(/^(@[^@]+\\/[^@]+)@/);\n if (match) {\n pkgName = match[1];\n }\n } else {\n const match = key.match(/^([^@]+)@/);\n if (match) {\n pkgName = match[1];\n }\n }\n\n if (value.version && (!versions[pkgName] || value.version)) {\n versions[pkgName] = value.version;\n }\n });\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse yarn.lock: ${message}`);\n return {};\n }\n }\n}\n","import { NpmLockfileAdapter } from './patterns/npm';\nimport { PnpmLockfileAdapter } from './patterns/pnpm';\nimport { YarnLockfileAdapter } from './patterns/yarn';\n\n/**\n * Lockfile parse result\n */\nexport interface LockfileResult {\n versions: Record<string, string>;\n lockfileType: 'npm' | 'yarn' | 'pnpm' | null;\n lockfilePath: string | null;\n supportedVersions: string[];\n}\n\nconst LOCKFILE_ADAPTERS = [\n new NpmLockfileAdapter(),\n new YarnLockfileAdapter(),\n new PnpmLockfileAdapter(),\n];\n\n/**\n * Find and parse the appropriate lockfile in a directory\n * @param projectPath - Path to the project directory\n * @returns Object with versions map and lockfile type\n */\nexport function findAndParseLockfile(projectPath: string): LockfileResult {\n for (const adapter of LOCKFILE_ADAPTERS) {\n const lockfilePath = adapter.detect(projectPath);\n if (lockfilePath) {\n const versions = adapter.parse(lockfilePath);\n return {\n versions,\n lockfileType: adapter.name as 'npm' | 'yarn' | 'pnpm',\n lockfilePath,\n supportedVersions: adapter.supportedVersions,\n };\n }\n }\n\n throw new Error('No supported lockfile found');\n}\n\n/**\n * Get the version of a specific package from lockfile\n * @param projectPath - Path to the project directory\n * @param packageName - Name of the package\n * @returns Version string or null if not found\n */\nexport function getPackageVersion(\n projectPath: string,\n packageName: string,\n): string | null {\n const { versions } = findAndParseLockfile(projectPath);\n return versions[packageName] || null;\n}\n\n/**\n * Get versions for multiple packages\n * @param projectPath - Path to the project directory\n * @param packageNames - Array of package names\n * @returns Map of package names to versions\n */\nexport function getPackageVersions(\n projectPath: string,\n packageNames: string[],\n): Record<string, string> {\n const { versions } = findAndParseLockfile(projectPath);\n const result: Record<string, string> = {};\n\n packageNames.forEach((pkgName) => {\n if (versions[pkgName]) {\n result[pkgName] = versions[pkgName];\n }\n });\n\n return result;\n}\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport { minimatch } from 'minimatch';\nimport { parseFile } from '../swc-parser';\nimport type { UsageReport, ParseError } from '../swc-parser/types';\nimport { aggregateReports } from '../utils/aggregator';\nimport { printSummary } from '../utils/print-summary';\nimport { printComponents } from '../utils/print-components';\nimport { printPatterns } from '../utils/print-patterns';\nimport { printPackages } from '../utils/print-packages';\nimport { printErrors } from '../utils/print-errors';\nimport { findFiles } from '../utils/file-utils';\nimport { findAndParseLockfile } from '../lock-parser';\nimport { formatDuration } from '../utils/format-utils';\n\ninterface ScanOptions {\n verbose?: boolean;\n summary?: string | boolean;\n noSummary?: boolean;\n components?: string;\n noComponents?: boolean;\n noPackages?: boolean;\n noPatterns?: boolean;\n packages?: string;\n patterns?: string;\n ignore?: string | string[];\n allowPackages?: string | string[];\n ignorePackages?: string | string[];\n ignoreErrors?: boolean;\n}\n\ninterface NormalizedScanOptions {\n verbose: boolean;\n summary: 'log' | false;\n noSummary?: boolean;\n components: 'table' | 'chart' | false;\n noComponents?: boolean;\n noPackages?: boolean;\n noPatterns?: boolean;\n packages: 'table' | 'chart' | false;\n patterns: 'table' | 'chart';\n ignore: string[];\n allowPackages: string[];\n ignorePackages: string[];\n ignoreErrors: boolean;\n}\n\nexport function registerScanCommand(program: Command) {\n program\n .command('scan')\n .description('Scan and analyze local files')\n .argument(\n '[pattern]',\n 'Glob pattern for files to analyze (defaults to current directory recursively)',\n '**/*.{tsx,jsx,ts,js}',\n )\n .option('--ignore <pattern>', 'Glob pattern for files to ignore', [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n ])\n .option('--allow-packages <pattern>', 'Pattern for what packages to scan', [\n '**',\n ])\n .option(\n '--ignore-packages <pattern>',\n 'Pattern for what packages to ignore',\n [],\n )\n .option('--no-summary', 'Hide summary', 'table')\n .option(\n '--components [mode]',\n 'Show components table/chart (table, chart)',\n 'table',\n )\n .option('--no-components', 'Do not show components')\n .option(\n '--packages [mode]',\n 'Show packages table/chart (table, chart)',\n 'table',\n )\n .option('--no-packages', 'Do not show packages')\n .option(\n '--patterns [mode]',\n 'Show patterns table/chart (table, chart)',\n 'table',\n )\n .option('--no-patterns', 'Do not show patterns')\n .option(\n '--ignore-errors',\n 'Continue scanning even if some files fail to parse',\n )\n .action(async (pattern: string, options: ScanOptions) => {\n const normalizedOptions = normalizeOptions(options);\n\n await executeScan(pattern, normalizedOptions);\n });\n}\n\nfunction normalizeArray(value?: string | string[]) {\n if (!value) {\n return [];\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction normalizeOptions(options: ScanOptions): NormalizedScanOptions {\n return {\n verbose: options.verbose || false,\n summary:\n options.summary === false || options.summary === 'false' ? false : 'log',\n noSummary: options.noSummary || false,\n components: (options.components as any) || 'table',\n packages: (options.packages as any) || 'table',\n patterns: (options.patterns as any) || 'table',\n ignore: normalizeArray(options.ignore),\n allowPackages: normalizeArray(options.allowPackages),\n ignorePackages: normalizeArray(options.ignorePackages),\n ignoreErrors: options.ignoreErrors || false,\n };\n}\n\nasync function executeScan(pattern: string, options: NormalizedScanOptions) {\n const startTime = Date.now();\n const spinner = ora('Parsing lockfile...').start();\n\n try {\n // Parse lockfile - start from current directory\n const lockfileResult = findAndParseLockfile(process.cwd());\n\n // Filter packages based on allow/ignore patterns\n const allPackages = Object.keys(lockfileResult.versions);\n const filteredPackages = allPackages.filter((pkg) => {\n // Must match allow patterns (default ['*'] = all)\n const allowed = options.allowPackages.some((p) => minimatch(pkg, p));\n\n // Must NOT match ignore patterns\n const ignored = options.ignorePackages.some((p) => minimatch(pkg, p));\n\n return allowed && !ignored;\n });\n\n // Create filtered versions object\n const filteredVersions: Record<string, string> = {};\n for (const pkg of filteredPackages) {\n filteredVersions[pkg] = lockfileResult.versions[pkg];\n }\n\n spinner.succeed(\n `Found ${lockfileResult.lockfileType} lockfile (supports: ${lockfileResult.supportedVersions.join(', ')}) - ${filteredPackages.length}/${allPackages.length} packages`,\n );\n\n // Find files matching pattern\n spinner.start('Finding files...');\n const files = await findFiles(pattern, options.ignore);\n\n if (files.length === 0) {\n spinner.fail(`No files found matching pattern: ${pattern}`);\n\n return;\n }\n\n spinner.succeed(chalk.green(` Found ${files.length} files`));\n\n // Analyze all files\n spinner.start('Analyzing files...');\n const reports: UsageReport[] = [];\n const errors: ParseError[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n\n if (!options.verbose) {\n spinner.text = `Analyzing files... (${i + 1}/${files.length})`;\n }\n\n try {\n const report = parseFile(file, { ignoreErrors: options.ignoreErrors });\n if (report) {\n reports.push(report);\n } else if (options.ignoreErrors) {\n // parseFile returned null due to error (ignoreErrors mode)\n errors.push({\n file,\n message: 'Failed to parse file',\n });\n }\n } catch (error: any) {\n // Error thrown (default mode, ignoreErrors=false)\n if (options.ignoreErrors) {\n errors.push({\n file,\n message: error.message || 'Unknown error',\n });\n } else {\n // Re-throw to maintain default crash behavior\n throw error;\n }\n }\n }\n\n // Calculate elapsed time\n const elapsedTime = (Date.now() - startTime) / 1000;\n\n // Aggregate reports using filtered versions and errors\n const aggregated = aggregateReports(reports, filteredVersions, errors);\n\n // Print errors first if any exist\n printErrors(aggregated);\n\n if (options.packages && !options.noPackages) {\n printPackages(aggregated, options.packages);\n }\n\n if (options.components && !options.noComponents) {\n printComponents(aggregated, options.components);\n }\n\n if (options.patterns && !options.noPatterns) {\n printPatterns(aggregated, options.patterns);\n }\n\n if (options.summary && !options.noSummary) {\n printSummary(aggregated);\n }\n\n console.log('');\n\n const successMessage =\n aggregated.errors.length > 0\n ? ` Analysis complete with ${aggregated.errors.length} error(s)! Analyzed ${reports.length}/${files.length} files in ${formatDuration(elapsedTime)}\\n`\n : ` Analysis complete! Analyzed ${reports.length} files in ${formatDuration(elapsedTime)}\\n`;\n\n if (aggregated.errors.length > 0) {\n spinner.warn(chalk.yellow.bold(successMessage));\n // Exit with error code if errors were found\n process.exit(1);\n } else {\n spinner.succeed(chalk.green.bold(successMessage));\n }\n } catch (error: any) {\n spinner.fail(chalk.red('Analysis failed: ' + error.message));\n console.error(error);\n\n process.exit(1);\n }\n}\n","{\n \"name\": \"hermex\",\n \"version\": \"1.1.2\",\n \"type\": \"module\",\n \"description\": \"SWC-based AST parser for analyzing code and React component usage patterns across entire codebases\",\n \"homepage\": \"https://github.com/Gallevy/hermex\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/Gallevy/hermex.git\"\n },\n \"main\": \"./dist/cli.js\",\n \"bin\": {\n \"hermex\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE.md\"\n ],\n \"scripts\": {\n \"check\": \"biome check\",\n \"format\": \"biome format --write\",\n \"format:ci\": \"biome ci\",\n \"lint\": \"oxlint\",\n \"lint:ci\": \"oxlint\",\n \"test\": \"vitest\",\n \"test:ci\": \"vitest run\",\n \"build\": \"tsup\",\n \"build:ci\": \"tsup --clean\",\n \"docs:update\": \"node scripts/update-docs.js\",\n \"dev:scan\": \"pnpm run build && node ./dist/cli.js scan\"\n },\n \"keywords\": [\n \"hermex\",\n \"react\",\n \"ast\",\n \"parser\",\n \"swc\",\n \"component\",\n \"analysis\",\n \"usage\",\n \"patterns\",\n \"cli\"\n ],\n \"dependencies\": {\n \"@semantic-release/github\": \"^12.0.2\",\n \"@swc/core\": \"^1.3.107\",\n \"@swc/types\": \"^0.1.5\",\n \"@yarnpkg/lockfile\": \"^1.1.0\",\n \"chalk\": \"^5.6.2\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^14.0.2\",\n \"glob\": \"^13.0.0\",\n \"js-yaml\": \"^4.1.1\",\n \"micromatch\": \"^4.0.8\",\n \"ora\": \"^9.0.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"2.3.8\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/commit-analyzer\": \"^13.0.1\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/npm\": \"^13.1.2\",\n \"@semantic-release/release-notes-generator\": \"^14.1.0\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/node\": \"^24.10.1\",\n \"@types/tmp\": \"^0.2.6\",\n \"oxlint\": \"^1.31.0\",\n \"semantic-release\": \"^25.0.2\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.3.3\",\n \"vitest\": \"^4.0.15\"\n },\n \"engines\": {\n \"node\": \">=24.11.1\"\n },\n \"author\": \"Gallevy\",\n \"license\": \"MIT\"\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { registerScanCommand } from './commands/scan';\nimport packageJson from '../package.json';\n\nexport const program = new Command();\n\nprogram\n .name('hermex')\n .description('Analyze React component usage patterns in your codebase')\n .version(packageJson.version);\n\nregisterScanCommand(program);\n\nprogram.parse(process.argv);\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hermex",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "description": "SWC-based AST parser for analyzing code and React component usage patterns across entire codebases",
6
6
  "homepage": "https://github.com/Gallevy/hermex",
@@ -28,7 +28,7 @@
28
28
  "build": "tsup",
29
29
  "build:ci": "tsup --clean",
30
30
  "docs:update": "node scripts/update-docs.js",
31
- "dev:scan": "pnpm run build && cd fixtures && node ../dist/cli.js scan \"**/*.tsx\""
31
+ "dev:scan": "pnpm run build && node ./dist/cli.js scan"
32
32
  },
33
33
  "keywords": [
34
34
  "hermex",