@cloud-ru/ft-deps-validator 1.1.2-preview-26976e0.0 → 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/CHANGELOG.md +11 -0
- package/README.md +10 -8
- package/dist/cjs/Checker/MonorepoChecker.d.ts +5 -1
- package/dist/cjs/Checker/MonorepoChecker.js +3 -3
- package/dist/cjs/Checker/RepoChecker.js +1 -1
- package/dist/cjs/Checker/__tests__/MonorepoChecker.spec.js +47 -23
- package/dist/cjs/Checker/__tests__/RepoChecker.spec.js +9 -9
- package/dist/cjs/Config/MonorepoConfig.d.ts +1 -1
- package/dist/cjs/Config/MonorepoConfig.js +6 -6
- package/dist/cjs/Config/RepoConfig.d.ts +3 -3
- package/dist/cjs/Config/RepoConfig.js +5 -5
- package/dist/cjs/Config/__tests__/MonorepoConfig.spec.js +58 -58
- package/dist/cjs/Config/__tests__/RepoConfig.spec.js +22 -22
- package/dist/cjs/Report/__tests__/Report.spec.js +59 -64
- package/dist/cjs/Report/index.d.ts +5 -1
- package/dist/cjs/Report/index.js +1 -1
- package/dist/cjs/types.d.ts +34 -11
- package/dist/cjs/utils/__tests__/getCliArguments.spec.js +8 -8
- package/dist/cjs/utils/console.d.ts +0 -2
- package/dist/cjs/utils/console.js +1 -12
- package/dist/cjs/utils/getCliArguments.d.ts +2 -2
- package/dist/cjs/utils/getCliArguments.js +2 -2
- package/dist/cjs/utils/getEnvironment.js +3 -3
- package/dist/esm/Checker/MonorepoChecker.d.ts +5 -1
- package/dist/esm/Checker/MonorepoChecker.js +3 -3
- package/dist/esm/Checker/RepoChecker.js +1 -1
- package/dist/esm/Checker/__tests__/MonorepoChecker.spec.js +47 -23
- package/dist/esm/Checker/__tests__/RepoChecker.spec.js +9 -9
- package/dist/esm/Config/MonorepoConfig.d.ts +1 -1
- package/dist/esm/Config/MonorepoConfig.js +6 -6
- package/dist/esm/Config/RepoConfig.d.ts +3 -3
- package/dist/esm/Config/RepoConfig.js +5 -5
- package/dist/esm/Config/__tests__/MonorepoConfig.spec.js +58 -58
- package/dist/esm/Config/__tests__/RepoConfig.spec.js +22 -22
- package/dist/esm/Report/__tests__/Report.spec.js +26 -64
- package/dist/esm/Report/index.d.ts +5 -1
- package/dist/esm/Report/index.js +1 -1
- package/dist/esm/types.d.ts +34 -11
- package/dist/esm/utils/__tests__/getCliArguments.spec.js +8 -8
- package/dist/esm/utils/console.d.ts +0 -2
- package/dist/esm/utils/console.js +0 -9
- package/dist/esm/utils/getCliArguments.d.ts +2 -2
- package/dist/esm/utils/getCliArguments.js +2 -2
- package/dist/esm/utils/getEnvironment.js +3 -3
- package/package.json +2 -2
- package/src/Checker/MonorepoChecker.ts +3 -3
- package/src/Checker/RepoChecker.ts +1 -1
- package/src/Checker/__tests__/MonorepoChecker.spec.ts +65 -41
- package/src/Checker/__tests__/RepoChecker.spec.ts +9 -9
- package/src/Config/MonorepoConfig.ts +6 -6
- package/src/Config/RepoConfig.ts +7 -7
- package/src/Config/__tests__/MonorepoConfig.spec.ts +58 -58
- package/src/Config/__tests__/RepoConfig.spec.ts +22 -22
- package/src/Report/__tests__/Report.spec.ts +28 -68
- package/src/Report/__tests__/__snapshots__/Report.spec.ts.snap +102 -0
- package/src/Report/index.ts +4 -2
- package/src/types.ts +38 -12
- package/src/utils/__tests__/getCliArguments.spec.ts +8 -8
- package/src/utils/console.ts +0 -9
- package/src/utils/getCliArguments.ts +2 -2
- package/src/utils/getEnvironment.ts +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# 2.0.0 (2025-12-30)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### BREAKING CHANGES
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
* **FF-7809:** add regular and monorepos supporting ([9183cbc](https://github.com/cloud-ru-tech/frontend-tools/commit/9183cbcf6841f8870fa4b27079aed68c06b235be))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## 1.1.1 (2025-12-23)
|
|
7
18
|
|
|
8
19
|
|
package/README.md
CHANGED
|
@@ -50,17 +50,19 @@ You can create a `deps-validator.config.json` file in the root of your repositor
|
|
|
50
50
|
{
|
|
51
51
|
"rootPackagesFolderPattern": "packages/*",
|
|
52
52
|
"ignoredPackagesFolderFiles": ["packages/tsconfig.cjs.json"],
|
|
53
|
-
"
|
|
54
|
-
"
|
|
53
|
+
"ignoreFilePatterns": ["dist", "__tests__"],
|
|
54
|
+
"ignorePackagePatterns": ["react", "react-dom"],
|
|
55
55
|
"packages": {
|
|
56
56
|
"package-name": {
|
|
57
|
-
"
|
|
58
|
-
"
|
|
57
|
+
"ignoreFilePatterns": ["build"],
|
|
58
|
+
"ignorePackagePatterns": ["@some/package"]
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
+
> Settings in the `packages` section are merged with global settings, not overwritten. For example, if global settings have `ignoreFilePatterns: ["dist", "__tests__"]` and a specific package has `ignoreFilePatterns: ["build"]`, both lists will be used for that package: `["dist", "__tests__", "build"]`. The same applies to `ignorePackagePatterns`.
|
|
65
|
+
|
|
64
66
|
Configuration priority (highest to lowest):
|
|
65
67
|
1. CLI arguments
|
|
66
68
|
2. Configuration file
|
|
@@ -69,13 +71,13 @@ Configuration priority (highest to lowest):
|
|
|
69
71
|
### Ignore specific patterns
|
|
70
72
|
|
|
71
73
|
```bash
|
|
72
|
-
npx @cloud-ru/ft-deps-validator --
|
|
74
|
+
npx @cloud-ru/ft-deps-validator --ignoreFilePatterns "stories" "dist" "__tests__"
|
|
73
75
|
```
|
|
74
76
|
|
|
75
77
|
### Ignore specific packages
|
|
76
78
|
|
|
77
79
|
```bash
|
|
78
|
-
npx @cloud-ru/ft-deps-validator --
|
|
80
|
+
npx @cloud-ru/ft-deps-validator --ignorePackagePatterns "react" "react-dom"
|
|
79
81
|
```
|
|
80
82
|
|
|
81
83
|
## Options
|
|
@@ -83,8 +85,8 @@ npx @cloud-ru/ft-deps-validator --ignoreMatches "react" "react-dom"
|
|
|
83
85
|
- `--cwd, -d` - Working directory (default: current working directory)
|
|
84
86
|
- `--rootPackagesFolderPattern, -p` - Folder containing packages (glob pattern, e.g., "packages/*" or "apps/*"). If not specified, automatically detects monorepo by checking for `packages` folder
|
|
85
87
|
- `--ignoredPackagesFolderFiles` - Specify one or more paths that should be ignored in packages folder (default: `['packages/tsconfig.cjs.json', 'packages/tsconfig.esm.json']`)
|
|
86
|
-
- `--
|
|
87
|
-
- `--
|
|
88
|
+
- `--ignoreFilePatterns` - Specify one or more directories names that should be ignored (default: `['stories', 'dist', '__tests__', '__e2e__']`)
|
|
89
|
+
- `--ignorePackagePatterns` - Specify one or more packages that should be ignored (default: includes `react`, `react-dom`, `react-docgen-typescript`, and several figma-tokens packages)
|
|
88
90
|
- `--help, -h` - Show help
|
|
89
91
|
- `--version, -v` - Show version
|
|
90
92
|
|
|
@@ -4,7 +4,11 @@ export declare class MonorepoChecker extends RepoChecker {
|
|
|
4
4
|
private actualVersions;
|
|
5
5
|
constructor(config: MonorepoConfig);
|
|
6
6
|
protected checkFolder(path: string): Promise<Partial<Pick<import("depcheck").Results, "dependencies" | "missing"> & {
|
|
7
|
-
wrongVersions:
|
|
7
|
+
wrongVersions: {
|
|
8
|
+
dep: string;
|
|
9
|
+
version: string;
|
|
10
|
+
actualVersion: string;
|
|
11
|
+
}[];
|
|
8
12
|
internalAsDev: string[];
|
|
9
13
|
}>>;
|
|
10
14
|
}
|
|
@@ -32,12 +32,12 @@ class MonorepoChecker extends RepoChecker_1.RepoChecker {
|
|
|
32
32
|
for (const [dep, version] of Object.entries(pkg.dependencies)) {
|
|
33
33
|
const actualVersion = this.actualVersions[dep];
|
|
34
34
|
if (actualVersion && actualVersion !== version) {
|
|
35
|
-
const
|
|
35
|
+
const data = { version, actualVersion, dep };
|
|
36
36
|
if (result.wrongVersions) {
|
|
37
|
-
result.wrongVersions.push(
|
|
37
|
+
result.wrongVersions.push(data);
|
|
38
38
|
}
|
|
39
39
|
else {
|
|
40
|
-
result.wrongVersions = [
|
|
40
|
+
result.wrongVersions = [data];
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -29,7 +29,7 @@ class RepoChecker {
|
|
|
29
29
|
}
|
|
30
30
|
checkFolder(path) {
|
|
31
31
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
return (0, depcheck_1.default)(path, this.config.
|
|
32
|
+
return (0, depcheck_1.default)(path, this.config.getDepcheckOptionsForFolder(path));
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
}
|
|
@@ -32,7 +32,7 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
32
32
|
vitest_1.vi.clearAllMocks();
|
|
33
33
|
mockConfig = {
|
|
34
34
|
getFolders: vitest_1.vi.fn(),
|
|
35
|
-
|
|
35
|
+
getDepcheckOptionsForFolder: vitest_1.vi.fn(),
|
|
36
36
|
};
|
|
37
37
|
});
|
|
38
38
|
(0, vitest_1.describe)('check', () => {
|
|
@@ -40,20 +40,13 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
40
40
|
vitest_1.vi.mocked(mockConfig.getFolders).mockReturnValue([]);
|
|
41
41
|
});
|
|
42
42
|
(0, vitest_1.it)('should add wrongVersions when dependency version does not match', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
43
|
-
const folders = ['/test/folder1'
|
|
43
|
+
const folders = ['/test/folder1'];
|
|
44
44
|
vitest_1.vi.mocked(mockConfig.getFolders).mockReturnValue(folders);
|
|
45
|
-
mockReadPackageJsonFileSync
|
|
46
|
-
.mockReturnValueOnce({
|
|
45
|
+
mockReadPackageJsonFileSync.mockReturnValue({
|
|
47
46
|
name: '@test/package1',
|
|
48
47
|
version: '1.0.0',
|
|
49
48
|
dependencies: {},
|
|
50
49
|
devDependencies: {},
|
|
51
|
-
})
|
|
52
|
-
.mockReturnValueOnce({
|
|
53
|
-
name: '@test/package2',
|
|
54
|
-
version: '2.0.0',
|
|
55
|
-
dependencies: {},
|
|
56
|
-
devDependencies: {},
|
|
57
50
|
});
|
|
58
51
|
const checkState = { dependencies: [] };
|
|
59
52
|
mockDepcheck.mockResolvedValue(checkState);
|
|
@@ -63,11 +56,14 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
63
56
|
dependencies: { '@test/package1': '1.1.0' },
|
|
64
57
|
devDependencies: {},
|
|
65
58
|
});
|
|
66
|
-
vitest_1.vi.mocked(mockConfig.
|
|
59
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
67
60
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
68
61
|
const report = yield checker.check();
|
|
69
62
|
const exitCode = report.printResultAndGetExitCode();
|
|
70
63
|
(0, vitest_1.expect)(exitCode).toBe(1);
|
|
64
|
+
(0, vitest_1.expect)(report['storage']['/test/folder1'].wrongVersions).toEqual([
|
|
65
|
+
{ dep: '@test/package1', version: '1.1.0', actualVersion: '1.0.0' },
|
|
66
|
+
]);
|
|
71
67
|
}));
|
|
72
68
|
(0, vitest_1.it)('should not add wrongVersions when dependency version matches', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
69
|
const folders = ['/test/folder1'];
|
|
@@ -86,7 +82,7 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
86
82
|
dependencies: { '@test/package1': '1.0.0' },
|
|
87
83
|
devDependencies: {},
|
|
88
84
|
});
|
|
89
|
-
vitest_1.vi.mocked(mockConfig.
|
|
85
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
90
86
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
91
87
|
const report = yield checker.check();
|
|
92
88
|
const exitCode = report.printResultAndGetExitCode();
|
|
@@ -103,7 +99,7 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
103
99
|
});
|
|
104
100
|
const checkState = {
|
|
105
101
|
dependencies: [],
|
|
106
|
-
wrongVersions: ['existing
|
|
102
|
+
wrongVersions: [{ dep: 'existing-package', version: '1.0.0', actualVersion: '2.0.0' }],
|
|
107
103
|
};
|
|
108
104
|
mockDepcheck.mockResolvedValue(checkState);
|
|
109
105
|
mockReadPackageJsonFile.mockResolvedValue({
|
|
@@ -112,11 +108,15 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
112
108
|
dependencies: { '@test/package1': '1.1.0' },
|
|
113
109
|
devDependencies: {},
|
|
114
110
|
});
|
|
115
|
-
vitest_1.vi.mocked(mockConfig.
|
|
111
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
116
112
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
117
113
|
const report = yield checker.check();
|
|
118
114
|
const exitCode = report.printResultAndGetExitCode();
|
|
119
115
|
(0, vitest_1.expect)(exitCode).toBe(1);
|
|
116
|
+
(0, vitest_1.expect)(report['storage']['/test/folder1'].wrongVersions).toEqual([
|
|
117
|
+
{ dep: 'existing-package', version: '1.0.0', actualVersion: '2.0.0' },
|
|
118
|
+
{ dep: '@test/package1', version: '1.1.0', actualVersion: '1.0.0' },
|
|
119
|
+
]);
|
|
120
120
|
}));
|
|
121
121
|
(0, vitest_1.it)('should add internalAsDev when internal package is in devDependencies', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
122
122
|
const folders = ['/test/folder1'];
|
|
@@ -135,11 +135,12 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
135
135
|
dependencies: {},
|
|
136
136
|
devDependencies: { '@test/package1': '1.0.0' },
|
|
137
137
|
});
|
|
138
|
-
vitest_1.vi.mocked(mockConfig.
|
|
138
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
139
139
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
140
140
|
const report = yield checker.check();
|
|
141
141
|
const exitCode = report.printResultAndGetExitCode();
|
|
142
142
|
(0, vitest_1.expect)(exitCode).toBe(1);
|
|
143
|
+
(0, vitest_1.expect)(report['storage']['/test/folder1'].internalAsDev).toEqual(['@test/package1']);
|
|
143
144
|
}));
|
|
144
145
|
(0, vitest_1.it)('should not add internalAsDev when package is not internal', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
145
146
|
const folders = ['/test/folder1'];
|
|
@@ -158,7 +159,7 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
158
159
|
dependencies: {},
|
|
159
160
|
devDependencies: { 'external-package': '1.0.0' },
|
|
160
161
|
});
|
|
161
|
-
vitest_1.vi.mocked(mockConfig.
|
|
162
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
162
163
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
163
164
|
const report = yield checker.check();
|
|
164
165
|
const exitCode = report.printResultAndGetExitCode();
|
|
@@ -184,11 +185,12 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
184
185
|
dependencies: {},
|
|
185
186
|
devDependencies: { '@test/package1': '1.0.0' },
|
|
186
187
|
});
|
|
187
|
-
vitest_1.vi.mocked(mockConfig.
|
|
188
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
188
189
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
189
190
|
const report = yield checker.check();
|
|
190
191
|
const exitCode = report.printResultAndGetExitCode();
|
|
191
192
|
(0, vitest_1.expect)(exitCode).toBe(1);
|
|
193
|
+
(0, vitest_1.expect)(report['storage']['/test/folder1'].internalAsDev).toEqual(['existing-package', '@test/package1']);
|
|
192
194
|
}));
|
|
193
195
|
(0, vitest_1.it)('should handle multiple wrong versions', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
194
196
|
const folders = ['/test/folder1', '/test/folder2'];
|
|
@@ -208,7 +210,8 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
208
210
|
});
|
|
209
211
|
const checkState = { dependencies: [] };
|
|
210
212
|
mockDepcheck.mockResolvedValue(checkState);
|
|
211
|
-
mockReadPackageJsonFile
|
|
213
|
+
mockReadPackageJsonFile
|
|
214
|
+
.mockResolvedValueOnce({
|
|
212
215
|
name: 'test-package',
|
|
213
216
|
version: '1.0.0',
|
|
214
217
|
dependencies: {
|
|
@@ -216,12 +219,22 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
216
219
|
'@test/package2': '2.1.0',
|
|
217
220
|
},
|
|
218
221
|
devDependencies: {},
|
|
222
|
+
})
|
|
223
|
+
.mockResolvedValueOnce({
|
|
224
|
+
name: 'test-package2',
|
|
225
|
+
version: '1.0.0',
|
|
226
|
+
dependencies: {},
|
|
227
|
+
devDependencies: {},
|
|
219
228
|
});
|
|
220
|
-
vitest_1.vi.mocked(mockConfig.
|
|
229
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
221
230
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
222
231
|
const report = yield checker.check();
|
|
223
232
|
const exitCode = report.printResultAndGetExitCode();
|
|
224
233
|
(0, vitest_1.expect)(exitCode).toBe(1);
|
|
234
|
+
(0, vitest_1.expect)(report['storage']['/test/folder1'].wrongVersions).toEqual([
|
|
235
|
+
{ dep: '@test/package1', version: '1.1.0', actualVersion: '1.0.0' },
|
|
236
|
+
{ dep: '@test/package2', version: '2.1.0', actualVersion: '2.0.0' },
|
|
237
|
+
]);
|
|
225
238
|
}));
|
|
226
239
|
(0, vitest_1.it)('should handle both wrongVersions and internalAsDev', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
227
240
|
const folders = ['/test/folder1', '/test/folder2'];
|
|
@@ -241,17 +254,28 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
241
254
|
});
|
|
242
255
|
const checkState = { dependencies: [] };
|
|
243
256
|
mockDepcheck.mockResolvedValue(checkState);
|
|
244
|
-
mockReadPackageJsonFile
|
|
257
|
+
mockReadPackageJsonFile
|
|
258
|
+
.mockResolvedValueOnce({
|
|
245
259
|
name: 'test-package',
|
|
246
260
|
version: '1.0.0',
|
|
247
261
|
dependencies: { '@test/package1': '1.1.0' },
|
|
248
262
|
devDependencies: { '@test/package2': '2.0.0' },
|
|
263
|
+
})
|
|
264
|
+
.mockResolvedValueOnce({
|
|
265
|
+
name: 'test-package2',
|
|
266
|
+
version: '1.0.0',
|
|
267
|
+
dependencies: {},
|
|
268
|
+
devDependencies: {},
|
|
249
269
|
});
|
|
250
|
-
vitest_1.vi.mocked(mockConfig.
|
|
270
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
251
271
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
252
272
|
const report = yield checker.check();
|
|
253
273
|
const exitCode = report.printResultAndGetExitCode();
|
|
254
274
|
(0, vitest_1.expect)(exitCode).toBe(1);
|
|
275
|
+
(0, vitest_1.expect)(report['storage']['/test/folder1'].wrongVersions).toEqual([
|
|
276
|
+
{ dep: '@test/package1', version: '1.1.0', actualVersion: '1.0.0' },
|
|
277
|
+
]);
|
|
278
|
+
(0, vitest_1.expect)(report['storage']['/test/folder1'].internalAsDev).toEqual(['@test/package2']);
|
|
255
279
|
}));
|
|
256
280
|
(0, vitest_1.it)('should not add wrongVersions for external packages', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
257
281
|
const folders = ['/test/folder1'];
|
|
@@ -270,7 +294,7 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
270
294
|
dependencies: { 'external-package': '1.0.0' },
|
|
271
295
|
devDependencies: {},
|
|
272
296
|
});
|
|
273
|
-
vitest_1.vi.mocked(mockConfig.
|
|
297
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
274
298
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
275
299
|
const report = yield checker.check();
|
|
276
300
|
const exitCode = report.printResultAndGetExitCode();
|
|
@@ -293,7 +317,7 @@ vitest_1.vi.mock('../../utils/readPackageJsonFile', () => ({
|
|
|
293
317
|
dependencies: {},
|
|
294
318
|
devDependencies: {},
|
|
295
319
|
});
|
|
296
|
-
vitest_1.vi.mocked(mockConfig.
|
|
320
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
297
321
|
const checker = new MonorepoChecker_1.MonorepoChecker(mockConfig);
|
|
298
322
|
const report = yield checker.check();
|
|
299
323
|
const exitCode = report.printResultAndGetExitCode();
|
|
@@ -25,7 +25,7 @@ vitest_1.vi.mock('depcheck', () => ({
|
|
|
25
25
|
vitest_1.vi.clearAllMocks();
|
|
26
26
|
mockConfig = {
|
|
27
27
|
getFolders: vitest_1.vi.fn(),
|
|
28
|
-
|
|
28
|
+
getDepcheckOptionsForFolder: vitest_1.vi.fn(),
|
|
29
29
|
};
|
|
30
30
|
});
|
|
31
31
|
(0, vitest_1.describe)('constructor', () => {
|
|
@@ -50,31 +50,31 @@ vitest_1.vi.mock('depcheck', () => ({
|
|
|
50
50
|
const checkState1 = { dependencies: ['dep1'] };
|
|
51
51
|
const checkState2 = { dependencies: ['dep2'] };
|
|
52
52
|
mockDepcheck.mockResolvedValueOnce(checkState1).mockResolvedValueOnce(checkState2);
|
|
53
|
-
vitest_1.vi.mocked(mockConfig.
|
|
53
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
54
54
|
const checker = new RepoChecker_1.RepoChecker(mockConfig);
|
|
55
55
|
yield checker.check();
|
|
56
56
|
(0, vitest_1.expect)(mockDepcheck).toHaveBeenCalledTimes(2);
|
|
57
57
|
}));
|
|
58
|
-
(0, vitest_1.it)('should call
|
|
58
|
+
(0, vitest_1.it)('should call getDepcheckOptionsForFolder for each folder with correct path', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
59
|
const folders = ['/test/folder1', '/test/folder2'];
|
|
60
60
|
vitest_1.vi.mocked(mockConfig.getFolders).mockReturnValue(folders);
|
|
61
61
|
const options1 = { ignoreBinPackage: false };
|
|
62
62
|
const options2 = { ignoreBinPackage: false };
|
|
63
|
-
vitest_1.vi.mocked(mockConfig.
|
|
63
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder)
|
|
64
64
|
.mockReturnValueOnce(options1)
|
|
65
65
|
.mockReturnValueOnce(options2);
|
|
66
66
|
const checkState = { dependencies: [] };
|
|
67
67
|
mockDepcheck.mockResolvedValue(checkState);
|
|
68
68
|
const checker = new RepoChecker_1.RepoChecker(mockConfig);
|
|
69
69
|
yield checker.check();
|
|
70
|
-
(0, vitest_1.expect)(mockConfig.
|
|
71
|
-
(0, vitest_1.expect)(mockConfig.
|
|
70
|
+
(0, vitest_1.expect)(mockConfig.getDepcheckOptionsForFolder).toHaveBeenCalledWith('/test/folder1');
|
|
71
|
+
(0, vitest_1.expect)(mockConfig.getDepcheckOptionsForFolder).toHaveBeenCalledWith('/test/folder2');
|
|
72
72
|
}));
|
|
73
73
|
(0, vitest_1.it)('should call depcheck with correct path and options', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
74
|
const folders = ['/test/folder1'];
|
|
75
75
|
vitest_1.vi.mocked(mockConfig.getFolders).mockReturnValue(folders);
|
|
76
76
|
const options = { ignoreBinPackage: false, skipMissing: false };
|
|
77
|
-
vitest_1.vi.mocked(mockConfig.
|
|
77
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue(options);
|
|
78
78
|
const checkState = { dependencies: [] };
|
|
79
79
|
mockDepcheck.mockResolvedValue(checkState);
|
|
80
80
|
const checker = new RepoChecker_1.RepoChecker(mockConfig);
|
|
@@ -87,7 +87,7 @@ vitest_1.vi.mock('depcheck', () => ({
|
|
|
87
87
|
const checkState1 = { dependencies: ['dep1'] };
|
|
88
88
|
const checkState2 = { dependencies: ['dep2'] };
|
|
89
89
|
mockDepcheck.mockResolvedValueOnce(checkState1).mockResolvedValueOnce(checkState2);
|
|
90
|
-
vitest_1.vi.mocked(mockConfig.
|
|
90
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
91
91
|
const checker = new RepoChecker_1.RepoChecker(mockConfig);
|
|
92
92
|
const report = yield checker.check();
|
|
93
93
|
const exitCode = report.printResultAndGetExitCode();
|
|
@@ -98,7 +98,7 @@ vitest_1.vi.mock('depcheck', () => ({
|
|
|
98
98
|
vitest_1.vi.mocked(mockConfig.getFolders).mockReturnValue(folders);
|
|
99
99
|
const checkState = { dependencies: [] };
|
|
100
100
|
mockDepcheck.mockResolvedValue(checkState);
|
|
101
|
-
vitest_1.vi.mocked(mockConfig.
|
|
101
|
+
vitest_1.vi.mocked(mockConfig.getDepcheckOptionsForFolder).mockReturnValue({});
|
|
102
102
|
const checker = new RepoChecker_1.RepoChecker(mockConfig);
|
|
103
103
|
const report = yield checker.check();
|
|
104
104
|
(0, vitest_1.expect)(report).toBeDefined();
|
|
@@ -7,6 +7,6 @@ export declare class MonorepoConfig extends RepoConfig {
|
|
|
7
7
|
private packages;
|
|
8
8
|
private folders?;
|
|
9
9
|
constructor(env: MonorepoEnvType);
|
|
10
|
-
|
|
10
|
+
getDepcheckOptionsForFolder(folderPath: string): Options;
|
|
11
11
|
getFolders(): string[];
|
|
12
12
|
}
|
|
@@ -14,19 +14,19 @@ class MonorepoConfig extends RepoConfig_1.RepoConfig {
|
|
|
14
14
|
this.ignoredPackagesFolderFiles = env.ignoredPackagesFolderFiles || [];
|
|
15
15
|
this.packages = env.packages || {};
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
getDepcheckOptionsForFolder(folderPath) {
|
|
18
18
|
var _a, _b;
|
|
19
|
-
const options = super.
|
|
19
|
+
const options = super.getDepcheckOptionsForFolder(folderPath);
|
|
20
20
|
const folder = node_path_1.default.basename(folderPath);
|
|
21
21
|
const folderIgnores = this.packages[folder];
|
|
22
22
|
if (!folderIgnores) {
|
|
23
23
|
return options;
|
|
24
24
|
}
|
|
25
|
-
if ((_a = folderIgnores.
|
|
26
|
-
options.ignorePatterns = [...(options.ignorePatterns || []), ...folderIgnores.
|
|
25
|
+
if ((_a = folderIgnores.ignoreFilePatterns) === null || _a === void 0 ? void 0 : _a.length) {
|
|
26
|
+
options.ignorePatterns = [...(options.ignorePatterns || []), ...folderIgnores.ignoreFilePatterns];
|
|
27
27
|
}
|
|
28
|
-
if ((_b = folderIgnores.
|
|
29
|
-
options.ignoreMatches = [...(options.ignoreMatches || []), ...folderIgnores.
|
|
28
|
+
if ((_b = folderIgnores.ignorePackagePatterns) === null || _b === void 0 ? void 0 : _b.length) {
|
|
29
|
+
options.ignoreMatches = [...(options.ignoreMatches || []), ...folderIgnores.ignorePackagePatterns];
|
|
30
30
|
}
|
|
31
31
|
return options;
|
|
32
32
|
}
|
|
@@ -2,9 +2,9 @@ import { Options } from 'depcheck';
|
|
|
2
2
|
import { RepoEnvType } from '../types';
|
|
3
3
|
export declare class RepoConfig {
|
|
4
4
|
protected pwd: string;
|
|
5
|
-
private
|
|
6
|
-
private
|
|
5
|
+
private ignoreFilePatterns?;
|
|
6
|
+
private ignorePackagePatterns?;
|
|
7
7
|
constructor(env: RepoEnvType);
|
|
8
8
|
getFolders(): string[];
|
|
9
|
-
|
|
9
|
+
getDepcheckOptionsForFolder(_folder: string): Options;
|
|
10
10
|
}
|
|
@@ -8,19 +8,19 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
8
8
|
class RepoConfig {
|
|
9
9
|
constructor(env) {
|
|
10
10
|
this.pwd = node_path_1.default.resolve(env.cwd);
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
11
|
+
this.ignorePackagePatterns = env.ignorePackagePatterns || [];
|
|
12
|
+
this.ignoreFilePatterns = env.ignoreFilePatterns || [];
|
|
13
13
|
}
|
|
14
14
|
getFolders() {
|
|
15
15
|
return [this.pwd];
|
|
16
16
|
}
|
|
17
17
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
-
|
|
18
|
+
getDepcheckOptionsForFolder(_folder) {
|
|
19
19
|
return {
|
|
20
20
|
ignoreBinPackage: false,
|
|
21
21
|
skipMissing: false,
|
|
22
|
-
ignorePatterns: this.
|
|
23
|
-
ignoreMatches: this.
|
|
22
|
+
ignorePatterns: this.ignoreFilePatterns,
|
|
23
|
+
ignoreMatches: this.ignorePackagePatterns,
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
}
|