hermex 0.0.1-alpha.0 β 1.0.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 +4 -21
- package/dist/cli.js +1163 -2550
- package/dist/cli.js.map +1 -1
- package/package.json +18 -20
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/parser.ts","../src/analyze-usage.ts","../src/commands/shared.ts","../src/commands/analyze.ts","../src/commands/compare.ts","../src/utils/git-utils.ts","../src/utils/lockfile-parser.ts","../src/utils/file-utils.ts","../src/github-analysis.ts","../src/utils/formatters.ts","../src/commands/github.ts","../src/cli.ts"],"names":["fs","parseSync","_a","_b","pattern","glob","path","chalk","ora","tmp","simpleGit","lockfile","yaml","Command","findFiles","Table"],"mappings":"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","file":"cli.js","sourcesContent":["import { parseSync } from '@swc/core';\nimport fs from 'fs';\nimport path from 'path';\n\nclass ReactComponentUsageAnalyzer {\n constructor(libraryName = '@design-system/foundation') {\n this.libraryName = libraryName;\n this.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 this.componentNames = new Set();\n this.allIdentifiers = new Set();\n }\n\n analyzeFile(filePath) {\n console.log(`\\nπ Analyzing: ${filePath}`);\n\n try {\n const code = fs.readFileSync(filePath, 'utf8');\n const ast = parseSync(code, {\n syntax: 'typescript',\n tsx: true,\n decorators: true,\n dynamicImport: true,\n });\n\n this.visitNode(ast);\n return this.generateReport();\n } catch (error) {\n console.error(`β Error parsing ${filePath}:`, error.message);\n return null;\n }\n }\n\n visitNode(node, parent = null) {\n if (!node) return;\n\n switch (node.type) {\n case 'Module':\n node.body.forEach((item) => this.visitNode(item, node));\n break;\n\n case 'ImportDeclaration':\n this.analyzeImport(node);\n break;\n\n case 'CallExpression':\n this.analyzeCallExpression(node, parent);\n break;\n\n case 'VariableDeclaration':\n this.analyzeVariableDeclaration(node);\n break;\n\n case 'JSXElement':\n case 'JSXFragment':\n this.analyzeJSXElement(node, parent);\n break;\n\n case 'JSXOpeningElement':\n this.analyzeJSXOpeningElement(node, parent);\n break;\n\n case 'ArrayExpression':\n this.analyzeArrayExpression(node, parent);\n break;\n\n case 'ObjectExpression':\n this.analyzeObjectExpression(node, parent);\n break;\n\n case 'MemberExpression':\n this.analyzeMemberExpression(node, parent);\n break;\n\n case 'ConditionalExpression':\n this.analyzeConditionalExpression(node, parent);\n break;\n\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'ArrowFunctionExpression':\n this.analyzeFunctionDeclaration(node);\n break;\n\n case 'ClassDeclaration':\n this.analyzeClassDeclaration(node);\n break;\n\n default:\n // Recursively visit child nodes\n this.visitChildren(node);\n break;\n }\n }\n\n visitChildren(node) {\n if (!node || typeof node !== 'object') return;\n\n for (const key in node) {\n const value = node[key];\n if (Array.isArray(value)) {\n value.forEach((child) => this.visitNode(child, node));\n } else if (value && typeof value === 'object' && value.type) {\n this.visitNode(value, node);\n }\n }\n }\n\n analyzeImport(node) {\n const source = node.source.value;\n\n if (!this.isLibraryImport(source)) return;\n\n console.log(`π¦ Found library import: ${source}`);\n\n node.specifiers.forEach((spec) => {\n switch (spec.type) {\n case 'ImportDefaultSpecifier':\n this.usagePatterns.defaultImports.add({\n name: spec.local.value,\n source: source,\n line: node.span?.start || 0,\n });\n this.componentNames.add(spec.local.value);\n break;\n\n case 'ImportNamespaceSpecifier':\n this.usagePatterns.namespaceImports.add({\n name: spec.local.value,\n source: source,\n line: node.span?.start || 0,\n });\n this.allIdentifiers.add(spec.local.value);\n break;\n\n case 'ImportSpecifier':\n const importedName = spec.imported\n ? spec.imported.value\n : spec.local.value;\n const localName = spec.local.value;\n\n this.usagePatterns.namedImports.add({\n imported: importedName,\n local: localName,\n source: source,\n line: node.span?.start || 0,\n });\n\n if (importedName !== localName) {\n this.usagePatterns.aliasedImports.set(localName, {\n original: importedName,\n source: source,\n line: node.span?.start || 0,\n });\n }\n\n this.componentNames.add(localName);\n break;\n }\n });\n }\n\n analyzeCallExpression(node, parent) {\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 this.analyzeLazyImport(node);\n }\n\n // Analyze dynamic imports\n if (node.callee?.type === 'Import') {\n this.analyzeDynamicImport(node);\n }\n\n // Analyze HOC patterns\n if (this.isHOCPattern(node)) {\n this.analyzeHOCUsage(node);\n }\n\n // Analyze React.memo, React.forwardRef\n if (node.callee?.object?.value === 'React') {\n if (node.callee?.property?.value === 'memo') {\n this.analyzeMemoUsage(node);\n } else if (node.callee?.property?.value === 'forwardRef') {\n this.analyzeForwardRefUsage(node);\n }\n }\n\n // Analyze createPortal\n if (\n node.callee?.property?.value === 'createPortal' ||\n node.callee?.value === 'createPortal'\n ) {\n this.analyzePortalUsage(node);\n }\n\n this.visitChildren(node);\n }\n\n analyzeLazyImport(node) {\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 (this.isLibraryImport(source)) {\n this.usagePatterns.lazyImports.add({\n source: source,\n line: node.span?.start || 0,\n });\n console.log(`π Found lazy import: ${source}`);\n }\n }\n }\n }\n\n analyzeDynamicImport(node) {\n const source = node.arguments?.[0]?.value;\n if (this.isLibraryImport(source)) {\n this.usagePatterns.dynamicImports.add({\n source: source,\n line: node.span?.start || 0,\n });\n console.log(`β‘ Found dynamic import: ${source}`);\n }\n }\n\n analyzeVariableDeclaration(node) {\n node.declarations?.forEach((decl) => {\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 = this.extractAssignmentInfo(decl.init);\n if (assignment && this.isLibraryComponent(assignment)) {\n this.usagePatterns.variableAssignments.set(varName, {\n assignment: assignment,\n line: node.span?.start || 0,\n });\n this.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 this.analyzeDestructuringPattern(decl.id, decl.init);\n }\n });\n\n this.visitChildren(node);\n }\n\n analyzeDestructuringPattern(pattern, init) {\n pattern.properties?.forEach((prop) => {\n if (\n prop.type === 'AssignmentPatternProperty' &&\n prop.key?.type === 'Identifier'\n ) {\n const propName = prop.key.value;\n\n if (\n init?.type === 'Identifier' &&\n this.allIdentifiers.has(init.value)\n ) {\n this.usagePatterns.destructuredUsage.add({\n property: propName,\n source: init.value,\n line: pattern.span?.start || 0,\n });\n this.componentNames.add(propName);\n console.log(`π§ Destructuring: ${propName} from ${init.value}`);\n }\n }\n });\n }\n\n analyzeJSXElement(node, parent) {\n if (node.opening) {\n this.analyzeJSXOpeningElement(node.opening, node);\n }\n this.visitChildren(node);\n }\n\n analyzeJSXOpeningElement(node, parent) {\n const elementName = this.getJSXElementName(node.name);\n\n if (\n this.componentNames.has(elementName) ||\n this.isMemberExpressionComponent(node.name)\n ) {\n const propsAnalysis = this.analyzePropsInDetail(node.attributes);\n const usage = {\n component: elementName,\n props: this.extractJSXProps(node.attributes),\n propsAnalysis: propsAnalysis,\n line: node.span?.start || 0,\n context: this.getUsageContext(parent),\n };\n\n if (!this.usagePatterns.jsxUsage.has(elementName)) {\n this.usagePatterns.jsxUsage.set(elementName, []);\n }\n this.usagePatterns.jsxUsage.get(elementName).push(usage);\n\n // Track props analysis for reporting\n if (!this.usagePatterns.propsAnalysis.has(elementName)) {\n this.usagePatterns.propsAnalysis.set(elementName, {\n namedProps: new Set(),\n spreadProps: 0,\n totalUsages: 0,\n complexProps: 0,\n });\n }\n const componentPropsStats =\n this.usagePatterns.propsAnalysis.get(elementName);\n componentPropsStats.totalUsages++;\n propsAnalysis.namedProps.forEach((prop) =>\n componentPropsStats.namedProps.add(prop),\n );\n if (propsAnalysis.hasSpread) componentPropsStats.spreadProps++;\n if (propsAnalysis.hasComplexProps) componentPropsStats.complexProps++;\n\n console.log(`π¨ JSX Usage: <${elementName}>`);\n }\n }\n\n getJSXElementName(nameNode) {\n if (!nameNode) return '';\n\n switch (nameNode.type) {\n case 'Identifier':\n return nameNode.value;\n case 'JSXMemberExpression':\n return `${this.getJSXElementName(nameNode.object)}.${nameNode.property.value}`;\n default:\n return '';\n }\n }\n\n isMemberExpressionComponent(nameNode) {\n if (nameNode?.type === 'JSXMemberExpression') {\n const objectName = this.getJSXElementName(nameNode.object);\n return this.allIdentifiers.has(objectName);\n }\n return false;\n }\n\n extractJSXProps(attributes) {\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: this.extractJSXAttributeValue(attr.value),\n };\n } else if (attr.type === 'SpreadElement') {\n return {\n name: '...',\n value: '[spread]',\n isSpread: true,\n };\n }\n return null;\n })\n .filter(Boolean);\n }\n\n extractJSXAttributeValue(value) {\n if (!value) return true; // boolean attribute\n\n switch (value.type) {\n case 'StringLiteral':\n return value.value;\n case 'JSXExpressionContainer':\n return this.extractExpressionValue(value.expression);\n default:\n return '[complex]';\n }\n }\n\n extractExpressionValue(expr) {\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 analyzePropsInDetail(attributes) {\n const analysis = {\n namedProps: new Set(),\n hasSpread: false,\n hasComplexProps: false,\n hasEventHandlers: false,\n propDetails: [],\n };\n\n if (!attributes) return analysis;\n\n attributes.forEach((attr) => {\n if (attr.type === 'JSXAttribute') {\n const propName = attr.name?.value || attr.name?.name?.value;\n if (propName) {\n analysis.namedProps.add(propName);\n\n const propDetail = {\n name: propName,\n type: this.getPropType(attr.value),\n isEventHandler: propName.startsWith('on'),\n isComplex: this.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 warning: 'Spread props cannot be statically analyzed',\n });\n analysis.hasComplexProps = true;\n }\n });\n\n return analysis;\n }\n\n getPropType(value) {\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 default:\n return 'unknown';\n }\n }\n\n isComplexProp(value) {\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\n analyzeArrayExpression(node, parent) {\n // Check if array contains components\n const hasComponents = node.elements?.some((elem) => {\n if (elem?.type === 'Identifier') {\n return this.componentNames.has(elem.value);\n }\n return false;\n });\n\n if (hasComponents) {\n this.usagePatterns.arrayMappings.add({\n components: node.elements?.map((elem) => elem?.value).filter(Boolean),\n line: node.span?.start || 0,\n });\n console.log(`π Array with components found`);\n }\n\n this.visitChildren(node);\n }\n\n analyzeObjectExpression(node, parent) {\n // Check if object contains component mappings\n const componentProps = node.properties?.filter((prop) => {\n if (\n prop.type === 'KeyValueProperty' &&\n prop.value?.type === 'Identifier'\n ) {\n return this.componentNames.has(prop.value.value);\n }\n return false;\n });\n\n if (componentProps?.length > 0) {\n this.usagePatterns.objectMappings.add({\n mappings: componentProps.map((prop) => ({\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 this.visitChildren(node);\n }\n\n analyzeConditionalExpression(node, parent) {\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 && this.componentNames.has(consequent)) ||\n (alternate && this.componentNames.has(alternate))\n ) {\n this.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 this.visitChildren(node);\n }\n\n analyzeFunctionDeclaration(node) {\n // Analyze function for HOC patterns\n if (this.isHOCFunction(node)) {\n this.usagePatterns.hocUsage.add({\n name: node.identifier?.value || '[anonymous]',\n line: node.span?.start || 0,\n });\n console.log(`π§ HOC function found: ${node.identifier?.value}`);\n }\n\n this.visitChildren(node);\n }\n\n analyzeClassDeclaration(node) {\n // Check if class component uses library components\n this.visitChildren(node);\n }\n\n isHOCPattern(node) {\n // Simple heuristic: function that returns a component-like structure\n return (\n node.callee?.type === 'Identifier' &&\n node.arguments?.some(\n (arg) =>\n arg.type === 'Identifier' && this.componentNames.has(arg.value),\n )\n );\n }\n\n isHOCFunction(node) {\n // Check if function takes a component as parameter and returns JSX\n const params = node.params || [];\n return params.some((param) => param.pat?.type === 'Identifier');\n }\n\n analyzeHOCUsage(node) {\n this.usagePatterns.hocUsage.add({\n function: node.callee?.value,\n component: node.arguments?.[0]?.value,\n line: node.span?.start || 0,\n });\n }\n\n analyzeMemoUsage(node) {\n const component = node.arguments?.[0];\n if (\n component?.type === 'Identifier' &&\n this.componentNames.has(component.value)\n ) {\n this.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 analyzeForwardRefUsage(node) {\n this.usagePatterns.forwardedRefs.add({\n line: node.span?.start || 0,\n });\n console.log(`βοΈ ForwardRef usage found`);\n }\n\n analyzePortalUsage(node) {\n this.usagePatterns.portalUsage.add({\n line: node.span?.start || 0,\n });\n console.log(`π Portal usage found`);\n }\n\n analyzeMemberExpression(node, parent) {\n // Check if this is a namespace access like Foundation.Button\n if (\n node.object?.type === 'Identifier' &&\n this.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 this.componentNames.add(propertyName);\n console.log(`π Namespace access: ${namespaceName}.${propertyName}`);\n }\n }\n\n this.visitChildren(node);\n }\n\n extractAssignmentInfo(node) {\n switch (node.type) {\n case 'Identifier':\n return node.value;\n case 'MemberExpression':\n return `${this.extractAssignmentInfo(node.object)}.${node.property.value}`;\n case 'ConditionalExpression':\n return `${this.extractAssignmentInfo(node.consequent)} | ${this.extractAssignmentInfo(node.alternate)}`;\n default:\n return null;\n }\n }\n\n getUsageContext(parent) {\n if (!parent) return 'unknown';\n\n switch (parent.type) {\n case 'JSXElement':\n return 'jsx';\n case 'CallExpression':\n return 'function-call';\n case 'ArrayExpression':\n return 'array';\n case 'ConditionalExpression':\n return 'conditional';\n default:\n return 'other';\n }\n }\n\n isLibraryImport(source) {\n return (\n source &&\n (source.startsWith(this.libraryName) || source.includes(this.libraryName))\n );\n }\n\n isLibraryComponent(name) {\n return this.componentNames.has(name) || this.allIdentifiers.has(name);\n }\n\n generateReport() {\n const report = {\n summary: {\n totalImports:\n this.usagePatterns.defaultImports.size +\n this.usagePatterns.namedImports.size +\n this.usagePatterns.namespaceImports.size,\n totalComponents: this.componentNames.size,\n totalUsagePatterns: Object.keys(this.usagePatterns).reduce(\n (sum, key) => {\n const pattern = this.usagePatterns[key];\n if (pattern instanceof Set) return sum + pattern.size;\n if (pattern instanceof Map) return sum + pattern.size;\n return sum;\n },\n 0,\n ),\n },\n patterns: {\n imports: {\n default: Array.from(this.usagePatterns.defaultImports),\n named: Array.from(this.usagePatterns.namedImports),\n namespace: Array.from(this.usagePatterns.namespaceImports),\n aliased: Array.from(this.usagePatterns.aliasedImports.entries()).map(\n ([key, value]) => ({\n alias: key,\n ...value,\n }),\n ),\n },\n usage: {\n jsx: Array.from(this.usagePatterns.jsxUsage.entries()).map(\n ([component, usages]) => ({\n component,\n count: usages.length,\n usages,\n }),\n ),\n variables: Array.from(\n this.usagePatterns.variableAssignments.entries(),\n ).map(([key, value]) => ({\n variable: key,\n ...value,\n })),\n destructuring: Array.from(this.usagePatterns.destructuredUsage),\n conditional: Array.from(this.usagePatterns.conditionalUsage),\n arrays: Array.from(this.usagePatterns.arrayMappings),\n objects: Array.from(this.usagePatterns.objectMappings),\n },\n advanced: {\n lazy: Array.from(this.usagePatterns.lazyImports),\n dynamic: Array.from(this.usagePatterns.dynamicImports),\n hoc: Array.from(this.usagePatterns.hocUsage),\n memo: Array.from(this.usagePatterns.memoizedComponents),\n forwardRef: Array.from(this.usagePatterns.forwardedRefs),\n portal: Array.from(this.usagePatterns.portalUsage),\n },\n props: Array.from(this.usagePatterns.propsAnalysis.entries()).map(\n ([component, stats]) => ({\n component,\n namedProps: Array.from(stats.namedProps),\n spreadPropsCount: stats.spreadProps,\n totalUsages: stats.totalUsages,\n complexPropsCount: stats.complexProps,\n spreadWarning:\n stats.spreadProps > 0\n ? `${stats.spreadProps} usage(s) with spread props - cannot analyze statically`\n : null,\n }),\n ),\n },\n components: Array.from(this.componentNames).sort(),\n };\n\n return report;\n }\n\n printReport(report) {\n console.log('\\n' + '='.repeat(80));\n console.log('π REACT COMPONENT USAGE ANALYSIS REPORT');\n console.log('='.repeat(80));\n\n console.log(`\\nπ SUMMARY:`);\n console.log(` Total Imports: ${report.summary.totalImports}`);\n console.log(` Components Found: ${report.summary.totalComponents}`);\n console.log(` Usage Patterns: ${report.summary.totalUsagePatterns}`);\n\n console.log(`\\nπ¦ IMPORT PATTERNS:`);\n if (report.patterns.imports.default.length > 0) {\n console.log(\n ` Default Imports (${report.patterns.imports.default.length}):`,\n );\n report.patterns.imports.default.forEach((imp) => {\n console.log(` - ${imp.name} from \"${imp.source}\"`);\n });\n }\n\n if (report.patterns.imports.named.length > 0) {\n console.log(\n ` Named Imports (${report.patterns.imports.named.length}):`,\n );\n report.patterns.imports.named.forEach((imp) => {\n console.log(\n ` - {${imp.imported}${imp.imported !== imp.local ? ` as ${imp.local}` : ''}} from \"${imp.source}\"`,\n );\n });\n }\n\n if (report.patterns.imports.namespace.length > 0) {\n console.log(\n ` Namespace Imports (${report.patterns.imports.namespace.length}):`,\n );\n report.patterns.imports.namespace.forEach((imp) => {\n console.log(` - * as ${imp.name} from \"${imp.source}\"`);\n });\n }\n\n if (report.patterns.imports.aliased.length > 0) {\n console.log(\n ` Aliased Imports (${report.patterns.imports.aliased.length}):`,\n );\n report.patterns.imports.aliased.forEach((imp) => {\n console.log(\n ` - ${imp.alias} (originally ${imp.original}) from \"${imp.source}\"`,\n );\n });\n }\n\n console.log(`\\nπ¨ JSX USAGE PATTERNS:`);\n report.patterns.usage.jsx.forEach((usage) => {\n console.log(\n ` Component: ${usage.component} (used ${usage.count} times)`,\n );\n usage.usages.slice(0, 3).forEach((use, idx) => {\n const props =\n use.props.length > 0 ? ` with ${use.props.length} props` : '';\n console.log(\n ` ${idx + 1}. <${usage.component}${props}> (line ~${use.line})`,\n );\n });\n if (usage.usages.length > 3) {\n console.log(` ... and ${usage.usages.length - 3} more`);\n }\n });\n\n if (report.patterns.usage.variables.length > 0) {\n console.log(`\\nπ VARIABLE ASSIGNMENTS:`);\n report.patterns.usage.variables.forEach((variable) => {\n console.log(` ${variable.variable} = ${variable.assignment}`);\n });\n }\n\n if (report.patterns.advanced.lazy.length > 0) {\n console.log(`\\nπ LAZY LOADING:`);\n report.patterns.advanced.lazy.forEach((lazy) => {\n console.log(` - Lazy import from \"${lazy.source}\"`);\n });\n }\n\n if (report.patterns.advanced.dynamic.length > 0) {\n console.log(`\\nβ‘ DYNAMIC IMPORTS:`);\n report.patterns.advanced.dynamic.forEach((dynamic) => {\n console.log(` - Dynamic import from \"${dynamic.source}\"`);\n });\n }\n\n if (report.patterns.usage.conditional.length > 0) {\n console.log(`\\nπ CONDITIONAL USAGE:`);\n report.patterns.usage.conditional.forEach((cond) => {\n console.log(\n ` - ${cond.consequent || 'null'} ? ${cond.alternate || 'null'}`,\n );\n });\n }\n\n console.log(`\\nπ§© COMPONENTS IDENTIFIED:`);\n report.components.forEach((comp) => {\n console.log(` - ${comp}`);\n });\n\n console.log('\\n' + '='.repeat(80));\n }\n}\n\n// Main execution\nfunction main() {\n const args = process.argv.slice(2);\n const filePath = args[0] || 'code-examples/comprehensive-usage.tsx';\n const libraryName = args[1] || '@design-system/foundation';\n\n console.log(`π Starting analysis with library: ${libraryName}`);\n console.log(`π Target file: ${filePath}`);\n\n const analyzer = new ReactComponentUsageAnalyzer(libraryName);\n\n if (fs.existsSync(filePath)) {\n const report = analyzer.analyzeFile(filePath);\n if (report) {\n analyzer.printReport(report);\n\n // Save detailed report to JSON\n const outputPath = `analysis-report-${Date.now()}.json`;\n fs.writeFileSync(outputPath, JSON.stringify(report, null, 2));\n console.log(`\\nπΎ Detailed report saved to: ${outputPath}`);\n }\n } else {\n console.error(`β File not found: ${filePath}`);\n console.log('\\nUsage: node parser.js <file-path> [library-name]');\n console.log(\n 'Example: node parser.js code-examples/comprehensive-usage.tsx @design-system/foundation',\n );\n }\n}\n\n// Export for use as module\nexport { ReactComponentUsageAnalyzer };\n\n// Run if called directly - Note: This works in CommonJS output from tsup\n// In ESM, you'd use import.meta.url === `file://${process.argv[1]}`\n","import { ReactComponentUsageAnalyzer } from './parser';\nimport fs from 'fs';\nimport path from 'path';\n\nclass FocusedUsageAnalyzer extends ReactComponentUsageAnalyzer {\n constructor(libraryName = '@design-system/foundation') {\n super(libraryName);\n this.patternMap = new Map();\n this.componentFrequency = new Map();\n this.usageComplexity = new Map();\n }\n\n analyzePatterns() {\n // Define pattern categories\n const patterns = {\n 'Direct Import & Usage': {\n weight: 1,\n description: 'Simple import and direct JSX usage',\n examples: ['import Button from \"lib\"; <Button />'],\n },\n 'Named Import with Alias': {\n weight: 2,\n description: 'Named import with renaming',\n examples: ['import { Button as MyButton } from \"lib\"; <MyButton />'],\n },\n 'Namespace Import': {\n weight: 2,\n description: 'Import entire namespace',\n examples: ['import * as Lib from \"lib\"; <Lib.Button />'],\n },\n 'Variable Assignment': {\n weight: 3,\n description: 'Assigning components to variables',\n examples: ['const MyButton = Button; <MyButton />'],\n },\n 'Conditional Assignment': {\n weight: 4,\n description: 'Conditional component selection',\n examples: ['const Comp = condition ? Button : Input; <Comp />'],\n },\n 'Object Mapping': {\n weight: 5,\n description: 'Components stored in objects',\n examples: ['const map = {btn: Button}; <map.btn />'],\n },\n 'Array Mapping': {\n weight: 5,\n description: 'Components in arrays',\n examples: ['[Button, Input].map(Comp => <Comp />)'],\n },\n 'Dynamic Mapping': {\n weight: 6,\n description: 'Runtime component selection',\n examples: ['components[type]'],\n },\n 'HOC Wrapping': {\n weight: 7,\n description: 'Higher-order component patterns',\n examples: ['withProps(Button)'],\n },\n 'Lazy Loading': {\n weight: 6,\n description: 'Lazy-loaded components',\n examples: ['lazy(() => import(\"lib/Button\"))'],\n },\n 'Dynamic Import': {\n weight: 7,\n description: 'Runtime dynamic imports',\n examples: ['await import(\"lib/Button\")'],\n },\n 'Destructuring Usage': {\n weight: 4,\n description: 'Destructured from objects',\n examples: ['const {Button} = Foundation; <Button />'],\n },\n 'Memoized Components': {\n weight: 5,\n description: 'React.memo wrapped components',\n examples: ['memo(Button)'],\n },\n 'Forward Ref': {\n weight: 6,\n description: 'forwardRef wrapped components',\n examples: ['forwardRef((props, ref) => <Button ref={ref} />)'],\n },\n 'Portal Usage': {\n weight: 8,\n description: 'Components rendered in portals',\n examples: ['createPortal(<Button />, document.body)'],\n },\n 'Context Integration': {\n weight: 7,\n description: 'Components from React context',\n examples: ['const {Button} = useContext(ThemeContext)'],\n },\n };\n\n return patterns;\n }\n\n classifyUsage(report) {\n const patterns = this.analyzePatterns();\n const foundPatterns = new Map();\n\n // Analyze each pattern type\n if (report.patterns.imports.default.length > 0) {\n foundPatterns.set('Direct Import & Usage', {\n count: report.patterns.imports.default.length,\n complexity: 1,\n examples: report.patterns.imports.default.slice(0, 3),\n });\n }\n\n if (report.patterns.imports.aliased.length > 0) {\n foundPatterns.set('Named Import with Alias', {\n count: report.patterns.imports.aliased.length,\n complexity: 2,\n examples: report.patterns.imports.aliased.slice(0, 3),\n });\n }\n\n if (report.patterns.imports.namespace.length > 0) {\n foundPatterns.set('Namespace Import', {\n count: report.patterns.imports.namespace.length,\n complexity: 2,\n examples: report.patterns.imports.namespace.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.variables.length > 0) {\n foundPatterns.set('Variable Assignment', {\n count: report.patterns.usage.variables.length,\n complexity: 3,\n examples: report.patterns.usage.variables.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.conditional.length > 0) {\n foundPatterns.set('Conditional Assignment', {\n count: report.patterns.usage.conditional.length,\n complexity: 4,\n examples: report.patterns.usage.conditional.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.objects.length > 0) {\n foundPatterns.set('Object Mapping', {\n count: report.patterns.usage.objects.length,\n complexity: 5,\n examples: report.patterns.usage.objects.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.arrays.length > 0) {\n foundPatterns.set('Array Mapping', {\n count: report.patterns.usage.arrays.length,\n complexity: 5,\n examples: report.patterns.usage.arrays.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.lazy.length > 0) {\n foundPatterns.set('Lazy Loading', {\n count: report.patterns.advanced.lazy.length,\n complexity: 6,\n examples: report.patterns.advanced.lazy.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.dynamic.length > 0) {\n foundPatterns.set('Dynamic Import', {\n count: report.patterns.advanced.dynamic.length,\n complexity: 7,\n examples: report.patterns.advanced.dynamic.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.destructuring.length > 0) {\n foundPatterns.set('Destructuring Usage', {\n count: report.patterns.usage.destructuring.length,\n complexity: 4,\n examples: report.patterns.usage.destructuring.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.memo.length > 0) {\n foundPatterns.set('Memoized Components', {\n count: report.patterns.advanced.memo.length,\n complexity: 5,\n examples: report.patterns.advanced.memo.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.forwardRef.length > 0) {\n foundPatterns.set('Forward Ref', {\n count: report.patterns.advanced.forwardRef.length,\n complexity: 6,\n examples: report.patterns.advanced.forwardRef.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.portal.length > 0) {\n foundPatterns.set('Portal Usage', {\n count: report.patterns.advanced.portal.length,\n complexity: 8,\n examples: report.patterns.advanced.portal.slice(0, 3),\n });\n }\n\n return { patterns, foundPatterns };\n }\n\n generateComplexityScore(foundPatterns) {\n let totalScore = 0;\n let maxPossibleScore = 0;\n\n foundPatterns.forEach((data, patternName) => {\n const weight = data.complexity;\n const score = weight * data.count;\n totalScore += score;\n maxPossibleScore += weight * 10; // Assume max 10 instances per pattern\n });\n\n return {\n score: totalScore,\n maxPossible: maxPossibleScore,\n percentage: Math.round(\n (totalScore / Math.max(maxPossibleScore, 1)) * 100,\n ),\n level: this.getComplexityLevel(totalScore),\n };\n }\n\n getComplexityLevel(score) {\n if (score <= 10) return 'Simple';\n if (score <= 30) return 'Moderate';\n if (score <= 60) return 'Complex';\n if (score <= 100) return 'Very Complex';\n return 'Extremely Complex';\n }\n\n generateRecommendations(foundPatterns, complexity) {\n const recommendations = [];\n\n if (\n foundPatterns.has('Dynamic Import') ||\n foundPatterns.has('Portal Usage')\n ) {\n recommendations.push({\n type: 'Performance',\n priority: 'High',\n message: 'Consider code splitting strategies for dynamic imports',\n action: 'Implement lazy loading boundaries',\n });\n }\n\n if (\n foundPatterns.has('Object Mapping') ||\n foundPatterns.has('Array Mapping')\n ) {\n recommendations.push({\n type: 'Maintainability',\n priority: 'Medium',\n message: 'Component mappings can be hard to track',\n action: 'Consider using TypeScript for better type safety',\n });\n }\n\n if (complexity.level === 'Extremely Complex') {\n recommendations.push({\n type: 'Architecture',\n priority: 'High',\n message: 'High complexity detected in component usage',\n action: 'Consider refactoring to simpler patterns',\n });\n }\n\n if (foundPatterns.size > 8) {\n recommendations.push({\n type: 'Consistency',\n priority: 'Medium',\n message: 'Many different usage patterns found',\n action: 'Standardize on 2-3 primary patterns',\n });\n }\n\n return recommendations;\n }\n\n printFocusedReport(report) {\n const { patterns, foundPatterns } = this.classifyUsage(report);\n const complexity = this.generateComplexityScore(foundPatterns);\n const recommendations = this.generateRecommendations(\n foundPatterns,\n complexity,\n );\n\n console.log('\\n' + 'π―'.repeat(40));\n console.log('π― FOCUSED COMPONENT USAGE ANALYSIS');\n console.log('π―'.repeat(40));\n\n console.log(`\\nπ COMPLEXITY ANALYSIS:`);\n console.log(\n ` Overall Score: ${complexity.score}/${complexity.maxPossible}`,\n );\n console.log(\n ` Complexity Level: ${complexity.level} (${complexity.percentage}%)`,\n );\n\n console.log(\n `\\nπ PATTERNS DETECTED (${foundPatterns.size} of ${Object.keys(patterns).length}):`,\n );\n\n // Sort by complexity (highest first)\n const sortedPatterns = Array.from(foundPatterns.entries()).sort(\n (a, b) => b[1].complexity - a[1].complexity,\n );\n\n sortedPatterns.forEach(([patternName, data]) => {\n const patternInfo = patterns[patternName];\n console.log(\n `\\n ${this.getComplexityIcon(data.complexity)} ${patternName}:`,\n );\n console.log(` Complexity: ${data.complexity}/10`);\n console.log(` Instances: ${data.count}`);\n console.log(` Description: ${patternInfo.description}`);\n\n if (data.examples.length > 0) {\n console.log(\n ` Examples: ${JSON.stringify(data.examples[0], null, ' ').slice(0, 100)}...`,\n );\n }\n });\n\n console.log(`\\nπ COMPONENT FREQUENCY:`);\n report.patterns.usage.jsx.forEach((usage) => {\n console.log(` ${usage.component}: ${usage.count} uses`);\n });\n\n if (recommendations.length > 0) {\n console.log(`\\nπ‘ RECOMMENDATIONS:`);\n recommendations.forEach((rec, idx) => {\n console.log(` ${idx + 1}. [${rec.priority}] ${rec.type}:`);\n console.log(` Issue: ${rec.message}`);\n console.log(` Action: ${rec.action}`);\n });\n }\n\n console.log(`\\nπ PATTERN COVERAGE:`);\n Object.keys(patterns).forEach((patternName) => {\n const found = foundPatterns.has(patternName);\n console.log(` ${found ? 'β
' : 'β'} ${patternName}`);\n });\n\n console.log(`\\nπ― USAGE DENSITY:`);\n const density = (foundPatterns.size / Object.keys(patterns).length) * 100;\n console.log(` Pattern Coverage: ${Math.round(density)}%`);\n console.log(\n ` Usage Intensity: ${this.getUsageIntensity(complexity.score)}`,\n );\n\n return { foundPatterns, complexity, recommendations };\n }\n\n getComplexityIcon(complexity) {\n if (complexity <= 2) return 'π’';\n if (complexity <= 4) return 'π‘';\n if (complexity <= 6) return 'π ';\n return 'π΄';\n }\n\n getUsageIntensity(score) {\n if (score <= 10) return 'Light';\n if (score <= 30) return 'Moderate';\n if (score <= 60) return 'Heavy';\n return 'Intensive';\n }\n\n analyzeMultipleFiles(filePatterns) {\n const allReports = [];\n const combinedAnalysis = {\n totalFiles: 0,\n totalComponents: new Set(),\n patternFrequency: new Map(),\n complexityDistribution: [],\n };\n\n filePatterns.forEach((pattern) => {\n const files = this.findMatchingFiles(pattern);\n files.forEach((file) => {\n console.log(`\\nπ Analyzing: ${file}`);\n const report = this.analyzeFile(file);\n if (report) {\n allReports.push({ file, report });\n combinedAnalysis.totalFiles++;\n\n // Add components to global set\n report.components.forEach((comp) =>\n combinedAnalysis.totalComponents.add(comp),\n );\n\n // Analyze patterns in this file\n const { foundPatterns, complexity } = this.classifyUsage(report);\n combinedAnalysis.complexityDistribution.push({\n file,\n score: complexity.score,\n level: complexity.level,\n });\n\n // Count pattern frequency\n foundPatterns.forEach((data, pattern) => {\n const current = combinedAnalysis.patternFrequency.get(pattern) || 0;\n combinedAnalysis.patternFrequency.set(pattern, current + 1);\n });\n }\n });\n });\n\n return { allReports, combinedAnalysis };\n }\n\n findMatchingFiles(pattern) {\n const glob = require('glob');\n try {\n return glob.sync(pattern);\n } catch (e) {\n console.warn(`Warning: Could not process pattern ${pattern}`);\n return [];\n }\n }\n}\n\n// Main execution\nfunction main() {\n const args = process.argv.slice(2);\n const command = args[0] || 'analyze';\n\n const analyzer = new FocusedUsageAnalyzer('@design-system/foundation');\n\n switch (command) {\n case 'analyze':\n const filePath = args[1] || 'code-examples/comprehensive-usage.tsx';\n console.log(`π― Focused analysis of: ${filePath}`);\n\n if (fs.existsSync(filePath)) {\n const report = analyzer.analyzeFile(filePath);\n if (report) {\n const analysis = analyzer.printFocusedReport(report);\n\n // Save focused report\n const outputPath = `focused-analysis-${Date.now()}.json`;\n fs.writeFileSync(\n outputPath,\n JSON.stringify(\n {\n file: filePath,\n report,\n analysis,\n },\n null,\n 2,\n ),\n );\n console.log(`\\nπΎ Focused analysis saved to: ${outputPath}`);\n }\n } else {\n console.error(`β File not found: ${filePath}`);\n }\n break;\n\n case 'bulk':\n const patterns = args.slice(1) || [\n 'code-examples/**/*.tsx',\n 'src/**/*.tsx',\n ];\n console.log(`π― Bulk analysis of patterns: ${patterns.join(', ')}`);\n\n const { allReports, combinedAnalysis } =\n analyzer.analyzeMultipleFiles(patterns);\n\n console.log(`\\nπ BULK ANALYSIS SUMMARY:`);\n console.log(` Files analyzed: ${combinedAnalysis.totalFiles}`);\n console.log(\n ` Unique components: ${combinedAnalysis.totalComponents.size}`,\n );\n console.log(` Most common patterns:`);\n\n Array.from(combinedAnalysis.patternFrequency.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .forEach(([pattern, count]) => {\n console.log(` ${pattern}: ${count} files`);\n });\n\n break;\n\n case 'help':\n default:\n console.log('π― Focused Usage Analyzer Commands:');\n console.log(' analyze [file] - Analyze a single file (default)');\n console.log(\n ' bulk [patterns...] - Analyze multiple files matching patterns',\n );\n console.log(' help - Show this help');\n console.log('\\nExamples:');\n console.log(\n ' node analyze-usage.js analyze code-examples/comprehensive-usage.tsx',\n );\n console.log(\n ' node analyze-usage.js bulk \"src/**/*.tsx\" \"components/**/*.jsx\"',\n );\n break;\n }\n}\n\nexport { FocusedUsageAnalyzer };\n\n// Run if called directly - Note: This works in CommonJS output from tsup\n// In ESM, you'd use import.meta.url === `file://${process.argv[1]}`\n","import { glob } from 'glob';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nexport interface FileSearchOptions {\n ignore?: string[];\n maxFiles?: number;\n}\n\nexport interface SaveReportOptions {\n data: any;\n commandType: string;\n outputPath?: string;\n format?: 'json' | 'console' | 'both';\n}\n\n/**\n * Find files matching a glob pattern\n */\nexport async function findFiles(\n pattern: string,\n ignorePatterns?: string[],\n maxFiles?: number,\n): Promise<string[]> {\n const allFiles = await glob(pattern, {\n ignore: ignorePatterns || [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n ],\n nodir: true,\n absolute: true,\n // Only match React/JS/TS files\n matchBase: true,\n });\n\n // Filter for React component files\n const reactFiles = allFiles.filter((file) => {\n const ext = file.split('.').pop()?.toLowerCase();\n return ['tsx', 'jsx', 'ts', 'js'].includes(ext || '');\n });\n\n return maxFiles ? reactFiles.slice(0, maxFiles) : reactFiles;\n}\n\n/**\n * Generate a timestamped filename for reports\n */\nexport function generateReportFilename(\n commandType: string,\n extension: string = 'json',\n): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n return `${commandType}-report-${timestamp}.${extension}`;\n}\n\n/**\n * Add metadata to a report\n */\nexport function addReportMetadata(\n data: any,\n commandType: string,\n additionalMetadata: Record<string, any> = {},\n): any {\n return {\n ...data,\n metadata: {\n ...data.metadata,\n timestamp: new Date().toISOString(),\n commandType,\n ...additionalMetadata,\n },\n };\n}\n\n/**\n * Save a report to the reports-outputs directory\n */\nexport function saveReport(options: SaveReportOptions): string {\n const { data, commandType, outputPath, format = 'both' } = options;\n\n if (format === 'console') {\n return '';\n }\n\n // Generate filename with timestamp and command type\n const filename = outputPath || generateReportFilename(commandType);\n\n // Ensure reports-outputs directory exists\n const reportsDir = path.join(process.cwd(), 'reports-outputs');\n if (!fs.existsSync(reportsDir)) {\n fs.mkdirSync(reportsDir, { recursive: true });\n }\n\n // Save to reports-outputs directory if not absolute path\n const finalPath = path.isAbsolute(filename)\n ? filename\n : path.join(reportsDir, filename);\n\n // Add metadata before saving\n const reportWithMetadata = addReportMetadata(data, commandType);\n\n fs.writeFileSync(finalPath, JSON.stringify(reportWithMetadata, null, 2));\n\n console.log(chalk.blue(`\\nπ JSON report saved to: ${finalPath}`));\n\n return finalPath;\n}\n\n/**\n * Get complexity icon based on level\n */\nexport function getComplexityIcon(level: string): string {\n switch (level) {\n case 'Simple':\n return 'π’';\n case 'Moderate':\n return 'π‘';\n case 'Complex':\n return 'π ';\n case 'Very Complex':\n return 'π΄';\n case 'Extremely Complex':\n return 'β«';\n default:\n return 'βͺ';\n }\n}\n\n/**\n * Create a visual bar for progress/stats\n */\nexport function createBar(percentage: number, length: number = 20): string {\n const filled = Math.round((percentage / 100) * length);\n const empty = length - filled;\n return chalk.green('β'.repeat(filled)) + chalk.gray('β'.repeat(empty));\n}\n\n/**\n * Format a number with commas\n */\nexport function formatNumber(num: number): string {\n return num.toLocaleString();\n}\n\n/**\n * Get emoji for ranking\n */\nexport function getRankEmoji(rank: number): string {\n switch (rank) {\n case 1:\n return 'π₯';\n case 2:\n return 'π₯';\n case 3:\n return 'π₯';\n default:\n return 'π';\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport path from 'path';\nimport { ReactComponentUsageAnalyzer } from '../parser';\nimport { FocusedUsageAnalyzer } from '../analyze-usage';\nimport { findFiles, saveReport, getRankEmoji } from './shared';\n\ninterface AnalyzeOptions {\n library: string;\n output?: string;\n format: 'json' | 'console' | 'both';\n complexity?: boolean;\n ignore?: string[];\n maxFiles?: number;\n summaryOnly?: boolean;\n}\n\nexport async function analyzeCommand(\n pattern: string,\n options: AnalyzeOptions,\n): Promise<void> {\n const spinner = ora('Finding files to analyze...').start();\n\n try {\n // Find matching files\n const files = await findFiles(pattern, options.ignore, options.maxFiles);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found matching pattern: ' + pattern));\n return;\n }\n\n spinner.succeed(chalk.green(`Found ${files.length} files to analyze`));\n\n // Analyze files\n spinner.start('Analyzing files...');\n const analyzer = options.complexity\n ? new FocusedUsageAnalyzer(options.library)\n : new ReactComponentUsageAnalyzer(options.library);\n\n const aggregatedReport = {\n metadata: {\n timestamp: new Date().toISOString(),\n commandType: 'analyze',\n library: options.library,\n pattern: pattern,\n filesAnalyzed: 0,\n filesWithErrors: 0,\n totalFiles: files.length,\n },\n files: [],\n aggregated: {\n allComponents: new Set(),\n totalImports: 0,\n totalUsagePatterns: 0,\n patternFrequency: {},\n componentFrequency: {},\n fileComplexity: [],\n errors: [],\n },\n };\n\n // Analyze each file\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n spinner.text = `Analyzing files... (${i + 1}/${files.length}) ${path.basename(file)}`;\n\n try {\n const report = analyzer.analyzeFile(file);\n\n if (report) {\n aggregatedReport.metadata.filesAnalyzed++;\n\n const fileResult: any = {\n path: file,\n components: report.components,\n summary: report.summary,\n patterns: report.patterns,\n };\n\n if (options.complexity) {\n const analysis = analyzer.classifyUsage(report);\n const complexity = analyzer.generateComplexityScore(\n analysis.foundPatterns,\n );\n fileResult.complexity = complexity;\n aggregatedReport.aggregated.fileComplexity.push({\n file: file,\n score: complexity.score,\n level: complexity.level,\n });\n }\n\n aggregatedReport.files.push(fileResult);\n\n // Aggregate data\n report.components.forEach((comp: string) =>\n aggregatedReport.aggregated.allComponents.add(comp),\n );\n aggregatedReport.aggregated.totalImports +=\n report.summary.totalImports;\n aggregatedReport.aggregated.totalUsagePatterns +=\n report.summary.totalUsagePatterns;\n\n // Count component usage\n report.patterns.usage.jsx.forEach((usage: any) => {\n aggregatedReport.aggregated.componentFrequency[usage.component] =\n (aggregatedReport.aggregated.componentFrequency[\n usage.component\n ] || 0) + usage.count;\n });\n\n // Count pattern types\n Object.keys(report.patterns).forEach((category) => {\n Object.keys(report.patterns[category]).forEach((patternType) => {\n const pattern = report.patterns[category][patternType];\n const count = Array.isArray(pattern) ? pattern.length : 0;\n if (count > 0) {\n const key = `${category}.${patternType}`;\n aggregatedReport.aggregated.patternFrequency[key] =\n (aggregatedReport.aggregated.patternFrequency[key] || 0) +\n count;\n }\n });\n });\n }\n } catch (error: any) {\n aggregatedReport.metadata.filesWithErrors++;\n aggregatedReport.aggregated.errors.push({\n file: file,\n error: error.message,\n });\n }\n }\n\n // Convert Set to Array for JSON serialization\n aggregatedReport.aggregated.allComponents = Array.from(\n aggregatedReport.aggregated.allComponents,\n ) as any;\n\n spinner.succeed(\n chalk.green(\n `Analysis complete! Analyzed ${aggregatedReport.metadata.filesAnalyzed} files`,\n ),\n );\n\n // Generate output\n if (options.format === 'json' || options.format === 'both') {\n saveReport({\n data: aggregatedReport,\n commandType: 'analyze',\n outputPath: options.output,\n format: options.format,\n });\n }\n\n if (options.format === 'console' || options.format === 'both') {\n printAggregatedReport(aggregatedReport, options);\n }\n } catch (error: any) {\n spinner.fail(chalk.red('Analysis failed: ' + error.message));\n console.error(error);\n }\n}\n\nfunction printAggregatedReport(report: any, options: AnalyzeOptions): void {\n console.log('\\n' + chalk.bold.blue('β'.repeat(80)));\n console.log(chalk.bold.blue(' π AGGREGATED ANALYSIS REPORT'));\n console.log(chalk.bold.blue('β'.repeat(80)));\n\n console.log(chalk.bold('\\nπ SUMMARY:'));\n console.log(` Library: ${chalk.cyan(report.metadata.library)}`);\n console.log(\n ` Files Analyzed: ${chalk.green(report.metadata.filesAnalyzed)} / ${report.metadata.totalFiles}`,\n );\n if (report.metadata.filesWithErrors > 0) {\n console.log(\n ` Files with Errors: ${chalk.red(report.metadata.filesWithErrors)}`,\n );\n }\n console.log(\n ` Total Components: ${chalk.yellow(report.aggregated.allComponents.length)}`,\n );\n console.log(\n ` Total Imports: ${chalk.yellow(report.aggregated.totalImports)}`,\n );\n console.log(\n ` Total Usage Patterns: ${chalk.yellow(report.aggregated.totalUsagePatterns)}`,\n );\n\n if (!options.summaryOnly) {\n console.log(chalk.bold('\\nπ― TOP COMPONENTS:'));\n const topComponents = Object.entries(report.aggregated.componentFrequency)\n .sort((a: any, b: any) => b[1] - a[1])\n .slice(0, 10);\n\n topComponents.forEach(([comp, count]: [string, any], index: number) => {\n const rank = index + 1;\n const emoji = getRankEmoji(rank);\n console.log(\n ` ${emoji} ${rank}. ${chalk.cyan(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n\n console.log(chalk.bold('\\nπ PATTERN FREQUENCY:'));\n const topPatterns = Object.entries(report.aggregated.patternFrequency)\n .sort((a: any, b: any) => b[1] - a[1])\n .slice(0, 10);\n\n topPatterns.forEach(([pattern, count]: [string, any], index: number) => {\n console.log(` ${index + 1}. ${pattern}: ${chalk.yellow(count)}`);\n });\n\n if (report.aggregated.fileComplexity.length > 0) {\n console.log(chalk.bold('\\nπ COMPLEXITY ANALYSIS:'));\n const avgComplexity =\n report.aggregated.fileComplexity.reduce(\n (sum: number, f: any) => sum + f.score,\n 0,\n ) / report.aggregated.fileComplexity.length;\n console.log(\n ` Average Complexity: ${chalk.yellow(avgComplexity.toFixed(2))}`,\n );\n\n const mostComplex = report.aggregated.fileComplexity\n .sort((a: any, b: any) => b.score - a.score)\n .slice(0, 5);\n console.log(chalk.bold('\\n Most Complex Files:'));\n mostComplex.forEach((file: any, index: number) => {\n console.log(\n ` ${index + 1}. ${path.basename(file.file)}: ${chalk.yellow(file.score)} (${file.level})`,\n );\n });\n }\n }\n\n if (report.aggregated.errors.length > 0) {\n console.log(chalk.bold.red('\\nβ οΈ ERRORS:'));\n report.aggregated.errors.slice(0, 5).forEach((error: any) => {\n console.log(\n ` ${chalk.red('β')} ${path.basename(error.file)}: ${error.error}`,\n );\n });\n if (report.aggregated.errors.length > 5) {\n console.log(\n ` ... and ${report.aggregated.errors.length - 5} more errors`,\n );\n }\n }\n\n console.log('\\n' + chalk.bold.blue('β'.repeat(80)) + '\\n');\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { FocusedUsageAnalyzer } from '../analyze-usage';\nimport { findFiles, saveReport, getRankEmoji } from './shared';\n\ninterface CompareOptions {\n libraries: string[];\n output?: string;\n format: 'json' | 'console' | 'both';\n}\n\nexport async function compareCommand(\n pattern: string,\n options: CompareOptions,\n): Promise<void> {\n const spinner = ora('Finding files to analyze...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found matching pattern: ' + pattern));\n return;\n }\n\n spinner.succeed(chalk.green(`Found ${files.length} files`));\n\n const comparisonResults = {\n metadata: {\n timestamp: new Date().toISOString(),\n commandType: 'compare',\n pattern: pattern,\n filesAnalyzed: files.length,\n libraries: options.libraries,\n },\n libraries: [],\n };\n\n // Analyze for each library\n for (const library of options.libraries) {\n spinner.start(`Analyzing ${library}...`);\n\n const analyzer = new FocusedUsageAnalyzer(library);\n let componentsFound = 0;\n let usagePatterns = 0;\n const components = new Set<string>();\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n componentsFound += report.summary.totalComponents;\n usagePatterns += report.summary.totalUsagePatterns;\n report.components.forEach((comp: string) => components.add(comp));\n }\n } catch (error) {\n // Skip files with errors\n }\n }\n\n const libraryResult = {\n name: library,\n componentsFound: components.size,\n totalUsagePatterns: usagePatterns,\n topComponents: Array.from(components).slice(0, 10),\n };\n\n comparisonResults.libraries.push(libraryResult);\n spinner.succeed(\n chalk.green(`${library}: ${components.size} components found`),\n );\n }\n\n // Sort by components found\n comparisonResults.libraries.sort(\n (a: any, b: any) => b.componentsFound - a.componentsFound,\n );\n\n // Save and display\n if (options.format === 'json' || options.format === 'both') {\n saveReport({\n data: comparisonResults,\n commandType: 'compare',\n outputPath: options.output,\n format: options.format,\n });\n }\n\n if (options.format === 'console' || options.format === 'both') {\n printComparisonReport(comparisonResults);\n }\n } catch (error: any) {\n spinner.fail(chalk.red('Comparison failed: ' + error.message));\n console.error(error);\n }\n}\n\nfunction printComparisonReport(results: any): void {\n console.log('\\n' + chalk.bold.blue('β'.repeat(60)));\n console.log(chalk.bold.blue(' π LIBRARY COMPARISON REPORT'));\n console.log(chalk.bold.blue('β'.repeat(60)));\n\n console.log(chalk.bold('\\nπ RESULTS:'));\n results.libraries.forEach((lib: any, index: number) => {\n const rank = index + 1;\n const emoji = getRankEmoji(rank);\n console.log(\n ` ${emoji} ${rank}. ${chalk.cyan(lib.name)}: ${chalk.yellow(lib.componentsFound)} components, ${chalk.yellow(lib.totalUsagePatterns)} usage patterns`,\n );\n });\n\n console.log('\\n' + chalk.bold.blue('β'.repeat(60)) + '\\n');\n}\n","import simpleGit from 'simple-git';\nimport tmp from 'tmp';\nimport fs from 'fs';\nimport path from 'path';\nimport { glob } from 'glob';\nimport chalk from 'chalk';\nimport ora from 'ora';\n\n/**\n * GitHub repository information\n */\nexport interface GitHubRepoInfo {\n owner: string;\n repo: string;\n url: string;\n shorthand: string;\n localPath?: string;\n branch?: string;\n success?: boolean;\n}\n\n/**\n * Temporary directory result\n */\nexport interface TempDirResult {\n path: string;\n cleanup: () => void;\n}\n\n/**\n * Clone options\n */\nexport interface CloneOptions {\n branch?: string;\n depth?: number;\n}\n\n/**\n * Clone result\n */\nexport interface CloneResult {\n clonedRepos: GitHubRepoInfo[];\n errors: Array<{ url: string; error: string }>;\n}\n\n/**\n * Files by repository\n */\nexport interface FilesByRepo {\n [repoShorthand: string]: {\n repo: GitHubRepoInfo;\n files: string[];\n count: number;\n };\n}\n\n/**\n * Repository statistics\n */\nexport interface RepoStats {\n packageJson?: any;\n name: string;\n version: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n totalFiles: number;\n fileTypes: {\n tsx: number;\n jsx: number;\n ts: number;\n js: number;\n };\n error?: string;\n}\n\n/**\n * Combined report\n */\nexport interface CombinedReport {\n totalComponents: string[];\n totalImports: string[];\n componentsByRepo: Record<string, string[]>;\n componentFrequency: Record<string, number>;\n importFrequency: Record<string, number>;\n repoSummaries: Array<{\n name: string;\n components: number;\n files: number;\n errors: number;\n topComponents: Array<{ component: string; uses: number }>;\n }>;\n}\n\n/**\n * Analysis results structure\n */\nexport interface AnalysisResults {\n repositories: Record<\n string,\n {\n analysis: {\n components: string[];\n imports: Record<string, { count: number }>;\n componentUsage: Record<string, number>;\n errors: any[];\n };\n files: string[];\n }\n >;\n}\n\n/**\n * Parse GitHub URL to extract owner and repo name\n * Supports:\n * - https://github.com/owner/repo\n * - https://github.com/owner/repo.git\n * - git@github.com:owner/repo.git\n * - owner/repo (shorthand)\n */\nexport function parseGitHubUrl(url: string): GitHubRepoInfo {\n // Handle shorthand: owner/repo\n if (/^[\\w-]+\\/[\\w-]+$/.test(url)) {\n const [owner, repo] = url.split('/');\n return {\n owner,\n repo: repo.replace('.git', ''),\n url: `https://github.com/${owner}/${repo}`,\n shorthand: url,\n };\n }\n\n // Handle https://github.com/owner/repo\n const httpsMatch = url.match(/github\\.com\\/([^/]+)\\/([^/.]+)/);\n if (httpsMatch) {\n return {\n owner: httpsMatch[1],\n repo: httpsMatch[2],\n url: url,\n shorthand: `${httpsMatch[1]}/${httpsMatch[2]}`,\n };\n }\n\n throw new Error(\n `Invalid GitHub URL: ${url}. Expected format: https://github.com/owner/repo or owner/repo`,\n );\n}\n\n/**\n * Create temporary directory for cloning repositories\n * @returns Promise with temp directory info\n */\nexport function createTempDir(): Promise<TempDirResult> {\n return new Promise((resolve, reject) => {\n tmp.dir(\n { unsafeCleanup: true, prefix: 'react-analyzer-' },\n (err, dirPath, cleanup) => {\n if (err) reject(err);\n resolve({ path: dirPath, cleanup });\n },\n );\n });\n}\n\n/**\n * Clone a single repository\n * @param repoUrl - GitHub repository URL or shorthand\n * @param targetDir - Target directory for cloning\n * @param options - Clone options\n * @returns Repository info\n */\nexport async function cloneRepository(\n repoUrl: string,\n targetDir: string,\n options: CloneOptions = {},\n): Promise<GitHubRepoInfo> {\n const { branch = 'main', depth = 1 } = options;\n const repoInfo = parseGitHubUrl(repoUrl);\n const localPath = path.join(targetDir, `${repoInfo.owner}-${repoInfo.repo}`);\n\n const git = simpleGit();\n\n const cloneOptions = [\n '--depth',\n depth.toString(),\n '--branch',\n branch,\n '--single-branch',\n ];\n\n try {\n await git.clone(repoInfo.url, localPath, cloneOptions);\n return {\n ...repoInfo,\n localPath,\n branch,\n success: true,\n };\n } catch (error) {\n // Try alternative branch if main fails\n if (\n error instanceof Error &&\n error.message.includes('not found') &&\n branch === 'main'\n ) {\n try {\n const fallbackOptions = [\n '--depth',\n '1',\n '--branch',\n 'master',\n '--single-branch',\n ];\n await git.clone(repoInfo.url, localPath, fallbackOptions);\n return {\n ...repoInfo,\n localPath,\n branch: 'master',\n success: true,\n };\n } catch (retryError) {\n throw retryError;\n }\n }\n throw error;\n }\n}\n\n/**\n * Clone multiple repositories\n * @param repoUrls - Array of repository URLs\n * @param targetDir - Target directory for cloning\n * @param options - Clone options\n * @returns Cloned repositories and errors\n */\nexport async function cloneRepositories(\n repoUrls: string[],\n targetDir: string,\n options: CloneOptions = {},\n): Promise<CloneResult> {\n const spinner = ora('Cloning repositories...').start();\n const clonedRepos: GitHubRepoInfo[] = [];\n const errors: Array<{ url: string; error: string }> = [];\n\n for (const repoUrl of repoUrls) {\n try {\n spinner.text = `Cloning ${repoUrl}...`;\n const repoInfo = await cloneRepository(repoUrl, targetDir, options);\n clonedRepos.push(repoInfo);\n spinner.succeed(\n chalk.green(\n `β Cloned ${repoInfo.shorthand} (${repoInfo.branch} branch)`,\n ),\n );\n spinner.start();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n errors.push({\n url: repoUrl,\n error: message,\n });\n spinner.fail(chalk.red(`β Failed to clone ${repoUrl}: ${message}`));\n spinner.start();\n }\n }\n\n spinner.stop();\n\n if (clonedRepos.length === 0) {\n throw new Error('No repositories were successfully cloned');\n }\n\n console.log(\n chalk.green(\n `\\nSuccessfully cloned ${clonedRepos.length} of ${repoUrls.length} repositories\\n`,\n ),\n );\n\n return { clonedRepos, errors };\n}\n\n/**\n * Find files in a repository\n * @param repo - Repository info\n * @param pattern - Glob pattern\n * @returns Array of file paths\n */\nexport async function findFilesInRepo(\n repo: GitHubRepoInfo,\n pattern: string = '**/*.{tsx,jsx,ts,js}',\n): Promise<string[]> {\n if (!repo.localPath) {\n throw new Error('Repository localPath is not defined');\n }\n\n // Normalize path separators for glob (use forward slashes)\n const normalizedPath = repo.localPath.replace(/\\\\/g, '/');\n const searchPattern = `${normalizedPath}/${pattern}`;\n\n const files = await glob(searchPattern, {\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],\n nodir: true,\n windowsPathsNoEscape: true,\n });\n\n return files;\n}\n\n/**\n * Find files in multiple repositories\n * @param repos - Array of repository info objects\n * @param pattern - Glob pattern\n * @returns Map of repo shorthand to files\n */\nexport async function findFilesInRepos(\n repos: GitHubRepoInfo[],\n pattern: string = '**/*.{tsx,jsx,ts,js}',\n): Promise<FilesByRepo> {\n const filesByRepo: FilesByRepo = {};\n\n for (const repo of repos) {\n const files = await findFilesInRepo(repo, pattern);\n filesByRepo[repo.shorthand] = {\n repo,\n files,\n count: files.length,\n };\n }\n\n return filesByRepo;\n}\n\n/**\n * Get repository statistics\n * @param repoPath - Path to repository\n * @returns Repository stats\n */\nexport async function getRepoStats(repoPath: string): Promise<RepoStats> {\n try {\n const packageJsonPath = path.join(repoPath, 'package.json');\n let packageJson: any = null;\n\n if (fs.existsSync(packageJsonPath)) {\n packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n }\n\n // Count files by type - normalize path for glob\n const normalizedPath = repoPath.replace(/\\\\/g, '/');\n const files = await glob(`${normalizedPath}/**/*.{tsx,jsx,ts,js}`, {\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**'],\n nodir: true,\n windowsPathsNoEscape: true,\n });\n\n const fileTypes = {\n tsx: 0,\n jsx: 0,\n ts: 0,\n js: 0,\n };\n\n files.forEach((file) => {\n const ext = path.extname(file).slice(1) as keyof typeof fileTypes;\n if (fileTypes.hasOwnProperty(ext)) {\n fileTypes[ext]++;\n }\n });\n\n return {\n packageJson,\n name: packageJson?.name || 'unknown',\n version: packageJson?.version || 'unknown',\n dependencies: packageJson?.dependencies || {},\n devDependencies: packageJson?.devDependencies || {},\n totalFiles: files.length,\n fileTypes,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n error: message,\n name: 'unknown',\n version: 'unknown',\n dependencies: {},\n devDependencies: {},\n totalFiles: 0,\n fileTypes: { tsx: 0, jsx: 0, ts: 0, js: 0 },\n };\n }\n}\n\n/**\n * Generate combined report from multiple repository analyses\n * @param analysisResults - Results from analyzing multiple repos\n * @returns Combined report\n */\nexport function generateCombinedReport(\n analysisResults: AnalysisResults,\n): CombinedReport {\n const combined: CombinedReport = {\n totalComponents: [],\n totalImports: [],\n componentsByRepo: {},\n componentFrequency: {},\n importFrequency: {},\n repoSummaries: [],\n };\n\n const totalComponentsSet = new Set<string>();\n const totalImportsSet = new Set<string>();\n\n Object.entries(analysisResults.repositories).forEach(\n ([repoName, repoData]) => {\n // Add to totals\n repoData.analysis.components.forEach((comp) =>\n totalComponentsSet.add(comp),\n );\n Object.keys(repoData.analysis.imports).forEach((imp) =>\n totalImportsSet.add(imp),\n );\n\n // Track components by repo\n combined.componentsByRepo[repoName] = repoData.analysis.components;\n\n // Aggregate component usage\n Object.entries(repoData.analysis.componentUsage).forEach(\n ([comp, count]) => {\n combined.componentFrequency[comp] =\n (combined.componentFrequency[comp] || 0) + count;\n },\n );\n\n // Aggregate import usage\n Object.entries(repoData.analysis.imports).forEach(([imp, data]) => {\n combined.importFrequency[imp] =\n (combined.importFrequency[imp] || 0) + data.count;\n });\n\n // Repo summary\n combined.repoSummaries.push({\n name: repoName,\n components: repoData.analysis.components.length,\n files: repoData.files.length,\n errors: repoData.analysis.errors.length,\n topComponents: Object.entries(repoData.analysis.componentUsage)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .map(([comp, count]) => ({ component: comp, uses: count })),\n });\n },\n );\n\n combined.totalComponents = Array.from(totalComponentsSet);\n combined.totalImports = Array.from(totalImportsSet);\n\n return combined;\n}\n\n/**\n * Cleanup temporary directory\n * @param cleanup - Cleanup function from tmp\n * @param tmpDir - Temporary directory path\n * @param keepRepos - Whether to keep the repositories\n */\nexport function cleanupTempDir(\n cleanup: (() => void) | null,\n tmpDir: string,\n keepRepos: boolean = false,\n): void {\n if (!keepRepos && cleanup) {\n try {\n cleanup();\n console.log(chalk.gray('\\nπ§Ή Cleaned up temporary directory'));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(chalk.yellow(`Warning: Failed to cleanup: ${message}`));\n }\n } else if (keepRepos && tmpDir) {\n console.log(chalk.blue(`\\nπ Repositories kept in: ${tmpDir}`));\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport yaml from 'js-yaml';\nimport lockfile from '@yarnpkg/lockfile';\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 found: boolean;\n}\n\n/**\n * Parse package-lock.json (npm/npm v7+)\n * @param lockFilePath - Path to package-lock.json\n * @returns Map of package names to versions\n */\nexport function parsePackageLock(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\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\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 {};\n }\n}\n\n/**\n * Parse yarn.lock\n * @param lockFilePath - Path to yarn.lock\n * @returns Map of package names to versions\n */\nexport function parseYarnLock(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/**\n * Parse pnpm-lock.yaml\n * @param lockFilePath - Path to pnpm-lock.yaml\n * @returns Map of package names to versions\n */\nexport function parsePnpmLock(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 Object.entries(rootImporter.dependencies).forEach(\n ([name, data]: [string, any]) => {\n if (typeof data === 'object' && data.version) {\n versions[name] = data.version;\n }\n },\n );\n }\n // Parse devDependencies\n if (rootImporter.devDependencies) {\n Object.entries(rootImporter.devDependencies).forEach(\n ([name, data]: [string, any]) => {\n if (typeof data === 'object' && data.version) {\n versions[name] = data.version;\n }\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/**\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 const lockfiles = [\n {\n name: 'package-lock.json',\n parser: parsePackageLock,\n type: 'npm' as const,\n },\n { name: 'yarn.lock', parser: parseYarnLock, type: 'yarn' as const },\n { name: 'pnpm-lock.yaml', parser: parsePnpmLock, type: 'pnpm' as const },\n ];\n\n for (const { name, parser, type } of lockfiles) {\n const lockfilePath = path.join(projectPath, name);\n if (fs.existsSync(lockfilePath)) {\n const versions = parser(lockfilePath);\n return {\n versions,\n lockfileType: type,\n lockfilePath,\n found: true,\n };\n }\n }\n\n return {\n versions: {},\n lockfileType: null,\n lockfilePath: null,\n found: false,\n };\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\n/**\n * Format component name with package version\n * @param componentName - Name of the component\n * @param packageName - Name of the package\n * @param projectPath - Path to the project directory\n * @returns Formatted string like \"Button from @mui/material@5.14.0\"\n */\nexport function formatComponentWithVersion(\n componentName: string,\n packageName: string,\n projectPath: string,\n): string {\n const version = getPackageVersion(projectPath, packageName);\n\n if (version) {\n return `${componentName} from ${packageName}@${version}`;\n }\n\n return `${componentName} from ${packageName}`;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { glob } from 'glob';\n\n/**\n * Options for finding files\n */\nexport interface FindFilesOptions {\n ignorePatterns?: string[];\n maxFiles?: number;\n cwd?: string;\n}\n\n/**\n * Find files matching a glob pattern\n * @param pattern - Glob pattern\n * @param options - Options for glob\n * @returns Array of file paths\n */\nexport async function findFiles(\n pattern: string,\n options: FindFilesOptions = {},\n): Promise<string[]> {\n const { ignorePatterns = [], maxFiles = 1000, cwd = process.cwd() } = options;\n\n const allFiles = await glob(pattern, {\n ignore: [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n ...ignorePatterns,\n ],\n nodir: true,\n cwd,\n absolute: true,\n windowsPathsNoEscape: true,\n });\n\n // Filter to only React-related file types\n const reactFiles = allFiles.filter((file) => {\n const ext = path.extname(file);\n return ['.tsx', '.jsx', '.ts', '.js'].includes(ext);\n });\n\n // Limit number of files\n if (reactFiles.length > maxFiles) {\n console.warn(\n `Warning: Found ${reactFiles.length} files, limiting to ${maxFiles}`,\n );\n return reactFiles.slice(0, maxFiles);\n }\n\n return reactFiles;\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\n/**\n * Write file content\n * @param filePath - Path to file\n * @param content - Content to write\n */\nexport function writeFile(filePath: string, content: string): void {\n // Ensure directory exists\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(filePath, content, 'utf8');\n}\n\n/**\n * Check if file exists\n * @param filePath - Path to file\n * @returns True if file exists\n */\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\n/**\n * Get file extension\n * @param filePath - Path to file\n * @returns File extension (without dot)\n */\nexport function getFileExtension(filePath: string): string {\n return path.extname(filePath).slice(1);\n}\n\n/**\n * Check if file is a React file type\n * @param filePath - Path to file\n * @returns True if React file type\n */\nexport function isReactFile(filePath: string): boolean {\n const ext = getFileExtension(filePath);\n return ['tsx', 'jsx', 'ts', 'js'].includes(ext);\n}\n\n/**\n * Ensure directory exists\n * @param dirPath - Path to directory\n */\nexport function ensureDirectory(dirPath: string): void {\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n}\n\n/**\n * Get relative path from base directory\n * @param filePath - Absolute file path\n * @param basePath - Base directory path\n * @returns Relative path\n */\nexport function getRelativePath(filePath: string, basePath: string): string {\n return path.relative(basePath, filePath);\n}\n\n/**\n * Normalize path separators for cross-platform compatibility\n * @param filePath - Path to normalize\n * @returns Normalized path (forward slashes)\n */\nexport function normalizePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n}\n\n/**\n * Get files by type from a directory\n * @param dirPath - Directory path\n * @param extensions - Array of extensions (e.g., ['.tsx', '.jsx'])\n * @returns Array of file paths\n */\nexport async function getFilesByType(\n dirPath: string,\n extensions: string[] = ['.tsx', '.jsx', '.ts', '.js'],\n): Promise<string[]> {\n const normalizedPath = normalizePath(dirPath);\n const pattern = `${normalizedPath}/**/*{${extensions.join(',')}}`;\n\n const files = await glob(pattern, {\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**'],\n nodir: true,\n windowsPathsNoEscape: true,\n });\n\n return files;\n}\n\n/**\n * Count files by extension in a directory\n * @param dirPath - Directory path\n * @returns Map of extensions to counts\n */\nexport async function countFilesByExtension(\n dirPath: string,\n): Promise<Record<string, number>> {\n const files = await getFilesByType(dirPath);\n const counts: Record<string, number> = {};\n\n files.forEach((file) => {\n const ext = getFileExtension(file);\n counts[ext] = (counts[ext] || 0) + 1;\n });\n\n return counts;\n}\n\n/**\n * Read JSON file\n * @param filePath - Path to JSON file\n * @returns Parsed JSON object\n */\nexport function readJsonFile<T = any>(filePath: string): T {\n const content = readFile(filePath);\n return JSON.parse(content) as T;\n}\n\n/**\n * Write JSON file\n * @param filePath - Path to JSON file\n * @param data - Data to write\n */\nexport function writeJsonFile(filePath: string, data: any): void {\n const content = JSON.stringify(data, null, 2);\n writeFile(filePath, content);\n}\n","import ora from 'ora';\nimport chalk from 'chalk';\nimport {\n createTempDir,\n cloneRepositories,\n findFilesInRepos,\n getRepoStats,\n generateCombinedReport,\n cleanupTempDir,\n GitHubRepoInfo,\n RepoStats,\n} from './utils/git-utils';\nimport { findAndParseLockfile, LockfileResult } from './utils/lockfile-parser';\nimport { readJsonFile } from './utils/file-utils';\n\n/**\n * Analysis options\n */\nexport interface AnalysisOptions {\n branch?: string;\n pattern?: string;\n depth?: number;\n keepRepos?: boolean;\n}\n\n/**\n * Analyzer interface (duck typing for compatibility with existing analyzers)\n */\nexport interface Analyzer {\n analyzeFile(filePath: string): AnalysisReport | null;\n}\n\n/**\n * Analysis report from a file\n */\nexport interface AnalysisReport {\n components: string[];\n patterns: {\n usage: {\n jsx: Array<{ component: string; count: number }>;\n };\n imports: {\n default: Array<{\n name?: string;\n local?: string;\n from?: string;\n source?: string;\n }>;\n named: Array<{\n name?: string;\n local?: string;\n from?: string;\n source?: string;\n }>;\n };\n };\n}\n\n/**\n * Repository analysis results\n */\nexport interface RepositoryAnalysisResult {\n files: string[];\n stats: RepoStats;\n lockfile: LockfileResult;\n analysis: {\n components: string[];\n imports: Record<\n string,\n {\n count: number;\n files: string[];\n source?: string;\n }\n >;\n componentUsage: Record<\n string,\n {\n count: number;\n files: string[];\n }\n >;\n errors: Array<{ file: string; error: string }>;\n };\n}\n\n/**\n * GitHub analysis results\n */\nexport interface GitHubAnalysisResults {\n repositories: Record<string, RepositoryAnalysisResult>;\n metadata: {\n analyzedAt: string;\n totalRepositories: number;\n failedClones: number;\n pattern: string;\n branch: string;\n repoStats: Record<string, RepoStats>;\n lockfiles: Record<string, LockfileResult>;\n };\n cloneErrors: Array<{ url: string; error: string }>;\n}\n\n/**\n * Enhanced component data\n */\nexport interface EnhancedComponentData {\n component: string;\n library: string;\n version: string;\n count: number;\n repos: Array<{ name: string; count: number }>;\n}\n\n/**\n * Full GitHub analysis report\n */\nexport interface GitHubAnalysisReport {\n metadata: {\n analyzedAt: string;\n totalRepositories: number;\n failedClones: number;\n pattern: string;\n branch: string;\n repoStats: Record<string, RepoStats>;\n lockfiles: Record<string, LockfileResult>;\n library: string;\n repositories: string[];\n };\n combined: {\n totalComponents: string[];\n totalImports: string[];\n componentsByRepo: Record<string, string[]>;\n componentFrequency: Record<string, number>;\n importFrequency: Record<string, number>;\n repoSummaries: Array<{\n name: string;\n components: number;\n files: number;\n errors: number;\n topComponents: Array<{ component: string; uses: number }>;\n }>;\n enhancedComponentFrequency: Record<string, EnhancedComponentData>;\n };\n repositories: Record<string, RepositoryAnalysisResult>;\n cloneErrors: Array<{ url: string; error: string }>;\n}\n\n/**\n * Config file structure\n */\nexport interface RepositoriesConfig {\n repositories: string[];\n}\n\n/**\n * Analyze multiple GitHub repositories\n * @param repoUrls - Array of repository URLs\n * @param analyzer - Analyzer instance\n * @param options - Analysis options\n * @returns Analysis results\n */\nexport async function analyzeGitHubRepositories(\n repoUrls: string[],\n analyzer: Analyzer,\n options: AnalysisOptions = {},\n): Promise<GitHubAnalysisResults> {\n const {\n branch = 'main',\n pattern = '**/*.{tsx,jsx,ts,js}',\n depth = 1,\n keepRepos = false,\n } = options;\n\n console.log(chalk.bold.cyan('\\nπ GitHub Repository Analysis\\n'));\n console.log(chalk.gray(`Repositories to analyze: ${repoUrls.length}`));\n console.log(chalk.gray(`Pattern: ${pattern}`));\n console.log(chalk.gray(`Branch: ${branch}\\n`));\n\n // Create temporary directory\n const { path: tmpDir, cleanup } = await createTempDir();\n\n try {\n // Clone repositories\n const { clonedRepos, errors: cloneErrors } = await cloneRepositories(\n repoUrls,\n tmpDir,\n { branch, depth },\n );\n\n // Find files in repositories\n console.log(chalk.bold('\\nπ Finding files in repositories...\\n'));\n const filesByRepo = await findFilesInRepos(clonedRepos, pattern);\n\n // Display file counts\n Object.entries(filesByRepo).forEach(([repoName, data]) => {\n console.log(` ${chalk.cyan(repoName)}: ${data.count} files`);\n });\n\n // Get repository statistics and parse lockfiles\n console.log(chalk.bold('\\nπ Gathering repository statistics...\\n'));\n const repoStats: Record<string, RepoStats> = {};\n const lockfileData: Record<string, LockfileResult> = {};\n\n for (const repo of clonedRepos) {\n if (!repo.localPath) continue;\n\n const stats = await getRepoStats(repo.localPath);\n repoStats[repo.shorthand] = stats;\n\n // Parse lockfile for version information\n const lockfileInfo = findAndParseLockfile(repo.localPath);\n lockfileData[repo.shorthand] = lockfileInfo;\n\n console.log(\n ` ${chalk.cyan(repo.shorthand)}: ${stats.name}@${stats.version} (${stats.totalFiles} files)`,\n );\n\n if (lockfileInfo.found) {\n console.log(\n chalk.gray(\n ` Lockfile: ${lockfileInfo.lockfileType} (${Object.keys(lockfileInfo.versions).length} packages)`,\n ),\n );\n }\n }\n\n // Analyze each repository\n console.log(chalk.bold('\\nπ¬ Analyzing repositories...\\n'));\n const results: Record<string, RepositoryAnalysisResult> = {};\n const spinner = ora('Analyzing...').start();\n\n for (const [repoName, repoData] of Object.entries(filesByRepo)) {\n spinner.text = `Analyzing ${repoName}...`;\n\n const repoResults: RepositoryAnalysisResult = {\n files: repoData.files,\n stats: repoStats[repoName],\n lockfile: lockfileData[repoName],\n analysis: {\n components: [],\n imports: {},\n componentUsage: {},\n errors: [],\n },\n };\n\n const componentsSet = new Set<string>();\n const componentUsageTemp = new Map<\n string,\n { count: number; files: Set<string> }\n >();\n const importsTemp = new Map<\n string,\n { count: number; files: Set<string>; source?: string }\n >();\n\n // Analyze each file\n for (const file of repoData.files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n // Aggregate components\n report.components.forEach((comp) => componentsSet.add(comp));\n\n // Aggregate component usage with version info\n report.patterns.usage.jsx.forEach((usage) => {\n const existing = componentUsageTemp.get(usage.component);\n if (!existing) {\n componentUsageTemp.set(usage.component, {\n count: usage.count,\n files: new Set([file]),\n });\n } else {\n existing.count += usage.count;\n existing.files.add(file);\n }\n });\n\n // Track imports with source\n [\n ...report.patterns.imports.default,\n ...report.patterns.imports.named,\n ].forEach((imp) => {\n const name = imp.name || imp.local || '';\n const source = imp.source || imp.from;\n\n const existing = importsTemp.get(name);\n if (!existing) {\n importsTemp.set(name, {\n count: 1,\n files: new Set([file]),\n source: source,\n });\n } else {\n existing.count++;\n existing.files.add(file);\n }\n });\n }\n } catch (error) {\n const message =\n error instanceof Error ? error.message : String(error);\n repoResults.analysis.errors.push({\n file: file,\n error: message,\n });\n }\n }\n\n // Convert Sets to Arrays for JSON serialization\n repoResults.analysis.components = Array.from(componentsSet);\n\n componentUsageTemp.forEach((value, key) => {\n repoResults.analysis.componentUsage[key] = {\n count: value.count,\n files: Array.from(value.files),\n };\n });\n\n importsTemp.forEach((value, key) => {\n repoResults.analysis.imports[key] = {\n count: value.count,\n files: Array.from(value.files),\n source: value.source,\n };\n });\n\n results[repoName] = repoResults;\n spinner.succeed(\n chalk.green(\n `β Analyzed ${repoName}: ${repoResults.analysis.components.length} components found`,\n ),\n );\n spinner.start();\n }\n\n spinner.stop();\n\n // Return comprehensive results\n const analysisResults: GitHubAnalysisResults = {\n repositories: results,\n metadata: {\n analyzedAt: new Date().toISOString(),\n totalRepositories: clonedRepos.length,\n failedClones: cloneErrors.length,\n pattern: pattern,\n branch: branch,\n repoStats: repoStats,\n lockfiles: lockfileData,\n },\n cloneErrors,\n };\n\n // Cleanup\n cleanupTempDir(cleanup, tmpDir, keepRepos);\n\n return analysisResults;\n } catch (error) {\n // Cleanup on error\n cleanupTempDir(cleanup, tmpDir, false);\n throw error;\n }\n}\n\n/**\n * Load repositories from config file\n * @param configPath - Path to config file\n * @returns Array of repository URLs\n */\nexport function loadRepositoriesFromConfig(configPath: string): string[] {\n try {\n const config = readJsonFile<RepositoriesConfig>(configPath);\n return config.repositories || [];\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to load config file: ${message}`);\n }\n}\n\n/**\n * Enhance component data with version information\n * @param componentUsage - Component usage data\n * @param lockfileData - Lockfile version data\n * @param libraryName - Name of the library\n * @returns Enhanced component data\n */\nexport function enhanceComponentsWithVersions(\n componentUsage: Record<string, { count: number; files: string[] }>,\n lockfileData: LockfileResult,\n libraryName: string,\n): Record<string, any> {\n const enhanced: Record<string, any> = {};\n\n Object.entries(componentUsage).forEach(([componentName, usage]) => {\n const version = lockfileData.versions?.[libraryName];\n const displayName = version\n ? `${componentName} from ${libraryName}@${version}`\n : `${componentName} from ${libraryName}`;\n\n enhanced[displayName] = {\n component: componentName,\n library: libraryName,\n version: version || 'unknown',\n ...usage,\n };\n });\n\n return enhanced;\n}\n\n/**\n * Create full GitHub analysis report\n * @param analysisResults - Results from repository analysis\n * @param libraryName - Name of the library being analyzed\n * @returns Full report with enhanced data\n */\nexport function createGitHubAnalysisReport(\n analysisResults: GitHubAnalysisResults,\n libraryName: string,\n): GitHubAnalysisReport {\n // Generate combined report\n const combined = generateCombinedReport(analysisResults);\n\n // Enhance components with version information from each repo\n const enhancedComponentFrequency: Record<string, EnhancedComponentData> = {};\n\n Object.entries(analysisResults.repositories).forEach(\n ([repoName, repoData]) => {\n const lockfileData = repoData.lockfile || {};\n const version = lockfileData.versions?.[libraryName];\n\n Object.entries(repoData.analysis.componentUsage).forEach(\n ([component, usage]) => {\n const key = version\n ? `${component} from ${libraryName}@${version}`\n : `${component} from ${libraryName}`;\n\n if (!enhancedComponentFrequency[key]) {\n enhancedComponentFrequency[key] = {\n component,\n library: libraryName,\n version: version || 'unknown',\n count: 0,\n repos: [],\n };\n }\n\n enhancedComponentFrequency[key].count += usage.count || 0;\n enhancedComponentFrequency[key].repos.push({\n name: repoName,\n count: usage.count || 0,\n });\n },\n );\n },\n );\n\n return {\n metadata: {\n ...analysisResults.metadata,\n library: libraryName,\n repositories: Object.keys(analysisResults.repositories),\n },\n combined: {\n ...combined,\n enhancedComponentFrequency,\n },\n repositories: analysisResults.repositories,\n cloneErrors: analysisResults.cloneErrors,\n };\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport fs from 'fs';\nimport path from 'path';\n\n/**\n * Formatting options for console reports\n */\nexport interface ConsoleReportOptions {\n top?: number;\n summaryOnly?: boolean;\n}\n\n/**\n * Aggregated report structure\n */\nexport interface AggregatedReport {\n metadata: {\n timestamp: string;\n library: string;\n filesAnalyzed: number;\n filesWithErrors?: number;\n pattern?: string;\n totalFiles?: number;\n };\n aggregated: {\n componentFrequency: Record<string, number>;\n patternFrequency: Record<string, number>;\n fileComplexity?: Record<string, { score: number; level: string }>;\n errors?: Array<{ file: string; error: string }>;\n };\n}\n\n/**\n * GitHub report structure\n */\nexport interface GitHubReport {\n metadata: {\n library: string;\n repositories: string[];\n };\n combined: {\n totalComponents: string[];\n totalImports: string[];\n componentFrequency: Record<string, number>;\n componentsByRepo: Record<string, string[]>;\n repoSummaries: Array<{\n name: string;\n components: number;\n files: number;\n errors: number;\n topComponents: Array<{ component: string; uses: number }>;\n }>;\n };\n repositories: Record<string, any>;\n}\n\n/**\n * Comparison report structure\n */\nexport interface ComparisonReport {\n metadata: {\n timestamp: string;\n pattern: string;\n filesAnalyzed: number;\n libraries: string[];\n };\n libraries: Array<{\n name: string;\n componentsFound: number;\n totalUsagePatterns: number;\n topComponents?: Array<{ component: string; uses: number }>;\n }>;\n}\n\n/**\n * Component data structure\n */\nexport interface ComponentData {\n [componentName: string]: {\n uses: number;\n files: string[];\n props?: number;\n spreadProps?: boolean;\n propsDetails?: Record<string, any>;\n };\n}\n\n/**\n * Import data structure\n */\nexport interface ImportData {\n [importName: string]: {\n count: number;\n files: string[];\n type?: string;\n };\n}\n\n/**\n * Table formatting options\n */\nexport interface TableOptions {\n componentData?: ComponentData;\n sortBy?: 'uses' | 'files' | 'props' | 'name';\n top?: number;\n showProps?: boolean;\n}\n\n/**\n * Format aggregated report for console output\n * @param report - The aggregated report data\n * @param options - Formatting options\n */\nexport function formatConsoleReport(\n report: AggregatedReport,\n options: ConsoleReportOptions = {},\n): void {\n const { metadata, aggregated } = report;\n\n console.log(chalk.bold.cyan('\\n' + '='.repeat(80)));\n console.log(chalk.bold.cyan(' π REACT COMPONENT USAGE ANALYSIS REPORT'));\n console.log(chalk.bold.cyan('='.repeat(80) + '\\n'));\n\n // Metadata\n console.log(chalk.bold('π ANALYSIS SUMMARY:'));\n console.log(\n chalk.gray(` Timestamp: ${new Date(metadata.timestamp).toLocaleString()}`),\n );\n console.log(chalk.gray(` Library: ${chalk.cyan(metadata.library)}`));\n console.log(chalk.gray(` Files Analyzed: ${metadata.filesAnalyzed}`));\n if (metadata.filesWithErrors && metadata.filesWithErrors > 0) {\n console.log(\n chalk.yellow(` Files with Errors: ${metadata.filesWithErrors}`),\n );\n }\n\n // Top components\n const topComponents = Object.entries(aggregated.componentFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, options.top || 10);\n\n if (topComponents.length > 0) {\n console.log(chalk.bold('\\nπ TOP COMPONENTS:'));\n topComponents.forEach(([comp, count], idx) => {\n const rank = idx + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : ' ';\n console.log(\n ` ${emoji} ${rank}. ${chalk.green(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n }\n\n // Pattern frequency\n const topPatterns = Object.entries(aggregated.patternFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5);\n\n if (topPatterns.length > 0 && !options.summaryOnly) {\n console.log(chalk.bold('\\nπ USAGE PATTERNS:'));\n topPatterns.forEach(([pattern, count]) => {\n console.log(` ${chalk.cyan(pattern)}: ${count} occurrences`);\n });\n }\n\n // Complexity distribution\n if (\n aggregated.fileComplexity &&\n Object.keys(aggregated.fileComplexity).length > 0\n ) {\n console.log(chalk.bold('\\nπ‘ COMPLEXITY DISTRIBUTION:'));\n const complexityLevels: Record<string, number> = {\n Simple: 0,\n Moderate: 0,\n Complex: 0,\n 'Very Complex': 0,\n 'Extremely Complex': 0,\n };\n\n Object.values(aggregated.fileComplexity).forEach((data) => {\n if (complexityLevels.hasOwnProperty(data.level)) {\n complexityLevels[data.level]++;\n }\n });\n\n Object.entries(complexityLevels).forEach(([level, count]) => {\n if (count > 0) {\n const percentage = Math.round((count / metadata.filesAnalyzed) * 100);\n const bar = createBar(percentage, 20);\n console.log(` ${level.padEnd(18)} ${bar} ${percentage}%`);\n }\n });\n }\n\n // Errors\n if (aggregated.errors && aggregated.errors.length > 0) {\n console.log(chalk.bold.red('\\nβ οΈ ERRORS:'));\n aggregated.errors.slice(0, 5).forEach((error) => {\n console.log(chalk.red(` ${error.file}: ${error.error}`));\n });\n if (aggregated.errors.length > 5) {\n console.log(\n chalk.gray(` ... and ${aggregated.errors.length - 5} more errors`),\n );\n }\n }\n\n console.log(chalk.bold.cyan('\\n' + '='.repeat(80) + '\\n'));\n}\n\n/**\n * Format GitHub analysis report for console output\n * @param report - The GitHub analysis report\n * @param options - Formatting options\n */\nexport function formatGitHubReport(\n report: GitHubReport,\n options: ConsoleReportOptions = {},\n): void {\n const { metadata, combined, repositories } = report;\n\n console.log(chalk.bold.cyan('\\n' + '='.repeat(80)));\n console.log(chalk.bold.cyan(' π GITHUB REPOSITORIES ANALYSIS REPORT'));\n console.log(chalk.bold.cyan('='.repeat(80) + '\\n'));\n\n // Summary\n console.log(chalk.bold('π SUMMARY:'));\n console.log(chalk.gray(` Library: ${chalk.cyan(metadata.library)}`));\n console.log(\n chalk.gray(` Repositories Analyzed: ${metadata.repositories.length}`),\n );\n console.log(\n chalk.gray(` Total Components Found: ${combined.totalComponents.length}`),\n );\n console.log(\n chalk.gray(` Total Imports Found: ${combined.totalImports.length}`),\n );\n\n // Top components across all repos\n const topComponents = Object.entries(combined.componentFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10);\n\n if (topComponents.length > 0) {\n console.log(chalk.bold('\\nπ TOP COMPONENTS (Across All Repos):'));\n topComponents.forEach(([comp, count], idx) => {\n const rank = idx + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : ' ';\n console.log(\n ` ${emoji} ${rank}. ${chalk.green(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n }\n\n // Repository summaries\n if (combined.repoSummaries && combined.repoSummaries.length > 0) {\n console.log(chalk.bold('\\nπ¦ REPOSITORY SUMMARIES:\\n'));\n combined.repoSummaries.forEach((summary, idx) => {\n console.log(` ${chalk.bold(idx + 1 + '.')} ${chalk.cyan(summary.name)}`);\n console.log(` Components: ${summary.components}`);\n console.log(` Files: ${summary.files}`);\n if (summary.topComponents && summary.topComponents.length > 0) {\n console.log(` Top Components:`);\n summary.topComponents.slice(0, 3).forEach((comp) => {\n console.log(` - ${comp.component}: ${comp.uses} uses`);\n });\n }\n console.log('');\n });\n }\n\n // Component distribution\n console.log(chalk.bold('π COMPONENT DISTRIBUTION:'));\n Object.entries(combined.componentsByRepo).forEach(([repo, components]) => {\n console.log(\n ` ${chalk.cyan(repo)}: ${components.length} unique components`,\n );\n });\n\n console.log(chalk.bold.cyan('\\n' + '='.repeat(80)));\n\n // Tips\n console.log(chalk.bold('\\nπ‘ TIPS:'));\n console.log(' β’ Use --keep-repos to inspect cloned repositories locally');\n console.log(' β’ Use --branch <name> to analyze different branches');\n console.log(' β’ Use --pattern to customize which files to analyze');\n console.log(' β’ Use --config <file> to load repositories from JSON file');\n console.log(' β’ JSON report contains detailed per-repo analysis');\n\n // Config example\n console.log(chalk.bold('\\nπ CONFIG FILE FORMAT:'));\n console.log(\n chalk.gray(` {\n \"repositories\": [\n \"owner/repo1\",\n \"owner/repo2\",\n \"https://github.com/owner/repo3\"\n ]\n }`),\n );\n\n console.log('');\n}\n\n/**\n * Format comparison report for console output\n * @param report - The comparison report\n */\nexport function formatComparisonReport(report: ComparisonReport): void {\n console.log(chalk.bold.cyan('\\nπ LIBRARY COMPARISON REPORT\\n'));\n\n report.libraries.forEach((lib, idx) => {\n const rank = idx + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : ' ';\n\n console.log(`${emoji} ${chalk.bold(lib.name)}`);\n console.log(` Components Found: ${chalk.yellow(lib.componentsFound)}`);\n console.log(\n ` Total Usage Patterns: ${chalk.cyan(lib.totalUsagePatterns)}`,\n );\n\n if (lib.topComponents && lib.topComponents.length > 0) {\n console.log(` Top Components:`);\n lib.topComponents.forEach((comp) => {\n console.log(` - ${chalk.green(comp.component)}: ${comp.uses} uses`);\n });\n }\n console.log('');\n });\n}\n\n/**\n * Format table output for components\n * @param data - Component data\n * @param options - Table options\n * @returns Formatted table string\n */\nexport function formatComponentTable(\n data: ComponentData,\n options: TableOptions = {},\n): string {\n const { sortBy = 'uses', top = 20, showProps = false } = options;\n\n const table = new Table({\n head: [\n chalk.cyan('Component'),\n chalk.cyan('Uses'),\n chalk.cyan('Files'),\n ...(showProps ? [chalk.cyan('Props'), chalk.cyan('Spread')] : []),\n ],\n colWidths: [30, 8, 8, ...(showProps ? [8, 8] : [])],\n style: { head: ['cyan'], border: ['gray'] },\n });\n\n // Sort data\n const sortedData = Object.entries(data)\n .sort((a, b) => {\n const [nameA, dataA] = a;\n const [nameB, dataB] = b;\n\n if (sortBy === 'uses') return dataB.uses - dataA.uses;\n if (sortBy === 'files') return dataB.files.length - dataA.files.length;\n if (sortBy === 'props') return (dataB.props || 0) - (dataA.props || 0);\n return nameA.localeCompare(nameB);\n })\n .slice(0, top);\n\n // Add rows\n sortedData.forEach(([name, itemData]) => {\n const row: string[] = [\n name,\n itemData.uses.toString(),\n itemData.files.length.toString(),\n ];\n\n if (showProps) {\n row.push((itemData.props || 0).toString());\n row.push(itemData.spreadProps ? chalk.yellow('Yes') : chalk.gray('No'));\n }\n\n table.push(row);\n });\n\n return table.toString();\n}\n\n/**\n * Format import table\n * @param importData - Import data\n * @param options - Table options\n * @returns Formatted table string\n */\nexport function formatImportTable(\n importData: ImportData,\n options: { sortBy?: 'count' | 'name'; top?: number } = {},\n): string {\n const { sortBy = 'count', top = 20 } = options;\n\n const table = new Table({\n head: [\n chalk.cyan('Import'),\n chalk.cyan('Count'),\n chalk.cyan('Files'),\n chalk.cyan('Type'),\n ],\n colWidths: [30, 8, 8, 12],\n style: { head: ['cyan'], border: ['gray'] },\n });\n\n const sortedData = Object.entries(importData)\n .sort((a, b) => {\n if (sortBy === 'count') return b[1].count - a[1].count;\n return a[0].localeCompare(b[0]);\n })\n .slice(0, top);\n\n sortedData.forEach(([name, data]) => {\n table.push([\n name,\n data.count.toString(),\n data.files.length.toString(),\n data.type || 'named',\n ]);\n });\n\n return table.toString();\n}\n\n/**\n * Create ASCII bar chart\n * @param percentage - Percentage value (0-100)\n * @param width - Width of the bar\n * @returns ASCII bar\n */\nexport function createBar(percentage: number, width: number = 20): string {\n const filled = Math.round((percentage / 100) * width);\n const empty = width - filled;\n return chalk.green('β'.repeat(filled)) + chalk.gray('β'.repeat(empty));\n}\n\n/**\n * Get complexity icon\n * @param level - Complexity level\n * @returns Icon\n */\nexport function getComplexityIcon(level: string): string {\n const icons: Record<string, string> = {\n Simple: 'β
',\n Moderate: 'β οΈ',\n Complex: 'πΆ',\n 'Very Complex': 'π΄',\n 'Extremely Complex': 'π',\n };\n return icons[level] || 'β';\n}\n\n/**\n * Format JSON output with metadata\n * @param data - Data to format\n * @param outputPath - Path to save JSON file\n */\nexport function saveJsonReport(data: any, outputPath: string): void {\n // Ensure directory exists\n const dir = path.dirname(outputPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Write JSON file\n fs.writeFileSync(outputPath, JSON.stringify(data, null, 2));\n console.log(chalk.blue(`\\nπ JSON report saved to: ${outputPath}`));\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { ReactComponentUsageAnalyzer } from '../parser';\nimport { FocusedUsageAnalyzer } from '../analyze-usage';\nimport {\n analyzeGitHubRepositories,\n loadRepositoriesFromConfig,\n createGitHubAnalysisReport,\n} from '../github-analysis';\nimport { formatGitHubReport, saveJsonReport } from '../utils/formatters';\nimport { saveReport } from './shared';\n\ninterface GithubOptions {\n library: string;\n config?: string;\n output?: string;\n format: 'json' | 'console' | 'both';\n complexity?: boolean;\n branch?: string;\n pattern?: string;\n depth?: string;\n keepRepos?: boolean;\n}\n\nexport async function githubCommand(\n repos: string[],\n options: GithubOptions,\n): Promise<void> {\n const spinner = ora('Initializing GitHub analyzer...').start();\n\n try {\n // Load repositories from config file or arguments\n let repoList = repos || [];\n\n if (options.config) {\n spinner.text = `Loading repositories from ${options.config}...`;\n try {\n repoList = loadRepositoriesFromConfig(options.config);\n spinner.succeed(\n chalk.green(`Loaded ${repoList.length} repositories from config`),\n );\n spinner.start();\n } catch (error: any) {\n spinner.fail(chalk.red(`Failed to load config file: ${error.message}`));\n process.exit(1);\n }\n }\n\n if (repoList.length === 0) {\n spinner.fail(\n chalk.red(\n 'No repositories specified. Use arguments or --config <file>',\n ),\n );\n console.log(\n chalk.yellow('\\nExample: node cli.js github owner/repo1 owner/repo2'),\n );\n console.log(chalk.yellow('Or: node cli.js github --config repos.json'));\n process.exit(1);\n }\n\n spinner.succeed(chalk.green('GitHub analyzer initialized'));\n\n // Create analyzer instance\n const analyzer = options.complexity\n ? new FocusedUsageAnalyzer(options.library)\n : new ReactComponentUsageAnalyzer(options.library);\n\n // Analyze repositories\n const results = await analyzeGitHubRepositories(repoList, analyzer, {\n branch: options.branch,\n pattern: options.pattern,\n depth: parseInt(options.depth || '1'),\n keepRepos: options.keepRepos,\n });\n\n // Create full report with enhanced data\n const fullReport = createGitHubAnalysisReport(results, options.library);\n\n // Add command type to metadata\n fullReport.metadata = {\n ...fullReport.metadata,\n commandType: 'github',\n timestamp: new Date().toISOString(),\n };\n\n // Save JSON if requested\n if (options.format === 'json' || options.format === 'both') {\n saveReport({\n data: fullReport,\n commandType: 'github',\n outputPath: options.output,\n format: options.format,\n });\n }\n\n // Display console output\n if (options.format === 'console' || options.format === 'both') {\n formatGitHubReport(fullReport, options);\n }\n } catch (error: any) {\n spinner.fail(chalk.red('GitHub analysis failed: ' + error.message));\n console.error(error);\n process.exit(1);\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { glob } from 'glob';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fs from 'fs';\nimport path from 'path';\nimport Table from 'cli-table3';\nimport { ReactComponentUsageAnalyzer } from './parser';\nimport { FocusedUsageAnalyzer } from './analyze-usage';\nimport { analyzeCommand, compareCommand, githubCommand } from './commands';\n\nconst program = new Command();\n\n// CLI Configuration\nprogram\n .name('react-usage-analyzer')\n .description('Analyze React component usage patterns in your codebase')\n .version('1.0.0');\n\n// Analyze command\nprogram\n .command('analyze')\n .description(\n 'Analyze component usage patterns in files matching a glob pattern',\n )\n .argument(\n '<pattern>',\n 'Glob pattern for files to analyze (e.g., \"src/**/*.tsx\")',\n )\n .option(\n '-l, --library <name>',\n 'Library name to analyze (e.g., @mui/material)',\n '@design-system/foundation',\n )\n .option(\n '-o, --output <file>',\n 'Output file path for JSON report (defaults to timestamped filename)',\n )\n .option(\n '-f, --format <type>',\n 'Output format: json, console, or both',\n 'both',\n )\n .option('-c, --complexity', 'Include complexity analysis', false)\n .option(\n '-s, --summary-only',\n 'Show only summary, not detailed patterns',\n false,\n )\n .option(\n '--ignore <patterns...>',\n 'Glob patterns to ignore (e.g., \"**/*.test.tsx\")',\n [],\n )\n .option('--max-files <number>', 'Maximum number of files to analyze', '1000')\n .action(async (pattern, options) => {\n await analyzeCommand(pattern, options);\n });\n\n// Compare command\nprogram\n .command('compare')\n .description('Compare usage patterns across multiple libraries')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option('-l, --libraries <names...>', 'Library names to compare', [\n '@mui/material',\n 'antd',\n '@chakra-ui/react',\n ])\n .option(\n '-o, --output <file>',\n 'Output file path for comparison report (defaults to timestamped filename)',\n )\n .option(\n '-f, --format <type>',\n 'Output format: json, console, or both',\n 'both',\n )\n .action(async (pattern, options) => {\n await compareCommand(pattern, options);\n });\n\n// Summary command\nprogram\n .command('summary')\n .description('Generate a quick summary of component usage')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('--top <number>', 'Number of top components to show', '10')\n .action(async (pattern, options) => {\n await summaryCommand(pattern, options);\n });\n\n// Patterns command\nprogram\n .command('patterns')\n .description('List all detected usage patterns')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('--sort <by>', 'Sort by: frequency, complexity, or name', 'frequency')\n .action(async (pattern, options) => {\n await patternsCommand(pattern, options);\n });\n\n// Stats command\nprogram\n .command('stats')\n .description('Show detailed statistics about component usage')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('--chart', 'Show ASCII charts', false)\n .action(async (pattern, options) => {\n await statsCommand(pattern, options);\n });\n\n// Table command\nprogram\n .command('table')\n .description('Show components and imports in table format')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('-s, --sort <by>', 'Sort by: uses, name, files, or props', 'uses')\n .option('-t, --top <number>', 'Number of top items to show', '20')\n .option('--props', 'Show props analysis', false)\n .action(async (pattern, options) => {\n await tableCommand(pattern, options);\n });\n\n// GitHub command\nprogram\n .command('github')\n .description('Analyze GitHub repositories')\n .argument(\n '[repos...]',\n 'GitHub repository URLs or owner/repo format (or use --config)',\n )\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('-b, --branch <name>', 'Branch to analyze', 'main')\n .option(\n '-p, --pattern <glob>',\n 'File pattern to analyze',\n '**/*.{tsx,jsx,ts,js}',\n )\n .option(\n '-o, --output <file>',\n 'Output JSON file (defaults to timestamped filename)',\n )\n .option(\n '-f, --format <type>',\n 'Output format: json, console, or both',\n 'both',\n )\n .option('--keep-repos', 'Keep cloned repositories after analysis', false)\n .option('--depth <number>', 'Clone depth', '1')\n .option('-c, --complexity', 'Include complexity analysis', false)\n .option('--config <file>', 'Path to config file with repository list')\n .action(async (repos, options) => {\n await githubCommand(repos, options);\n });\n\n// Main analyze command implementation\n// Command implementations are now in src/commands/\n\n// Summary command implementation\nasync function summaryCommand(pattern, options) {\n const spinner = ora('Generating summary...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found'));\n return;\n }\n\n const analyzer = new ReactComponentUsageAnalyzer(options.library);\n const componentUsage = {};\n let totalFiles = 0;\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n totalFiles++;\n report.patterns.usage.jsx.forEach((usage) => {\n if (!componentUsage[usage.component]) {\n componentUsage[usage.component] = { count: 0, files: new Set() };\n }\n componentUsage[usage.component].count += usage.count;\n componentUsage[usage.component].files.add(file);\n });\n }\n } catch (error) {\n // Skip\n }\n }\n\n spinner.succeed(chalk.green('Summary generated'));\n\n console.log(chalk.bold('\\nπ COMPONENT USAGE SUMMARY\\n'));\n console.log(chalk.gray(`Library: ${options.library}`));\n console.log(chalk.gray(`Files analyzed: ${totalFiles}\\n`));\n\n const topN = parseInt(options.top);\n const sorted = Object.entries(componentUsage)\n .map(([comp, data]) => ({\n comp,\n count: data.count,\n files: data.files.size,\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, topN);\n\n console.log(chalk.bold(`Top ${topN} Components:`));\n sorted.forEach((item, index) => {\n const rank = index + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : ' ';\n console.log(\n `${emoji} ${rank}. ${chalk.cyan(item.comp)}: ${chalk.yellow(item.count)} uses in ${chalk.green(item.files)} files`,\n );\n });\n } catch (error) {\n spinner.fail(chalk.red('Summary failed: ' + error.message));\n }\n}\n\n// Patterns command implementation\nasync function patternsCommand(pattern, options) {\n const spinner = ora('Analyzing patterns...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found'));\n return;\n }\n\n const analyzer = new FocusedUsageAnalyzer(options.library);\n const patternStats = {};\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n const analysis = analyzer.classifyUsage(report);\n\n analysis.foundPatterns.forEach((data, patternName) => {\n if (!patternStats[patternName]) {\n patternStats[patternName] = {\n count: 0,\n complexity: data.complexity,\n files: new Set(),\n };\n }\n patternStats[patternName].count += data.count;\n patternStats[patternName].files.add(file);\n });\n }\n } catch (error) {\n // Skip\n }\n }\n\n spinner.succeed(chalk.green('Pattern analysis complete'));\n\n console.log(chalk.bold('\\nπ USAGE PATTERNS DETECTED\\n'));\n\n let sorted = Object.entries(patternStats);\n\n if (options.sort === 'complexity') {\n sorted = sorted.sort((a, b) => b[1].complexity - a[1].complexity);\n } else if (options.sort === 'frequency') {\n sorted = sorted.sort((a, b) => b[1].count - a[1].count);\n } else {\n sorted = sorted.sort((a, b) => a[0].localeCompare(b[0]));\n }\n\n sorted.forEach(([name, stats]) => {\n const icon = getComplexityIcon(stats.complexity);\n console.log(`${icon} ${chalk.bold(name)}`);\n console.log(` Complexity: ${stats.complexity}/10`);\n console.log(` Instances: ${chalk.yellow(stats.count)}`);\n console.log(` Files: ${chalk.green(stats.files.size)}`);\n console.log('');\n });\n } catch (error) {\n spinner.fail(chalk.red('Pattern analysis failed: ' + error.message));\n }\n}\n\n// Stats command implementation\nasync function statsCommand(pattern, options) {\n const spinner = ora('Generating statistics...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found'));\n return;\n }\n\n const analyzer = new FocusedUsageAnalyzer(options.library);\n const stats = {\n totalFiles: files.length,\n analyzedFiles: 0,\n totalComponents: new Set(),\n totalPatterns: 0,\n complexityDistribution: {\n Simple: 0,\n Moderate: 0,\n Complex: 0,\n 'Very Complex': 0,\n 'Extremely Complex': 0,\n },\n avgComplexity: 0,\n topComponents: {},\n topPatterns: {},\n };\n\n let totalComplexityScore = 0;\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n stats.analyzedFiles++;\n report.components.forEach((comp) => stats.totalComponents.add(comp));\n stats.totalPatterns += report.summary.totalUsagePatterns;\n\n const analysis = analyzer.classifyUsage(report);\n const complexity = analyzer.generateComplexityScore(\n analysis.foundPatterns,\n );\n\n stats.complexityDistribution[complexity.level]++;\n totalComplexityScore += complexity.score;\n\n // Track component usage\n report.patterns.usage.jsx.forEach((usage) => {\n stats.topComponents[usage.component] =\n (stats.topComponents[usage.component] || 0) + usage.count;\n });\n\n // Track pattern usage\n analysis.foundPatterns.forEach((data, patternName) => {\n stats.topPatterns[patternName] =\n (stats.topPatterns[patternName] || 0) + data.count;\n });\n }\n } catch (error) {\n // Skip\n }\n }\n\n stats.avgComplexity =\n stats.analyzedFiles > 0 ? totalComplexityScore / stats.analyzedFiles : 0;\n stats.totalComponents = stats.totalComponents.size;\n\n spinner.succeed(chalk.green('Statistics generated'));\n\n // Print stats\n console.log(chalk.bold('\\nπ DETAILED STATISTICS\\n'));\n console.log(chalk.cyan('Overview:'));\n console.log(` Total Files: ${stats.totalFiles}`);\n console.log(` Analyzed Files: ${chalk.green(stats.analyzedFiles)}`);\n console.log(` Unique Components: ${chalk.yellow(stats.totalComponents)}`);\n console.log(` Total Patterns: ${chalk.yellow(stats.totalPatterns)}`);\n console.log(\n ` Average Complexity: ${chalk.yellow(stats.avgComplexity.toFixed(2))}`,\n );\n\n console.log(chalk.cyan('\\nComplexity Distribution:'));\n Object.entries(stats.complexityDistribution).forEach(([level, count]) => {\n if (count > 0) {\n const percentage = ((count / stats.analyzedFiles) * 100).toFixed(1);\n const bar = options.chart\n ? createBar(count, stats.analyzedFiles, 30)\n : '';\n console.log(\n ` ${level.padEnd(20)} ${count.toString().padStart(4)} (${percentage}%) ${bar}`,\n );\n }\n });\n\n console.log(chalk.cyan('\\nTop 5 Components:'));\n Object.entries(stats.topComponents)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .forEach(([comp, count], index) => {\n console.log(\n ` ${index + 1}. ${comp.padEnd(30)} ${chalk.yellow(count)} uses`,\n );\n });\n\n console.log(chalk.cyan('\\nTop 5 Patterns:'));\n Object.entries(stats.topPatterns)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .forEach(([pattern, count], index) => {\n console.log(\n ` ${index + 1}. ${pattern.padEnd(30)} ${chalk.yellow(count)} instances`,\n );\n });\n } catch (error) {\n spinner.fail(chalk.red('Stats generation failed: ' + error.message));\n }\n}\n\n// Table command implementation\nasync function tableCommand(pattern, options) {\n const spinner = ora('Generating table...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found'));\n return;\n }\n\n const analyzer = new ReactComponentUsageAnalyzer(options.library);\n const componentData = {};\n const importData = {};\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n // Aggregate component usage\n report.patterns.usage.jsx.forEach((usage) => {\n if (!componentData[usage.component]) {\n componentData[usage.component] = {\n uses: 0,\n files: new Set(),\n props: new Set(),\n spreadProps: 0,\n propsDetails: [],\n };\n }\n componentData[usage.component].uses += usage.count;\n componentData[usage.component].files.add(file);\n\n // Aggregate props data\n usage.usages.forEach((u) => {\n if (u.propsAnalysis) {\n u.propsAnalysis.namedProps.forEach((prop) =>\n componentData[usage.component].props.add(prop),\n );\n if (u.propsAnalysis.hasSpread) {\n componentData[usage.component].spreadProps++;\n }\n }\n });\n });\n\n // Aggregate import data\n [\n ...report.patterns.imports.default,\n ...report.patterns.imports.named,\n ].forEach((imp) => {\n const name = imp.name || imp.local;\n if (!importData[name]) {\n importData[name] = {\n files: new Set(),\n type: imp.imported ? 'named' : 'default',\n };\n }\n importData[name].files.add(file);\n });\n }\n } catch (error) {\n // Skip\n }\n }\n\n spinner.succeed(chalk.green('Table generated'));\n\n // Convert sets to counts\n Object.keys(componentData).forEach((key) => {\n componentData[key].filesCount = componentData[key].files.size;\n componentData[key].propsCount = componentData[key].props.size;\n componentData[key].propsList = Array.from(componentData[key].props);\n });\n\n Object.keys(importData).forEach((key) => {\n importData[key].filesCount = importData[key].files.size;\n });\n\n // Sort data\n const sortedComponents = Object.entries(componentData)\n .sort((a, b) => {\n switch (options.sort) {\n case 'name':\n return a[0].localeCompare(b[0]);\n case 'files':\n return b[1].filesCount - a[1].filesCount;\n case 'props':\n return b[1].propsCount - a[1].propsCount;\n case 'uses':\n default:\n return b[1].uses - a[1].uses;\n }\n })\n .slice(0, parseInt(options.top));\n\n const sortedImports = Object.entries(importData)\n .sort((a, b) => {\n if (options.sort === 'name') {\n return a[0].localeCompare(b[0]);\n }\n return b[1].filesCount - a[1].filesCount;\n })\n .slice(0, parseInt(options.top));\n\n // Display components table\n console.log(chalk.bold('\\nπ COMPONENT USAGE TABLE\\n'));\n\n const componentTable = new Table({\n head: [\n chalk.cyan('Component'),\n chalk.cyan('Uses'),\n chalk.cyan('Files'),\n ...(options.props ? [chalk.cyan('Props'), chalk.cyan('Spread')] : []),\n ],\n colWidths: [30, 10, 10, ...(options.props ? [40, 10] : [])],\n style: { head: [], border: [] },\n });\n\n sortedComponents.forEach(([component, data]) => {\n const row = [\n component,\n chalk.yellow(data.uses),\n chalk.green(data.filesCount),\n ];\n\n if (options.props) {\n const propsDisplay =\n data.propsCount > 0\n ? data.propsList.slice(0, 5).join(', ') +\n (data.propsCount > 5 ? '...' : '')\n : '-';\n const spreadDisplay =\n data.spreadProps > 0\n ? chalk.red(`β ${data.spreadProps}`)\n : chalk.gray('0');\n row.push(propsDisplay, spreadDisplay);\n }\n\n componentTable.push(row);\n });\n\n console.log(componentTable.toString());\n\n // Display imports table\n console.log(chalk.bold('\\nπ¦ IMPORTS TABLE\\n'));\n\n const importTable = new Table({\n head: [chalk.cyan('Import'), chalk.cyan('Type'), chalk.cyan('Files')],\n colWidths: [30, 15, 10],\n style: { head: [], border: [] },\n });\n\n sortedImports.forEach(([name, data]) => {\n importTable.push([\n name,\n data.type === 'named' ? chalk.blue('named') : chalk.green('default'),\n chalk.yellow(data.filesCount),\n ]);\n });\n\n console.log(importTable.toString());\n\n // Props details if requested\n if (options.props) {\n console.log(chalk.bold('\\nπ§ PROPS ANALYSIS\\n'));\n\n sortedComponents.forEach(([component, data]) => {\n if (data.propsCount > 0 || data.spreadProps > 0) {\n console.log(chalk.cyan(`${component}:`));\n console.log(` Props: ${data.propsList.join(', ')}`);\n if (data.spreadProps > 0) {\n console.log(\n chalk.yellow(\n ` β Warning: ${data.spreadProps} usage(s) with spread props (cannot analyze statically)`,\n ),\n );\n }\n console.log('');\n }\n });\n }\n\n // Summary\n console.log(chalk.bold('π SUMMARY'));\n console.log(` Total Components: ${Object.keys(componentData).length}`);\n console.log(` Total Imports: ${Object.keys(importData).length}`);\n console.log(` Files Analyzed: ${files.length}`);\n console.log(` Sort: ${options.sort}`);\n } catch (error) {\n spinner.fail(chalk.red('Table generation failed: ' + error.message));\n }\n}\n\n// Remaining commands need refactoring (summary, patterns, stats, table)\n// These will be moved to separate files in a future cleanup\n\nfunction printGitHubReport(report, options) {\n console.log('\\n' + chalk.bold.blue('β'.repeat(80)));\n console.log(chalk.bold.blue(' π GITHUB REPOSITORIES ANALYSIS REPORT'));\n console.log(chalk.bold.blue('β'.repeat(80)));\n\n console.log(chalk.bold('\\nπ SUMMARY:'));\n console.log(` Library: ${chalk.cyan(report.metadata.library)}`);\n console.log(\n ` Repositories Analyzed: ${chalk.green(report.metadata.totalRepositories)}`,\n );\n if (report.metadata.failedClones > 0) {\n console.log(` Failed Clones: ${chalk.red(report.metadata.failedClones)}`);\n }\n console.log(\n ` Total Components Found: ${chalk.yellow(report.combined.totalComponents.length)}`,\n );\n console.log(\n ` Total Imports Found: ${chalk.yellow(report.combined.totalImports.length)}`,\n );\n\n console.log(chalk.bold('\\nπ TOP COMPONENTS (Across All Repos):'));\n const topComponents = Object.entries(report.combined.componentFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10);\n\n topComponents.forEach(([comp, count], index) => {\n const rank = index + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : ' ';\n console.log(\n ` ${emoji} ${rank}. ${chalk.cyan(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n\n console.log(chalk.bold('\\nπ¦ REPOSITORY SUMMARIES:'));\n report.combined.repoSummaries.forEach((summary, index) => {\n console.log(`\\n ${index + 1}. ${chalk.bold.cyan(summary.name)}`);\n console.log(` Components: ${chalk.yellow(summary.components)}`);\n console.log(` Files: ${chalk.green(summary.files)}`);\n if (summary.errors > 0) {\n console.log(` Errors: ${chalk.red(summary.errors)}`);\n }\n if (summary.topComponents.length > 0) {\n console.log(` Top Components:`);\n summary.topComponents.forEach((comp) => {\n console.log(\n ` - ${comp.component}: ${chalk.yellow(comp.uses)} uses`,\n );\n });\n }\n });\n\n console.log(chalk.bold('\\nπ COMPONENT DISTRIBUTION:'));\n Object.entries(report.combined.componentsByRepo).forEach(\n ([repoName, components]) => {\n console.log(\n ` ${chalk.cyan(repoName)}: ${chalk.yellow(components.length)} unique components`,\n );\n },\n );\n\n if (report.cloneErrors.length > 0) {\n console.log(chalk.bold.red('\\nβ οΈ CLONE ERRORS:'));\n report.cloneErrors.forEach((error) => {\n console.log(` ${chalk.red('β')} ${error.url}: ${error.error}`);\n });\n }\n\n console.log('\\n' + chalk.bold.blue('β'.repeat(80)));\n\n // Display helpful tips\n console.log(chalk.bold('\\nπ‘ TIPS:'));\n console.log(' β’ Use --keep-repos to inspect cloned repositories locally');\n console.log(' β’ Use --branch <name> to analyze different branches');\n console.log(' β’ Use --pattern to customize which files to analyze');\n console.log(' β’ Use --config <file> to load repositories from JSON file');\n console.log(' β’ JSON report contains detailed per-repo analysis');\n\n // Show example config format\n console.log(chalk.bold('\\nπ CONFIG FILE FORMAT:'));\n console.log(\n chalk.gray(` {\n \"repositories\": [\n \"owner/repo1\",\n \"owner/repo2\",\n \"https://github.com/owner/repo3\"\n ]\n }`),\n );\n}\n\n// Helper functions\nasync function findFiles(pattern, ignorePatterns, maxFiles) {\n const allFiles = await glob(pattern, {\n ignore: ['node_modules/**', 'dist/**', 'build/**', ...ignorePatterns],\n nodir: true,\n absolute: false,\n // Support all React file types\n matchBase: false,\n });\n\n // Filter for React file types: tsx, jsx, ts, js\n const reactFiles = allFiles.filter((file) => {\n const ext = path.extname(file).toLowerCase();\n return ['.tsx', '.jsx', '.ts', '.js'].includes(ext);\n });\n\n return reactFiles.slice(0, maxFiles);\n}\n\nfunction printAggregatedReport(report, options) {\n console.log('\\n' + chalk.bold.blue('β'.repeat(80)));\n console.log(chalk.bold.blue(' π AGGREGATED ANALYSIS REPORT'));\n console.log(chalk.bold.blue('β'.repeat(80)));\n\n console.log(chalk.bold('\\nπ SUMMARY:'));\n console.log(` Library: ${chalk.cyan(report.metadata.library)}`);\n console.log(\n ` Files Analyzed: ${chalk.green(report.metadata.filesAnalyzed)} / ${report.metadata.totalFiles}`,\n );\n if (report.metadata.filesWithErrors > 0) {\n console.log(\n ` Files with Errors: ${chalk.red(report.metadata.filesWithErrors)}`,\n );\n }\n console.log(\n ` Total Components: ${chalk.yellow(report.aggregated.allComponents.length)}`,\n );\n console.log(\n ` Total Imports: ${chalk.yellow(report.aggregated.totalImports)}`,\n );\n console.log(\n ` Total Usage Patterns: ${chalk.yellow(report.aggregated.totalUsagePatterns)}`,\n );\n\n if (!options.summaryOnly) {\n console.log(chalk.bold('\\nπ― TOP COMPONENTS:'));\n const topComponents = Object.entries(report.aggregated.componentFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10);\n\n topComponents.forEach(([comp, count], index) => {\n const rank = index + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : ' ';\n console.log(\n ` ${emoji} ${rank}. ${chalk.cyan(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n\n console.log(chalk.bold('\\nπ PATTERN FREQUENCY:'));\n const topPatterns = Object.entries(report.aggregated.patternFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10);\n\n topPatterns.forEach(([pattern, count], index) => {\n console.log(` ${index + 1}. ${pattern}: ${chalk.yellow(count)}`);\n });\n\n if (report.aggregated.fileComplexity.length > 0) {\n console.log(chalk.bold('\\nπ COMPLEXITY ANALYSIS:'));\n const avgComplexity =\n report.aggregated.fileComplexity.reduce((sum, f) => sum + f.score, 0) /\n report.aggregated.fileComplexity.length;\n console.log(\n ` Average Complexity: ${chalk.yellow(avgComplexity.toFixed(2))}`,\n );\n\n const mostComplex = report.aggregated.fileComplexity\n .sort((a, b) => b.score - a.score)\n .slice(0, 5);\n console.log(chalk.bold('\\n Most Complex Files:'));\n mostComplex.forEach((file, index) => {\n console.log(\n ` ${index + 1}. ${path.basename(file.file)}: ${chalk.yellow(file.score)} (${file.level})`,\n );\n });\n }\n }\n\n if (report.aggregated.errors.length > 0) {\n console.log(chalk.bold.red('\\nβ οΈ ERRORS:'));\n report.aggregated.errors.slice(0, 5).forEach((error) => {\n console.log(\n ` ${chalk.red('β')} ${path.basename(error.file)}: ${error.error}`,\n );\n });\n if (report.aggregated.errors.length > 5) {\n console.log(\n ` ... and ${report.aggregated.errors.length - 5} more errors`,\n );\n }\n }\n\n console.log('\\n' + chalk.bold.blue('β'.repeat(80)) + '\\n');\n}\n\nfunction printComparisonReport(results) {\n console.log('\\n' + chalk.bold.magenta('β'.repeat(80)));\n console.log(chalk.bold.magenta(' π LIBRARY COMPARISON REPORT'));\n console.log(chalk.bold.magenta('β'.repeat(80)));\n\n console.log(chalk.bold('\\nπ RANKING BY COMPONENT USAGE:'));\n results.libraries.forEach((lib, index) => {\n const rank = index + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : 'π';\n console.log(` ${emoji} ${rank}. ${chalk.cyan(lib.name)}`);\n console.log(` Components: ${chalk.yellow(lib.componentsFound)}`);\n console.log(` Usage Patterns: ${chalk.yellow(lib.totalUsagePatterns)}`);\n console.log(\n ` Top Components: ${lib.topComponents.slice(0, 3).join(', ')}`,\n );\n console.log('');\n });\n\n console.log(chalk.bold.magenta('β'.repeat(80)) + '\\n');\n}\n\nfunction getComplexityIcon(complexity) {\n if (complexity <= 2) return chalk.green('π’');\n if (complexity <= 4) return chalk.yellow('π‘');\n if (complexity <= 6) return chalk.hex('#FFA500')('π ');\n return chalk.red('π΄');\n}\n\nfunction createBar(value, max, width) {\n const filled = Math.round((value / max) * width);\n const empty = width - filled;\n return chalk.green('β'.repeat(filled)) + chalk.gray('β'.repeat(empty));\n}\n\n// Parse arguments and execute\nprogram.parse(process.argv);\n\n// Show help if no command provided\nif (process.argv.length < 3) {\n program.help();\n}\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/print-verbose.ts","../src/utils/print-summary.ts","../src/utils/print-details.ts","../src/utils/chart-renderer.ts","../src/utils/print-top-components.ts","../src/utils/print-components-usage.ts","../src/utils/print-patterns.ts","../src/commands/scan.ts","../package.json","../src/cli.ts"],"names":["_a","_b","parseSync","fs","path","chalk","Table","program","ora","glob","Command"],"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 console.log(`\\nπ Analyzing: ${filePath}`);\n\n try {\n const code = fs.readFileSync(filePath, 'utf8');\n return parseCode(code, options);\n } catch (error: any) {\n console.error(`β Error parsing ${filePath}:`, error.message);\n return null;\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 } from '../swc-parser';\n\nexport interface ComponentUsage {\n name: string;\n source: string;\n count: number;\n files: Set<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 reports: UsageReport[];\n}\n\nexport function aggregateReports(reports: UsageReport[]): 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 // 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(jsx.component, report);\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 return {\n filesAnalyzed: reports.length,\n totalImports,\n totalComponents: componentUsageMap.size,\n totalUsagePatterns,\n patternCounts,\n componentUsage: componentUsageMap,\n topComponents,\n allComponents,\n reports,\n };\n}\n\nfunction findComponentSource(\n componentName: string,\n report: UsageReport,\n): string {\n // Check named imports\n const namedImport = report.patterns.imports.named.find(\n (imp) => imp.name === componentName,\n );\n if (namedImport) return namedImport.source;\n\n // Check default imports\n const defaultImport = report.patterns.imports.default.find(\n (imp) => imp.name === componentName,\n );\n if (defaultImport) return defaultImport.source;\n\n // Check aliased imports\n const aliasedImport = report.patterns.imports.aliased.find(\n (imp) => imp.local === componentName,\n );\n if (aliasedImport) return aliasedImport.source;\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","import chalk from 'chalk';\nimport path from 'node:path';\nimport type { UsageReport } from '../swc-parser';\n\nexport function printVerbose(filePath: string, report: UsageReport) {\n const relativePath = path.relative(process.cwd(), filePath);\n\n console.log(chalk.gray(`[VERBOSE] Analyzing: ${relativePath}`));\n\n // Print JSX usage\n for (const jsx of report.patterns.usage.jsx) {\n console.log(chalk.gray(`[VERBOSE] Found JSX Usage: <${jsx.component}>`));\n }\n\n // Print named imports\n for (const imp of report.patterns.imports.named) {\n console.log(\n chalk.gray(`[VERBOSE] Found import: ${imp.name} from ${imp.source}`),\n );\n }\n\n // Print default imports\n for (const imp of report.patterns.imports.default) {\n console.log(\n chalk.gray(\n `[VERBOSE] Found default import: ${imp.name} from ${imp.source}`,\n ),\n );\n }\n\n // Print namespace imports\n for (const imp of report.patterns.imports.namespace) {\n console.log(\n chalk.gray(\n `[VERBOSE] Found namespace import: ${imp.name} from ${imp.source}`,\n ),\n );\n }\n\n // Print aliased imports\n for (const imp of report.patterns.imports.aliased) {\n console.log(\n chalk.gray(\n `[VERBOSE] Found aliased import: ${imp.imported} as ${imp.local} from ${imp.source}`,\n ),\n );\n }\n\n // Print object mappings\n for (const obj of report.patterns.usage.objects) {\n for (const mapping of obj.mappings) {\n console.log(\n chalk.gray(\n `[VERBOSE] Found Object mapping with Component: ${mapping.component}`,\n ),\n );\n }\n }\n\n // Print conditional usage\n for (const cond of report.patterns.usage.conditional) {\n console.log(\n chalk.gray(`[VERBOSE] Found Conditional usage: ${cond.consequent}`),\n );\n }\n\n // Print array mappings\n for (const arr of report.patterns.usage.arrays) {\n console.log(\n chalk.gray(\n `[VERBOSE] Found Array mapping with components: ${arr.components.join(', ')}`,\n ),\n );\n }\n\n // Print variable assignments\n for (const variable of report.patterns.usage.variables) {\n console.log(\n chalk.gray(\n `[VERBOSE] Found Variable assignment: ${variable.variable} = ${variable.assignment}`,\n ),\n );\n }\n\n // Print destructuring\n for (const destructure of report.patterns.usage.destructuring) {\n console.log(\n chalk.gray(\n `[VERBOSE] Found Destructuring: ${destructure.property} from ${destructure.source}`,\n ),\n );\n }\n\n // Print lazy imports\n for (const lazy of report.patterns.advanced.lazy) {\n console.log(chalk.gray(`[VERBOSE] Found Lazy import: ${lazy.source}`));\n }\n\n // Print dynamic imports\n for (const dynamic of report.patterns.advanced.dynamic) {\n console.log(\n chalk.gray(`[VERBOSE] Found Dynamic import: ${dynamic.source}`),\n );\n }\n\n // Print HOC usage\n for (const hoc of report.patterns.advanced.hoc) {\n console.log(\n chalk.gray(`[VERBOSE] Found HOC: ${hoc.function}(${hoc.component})`),\n );\n }\n\n // Print memo\n for (const memo of report.patterns.advanced.memo) {\n console.log(\n chalk.gray(`[VERBOSE] Found Memoized component: ${memo.component}`),\n );\n }\n\n // Print forwardRef\n if (report.patterns.advanced.forwardRef.length > 0) {\n console.log(chalk.gray(`[VERBOSE] Found Forward Ref usage`));\n }\n\n // Print portal\n if (report.patterns.advanced.portal.length > 0) {\n console.log(chalk.gray(`[VERBOSE] Found Portal usage`));\n }\n\n // Print line separator\n console.log(chalk.gray(`[VERBOSE] ${'β'.repeat(80)}`));\n}\n","import chalk from 'chalk';\nimport type { AggregatedReport } from './aggregator';\n\nexport function printSummary(\n aggregated: AggregatedReport,\n elapsedTimeSeconds: number,\n) {\n console.log(\n chalk.green(\n `[SUMMARY] Analysis completed successfully in ${elapsedTimeSeconds.toFixed(1)}s`,\n ),\n );\n console.log(\n chalk.green(\n `[SUMMARY] Files analyzed: ${aggregated.filesAnalyzed.toLocaleString()}`,\n ),\n );\n console.log(\n chalk.green(\n `[SUMMARY] Total imports: ${aggregated.totalImports.toLocaleString()}`,\n ),\n );\n console.log(\n chalk.green(\n `[SUMMARY] Total components: ${aggregated.totalComponents.toLocaleString()}`,\n ),\n );\n}\n","import chalk from 'chalk';\nimport type { AggregatedReport } from './aggregator';\n\nexport function printDetails(aggregated: AggregatedReport) {\n console.log(\n chalk.cyan(\n `[DETAILS] Total usage patterns: ${aggregated.totalUsagePatterns.toLocaleString()}`,\n ),\n );\n\n // Print each pattern type count\n for (const pattern of aggregated.patternCounts) {\n if (pattern.count > 0) {\n console.log(\n chalk.cyan(\n `[DETAILS] ${pattern.displayName}: ${pattern.count.toLocaleString()}`,\n ),\n );\n }\n }\n}\n","import chalk from 'chalk';\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 ? ` ${item.value.toLocaleString()}` : '';\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\nexport function printTopComponents(\n aggregated: AggregatedReport,\n mode: 'log' | 'table' | 'chart',\n topN: number = 10,\n) {\n const topComponents = aggregated.topComponents.slice(0, topN);\n\n if (mode === 'log') {\n printTopComponentsLog(topComponents);\n } else if (mode === 'table') {\n printTopComponentsTable(topComponents);\n } else if (mode === 'chart') {\n printTopComponentsChart(topComponents);\n }\n}\n\nfunction printTopComponentsLog(components: ComponentUsage[]) {\n console.log(chalk.yellow.bold(`\\nπ Top Components\\n`));\n\n if (components.length === 0) {\n console.log(chalk.gray(' No components found'));\n return;\n }\n\n components.forEach((comp, idx) => {\n const rank = idx + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : ' ';\n const sourceStr = comp.source !== 'unknown' ? ` from ${comp.source}` : '';\n console.log(\n chalk.yellow(\n `[TOP-COMPONENTS] ${emoji} ${rank}. ${comp.name}${sourceStr}: ${comp.count} uses`,\n ),\n );\n });\n}\n\nfunction printTopComponentsTable(components: ComponentUsage[]) {\n console.log(chalk.yellow(`[TOP-COMPONENTS] TABLE`));\n\n if (components.length === 0) {\n console.log(chalk.gray(' No components found'));\n return;\n }\n\n const table = new Table({\n head: ['Rank', 'Component', 'Source', 'Count'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n components.forEach((comp, idx) => {\n const rank = idx + 1;\n const emoji =\n rank === 1 ? 'π₯' : rank === 2 ? 'π₯' : rank === 3 ? 'π₯' : `${rank}.`;\n table.push([emoji, comp.name, comp.source, comp.count.toString()]);\n });\n\n console.log(table.toString());\n}\n\nfunction printTopComponentsChart(components: ComponentUsage[]) {\n console.log(chalk.yellow(`[TOP-COMPONENTS] CHART`));\n\n if (components.length === 0) {\n console.log(chalk.gray(' No components found'));\n return;\n }\n\n const data = components.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, ComponentUsage } from './aggregator';\nimport { renderBarChart } from './chart-renderer';\n\nexport function printComponentsUsage(\n aggregated: AggregatedReport,\n mode: 'table' | 'chart',\n) {\n const components = aggregated.topComponents;\n\n if (mode === 'table') {\n printComponentsUsageTable(components);\n } else if (mode === 'chart') {\n printComponentsUsageChart(components);\n }\n}\n\nfunction printComponentsUsageTable(components: ComponentUsage[]) {\n console.log(chalk.magenta.bold(`\\nβοΈ Components Usage\\n`));\n\n if (components.length === 0) {\n console.log(chalk.gray(' No components found'));\n return;\n }\n\n const table = new Table({\n head: ['Component', 'Source', 'Version', 'Count'],\n style: {\n head: ['cyan'],\n border: ['gray'],\n },\n });\n\n components.forEach((comp) => {\n table.push([comp.name, comp.source, '0.0.0', comp.count.toString()]);\n });\n\n console.log(table.toString());\n}\n\nfunction printComponentsUsageChart(components: ComponentUsage[]) {\n console.log(chalk.magenta.bold(`\\nβοΈ Components Usage\\n`));\n\n if (components.length === 0) {\n console.log(chalk.gray(' No components found'));\n return;\n }\n\n const data = components.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\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 console.log(chalk.blue.bold(`\\nπ Code Patterns\\n`));\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\nfunction printPatternsChart(patterns: PatternCount[]) {\n console.log(chalk.blue(`[PATTERNS] CHART`));\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 { Command } from 'commander';\nimport { glob } from 'glob';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport { parseFile } from '../swc-parser';\nimport type { UsageReport } from '../swc-parser';\nimport { aggregateReports } from '../utils/aggregator';\nimport { printVerbose } from '../utils/print-verbose';\nimport { printSummary } from '../utils/print-summary';\nimport { printDetails } from '../utils/print-details';\nimport { printTopComponents } from '../utils/print-top-components';\nimport { printComponentsUsage } from '../utils/print-components-usage';\nimport { printPatterns } from '../utils/print-patterns';\n\ninterface ScanOptions {\n verbose?: boolean;\n summary?: string | boolean;\n details?: boolean;\n topComponents?: string;\n componentsUsage?: string;\n patterns?: string;\n output?: string;\n}\n\ninterface NormalizedScanOptions {\n verbose: boolean;\n summary: 'log' | false;\n details: boolean;\n topComponents: 'log' | 'table' | 'chart';\n componentsUsage: 'table' | 'chart';\n patterns: 'table' | 'chart';\n output?: 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(\n '--verbose',\n 'Show detailed file-by-file analysis with every pattern found',\n false,\n )\n .option('--summary [mode]', 'Show summary stats (log, false)', 'log')\n .option('--details', 'Show detailed pattern counts')\n .option(\n '--top-components [mode]',\n 'Show top components (log, table, chart)',\n 'log',\n )\n .option(\n '--components-usage [mode]',\n 'Show components table/chart (table, chart)',\n 'table',\n )\n .option(\n '--patterns [mode]',\n 'Show patterns table/chart (table, chart)',\n 'table',\n )\n .action(async (pattern: string, options: ScanOptions) => {\n const normalizedOptions = normalizeOptions(options);\n\n await executeScan(pattern, normalizedOptions);\n });\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 details: options.details || false,\n topComponents: (options.topComponents as any) || 'log',\n componentsUsage: (options.componentsUsage as any) || 'table',\n patterns: (options.patterns as any) || 'table',\n output: options.output,\n };\n}\n\nasync function executeScan(pattern: string, options: NormalizedScanOptions) {\n const startTime = Date.now();\n const spinner = ora('Finding files...').start();\n\n try {\n // Find files matching pattern\n const files = await glob(pattern, {\n ignore: ['node_modules/**', 'dist/**', 'build/**', '.git/**'],\n absolute: true,\n });\n\n if (files.length === 0) {\n spinner.fail(chalk.red(`No files found matching pattern: ${pattern}`));\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 try {\n const report = parseFile(file);\n if (report) {\n reports.push(report);\n\n // Print verbose output immediately after parsing each file\n if (options.verbose) {\n spinner.stop();\n printVerbose(file, report);\n spinner.start();\n }\n }\n } catch (error: any) {\n spinner.stop();\n console.error(chalk.red(`Error analyzing ${file}: ${error.message}`));\n spinner.start();\n }\n }\n\n spinner.succeed(\n chalk.green(`Analysis complete! Analyzed ${reports.length} files`),\n );\n\n // Calculate elapsed time\n const elapsedTime = (Date.now() - startTime) / 1000;\n\n // Aggregate reports\n const aggregated = aggregateReports(reports);\n\n // Print outputs based on options\n console.log(''); // Empty line before output sections\n\n if (options.summary) {\n printSummary(aggregated, elapsedTime);\n }\n\n if (options.details) {\n console.log(''); // Empty line between sections\n printDetails(aggregated);\n }\n\n if (options.topComponents) {\n console.log(''); // Empty line between sections\n printTopComponents(aggregated, options.topComponents);\n }\n\n if (options.componentsUsage) {\n console.log(''); // Empty line between sections\n printComponentsUsage(aggregated, options.componentsUsage);\n }\n\n if (options.patterns) {\n console.log(''); // Empty line between sections\n printPatterns(aggregated, options.patterns);\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.0.0-beta.1\",\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 \"react-usage-analyzer\": \"./dist/cli.js\",\n \"rua\": \"./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 \"dev:scan\": \"pnpm run build && node dist/cli.js scan \\\"code-examples/**/*.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\": \"^4.1.2\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^14.0.2\",\n \"glob\": \"^13.0.0\",\n \"js-yaml\": \"^4.1.1\",\n \"ora\": \"^5.4.1\",\n \"simple-git\": \"^3.30.0\",\n \"tmp\": \"^0.2.5\"\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.30.0\",\n \"semantic-release\": \"^25.0.2\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.3.3\",\n \"vitest\": \"^4.0.14\"\n },\n \"engines\": {\n \"node\": \">=24.11.1\"\n },\n \"author\": \"Gallevy\",\n \"license\": \"MIT\"\n}\n","#!/usr/bin/env node\n\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"]}
|