Last active
February 19, 2024 13:52
-
-
Save Gbacc/397f6a08ca4599f2827690d3e3dde979 to your computer and use it in GitHub Desktop.
List react components imports
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const path = require('path'); | |
const stats = {}; | |
const numberOfImports = {}; | |
function extractComponentNames(importStatement) { | |
const match = importStatement.match( | |
/import\s+(?:(\w*),?\s?{?(\s?[^\}]*\s?)}?)\s+from\s+['"](@talend\/.[^\/]*)\/*.*['"]/, | |
); | |
if (match) { | |
const packageName = match[3]; | |
const defaultImport = match[1]; | |
const namedImports = match[2] ? match[2].split(',').map(component => component.trim()) : []; | |
return { defaultImport, namedImports, packageName }; | |
} | |
return null; | |
} | |
function countImports(filePath) { | |
const content = fs.readFileSync(filePath, 'utf8'); | |
const importStatements = | |
content.match(/import\s+(?:\w+|{.*})\s+from\s+['"]@talend\/.*['"]/g) || []; | |
return importStatements | |
.map(importStatement => extractComponentNames(importStatement)) | |
.filter(Boolean); | |
} | |
function traverseDirectory(dirPath) { | |
const files = fs.readdirSync(dirPath); | |
files.forEach(file => { | |
const filePath = path.join(dirPath, file); | |
const stat = fs.statSync(filePath); | |
if (stat.isDirectory()) { | |
traverseDirectory(filePath); | |
} else if (filePath.endsWith('.js')) { | |
const imports = countImports(filePath); | |
if (imports.length > 0) { | |
imports.forEach(({ defaultImport, namedImports, packageName }) => { | |
if (!numberOfImports[packageName]) { | |
numberOfImports[packageName] = 1; | |
} else { | |
numberOfImports[packageName]++; | |
} | |
if (defaultImport) { | |
if (!stats[packageName]) { | |
stats[packageName] = {}; | |
} | |
if (!stats[packageName][defaultImport]) { | |
stats[packageName][defaultImport] = 1; | |
} else { | |
stats[packageName][defaultImport]++; | |
} | |
} | |
namedImports.forEach(componentName => { | |
if (!stats[packageName]) { | |
stats[packageName] = {}; | |
} | |
if (!stats[packageName][componentName]) { | |
stats[packageName][componentName] = 1; | |
} else { | |
stats[packageName][componentName]++; | |
} | |
}); | |
}); | |
} | |
} | |
}); | |
} | |
traverseDirectory('./frontend/src/'); | |
traverseDirectory('./packages/'); | |
traverseDirectory('./tools/'); | |
console.log(stats['@talend/react-components'], stats['@talend/react-containers'], numberOfImports); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment