From 4b98bcbb73e5fef398d500ad04f8709185835699 Mon Sep 17 00:00:00 2001 From: Stanislav Kozachenko Date: Sat, 25 Apr 2026 12:12:17 +0300 Subject: [PATCH] feat: add --disable-age and --disable-stats flags - --disable-age skips modification time calculation - --disable-stats is a shortcut for --disable-size + --disable-age Closes #249 --- src/cli/cli.controller.ts | 10 ++++++++++ src/cli/interfaces/config.interface.ts | 2 ++ src/cli/services/scan.service.ts | 6 ++++++ src/cli/ui/components/results.ui.ts | 4 ++++ src/constants/cli.constants.ts | 11 +++++++++++ src/constants/main.constants.ts | 2 ++ tests/cli/services/scan.service.test.ts | 2 ++ 7 files changed, 37 insertions(+) diff --git a/src/cli/cli.controller.ts b/src/cli/cli.controller.ts index 032d0c68..4822921a 100644 --- a/src/cli/cli.controller.ts +++ b/src/cli/cli.controller.ts @@ -543,6 +543,15 @@ export class CliController { this.config.disableSize = true; } + if (options.isTrue('disable-age')) { + this.config.disableAge = true; + } + + if (options.isTrue('disable-stats')) { + this.config.disableSize = true; + this.config.disableAge = true; + } + if (this.config.jsonStream && this.config.jsonSimple) { this.logger.error(ERROR_MSG.CANT_USE_BOTH_JSON_OPTIONS); this.exitWithError(); @@ -774,6 +783,7 @@ export class CliController { (nodeFolder) => this.scanService.calculateFolderStats(nodeFolder, { disableSize: this.config.disableSize, + disableAge: this.config.disableAge, }), 10, // Limit to 10 concurrent stat calculations at a time ), diff --git a/src/cli/interfaces/config.interface.ts b/src/cli/interfaces/config.interface.ts index 9bbae615..bfa19054 100644 --- a/src/cli/interfaces/config.interface.ts +++ b/src/cli/interfaces/config.interface.ts @@ -15,4 +15,6 @@ export interface IConfig { jsonStream: boolean; jsonSimple: boolean; disableSize: boolean; + disableAge: boolean; + disableStats: boolean; } diff --git a/src/cli/services/scan.service.ts b/src/cli/services/scan.service.ts index 1e796b73..0ab99f41 100644 --- a/src/cli/services/scan.service.ts +++ b/src/cli/services/scan.service.ts @@ -24,6 +24,7 @@ import os from 'os'; export interface CalculateFolderStatsOptions { getModificationTimeForSensitiveResults?: boolean; disableSize?: boolean; + disableAge?: boolean; } export class ScanService { @@ -85,6 +86,11 @@ export class ScanService { return size$.pipe( switchMap(async () => { + if (options.disableAge) { + nodeFolder.modificationTime = 1; + return nodeFolder; + } + if ( nodeFolder.riskAnalysis?.isSensitive && !options.getModificationTimeForSensitiveResults diff --git a/src/cli/ui/components/results.ui.ts b/src/cli/ui/components/results.ui.ts index 5bfa3532..c32a9a46 100644 --- a/src/cli/ui/components/results.ui.ts +++ b/src/cli/ui/components/results.ui.ts @@ -500,6 +500,10 @@ export class ResultsUi extends HeavyUi implements InteractiveUi { daysSinceLastModification = ''; } + if (this.config.disableAge) { + daysSinceLastModification = pc.gray(' ...'); + } + // Align to right const alignMargin = 4 - daysSinceLastModification.length; daysSinceLastModification = diff --git a/src/constants/cli.constants.ts b/src/constants/cli.constants.ts index 0075b804..8682737a 100644 --- a/src/constants/cli.constants.ts +++ b/src/constants/cli.constants.ts @@ -102,6 +102,17 @@ export const OPTIONS: ICliOptions[] = [ 'Skip size and age calculation. Useful for faster scanning and deletion when space info is not needed.', name: 'disable-size', }, + { + arg: ['--disable-age'], + description: 'Skip age (last modification time) calculation.', + name: 'disable-age', + }, + { + arg: ['--disable-stats'], + description: + 'Skip both size and age calculation. Shortcut for --disable-size --disable-age.', + name: 'disable-stats', + }, { arg: ['-v', '--version'], description: 'Show version.', diff --git a/src/constants/main.constants.ts b/src/constants/main.constants.ts index 53a16a3a..f4331646 100644 --- a/src/constants/main.constants.ts +++ b/src/constants/main.constants.ts @@ -25,6 +25,8 @@ export const DEFAULT_CONFIG: IConfig = { jsonStream: false, jsonSimple: false, disableSize: false, + disableAge: false, + disableStats: false, }; export const MARGINS = { diff --git a/tests/cli/services/scan.service.test.ts b/tests/cli/services/scan.service.test.ts index e7687d8a..52ee7b3d 100644 --- a/tests/cli/services/scan.service.test.ts +++ b/tests/cli/services/scan.service.test.ts @@ -36,6 +36,8 @@ describe('ScanService', () => { jsonStream: false, jsonSimple: false, disableSize: false, + disableAge: false, + disableStats: false, }; const mockScanFoundFolder: ScanFoundFolder = {