@theglitchking/hit-em-with-the-docs 2.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/.claude-plugin/marketplace.json +46 -0
- package/.claude-plugin/plugin.json +114 -0
- package/LICENSE +21 -0
- package/MIGRATION.md +255 -0
- package/README.backup.md +714 -0
- package/README.md +869 -0
- package/action.yml +56 -0
- package/dist/action/action/index.d.ts +2 -0
- package/dist/action/action/index.d.ts.map +1 -0
- package/dist/action/cli/index.d.ts +3 -0
- package/dist/action/cli/index.d.ts.map +1 -0
- package/dist/action/core/audit/auditor.d.ts +43 -0
- package/dist/action/core/audit/auditor.d.ts.map +1 -0
- package/dist/action/core/audit/rules.d.ts +37 -0
- package/dist/action/core/audit/rules.d.ts.map +1 -0
- package/dist/action/core/discover/antipatterns.d.ts +24 -0
- package/dist/action/core/discover/antipatterns.d.ts.map +1 -0
- package/dist/action/core/discover/dependencies.d.ts +57 -0
- package/dist/action/core/discover/dependencies.d.ts.map +1 -0
- package/dist/action/core/discover/patterns.d.ts +38 -0
- package/dist/action/core/discover/patterns.d.ts.map +1 -0
- package/dist/action/core/discover/standards.d.ts +58 -0
- package/dist/action/core/discover/standards.d.ts.map +1 -0
- package/dist/action/core/domains/classifier.d.ts +41 -0
- package/dist/action/core/domains/classifier.d.ts.map +1 -0
- package/dist/action/core/domains/constants.d.ts +40 -0
- package/dist/action/core/domains/constants.d.ts.map +1 -0
- package/dist/action/core/domains/detector.d.ts +35 -0
- package/dist/action/core/domains/detector.d.ts.map +1 -0
- package/dist/action/core/integrate/integrator.d.ts +35 -0
- package/dist/action/core/integrate/integrator.d.ts.map +1 -0
- package/dist/action/core/links/checker.d.ts +64 -0
- package/dist/action/core/links/checker.d.ts.map +1 -0
- package/dist/action/core/links/tracker.d.ts +69 -0
- package/dist/action/core/links/tracker.d.ts.map +1 -0
- package/dist/action/core/maintain/orchestrator.d.ts +39 -0
- package/dist/action/core/maintain/orchestrator.d.ts.map +1 -0
- package/dist/action/core/metadata/generator.d.ts +26 -0
- package/dist/action/core/metadata/generator.d.ts.map +1 -0
- package/dist/action/core/metadata/schema.d.ts +201 -0
- package/dist/action/core/metadata/schema.d.ts.map +1 -0
- package/dist/action/core/metadata/sync.d.ts +36 -0
- package/dist/action/core/metadata/sync.d.ts.map +1 -0
- package/dist/action/generators/index-generator.d.ts +19 -0
- package/dist/action/generators/index-generator.d.ts.map +1 -0
- package/dist/action/generators/registry-generator.d.ts +11 -0
- package/dist/action/generators/registry-generator.d.ts.map +1 -0
- package/dist/action/generators/scaffold.d.ts +30 -0
- package/dist/action/generators/scaffold.d.ts.map +1 -0
- package/dist/action/generators/templates/document.d.ts +14 -0
- package/dist/action/generators/templates/document.d.ts.map +1 -0
- package/dist/action/generators/templates/domain-index.d.ts +6 -0
- package/dist/action/generators/templates/domain-index.d.ts.map +1 -0
- package/dist/action/generators/templates/domain-registry.d.ts +6 -0
- package/dist/action/generators/templates/domain-registry.d.ts.map +1 -0
- package/dist/action/index.d.ts +31 -0
- package/dist/action/index.d.ts.map +1 -0
- package/dist/action/index.js +17 -0
- package/dist/action/index.js.map +1 -0
- package/dist/action/package.json +3 -0
- package/dist/action/reports/audit-report.d.ts +15 -0
- package/dist/action/reports/audit-report.d.ts.map +1 -0
- package/dist/action/reports/health-report.d.ts +15 -0
- package/dist/action/reports/health-report.d.ts.map +1 -0
- package/dist/action/reports/link-report.d.ts +15 -0
- package/dist/action/reports/link-report.d.ts.map +1 -0
- package/dist/action/utils/frontmatter.d.ts +50 -0
- package/dist/action/utils/frontmatter.d.ts.map +1 -0
- package/dist/action/utils/glob.d.ts +63 -0
- package/dist/action/utils/glob.d.ts.map +1 -0
- package/dist/action/utils/logger.d.ts +42 -0
- package/dist/action/utils/logger.d.ts.map +1 -0
- package/dist/action/utils/markdown.d.ts +89 -0
- package/dist/action/utils/markdown.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +287 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/audit/auditor.d.ts +43 -0
- package/dist/core/audit/auditor.d.ts.map +1 -0
- package/dist/core/audit/auditor.js +273 -0
- package/dist/core/audit/auditor.js.map +1 -0
- package/dist/core/audit/rules.d.ts +37 -0
- package/dist/core/audit/rules.d.ts.map +1 -0
- package/dist/core/audit/rules.js +223 -0
- package/dist/core/audit/rules.js.map +1 -0
- package/dist/core/discover/antipatterns.d.ts +24 -0
- package/dist/core/discover/antipatterns.d.ts.map +1 -0
- package/dist/core/discover/antipatterns.js +354 -0
- package/dist/core/discover/antipatterns.js.map +1 -0
- package/dist/core/discover/dependencies.d.ts +57 -0
- package/dist/core/discover/dependencies.d.ts.map +1 -0
- package/dist/core/discover/dependencies.js +311 -0
- package/dist/core/discover/dependencies.js.map +1 -0
- package/dist/core/discover/patterns.d.ts +38 -0
- package/dist/core/discover/patterns.d.ts.map +1 -0
- package/dist/core/discover/patterns.js +371 -0
- package/dist/core/discover/patterns.js.map +1 -0
- package/dist/core/discover/standards.d.ts +58 -0
- package/dist/core/discover/standards.d.ts.map +1 -0
- package/dist/core/discover/standards.js +359 -0
- package/dist/core/discover/standards.js.map +1 -0
- package/dist/core/domains/classifier.d.ts +41 -0
- package/dist/core/domains/classifier.d.ts.map +1 -0
- package/dist/core/domains/classifier.js +208 -0
- package/dist/core/domains/classifier.js.map +1 -0
- package/dist/core/domains/constants.d.ts +40 -0
- package/dist/core/domains/constants.d.ts.map +1 -0
- package/dist/core/domains/constants.js +252 -0
- package/dist/core/domains/constants.js.map +1 -0
- package/dist/core/domains/detector.d.ts +35 -0
- package/dist/core/domains/detector.d.ts.map +1 -0
- package/dist/core/domains/detector.js +176 -0
- package/dist/core/domains/detector.js.map +1 -0
- package/dist/core/integrate/integrator.d.ts +35 -0
- package/dist/core/integrate/integrator.d.ts.map +1 -0
- package/dist/core/integrate/integrator.js +216 -0
- package/dist/core/integrate/integrator.js.map +1 -0
- package/dist/core/links/checker.d.ts +64 -0
- package/dist/core/links/checker.d.ts.map +1 -0
- package/dist/core/links/checker.js +190 -0
- package/dist/core/links/checker.js.map +1 -0
- package/dist/core/links/tracker.d.ts +69 -0
- package/dist/core/links/tracker.d.ts.map +1 -0
- package/dist/core/links/tracker.js +184 -0
- package/dist/core/links/tracker.js.map +1 -0
- package/dist/core/maintain/orchestrator.d.ts +39 -0
- package/dist/core/maintain/orchestrator.d.ts.map +1 -0
- package/dist/core/maintain/orchestrator.js +372 -0
- package/dist/core/maintain/orchestrator.js.map +1 -0
- package/dist/core/metadata/generator.d.ts +26 -0
- package/dist/core/metadata/generator.d.ts.map +1 -0
- package/dist/core/metadata/generator.js +221 -0
- package/dist/core/metadata/generator.js.map +1 -0
- package/dist/core/metadata/schema.d.ts +201 -0
- package/dist/core/metadata/schema.d.ts.map +1 -0
- package/dist/core/metadata/schema.js +184 -0
- package/dist/core/metadata/schema.js.map +1 -0
- package/dist/core/metadata/sync.d.ts +36 -0
- package/dist/core/metadata/sync.d.ts.map +1 -0
- package/dist/core/metadata/sync.js +195 -0
- package/dist/core/metadata/sync.js.map +1 -0
- package/dist/generators/index-generator.d.ts +19 -0
- package/dist/generators/index-generator.d.ts.map +1 -0
- package/dist/generators/index-generator.js +191 -0
- package/dist/generators/index-generator.js.map +1 -0
- package/dist/generators/registry-generator.d.ts +11 -0
- package/dist/generators/registry-generator.d.ts.map +1 -0
- package/dist/generators/registry-generator.js +156 -0
- package/dist/generators/registry-generator.js.map +1 -0
- package/dist/generators/scaffold.d.ts +30 -0
- package/dist/generators/scaffold.d.ts.map +1 -0
- package/dist/generators/scaffold.js +213 -0
- package/dist/generators/scaffold.js.map +1 -0
- package/dist/generators/templates/document.d.ts +14 -0
- package/dist/generators/templates/document.d.ts.map +1 -0
- package/dist/generators/templates/document.js +305 -0
- package/dist/generators/templates/document.js.map +1 -0
- package/dist/generators/templates/domain-index.d.ts +6 -0
- package/dist/generators/templates/domain-index.d.ts.map +1 -0
- package/dist/generators/templates/domain-index.js +68 -0
- package/dist/generators/templates/domain-index.js.map +1 -0
- package/dist/generators/templates/domain-registry.d.ts +6 -0
- package/dist/generators/templates/domain-registry.d.ts.map +1 -0
- package/dist/generators/templates/domain-registry.js +59 -0
- package/dist/generators/templates/domain-registry.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/reports/audit-report.d.ts +15 -0
- package/dist/reports/audit-report.d.ts.map +1 -0
- package/dist/reports/audit-report.js +150 -0
- package/dist/reports/audit-report.js.map +1 -0
- package/dist/reports/health-report.d.ts +15 -0
- package/dist/reports/health-report.d.ts.map +1 -0
- package/dist/reports/health-report.js +175 -0
- package/dist/reports/health-report.js.map +1 -0
- package/dist/reports/link-report.d.ts +15 -0
- package/dist/reports/link-report.d.ts.map +1 -0
- package/dist/reports/link-report.js +165 -0
- package/dist/reports/link-report.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +50 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +93 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/glob.d.ts +63 -0
- package/dist/utils/glob.d.ts.map +1 -0
- package/dist/utils/glob.js +128 -0
- package/dist/utils/glob.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +118 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown.d.ts +89 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/markdown.js +192 -0
- package/dist/utils/markdown.js.map +1 -0
- package/package.json +100 -0
- package/templates/claude/CLAUDE.md +204 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { join, relative } from 'path';
|
|
3
|
+
import { glob, pathExists } from '../../utils/glob.js';
|
|
4
|
+
import { logger } from '../../utils/logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* Analyze project dependencies
|
|
7
|
+
*/
|
|
8
|
+
export async function analyzeDependencies(options) {
|
|
9
|
+
const { rootPath, silent = false } = options;
|
|
10
|
+
if (!silent) {
|
|
11
|
+
logger.header('Dependency Analysis');
|
|
12
|
+
logger.info(`Analyzing: ${rootPath}`);
|
|
13
|
+
}
|
|
14
|
+
// Analyze package.json dependencies
|
|
15
|
+
const packages = await analyzePackages(rootPath);
|
|
16
|
+
if (!silent) {
|
|
17
|
+
logger.info(`Found ${packages.total} packages (${packages.production} prod, ${packages.development} dev)`);
|
|
18
|
+
}
|
|
19
|
+
// Analyze module imports
|
|
20
|
+
const modules = await analyzeModules(rootPath);
|
|
21
|
+
if (!silent) {
|
|
22
|
+
logger.info(`Analyzed ${modules.totalFiles} files, ${modules.imports} imports`);
|
|
23
|
+
if (modules.circularDependencies.length > 0) {
|
|
24
|
+
logger.warn(`Found ${modules.circularDependencies.length} circular dependencies`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Check for security issues (basic check)
|
|
28
|
+
const security = await analyzeSecurityBasic(packages);
|
|
29
|
+
// Find unused dependencies
|
|
30
|
+
const unused = await findUnusedDependencies(rootPath, packages);
|
|
31
|
+
if (!silent && unused.length > 0) {
|
|
32
|
+
logger.warn(`Found ${unused.length} potentially unused dependencies`);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
packages,
|
|
36
|
+
modules,
|
|
37
|
+
security,
|
|
38
|
+
unused,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Analyze package.json
|
|
43
|
+
*/
|
|
44
|
+
async function analyzePackages(rootPath) {
|
|
45
|
+
const result = {
|
|
46
|
+
total: 0,
|
|
47
|
+
production: 0,
|
|
48
|
+
development: 0,
|
|
49
|
+
dependencies: [],
|
|
50
|
+
devDependencies: [],
|
|
51
|
+
};
|
|
52
|
+
const packageJsonPath = join(rootPath, 'package.json');
|
|
53
|
+
if (!(await pathExists(packageJsonPath))) {
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const content = await readFile(packageJsonPath, 'utf-8');
|
|
58
|
+
const pkg = JSON.parse(content);
|
|
59
|
+
// Production dependencies
|
|
60
|
+
if (pkg.dependencies) {
|
|
61
|
+
for (const [name, version] of Object.entries(pkg.dependencies)) {
|
|
62
|
+
result.dependencies.push({
|
|
63
|
+
name,
|
|
64
|
+
version: String(version),
|
|
65
|
+
type: 'production',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
result.production = result.dependencies.length;
|
|
69
|
+
}
|
|
70
|
+
// Dev dependencies
|
|
71
|
+
if (pkg.devDependencies) {
|
|
72
|
+
for (const [name, version] of Object.entries(pkg.devDependencies)) {
|
|
73
|
+
result.devDependencies.push({
|
|
74
|
+
name,
|
|
75
|
+
version: String(version),
|
|
76
|
+
type: 'development',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
result.development = result.devDependencies.length;
|
|
80
|
+
}
|
|
81
|
+
result.total = result.production + result.development;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Invalid package.json
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Analyze module imports and dependencies
|
|
90
|
+
*/
|
|
91
|
+
async function analyzeModules(rootPath) {
|
|
92
|
+
const result = {
|
|
93
|
+
totalFiles: 0,
|
|
94
|
+
imports: 0,
|
|
95
|
+
circularDependencies: [],
|
|
96
|
+
highCoupling: [],
|
|
97
|
+
};
|
|
98
|
+
// Find all source files
|
|
99
|
+
const files = await glob('**/*.{ts,tsx,js,jsx}', {
|
|
100
|
+
cwd: rootPath,
|
|
101
|
+
absolute: true,
|
|
102
|
+
ignore: ['**/node_modules/**', '**/dist/**', '**/build/**'],
|
|
103
|
+
});
|
|
104
|
+
result.totalFiles = files.length;
|
|
105
|
+
// Build import graph
|
|
106
|
+
const importGraph = new Map();
|
|
107
|
+
const importedBy = new Map();
|
|
108
|
+
for (const file of files) {
|
|
109
|
+
try {
|
|
110
|
+
const content = await readFile(file, 'utf-8');
|
|
111
|
+
const relPath = relative(rootPath, file);
|
|
112
|
+
// Extract imports
|
|
113
|
+
const importMatches = content.matchAll(/import\s+.*?from\s+['"]([^'"]+)['"]/g);
|
|
114
|
+
const imports = new Set();
|
|
115
|
+
for (const match of importMatches) {
|
|
116
|
+
const importPath = match[1];
|
|
117
|
+
if (importPath?.startsWith('.')) {
|
|
118
|
+
// Resolve relative import
|
|
119
|
+
const resolved = resolveImport(relPath, importPath);
|
|
120
|
+
imports.add(resolved);
|
|
121
|
+
result.imports++;
|
|
122
|
+
// Track imported by
|
|
123
|
+
if (!importedBy.has(resolved)) {
|
|
124
|
+
importedBy.set(resolved, new Set());
|
|
125
|
+
}
|
|
126
|
+
importedBy.get(resolved).add(relPath);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
importGraph.set(relPath, imports);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Skip unreadable files
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Detect circular dependencies
|
|
136
|
+
result.circularDependencies = detectCircularDependencies(importGraph);
|
|
137
|
+
// Find high coupling modules
|
|
138
|
+
for (const [file, imports] of importGraph) {
|
|
139
|
+
const importCount = imports.size;
|
|
140
|
+
const importedByCount = importedBy.get(file)?.size ?? 0;
|
|
141
|
+
if (importCount > 10 || importedByCount > 10) {
|
|
142
|
+
result.highCoupling.push({
|
|
143
|
+
file,
|
|
144
|
+
imports: importCount,
|
|
145
|
+
importedBy: importedByCount,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Sort by total coupling
|
|
150
|
+
result.highCoupling.sort((a, b) => (b.imports + b.importedBy) - (a.imports + a.importedBy));
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Resolve relative import path
|
|
155
|
+
*/
|
|
156
|
+
function resolveImport(fromFile, importPath) {
|
|
157
|
+
const fromDir = fromFile.split('/').slice(0, -1).join('/');
|
|
158
|
+
const parts = importPath.split('/');
|
|
159
|
+
const result = fromDir ? fromDir.split('/') : [];
|
|
160
|
+
for (const part of parts) {
|
|
161
|
+
if (part === '.')
|
|
162
|
+
continue;
|
|
163
|
+
if (part === '..') {
|
|
164
|
+
result.pop();
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
result.push(part);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
let resolved = result.join('/');
|
|
171
|
+
// Add extension if not present
|
|
172
|
+
if (!resolved.match(/\.[jt]sx?$/)) {
|
|
173
|
+
resolved += '.ts';
|
|
174
|
+
}
|
|
175
|
+
return resolved;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Detect circular dependencies using DFS
|
|
179
|
+
*/
|
|
180
|
+
function detectCircularDependencies(graph) {
|
|
181
|
+
const cycles = [];
|
|
182
|
+
const visited = new Set();
|
|
183
|
+
const recursionStack = new Set();
|
|
184
|
+
function dfs(node, path) {
|
|
185
|
+
if (recursionStack.has(node)) {
|
|
186
|
+
// Found a cycle
|
|
187
|
+
const cycleStart = path.indexOf(node);
|
|
188
|
+
if (cycleStart !== -1) {
|
|
189
|
+
cycles.push({ files: path.slice(cycleStart) });
|
|
190
|
+
}
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
if (visited.has(node)) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
visited.add(node);
|
|
197
|
+
recursionStack.add(node);
|
|
198
|
+
path.push(node);
|
|
199
|
+
const imports = graph.get(node) ?? new Set();
|
|
200
|
+
for (const imported of imports) {
|
|
201
|
+
dfs(imported, [...path]);
|
|
202
|
+
}
|
|
203
|
+
recursionStack.delete(node);
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
for (const node of graph.keys()) {
|
|
207
|
+
if (!visited.has(node)) {
|
|
208
|
+
dfs(node, []);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Deduplicate cycles (same cycle can be detected from different starting points)
|
|
212
|
+
const uniqueCycles = [];
|
|
213
|
+
const seen = new Set();
|
|
214
|
+
for (const cycle of cycles) {
|
|
215
|
+
const key = [...cycle.files].sort().join('->');
|
|
216
|
+
if (!seen.has(key)) {
|
|
217
|
+
seen.add(key);
|
|
218
|
+
uniqueCycles.push(cycle);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return uniqueCycles.slice(0, 10); // Limit to first 10
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Basic security check (pattern-based)
|
|
225
|
+
*/
|
|
226
|
+
async function analyzeSecurityBasic(packages) {
|
|
227
|
+
const vulnerabilities = [];
|
|
228
|
+
// Known vulnerable packages (simplified - real implementation would use a vulnerability database)
|
|
229
|
+
const knownVulnerable = {
|
|
230
|
+
'lodash': {
|
|
231
|
+
severity: 'high',
|
|
232
|
+
title: 'Prototype Pollution in lodash < 4.17.21',
|
|
233
|
+
fix: 'Upgrade to lodash@4.17.21 or higher',
|
|
234
|
+
},
|
|
235
|
+
'minimist': {
|
|
236
|
+
severity: 'moderate',
|
|
237
|
+
title: 'Prototype Pollution in minimist < 1.2.6',
|
|
238
|
+
fix: 'Upgrade to minimist@1.2.6 or higher',
|
|
239
|
+
},
|
|
240
|
+
'node-fetch': {
|
|
241
|
+
severity: 'moderate',
|
|
242
|
+
title: 'Exposure of Sensitive Information in node-fetch < 2.6.7',
|
|
243
|
+
fix: 'Upgrade to node-fetch@2.6.7 or higher',
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
const allPackages = [...packages.dependencies, ...packages.devDependencies];
|
|
247
|
+
for (const pkg of allPackages) {
|
|
248
|
+
const vuln = knownVulnerable[pkg.name];
|
|
249
|
+
if (vuln) {
|
|
250
|
+
// Check version (simplified - real implementation would do proper semver comparison)
|
|
251
|
+
vulnerabilities.push({
|
|
252
|
+
package: pkg.name,
|
|
253
|
+
severity: vuln.severity,
|
|
254
|
+
title: vuln.title,
|
|
255
|
+
recommendation: vuln.fix,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return { vulnerabilities };
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Find potentially unused dependencies
|
|
263
|
+
*/
|
|
264
|
+
async function findUnusedDependencies(rootPath, packages) {
|
|
265
|
+
const unused = [];
|
|
266
|
+
// Get all source files
|
|
267
|
+
const files = await glob('**/*.{ts,tsx,js,jsx,json}', {
|
|
268
|
+
cwd: rootPath,
|
|
269
|
+
absolute: true,
|
|
270
|
+
ignore: ['**/node_modules/**', '**/dist/**'],
|
|
271
|
+
});
|
|
272
|
+
// Read all file contents
|
|
273
|
+
let allContent = '';
|
|
274
|
+
for (const file of files) {
|
|
275
|
+
try {
|
|
276
|
+
const content = await readFile(file, 'utf-8');
|
|
277
|
+
allContent += content + '\n';
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
// Skip
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Check each dependency
|
|
284
|
+
const allPackages = [...packages.dependencies, ...packages.devDependencies];
|
|
285
|
+
for (const pkg of allPackages) {
|
|
286
|
+
const name = pkg.name;
|
|
287
|
+
// Skip common false positives
|
|
288
|
+
if (['typescript', '@types/', 'eslint', 'prettier', 'vitest', 'jest'].some((p) => name.includes(p))) {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// Check if package is imported
|
|
292
|
+
const importPatterns = [
|
|
293
|
+
`from '${name}'`,
|
|
294
|
+
`from "${name}"`,
|
|
295
|
+
`require('${name}')`,
|
|
296
|
+
`require("${name}")`,
|
|
297
|
+
`from '${name}/`,
|
|
298
|
+
`from "${name}/`,
|
|
299
|
+
];
|
|
300
|
+
const isUsed = importPatterns.some((p) => allContent.includes(p));
|
|
301
|
+
if (!isUsed) {
|
|
302
|
+
unused.push({
|
|
303
|
+
name,
|
|
304
|
+
type: pkg.type,
|
|
305
|
+
reason: 'No import found in source files',
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return unused;
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/core/discover/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface PatternDiscoveryOptions {
|
|
2
|
+
rootPath: string;
|
|
3
|
+
language?: string;
|
|
4
|
+
category?: string;
|
|
5
|
+
silent?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface DiscoveredPattern {
|
|
8
|
+
name: string;
|
|
9
|
+
category: PatternCategory;
|
|
10
|
+
description: string;
|
|
11
|
+
occurrences: number;
|
|
12
|
+
examples: PatternExample[];
|
|
13
|
+
suggestedDocumentation?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface PatternExample {
|
|
16
|
+
file: string;
|
|
17
|
+
line: number;
|
|
18
|
+
code: string;
|
|
19
|
+
context?: string;
|
|
20
|
+
}
|
|
21
|
+
export type PatternCategory = 'architecture' | 'data-access' | 'error-handling' | 'security' | 'testing' | 'api' | 'state-management' | 'utility';
|
|
22
|
+
export interface PatternDefinition {
|
|
23
|
+
name: string;
|
|
24
|
+
category: PatternCategory;
|
|
25
|
+
description: string;
|
|
26
|
+
patterns: RegExp[];
|
|
27
|
+
filePatterns?: string[];
|
|
28
|
+
languages?: string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Discover patterns in codebase
|
|
32
|
+
*/
|
|
33
|
+
export declare function discoverPatterns(options: PatternDiscoveryOptions): Promise<DiscoveredPattern[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Generate documentation suggestion for a pattern
|
|
36
|
+
*/
|
|
37
|
+
export declare function generatePatternDocumentation(pattern: DiscoveredPattern): string;
|
|
38
|
+
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/core/discover/patterns.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,UAAU,GACV,SAAS,GACT,KAAK,GACL,kBAAkB,GAClB,SAAS,CAAC;AAEd,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAsND;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAoE9B;AA0FD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAkC/E"}
|