@macrulez/devtoolz 0.2.0 → 0.3.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.
Files changed (80) hide show
  1. package/README.md +131 -8
  2. package/dist/cli.js +265 -8
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/case-check/report.js +8 -6
  5. package/dist/commands/case-check/report.js.map +1 -1
  6. package/dist/commands/circular-imports/report.js +11 -12
  7. package/dist/commands/circular-imports/report.js.map +1 -1
  8. package/dist/commands/console-strip/report.js +9 -7
  9. package/dist/commands/console-strip/report.js.map +1 -1
  10. package/dist/commands/dead-exports/report.js +6 -4
  11. package/dist/commands/dead-exports/report.js.map +1 -1
  12. package/dist/commands/empty-catch/report.js +5 -3
  13. package/dist/commands/empty-catch/report.js.map +1 -1
  14. package/dist/commands/exports-doctor/report.js +7 -5
  15. package/dist/commands/exports-doctor/report.js.map +1 -1
  16. package/dist/commands/full-check/report.d.ts +3 -0
  17. package/dist/commands/full-check/report.js +55 -0
  18. package/dist/commands/full-check/report.js.map +1 -0
  19. package/dist/commands/full-check/run.d.ts +32 -0
  20. package/dist/commands/full-check/run.js +251 -0
  21. package/dist/commands/full-check/run.js.map +1 -0
  22. package/dist/commands/image-hash/cache.d.ts +14 -0
  23. package/dist/commands/image-hash/cache.js +40 -0
  24. package/dist/commands/image-hash/cache.js.map +1 -0
  25. package/dist/commands/image-hash/core.d.ts +56 -0
  26. package/dist/commands/image-hash/core.js +293 -0
  27. package/dist/commands/image-hash/core.js.map +1 -0
  28. package/dist/commands/image-hash/hash.d.ts +19 -0
  29. package/dist/commands/image-hash/hash.js +97 -0
  30. package/dist/commands/image-hash/hash.js.map +1 -0
  31. package/dist/commands/image-hash/report.d.ts +3 -0
  32. package/dist/commands/image-hash/report.js +94 -0
  33. package/dist/commands/image-hash/report.js.map +1 -0
  34. package/dist/commands/image-hash/run.d.ts +60 -0
  35. package/dist/commands/image-hash/run.js +315 -0
  36. package/dist/commands/image-hash/run.js.map +1 -0
  37. package/dist/commands/image-hash/sharp-loader.d.ts +59 -0
  38. package/dist/commands/image-hash/sharp-loader.js +79 -0
  39. package/dist/commands/image-hash/sharp-loader.js.map +1 -0
  40. package/dist/commands/orphan-tests/report.js +7 -5
  41. package/dist/commands/orphan-tests/report.js.map +1 -1
  42. package/dist/commands/readme-check/report.js +7 -5
  43. package/dist/commands/readme-check/report.js.map +1 -1
  44. package/dist/commands/scripts-check/report.js +7 -5
  45. package/dist/commands/scripts-check/report.js.map +1 -1
  46. package/dist/commands/stale-ts-ignore/report.js +7 -5
  47. package/dist/commands/stale-ts-ignore/report.js.map +1 -1
  48. package/dist/commands/strip-comments/report.js +6 -4
  49. package/dist/commands/strip-comments/report.js.map +1 -1
  50. package/dist/commands/todo-report/report.js +7 -5
  51. package/dist/commands/todo-report/report.js.map +1 -1
  52. package/dist/commands/unused-deps/report.js +7 -5
  53. package/dist/commands/unused-deps/report.js.map +1 -1
  54. package/dist/format/colors.d.ts +4 -0
  55. package/dist/format/colors.js +4 -3
  56. package/dist/format/colors.js.map +1 -1
  57. package/dist/format/diff-render.js +2 -2
  58. package/dist/format/diff-render.js.map +1 -1
  59. package/dist/format/file-list.d.ts +1 -9
  60. package/dist/format/file-list.js +5 -16
  61. package/dist/format/file-list.js.map +1 -1
  62. package/dist/format/findings-list.d.ts +1 -8
  63. package/dist/format/findings-list.js +5 -14
  64. package/dist/format/findings-list.js.map +1 -1
  65. package/dist/format/style.d.ts +20 -0
  66. package/dist/format/style.js +36 -0
  67. package/dist/format/style.js.map +1 -0
  68. package/dist/format/table.d.ts +8 -0
  69. package/dist/format/table.js +44 -0
  70. package/dist/format/table.js.map +1 -0
  71. package/dist/format/vibes.d.ts +4 -1
  72. package/dist/format/vibes.js +25 -10
  73. package/dist/format/vibes.js.map +1 -1
  74. package/dist/index.d.ts +7 -0
  75. package/dist/index.js +4 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/utils/walk.d.ts +2 -0
  78. package/dist/utils/walk.js +4 -3
  79. package/dist/utils/walk.js.map +1 -1
  80. package/package.json +4 -1
