node-janitor 1.1.0 โ†’ 1.2.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 CHANGED
@@ -17,6 +17,11 @@
17
17
  - ๐Ÿ“Š **Reports** - Detailed analytics
18
18
  - โšก **Fast Mode** - Native OS commands for speed
19
19
  - ๐Ÿ”„ **CI/CD Ready** - Silent mode with JSON output
20
+ - โš™๏ธ **Config File** - Persistent settings with `.janitorrc`
21
+ - ๐Ÿ”€ **Git-aware** - Skip repos with uncommitted changes
22
+ - ๐ŸŒ **Multi-language** - 8 languages supported
23
+ - ๐Ÿ‘€ **Watch Mode** - Continuous monitoring
24
+ - ๐Ÿ“… **Scheduled Cleanup** - Cron-style automation
20
25
 
21
26
  ## ๐Ÿ“ฆ Installation
22
27
 
@@ -47,6 +52,41 @@ node-janitor --older-than 30d
47
52
  node-janitor --interactive
48
53
  ```
49
54
 
55
+ ## ๐Ÿ–ฅ๏ธ Interactive TUI Mode (NEW!)
56
+
57
+ Launch a full-screen, keyboard-navigable interface similar to npkill:
58
+
59
+ ```bash
60
+ # Start TUI mode
61
+ node-janitor --live
62
+
63
+ # Or use the tui subcommand
64
+ node-janitor tui --path ~/projects
65
+ ```
66
+
67
+ **Features:**
68
+ - โŒจ๏ธ **Keyboard Navigation** - Use arrow keys or j/k to navigate
69
+ - โ˜‘๏ธ **Multi-select** - Press SPACE to select/deselect folders
70
+ - ๐Ÿ”„ **Sort toggle** - Press S to switch between size/age sorting
71
+ - ๐ŸŽจ **Color-coded** - Green (new), Yellow (medium), Red (old)
72
+ - ๐Ÿ—‘๏ธ **Quick delete** - Press D to delete selected folders
73
+ - ๐Ÿ“Š **Real-time stats** - See total size and selection count
74
+
75
+ ```
76
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
77
+ โ”‚ ๐Ÿงน NODE JANITOR - Interactive Mode โ”‚
78
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
79
+ โ”‚ ๐Ÿ“Š Found: 15 folders | Total: 2.5 GB | Selected: 3 (523 MB) โ”‚
80
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
81
+ โ”‚ > โ–  ~/projects/old-app/node_modules 523 MB 180 days โ”‚
82
+ โ”‚ โ–ก ~/projects/test-project/node_modules 312 MB 95 days โ”‚
83
+ โ”‚ โ–  ~/projects/archived/node_modules 245 MB 45 days โ”‚
84
+ โ”‚ โ–ก ~/projects/client-work/node_modules 198 MB 30 days โ”‚
85
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
86
+ โ”‚ [โ†‘/โ†“] Navigate [SPACE] Select [A] All [S] Sort [D] Delete โ”‚
87
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
88
+ ```
89
+
50
90
  ## ๐Ÿ“– Usage
51
91
 
52
92
  ### Basic Commands
@@ -151,6 +191,79 @@ node-janitor --json
151
191
  ```bash
152
192
  # Exclude specific folders
153
193
  node-janitor --exclude "important-project,client-work"
194
+
195
+ # Include only matching patterns (whitelist)
196
+ node-janitor --include "work-*,client-*"
197
+ ```
198
+
199
+ ### Git-aware Cleanup
200
+
201
+ ```bash
202
+ # Skip repos with uncommitted changes
203
+ node-janitor --skip-dirty-git
204
+
205
+ # Only process folders inside git repos
206
+ node-janitor --git-only
207
+ ```
208
+
209
+ ### Config File
210
+
211
+ Create `.janitorrc` in your home directory or project:
212
+
213
+ ```json
214
+ {
215
+ "exclude": ["important-project"],
216
+ "defaultOlderThan": "30d",
217
+ "defaultPath": "~/projects",
218
+ "lang": "vi"
219
+ }
220
+ ```
221
+
222
+ Use custom config:
223
+ ```bash
224
+ node-janitor --config ~/.my-janitor-config.json
225
+ ```
226
+
227
+ ### Multi-language Support
228
+
229
+ ```bash
230
+ # Vietnamese
231
+ node-janitor --lang vi
232
+
233
+ # Chinese
234
+ node-janitor --lang zh
235
+
236
+ # Japanese
237
+ node-janitor --lang ja
238
+
239
+ # Available: en, vi, zh, ja, ko, es, fr, de
240
+ ```
241
+
242
+ ### Watch Mode
243
+
244
+ Continuously monitor and clean:
245
+
246
+ ```bash
247
+ # Watch with 60s interval
248
+ node-janitor watch --interval 60 --older-than 30d
249
+
250
+ # Auto-clean when found
251
+ node-janitor watch --auto-clean --older-than 60d
252
+ ```
253
+
254
+ ### Scheduled Cleanup
255
+
256
+ Cron-style scheduling:
257
+
258
+ ```bash
259
+ # Daily cleanup at midnight
260
+ node-janitor schedule --daily --older-than 30d
261
+
262
+ # Weekly on Sunday
263
+ node-janitor schedule --weekly
264
+
265
+ # Custom cron expression
266
+ node-janitor schedule --cron "0 0 * * *" --older-than 60d
154
267
  ```
155
268
 
156
269
  ## ๐Ÿ“‹ All Options
@@ -176,6 +289,11 @@ node-janitor --exclude "important-project,client-work"
176
289
  | `--silent` | Silent mode (CI/CD) |
177
290
  | `--json` | JSON output |
178
291
  | `--exclude <patterns>` | Exclude patterns (comma-separated) |
292
+ | `--include <patterns>` | Include only matching patterns |
293
+ | `-c, --config <path>` | Config file path |
294
+ | `--skip-dirty-git` | Skip repos with uncommitted changes |
295
+ | `--git-only` | Only process git repos |
296
+ | `--lang <code>` | Language (en, vi, zh, ja, ko, es, fr, de) |
179
297
 
180
298
  ## ๐ŸŽฏ Examples
181
299
 
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,wBAAgB,aAAa,IAAI,OAAO,CA8EvC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,wBAAgB,aAAa,IAAI,OAAO,CA4FvC"}
package/dist/cli.js CHANGED
@@ -5,6 +5,7 @@ import { cleanNodeModules } from './core/cleaner.js';
5
5
  import { deepClean } from './core/deep-cleaner.js';
6
6
  import { startWatch } from './commands/watch.js';
7
7
  import { startSchedule, cronPresets } from './commands/schedule.js';
8
+ import { startLiveView } from './tui/live-view.js';
8
9
  import { loadConfig, mergeOptions } from './core/config.js';
9
10
  import { createSpinner } from './ui/spinner.js';
10
11
  import { createFoldersTable, createSummaryTable, createBreakdownTable } from './ui/table.js';
@@ -13,7 +14,7 @@ import { promptPath, promptAge, promptConfirm, promptViewList, promptDelete, pro
13
14
  import logger from './utils/logger.js';
14
15
  import { formatBytes, parseDuration } from './utils/formatter.js';
15
16
  import { setLanguage } from './utils/i18n.js';
16
- const VERSION = '1.1.0';
17
+ const VERSION = '1.2.0';
17
18
  // ASCII Art Banner
18
19
  const BANNER = chalk.cyan(`
