Skip to content

Commit 15a1bba

Browse files
committed
Updates depcheck job
1 parent 74589a0 commit 15a1bba

12 files changed

+596
-800
lines changed

tools/cli/src/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ cli
1919
.description('Uses the local `turbo.json` to build packages in the repo')
2020
.argument('[packages...]', 'A list of packages to build')
2121
.option('--only=[steps...]', 'A list of build steps to run')
22-
.option('-v, --verbose', 'Verbose mode', false)
22+
.option('-v --verbose', 'Prints additional information to the console', false)
2323
.action(build);
2424

2525
/** Build steps */
@@ -72,7 +72,7 @@ cli
7272
.option('-e, --eslintOnly', 'run eslint only', false)
7373
.option('-p, --prettierOnly', 'run prettier only', false)
7474
.option('--pkgJsonOnly', 'run npmPackageJsonLint only', false)
75-
.option('--verbose', 'verbose mode', false)
75+
.option('-v --verbose', 'Prints additional information to the console', false)
7676
.action(lint);
7777

7878
/** Validate */
@@ -81,6 +81,7 @@ cli
8181
.description('Validates build integrity, and package.json dependencies')
8282
.option('--buildsOnly', 'Validates build integrity only', false)
8383
.option('--depsOnly', 'Validates package dependencies only', false)
84+
.option('-v --verbose', 'Prints additional information to the console', false)
8485
.option('-f, --fix', 'Fixes issues found in dependency tree', false)
8586
.option(
8687
'--fix-tsconfig',

tools/validate/src/builds.ts

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export const validateBuilds = () => {
7272
reject(errorMsg.join(' '));
7373
}
7474
}
75+
console.log('Builds OK ✅');
7576
resolve();
7677
});
7778
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/* eslint-disable no-console */
2+
import depcheck from 'depcheck';
3+
import path from 'path';
4+
import { ValidateCommandOptions } from 'src/validate.types';
5+
6+
import { depcheckOptions, DependencyIssues } from './config';
7+
import { fixDependencies } from './fixDependencyIssues';
8+
import { logDependencyIssues } from './logDependencyIssues';
9+
import { fixTSconfig, sortDependenciesByUsage } from './utils';
10+
import { validateListedDependencies } from './validateListedDependencies';
11+
import { validateListedDevDependencies } from './validateListedDevDependencies';
12+
import { isMissingProviderPeer } from './validatePeerDependencies';
13+
14+
const rootDir = process.cwd();
15+
16+
export async function checkPackage(
17+
pkg: string,
18+
{ fix, fixTsconfig, verbose }: Partial<ValidateCommandOptions>,
19+
): Promise<boolean> {
20+
return new Promise(async resolve => {
21+
const check = await depcheck(
22+
path.resolve(rootDir, 'packages', pkg),
23+
depcheckOptions,
24+
);
25+
26+
/**
27+
* Packages listed in package.json as a devDependency,
28+
* but not imported in any file
29+
*/
30+
const unusedDependencies = check.dependencies;
31+
32+
/**
33+
* Packages listed in package.json as a devDependency,
34+
* but not imported in any file
35+
*/
36+
const unusedDevDependencies = check.devDependencies;
37+
38+
/**
39+
* All packages imported in a file
40+
*/
41+
const importedPackages = check.using;
42+
43+
/**
44+
* Packages that are imported in a file, but not listed in package.json
45+
*/
46+
const allMissingPackages = check.missing;
47+
48+
// Sort these based on the file it's used in
49+
const sortedMissingDeps = sortDependenciesByUsage(allMissingPackages, pkg);
50+
const missingDependencies = Object.keys(sortedMissingDeps.dependencies);
51+
const missingDevDependencies = Object.keys(
52+
sortedMissingDeps.devDependencies,
53+
);
54+
55+
// Every listed devDependency must _only_ be used in test files
56+
const listedDevButUsedAsDependency = validateListedDevDependencies(
57+
{ pkg, importedPackages },
58+
{ verbose },
59+
);
60+
61+
// Every listed dependency must be used in _at least one_ non-test file
62+
const listedButOnlyUsedAsDev = validateListedDependencies(
63+
{ pkg, importedPackages },
64+
{ verbose },
65+
);
66+
67+
// Whether the package is missing required peer dependencies
68+
const isMissingPeers = isMissingProviderPeer({ pkg, importedPackages });
69+
70+
const allDependencyIssues: DependencyIssues = {
71+
missingDependencies,
72+
missingDevDependencies,
73+
unusedDependencies,
74+
unusedDevDependencies,
75+
listedDevButUsedAsDependency,
76+
listedButOnlyUsedAsDev,
77+
isMissingPeers,
78+
};
79+
80+
logDependencyIssues(pkg, allDependencyIssues);
81+
82+
if (fix) {
83+
fixDependencies(pkg, allDependencyIssues);
84+
}
85+
86+
if (fixTsconfig) {
87+
fixTSconfig(pkg);
88+
}
89+
90+
const issuesExist = Object.values(allDependencyIssues).every(
91+
prob => prob.length > 0,
92+
);
93+
94+
issuesExist && console.log({ pkg, issuesExist, allDependencyIssues });
95+
96+
resolve(issuesExist && !fix);
97+
});
98+
}

0 commit comments

Comments
 (0)