@@ -1,26 +1,15 @@
1
- import { isFancyOutputEnabled } from './vibes.js';
2
- import { colorize, DIM, WHITE } from './colors.js';
3
- /**
4
- * Renders a `file count` list as two aligned columns — file path on the
5
- * left (white when fancy output is on), count on the right (dim), no
6
- * parens around it. Padding is computed on the PLAIN text first and only
7
- * wrapped in color codes afterward — padding a string that already has
8
- * ANSI escapes in it counts those invisible bytes toward the width and
9
- * throws the alignment off.
10
- */
1
+ import { createStyle } from './style.js';
11
2
  export function formatFileCountRows(entries, unit, options = {}) {
12
3
  if (entries.length === 0)
13
4
  return [];
14
- const fancy = isFancyOutputEnabled(options);
5
+ const style = createStyle(options);
15
6
  const fileWidth = Math.max(...entries.map((e) => e.file.length));
16
7
  const countTexts = entries.map((e) => `${e.count} ${unit(e.count)}`);
17
8
  const countWidth = Math.max(...countTexts.map((t) => t.length));
18
9
  return entries.map((entry, i) => {
19
- const filePart = entry.file.padEnd(fileWidth);
20
- const countPart = countTexts[i].padStart(countWidth);
21
- const styledFile = fancy ? colorize(WHITE, filePart) : filePart;
22
- const styledCount = fancy ? colorize(DIM, countPart) : countPart;
23
- return ` ${styledFile} ${styledCount}`;
10
+ const filePart = style.path(entry.file.padEnd(fileWidth));
11
+ const countPart = style.value(countTexts[i].padStart(countWidth));
12
+ return ` ${filePart} ${countPart}`;
24
13
  });
25
14
  }
26
15
  //# sourceMappingURL=file-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-list.js","sourceRoot":"","sources":["../../src/format/file-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAqB,MAAM,YAAY,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAOlD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAyB,EACzB,IAA+B,EAC/B,UAAwB,EAAE;IAE1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEnC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAE/D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,SAAS,GAAI,UAAU,CAAC,CAAC,CAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAChE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAChE,OAAO,KAAK,UAAU,KAAK,WAAW,EAAE,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"file-list.js","sourceRoot":"","sources":["../../src/format/file-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAOxC,MAAM,UAAU,mBAAmB,CACjC,OAAyB,EACzB,IAA+B,EAC/B,UAAwB,EAAE;IAE1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEnC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAE/D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAE,UAAU,CAAC,CAAC,CAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;QAC7E,OAAO,KAAK,QAAQ,KAAK,SAAS,EAAE,CAAA;IACtC,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1,14 +1,7 @@
1
- import { type VibesOptions } from './vibes.js';
1
+ import type { VibesOptions } from './vibes.js';
2
2
  export interface FindingRow {
3
- /** e.g. "src/foo.ts:12" */
4
3
  location: string;
5
4
  name: string;
6
- /** e.g. "(type)", "(default)" — empty string for a plain named export */
7
5
  tag: string;
8
6
  }
