@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.
- package/README.md +131 -8
- package/dist/cli.js +265 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/case-check/report.js +8 -6
- package/dist/commands/case-check/report.js.map +1 -1
- package/dist/commands/circular-imports/report.js +11 -12
- package/dist/commands/circular-imports/report.js.map +1 -1
- package/dist/commands/console-strip/report.js +9 -7
- package/dist/commands/console-strip/report.js.map +1 -1
- package/dist/commands/dead-exports/report.js +6 -4
- package/dist/commands/dead-exports/report.js.map +1 -1
- package/dist/commands/empty-catch/report.js +5 -3
- package/dist/commands/empty-catch/report.js.map +1 -1
- package/dist/commands/exports-doctor/report.js +7 -5
- package/dist/commands/exports-doctor/report.js.map +1 -1
- package/dist/commands/full-check/report.d.ts +3 -0
- package/dist/commands/full-check/report.js +55 -0
- package/dist/commands/full-check/report.js.map +1 -0
- package/dist/commands/full-check/run.d.ts +32 -0
- package/dist/commands/full-check/run.js +251 -0
- package/dist/commands/full-check/run.js.map +1 -0
- package/dist/commands/image-hash/cache.d.ts +14 -0
- package/dist/commands/image-hash/cache.js +40 -0
- package/dist/commands/image-hash/cache.js.map +1 -0
- package/dist/commands/image-hash/core.d.ts +56 -0
- package/dist/commands/image-hash/core.js +293 -0
- package/dist/commands/image-hash/core.js.map +1 -0
- package/dist/commands/image-hash/hash.d.ts +19 -0
- package/dist/commands/image-hash/hash.js +97 -0
- package/dist/commands/image-hash/hash.js.map +1 -0
- package/dist/commands/image-hash/report.d.ts +3 -0
- package/dist/commands/image-hash/report.js +94 -0
- package/dist/commands/image-hash/report.js.map +1 -0
- package/dist/commands/image-hash/run.d.ts +60 -0
- package/dist/commands/image-hash/run.js +315 -0
- package/dist/commands/image-hash/run.js.map +1 -0
- package/dist/commands/image-hash/sharp-loader.d.ts +59 -0
- package/dist/commands/image-hash/sharp-loader.js +79 -0
- package/dist/commands/image-hash/sharp-loader.js.map +1 -0
- package/dist/commands/orphan-tests/report.js +7 -5
- package/dist/commands/orphan-tests/report.js.map +1 -1
- package/dist/commands/readme-check/report.js +7 -5
- package/dist/commands/readme-check/report.js.map +1 -1
- package/dist/commands/scripts-check/report.js +7 -5
- package/dist/commands/scripts-check/report.js.map +1 -1
- package/dist/commands/stale-ts-ignore/report.js +7 -5
- package/dist/commands/stale-ts-ignore/report.js.map +1 -1
- package/dist/commands/strip-comments/report.js +6 -4
- package/dist/commands/strip-comments/report.js.map +1 -1
- package/dist/commands/todo-report/report.js +7 -5
- package/dist/commands/todo-report/report.js.map +1 -1
- package/dist/commands/unused-deps/report.js +7 -5
- package/dist/commands/unused-deps/report.js.map +1 -1
- package/dist/format/colors.d.ts +4 -0
- package/dist/format/colors.js +4 -3
- package/dist/format/colors.js.map +1 -1
- package/dist/format/diff-render.js +2 -2
- package/dist/format/diff-render.js.map +1 -1
- package/dist/format/file-list.d.ts +1 -9
- package/dist/format/file-list.js +5 -16
- package/dist/format/file-list.js.map +1 -1
- package/dist/format/findings-list.d.ts +1 -8
- package/dist/format/findings-list.js +5 -14
- package/dist/format/findings-list.js.map +1 -1
- package/dist/format/style.d.ts +20 -0
- package/dist/format/style.js +36 -0
- package/dist/format/style.js.map +1 -0
- package/dist/format/table.d.ts +8 -0
- package/dist/format/table.js +44 -0
- package/dist/format/table.js.map +1 -0
- package/dist/format/vibes.d.ts +4 -1
- package/dist/format/vibes.js +25 -10
- package/dist/format/vibes.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/walk.d.ts +2 -0
- package/dist/utils/walk.js +4 -3
- package/dist/utils/walk.js.map +1 -1
- package/package.json +4 -1
package/dist/format/file-list.js
CHANGED
|
@@ -1,26 +1,15 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
-
|
|
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":"
|
|
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 {
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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":"
|
|
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":"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"}
|
package/dist/format/vibes.d.ts
CHANGED
|
@@ -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;
|
package/dist/format/vibes.js
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
|
59
|
-
|
|
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 = {}) {
|
package/dist/format/vibes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vibes.js","sourceRoot":"","sources":["../../src/format/vibes.ts"],"names":[],"mappings":"AAAA,
|
|
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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"}
|
package/dist/utils/walk.d.ts
CHANGED
|
@@ -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)
|
package/dist/utils/walk.js
CHANGED
|
@@ -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
|
-
|
|
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);
|
package/dist/utils/walk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,oEAAoE;AACpE,mEAAmE;AACnE,oEAAoE;AACpE,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,kEAAkE;AAClE,uEAAuE;AACvE,cAAc;AACd,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAwC,CAAA;AAEvE,qEAAqE;AACrE,uEAAuE;AACvE,wDAAwD;AACxD,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,iEAAiE;AACjE,oEAAoE;AACpE,uEAAuE;AACvE,kEAAkE;AAClE,8DAA8D;AAC9D,8DAA8D;AAC9D,iEAAiE;AACjE,MAAM,eAAe,GAAG;IACtB,cAAc;IACd,MAAM;IACN,OAAO;IACP,MAAM;IACN,UAAU;IACV,OAAO;IACP,SAAS;IACT,OAAO;CACR,CAAA;
|
|
1
|
+
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,oEAAoE;AACpE,mEAAmE;AACnE,oEAAoE;AACpE,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,kEAAkE;AAClE,uEAAuE;AACvE,cAAc;AACd,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAwC,CAAA;AAEvE,qEAAqE;AACrE,uEAAuE;AACvE,wDAAwD;AACxD,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,iEAAiE;AACjE,oEAAoE;AACpE,uEAAuE;AACvE,kEAAkE;AAClE,8DAA8D;AAC9D,8DAA8D;AAC9D,iEAAiE;AACjE,MAAM,eAAe,GAAG;IACtB,cAAc;IACd,MAAM;IACN,OAAO;IACP,MAAM;IACN,UAAU;IACV,OAAO;IACP,SAAS;IACT,OAAO;CACR,CAAA;AAcD,SAAS,YAAY,CAAC,OAAoB;IACxC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAA;IACxB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAC5B,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAA;YAC3E,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,EAAE,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACjE,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,0EAA0E;AAC1E,sEAAsE;AACtE,yEAAyE;AACzE,2EAA2E;AAC3E,oEAAoE;AACpE,yEAAyE;AACzE,kEAAkE;AAClE,SAAS,SAAS,CAAC,OAAe,EAAE,GAAW,EAAE,OAAe;IAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5D,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IAChC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;IAChF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,OAAO,CACd,MAAc,EACd,GAAW,EACX,OAAe,EACf,UAAuB,EACvB,GAAa,EACb,SAAkB;IAElB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC;YAAE,SAAQ;QAE9C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,SAAS;gBAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;QAC3E,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YACvC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACnD,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,IAAI,CAAC,UAAoB,EAAE,OAAoB;IAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACrC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAExD,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAC/C,IAAI,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;YAAE,SAAQ;QAEtD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,IAAI;YAAE,SAAQ;QAEnB,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,CAAA;QACtF,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@macrulez/devtoolz",
|
|
3
|
-
"version": "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"
|