19
20
  โ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—
@@ -53,6 +54,7 @@ export function createProgram() {
53
54
  .option('--skip-dirty-git', 'Skip folders with uncommitted git changes')
54
55
  .option('--git-only', 'Only process folders inside git repositories')
55
56
  .option('--lang <language>', 'Language for output (en, vi, zh, ja, ko, es, fr, de)')
57
+ .option('-l, --live', 'Interactive TUI mode with keyboard navigation')
56
58
  .action(async (options) => {
57
59
  await mainAction(options);
58
60
  });
@@ -95,6 +97,18 @@ export function createProgram() {
95
97
  .action(async (options) => {
96
98
  await scheduleAction(options);
97
99
  });
100
+ // TUI sub-command
101
+ program
102
+ .command('tui')
103
+ .description('๐Ÿ–ฅ๏ธ Interactive TUI mode with keyboard navigation')
104
+ .option('-p, --path <path>', 'Directory to scan', process.cwd())
105
+ .option('-d, --depth <number>', 'Maximum depth to scan', parseInt)
106
+ .action(async (options) => {
107
+ await startLiveView({
108
+ path: options.path || process.cwd(),
109
+ depth: options.depth,
110
+ });
111
+ });
98
112
  return program;
99
113
  }
100
114
  /**
@@ -119,6 +133,14 @@ async function mainAction(options) {
119
133
  await interactiveMode();
120
134
  return;
121
135
  }
136
+ // Live TUI mode
137
+ if (options.live) {
138
+ await startLiveView({
139
+ path: options.path || process.cwd(),
140
+ depth: options.depth,
141
+ });
142
+ return;
143
+ }
122
144
  // Show banner (unless silent/json)
123
145
  if (!options.silent && !options.json) {
124
146
  console.log(BANNER);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EACH,UAAU,EACV,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,mBAAmB;AACnB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;;;;;;;CAOzB,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACF,IAAI,CAAC,cAAc,CAAC;SACpB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC/D,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,EAAE,QAAQ,CAAC;SACjE,MAAM,CAAC,yBAAyB,EAAE,qDAAqD,CAAC;SACxF,MAAM,CAAC,mBAAmB,EAAE,mDAAmD,CAAC;SAChF,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;SAC7E,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;SAC7E,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;SAC3D,MAAM,CAAC,cAAc,EAAE,4CAA4C,CAAC;SACpE,MAAM,CAAC,QAAQ,EAAE,4CAA4C,CAAC;SAC9D,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,EAAE,QAAQ,CAAC;SACvE,MAAM,CAAC,UAAU,EAAE,+BAA+B,CAAC;SACnD,MAAM,CAAC,cAAc,EAAE,gCAAgC,CAAC;SACxD,MAAM,CAAC,SAAS,EAAE,oCAAoC,CAAC;SACvD,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;SAC/C,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;SAC/B,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;SAC7C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,sBAAsB,EAAE,oCAAoC,CAAC;SACpE,MAAM,CAAC,sBAAsB,EAAE,kDAAkD,CAAC;SAClF,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;SACvE,MAAM,CAAC,YAAY,EAAE,8CAA8C,CAAC;SACpE,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACtB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEP,qBAAqB;IACrB,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC/D,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,EAAE,QAAQ,CAAC;SACjE,MAAM,CAAC,YAAY,EAAE,yBAAyB,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACtB,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEP,oBAAoB;IACpB,OAAO;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAChE,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,EAAE,QAAQ,CAAC;SACjE,MAAM,CAAC,yBAAyB,EAAE,2CAA2C,CAAC;SAC9E,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,EAAE,QAAQ,CAAC;SACpE,MAAM,CAAC,cAAc,EAAE,mCAAmC,CAAC;SAC3D,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACtB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEP,uBAAuB;IACvB,OAAO;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAChE,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,EAAE,QAAQ,CAAC;SACjE,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;SAC9E,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC;SAC1C,MAAM,CAAC,UAAU,EAAE,sBAAsB,CAAC;SAC1C,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;SACzC,MAAM,CAAC,yBAAyB,EAAE,2CAA2C,CAAC;SAC9E,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACtB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEP,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,OAAgD;IACtE,mBAAmB;IACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAA4B,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEpD,eAAe;IACf,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;QACrB,WAAW,CAAC,aAAa,CAAC,IAAc,CAAC,CAAC;IAC9C,CAAC;IAED,mBAAmB;IACnB,MAAM,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,aAAa,CAAC,OAAkB;QACzC,KAAK,EAAE,aAAa,CAAC,KAAgB;QACrC,MAAM,EAAE,aAAa,CAAC,MAAiB;KAC1C,CAAC,CAAC;IAEH,mBAAmB;IACnB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,eAAe,EAAE,CAAC;QACxB,OAAO;IACX,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;IACP,MAAM,QAAQ,GAAI,OAAO,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO;QACnC,CAAC,CAAE,OAAO,CAAC,OAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO;QACnC,CAAC,CAAE,OAAO,CAAC,OAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,QAAQ,KAAK,CAAC,CAAC;IAC5D,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,OAA0B,CAAC;IAC/B,IAAI,CAAC;QACD,OAAO,GAAG,MAAM,eAAe,CAAC;YAC5B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO,CAAC,KAA2B;YAC1C,KAAK,EAAE,OAAO,CAAC,KAAgB;YAC/B,eAAe;YACf,eAAe;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,MAAM,uBAAuB,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACX,CAAC;IAED,+BAA+B;IAC/B,IAAI,cAAc,GAAG,OAAO,CAAC;IAC7B,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,SAAmB,CAAC,CAAC;QAC9D,cAAc,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,oBAAoB;IACpB,IAAI,aAAa,CAAC,YAAY,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QACtD,cAAc,GAAG,iBAAiB,CAC9B,cAAc,EACd,aAAa,CAAC,YAAuB,EACrC,aAAa,CAAC,OAAkB,CACnC,CAAC;IACN,CAAC;IAED,cAAc;IACd,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACvB,OAAO,EAAE,cAAc;YACvB,GAAG,MAAM;SACZ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO;IACX,CAAC;IAED,eAAe;IACf,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7D,IAAI,cAAc,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,UAAU,cAAc,CAAC,MAAM,GAAG,EAAE,eAAe,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,UAAU;IACV,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO;IACX,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO;IACX,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,aAAa,CACjC,eAAe,cAAc,CAAC,MAAM,aAAa,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CACrF,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACX,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,MAAM,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QAEpC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC9B,MAAM;QACV,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,SAAS,EAAE,CAAC;YAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,QAAQ,KAAK,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,IAAI,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,MAAM,uBAAuB,CAAC,CAAC;YAEhE,IAAI,SAAS,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gBACtC,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,SAAS;YACb,CAAC;YAED,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YAEpH,IAAI,MAAM,cAAc,EAAE,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACrB,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAC3D,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,cAAc,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;oBACxD,IAAI,MAAM,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;wBACvE,MAAM,YAAY,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC1D,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAEjD,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,QAAQ,KAAK,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,MAAM,uBAAuB,CAAC,CAAC;YAEhE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAC9C,SAAS;YACb,CAAC;YAED,IAAI,MAAM,aAAa,CAAC,uCAAuC,CAAC,EAAE,CAAC;gBAC/D,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACjD,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACvB,OAA0B,EAC1B,OAAgC;IAEhC,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACjC,OAAO,EACP;QACI,IAAI,EAAE,OAAO,CAAC,IAAe;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAkB;QACpC,MAAM,EAAE,OAAO,CAAC,MAAiB;KACpC,EACD,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACtB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,CACJ,CAAC;IAEF,YAAY,CAAC,GAAG,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,OAAO,CAAC,WAAW,MAAM,CAAC,YAAY,UAAU,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAE1D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,mBAAmB,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC3B,OAA0B,EAC1B,OAAgC;IAEhC,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAClE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;YACxC,MAAM,EAAE,OAAO,CAAC,MAAiB;YACjC,OAAO,EAAE,OAAO,CAAC,OAAkB;SACtC,CAAC,CAAC;QAEH,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;QAChC,UAAU,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAC1C,CAAC;IAED,YAAY,CAAC,GAAG,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,OAAO,CAAC,aAAa,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;IACtD,MAAM,CAAC,OAAO,CAAC,WAAW,UAAU,QAAQ,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,OAAgC;IACxD,MAAM,QAAQ,GAAI,OAAO,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,QAAQ,KAAK,CAAC,CAAC;IAC5D,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,MAAM,uBAAuB,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAExC,sBAAsB;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,MAAM;YACT,SAAS,EAAE;gBACP,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;gBAC9E,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;gBAC9E,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;aACxE;YACD,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/B,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SAC5E,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,mBAAmB;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC7B,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;QAC9E,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;QAC9E,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;KACxE,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,iBAAiB;IACjB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEnC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,YAAY,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACxH,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,QAAQ;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC5G,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,OAAgC;IACvD,MAAM,eAAe,GAAI,OAAO,CAAC,QAAmB,IAAI,EAAE,CAAC;IAE3D,MAAM,UAAU,CAAC;QACb,IAAI,EAAG,OAAO,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE;QAC/C,KAAK,EAAE,OAAO,CAAC,KAA2B;QAC1C,SAAS,EAAE,OAAO,CAAC,SAA+B;QAClD,MAAM,EAAE,OAAO,CAAC,MAAiB;QACjC,QAAQ,EAAE,eAAe,GAAG,IAAI;QAChC,OAAO,EAAE,OAAO,CAAC,SAAoB;KACxC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAgC;IAC1D,mDAAmD;IACnD,IAAI,cAAc,GAAG,OAAO,CAAC,IAAc,CAAC;IAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC;QACvC,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC;QACxC,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,mBAAmB;YACnB,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC;QACvC,CAAC;IACL,CAAC;IAED,aAAa,CAAC;QACV,IAAI,EAAG,OAAO,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE;QAC/C,KAAK,EAAE,OAAO,CAAC,KAA2B;QAC1C,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,OAAO,CAAC,SAA+B;QAClD,MAAM,EAAE,OAAO,CAAC,MAAiB;KACpC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,32 @@ export interface ScheduleOptions {
5
5
  dryRun?: boolean;
6
6
  depth?: number;
7
7
  }
8
+ export interface ScheduleStats {
9
+ lastRun: Date | null;
10
+ totalRuns: number;
11
+ totalCleaned: number;
12
+ totalFreed: number;
13
+ }
14
+ /**
15
+ * Create initial stats object
16
+ */
17
+ export declare function createInitialStats(): ScheduleStats;
18
+ /**
19
+ * Parse olderThan option to days
20
+ */
21
+ export declare function parseOlderThanDays(olderThan?: string): number | undefined;
8
22
  /**
9
23
  * Start a scheduled cleanup job
10
24
  */
11
25
  export declare function startSchedule(options: ScheduleOptions): void;
26
+ /**
27
+ * Run the scheduled cleanup task (exported for testing)
28
+ */
29
+ export declare function runScheduledCleanup(options: ScheduleOptions, olderThanDays: number | undefined, stats: ScheduleStats): Promise<{
30
+ cleaned: number;
31
+ freed: number;
32
+ errors: number;
33
+ }>;
12
34
  /**
13
35
  * Run cleanup once (for manual/immediate trigger)
14
36
  */
@@ -23,6 +45,9 @@ export declare const cronPresets: {
23
45
  declare const _default: {
24
46
  startSchedule: typeof startSchedule;
25
47
  runOnce: typeof runOnce;
48
+ runScheduledCleanup: typeof runScheduledCleanup;
49
+ createInitialStats: typeof createInitialStats;
50
+ parseOlderThanDays: typeof parseOlderThanDays;
26
51
  cronPresets: {
27
52
  daily: string;
28
53
  weekly: string;
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AASD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAgD5D;AA6DD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnF;AAGD,eAAO,MAAM,WAAW;;;;;;CAMvB,CAAC;;;;;;;;;;;;AAEF,wBAIE"}
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAOlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CA0C5D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,KAAK,EAAE,aAAa,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAyD7D;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAInF;AAGD,eAAO,MAAM,WAAW;;;;;;CAMvB,CAAC;;;;;;;;;;;;;;;AAEF,wBAOE"}
@@ -5,16 +5,28 @@ import { cleanNodeModules } from '../core/cleaner.js';
5
5
  import { formatBytes, parseDuration } from '../utils/formatter.js';
6
6
  import logger from '../utils/logger.js';
7
7
  /**
8
- * Start a scheduled cleanup job
8
+ * Create initial stats object
9
9
  */
10
- export function startSchedule(options) {
11
- const stats = {
10
+ export function createInitialStats() {
11
+ return {
12
12
  lastRun: null,
13
13
  totalRuns: 0,
14
14
  totalCleaned: 0,
15
15
  totalFreed: 0,
16
16
  };
17
- const olderThanDays = options.olderThan ? parseDuration(options.olderThan) : undefined;
17
+ }
18
+ /**
19
+ * Parse olderThan option to days
20
+ */
21
+ export function parseOlderThanDays(olderThan) {
22
+ return olderThan ? parseDuration(olderThan) : undefined;
23
+ }
24
+ /**
25
+ * Start a scheduled cleanup job
26
+ */
27
+ export function startSchedule(options) {
28
+ const stats = createInitialStats();
29
+ const olderThanDays = parseOlderThanDays(options.olderThan);
18
30
  console.log(chalk.cyan('๐Ÿ“… Scheduled Cleanup Started'));
19
31
  console.log(chalk.gray(`Path: ${options.path}`));
20
32
  console.log(chalk.gray(`Schedule: ${options.cron}`));
@@ -49,9 +61,9 @@ export function startSchedule(options) {
49
61
  });
50
62
  }
51
63
  /**
52
- * Run the scheduled cleanup task
64
+ * Run the scheduled cleanup task (exported for testing)
53
65
  */
54
- async function runScheduledCleanup(options, olderThanDays, stats) {
66
+ export async function runScheduledCleanup(options, olderThanDays, stats) {
55
67
  const timestamp = new Date().toLocaleString();
56
68
  console.log(chalk.cyan(`\n[${timestamp}] Running scheduled cleanup...`));
57
69
  try {
@@ -68,7 +80,7 @@ async function runScheduledCleanup(options, olderThanDays, stats) {
68
80
  stats.totalRuns++;
69
81
  if (folders.length === 0) {
70
82
  console.log(chalk.green('โœ“ No folders to clean'));
71
- return;
83
+ return { cleaned: 0, freed: 0, errors: 0 };
72
84
  }
73
85
  const totals = calculateTotals(folders);
74
86
  console.log(chalk.yellow(`Found ${folders.length} folders (${formatBytes(totals.totalSize)})`));
@@ -77,7 +89,7 @@ async function runScheduledCleanup(options, olderThanDays, stats) {
77
89
  folders.slice(0, 5).forEach(f => {
78
90
  console.log(chalk.gray(` โ†’ ${f.projectPath} (${f.ageDays}d)`));
79
91
  });
80
- return;
92
+ return { cleaned: 0, freed: 0, errors: 0 };
81
93
  }
82
94
  // Perform cleanup
83
95
  const result = await cleanNodeModules(folders, { fast: true });
@@ -88,23 +100,24 @@ async function runScheduledCleanup(options, olderThanDays, stats) {
88
100
  if (result.errors.length > 0) {
89
101
  console.log(chalk.red(`โœ— ${result.errors.length} errors`));
90
102
  }
103
+ return {
104
+ cleaned: result.deletedCount,
105
+ freed: result.freedBytes,
106
+ errors: result.errors.length,
107
+ };
91
108
  }
92
109
  catch (error) {
93
110
  console.log(chalk.red('โœ— Cleanup failed'));
94
111
  logger.debug(error instanceof Error ? error.message : String(error));
112
+ return { cleaned: 0, freed: 0, errors: 1 };
95
113
  }
96
114
  }
97
115
  /**
98
116
  * Run cleanup once (for manual/immediate trigger)
99
117
  */
100
118
  export async function runOnce(options) {
101
- const stats = {
102
- lastRun: null,
103
- totalRuns: 0,
104
- totalCleaned: 0,
105
- totalFreed: 0,
106
- };
107
- const olderThanDays = options.olderThan ? parseDuration(options.olderThan) : undefined;
119
+ const stats = createInitialStats();
120
+ const olderThanDays = parseOlderThanDays(options.olderThan);
108
121
  await runScheduledCleanup({ ...options, cron: '' }, olderThanDays, stats);
109
122
  }
110
123
  // Common cron presets
@@ -118,6 +131,9 @@ export const cronPresets = {
118
131
  export default {
119
132
  startSchedule,
120
133
  runOnce,
134
+ runScheduledCleanup,
135
+ createInitialStats,
136
+ parseOlderThanDays,
121
137
  cronPresets,
122
138
  };
123
139
  //# sourceMappingURL=schedule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { NodeModulesInfo } from '../types/index.js';
1
2
  export interface WatchOptions {
2
3
  path: string;
3
4
  depth?: number;
@@ -6,12 +7,51 @@ export interface WatchOptions {
6
7
  interval?: number;
7
8
  onClean?: boolean;
8
9
  }
10
+ export interface WatchState {
11
+ isWatching: boolean;
12
+ lastScan: Date | null;
13
+ foldersFound: number;
14
+ totalCleaned: number;
15
+ totalFreed: number;
16
+ }
17
+ /**
18
+ * Create initial watch state
19
+ */
20
+ export declare function createInitialWatchState(): WatchState;
21
+ /**
22
+ * Parse watch interval with default
23
+ */
24
+ export declare function parseWatchInterval(interval?: number): number;
25
+ /**
26
+ * Parse olderThan to days
27
+ */
28
+ export declare function parseOlderThanDays(olderThan?: string): number | undefined;
9
29
  /**
10
30
  * Start watching a directory for node_modules folders
11
31
  */
12
32
  export declare function startWatch(options: WatchOptions): Promise<void>;
33
+ /**
34
+ * Perform a scan and optionally clean (exported for testing)
35
+ */
36
+ export declare function performScan(watchPath: string, options: WatchOptions, olderThanDays: number | undefined, state: WatchState): Promise<{
37
+ found: number;
38
+ cleaned: number;
39
+ freed: number;
40
+ }>;
41
+ /**
42
+ * Auto-clean found folders (exported for testing)
43
+ */
44
+ export declare function performAutoClean(folders: NodeModulesInfo[], state: WatchState): Promise<{
45
+ cleaned: number;
46
+ freed: number;
47
+ }>;
13
48
  declare const _default: {
14
49
  startWatch: typeof startWatch;
50
+ performScan: typeof performScan;
51
+ performAutoClean: typeof performAutoClean;
52
+ createInitialWatchState: typeof createInitialWatchState;
53
+ parseWatchInterval: typeof parseWatchInterval;
54
+ parseOlderThanDays: typeof parseOlderThanDays;
15
55
  };
16
56
  export default _default;
17
57
  //# sourceMappingURL=watch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CrE;;;;AA0ED,wBAEE"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,UAAU,CAQpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCrE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,KAAK,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA8C5D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,eAAe,EAAE,EAC1B,KAAK,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAa7C;;;;;;;;;AAED,wBAOE"}
@@ -5,19 +5,37 @@ import { formatBytes, parseDuration } from '../utils/formatter.js';
5
5
  import logger from '../utils/logger.js';
6
6
  import chalk from 'chalk';
7
7
  /**
8
- * Start watching a directory for node_modules folders
8
+ * Create initial watch state
9
9
  */
10
- export async function startWatch(options) {
11
- const watchPath = path.resolve(options.path);
12
- const interval = options.interval || 60000; // Default 1 minute
13
- const olderThanDays = options.olderThan ? parseDuration(options.olderThan) : undefined;
14
- const state = {
10
+ export function createInitialWatchState() {
11
+ return {
15
12
  isWatching: true,
16
13
  lastScan: null,
17
14
  foldersFound: 0,
18
15
  totalCleaned: 0,
19
16
  totalFreed: 0,
20
17
  };
18
+ }
19
+ /**
20
+ * Parse watch interval with default
21
+ */
22
+ export function parseWatchInterval(interval) {
23
+ return interval || 60000; // Default 1 minute
24
+ }
25
+ /**
26
+ * Parse olderThan to days
27
+ */
28
+ export function parseOlderThanDays(olderThan) {
29
+ return olderThan ? parseDuration(olderThan) : undefined;
30
+ }
31
+ /**
32
+ * Start watching a directory for node_modules folders
33
+ */
34
+ export async function startWatch(options) {
35
+ const watchPath = path.resolve(options.path);
36
+ const interval = parseWatchInterval(options.interval);
37
+ const olderThanDays = parseOlderThanDays(options.olderThan);
38
+ const state = createInitialWatchState();
21
39
  console.log(chalk.cyan('๐Ÿ”„ Watch Mode Started'));
22
40
  console.log(chalk.gray(`Watching: ${watchPath}`));
23
41
  console.log(chalk.gray(`Interval: ${interval / 1000}s`));
@@ -47,9 +65,9 @@ export async function startWatch(options) {
47
65
  await new Promise(() => { }); // Never resolves, wait for SIGINT
48
66
  }
49
67
  /**
50
- * Perform a scan and optionally clean
68
+ * Perform a scan and optionally clean (exported for testing)
51
69
  */
52
- async function performScan(watchPath, options, olderThanDays, state) {
70
+ export async function performScan(watchPath, options, olderThanDays, state) {
53
71
  const timestamp = new Date().toLocaleTimeString();
54
72
  process.stdout.write(chalk.gray(`[${timestamp}] Scanning... `));
55
73
  try {
@@ -66,13 +84,14 @@ async function performScan(watchPath, options, olderThanDays, state) {
66
84
  state.foldersFound = folders.length;
67
85
  if (folders.length === 0) {
68
86
  console.log(chalk.green('โœ“ No matching folders'));
69
- return;
87
+ return { found: 0, cleaned: 0, freed: 0 };
70
88
  }
71
89
  const totals = calculateTotals(folders);
72
90
  console.log(chalk.yellow(`Found ${folders.length} folders (${formatBytes(totals.totalSize)})`));
73
91
  // Auto-clean if enabled
74
92
  if (options.onClean && !options.dryRun) {
75
- await performAutoClean(folders, state);
93
+ const cleanResult = await performAutoClean(folders, state);
94
+ return { found: folders.length, ...cleanResult };
76
95
  }
77
96
  else {
78
97
  // Just list folders
@@ -82,29 +101,38 @@ async function performScan(watchPath, options, olderThanDays, state) {
82
101
  if (folders.length > 5) {
83
102
  console.log(chalk.gray(` ... and ${folders.length - 5} more`));
84
103
  }
104
+ return { found: folders.length, cleaned: 0, freed: 0 };
85
105
  }
86
106
  }
87
107
  catch (error) {
88
108
  console.log(chalk.red('โœ— Scan failed'));
89
109
  logger.debug(error instanceof Error ? error.message : String(error));
110
+ return { found: 0, cleaned: 0, freed: 0 };
90
111
  }
91
112
  }
92
113
  /**
93
- * Auto-clean found folders
114
+ * Auto-clean found folders (exported for testing)
94
115
  */
95
- async function performAutoClean(folders, state) {
116
+ export async function performAutoClean(folders, state) {
96
117
  try {
97
118
  const result = await cleanNodeModules(folders, { fast: true });
98
119
  state.totalCleaned += result.deletedCount;
99
120
  state.totalFreed += result.freedBytes;
100
121
  console.log(chalk.green(` โœ“ Cleaned ${result.deletedCount} folders (${formatBytes(result.freedBytes)})`));
122
+ return { cleaned: result.deletedCount, freed: result.freedBytes };
101
123
  }
102
124
  catch (error) {
103
125
  console.log(chalk.red(' โœ— Clean failed'));
104
126
  logger.debug(error instanceof Error ? error.message : String(error));
127
+ return { cleaned: 0, freed: 0 };
105
128
  }
106
129
  }
107
130
  export default {
108
131
  startWatch,
132
+ performScan,
133
+ performAutoClean,
134
+ createInitialWatchState,
135
+ parseWatchInterval,
136
+ parseOlderThanDays,
109
137
  };
110
138
  //# sourceMappingURL=watch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAoB1B;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACnC,OAAO;QACH,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;KAChB,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAiB;IAChD,OAAO,QAAQ,IAAI,KAAK,CAAC,CAAC,mBAAmB;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAkB;IACjD,OAAO,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAqB;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IACzD,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,aAAa,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAElD,eAAe;IACf,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAE5D,wCAAwC;IACxC,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtC,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEb,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,kCAAkC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,SAAiB,EACjB,OAAqB,EACrB,aAAiC,EACjC,KAAiB;IAEjB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;IAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,gBAAgB,CAAC,CAAC,CAAC;IAEhE,IAAI,CAAC;QACD,IAAI,OAAO,GAAG,MAAM,eAAe,CAAC;YAChC,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,IAAI,EAAE,8BAA8B;SAC9C,CAAC,CAAC;QAEH,mBAAmB;QACnB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,aAAa,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QAEpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAClD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC9C,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,MAAM,aAAa,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhG,wBAAwB;QACxB,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3D,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACrD,CAAC;aAAM,CAAC;YACJ,oBAAoB;YACpB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC3D,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC9C,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,OAA0B,EAC1B,KAAiB;IAEjB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;QAC1C,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;QAEtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,YAAY,aAAa,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3G,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACpC,CAAC;AACL,CAAC;AAED,eAAe;IACX,UAAU;IACV,WAAW;IACX,gBAAgB;IAChB,uBAAuB;IACvB,kBAAkB;IAClB,kBAAkB;CACrB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { NodeModulesInfo, ScanOptions } from '../types/index.js';
2
+ /**
3
+ * Ultra-fast scanner using native OS commands
4
+ * Uses `find` on Unix for blazing fast directory discovery
5
+ */
6
+ export declare function scanNodeModulesFast(options: ScanOptions, onProgress?: (current: number, found: number, path: string) => void): Promise<NodeModulesInfo[]>;
7
+ /**
8
+ * Use native find command for blazing fast discovery
9
+ */
10
+ declare function findNodeModulesNative(startPath: string, maxDepth?: number): string[];
11
+ declare const _default: {
12
+ scanNodeModulesFast: typeof scanNodeModulesFast;
13
+ findNodeModulesNative: typeof findNodeModulesNative;
14
+ };
15
+ export default _default;
16
+ //# sourceMappingURL=fast-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-scanner.d.ts","sourceRoot":"","sources":["../../src/core/fast-scanner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUtE;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GACpE,OAAO,CAAC,eAAe,EAAE,CAAC,CA8E5B;AAED;;GAEG;AACH,iBAAS,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CA4B7E;;;;;AAsDD,wBAGE"}
@@ -0,0 +1,150 @@
1
+ import { execSync } from 'child_process';
2
+ import path from 'path';
3
+ import pLimit from 'p-limit';
4
+ import { getFolderSizeFast, getLastModified, countPackages, fileExists, } from '../utils/fs-utils.js';
5
+ import { getAgeDays } from '../utils/formatter.js';
6
+ import logger from '../utils/logger.js';
7
+ /**
8
+ * Ultra-fast scanner using native OS commands
9
+ * Uses `find` on Unix for blazing fast directory discovery
10
+ */
11
+ export async function scanNodeModulesFast(options, onProgress) {
12
+ const startPath = path.resolve(options.path);
13
+ logger.debug(`Fast scan starting from: ${startPath}`);
14
+ // Use native find command for discovery
15
+ const nodeModulesPaths = findNodeModulesNative(startPath, options.depth);
16
+ logger.debug(`Found ${nodeModulesPaths.length} node_modules via native find`);
17
+ if (nodeModulesPaths.length === 0) {
18
+ return [];
19
+ }
20
+ // Apply exclusion patterns and skip hidden/system folders
21
+ let filteredPaths = nodeModulesPaths.filter(p => {
22
+ // Skip paths containing hidden folders (starting with .)
23
+ const parts = p.split(path.sep);
24
+ const hasHidden = parts.some(part => part.startsWith('.') && part !== '.' && part !== '..');
25
+ if (hasHidden)
26
+ return false;
27
+ // Skip system folders
28
+ const skipFolders = ['Library', 'Applications', '.Trash', '.npm', '.yarn', '.pnpm-store'];
29
+ const hasSystemFolder = parts.some(part => skipFolders.includes(part));
30
+ if (hasSystemFolder)
31
+ return false;
32
+ return true;
33
+ });
34
+ // Apply user exclusion patterns
35
+ if (options.excludePatterns && options.excludePatterns.length > 0) {
36
+ filteredPaths = filteredPaths.filter(p => {
37
+ return !options.excludePatterns.some(pattern => {
38
+ if (pattern.includes('*')) {
39
+ const regex = new RegExp(pattern.replace(/\*/g, '.*'));
40
+ return regex.test(p);
41
+ }
42
+ return p.includes(pattern);
43
+ });
44
+ });
45
+ }
46
+ // Collect metadata in parallel
47
+ const limit = pLimit(10); // 10 concurrent operations
48
+ const results = [];
49
+ let completed = 0;
50
+ const promises = filteredPaths.map(nodeModulesPath => limit(async () => {
51
+ const projectPath = path.dirname(nodeModulesPath);
52
+ const info = await getNodeModulesInfoFast(nodeModulesPath, projectPath, options.quick);
53
+ completed++;
54
+ onProgress?.(completed, filteredPaths.length, projectPath);
55
+ return info;
56
+ }));
57
+ const collected = await Promise.all(promises);
58
+ results.push(...collected);
59
+ // Apply include pattern filter
60
+ let finalResults = results;
61
+ if (options.includePatterns && options.includePatterns.length > 0) {
62
+ finalResults = results.filter(folder => {
63
+ return options.includePatterns.some(pattern => {
64
+ if (pattern.includes('*')) {
65
+ const regex = new RegExp(pattern.replace(/\*/g, '.*'));
66
+ return regex.test(folder.projectPath) || regex.test(folder.path);
67
+ }
68
+ return folder.projectPath.includes(pattern) || folder.path.includes(pattern);
69
+ });
70
+ });
71
+ }
72
+ // Sort by size descending
73
+ finalResults.sort((a, b) => b.size - a.size);
74
+ return finalResults;
75
+ }
76
+ /**
77
+ * Use native find command for blazing fast discovery
78
+ */
79
+ function findNodeModulesNative(startPath, maxDepth) {
80
+ try {
81
+ // Build find command
82
+ let cmd;
83
+ const depthArg = maxDepth !== undefined ? `-maxdepth ${maxDepth + 1}` : '';
84
+ if (process.platform === 'win32') {
85
+ // Windows: use dir command
86
+ cmd = `dir /s /b /ad "${startPath}" 2>nul | findstr /i "\\\\node_modules$"`;
87
+ }
88
+ else {
89
+ // Unix: use find with prune for efficiency
90
+ cmd = `find "${startPath}" ${depthArg} -type d -name "node_modules" -prune 2>/dev/null`;
91
+ }
92
+ const output = execSync(cmd, {
93
+ encoding: 'utf-8',
94
+ maxBuffer: 100 * 1024 * 1024, // 100MB buffer
95
+ timeout: 60000, // 60s timeout
96
+ });
97
+ return output
98
+ .trim()
99
+ .split('\n')
100
+ .filter(line => line.length > 0);
101
+ }
102
+ catch (error) {
103
+ logger.debug(`Native find failed, falling back to JS: ${error}`);
104
+ return [];
105
+ }
106
+ }
107
+ /**
108
+ * Get folder info with optimized parallel operations
109
+ */
110
+ async function getNodeModulesInfoFast(nodeModulesPath, projectPath, quick = false) {
111
+ // Run independent operations in parallel
112
+ const [lastModified, hasPackageLock, hasYarnLock, hasPnpmLock,] = await Promise.all([
113
+ getLastModified(nodeModulesPath),
114
+ fileExists(path.join(projectPath, 'package-lock.json')),
115
+ fileExists(path.join(projectPath, 'yarn.lock')),
116
+ fileExists(path.join(projectPath, 'pnpm-lock.yaml')),
117
+ ]);
118
+ const ageDays = getAgeDays(lastModified);
119
+ // Size and package count - only if needed
120
+ let size = 0;
121
+ let packageCount = 0;
122
+ if (!quick) {
123
+ // Run size and package count in parallel
124
+ [size, packageCount] = await Promise.all([
125
+ getFolderSizeFast(nodeModulesPath),
126
+ countPackages(nodeModulesPath),
127
+ ]);
128
+ }
129
+ else {
130
+ // Quick mode: only get package count (fast)
131
+ packageCount = await countPackages(nodeModulesPath);
132
+ }
133
+ return {
134
+ path: nodeModulesPath,
135
+ projectPath,
136
+ size,
137
+ lastModified,
138
+ packageCount,
139
+ hasPackageLock,
140
+ hasYarnLock,
141
+ hasPnpmLock,
142
+ ageDays,
143
+ // Skip git status in fast mode - it's expensive
144
+ };
145
+ }
146
+ export default {
147
+ scanNodeModulesFast,
148
+ findNodeModulesNative,
149
+ };
150
+ //# sourceMappingURL=fast-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-scanner.js","sourceRoot":"","sources":["../../src/core/fast-scanner.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { NodeModulesInfo, ScanOptions } from '../types/index.js';
2
2
  /**
3
3
  * Scan for node_modules folders
4
+ * Uses fast native scanner by default, falls back to JS scanner on error
4
5
  */
5
6
  export declare function scanNodeModules(options: ScanOptions, onProgress?: (current: number, found: number, path: string) => void): Promise<NodeModulesInfo[]>;
6
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyBtE;;GAEG;AACH,wBAAsB,eAAe,CACjC,OAAO,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GACpE,OAAO,CAAC,eAAe,EAAE,CAAC,CA2F5B;AA+CD;;GAEG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,eAAe,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GACpB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CACxB,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACjB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAIhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,UAAQ,EACjB,aAAa,UAAQ,GACtB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB,CAYA;;;;;;;;;AAED,wBAOE"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0BtE;;;GAGG;AACH,wBAAsB,eAAe,CACjC,OAAO,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GACpE,OAAO,CAAC,eAAe,EAAE,CAAC,CAe5B;AAkJD;;GAEG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,eAAe,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GACpB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CACxB,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACjB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAIhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,UAAQ,EACjB,aAAa,UAAQ,GACtB,eAAe,EAAE,CAUnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB,CAYA;;;;;;;;;AAED,wBAOE"}
@@ -4,6 +4,7 @@ import { getFolderSizeFast, getLastModified, countPackages, fileExists, } from '
4
4
  import { getAgeDays } from '../utils/formatter.js';
5
5
  import { getGitStatus } from '../utils/git-utils.js';
6
6
  import logger from '../utils/logger.js';
7
+ import { scanNodeModulesFast } from './fast-scanner.js';
7
8
  // Folders to skip when scanning
8
9
  const SKIP_FOLDERS = new Set([
9
10
  '.git',
@@ -19,8 +20,28 @@ const SKIP_FOLDERS = new Set([
19
20
  ]);
20
21
  /**
21
22
  * Scan for node_modules folders
23
+ * Uses fast native scanner by default, falls back to JS scanner on error
22
24
  */
23
25
  export async function scanNodeModules(options, onProgress) {
26
+ // Try fast scanner first (uses native find command)
27
+ try {
28
+ const fastResults = await scanNodeModulesFast(options, onProgress);
29
+ if (fastResults.length > 0 || options.quick) {
30
+ return fastResults;
31
+ }
32
+ // If no results, try JS scanner as fallback
33
+ logger.debug('Fast scanner returned 0 results, trying JS scanner');
34
+ }
35
+ catch (error) {
36
+ logger.debug(`Fast scanner failed, using JS fallback: ${error}`);
37
+ }
38
+ // Fallback to JS scanner
39
+ return scanNodeModulesJS(options, onProgress);
40
+ }
41
+ /**
42
+ * Original JS-based scanner (fallback)
43
+ */
44
+ async function scanNodeModulesJS(options, onProgress) {
24
45
  const results = [];
25
46
  let scannedCount = 0;
26
47
  async function scan(dir, depth) {
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface LiveViewOptions {
2
+ path: string;
3
+ depth?: number;
4
+ }
5
+ /**
6
+ * Start the interactive live TUI mode
7
+ */
8
+ export declare function startLiveView(options: LiveViewOptions): Promise<void>;
9
+ declare const _default: {
10
+ startLiveView: typeof startLiveView;
11
+ };
12
+ export default _default;
13
+ //# sourceMappingURL=live-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-view.d.ts","sourceRoot":"","sources":["../../src/tui/live-view.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAOD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0P3E;;;;AAED,wBAEE"}
@@ -0,0 +1,243 @@
1
+ import blessed from 'blessed';
2
+ import { scanNodeModules, calculateTotals } from '../core/scanner.js';
3
+ import { cleanNodeModules } from '../core/cleaner.js';
4
+ import { formatBytes } from '../utils/formatter.js';
5
+ /**
6
+ * Start the interactive live TUI mode
7
+ */
8
+ export async function startLiveView(options) {
9
+ const screen = blessed.screen({
10
+ smartCSR: true,
11
+ title: 'Node Janitor - Interactive Mode',
12
+ fullUnicode: true,
13
+ });
14
+ let folders = [];
15
+ let currentIndex = 0;
16
+ let isScanning = true;
17
+ let isDeleting = false;
18
+ let totalSize = 0;
19
+ let sortBy = 'size';
20
+ // Header box
21
+ const header = blessed.box({
22
+ top: 0,
23
+ left: 0,
24
+ width: '100%',
25
+ height: 3,
26
+ content: ' ๐Ÿงน NODE JANITOR - Interactive Mode',
27
+ tags: true,
28
+ style: {
29
+ fg: 'white',
30
+ bg: 'blue',
31
+ bold: true,
32
+ },
33
+ });
34
+ // Status bar (below header)
35
+ const statusBar = blessed.box({
36
+ top: 3,
37
+ left: 0,
38
+ width: '100%',
39
+ height: 1,
40
+ content: ' Scanning...',
41
+ tags: true,
42
+ style: {
43
+ fg: 'black',
44
+ bg: 'cyan',
45
+ },
46
+ });
47
+ // Main list
48
+ const list = blessed.list({
49
+ top: 4,
50
+ left: 0,
51
+ width: '100%',
52
+ height: '100%-7',
53
+ items: [' Scanning...'],
54
+ tags: true,
55
+ keys: true,
56
+ vi: true,
57
+ mouse: true,
58
+ scrollable: true,
59
+ alwaysScroll: true,
60
+ scrollbar: {
61
+ ch: 'โ–ˆ',
62
+ style: {
63
+ bg: 'blue',
64
+ },
65
+ },
66
+ style: {
67
+ fg: 'white',
68
+ bg: 'black',
69
+ selected: {
70
+ fg: 'black',
71
+ bg: 'white',
72
+ },
73
+ },
74
+ });
75
+ // Help bar (bottom)
76
+ const helpBar = blessed.box({
77
+ bottom: 0,
78
+ left: 0,
79
+ width: '100%',
80
+ height: 3,
81
+ content: ' {cyan-fg}โ†‘/โ†“{/} Navigate {cyan-fg}SPACE{/} Select {cyan-fg}A{/} Select All {cyan-fg}S{/} Sort {cyan-fg}D{/} Delete {cyan-fg}Q/ESC{/} Exit',
82
+ tags: true,
83
+ style: {
84
+ fg: 'white',
85
+ bg: 'gray',
86
+ },
87
+ });
88
+ // Append elements
89
+ screen.append(header);
90
+ screen.append(statusBar);
91
+ screen.append(list);
92
+ screen.append(helpBar);
93
+ // Update the display
94
+ function updateDisplay() {
95
+ // Update header with path
96
+ header.setContent(` ๐Ÿงน NODE JANITOR - Interactive Mode | ${options.path}`);
97
+ // Update status
98
+ const selectedCount = folders.filter(f => f.selected).length;
99
+ const selectedSize = folders
100
+ .filter(f => f.selected)
101
+ .reduce((sum, f) => sum + f.folder.size, 0);
102
+ let status = '';
103
+ if (isScanning) {
104
+ status = ` ๐Ÿ” Scanning... Found: ${folders.length} folders | Total: ${formatBytes(totalSize)}`;
105
+ }
106
+ else if (isDeleting) {
107
+ status = ' ๐Ÿ—‘๏ธ Deleting selected folders...';
108
+ }
109
+ else {
110
+ status = ` ๐Ÿ“Š Found: ${folders.length} folders | Total: ${formatBytes(totalSize)}`;
111
+ if (selectedCount > 0) {
112
+ status += ` | Selected: ${selectedCount} (${formatBytes(selectedSize)})`;
113
+ }
114
+ status += ` | Sort: ${sortBy}`;
115
+ }
116
+ statusBar.setContent(status);
117
+ // Update list items
118
+ const items = folders.map((item, index) => {
119
+ const checkbox = item.selected ? 'โ– ' : 'โ–ก';
120
+ const pointer = index === currentIndex ? '>' : ' ';
121
+ // Color by age
122
+ let ageColor = 'green';
123
+ if (item.folder.ageDays >= 90) {
124
+ ageColor = 'red';
125
+ }
126
+ else if (item.folder.ageDays >= 30) {
127
+ ageColor = 'yellow';
128
+ }
129
+ // Truncate path if needed
130
+ const maxPathLen = screen.width - 40;
131
+ let pathDisplay = item.folder.projectPath;
132
+ if (pathDisplay.length > maxPathLen) {
133
+ pathDisplay = '...' + pathDisplay.slice(-maxPathLen + 3);
134
+ }
135
+ return ` ${pointer} ${checkbox} ${pathDisplay.padEnd(maxPathLen)} {white-fg}${formatBytes(item.folder.size).padStart(10)}{/} {${ageColor}-fg}${String(item.folder.ageDays).padStart(4)}d{/}`;
136
+ });
137
+ if (items.length === 0) {
138
+ list.setItems([' No node_modules folders found']);
139
+ }
140
+ else {
141
+ list.setItems(items);
142
+ list.select(currentIndex);
143
+ }
144
+ screen.render();
145
+ }
146
+ // Sort folders
147
+ function sortFolders() {
148
+ folders.sort((a, b) => {
149
+ if (sortBy === 'size') {
150
+ return b.folder.size - a.folder.size;
151
+ }
152
+ return b.folder.ageDays - a.folder.ageDays;
153
+ });
154
+ }
155
+ // Key bindings
156
+ list.on('keypress', (_ch, key) => {
157
+ if (isDeleting)
158
+ return;
159
+ if (key.name === 'up' || key.name === 'k') {
160
+ currentIndex = Math.max(0, currentIndex - 1);
161
+ updateDisplay();
162
+ }
163
+ else if (key.name === 'down' || key.name === 'j') {
164
+ currentIndex = Math.min(folders.length - 1, currentIndex + 1);
165
+ updateDisplay();
166
+ }
167
+ else if (key.name === 'space') {
168
+ if (folders[currentIndex]) {
169
+ folders[currentIndex].selected = !folders[currentIndex].selected;
170
+ updateDisplay();
171
+ }
172
+ }
173
+ });
174
+ screen.key(['a'], () => {
175
+ if (isDeleting || isScanning)
176
+ return;
177
+ const allSelected = folders.every(f => f.selected);
178
+ folders.forEach(f => f.selected = !allSelected);
179
+ updateDisplay();
180
+ });
181
+ screen.key(['s'], () => {
182
+ if (isDeleting || isScanning)
183
+ return;
184
+ sortBy = sortBy === 'size' ? 'age' : 'size';
185
+ sortFolders();
186
+ updateDisplay();
187
+ });
188
+ screen.key(['d'], async () => {
189
+ if (isDeleting || isScanning)
190
+ return;
191
+ const selected = folders.filter(f => f.selected);
192
+ if (selected.length === 0)
193
+ return;
194
+ isDeleting = true;
195
+ updateDisplay();
196
+ try {
197
+ const foldersToDelete = selected.map(s => s.folder);
198
+ const result = await cleanNodeModules(foldersToDelete, { fast: true });
199
+ // Remove deleted folders from list
200
+ folders = folders.filter(f => !f.selected);
201
+ totalSize = folders.reduce((sum, f) => sum + f.folder.size, 0);
202
+ currentIndex = Math.min(currentIndex, folders.length - 1);
203
+ // Show result
204
+ statusBar.setContent(` โœ… Deleted ${result.deletedCount} folders, freed ${formatBytes(result.freedBytes)}`);
205
+ }
206
+ catch (error) {
207
+ statusBar.setContent(` โŒ Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
208
+ }
209
+ isDeleting = false;
210
+ updateDisplay();
211
+ });
212
+ screen.key(['escape', 'q', 'C-c'], () => {
213
+ screen.destroy();
214
+ process.exit(0);
215
+ });
216
+ list.focus();
217
+ updateDisplay();
218
+ // Start scanning
219
+ try {
220
+ const scannedFolders = await scanNodeModules({
221
+ path: options.path,
222
+ depth: options.depth,
223
+ quick: false,
224
+ });
225
+ folders = scannedFolders.map(folder => ({
226
+ folder,
227
+ selected: false,
228
+ }));
229
+ totalSize = calculateTotals(scannedFolders).totalSize;
230
+ sortFolders();
231
+ isScanning = false;
232
+ updateDisplay();
233
+ }
234
+ catch (error) {
235
+ isScanning = false;
236
+ statusBar.setContent(` โŒ Scan error: ${error instanceof Error ? error.message : 'Unknown error'}`);
237
+ screen.render();
238
+ }
239
+ }
240
+ export default {
241
+ startLiveView,
242
+ };
243
+ //# sourceMappingURL=live-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-view.js","sourceRoot":"","sources":["../../src/tui/live-view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-janitor",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "๐Ÿงน Smart CLI tool to clean up node_modules folders - free up disk space automatically",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -17,6 +17,7 @@
17
17
  "lint": "eslint src --ext .ts",
18
18
  "lint:fix": "eslint src --ext .ts --fix",
19
19
  "format": "prettier --write \"src/**/*.ts\"",
20
+ "benchmark": "npm run build && npx tsx benchmark/run.ts",
20
21
  "prepublishOnly": "npm run build"
21
22
  },
22
23
  "keywords": [
@@ -49,6 +50,8 @@
49
50
  "README.md"
50
51
  ],
51
52
  "dependencies": {
53
+ "@types/blessed": "^0.1.27",
54
+ "blessed": "^0.1.81",
52
55
  "chalk": "^5.3.0",
53
56
  "cli-progress": "^3.12.0",
54
57
  "cli-table3": "^0.6.5",
@@ -68,6 +71,7 @@
68
71
  "@types/fs-extra": "^11.0.4",
69
72
  "@types/inquirer": "^9.0.7",
70
73
  "@types/node": "^22.10.2",
74
+ "@vitest/coverage-v8": "^2.1.9",
71
75
  "typescript": "^5.7.2",
72
76
  "vitest": "^2.1.8"
73
77
  }