9
- /**
10
- * Three aligned columns — location (white), symbol name (cyan), trailing
11
- * tag (dim) — same padding-before-color rule as file-list.ts: widths are
12
- * computed on the plain text first, colors wrapped on afterward.
13
- */
14
7
  export declare function formatFindingsRows(entries: FindingRow[], options?: VibesOptions): string[];
@@ -1,23 +1,14 @@
1
- import { isFancyOutputEnabled } from './vibes.js';
2
- import { colorize, CYAN, DIM, WHITE } from './colors.js';
3
- /**
4
- * Three aligned columns — location (white), symbol name (cyan), trailing
5
- * tag (dim) — same padding-before-color rule as file-list.ts: widths are
6
- * computed on the plain text first, colors wrapped on afterward.
7
- */
1
+ import { createStyle } from './style.js';
8
2
  export function formatFindingsRows(entries, options = {}) {
9
3
  if (entries.length === 0)
10
4
  return [];
11
- const fancy = isFancyOutputEnabled(options);
5
+ const style = createStyle(options);
12
6
  const locationWidth = Math.max(...entries.map((e) => e.location.length));
13
7
  const nameWidth = Math.max(...entries.map((e) => e.name.length));
14
8
  return entries.map((entry) => {
15
- const locationPart = entry.location.padEnd(locationWidth);
16
- const namePart = entry.name.padEnd(nameWidth);
17
- const styledLocation = fancy ? colorize(WHITE, locationPart) : locationPart;
18
- const styledName = fancy ? colorize(CYAN, namePart) : namePart;
19
- const styledTag = entry.tag && fancy ? colorize(DIM, entry.tag) : entry.tag;
20
- return ` ${styledLocation} ${styledName} ${styledTag}`.trimEnd();
9
+ const locationPart = style.location(entry.location.padEnd(locationWidth));
10
+ const namePart = style.name(entry.name.padEnd(nameWidth));
11
+ return ` ${locationPart} ${namePart} ${style.tag(entry.tag)}`.trimEnd();
21
12
  });
22
13
  }
23
14
  //# sourceMappingURL=findings-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"findings-list.js","sourceRoot":"","sources":["../../src/format/findings-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAqB,MAAM,YAAY,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAUxD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAqB,EAAE,UAAwB,EAAE;IAClF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEnC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAEhE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;QAC3E,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA;QAC3E,OAAO,KAAK,cAAc,KAAK,UAAU,KAAK,SAAS,EAAE,CAAC,OAAO,EAAE,CAAA;IACrE,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"findings-list.js","sourceRoot":"","sources":["../../src/format/findings-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAQxC,MAAM,UAAU,kBAAkB,CAAC,OAAqB,EAAE,UAAwB,EAAE;IAClF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEnC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAEhE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;QACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;QACzD,OAAO,KAAK,YAAY,KAAK,QAAQ,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAA;IAC5E,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type VibesOptions } from './vibes.js';
