devkill 0.12.2
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/LICENSE +21 -0
- package/README.es.md +253 -0
- package/README.id.md +238 -0
- package/README.md +377 -0
- package/README.pt.md +241 -0
- package/README.tr.md +242 -0
- package/lib/cli/cli.controller.d.ts +81 -0
- package/lib/cli/cli.controller.js +760 -0
- package/lib/cli/cli.controller.js.map +1 -0
- package/lib/cli/interfaces/cli-options.interface.d.ts +5 -0
- package/lib/cli/interfaces/cli-options.interface.js +2 -0
- package/lib/cli/interfaces/cli-options.interface.js.map +1 -0
- package/lib/cli/interfaces/command-keys.interface.d.ts +17 -0
- package/lib/cli/interfaces/command-keys.interface.js +2 -0
- package/lib/cli/interfaces/command-keys.interface.js.map +1 -0
- package/lib/cli/interfaces/config.interface.d.ts +17 -0
- package/lib/cli/interfaces/config.interface.js +2 -0
- package/lib/cli/interfaces/config.interface.js.map +1 -0
- package/lib/cli/interfaces/index.d.ts +11 -0
- package/lib/cli/interfaces/index.js +12 -0
- package/lib/cli/interfaces/index.js.map +1 -0
- package/lib/cli/interfaces/json-output.interface.d.ts +30 -0
- package/lib/cli/interfaces/json-output.interface.js +2 -0
- package/lib/cli/interfaces/json-output.interface.js.map +1 -0
- package/lib/cli/interfaces/key-press.interface.d.ts +7 -0
- package/lib/cli/interfaces/key-press.interface.js +2 -0
- package/lib/cli/interfaces/key-press.interface.js.map +1 -0
- package/lib/cli/interfaces/node-version.interface.d.ts +5 -0
- package/lib/cli/interfaces/node-version.interface.js +2 -0
- package/lib/cli/interfaces/node-version.interface.js.map +1 -0
- package/lib/cli/interfaces/stats.interface.d.ts +15 -0
- package/lib/cli/interfaces/stats.interface.js +2 -0
- package/lib/cli/interfaces/stats.interface.js.map +1 -0
- package/lib/cli/interfaces/ui-positions.interface.d.ts +5 -0
- package/lib/cli/interfaces/ui-positions.interface.js +2 -0
- package/lib/cli/interfaces/ui-positions.interface.js.map +1 -0
- package/lib/cli/interfaces/version.interface.d.ts +5 -0
- package/lib/cli/interfaces/version.interface.js +2 -0
- package/lib/cli/interfaces/version.interface.js.map +1 -0
- package/lib/cli/models/start-parameters.model.d.ts +7 -0
- package/lib/cli/models/start-parameters.model.js +25 -0
- package/lib/cli/models/start-parameters.model.js.map +1 -0
- package/lib/cli/services/console.service.d.ts +23 -0
- package/lib/cli/services/console.service.js +87 -0
- package/lib/cli/services/console.service.js.map +1 -0
- package/lib/cli/services/https.service.d.ts +4 -0
- package/lib/cli/services/https.service.js +32 -0
- package/lib/cli/services/https.service.js.map +1 -0
- package/lib/cli/services/index.d.ts +7 -0
- package/lib/cli/services/index.js +8 -0
- package/lib/cli/services/index.js.map +1 -0
- package/lib/cli/services/json-output.service.d.ts +20 -0
- package/lib/cli/services/json-output.service.js +101 -0
- package/lib/cli/services/json-output.service.js.map +1 -0
- package/lib/cli/services/results.service.d.ts +13 -0
- package/lib/cli/services/results.service.js +61 -0
- package/lib/cli/services/results.service.js.map +1 -0
- package/lib/cli/services/scan.service.d.ts +13 -0
- package/lib/cli/services/scan.service.js +79 -0
- package/lib/cli/services/scan.service.js.map +1 -0
- package/lib/cli/services/spinner.service.d.ts +9 -0
- package/lib/cli/services/spinner.service.js +27 -0
- package/lib/cli/services/spinner.service.js.map +1 -0
- package/lib/cli/services/ui.service.d.ts +17 -0
- package/lib/cli/services/ui.service.js +59 -0
- package/lib/cli/services/ui.service.js.map +1 -0
- package/lib/cli/services/update.service.d.ts +15 -0
- package/lib/cli/services/update.service.js +37 -0
- package/lib/cli/services/update.service.js.map +1 -0
- package/lib/cli/ui/base.ui.d.ts +28 -0
- package/lib/cli/ui/base.ui.js +49 -0
- package/lib/cli/ui/base.ui.js.map +1 -0
- package/lib/cli/ui/components/general.ui.d.ts +7 -0
- package/lib/cli/ui/components/general.ui.js +13 -0
- package/lib/cli/ui/components/general.ui.js.map +1 -0
- package/lib/cli/ui/components/header/header-ui.constants.d.ts +7 -0
- package/lib/cli/ui/components/header/header-ui.constants.js +7 -0
- package/lib/cli/ui/components/header/header-ui.constants.js.map +1 -0
- package/lib/cli/ui/components/header/header.ui.d.ts +18 -0
- package/lib/cli/ui/components/header/header.ui.js +96 -0
- package/lib/cli/ui/components/header/header.ui.js.map +1 -0
- package/lib/cli/ui/components/header/stats.ui.d.ts +25 -0
- package/lib/cli/ui/components/header/stats.ui.js +198 -0
- package/lib/cli/ui/components/header/stats.ui.js.map +1 -0
- package/lib/cli/ui/components/header/status.ui.d.ts +33 -0
- package/lib/cli/ui/components/header/status.ui.js +188 -0
- package/lib/cli/ui/components/header/status.ui.js.map +1 -0
- package/lib/cli/ui/components/help/help-command.ui.d.ts +9 -0
- package/lib/cli/ui/components/help/help-command.ui.js +61 -0
- package/lib/cli/ui/components/help/help-command.ui.js.map +1 -0
- package/lib/cli/ui/components/help/help.constants.d.ts +8 -0
- package/lib/cli/ui/components/help/help.constants.js +270 -0
- package/lib/cli/ui/components/help/help.constants.js.map +1 -0
- package/lib/cli/ui/components/help/help.ui.d.ts +30 -0
- package/lib/cli/ui/components/help/help.ui.js +176 -0
- package/lib/cli/ui/components/help/help.ui.js.map +1 -0
- package/lib/cli/ui/components/logs.ui.d.ts +24 -0
- package/lib/cli/ui/components/logs.ui.js +132 -0
- package/lib/cli/ui/components/logs.ui.js.map +1 -0
- package/lib/cli/ui/components/options.ui.d.ts +29 -0
- package/lib/cli/ui/components/options.ui.js +327 -0
- package/lib/cli/ui/components/options.ui.js.map +1 -0
- package/lib/cli/ui/components/profile-picker.ui.d.ts +25 -0
- package/lib/cli/ui/components/profile-picker.ui.js +117 -0
- package/lib/cli/ui/components/profile-picker.ui.js.map +1 -0
- package/lib/cli/ui/components/result-details.ui.d.ts +23 -0
- package/lib/cli/ui/components/result-details.ui.js +182 -0
- package/lib/cli/ui/components/result-details.ui.js.map +1 -0
- package/lib/cli/ui/components/results.ui.d.ts +86 -0
- package/lib/cli/ui/components/results.ui.js +620 -0
- package/lib/cli/ui/components/results.ui.js.map +1 -0
- package/lib/cli/ui/components/warning.ui.d.ts +12 -0
- package/lib/cli/ui/components/warning.ui.js +30 -0
- package/lib/cli/ui/components/warning.ui.js.map +1 -0
- package/lib/cli/ui/heavy.ui.d.ts +18 -0
- package/lib/cli/ui/heavy.ui.js +37 -0
- package/lib/cli/ui/heavy.ui.js.map +1 -0
- package/lib/cli/ui/index.d.ts +14 -0
- package/lib/cli/ui/index.js +15 -0
- package/lib/cli/ui/index.js.map +1 -0
- package/lib/constants/cli.constants.d.ts +14 -0
- package/lib/constants/cli.constants.js +138 -0
- package/lib/constants/cli.constants.js.map +1 -0
- package/lib/constants/index.d.ts +8 -0
- package/lib/constants/index.js +9 -0
- package/lib/constants/index.js.map +1 -0
- package/lib/constants/main.constants.d.ts +96 -0
- package/lib/constants/main.constants.js +79 -0
- package/lib/constants/main.constants.js.map +1 -0
- package/lib/constants/messages.constants.d.ts +31 -0
- package/lib/constants/messages.constants.js +37 -0
- package/lib/constants/messages.constants.js.map +1 -0
- package/lib/constants/options.constants.d.ts +6 -0
- package/lib/constants/options.constants.js +8 -0
- package/lib/constants/options.constants.js.map +1 -0
- package/lib/constants/os-service-map.constants.d.ts +10 -0
- package/lib/constants/os-service-map.constants.js +11 -0
- package/lib/constants/os-service-map.constants.js.map +1 -0
- package/lib/constants/result-descriptions.constants.d.ts +142 -0
- package/lib/constants/result-descriptions.constants.js +203 -0
- package/lib/constants/result-descriptions.constants.js.map +1 -0
- package/lib/constants/sort.result.d.ts +6 -0
- package/lib/constants/sort.result.js +22 -0
- package/lib/constants/sort.result.js.map +1 -0
- package/lib/constants/spinner.constants.d.ts +5 -0
- package/lib/constants/spinner.constants.js +88 -0
- package/lib/constants/spinner.constants.js.map +1 -0
- package/lib/constants/status.constants.d.ts +7 -0
- package/lib/constants/status.constants.js +9 -0
- package/lib/constants/status.constants.js.map +1 -0
- package/lib/constants/update.constants.d.ts +2 -0
- package/lib/constants/update.constants.js +3 -0
- package/lib/constants/update.constants.js.map +1 -0
- package/lib/constants/workers.constants.d.ts +14 -0
- package/lib/constants/workers.constants.js +16 -0
- package/lib/constants/workers.constants.js.map +1 -0
- package/lib/core/constants/global-ignored.constants.d.ts +1 -0
- package/lib/core/constants/global-ignored.constants.js +44 -0
- package/lib/core/constants/global-ignored.constants.js.map +1 -0
- package/lib/core/constants/index.d.ts +1 -0
- package/lib/core/constants/index.js +2 -0
- package/lib/core/constants/index.js.map +1 -0
- package/lib/core/constants/profiles.constants.d.ts +8 -0
- package/lib/core/constants/profiles.constants.js +138 -0
- package/lib/core/constants/profiles.constants.js.map +1 -0
- package/lib/core/devkill.d.ts +25 -0
- package/lib/core/devkill.js +129 -0
- package/lib/core/devkill.js.map +1 -0
- package/lib/core/index.d.ts +4 -0
- package/lib/core/index.js +5 -0
- package/lib/core/index.js.map +1 -0
- package/lib/core/interfaces/devkill.interface.d.ts +78 -0
- package/lib/core/interfaces/devkill.interface.js +2 -0
- package/lib/core/interfaces/devkill.interface.js.map +1 -0
- package/lib/core/interfaces/devkillrc-config.interface.d.ts +87 -0
- package/lib/core/interfaces/devkillrc-config.interface.js +12 -0
- package/lib/core/interfaces/devkillrc-config.interface.js.map +1 -0
- package/lib/core/interfaces/file-service.interface.d.ts +76 -0
- package/lib/core/interfaces/file-service.interface.js +2 -0
- package/lib/core/interfaces/file-service.interface.js.map +1 -0
- package/lib/core/interfaces/folder.interface.d.ts +89 -0
- package/lib/core/interfaces/folder.interface.js +2 -0
- package/lib/core/interfaces/folder.interface.js.map +1 -0
- package/lib/core/interfaces/index.d.ts +6 -0
- package/lib/core/interfaces/index.js +7 -0
- package/lib/core/interfaces/index.js.map +1 -0
- package/lib/core/interfaces/logger-service.interface.d.ts +59 -0
- package/lib/core/interfaces/logger-service.interface.js +2 -0
- package/lib/core/interfaces/logger-service.interface.js.map +1 -0
- package/lib/core/interfaces/npkill.interface.d.ts +78 -0
- package/lib/core/interfaces/npkill.interface.js +2 -0
- package/lib/core/interfaces/npkill.interface.js.map +1 -0
- package/lib/core/interfaces/npkillrc-config.interface.d.ts +87 -0
- package/lib/core/interfaces/npkillrc-config.interface.js +12 -0
- package/lib/core/interfaces/npkillrc-config.interface.js.map +1 -0
- package/lib/core/interfaces/profile.interface.d.ts +9 -0
- package/lib/core/interfaces/profile.interface.js +2 -0
- package/lib/core/interfaces/profile.interface.js.map +1 -0
- package/lib/core/interfaces/search-status.model.d.ts +35 -0
- package/lib/core/interfaces/search-status.model.js +48 -0
- package/lib/core/interfaces/search-status.model.js.map +1 -0
- package/lib/core/interfaces/services.interface.d.ts +26 -0
- package/lib/core/interfaces/services.interface.js +2 -0
- package/lib/core/interfaces/services.interface.js.map +1 -0
- package/lib/core/npkill.d.ts +25 -0
- package/lib/core/npkill.js +129 -0
- package/lib/core/npkill.js.map +1 -0
- package/lib/core/services/config/config-merger.d.ts +17 -0
- package/lib/core/services/config/config-merger.js +57 -0
- package/lib/core/services/config/config-merger.js.map +1 -0
- package/lib/core/services/config/config-validator.d.ts +3 -0
- package/lib/core/services/config/config-validator.js +43 -0
- package/lib/core/services/config/config-validator.js.map +1 -0
- package/lib/core/services/config/index.d.ts +4 -0
- package/lib/core/services/config/index.js +5 -0
- package/lib/core/services/config/index.js.map +1 -0
- package/lib/core/services/config/profile-validator.d.ts +6 -0
- package/lib/core/services/config/profile-validator.js +68 -0
- package/lib/core/services/config/profile-validator.js.map +1 -0
- package/lib/core/services/config/property-validators.d.ts +33 -0
- package/lib/core/services/config/property-validators.js +125 -0
- package/lib/core/services/config/property-validators.js.map +1 -0
- package/lib/core/services/config.service.d.ts +37 -0
- package/lib/core/services/config.service.js +100 -0
- package/lib/core/services/config.service.js.map +1 -0
- package/lib/core/services/files/files.service.d.ts +28 -0
- package/lib/core/services/files/files.service.js +207 -0
- package/lib/core/services/files/files.service.js.map +1 -0
- package/lib/core/services/files/files.worker.d.ts +1 -0
- package/lib/core/services/files/files.worker.js +286 -0
- package/lib/core/services/files/files.worker.js.map +1 -0
- package/lib/core/services/files/files.worker.service.d.ts +90 -0
- package/lib/core/services/files/files.worker.service.js +216 -0
- package/lib/core/services/files/files.worker.service.js.map +1 -0
- package/lib/core/services/files/index.d.ts +4 -0
- package/lib/core/services/files/index.js +5 -0
- package/lib/core/services/files/index.js.map +1 -0
- package/lib/core/services/files/unix-files.service.d.ts +9 -0
- package/lib/core/services/files/unix-files.service.js +28 -0
- package/lib/core/services/files/unix-files.service.js.map +1 -0
- package/lib/core/services/files/windows-files.service.d.ts +9 -0
- package/lib/core/services/files/windows-files.service.js +16 -0
- package/lib/core/services/files/windows-files.service.js.map +1 -0
- package/lib/core/services/index.d.ts +5 -0
- package/lib/core/services/index.js +6 -0
- package/lib/core/services/index.js.map +1 -0
- package/lib/core/services/logger.service.d.ts +22 -0
- package/lib/core/services/logger.service.js +84 -0
- package/lib/core/services/logger.service.js.map +1 -0
- package/lib/core/services/profiles.service.d.ts +54 -0
- package/lib/core/services/profiles.service.js +86 -0
- package/lib/core/services/profiles.service.js.map +1 -0
- package/lib/core/services/stream.service.d.ts +12 -0
- package/lib/core/services/stream.service.js +39 -0
- package/lib/core/services/stream.service.js.map +1 -0
- package/lib/dirname.d.ts +2 -0
- package/lib/dirname.js +6 -0
- package/lib/dirname.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/main.d.ts +2 -0
- package/lib/main.js +19 -0
- package/lib/main.js.map +1 -0
- package/lib/utils/get-file-content.d.ts +1 -0
- package/lib/utils/get-file-content.js +6 -0
- package/lib/utils/get-file-content.js.map +1 -0
- package/lib/utils/is-safe-to-delete.d.ts +1 -0
- package/lib/utils/is-safe-to-delete.js +9 -0
- package/lib/utils/is-safe-to-delete.js.map +1 -0
- package/lib/utils/unit-conversions.d.ts +11 -0
- package/lib/utils/unit-conversions.js +54 -0
- package/lib/utils/unit-conversions.js.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { FileWorkerService } from './services/files/index.js';
|
|
2
|
+
import { from } from 'rxjs';
|
|
3
|
+
import { catchError, filter, map, mergeMap, take, tap } from 'rxjs/operators';
|
|
4
|
+
import { ScanStatus } from './interfaces/search-status.model.js';
|
|
5
|
+
import _dirname from '../dirname.js';
|
|
6
|
+
import { LoggerService } from './services/logger.service.js';
|
|
7
|
+
import { StreamService } from './services/stream.service.js';
|
|
8
|
+
import { ProfilesService } from './services/profiles.service.js';
|
|
9
|
+
import { OSServiceMap } from '../constants/os-service-map.constants.js';
|
|
10
|
+
import { getFileContent } from '../utils/get-file-content.js';
|
|
11
|
+
import { ResultsService } from '../cli/services/results.service.js';
|
|
12
|
+
/**
|
|
13
|
+
* Main npkill class that implements the core directory scanning and cleanup functionality.
|
|
14
|
+
* Provides methods for recursive directory scanning, size calculation, file analysis,
|
|
15
|
+
* and safe deletion operations.
|
|
16
|
+
*/
|
|
17
|
+
export class Npkill {
|
|
18
|
+
services;
|
|
19
|
+
constructor(customServices) {
|
|
20
|
+
const defaultServices = createDefaultServices(customServices?.searchStatus, customServices?.logger);
|
|
21
|
+
this.services = { ...defaultServices, ...customServices };
|
|
22
|
+
this.logger.info(process.argv.join(' '));
|
|
23
|
+
this.logger.info(`Npkill started! v${this.getVersion()}`);
|
|
24
|
+
}
|
|
25
|
+
searchDuration = 0;
|
|
26
|
+
startScan$(rootPath, options) {
|
|
27
|
+
const { fileService } = this.services;
|
|
28
|
+
this.logger.info(`Scan started in ${rootPath}`);
|
|
29
|
+
const startTime = Date.now();
|
|
30
|
+
return fileService.listDir(rootPath, options).pipe(catchError(() => {
|
|
31
|
+
throw new Error('Error while listing directories');
|
|
32
|
+
}), mergeMap((dataFolder) => from(splitData(dataFolder))), filter((path) => path !== ''), map((path) => {
|
|
33
|
+
if (options.performRiskAnalysis !== undefined &&
|
|
34
|
+
!options.performRiskAnalysis) {
|
|
35
|
+
return { path };
|
|
36
|
+
}
|
|
37
|
+
const riskAnalysis = fileService.isDangerous(path);
|
|
38
|
+
return {
|
|
39
|
+
path,
|
|
40
|
+
riskAnalysis,
|
|
41
|
+
};
|
|
42
|
+
}), tap((nodeFolder) => this.logger.info(`Folder found: ${String(nodeFolder.path)}`)), tap({
|
|
43
|
+
complete: () => {
|
|
44
|
+
this.searchDuration = (Date.now() - startTime) / 1000;
|
|
45
|
+
this.logger.info(`Search completed after ${this.searchDuration}s`);
|
|
46
|
+
},
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
getSize$(path) {
|
|
50
|
+
const { fileService } = this.services;
|
|
51
|
+
this.logger.info(`Calculating folder size for ${String(path)}`);
|
|
52
|
+
return fileService.getFolderSize(path).pipe(take(1), map((size) => ({ size, unit: 'bytes' })), tap(({ size }) => this.logger.info(`Size of ${path}: ${size} bytes`)));
|
|
53
|
+
}
|
|
54
|
+
getNewestFile$(path) {
|
|
55
|
+
const { fileService } = this.services;
|
|
56
|
+
this.logger.info(`Calculating last mod. of ${path}`);
|
|
57
|
+
return from(fileService.getRecentModificationInDir(path)).pipe(tap((result) => {
|
|
58
|
+
if (!result) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.logger.info(`Last mod. of ${path}: ${result.timestamp}`);
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
delete$(path, options) {
|
|
65
|
+
const { fileService } = this.services;
|
|
66
|
+
this.logger.info(`Deleting ${String(path)} ${options?.dryRun ? '(dry run)' : ''}...`);
|
|
67
|
+
const deleteOperation = options?.dryRun
|
|
68
|
+
? from(fileService.fakeDeleteDir())
|
|
69
|
+
: from(fileService.deleteDir(path));
|
|
70
|
+
return deleteOperation.pipe(map((result) => {
|
|
71
|
+
if (!result) {
|
|
72
|
+
this.logger.error(`Failed to delete ${String(path)}`);
|
|
73
|
+
return { path, success: false };
|
|
74
|
+
}
|
|
75
|
+
this.logger.info(`Deleted ${String(path)}: ${result}`);
|
|
76
|
+
return {
|
|
77
|
+
path,
|
|
78
|
+
success: result,
|
|
79
|
+
};
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
getLogs$() {
|
|
83
|
+
return this.services.logger.getLog$();
|
|
84
|
+
}
|
|
85
|
+
stopScan() {
|
|
86
|
+
this.logger.info('Stopping scan...');
|
|
87
|
+
this.services.fileService.stopScan();
|
|
88
|
+
}
|
|
89
|
+
isValidRootFolder(path) {
|
|
90
|
+
return this.services.fileService.isValidRootFolder(path);
|
|
91
|
+
}
|
|
92
|
+
getVersion() {
|
|
93
|
+
const packageJson = _dirname + '/../package.json';
|
|
94
|
+
const packageData = JSON.parse(getFileContent(packageJson));
|
|
95
|
+
return packageData.version;
|
|
96
|
+
}
|
|
97
|
+
get logger() {
|
|
98
|
+
return this.services.logger;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function createDefaultServices(searchStatus, logger) {
|
|
102
|
+
const actualLogger = logger || new LoggerService();
|
|
103
|
+
const actualSearchStatus = searchStatus || new ScanStatus();
|
|
104
|
+
const fileWorkerService = new FileWorkerService(actualLogger, actualSearchStatus);
|
|
105
|
+
const streamService = new StreamService();
|
|
106
|
+
const resultsService = new ResultsService();
|
|
107
|
+
const profilesService = new ProfilesService();
|
|
108
|
+
const OSService = OSServiceMap[process.platform];
|
|
109
|
+
if (typeof OSService === 'undefined') {
|
|
110
|
+
throw new Error(`Unsupported platform: ${process.platform}. Cannot load OS service.`);
|
|
111
|
+
}
|
|
112
|
+
const fileService = new OSService(streamService, fileWorkerService);
|
|
113
|
+
return {
|
|
114
|
+
logger: actualLogger,
|
|
115
|
+
searchStatus: actualSearchStatus,
|
|
116
|
+
fileService,
|
|
117
|
+
fileWorkerService,
|
|
118
|
+
streamService,
|
|
119
|
+
resultsService,
|
|
120
|
+
profilesService,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function splitData(data, separator = '\n') {
|
|
124
|
+
if (data === '') {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
return data.split(separator);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=npkill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npkill.js","sourceRoot":"","sources":["../../src/core/npkill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IDevkillrcConfig } from '../../interfaces/devkillrc-config.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Merges exclude arrays from base and file config, avoiding duplicates
|
|
4
|
+
*/
|
|
5
|
+
export declare function mergeExcludeArrays(baseExclude: unknown, fileExclude: string[]): string[];
|
|
6
|
+
/**
|
|
7
|
+
* Merges a simple property (direct override)
|
|
8
|
+
*/
|
|
9
|
+
export declare function mergeProperty<T>(merged: Record<string, unknown>, key: string, value: T): void;
|
|
10
|
+
/**
|
|
11
|
+
* Type guard to check if a property exists and is not undefined
|
|
12
|
+
*/
|
|
13
|
+
export declare function isDefined<T>(value: T | undefined): value is T;
|
|
14
|
+
/**
|
|
15
|
+
* Applies all file config properties to the merged config
|
|
16
|
+
*/
|
|
17
|
+
export declare function applyFileConfigProperties(merged: Record<string, unknown>, baseConfig: Record<string, unknown>, fileConfig: IDevkillrcConfig): void;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merges exclude arrays from base and file config, avoiding duplicates
|
|
3
|
+
*/
|
|
4
|
+
export function mergeExcludeArrays(baseExclude, fileExclude) {
|
|
5
|
+
const base = Array.isArray(baseExclude) ? baseExclude : [];
|
|
6
|
+
return [...new Set([...base, ...fileExclude])];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Merges a simple property (direct override)
|
|
10
|
+
*/
|
|
11
|
+
export function mergeProperty(merged, key, value) {
|
|
12
|
+
merged[key] = value;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Type guard to check if a property exists and is not undefined
|
|
16
|
+
*/
|
|
17
|
+
export function isDefined(value) {
|
|
18
|
+
return value !== undefined;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Applies all file config properties to the merged config
|
|
22
|
+
*/
|
|
23
|
+
export function applyFileConfigProperties(merged, baseConfig, fileConfig) {
|
|
24
|
+
// rootDir
|
|
25
|
+
if (isDefined(fileConfig.rootDir)) {
|
|
26
|
+
mergeProperty(merged, 'rootDir', fileConfig.rootDir);
|
|
27
|
+
}
|
|
28
|
+
// exclude (special merge logic)
|
|
29
|
+
if (isDefined(fileConfig.exclude)) {
|
|
30
|
+
merged.exclude = mergeExcludeArrays(baseConfig.exclude, fileConfig.exclude);
|
|
31
|
+
}
|
|
32
|
+
// sortBy
|
|
33
|
+
if (isDefined(fileConfig.sortBy)) {
|
|
34
|
+
mergeProperty(merged, 'sortBy', fileConfig.sortBy);
|
|
35
|
+
}
|
|
36
|
+
// sizeUnit
|
|
37
|
+
if (isDefined(fileConfig.sizeUnit)) {
|
|
38
|
+
mergeProperty(merged, 'sizeUnit', fileConfig.sizeUnit);
|
|
39
|
+
}
|
|
40
|
+
// excludeSensitiveResults
|
|
41
|
+
if (isDefined(fileConfig.excludeSensitiveResults)) {
|
|
42
|
+
mergeProperty(merged, 'excludeSensitiveResults', fileConfig.excludeSensitiveResults);
|
|
43
|
+
}
|
|
44
|
+
// dryRun
|
|
45
|
+
if (isDefined(fileConfig.dryRun)) {
|
|
46
|
+
mergeProperty(merged, 'dryRun', fileConfig.dryRun);
|
|
47
|
+
}
|
|
48
|
+
// checkUpdates
|
|
49
|
+
if (isDefined(fileConfig.checkUpdates)) {
|
|
50
|
+
mergeProperty(merged, 'checkUpdates', fileConfig.checkUpdates);
|
|
51
|
+
}
|
|
52
|
+
// defaultProfiles
|
|
53
|
+
if (isDefined(fileConfig.defaultProfiles)) {
|
|
54
|
+
mergeProperty(merged, 'defaultProfiles', fileConfig.defaultProfiles);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=config-merger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-merger.js","sourceRoot":"","sources":["../../../../src/core/services/config/config-merger.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAoB,EACpB,WAAqB;IAErB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,WAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAA+B,EAC/B,GAAW,EACX,KAAQ;IAER,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAI,KAAoB;IAC/C,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAA+B,EAC/B,UAAmC,EACnC,UAA4B;IAE5B,UAAU;IACV,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,gCAAgC;IAChC,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9E,CAAC;IAED,SAAS;IACT,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,WAAW;IACX,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,0BAA0B;IAC1B,IAAI,SAAS,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAClD,aAAa,CACX,MAAM,EACN,yBAAyB,EACzB,UAAU,CAAC,uBAAuB,CACnC,CAAC;IACJ,CAAC;IAED,SAAS;IACT,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,eAAe;IACf,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IAED,kBAAkB;IAClB,IAAI,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1C,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { VALID_DEVKILLRC_PROPERTIES, } from '../../interfaces/devkillrc-config.interface.js';
|
|
2
|
+
import { validateProfiles } from './profile-validator.js';
|
|
3
|
+
import { validateBoolean, validateDefaultProfiles, validateExclude, validateRootDir, validateSizeUnit, validateSortBy, validateUnknownProperties, } from './property-validators.js';
|
|
4
|
+
export function validateConfig(config) {
|
|
5
|
+
// Validate that config is an object
|
|
6
|
+
if (typeof config !== 'object' || config === null) {
|
|
7
|
+
return { isValid: false, error: 'Configuration must be an object.' };
|
|
8
|
+
}
|
|
9
|
+
// Validate unknown properties first
|
|
10
|
+
const unknownPropsResult = validateUnknownProperties(config, VALID_DEVKILLRC_PROPERTIES);
|
|
11
|
+
if (!unknownPropsResult.isValid) {
|
|
12
|
+
return unknownPropsResult;
|
|
13
|
+
}
|
|
14
|
+
// Validate each property
|
|
15
|
+
const validators = [
|
|
16
|
+
{ name: 'rootDir', result: validateRootDir(config.rootDir) },
|
|
17
|
+
{ name: 'exclude', result: validateExclude(config.exclude) },
|
|
18
|
+
{ name: 'sortBy', result: validateSortBy(config.sortBy) },
|
|
19
|
+
{ name: 'sizeUnit', result: validateSizeUnit(config.sizeUnit) },
|
|
20
|
+
{
|
|
21
|
+
name: 'excludeSensitiveResults',
|
|
22
|
+
result: validateBoolean(config.excludeSensitiveResults, 'excludeSensitiveResults'),
|
|
23
|
+
},
|
|
24
|
+
{ name: 'dryRun', result: validateBoolean(config.dryRun, 'dryRun') },
|
|
25
|
+
{
|
|
26
|
+
name: 'checkUpdates',
|
|
27
|
+
result: validateBoolean(config.checkUpdates, 'checkUpdates'),
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'defaultProfiles',
|
|
31
|
+
result: validateDefaultProfiles(config.defaultProfiles),
|
|
32
|
+
},
|
|
33
|
+
{ name: 'profiles', result: validateProfiles(config.profiles) },
|
|
34
|
+
];
|
|
35
|
+
// Return first validation error found
|
|
36
|
+
for (const validator of validators) {
|
|
37
|
+
if (!validator.result.isValid) {
|
|
38
|
+
return validator.result;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { isValid: true };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=config-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../../../src/core/services/config/config-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0BAA0B,GAC3B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEL,eAAe,EACf,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,UAAU,cAAc,CAAC,MAAwB;IACrD,oCAAoC;IACpC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IACvE,CAAC;IAED,oCAAoC;IACpC,MAAM,kBAAkB,GAAG,yBAAyB,CAClD,MAAM,EACN,0BAA0B,CAC3B,CAAC;IACF,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,yBAAyB;IACzB,MAAM,UAAU,GAAsD;QACpE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC5D,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC5D,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACzD,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QAC/D;YACE,IAAI,EAAE,yBAAyB;YAC/B,MAAM,EAAE,eAAe,CACrB,MAAM,CAAC,uBAAuB,EAC9B,yBAAyB,CAC1B;SACF;QACD,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;QACpE;YACE,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SAC7D;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,uBAAuB,CAAC,MAAM,CAAC,eAAe,CAAC;SACxD;QACD,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;KAChE,CAAC;IAEF,sCAAsC;IACtC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { validateConfig } from './config-validator.js';
|
|
2
|
+
export { validateRootDir, validateExclude, validateSortBy, validateSizeUnit, validateBoolean, validateDefaultProfiles, validateUnknownProperties, type ValidationResult, } from './property-validators.js';
|
|
3
|
+
export { validateProfile, validateProfiles } from './profile-validator.js';
|
|
4
|
+
export { mergeExcludeArrays, mergeProperty, isDefined, applyFileConfigProperties, } from './config-merger.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { validateConfig } from './config-validator.js';
|
|
2
|
+
export { validateRootDir, validateExclude, validateSortBy, validateSizeUnit, validateBoolean, validateDefaultProfiles, validateUnknownProperties, } from './property-validators.js';
|
|
3
|
+
export { validateProfile, validateProfiles } from './profile-validator.js';
|
|
4
|
+
export { mergeExcludeArrays, mergeProperty, isDefined, applyFileConfigProperties, } from './config-merger.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/services/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,yBAAyB,GAE1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ValidationResult } from './property-validators.js';
|
|
2
|
+
export declare function validateProfile(profileName: string, profile: unknown): ValidationResult;
|
|
3
|
+
/**
|
|
4
|
+
* Validates the profiles property (all profiles)
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateProfiles(value: unknown): ValidationResult;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export function validateProfile(profileName, profile) {
|
|
2
|
+
if (typeof profile !== 'object' || profile === null) {
|
|
3
|
+
return {
|
|
4
|
+
isValid: false,
|
|
5
|
+
error: `Profile "${profileName}" must be an object.`,
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
const profileObj = profile;
|
|
9
|
+
// Validate description
|
|
10
|
+
if (!profileObj.description || typeof profileObj.description !== 'string') {
|
|
11
|
+
return {
|
|
12
|
+
isValid: false,
|
|
13
|
+
error: `Profile "${profileName}" must have a description property (string).`,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// Validate targets property exists
|
|
17
|
+
if (!profileObj.targets) {
|
|
18
|
+
return {
|
|
19
|
+
isValid: false,
|
|
20
|
+
error: `Profile "${profileName}" must have a targets property.`,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Validate targets is an array
|
|
24
|
+
if (!Array.isArray(profileObj.targets)) {
|
|
25
|
+
return {
|
|
26
|
+
isValid: false,
|
|
27
|
+
error: `Profile "${profileName}" targets must be an array of strings.`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Validate all targets are strings
|
|
31
|
+
if (!profileObj.targets.every((t) => typeof t === 'string')) {
|
|
32
|
+
return {
|
|
33
|
+
isValid: false,
|
|
34
|
+
error: `All targets in profile "${profileName}" must be strings.`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Validate targets array is not empty
|
|
38
|
+
if (profileObj.targets.length === 0) {
|
|
39
|
+
return {
|
|
40
|
+
isValid: false,
|
|
41
|
+
error: `Profile "${profileName}" targets array cannot be empty.`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return { isValid: true };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validates the profiles property (all profiles)
|
|
48
|
+
*/
|
|
49
|
+
export function validateProfiles(value) {
|
|
50
|
+
if (value === undefined) {
|
|
51
|
+
return { isValid: true };
|
|
52
|
+
}
|
|
53
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
54
|
+
return {
|
|
55
|
+
isValid: false,
|
|
56
|
+
error: 'profiles must be an object.',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Validate each profile
|
|
60
|
+
for (const [profileName, profile] of Object.entries(value)) {
|
|
61
|
+
const result = validateProfile(profileName, profile);
|
|
62
|
+
if (!result.isValid) {
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { isValid: true };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=profile-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-validator.js","sourceRoot":"","sources":["../../../../src/core/services/config/profile-validator.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,OAAgB;IAEhB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY,WAAW,sBAAsB;SACrD,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAkC,CAAC;IAEtD,uBAAuB;IACvB,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY,WAAW,8CAA8C;SAC7E,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY,WAAW,iCAAiC;SAChE,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY,WAAW,wCAAwC;SACvE,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,2BAA2B,WAAW,oBAAoB;SAClE,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY,WAAW,kCAAkC;SACjE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,6BAA6B;SACrC,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IDevkillrcConfig } from '../../interfaces/devkillrc-config.interface.js';
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
isValid: boolean;
|
|
4
|
+
error?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Validates the rootDir property
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateRootDir(value: unknown): ValidationResult;
|
|
10
|
+
/**
|
|
11
|
+
* Validates the exclude property
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateExclude(value: unknown): ValidationResult;
|
|
14
|
+
/**
|
|
15
|
+
* Validates the sortBy property
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateSortBy(value: unknown): ValidationResult;
|
|
18
|
+
/**
|
|
19
|
+
* Validates the sizeUnit property
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateSizeUnit(value: unknown): ValidationResult;
|
|
22
|
+
/**
|
|
23
|
+
* Validates a boolean property
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateBoolean(value: unknown, propertyName: string): ValidationResult;
|
|
26
|
+
/**
|
|
27
|
+
* Validates the defaultProfiles property
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateDefaultProfiles(value: unknown): ValidationResult;
|
|
30
|
+
/**
|
|
31
|
+
* Validates unknown properties
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateUnknownProperties(config: IDevkillrcConfig, validProperties: readonly string[]): ValidationResult;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
const VALID_SORT_OPTIONS = ['none', 'size', 'path', 'age'];
|
|
2
|
+
const VALID_SIZE_UNITS = ['auto', 'mb', 'gb'];
|
|
3
|
+
/**
|
|
4
|
+
* Validates the rootDir property
|
|
5
|
+
*/
|
|
6
|
+
export function validateRootDir(value) {
|
|
7
|
+
if (value === undefined) {
|
|
8
|
+
return { isValid: true };
|
|
9
|
+
}
|
|
10
|
+
if (typeof value !== 'string') {
|
|
11
|
+
return {
|
|
12
|
+
isValid: false,
|
|
13
|
+
error: 'rootDir must be a string.',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
if (value.trim() === '') {
|
|
17
|
+
return {
|
|
18
|
+
isValid: false,
|
|
19
|
+
error: 'rootDir cannot be an empty string.',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return { isValid: true };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validates the exclude property
|
|
26
|
+
*/
|
|
27
|
+
export function validateExclude(value) {
|
|
28
|
+
if (value === undefined) {
|
|
29
|
+
return { isValid: true };
|
|
30
|
+
}
|
|
31
|
+
if (!Array.isArray(value)) {
|
|
32
|
+
return {
|
|
33
|
+
isValid: false,
|
|
34
|
+
error: 'exclude must be an array of strings.',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (!value.every((item) => typeof item === 'string')) {
|
|
38
|
+
return {
|
|
39
|
+
isValid: false,
|
|
40
|
+
error: 'All exclude items must be strings.',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return { isValid: true };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validates the sortBy property
|
|
47
|
+
*/
|
|
48
|
+
export function validateSortBy(value) {
|
|
49
|
+
if (value === undefined) {
|
|
50
|
+
return { isValid: true };
|
|
51
|
+
}
|
|
52
|
+
if (!VALID_SORT_OPTIONS.includes(value)) {
|
|
53
|
+
return {
|
|
54
|
+
isValid: false,
|
|
55
|
+
error: `sortBy must be one of: ${VALID_SORT_OPTIONS.join(', ')}.`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return { isValid: true };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validates the sizeUnit property
|
|
62
|
+
*/
|
|
63
|
+
export function validateSizeUnit(value) {
|
|
64
|
+
if (value === undefined) {
|
|
65
|
+
return { isValid: true };
|
|
66
|
+
}
|
|
67
|
+
if (!VALID_SIZE_UNITS.includes(value)) {
|
|
68
|
+
return {
|
|
69
|
+
isValid: false,
|
|
70
|
+
error: `sizeUnit must be one of: ${VALID_SIZE_UNITS.join(', ')}.`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return { isValid: true };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Validates a boolean property
|
|
77
|
+
*/
|
|
78
|
+
export function validateBoolean(value, propertyName) {
|
|
79
|
+
if (value === undefined) {
|
|
80
|
+
return { isValid: true };
|
|
81
|
+
}
|
|
82
|
+
if (typeof value !== 'boolean') {
|
|
83
|
+
return {
|
|
84
|
+
isValid: false,
|
|
85
|
+
error: `${propertyName} must be a boolean.`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { isValid: true };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Validates the defaultProfiles property
|
|
92
|
+
*/
|
|
93
|
+
export function validateDefaultProfiles(value) {
|
|
94
|
+
if (value === undefined) {
|
|
95
|
+
return { isValid: true };
|
|
96
|
+
}
|
|
97
|
+
if (!Array.isArray(value)) {
|
|
98
|
+
return {
|
|
99
|
+
isValid: false,
|
|
100
|
+
error: 'defaultProfiles must be an array of strings.',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (!value.every((item) => typeof item === 'string')) {
|
|
104
|
+
return {
|
|
105
|
+
isValid: false,
|
|
106
|
+
error: 'All defaultProfiles items must be strings.',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return { isValid: true };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Validates unknown properties
|
|
113
|
+
*/
|
|
114
|
+
export function validateUnknownProperties(config, validProperties) {
|
|
115
|
+
const unknownProps = Object.keys(config).filter((key) => !validProperties.includes(key));
|
|
116
|
+
if (unknownProps.length > 0) {
|
|
117
|
+
return {
|
|
118
|
+
isValid: false,
|
|
119
|
+
error: `Unknown configuration ${unknownProps.length === 1 ? 'property' : 'properties'}:` +
|
|
120
|
+
` ${unknownProps.join(', ')}. Valid properties are: ${validProperties.join(', ')}.`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return { isValid: true };
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=property-validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-validators.js","sourceRoot":"","sources":["../../../../src/core/services/config/property-validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { IConfigLoadResult, IDevkillrcConfig } from '../interfaces/devkillrc-config.interface.js';
|
|
2
|
+
import type { PROFILE } from '../interfaces/profile.interface.js';
|
|
3
|
+
/**
|
|
4
|
+
* Service responsible for loading and parsing .devkillrc configuration files.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ConfigService {
|
|
7
|
+
/**
|
|
8
|
+
* Loads configuration with priority order:
|
|
9
|
+
* 1. Custom path specified via --config parameter
|
|
10
|
+
* 2. Current working directory ./.devkillrc
|
|
11
|
+
* 3. User's home directory ~/.devkillrc
|
|
12
|
+
* @param customPath Optional custom path to a configuration file
|
|
13
|
+
* @returns Configuration load result containing the parsed config or error information
|
|
14
|
+
*/
|
|
15
|
+
loadConfig(customPath?: string): IConfigLoadResult;
|
|
16
|
+
/**
|
|
17
|
+
* Resolves the configuration file path based on priority order.
|
|
18
|
+
* Priority: custom path > cwd > home directory
|
|
19
|
+
* @param customPath Optional custom path specified by user
|
|
20
|
+
* @returns Resolved configuration file path
|
|
21
|
+
*/
|
|
22
|
+
private resolveConfigPath;
|
|
23
|
+
/**
|
|
24
|
+
* Merges configuration from .devkillrc with a base configuration.
|
|
25
|
+
* Config file values take precedence over base values.
|
|
26
|
+
* @param baseConfig Base configuration object
|
|
27
|
+
* @param fileConfig Configuration loaded from .devkillrc
|
|
28
|
+
* @returns Merged configuration
|
|
29
|
+
*/
|
|
30
|
+
mergeConfigs<T extends Record<string, unknown>>(baseConfig: T, fileConfig: IDevkillrcConfig | null): T;
|
|
31
|
+
/**
|
|
32
|
+
* Gets custom profiles from the configuration file.
|
|
33
|
+
* @param config Configuration loaded from .devkillrc
|
|
34
|
+
* @returns Record of user-defined profiles
|
|
35
|
+
*/
|
|
36
|
+
getUserDefinedProfiles(config: IDevkillrcConfig | null): Record<string, PROFILE>;
|
|
37
|
+
}
|