@bobfrankston/tswalk 1.1.11 → 1.1.13

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/checkpoint.js ADDED
@@ -0,0 +1,246 @@
1
+ /**
2
+ * CHECKPOINT.TS - Resumable scan checkpoint support for tswalk
3
+ *
4
+ * Manages .tswalk.json checkpoint files that allow large directory scans
5
+ * to be interrupted and resumed. The checkpoint stores a nested tree of
6
+ * directory stats with paths relative to parent nodes.
7
+ *
8
+ * Checkpointing is time-throttled (every ~1 second) to avoid excessive I/O.
9
+ * On completion the checkpoint is marked "completed" and retained as a
10
+ * richer-than-console record of the scan.
11
+ */
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ const CHECKPOINT_FILE = '.tswalk.json';
15
+ const SAVE_INTERVAL_MS = 1000;
16
+ const STALE_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours
17
+ // ── Manager ─────────────────────────────────────────────────────────
18
+ export class CheckpointManager {
19
+ data;
20
+ checkpointPath;
21
+ lastSaveTime = 0;
22
+ dirty = false;
23
+ constructor(rootPath, options) {
24
+ this.checkpointPath = path.join(rootPath, CHECKPOINT_FILE);
25
+ this.data = {
26
+ header: {
27
+ version: 1,
28
+ startedAt: new Date().toISOString(),
29
+ lastUpdatedAt: new Date().toISOString(),
30
+ rootPath,
31
+ options: {
32
+ sizeUnit: options.sizeUnit,
33
+ threshold: options.threshold,
34
+ followLinks: options.followLinks,
35
+ showCompressed: options.showCompressed,
36
+ },
37
+ status: "in_progress"
38
+ },
39
+ progress: {
40
+ currentPath: "",
41
+ lastDisplaySize: "",
42
+ lastDisplayUnit: "",
43
+ completedTopLevel: 0,
44
+ totalTopLevel: 0,
45
+ },
46
+ totals: {
47
+ size: 0,
48
+ compressedSize: 0,
49
+ dirs: 0,
50
+ files: 0,
51
+ },
52
+ tree: {
53
+ name: path.basename(rootPath) || rootPath,
54
+ status: "in_progress",
55
+ size: 0,
56
+ compressedSize: 0,
57
+ dirs: 0,
58
+ files: 0,
59
+ totalDirs: 0,
60
+ totalFiles: 0,
61
+ children: [],
62
+ }
63
+ };
64
+ }
65
+ /** Load existing checkpoint from the target directory. Returns null if not found or invalid. */
66
+ static load(rootPath) {
67
+ const filePath = path.join(rootPath, CHECKPOINT_FILE);
68
+ try {
69
+ const raw = fs.readFileSync(filePath, 'utf-8');
70
+ const data = JSON.parse(raw);
71
+ if (!data.header || data.header.version !== 1)
72
+ return null;
73
+ return data;
74
+ }
75
+ catch (err) {
76
+ return null;
77
+ }
78
+ }
79
+ /** Check if saved checkpoint is compatible with current run (same root) */
80
+ static isCompatible(saved, rootPath) {
81
+ return saved.header.rootPath === rootPath;
82
+ }
83
+ /** Check if checkpoint is older than 24 hours */
84
+ static isStale(saved) {
85
+ const lastUpdate = new Date(saved.header.lastUpdatedAt).getTime();
86
+ return Date.now() - lastUpdate > STALE_AGE_MS;
87
+ }
88
+ /** Delete the checkpoint file from the target directory */
89
+ static remove(rootPath) {
90
+ const filePath = path.join(rootPath, CHECKPOINT_FILE);
91
+ try {
92
+ fs.unlinkSync(filePath);
93
+ }
94
+ catch (err) {
95
+ // Ignore if already gone
96
+ }
97
+ }
98
+ /** Resume from an existing checkpoint */
99
+ resume(saved) {
100
+ this.data = saved;
101
+ this.data.header.status = "in_progress";
102
+ this.data.header.lastUpdatedAt = new Date().toISOString();
103
+ }
104
+ // ── Tree navigation ─────────────────────────────────────────────
105
+ /** Get path segments relative to root */
106
+ getSegments(dirPath) {
107
+ const rel = path.relative(this.data.header.rootPath, dirPath);
108
+ if (!rel || rel === '.')
109
+ return [];
110
+ return rel.split(path.sep);
111
+ }
112
+ /** Navigate the tree to find a node by relative path segments */
113
+ findNode(segments) {
114
+ let node = this.data.tree;
115
+ for (const seg of segments) {
116
+ const child = node.children.find(c => c.name === seg);
117
+ if (!child)
118
+ return null;
119
+ node = child;
120
+ }
121
+ return node;
122
+ }
123
+ /** Ensure a node exists in the tree, creating pending nodes as needed */
124
+ ensureNode(segments) {
125
+ let node = this.data.tree;
126
+ for (const seg of segments) {
127
+ let child = node.children.find(c => c.name === seg);
128
+ if (!child) {
129
+ child = {
130
+ name: seg,
131
+ status: "pending",
132
+ size: 0,
133
+ compressedSize: 0,
134
+ dirs: 0,
135
+ files: 0,
136
+ totalDirs: 0,
137
+ totalFiles: 0,
138
+ children: [],
139
+ };
140
+ node.children.push(child);
141
+ }
142
+ node = child;
143
+ }
144
+ return node;
145
+ }
146
+ // ── Status queries ──────────────────────────────────────────────
147
+ /** Check if a directory is already completed */
148
+ isCompleted(dirPath) {
149
+ const segs = this.getSegments(dirPath);
150
+ const node = this.findNode(segs);
151
+ return node?.status === "completed";
152
+ }
153
+ /** Get saved stats for a completed directory, or null */
154
+ getCompletedStats(dirPath) {
155
+ const segs = this.getSegments(dirPath);
156
+ const node = this.findNode(segs);
157
+ if (!node || node.status !== "completed")
158
+ return null;
159
+ return {
160
+ size: node.size,
161
+ compressedSize: node.compressedSize,
162
+ dirs: node.dirs,
163
+ files: node.files,
164
+ totalDirs: node.totalDirs,
165
+ totalFiles: node.totalFiles,
166
+ };
167
+ }
168
+ // ── Status updates ──────────────────────────────────────────────
169
+ /** Mark a directory as in_progress */
170
+ markInProgress(dirPath) {
171
+ const segs = this.getSegments(dirPath);
172
+ const node = this.ensureNode(segs);
173
+ node.status = "in_progress";
174
+ this.dirty = true;
175
+ }
176
+ /** Mark a directory as completed with its stats */
177
+ markCompleted(dirPath, stats) {
178
+ const segs = this.getSegments(dirPath);
179
+ const node = this.ensureNode(segs);
180
+ node.status = "completed";
181
+ node.size = stats.size;
182
+ node.compressedSize = stats.compressedSize;
183
+ node.dirs = stats.dirs;
184
+ node.files = stats.files;
185
+ node.totalDirs = stats.totalDirs;
186
+ node.totalFiles = stats.totalFiles;
187
+ this.dirty = true;
188
+ }
189
+ /** Update the volatile progress line info */
190
+ updateProgress(currentPath, displaySize, displayUnit) {
191
+ this.data.progress.currentPath = currentPath;
192
+ this.data.progress.lastDisplaySize = displaySize;
193
+ this.data.progress.lastDisplayUnit = displayUnit;
194
+ this.dirty = true;
195
+ }
196
+ /** Update top-level progress counts */
197
+ updateTopLevelProgress(completed, total) {
198
+ this.data.progress.completedTopLevel = completed;
199
+ this.data.progress.totalTopLevel = total;
200
+ this.dirty = true;
201
+ }
202
+ /** Update running grand totals */
203
+ updateTotals(totals) {
204
+ this.data.totals = { ...totals };
205
+ this.dirty = true;
206
+ }
207
+ // ── Persistence ─────────────────────────────────────────────────
208
+ /** Save to disk if at least SAVE_INTERVAL_MS has passed since last save */
209
+ saveIfDue() {
210
+ if (!this.dirty)
211
+ return;
212
+ const now = Date.now();
213
+ if (now - this.lastSaveTime < SAVE_INTERVAL_MS)
214
+ return;
215
+ this.save();
216
+ }
217
+ /** Force save to disk */
218
+ save() {
219
+ this.data.header.lastUpdatedAt = new Date().toISOString();
220
+ try {
221
+ fs.writeFileSync(this.checkpointPath, JSON.stringify(this.data, null, 2));
222
+ this.lastSaveTime = Date.now();
223
+ this.dirty = false;
224
+ }
225
+ catch (err) {
226
+ console.error(`Warning: checkpoint save failed: ${err.message}`);
227
+ }
228
+ }
229
+ /** Mark the entire scan as completed and save */
230
+ markScanCompleted(totals) {
231
+ this.data.header.status = "completed";
232
+ this.data.totals = { ...totals };
233
+ this.data.tree.status = "completed";
234
+ this.save();
235
+ }
236
+ /** Get the underlying checkpoint data */
237
+ getData() {
238
+ return this.data;
239
+ }
240
+ /** Get a checkpoint node by full directory path, or null */
241
+ getNode(dirPath) {
242
+ const segs = this.getSegments(dirPath);
243
+ return this.findNode(segs);
244
+ }
245
+ }
246
+ //# sourceMappingURL=checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["checkpoint.ts"],"names":[],"mappings":"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"}
package/diskwalker.js CHANGED
@@ -21,17 +21,41 @@ import * as path from 'path';
21
21
  import { spawn } from 'child_process';