2
+ export interface Style {
3
+ enabled: boolean;
4
+ info(text: string): string;
5
+ problem(text: string): string;
6
+ heading(text: string): string;
7
+ success(text: string): string;
8
+ warn(text: string): string;
9
+ error(text: string): string;
10
+ hint(text: string): string;
11
+ path(text: string): string;
12
+ location(text: string): string;
13
+ name(text: string): string;
14
+ tag(text: string): string;
15
+ muted(text: string): string;
16
+ accent(text: string): string;
17
+ value(text: string): string;
18
+ bold(text: string): string;
19
+ }
20
+ export declare function createStyle(options?: VibesOptions): Style;
@@ -0,0 +1,36 @@
1
+ import { BOLD, CYAN, DIM, GRAY, GREEN, MAGENTA, RED, WHITE, YELLOW, colorize } from './colors.js';
2
+ import { isColorEnabled } from './vibes.js';
3
+ const FLAG_PATTERN = /(?<![\w-])(--?[a-zA-Z][\w-]*)/g;
4
+ const LOCATION_PATTERN = /^(.*?)((?::\d+)+)(\s*)$/;
5
+ export function createStyle(options = {}) {
6
+ const enabled = isColorEnabled(options);
7
+ const wrap = (color, text) => (enabled && text ? colorize(color, text) : text);
8
+ return {
9
+ enabled,
10
+ info: (text) => wrap(GRAY, text),
11
+ problem: (text) => wrap(BOLD + RED, text),
12
+ heading: (text) => wrap(BOLD + YELLOW, text),
13
+ success: (text) => wrap(BOLD + GREEN, text),
14
+ warn: (text) => wrap(YELLOW, text),
15
+ error: (text) => wrap(RED, text),
16
+ hint: (text) => enabled
17
+ ? colorize(DIM, text).replace(FLAG_PATTERN, (flag) => `\x1b[0m${CYAN}${flag}\x1b[0m${DIM}`)
18
+ : text,
19
+ path: (text) => wrap(CYAN, text),
20
+ location: (text) => {
21
+ if (!enabled)
22
+ return text;
23
+ const match = LOCATION_PATTERN.exec(text);
24
+ if (!match)
25
+ return colorize(CYAN, text);
26
+ return `${colorize(CYAN, match[1])}${colorize(GRAY, match[2])}${match[3]}`;
27
+ },
28
+ name: (text) => wrap(YELLOW, text),
29
+ tag: (text) => wrap(GRAY, text),
30
+ muted: (text) => wrap(DIM, text),
31
+ accent: (text) => wrap(MAGENTA, text),
32
+ value: (text) => wrap(WHITE, text),
33
+ bold: (text) => wrap(BOLD, text),
34
+ };
35
+ }
36
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/format/style.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { VibesOptions } from './vibes.js';
2
+ export interface TableColumn {
3
+ header: string;
4
+ align?: 'left' | 'right';
5
+ shrink?: boolean;
6
+ style?: (text: string) => string;
7
+ }
8
+ export declare function renderTable(columns: TableColumn[], rows: string[][], options?: VibesOptions, availableWidth?: number | null): string[];
@@ -0,0 +1,44 @@
1
+ import { createStyle } from './style.js';
2
+ const MIN_SHRUNK_WIDTH = 12;
3
+ function shrinkLeft(text, width) {
4
+ if (text.length <= width)
5
+ return text;
6
+ return `…${text.slice(text.length - (width - 1))}`;
7
+ }
8
+ function fitWidths(widths, columns, available) {
9
+ if (available === null)
10
+ return widths;
11
+ const chrome = widths.length * 3 + 1;
12
+ const total = widths.reduce((sum, w) => sum + w, 0) + chrome;
13
+ const shrinkIndex = columns.findIndex((c) => c.shrink);
14
+ if (total <= available || shrinkIndex === -1)
15
+ return widths;
16
+ const fitted = [...widths];
17
+ const target = widths[shrinkIndex] - (total - available);
18
+ fitted[shrinkIndex] = Math.max(MIN_SHRUNK_WIDTH, target);
19
+ return fitted;
20
+ }
21
+ export function renderTable(columns, rows, options = {}, availableWidth = process.stdout.isTTY ? (process.stdout.columns ?? null) : null) {
22
+ const s = createStyle(options);
23
+ const natural = columns.map((column, i) => Math.max(column.header.length, ...rows.map((row) => (row[i] ?? '').length)));
24
+ const widths = fitWidths(natural, columns, availableWidth);
25
+ const cell = (column, index, raw, header) => {
26
+ const width = widths[index];
27
+ const text = column.shrink ? shrinkLeft(raw, width) : raw;
28
+ const padded = column.align === 'right' ? text.padStart(width) : text.padEnd(width);
29
+ if (header)
30
+ return s.bold(padded);
31
+ return column.style ? column.style(padded) : padded;
32
+ };
33
+ const rule = (left, mid, right) => s.muted(`${left}${widths.map((w) => '─'.repeat(w + 2)).join(mid)}${right}`);
34
+ const bar = s.muted('│');
35
+ const line = (texts, header) => `${bar} ${columns.map((column, i) => cell(column, i, texts[i] ?? '', header)).join(` ${bar} `)} ${bar}`;
36
+ return [
37
+ rule('┌', '┬', '┐'),
38
+ line(columns.map((c) => c.header), true),
39
+ rule('├', '┼', '┤'),
40
+ ...rows.map((row) => line(row, false)),
41
+ rule('└', '┴', '┘'),
42
+ ];
43
+ }
44
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/format/table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AASxC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAE3B,SAAS,UAAU,CAAC,IAAY,EAAE,KAAa;IAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,IAAI,CAAA;IACrC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB,EAAE,OAAsB,EAAE,SAAwB;IACnF,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAA;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACtD,IAAI,KAAK,IAAI,SAAS,IAAI,WAAW,KAAK,CAAC,CAAC;QAAE,OAAO,MAAM,CAAA;IAC3D,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;IAC1B,MAAM,MAAM,GAAI,MAAM,CAAC,WAAW,CAAY,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IACpE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;IACxD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,OAAsB,EACtB,IAAgB,EAChB,UAAwB,EAAE,EAC1B,iBAAgC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;IAE9F,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC5E,CAAA;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IAE1D,MAAM,IAAI,GAAG,CAAC,MAAmB,EAAE,KAAa,EAAE,GAAW,EAAE,MAAe,EAAU,EAAE;QACxF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAW,CAAA;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACnF,IAAI,MAAM;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACjC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACrD,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,GAAW,EAAE,KAAa,EAAU,EAAE,CAChE,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;IAC7E,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,MAAM,IAAI,GAAG,CAAC,KAAe,EAAE,MAAe,EAAU,EAAE,CACxD,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAA;IAEzG,OAAO;QACL,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACnB,IAAI,CACF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAC5B,IAAI,CACL;QACD,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACnB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;KACpB,CAAA;AACH,CAAC"}
@@ -3,8 +3,11 @@ export interface VibesOptions {
3
3
  quiet?: boolean;
4
4
  /** --plain: force plain output even in a real TTY (explicit opt-out) */
5
5
  plain?: boolean;
6
+ /** --color: force colored output even when piped or in CI */
7
+ color?: boolean;
6
8
  }
