@mathonsunday/dead-code-toolkit 0.1.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 +356 -0
- package/dist/analyzer.d.ts +23 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +173 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/checkers/knipChecker.d.ts +11 -0
- package/dist/checkers/knipChecker.d.ts.map +1 -0
- package/dist/checkers/knipChecker.js +226 -0
- package/dist/checkers/knipChecker.js.map +1 -0
- package/dist/checkers/typescriptChecker.d.ts +10 -0
- package/dist/checkers/typescriptChecker.d.ts.map +1 -0
- package/dist/checkers/typescriptChecker.js +174 -0
- package/dist/checkers/typescriptChecker.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +204 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/detectors.d.ts +29 -0
- package/dist/config/detectors.d.ts.map +1 -0
- package/dist/config/detectors.js +159 -0
- package/dist/config/detectors.js.map +1 -0
- package/dist/config/templates.d.ts +76 -0
- package/dist/config/templates.d.ts.map +1 -0
- package/dist/config/templates.js +191 -0
- package/dist/config/templates.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/reporters/jsonReporter.d.ts +68 -0
- package/dist/reporters/jsonReporter.d.ts.map +1 -0
- package/dist/reporters/jsonReporter.js +161 -0
- package/dist/reporters/jsonReporter.js.map +1 -0
- package/dist/setup/hookInstaller.d.ts +36 -0
- package/dist/setup/hookInstaller.d.ts.map +1 -0
- package/dist/setup/hookInstaller.js +196 -0
- package/dist/setup/hookInstaller.js.map +1 -0
- package/dist/setup/installer.d.ts +10 -0
- package/dist/setup/installer.d.ts.map +1 -0
- package/dist/setup/installer.js +156 -0
- package/dist/setup/installer.js.map +1 -0
- package/dist/setup/packageJsonUpdater.d.ts +54 -0
- package/dist/setup/packageJsonUpdater.d.ts.map +1 -0
- package/dist/setup/packageJsonUpdater.js +129 -0
- package/dist/setup/packageJsonUpdater.js.map +1 -0
- package/dist/src/analyzer.d.ts +23 -0
- package/dist/src/analyzer.d.ts.map +1 -0
- package/dist/src/analyzer.js +173 -0
- package/dist/src/analyzer.js.map +1 -0
- package/dist/src/checkers/knipChecker.d.ts +11 -0
- package/dist/src/checkers/knipChecker.d.ts.map +1 -0
- package/dist/src/checkers/knipChecker.js +226 -0
- package/dist/src/checkers/knipChecker.js.map +1 -0
- package/dist/src/checkers/typescriptChecker.d.ts +10 -0
- package/dist/src/checkers/typescriptChecker.d.ts.map +1 -0
- package/dist/src/checkers/typescriptChecker.js +174 -0
- package/dist/src/checkers/typescriptChecker.js.map +1 -0
- package/dist/src/config/detectors.d.ts +29 -0
- package/dist/src/config/detectors.d.ts.map +1 -0
- package/dist/src/config/detectors.js +159 -0
- package/dist/src/config/detectors.js.map +1 -0
- package/dist/src/config/templates.d.ts +76 -0
- package/dist/src/config/templates.d.ts.map +1 -0
- package/dist/src/config/templates.js +191 -0
- package/dist/src/config/templates.js.map +1 -0
- package/dist/src/index.d.ts +13 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +17 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/reporters/jsonReporter.d.ts +68 -0
- package/dist/src/reporters/jsonReporter.d.ts.map +1 -0
- package/dist/src/reporters/jsonReporter.js +161 -0
- package/dist/src/reporters/jsonReporter.js.map +1 -0
- package/dist/src/setup/hookInstaller.d.ts +36 -0
- package/dist/src/setup/hookInstaller.d.ts.map +1 -0
- package/dist/src/setup/hookInstaller.js +196 -0
- package/dist/src/setup/hookInstaller.js.map +1 -0
- package/dist/src/setup/installer.d.ts +10 -0
- package/dist/src/setup/installer.d.ts.map +1 -0
- package/dist/src/setup/installer.js +156 -0
- package/dist/src/setup/installer.js.map +1 -0
- package/dist/src/setup/packageJsonUpdater.d.ts +54 -0
- package/dist/src/setup/packageJsonUpdater.d.ts.map +1 -0
- package/dist/src/setup/packageJsonUpdater.js +129 -0
- package/dist/src/setup/packageJsonUpdater.js.map +1 -0
- package/dist/src/types.d.ts +177 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +5 -0
- package/dist/src/types.js.map +1 -0
- package/dist/types.d.ts +177 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main setup orchestrator
|
|
3
|
+
* Coordinates all setup tasks (configs, dependencies, hooks)
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, writeFileSync } from 'fs';
|
|
6
|
+
import { resolve } from 'path';
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { detectProjectConfig } from '../config/detectors.js';
|
|
9
|
+
import { generateKnipConfigJSON, generateTypeCoverageConfigJSON, generateLintStagedConfigJSON, } from '../config/templates.js';
|
|
10
|
+
import { updatePackageJson, formatDependenciesForInstall } from './packageJsonUpdater.js';
|
|
11
|
+
import { setupAllHooks } from './hookInstaller.js';
|
|
12
|
+
/**
|
|
13
|
+
* Main setup function
|
|
14
|
+
*/
|
|
15
|
+
export async function setupProject(options) {
|
|
16
|
+
const result = {
|
|
17
|
+
status: 'success',
|
|
18
|
+
filesCreated: [],
|
|
19
|
+
scriptsAdded: [],
|
|
20
|
+
dependenciesInstalled: [],
|
|
21
|
+
nextSteps: [],
|
|
22
|
+
errors: [],
|
|
23
|
+
};
|
|
24
|
+
try {
|
|
25
|
+
// Validate project root
|
|
26
|
+
if (!existsSync(options.projectRoot)) {
|
|
27
|
+
throw new Error(`Project root does not exist: ${options.projectRoot}`);
|
|
28
|
+
}
|
|
29
|
+
if (options.verbose) {
|
|
30
|
+
console.log(`[Setup] Starting setup in: ${options.projectRoot}`);
|
|
31
|
+
}
|
|
32
|
+
// Detect project configuration
|
|
33
|
+
const projectConfig = detectProjectConfig(options.projectRoot);
|
|
34
|
+
if (options.verbose) {
|
|
35
|
+
console.log(`[Setup] Detected project type: ${projectConfig.type}`);
|
|
36
|
+
}
|
|
37
|
+
// Step 1: Create configuration files
|
|
38
|
+
const configFiles = await createConfigFiles(options.projectRoot, projectConfig);
|
|
39
|
+
result.filesCreated.push(...configFiles);
|
|
40
|
+
// Step 2: Update package.json
|
|
41
|
+
const packageJsonUpdate = updatePackageJson(options.projectRoot, {
|
|
42
|
+
addScripts: true,
|
|
43
|
+
installDependencies: options.installDependencies !== false,
|
|
44
|
+
});
|
|
45
|
+
result.scriptsAdded.push(...packageJsonUpdate.scriptsAdded);
|
|
46
|
+
if (options.verbose && packageJsonUpdate.scriptsAdded.length > 0) {
|
|
47
|
+
console.log(`[Setup] Added ${packageJsonUpdate.scriptsAdded.length} npm scripts`);
|
|
48
|
+
}
|
|
49
|
+
// Step 3: Install dependencies
|
|
50
|
+
if (options.installDependencies !== false) {
|
|
51
|
+
const depsToInstall = packageJsonUpdate.dependenciesToInstall;
|
|
52
|
+
if (Object.keys(depsToInstall).length > 0) {
|
|
53
|
+
await installDependencies(options.projectRoot, depsToInstall, options.verbose);
|
|
54
|
+
result.dependenciesInstalled.push(...Object.keys(depsToInstall));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Step 4: Setup Git hooks
|
|
58
|
+
if (options.setupHooks !== false) {
|
|
59
|
+
const hookResult = setupAllHooks(options.projectRoot);
|
|
60
|
+
if (!hookResult.success) {
|
|
61
|
+
result.errors?.push(...hookResult.errors);
|
|
62
|
+
result.status = 'partial';
|
|
63
|
+
}
|
|
64
|
+
// Mark hooks as part of setup
|
|
65
|
+
result.filesCreated.push('.husky/pre-commit', '.husky/commit-msg', 'commitlint.config.js');
|
|
66
|
+
}
|
|
67
|
+
// Generate next steps
|
|
68
|
+
result.nextSteps = generateNextSteps(projectConfig, result);
|
|
69
|
+
if (options.verbose) {
|
|
70
|
+
console.log(`[Setup] Setup complete! Status: ${result.status}`);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
76
|
+
result.status = 'failure';
|
|
77
|
+
result.errors?.push(message);
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create configuration files
|
|
83
|
+
*/
|
|
84
|
+
async function createConfigFiles(projectRoot, projectConfig) {
|
|
85
|
+
const filesCreated = [];
|
|
86
|
+
// Check for existing configs
|
|
87
|
+
if (projectConfig.existingConfigs.knip) {
|
|
88
|
+
console.log('[Setup] knip.json already exists, skipping');
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Create knip.json
|
|
92
|
+
const knipConfig = generateKnipConfigJSON(projectConfig);
|
|
93
|
+
const knipPath = resolve(projectRoot, 'knip.json');
|
|
94
|
+
writeFileSync(knipPath, knipConfig);
|
|
95
|
+
filesCreated.push('knip.json');
|
|
96
|
+
console.log('[Setup] Created knip.json');
|
|
97
|
+
}
|
|
98
|
+
// Create typecoveragerc.json (always overwrite with updated config)
|
|
99
|
+
const typeCoverageConfig = generateTypeCoverageConfigJSON(projectConfig);
|
|
100
|
+
const typeCoveragePath = resolve(projectRoot, 'typecoveragerc.json');
|
|
101
|
+
writeFileSync(typeCoveragePath, typeCoverageConfig);
|
|
102
|
+
filesCreated.push('typecoveragerc.json');
|
|
103
|
+
console.log('[Setup] Created typecoveragerc.json');
|
|
104
|
+
// Create .lintstagedrc.json (always overwrite)
|
|
105
|
+
const lintStagedConfig = generateLintStagedConfigJSON();
|
|
106
|
+
const lintStagedPath = resolve(projectRoot, '.lintstagedrc.json');
|
|
107
|
+
writeFileSync(lintStagedPath, lintStagedConfig);
|
|
108
|
+
filesCreated.push('.lintstagedrc.json');
|
|
109
|
+
console.log('[Setup] Created .lintstagedrc.json');
|
|
110
|
+
// Note: ESLint config is not auto-created as it may conflict with existing configs
|
|
111
|
+
if (!projectConfig.existingConfigs.eslint) {
|
|
112
|
+
console.log('[Setup] ⚠️ ESLint config not found. Add these rules to your eslint.config.js:');
|
|
113
|
+
console.log(' @typescript-eslint/no-redundant-type-constituents: warn');
|
|
114
|
+
console.log(' @typescript-eslint/no-unused-vars: [warn, {argsIgnorePattern: "^_"}]');
|
|
115
|
+
}
|
|
116
|
+
return filesCreated;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Install npm dependencies
|
|
120
|
+
*/
|
|
121
|
+
async function installDependencies(projectRoot, dependencies, verbose) {
|
|
122
|
+
const deps = formatDependenciesForInstall(dependencies);
|
|
123
|
+
if (verbose) {
|
|
124
|
+
console.log(`[Setup] Installing ${deps.length} dependencies...`);
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
execSync(`npm install --save-dev ${deps.join(' ')}`, {
|
|
128
|
+
cwd: projectRoot,
|
|
129
|
+
stdio: verbose ? 'inherit' : 'ignore',
|
|
130
|
+
});
|
|
131
|
+
if (verbose) {
|
|
132
|
+
console.log(`[Setup] Dependencies installed`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throw new Error(`Failed to install dependencies: ${error instanceof Error ? error.message : String(error)}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generate next steps for user
|
|
141
|
+
*/
|
|
142
|
+
function generateNextSteps(projectConfig, result) {
|
|
143
|
+
const steps = [];
|
|
144
|
+
steps.push('Run: npm run dead-code to check for dead code');
|
|
145
|
+
steps.push('Review findings and consider running: npm run dead-code:fix');
|
|
146
|
+
if (result.scriptsAdded.includes('verify')) {
|
|
147
|
+
steps.push('Use: npm run verify to run all quality checks');
|
|
148
|
+
}
|
|
149
|
+
if (!projectConfig.existingConfigs.eslint) {
|
|
150
|
+
steps.push('⚠️ Update your ESLint config to include dead code detection rules');
|
|
151
|
+
}
|
|
152
|
+
steps.push('Configure pre-commit hooks: git commit -m "message"');
|
|
153
|
+
steps.push('Read: npx dead-code-toolkit --help for more commands');
|
|
154
|
+
return steps;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/setup/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* package.json updater
|
|
3
|
+
* Safely updates package.json with new scripts and dependencies
|
|
4
|
+
*/
|
|
5
|
+
interface PackageJson {
|
|
6
|
+
name?: string;
|
|
7
|
+
version?: string;
|
|
8
|
+
scripts?: Record<string, string>;
|
|
9
|
+
dependencies?: Record<string, string>;
|
|
10
|
+
devDependencies?: Record<string, string>;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Read package.json from project
|
|
15
|
+
*/
|
|
16
|
+
export declare function readPackageJson(projectRoot: string): PackageJson;
|
|
17
|
+
/**
|
|
18
|
+
* Write package.json back to disk
|
|
19
|
+
*/
|
|
20
|
+
export declare function writePackageJson(projectRoot: string, packageJson: PackageJson): void;
|
|
21
|
+
/**
|
|
22
|
+
* Add scripts to package.json
|
|
23
|
+
* Returns list of added scripts
|
|
24
|
+
*/
|
|
25
|
+
export declare function addScripts(packageJson: PackageJson): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Get recommended dev dependencies
|
|
28
|
+
*/
|
|
29
|
+
export declare function getRecommendedDevDependencies(): Record<string, string>;
|
|
30
|
+
/**
|
|
31
|
+
* Check which dev dependencies are already installed
|
|
32
|
+
*/
|
|
33
|
+
export declare function getInstalledDevDependencies(packageJson: PackageJson): Record<string, string>;
|
|
34
|
+
/**
|
|
35
|
+
* Get missing dev dependencies that need to be installed
|
|
36
|
+
*/
|
|
37
|
+
export declare function getMissingDevDependencies(packageJson: PackageJson): Record<string, string>;
|
|
38
|
+
/**
|
|
39
|
+
* Format dependencies for npm install command
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatDependenciesForInstall(deps: Record<string, string>): string[];
|
|
42
|
+
/**
|
|
43
|
+
* Update package.json with all necessary changes
|
|
44
|
+
*/
|
|
45
|
+
export declare function updatePackageJson(projectRoot: string, options?: {
|
|
46
|
+
addScripts?: boolean;
|
|
47
|
+
installDependencies?: boolean;
|
|
48
|
+
}): {
|
|
49
|
+
scriptsAdded: string[];
|
|
50
|
+
dependenciesToInstall: Record<string, string>;
|
|
51
|
+
updated: boolean;
|
|
52
|
+
};
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=packageJsonUpdater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageJsonUpdater.d.ts","sourceRoot":"","sources":["../../../src/setup/packageJsonUpdater.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAWhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAUpF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,CAgB7D;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUtE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY5F;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY1F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAEnF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GACpE;IACD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;CAClB,CA8BA"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* package.json updater
|
|
3
|
+
* Safely updates package.json with new scripts and dependencies
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync } from 'fs';
|
|
6
|
+
import { resolve } from 'path';
|
|
7
|
+
import { generatePackageJsonScripts } from '../config/templates.js';
|
|
8
|
+
/**
|
|
9
|
+
* Read package.json from project
|
|
10
|
+
*/
|
|
11
|
+
export function readPackageJson(projectRoot) {
|
|
12
|
+
const packageJsonPath = resolve(projectRoot, 'package.json');
|
|
13
|
+
try {
|
|
14
|
+
const content = readFileSync(packageJsonPath, 'utf-8');
|
|
15
|
+
return JSON.parse(content);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
throw new Error(`Failed to read package.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Write package.json back to disk
|
|
23
|
+
*/
|
|
24
|
+
export function writePackageJson(projectRoot, packageJson) {
|
|
25
|
+
const packageJsonPath = resolve(projectRoot, 'package.json');
|
|
26
|
+
try {
|
|
27
|
+
writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
throw new Error(`Failed to write package.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Add scripts to package.json
|
|
35
|
+
* Returns list of added scripts
|
|
36
|
+
*/
|
|
37
|
+
export function addScripts(packageJson) {
|
|
38
|
+
const scriptsToAdd = generatePackageJsonScripts();
|
|
39
|
+
const addedScripts = [];
|
|
40
|
+
if (!packageJson.scripts) {
|
|
41
|
+
packageJson.scripts = {};
|
|
42
|
+
}
|
|
43
|
+
for (const [name, command] of Object.entries(scriptsToAdd)) {
|
|
44
|
+
if (!packageJson.scripts[name]) {
|
|
45
|
+
packageJson.scripts[name] = command;
|
|
46
|
+
addedScripts.push(name);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return addedScripts;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get recommended dev dependencies
|
|
53
|
+
*/
|
|
54
|
+
export function getRecommendedDevDependencies() {
|
|
55
|
+
return {
|
|
56
|
+
knip: '^5.82.1',
|
|
57
|
+
'type-coverage': '^2.29.7',
|
|
58
|
+
'typescript-coverage-report': '^1.1.1',
|
|
59
|
+
husky: '^9.1.7',
|
|
60
|
+
'lint-staged': '^16.2.7',
|
|
61
|
+
'@commitlint/cli': '^20.3.1',
|
|
62
|
+
'@commitlint/config-conventional': '^20.3.1',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check which dev dependencies are already installed
|
|
67
|
+
*/
|
|
68
|
+
export function getInstalledDevDependencies(packageJson) {
|
|
69
|
+
const devDeps = packageJson.devDependencies || {};
|
|
70
|
+
const recommended = getRecommendedDevDependencies();
|
|
71
|
+
const installed = {};
|
|
72
|
+
for (const [name] of Object.entries(recommended)) {
|
|
73
|
+
if (devDeps[name]) {
|
|
74
|
+
installed[name] = devDeps[name];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return installed;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get missing dev dependencies that need to be installed
|
|
81
|
+
*/
|
|
82
|
+
export function getMissingDevDependencies(packageJson) {
|
|
83
|
+
const devDeps = packageJson.devDependencies || {};
|
|
84
|
+
const recommended = getRecommendedDevDependencies();
|
|
85
|
+
const missing = {};
|
|
86
|
+
for (const [name, version] of Object.entries(recommended)) {
|
|
87
|
+
if (!devDeps[name]) {
|
|
88
|
+
missing[name] = version;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return missing;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Format dependencies for npm install command
|
|
95
|
+
*/
|
|
96
|
+
export function formatDependenciesForInstall(deps) {
|
|
97
|
+
return Object.entries(deps).map(([name, version]) => `${name}@${version}`);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Update package.json with all necessary changes
|
|
101
|
+
*/
|
|
102
|
+
export function updatePackageJson(projectRoot, options = {}) {
|
|
103
|
+
const packageJson = readPackageJson(projectRoot);
|
|
104
|
+
let updated = false;
|
|
105
|
+
const scriptsAdded = [];
|
|
106
|
+
// Add scripts
|
|
107
|
+
if (options.addScripts !== false) {
|
|
108
|
+
const added = addScripts(packageJson);
|
|
109
|
+
if (added.length > 0) {
|
|
110
|
+
scriptsAdded.push(...added);
|
|
111
|
+
updated = true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Get dependencies to install
|
|
115
|
+
let dependenciesToInstall = {};
|
|
116
|
+
if (options.installDependencies !== false) {
|
|
117
|
+
dependenciesToInstall = getMissingDevDependencies(packageJson);
|
|
118
|
+
}
|
|
119
|
+
// Write back if updated
|
|
120
|
+
if (updated) {
|
|
121
|
+
writePackageJson(projectRoot, packageJson);
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
scriptsAdded,
|
|
125
|
+
dependenciesToInstall,
|
|
126
|
+
updated,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=packageJsonUpdater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageJsonUpdater.js","sourceRoot":"","sources":["../../../src/setup/packageJsonUpdater.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for dead code analysis toolkit
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Configuration options for dead code analysis
|
|
6
|
+
*/
|
|
7
|
+
export interface AnalysisOptions {
|
|
8
|
+
/** Absolute path to project root directory */
|
|
9
|
+
projectRoot: string;
|
|
10
|
+
/** Which checks to run. Default: all */
|
|
11
|
+
checks?: CheckType[];
|
|
12
|
+
/** Automatically fix issues where possible */
|
|
13
|
+
fix?: boolean;
|
|
14
|
+
/** Custom paths to configuration files */
|
|
15
|
+
configPaths?: Partial<Record<string, string>>;
|
|
16
|
+
/** Verbose logging output */
|
|
17
|
+
verbose?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Available check types
|
|
21
|
+
*/
|
|
22
|
+
export type CheckType = 'knip' | 'typescript' | 'eslint' | 'type-coverage' | 'exhaustiveness' | 'all';
|
|
23
|
+
/**
|
|
24
|
+
* Result of a single analysis check
|
|
25
|
+
*/
|
|
26
|
+
export interface CheckResult {
|
|
27
|
+
type: CheckType;
|
|
28
|
+
status: 'success' | 'failure' | 'skipped';
|
|
29
|
+
findings: Finding[];
|
|
30
|
+
executionTime: number;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Individual finding - a piece of dead code or issue detected
|
|
35
|
+
*/
|
|
36
|
+
export interface Finding {
|
|
37
|
+
/** Category of the finding */
|
|
38
|
+
category: 'unused-export' | 'unused-file' | 'unused-dependency' | 'type-error' | 'unused-var' | 'redundant-type' | 'union-issue' | 'unused-param';
|
|
39
|
+
/** Severity level */
|
|
40
|
+
severity: 'error' | 'warning' | 'info';
|
|
41
|
+
/** File path (relative to project root) */
|
|
42
|
+
file: string;
|
|
43
|
+
/** Line number (1-based, if applicable) */
|
|
44
|
+
line?: number;
|
|
45
|
+
/** Column number (1-based, if applicable) */
|
|
46
|
+
column?: number;
|
|
47
|
+
/** Human-readable message describing the issue */
|
|
48
|
+
message: string;
|
|
49
|
+
/** Whether this issue can be automatically fixed */
|
|
50
|
+
fixable: boolean;
|
|
51
|
+
/** Suggestion for how to fix the issue */
|
|
52
|
+
suggestion?: string;
|
|
53
|
+
/** Source tool that detected this */
|
|
54
|
+
source: CheckType;
|
|
55
|
+
/** Rule name or code from the tool */
|
|
56
|
+
rule?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Summary statistics for analysis results
|
|
60
|
+
*/
|
|
61
|
+
export interface AnalysisSummary {
|
|
62
|
+
/** Total number of issues found */
|
|
63
|
+
totalIssues: number;
|
|
64
|
+
/** Breakdown by category */
|
|
65
|
+
byCategory: Record<string, number>;
|
|
66
|
+
/** Number of issues that can be auto-fixed */
|
|
67
|
+
fixableCount: number;
|
|
68
|
+
/** Number of errors (highest severity) */
|
|
69
|
+
errorCount: number;
|
|
70
|
+
/** Number of warnings */
|
|
71
|
+
warningCount: number;
|
|
72
|
+
/** Number of info/low severity items */
|
|
73
|
+
infoCount: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Complete analysis result
|
|
77
|
+
*/
|
|
78
|
+
export interface AnalysisResult {
|
|
79
|
+
/** Overall status of the analysis */
|
|
80
|
+
status: 'success' | 'partial' | 'failure';
|
|
81
|
+
/** Summary statistics */
|
|
82
|
+
summary: AnalysisSummary;
|
|
83
|
+
/** All findings from all checks */
|
|
84
|
+
findings: Finding[];
|
|
85
|
+
/** Results from individual checks */
|
|
86
|
+
checkResults: CheckResult[];
|
|
87
|
+
/** Total execution time in milliseconds */
|
|
88
|
+
executionTime: number;
|
|
89
|
+
/** Error message if status is 'failure' */
|
|
90
|
+
error?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Result of applying fixes
|
|
94
|
+
*/
|
|
95
|
+
export interface FixResult {
|
|
96
|
+
/** Overall status */
|
|
97
|
+
status: 'success' | 'partial' | 'failure';
|
|
98
|
+
/** Number of issues fixed */
|
|
99
|
+
fixedCount: number;
|
|
100
|
+
/** Number of issues that could not be fixed */
|
|
101
|
+
unfixedCount: number;
|
|
102
|
+
/** Files that were modified */
|
|
103
|
+
modifiedFiles: string[];
|
|
104
|
+
/** Details of what was fixed */
|
|
105
|
+
fixes: FixDetail[];
|
|
106
|
+
/** Any errors that occurred */
|
|
107
|
+
errors?: string[];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Details about a single fix that was applied
|
|
111
|
+
*/
|
|
112
|
+
export interface FixDetail {
|
|
113
|
+
/** The finding that was fixed */
|
|
114
|
+
finding: Finding;
|
|
115
|
+
/** What was changed */
|
|
116
|
+
action: string;
|
|
117
|
+
/** Was it successful */
|
|
118
|
+
success: boolean;
|
|
119
|
+
/** Error message if unsuccessful */
|
|
120
|
+
error?: string;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Configuration options for setup
|
|
124
|
+
*/
|
|
125
|
+
export interface SetupOptions {
|
|
126
|
+
/** Absolute path to project root */
|
|
127
|
+
projectRoot: string;
|
|
128
|
+
/** Install pre-commit hooks */
|
|
129
|
+
setupHooks?: boolean;
|
|
130
|
+
/** Install npm dependencies */
|
|
131
|
+
installDependencies?: boolean;
|
|
132
|
+
/** Override default configs */
|
|
133
|
+
configOverrides?: Partial<Record<string, unknown>>;
|
|
134
|
+
/** Show detailed output */
|
|
135
|
+
verbose?: boolean;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Result of setup process
|
|
139
|
+
*/
|
|
140
|
+
export interface SetupResult {
|
|
141
|
+
/** Overall status */
|
|
142
|
+
status: 'success' | 'partial' | 'failure';
|
|
143
|
+
/** Files created during setup */
|
|
144
|
+
filesCreated: string[];
|
|
145
|
+
/** Scripts added to package.json */
|
|
146
|
+
scriptsAdded: string[];
|
|
147
|
+
/** Dependencies installed */
|
|
148
|
+
dependenciesInstalled: string[];
|
|
149
|
+
/** Next steps for user */
|
|
150
|
+
nextSteps: string[];
|
|
151
|
+
/** Any errors that occurred */
|
|
152
|
+
errors?: string[];
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Detected project configuration
|
|
156
|
+
*/
|
|
157
|
+
export interface ProjectConfig {
|
|
158
|
+
/** Root directory */
|
|
159
|
+
root: string;
|
|
160
|
+
/** Whether package.json exists */
|
|
161
|
+
hasPackageJson: boolean;
|
|
162
|
+
/** Whether TypeScript is configured */
|
|
163
|
+
hasTypeScript: boolean;
|
|
164
|
+
/** TypeScript config path if present */
|
|
165
|
+
tsconfigPath?: string;
|
|
166
|
+
/** Project type */
|
|
167
|
+
type: 'react' | 'node' | 'fullstack' | 'unknown';
|
|
168
|
+
/** Existing tool configs present */
|
|
169
|
+
existingConfigs: {
|
|
170
|
+
eslint?: string;
|
|
171
|
+
prettier?: string;
|
|
172
|
+
knip?: string;
|
|
173
|
+
husky?: string;
|
|
174
|
+
[key: string]: string | undefined;
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|