22
22
  import { styleText } from 'node:util';
23
23
  import { compilePatterns, defaultWalkOptions, suppressedErrors } from './utils.js';
24
+ import { CheckpointManager } from './checkpoint.js';
24
25
  export class DiskWalker {
25
26
  topPath;
26
27
  static defaultOptions = defaultWalkOptions;
27
28
  options;
28
29
  walker;
29
30
  lastProgressTime = 0;
31
+ visitedDirs = new Set();
32
+ checkpoint = null;
30
33
  constructor(topPath = '.', options = {}) {
31
34
  this.topPath = topPath;
32
35
  this.options = { ...DiskWalker.defaultOptions, ...options };
33
36
  this.topPath = path.resolve(topPath);
34
- this.walker = new WalkTree(this.topPath, this.options, this.showProgress.bind(this));
37
+ // Set up checkpoint (on by default, -nr disables)
38
+ if (this.options.resumable) {
39
+ if (!this.options.restart) {
40
+ const saved = CheckpointManager.load(this.topPath);
41
+ if (saved && saved.header.status !== "completed"
42
+ && CheckpointManager.isCompatible(saved, this.topPath)
43
+ && !CheckpointManager.isStale(saved)) {
44
+ this.checkpoint = new CheckpointManager(this.topPath, this.options);
45
+ this.checkpoint.resume(saved);
46
+ const completed = saved.tree.children.filter(c => c.status === "completed").length;
47
+ const total = saved.tree.children.length;
48
+ console.log(styleText(['cyan'], `Resuming scan started ${saved.header.startedAt} (${completed}/${total} top-level dirs checkpointed)`));
49
+ }
50
+ else {
51
+ this.checkpoint = new CheckpointManager(this.topPath, this.options);
52
+ }
53
+ }
54
+ else {
55
+ this.checkpoint = new CheckpointManager(this.topPath, this.options);
56
+ }
57
+ }
58
+ this.walker = new WalkTree(this.topPath, this.options, this.showProgress.bind(this), 0, this.visitedDirs, this.checkpoint);
35
59
  }
36
60
  truncatePath(fullPath, maxLength = 64) {
37
61
  if (fullPath.length <= maxLength)
@@ -48,6 +72,9 @@ export class DiskWalker {
48
72
  process.stdout.write('\x1b[2K\r'); // Clear entire line and return to start
49
73
  const line = styleText(['blue'], `${walker.formatSize().padStart(13)} ${this.options.sizeUnit} ${truncatedPath}`);
50
74
  process.stdout.write(line);
75
+ if (this.checkpoint) {
76
+ this.checkpoint.updateProgress(currentPath, walker.formatSize(), this.options.sizeUnit);
77
+ }
51
78
  this.lastProgressTime = now;
52
79
  }
53
80
  }
@@ -64,17 +91,59 @@ export class DiskWalker {
64
91
  process.stdout.write('\x1b[2K\r'); // Clear progress line
65
92
  }
66
93
  console.log(`${this.walker.formatSize()} ${this.walker.getDisplayUnit()} ${styleText(['blue'], this.topPath)}`);
94
+ // Show grand totals
95
+ if (!this.options.quiet && !this.options.finding && !this.options.cmd) {
96
+ console.log(`\nTotal: ${this.walker.getTotalDirCount().toLocaleString()} directories, ${this.walker.getTotalFileCount().toLocaleString()} files`);
97
+ }
98
+ // Finalize checkpoint
99
+ if (this.checkpoint) {
100
+ if (this.options.keepCheckpoint) {
101
+ this.checkpoint.markScanCompleted({
102
+ size: this.walker.getLength(),
103
+ compressedSize: this.walker.getCompressedLength(),
104
+ dirs: this.walker.getTotalDirCount(),
105
+ files: this.walker.getTotalFileCount(),
106
+ });
107
+ }
108
+ else {
109
+ CheckpointManager.remove(this.topPath);
110
+ }
111
+ }
67
112
  }
