Skip to content

Instantly share code, notes, and snippets.

@Gbacc
Last active February 19, 2024 13:52
Show Gist options
  • Save Gbacc/397f6a08ca4599f2827690d3e3dde979 to your computer and use it in GitHub Desktop.
Save Gbacc/397f6a08ca4599f2827690d3e3dde979 to your computer and use it in GitHub Desktop.
List react components imports
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