9
+ export declare function isColorEnabled(options?: VibesOptions): boolean;
7
10
  export declare function isFancyOutputEnabled(options?: VibesOptions): boolean;
8
- export declare function banner(): string;
11
+ export declare function banner(options?: VibesOptions): string;
9
12
  export declare function cleanCelebration(options?: VibesOptions): string;
10
13
  export declare function firstRunAside(options?: VibesOptions): string | null;
@@ -1,9 +1,20 @@
1
- // Centralized pool of the CLI's "personality" moments — see features.md
2
- // "Тон вывода" for the ground rules this exists to enforce: humor only at
3
- // bookending moments (banner, all-clean celebration), never inside the
4
- // actual findings list, and only when there's a real human at a real
5
- // terminal to appreciate it. Every command imports from here instead of
6
- // hardcoding a joke inline, so the tone can be tuned in one place.
1
+ import { BOLD, CYAN, GREEN, colorize } from './colors.js';
2
+ export function isColorEnabled(options = {}) {
3
+ if (options.plain)
4
+ return false;
5
+ if (options.color)
6
+ return true;
7
+ if (process.env.NO_COLOR)
8
+ return false;
9
+ const force = process.env.FORCE_COLOR;
10
+ if (force !== undefined && force !== '')
11
+ return force !== '0' && force !== 'false';
12
+ if (process.env.CI)
13
+ return false;
14
+ if (process.env.TERM === 'dumb')
15
+ return false;
16
+ return Boolean(process.stdout.isTTY);
17
+ }
7
18
  // Fancy output (color, banner, celebration copy) only makes sense for a
8
19
  // human watching a real terminal in real time — auto-off the moment any of
9
20
  // that isn't true, no flag required. `--json`/`--quiet`/`--plain` are