68
113
  catch (err) {
114
+ // Save checkpoint on error so we can resume
115
+ if (this.checkpoint) {
116
+ this.checkpoint.save();
117
+ }
69
118
  console.error('Failed:', err.message);
70
119
  }
71
120
  }
72
121
  }
122
+ /** Format a byte size for display (standalone version of WalkTree.formatSize) */
123
+ function formatSizeValue(bytes, compressedBytes, options) {
124
+ if (bytes < 1024 * 1024) {
125
+ const formatted = Math.round(bytes / 1024).toLocaleString();
126
+ if (options.showCompressed && bytes !== compressedBytes) {
127
+ return `${formatted}/${Math.round(compressedBytes / 1024).toLocaleString()}`;
128
+ }
129
+ return formatted;
130
+ }
131
+ const divisor = options.sizeUnit === 'GB' ? (1024 * 1024 * 1024) : (1024 * 1024);
132
+ const fractionDigits = options.sizeUnit === 'MB' ? 0 : 2;
133
+ const formatted = (bytes / divisor).toLocaleString(undefined, { minimumFractionDigits: fractionDigits, maximumFractionDigits: fractionDigits });
134
+ if (options.showCompressed && bytes !== compressedBytes) {
135
+ const compFmt = (compressedBytes / divisor).toLocaleString(undefined, { minimumFractionDigits: fractionDigits, maximumFractionDigits: fractionDigits });
136
+ return `${formatted}/${compFmt}`;
137
+ }
138
+ return formatted;
139
+ }
73
140
  class WalkTree {
74
141
  dirPath;
75
142
  options;
76
143
  progressCallback;
77
144
  atDepth;
145
+ visitedDirs;
146
+ checkpoint;
78
147
  length = 0;
79
148
  compressedLength = 0;
80
149
  fileCount = 0;
@@ -86,11 +155,13 @@ class WalkTree {
86
155
  nextTitleUpdate = new Date(0);
87
156
  seenErrors = new Set();
88
157
  findingRegexes = null;
89
- constructor(dirPath, options, progressCallback, atDepth = 0) {
158
+ constructor(dirPath, options, progressCallback, atDepth = 0, visitedDirs = new Set(), checkpoint = null) {
90
159
  this.dirPath = dirPath;
91
160
  this.options = options;
92
161
  this.progressCallback = progressCallback;
93
162
  this.atDepth = atDepth;
163
+ this.visitedDirs = visitedDirs;
164
+ this.checkpoint = checkpoint;
94
165
  // Precompile find patterns into safe RegExp objects to avoid invalid regex errors
95
166
  if (this.options.finding) {
96
167
  this.findingRegexes = compilePatterns(this.options.finding);
@@ -100,6 +171,18 @@ class WalkTree {
100
171
  this.prefix = atDepth.toString().padStart(2, '0') + ' ' + this.prefix;
101
172
  }
102
173
  }
174
+ async getFileId(filePath) {
175
+ try {
176
+ const stats = await fp.stat(filePath);
177
+ // Use device + inode as unique identifier
178
+ // On Windows, dev and ino are available but may not be as reliable
179
+ // We combine them to create a unique key
180
+ return `${stats.dev}:${stats.ino}`;
181
+ }
182
+ catch {
183
+ return null;
184
+ }
185
+ }
103
186
  formatSize() {
104
187
  // If under 1MB, show in KB
105
188
  if (this.length < 1024 * 1024) {
@@ -133,6 +216,49 @@ class WalkTree {
133
216
  // Otherwise use the configured unit
134
217
  return this.options.sizeUnit;
135
218
  }
219
+ getTotalDirCount() {
220
+ return this.totalDirCount;
221
+ }
222
+ getTotalFileCount() {
223
+ return this.totalFileCount;
224
+ }
225
+ getLength() {
226
+ return this.length;
227
+ }
228
+ getCompressedLength() {
229
+ return this.compressedLength;
230
+ }
231
+ getDirCount() {
232
+ return this.dirCount;
233
+ }
234
+ getFileCount() {
235
+ return this.fileCount;
236
+ }
237
+ /** Recursively print completed children from checkpoint tree at the given depth */
238
+ printCheckpointChildren(node, atDepth) {
239
+ for (const child of node.children) {
240
+ if (child.status !== "completed")
241
+ continue;
242
+ const prefix = this.options.verbose
243
+ ? atDepth.toString().padStart(2, '0') + ' ' + ' '.repeat(atDepth * 5)
244
+ : ' '.repeat(atDepth * 5);
245
+ const divisor = this.options.sizeUnit === 'GB' ? (1024 * 1024 * 1024) : (1024 * 1024);
246
+ const size = child.size / divisor;
247
+ if (size >= this.options.threshold && atDepth < this.options.depth) {
248
+ if (!this.options.quiet) {
249
+ process.stdout.write('\x1b[2K\r');
250
+ }
251
+ const fmtSize = formatSizeValue(child.size, child.compressedSize, this.options);
252
+ const unit = child.size < 1024 * 1024 ? 'KB' : this.options.sizeUnit;
253
+ console.log(`${prefix} ${fmtSize.padStart(13)} ${unit} ` +
254
+ `${child.totalDirs.toString().padStart(5)} ` +
255
+ `${child.totalFiles.toString().padStart(6)} ${styleText(['blue'], child.name)}`);
256
+ }
257
+ if (child.children.length > 0 && atDepth + 1 < this.options.depth) {
258
+ this.printCheckpointChildren(child, atDepth + 1);
259
+ }
260
+ }
261
+ }
136
262
  logError(context, err) {
137
263
  if (!this.options.verbose &&
138
264
  (this.options.quiet || suppressedErrors.some(e => err.message.includes(e)))) {
@@ -153,6 +279,64 @@ class WalkTree {
153
279
  return false;
154
280
  }
155
281
  }
282
+ async getSymlinkInfo(testPath) {
283
+ try {
284
+ const stats = await fp.lstat(testPath);
285
+ // Check if it's a symbolic link (includes junctions on some Node.js versions)
286
+ if (stats.isSymbolicLink()) {
287
+ let target = '';
288
+ try {
289
+ target = await fp.readlink(testPath);
290
+ }
291
+ catch { }
292
+ // On Windows, distinguish between junctions and symlinks
293
+ if (process.platform === 'win32') {
294
+ try {
295
+ const realStats = await fp.stat(testPath);
296
+ // If it's a directory symlink on Windows, it's likely a junction
297
+ return { isLink: true, isJunction: realStats.isDirectory(), target };
298
+ }
299
+ catch {
300
+ return { isLink: true, isJunction: false, target };
301
+ }
302
+ }
303
+ return { isLink: true, isJunction: false, target };
304
+ }
305
+ // On Windows, also check for junctions/reparse points that might not be detected as symlinks
306
+ if (process.platform === 'win32' && stats.isDirectory()) {
307
+ try {
308
+ // Try to read the link target - if successful, it's a junction/reparse point
309
+ const target = await fp.readlink(testPath);
310
+ if (target) {
311
+ return { isLink: true, isJunction: true, target };
312
+ }
313
+ }
314
+ catch {
315
+ // Not a reparse point/junction
316
+ }
317
+ }
318
+ return { isLink: false, isJunction: false, target: '' };
319
+ }
320
+ catch {
321
+ return { isLink: false, isJunction: false, target: '' };
322
+ }
323
+ }
324
+ isSystemDirectory(dirPath) {
325
+ if (process.platform !== 'win32')
326
+ return false;
327
+ const normalized = path.normalize(dirPath).toLowerCase();
328
+ const systemPaths = [
329
+ '\\windows\\',
330
+ '\\program files\\',
331
+ '\\program files (x86)\\',
332
+ '\\programdata\\',
333
+ '\\system volume information',
334
+ '\\$recycle.bin',
335
+ '\\recovery',
336
+ '\\perflogs'
337
+ ];
338
+ return systemPaths.some(sysPath => normalized.includes(sysPath));
339
+ }
156
340
  async processDirectory() {
157
341
  try {
158
342
  if (Date.now() > this.nextTitleUpdate.getTime()) {
@@ -225,9 +409,18 @@ class WalkTree {
225
409
  }
226
410
  async walk() {
227
411
  try {
228
- const isSymlink = await this.isSymlink(this.dirPath);
229
- if (isSymlink)
412
+ // Check if this directory itself is a symlink - if not following links, don't traverse into it
413
+ const currentIsSymlink = await this.isSymlink(this.dirPath);
414
+ if (currentIsSymlink && !this.options.followLinks)
230
415
  return;
416
+ // Check if we've already visited this directory (loop detection)
417
+ const fileId = await this.getFileId(this.dirPath);
418
+ if (fileId) {
419
+ if (this.visitedDirs.has(fileId)) {
420
+ return; // Already visited, skip to prevent loops
421
+ }
422
+ this.visitedDirs.add(fileId);
423
+ }
231
424
  this.progressCallback(this, this.dirPath);
232
425
  if (this.options.cmd || this.options.finding || this.options.forceAcl) {
233
426
  if (this.options.forceAcl) {
@@ -245,29 +438,154 @@ class WalkTree {
245
438
  }
246
439
  const entries = await fp.readdir(this.dirPath, { withFileTypes: true });
247
440
  for (const entry of entries) {
248
- if (entry.isDirectory()) {
441
+ if (entry.isDirectory() || entry.isSymbolicLink()) {
249
442
  const subPath = path.join(this.dirPath, entry.name);
250
- const walker = new WalkTree(subPath, this.options, this.progressCallback, this.atDepth + 1);
251
- try {
252
- await walker.walk();
443
+ // Use Dirent's isSymbolicLink() which is reliable on Windows
444
+ const isLink = entry.isSymbolicLink();
445
+ let target = '';
446
+ let isJunction = false;
447
+ let isBroken = false;
448
+ let isRevisit = false;
449
+ if (isLink) {
450
+ try {
451
+ target = await fp.readlink(subPath);
452
+ // Check if target exists
453
+ try {
454
+ const targetStats = await fp.stat(subPath); // Follow the link
455
+ // On Windows, if the target is a directory, it's a junction
456
+ // If it's a file, it's a file symlink
457
+ if (process.platform === 'win32') {
458
+ isJunction = targetStats.isDirectory();
459
+ }
460
+ // Check if we've already visited this target
461
+ const targetId = `${targetStats.dev}:${targetStats.ino}`;
462
+ if (this.visitedDirs.has(targetId)) {
463
+ isRevisit = true;
464
+ }
465
+ }
466
+ catch {
467
+ // Target doesn't exist or can't be accessed
468
+ isBroken = true;
469
+ // For broken links on Windows, assume junction (most common)
470
+ // unless we have evidence otherwise
471
+ if (process.platform === 'win32') {
472
+ isJunction = true;
473
+ }
474
+ }
475
+ }
476
+ catch {
477
+ // Can't read link target
478
+ isBroken = true;
479
+ }
480
+ // Verbose logging for link detection
481
+ if (this.options.verbose) {
482
+ const status = isBroken ? ' (BROKEN)' : isRevisit ? ' (REVISIT)' : '';
483
+ console.log(`[DEBUG] Detected ${isJunction ? 'Junction' : 'Symlink'}: ${entry.name} -> ${target}${status}`);
484
+ }
485
+ }
486
+ const isSystem = this.isSystemDirectory(subPath);
487
+ let linkSymbol = '';
488
+ if (isLink && !this.options.noTargets) {
489
+ // Only show [sym] prefix for symlinks, junctions don't need a prefix
490
+ const linkPrefix = (process.platform === 'win32' && !isJunction) ? '[sym]' : '';
491
+ const linkLabel = this.options.showTargets
492
+ ? `${linkPrefix}${target}`
493
+ : linkPrefix;
494
+ if (isBroken) {
495
+ // Broken link - link symbol with white on red background, then label
496
+ linkSymbol = ' ' + styleText(['white', 'bgRed'], '🔗') + linkLabel;
497
+ }
498
+ else if (isRevisit) {
499
+ // Revisit - link symbol with green background, then label and circular arrow
500
+ linkSymbol = ' ' + styleText(['white', 'bgGreen'], '🔗') + linkLabel + ' ' + styleText(['yellow', 'bgBlack'], '↻');
501
+ }
502
+ else {
503
+ // Normal link - link symbol with green background, then label
504
+ linkSymbol = ' ' + styleText(['white', 'bgGreen'], '🔗') + linkLabel;
505
+ }
506
+ }
507
+ const systemSymbol = isSystem ? ' ' + styleText(['yellow', 'bgBlack'], '🛡️') : '';
508
+ // If it's a link and we're not following links, show it but don't traverse
509
+ if (isLink && !this.options.followLinks) {
253
510
  this.dirCount++;
254
- this.length += walker.length;
255
- this.compressedLength += walker.compressedLength;
256
- this.totalFileCount += walker.totalFileCount;
257
- this.totalDirCount += walker.totalDirCount + 1;
258
- const divisor = this.options.sizeUnit === 'GB' ? (1024 * 1024 * 1024) : (1024 * 1024);
259
- const size = walker.length / divisor;
260
- if (size >= this.options.threshold && this.atDepth < this.options.depth) {
511
+ this.totalDirCount++;
512
+ if (this.atDepth < this.options.depth) {
261
513
  if (!this.options.quiet) {
262
514
  process.stdout.write('\x1b[2K\r'); // Clear progress line
263
515
  }
264
- console.log(`${this.prefix} ${walker.formatSize().padStart(13)} ${walker.getDisplayUnit()} ` +
265
- `${walker.totalDirCount.toString().padStart(5)} ` +
266
- `${walker.totalFileCount.toString().padStart(6)} ${styleText(['blue'], entry.name)}`);
516
+ console.log(`${this.prefix} ${'0'.padStart(13)} ${this.options.sizeUnit} ` +
517
+ `${'0'.padStart(5)} ` +
518
+ `${'0'.padStart(6)} ${styleText(['blue'], entry.name)}${linkSymbol}${systemSymbol}`);
267
519
  }
268
520
  }
269
- catch (err) {
270
- this.logError(entry.name, err);
521
+ else if (entry.isDirectory()) {
522
+ // Check if checkpoint says this directory is already completed
523
+ const savedStats = this.checkpoint?.getCompletedStats(subPath);
524
+ if (savedStats) {
525
+ // Use saved stats instead of re-walking
526
+ this.dirCount++;
527
+ this.length += savedStats.size;
528
+ this.compressedLength += savedStats.compressedSize;
529
+ this.totalFileCount += savedStats.totalFiles;
530
+ this.totalDirCount += savedStats.totalDirs + 1;
531
+ // Print this entry from checkpoint (dim name to indicate cached)
532
+ const divisor = this.options.sizeUnit === 'GB' ? (1024 * 1024 * 1024) : (1024 * 1024);
533
+ const size = savedStats.size / divisor;
534
+ if (size >= this.options.threshold && this.atDepth < this.options.depth) {
535
+ if (!this.options.quiet) {
536
+ process.stdout.write('\x1b[2K\r');
537
+ }
538
+ const fmtSize = formatSizeValue(savedStats.size, savedStats.compressedSize, this.options);
539
+ const unit = savedStats.size < 1024 * 1024 ? 'KB' : this.options.sizeUnit;
540
+ console.log(`${this.prefix} ${fmtSize.padStart(13)} ${unit} ` +
541
+ `${savedStats.totalDirs.toString().padStart(5)} ` +
542
+ `${savedStats.totalFiles.toString().padStart(6)} ${styleText(['blue'], entry.name)}${linkSymbol}${systemSymbol}`);
543
+ }
544
+ // Print deeper children from checkpoint if depth allows
545
+ const cpNode = this.checkpoint?.getNode(subPath);
546
+ if (cpNode && cpNode.children.length > 0 && this.atDepth + 1 < this.options.depth) {
547
+ this.printCheckpointChildren(cpNode, this.atDepth + 1);
548
+ }
549
+ continue;
550
+ }
551
+ // Not a link (or we're following links), traverse normally
552
+ if (this.checkpoint) {
553
+ this.checkpoint.markInProgress(subPath);
554
+ }
555
+ const walker = new WalkTree(subPath, this.options, this.progressCallback, this.atDepth + 1, this.visitedDirs, this.checkpoint);
556
+ try {
557
+ await walker.walk();
558
+ this.dirCount++;
559
+ this.length += walker.length;
560
+ this.compressedLength += walker.compressedLength;
561
+ this.totalFileCount += walker.totalFileCount;
562
+ this.totalDirCount += walker.totalDirCount + 1;
563
+ // Mark completed in checkpoint and save if due
564
+ if (this.checkpoint) {
565
+ this.checkpoint.markCompleted(subPath, {
566
+ size: walker.getLength(),
567
+ compressedSize: walker.getCompressedLength(),
568
+ dirs: walker.getDirCount(),
569
+ files: walker.getFileCount(),
570
+ totalDirs: walker.getTotalDirCount(),
571
+ totalFiles: walker.getTotalFileCount(),
572
+ });
573
+ this.checkpoint.saveIfDue();
574
+ }
575
+ const divisor = this.options.sizeUnit === 'GB' ? (1024 * 1024 * 1024) : (1024 * 1024);
576
+ const size = walker.length / divisor;
577
+ if (size >= this.options.threshold && this.atDepth < this.options.depth) {
578
+ if (!this.options.quiet) {
579
+ process.stdout.write('\x1b[2K\r'); // Clear progress line
580
+ }
581
+ console.log(`${this.prefix} ${walker.formatSize().padStart(13)} ${walker.getDisplayUnit()} ` +
582
+ `${walker.totalDirCount.toString().padStart(5)} ` +
583
+ `${walker.totalFileCount.toString().padStart(6)} ${styleText(['blue'], entry.name)}${linkSymbol}${systemSymbol}`);
584
+ }
585
+ }
586
+ catch (err) {
587
+ this.logError(entry.name, err);
588
+ }
271
589
  }
272
590
  }
273
591
  }
package/diskwalker.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"diskwalker.js","sourceRoot":"","sources":["diskwalker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diskwalker.js","sourceRoot":"","sources":["diskwalker.ts"],"names":[],"mappings":"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"}
package/index.js CHANGED
@@ -9,41 +9,50 @@ function showVersion() {
9
9
  process.exit(0);
10
10
  }
11
11
  function showUsage() {
12
- console.log(`tswalk v${version}
13
-
14
- Usage: tswalk [path] [depth] [options]
15
- path Directory to analyze (default: current directory)
16
- depth Maximum depth to show in output (default: 1)
17
-
18
- Options:
19
- -d, -depth Set maximum depth to show in output
20
- -t Threshold in MB/GB for showing directories
21
- -mb Show sizes in megabytes (default)
22
- -gb Show sizes in gigabytes
23
- -c Show compressed sizes (Windows only)
24
- -r "cmd" Run command in each directory
25
- -f pattern Find files matching pattern (can use ;-separated patterns)
26
- -v Verbose output (show all errors including ENOENT/EPERM)
27
- -q Quiet mode (no progress updates, minimal errors)
28
- -acl Force ACL operations (Windows only)
29
- --version Show version number
30
-
31
- Progress:
32
- Shows current directory being processed every second in blue.
33
- Long paths are truncated in progress display.
34
-
35
- Error Handling:
36
- Default: Shows significant errors (excluding ENOENT/EPERM)
37
- -v: Shows all errors including access denied and not found
38
- -q: Shows only fatal errors
39
-
40
- Examples:
41
- tswalk . # Analyze current directory
42
- tswalk /path 3 # Show 3 levels deep
43
- tswalk /path -d 3 -gb # Same, but show sizes in GB
44
- tswalk /path -t 100 -gb # Show dirs > 100GB
45
- tswalk . -f "*.ts;*.js" # Find TypeScript and JavaScript files
46
- tswalk /path -v # Show all errors while processing
12
+ console.log(`tswalk v${version}
13
+
14
+ Usage: tswalk [path] [depth] [options]
15
+ path Directory to analyze (default: current directory)
16
+ depth Maximum depth to show in output (default: 1)
17
+
18
+ Options:
19
+ -d, -depth Set maximum depth to show in output
20
+ -threshold Threshold in MB/GB for showing directories
21
+ -nt Don't show link targets (targets shown by default)
22
+ -l, -links Follow symbolic links and junctions (with loop detection)
23
+ -mb Show sizes in megabytes (default)
24
+ -gb Show sizes in gigabytes
25
+ -c Show compressed sizes (Windows only)
26
+ -cmd "cmd" Run command in each directory
27
+ -f pattern Find files matching pattern (can use ;-separated patterns)
28
+ -r,-resumable Keep .tswalk.json after completion (default: auto-resume, delete on finish)
29
+ -nr Disable checkpointing entirely
30
+ -restart Discard existing checkpoint and start fresh
31
+ -v Verbose output (show all errors including ENOENT/EPERM)
32
+ -q Quiet mode (no progress updates, minimal errors)
33
+ -acl Force ACL operations (Windows only)
34
+ --version Show version number
35
+
36
+ Progress:
37
+ Shows current directory being processed every second in blue.
38
+ Long paths are truncated in progress display.
39
+
40
+ Error Handling:
41
+ Default: Shows significant errors (excluding ENOENT/EPERM)
42
+ -v: Shows all errors including access denied and not found
43
+ -q: Shows only fatal errors
44
+
45
+ Examples:
46
+ tswalk . # Analyze current directory
47
+ tswalk /path 3 # Show 3 levels deep
48
+ tswalk /path -d 3 -gb # Same, but show sizes in GB
49
+ tswalk /path -t 100 -gb # Show dirs > 100GB
50
+ tswalk . -f "*.ts;*.js" # Find TypeScript and JavaScript files
51
+ tswalk /path -v # Show all errors while processing
52
+ tswalk c:\\ -gb # Auto-resumes if interrupted, cleans up on finish
53
+ tswalk c:\\ -r -gb # Keep .tswalk.json after completion
54
+ tswalk c:\\ -restart # Discard previous checkpoint, start fresh
55
+ tswalk . -nr # No checkpointing
47
56
  `);
48
57
  process.exit(0);
49
58
  }
@@ -63,16 +72,35 @@ async function main() {
63
72
  const arg = args[i];
64
73
  if (arg.startsWith('-')) {
65
74
  switch (arg) {
66
- case '-r':
67
- case '-run':
75
+ case '-cmd':
68
76
  options.cmd = args[++i];
69
77
  break;
78
+ case '-r':
79
+ case '-resumable':
80
+ options.keepCheckpoint = true;
81
+ break;
82
+ case '-nr':
83
+ options.resumable = false;
84
+ break;
85
+ case '-restart':
86
+ options.restart = true;
87
+ break;
70
88
  case '-d':
71
89
  case '-depth':
72
90
  options.depth = parseInt(args[++i]);
73
91
  foundDepth = true;
74
92
  break;
75
93
  case '-t':
94
+ case '-target':
95
+ options.showTargets = true;
96
+ break;
97
+ case '-nt':
98
+ options.noTargets = true;
99
+ break;
100
+ case '-l':
101
+ case '-links':
102
+ options.followLinks = true;
103
+ break;
76
104
  case '-threshold':
77
105
  options.threshold = parseInt(args[++i]);
78
106
  break;
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,58 +1,66 @@
1
- {
2
- "name": "@bobfrankston/tswalk",
3
- "version": "1.1.11",
4
- "description": "Fast TypeScript directory tree walker with file search, size analysis, and pattern matching",
5
- "main": "index.js",
6
- "exports": {
7
- ".": {
8
- "import": "./index.js",
9
- "types": "./index.d.ts"
10
- }
11
- },
12
- "bin": {
13
- "tswalk": "./index.js"
14
- },
15
- "files": [
16
- "*.js",
17
- "*.d.ts",
18
- "*.js.map",
19
- "bin/"
20
- ],
21
- "engines": {
22
- "node": ">=24.0.0"
23
- },
24
- "scripts": {
25
- "build": "tsc",
26
- "clean": "rimraf *.js *.d.ts *.js.map bin/*.js",
27
- "prerelease:local": "git add -A && (git diff-index --quiet HEAD || git commit -m \"Pre-release commit\")",
28
- "preversion": "npm run build && git add -A",
29
- "postversion": "git push && git push --tags",
30
- "release": "npm run prerelease:local && npm version patch && npm publish",
31
- "release:ps1": "releaseapp.ps1",
32
- "test": "echo \"Error: no test specified\" && exit 1",
33
- "installer": "npm run release && npm install -g @bobfrankston/tswalk && wsl npm install -g @bobfrankston/tswalk",
34
- "dev": "tsc --watch",
35
- "start": "node index.js"
36
- },
37
- "keywords": [
38
- "typescript",
39
- "directory",
40
- "tree",
41
- "walker",
42
- "filesystem",
43
- "disk-usage",
44
- "file-search"
45
- ],
46
- "author": "Bob Frankston",
47
- "license": "ISC",
48
- "publishConfig": {
49
- "access": "public"
50
- },
51
- "type": "module",
52
- "dependencies": {
53
- "esm": "^3.2.25"
54
- },
55
- "devDependencies": {
56
- "@types/node": "^24.9.1"
57
- }
58
- }
1
+ {
2
+ "name": "@bobfrankston/tswalk",
3
+ "version": "1.1.13",
4
+ "description": "Fast TypeScript directory tree walker with file search, size analysis, and pattern matching",
5
+ "main": "index.js",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./index.js",
9
+ "types": "./index.d.ts"
10
+ }
11
+ },
12
+ "bin": {
13
+ "tswalk": "./index.js"
14
+ },
15
+ "files": [
16
+ "*.js",
17
+ "*.d.ts",
18
+ "*.js.map",
19
+ "bin/"
20
+ ],
21
+ "engines": {
22
+ "node": ">=24.0.0"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "clean": "rimraf *.js *.d.ts *.js.map bin/*.js",
27
+ "prerelease:local": "git add -A && (git diff-index --quiet HEAD || git commit -m \"Pre-release commit\")",
28
+ "preversion": "npm run build && git add -A",
29
+ "postversion": "git push && git push --tags",
30
+ "release": "npm run prerelease:local && npm version patch && npm publish",
31
+ "release:ps1": "releaseapp.ps1",
32
+ "test": "echo \"Error: no test specified\" && exit 1",
33
+ "installer": "npm run release && npm install -g @bobfrankston/tswalk && wsl npm install -g @bobfrankston/tswalk",
34
+ "dev": "tsc --watch",
35
+ "start": "node index.js"
36
+ },
37
+ "keywords": [
38
+ "typescript",
39
+ "directory",
40
+ "tree",
41
+ "walker",
42
+ "filesystem",
43
+ "disk-usage",
44
+ "file-search"
45
+ ],
46
+ "author": "Bob Frankston",
47
+ "license": "ISC",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "git+https://github.com/BobFrankston/tswalk.git"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/BobFrankston/tswalk/issues"
54
+ },
55
+ "homepage": "https://github.com/BobFrankston/tswalk#readme",
56
+ "publishConfig": {
57
+ "access": "public"
58
+ },
59
+ "type": "module",
60
+ "dependencies": {
61
+ "esm": "^3.2.25"
62
+ },
63
+ "devDependencies": {
64
+ "@types/node": "^25.3.0"
65
+ }
66
+ }
package/utils.js CHANGED
@@ -48,10 +48,16 @@ export const defaultWalkOptions = {
48
48
  finding: null,
49
49
  forceAcl: false,
50
50
  quiet: false,
51
- sizeUnit: 'MB'
51
+ sizeUnit: 'MB',
52
+ showTargets: true,
53
+ noTargets: false,
54
+ followLinks: true,
55
+ resumable: true,
56
+ keepCheckpoint: false,
57
+ restart: false
52
58
  };
53
59
  /**
54
60
  * Error types to suppress unless verbose mode is enabled
55
61
  */
56
- export const suppressedErrors = ['ENOENT', 'EPERM', 'EACCES'];
62
+ export const suppressedErrors = ['ENOENT', 'EPERM', 'EACCES', 'ENOTDIR'];
57
63
  //# sourceMappingURL=utils.js.map
package/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,CAAC;YACD,4CAA4C;YAC5C,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBAChC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClC,SAAS;YACb,CAAC;YAED,kFAAkF;YAClF,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;iBACnD,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;iBACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,sEAAsE;YACtE,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAiBD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC3C,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,EAAE;IACP,OAAO,EAAE,KAAK;IACd,cAAc,EAAE,KAAK;IACrB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,IAAI;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,CAAC;YACD,4CAA4C;YAC5C,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBAChC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClC,SAAS;YACb,CAAC;YAED,kFAAkF;YAClF,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;iBACnD,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;iBACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,sEAAsE;YACtE,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAuBD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC3C,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,EAAE;IACP,OAAO,EAAE,KAAK;IACd,cAAc,EAAE,KAAK;IACrB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,KAAK;IACrB,OAAO,EAAE,KAAK;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC"}