@@ -33,8 +44,9 @@ const BANNERS = [
33
44
  // One compact line, shown once per invocation — never a multi-line ASCII
34
45
  // block. That's reserved for the all-clean celebration below, where it's
35
46
  // actually earned.
36
- export function banner() {
37
- return pick(BANNERS);
47
+ export function banner(options = {}) {
48
+ const text = pick(BANNERS);
49
+ return isColorEnabled(options) ? colorize(BOLD + CYAN, text) : text;
38
50
  }
39
51
  const CLEAN_LINES = [
40
52
  'Nothing to see here. Suspiciously clean, even.',
@@ -54,9 +66,12 @@ const CLEAN_ART = [
54
66
  // something (see features.md: don't joke over a real problem report).
55
67
  export function cleanCelebration(options = {}) {
56
68
  const line = pick(CLEAN_LINES);
69
+ const color = isColorEnabled(options);
70
+ const styledLine = color ? colorize(BOLD + GREEN, line) : line;
57
71
  if (!isFancyOutputEnabled(options))
58
- return line;
59
- return `${line}\n${pick(CLEAN_ART)}`;
72
+ return styledLine;
73
+ const art = pick(CLEAN_ART);
74
+ return `${styledLine}\n${color ? colorize(GREEN, art) : art}`;
60
75
  }
61
76
  const FIRST_RUN_LINES = ["First time here? Let's see what we've got.", 'Taking a look...'];
62
77
  export function firstRunAside(options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"vibes.js","sourceRoot":"","sources":["../../src/format/vibes.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0EAA0E;AAC1E,uEAAuE;AACvE,qEAAqE;AACrE,wEAAwE;AACxE,mEAAmE;AASnE,wEAAwE;AACxE,2EAA2E;AAC3E,sEAAsE;AACtE,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CAAC,UAAwB,EAAE;IAC7D,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,KAAK,CAAA;IAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACvC,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,IAAI,CAAI,IAAkB;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1D,qEAAqE;IACrE,sEAAsE;IACtE,OAAO,IAAS,CAAA;AAClB,CAAC;AAED,MAAM,OAAO,GAAG;IACd,aAAa;IACb,iCAAiC;IACjC,iCAAiC;CAClC,CAAA;AAED,yEAAyE;AACzE,yEAAyE;AACzE,mBAAmB;AACnB,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,gDAAgD;IAChD,8BAA8B;IAC9B,4CAA4C;IAC5C,wBAAwB;IACxB,wCAAwC;IACxC,qDAAqD;CACtD,CAAA;AAED,MAAM,SAAS,GAAG;IAChB,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACnD,CAAC,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAC9D,CAAA;AAED,oEAAoE;AACpE,qEAAqE;AACrE,sEAAsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,UAAwB,EAAE;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAA;IAC9B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/C,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,4CAA4C,EAAE,kBAAkB,CAAC,CAAA;AAE1F,MAAM,UAAU,aAAa,CAAC,UAAwB,EAAE;IACtD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"vibes.js","sourceRoot":"","sources":["../../src/format/vibes.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -89,5 +89,12 @@ export { runProjectTypecheck, checkIsolatedFile } from './commands/stale-ts-igno
89
89
  export { runStaleTsIgnore } from './commands/stale-ts-ignore/run.js';
90
90
  export type { StaleTsIgnoreRunOptions, StaleTsIgnoreFinding, StaleTsIgnoreReport, } from './commands/stale-ts-ignore/run.js';
91
91
  export { renderStaleTsIgnoreReport } from './commands/stale-ts-ignore/report.js';
92
+ export { runFullCheck, FULL_CHECK_COMMAND_NAMES, SLOW_FULL_CHECK_COMMAND, } from './commands/full-check/run.js';
93
+ export type { FullCheckCommandName, FullCheckCommandResult, FullCheckRunOptions, FullCheckReport, } from './commands/full-check/run.js';
94
+ export { renderFullCheckReport } from './commands/full-check/report.js';
92
95
  export { walk } from './utils/walk.js';
93
96
  export type { WalkOptions } from './utils/walk.js';
97
+ export { runImageHash } from './commands/image-hash/run.js';
98
+ export type { ImageHashRunOptions, ImageHashReport, ImageHashError, ImageHashProgress, OutdatedOutput, } from './commands/image-hash/run.js';
99
+ export { renderImageHashReport } from './commands/image-hash/report.js';
100
+ export type { Components, HashEntry, HashType, OutputFormat } from './commands/image-hash/core.js';
package/dist/index.js CHANGED
@@ -55,5 +55,9 @@ export { extractVueScript, findVueTsIgnoreDirectives, } from './commands/stale-t
55
55
  export { runProjectTypecheck, checkIsolatedFile } from './commands/stale-ts-ignore/check.js';
56
56
  export { runStaleTsIgnore } from './commands/stale-ts-ignore/run.js';
57
57
  export { renderStaleTsIgnoreReport } from './commands/stale-ts-ignore/report.js';
58
+ export { runFullCheck, FULL_CHECK_COMMAND_NAMES, SLOW_FULL_CHECK_COMMAND, } from './commands/full-check/run.js';
59
+ export { renderFullCheckReport } from './commands/full-check/report.js';
58
60
  export { walk } from './utils/walk.js';
61
+ export { runImageHash } from './commands/image-hash/run.js';
62
+ export { renderImageHashReport } from './commands/image-hash/report.js';
59
63
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export interface WalkOptions {
6
6
  ignoreGlobs?: string[];
7
7
  /** default true — also honor <cwd>/.gitignore, root-level only (see features.md case-check/walk caveats) */
8
8
  respectGitignore?: boolean;
9
+ /** default true — descend into subdirectories; false only lists files directly inside each given directory */
10
+ recursive?: boolean;
9
11
  }
10
12
  /**
11
13
  * Resolves `inputPaths` (files and/or directories, as given on the CLI)
@@ -66,13 +66,14 @@ function isIgnored(absPath, cwd, matcher) {
66
66
  return DEFAULT_IGNORES.includes(basename(absPath));
67
67
  return matcher.ignores(relPath);
68
68
  }
69
- function walkDir(absDir, cwd, matcher, extensions, out) {
69
+ function walkDir(absDir, cwd, matcher, extensions, out, recursive) {
70
70
  for (const entry of readdirSync(absDir, { withFileTypes: true })) {
71
71
  const absPath = join(absDir, entry.name);
72
72
  if (isIgnored(absPath, cwd, matcher))
73
73
  continue;
74
74
  if (entry.isDirectory()) {
75
- walkDir(absPath, cwd, matcher, extensions, out);
75
+ if (recursive)
76
+ walkDir(absPath, cwd, matcher, extensions, out, recursive);
76
77
  }
77
78
  else if (entry.isFile()) {
78
79
  const dot = entry.name.lastIndexOf('.');
@@ -104,7 +105,7 @@ export function walk(inputPaths, options) {
104
105
  if (!stat)
105
106
  continue;
106
107
  if (stat.isDirectory()) {
107
- walkDir(absPath, options.cwd, matcher, extensions, out);
108
+ walkDir(absPath, options.cwd, matcher, extensions, out, options.recursive !== false);
108
109
  }
109
110
  else if (stat.isFile()) {
110
111
  out.push(absPath);
@@ -1 +1 @@
1
- {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@macrulez/devtoolz",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "A small toolbox of CLI commands that automate routine dev chores — strip comments/console.log, find dead exports, catch case-sensitivity import bugs before Linux CI does",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -39,9 +39,11 @@
39
39
  "format:fix": "prettier --write ."
40
40
  },
41
41
  "dependencies": {
42
+ "blurhash": "^2.0.5",
42
43
  "commander": "^13.1.0",
43
44
  "diff": "^7.0.0",
44
45
  "ignore": "^6.0.2",
46
+ "thumbhash": "^0.1.1",
45
47
  "typescript": "^5.7.3"
46
48
  },
47
49
  "devDependencies": {
@@ -50,6 +52,7 @@
50
52
  "@types/node": "^20.14.0",
51
53
  "eslint": "^9.20.0",
52
54
  "prettier": "^3.9.8",
55
+ "sharp": "^0.35.5",
53
56
  "tsx": "^4.19.2",
54
57
  "typescript-eslint": "^8.23.0",
55
58
  "vitest": "^3.0.5"