flamerjs 1.1.3 → 1.1.4
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/CHANGELOG.md +8 -0
- package/README.md +3 -3
- package/dist/cli.js +46 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,14 @@ All notable changes to flamer are recorded here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project
|
|
5
5
|
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [1.1.4] - 2026-10-24
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added `--verbose` output with the CLI version, repository name, selected
|
|
12
|
+
backend, scan path, file and line counts, duration, and native fallback
|
|
13
|
+
details.
|
|
14
|
+
|
|
7
15
|
## [1.1.3] - 2026-10-24
|
|
8
16
|
|
|
9
17
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/dummy3ye/flamer/actions/workflows/ci.yml)
|
|
6
6
|
[](https://codecov.io/gh/dummy3ye/flamer)
|
|
7
|
-
[](https://github.com/dummy3ye/flamer)<br>
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
[](https://github.com/dummy3ye/flamer/commits/master)
|
|
10
|
-
[](https://github.com/dummy3ye/flamer)
|
|
10
|
+
[](https://www.npmjs.com/package/flamerjs)
|
|
12
11
|
|
|
13
12
|
Flamer scans a repository for the common mistakes that appear when software is
|
|
14
13
|
assembled quickly with AI or other “vibe coding” workflows: unfinished
|
|
@@ -124,6 +123,7 @@ flamerjs [path] [options]
|
|
|
124
123
|
| `--no-lockfile-warning` | Suppress the missing-lockfile suggestion |
|
|
125
124
|
| `--ignore-dir <name>` | Ignore an additional directory name; repeatable |
|
|
126
125
|
| `--quiet` | Suppress the human summary |
|
|
126
|
+
| `--verbose` | Show CLI version, runtime backend, and scan details |
|
|
127
127
|
| `--color` | Force ANSI colors |
|
|
128
128
|
| `--no-color` | Disable ANSI colors |
|
|
129
129
|
| `--engine <all\|typescript\|rust\|cpp>` | Run all engines (default) or select one engine |
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/cli.ts
|
|
4
|
-
import { writeFileSync, existsSync as existsSync4 } from "fs";
|
|
4
|
+
import { writeFileSync, existsSync as existsSync4, readFileSync as readFileSync2 } from "fs";
|
|
5
5
|
import { resolve, basename } from "path";
|
|
6
6
|
|
|
7
7
|
// src/util/fs.ts
|
|
@@ -3003,6 +3003,7 @@ function runNativeWorker(root, files, worker, operation = "file_metrics") {
|
|
|
3003
3003
|
|
|
3004
3004
|
// src/cli.ts
|
|
3005
3005
|
var SPEC_VERSION = 1;
|
|
3006
|
+
var CLI_VERSION = JSON.parse(readFileSync2(new URL("../package.json", import.meta.url), "utf8")).version;
|
|
3006
3007
|
function parseArgs(argv) {
|
|
3007
3008
|
const opts = {
|
|
3008
3009
|
root: process.cwd(),
|
|
@@ -3014,6 +3015,7 @@ function parseArgs(argv) {
|
|
|
3014
3015
|
noGit: false,
|
|
3015
3016
|
noLockfileWarning: false,
|
|
3016
3017
|
quiet: false,
|
|
3018
|
+
verbose: false,
|
|
3017
3019
|
scope: null,
|
|
3018
3020
|
listLanguages: false,
|
|
3019
3021
|
help: false,
|
|
@@ -3058,6 +3060,9 @@ function parseArgs(argv) {
|
|
|
3058
3060
|
case "--quiet":
|
|
3059
3061
|
opts.quiet = true;
|
|
3060
3062
|
break;
|
|
3063
|
+
case "--verbose":
|
|
3064
|
+
opts.verbose = true;
|
|
3065
|
+
break;
|
|
3061
3066
|
case "--color":
|
|
3062
3067
|
opts.color = true;
|
|
3063
3068
|
break;
|
|
@@ -3111,6 +3116,7 @@ Options:
|
|
|
3111
3116
|
--no-lockfile-warning skip the "no lockfile" suggestion
|
|
3112
3117
|
--ignore-dir <name> also skip this directory name (repeatable)
|
|
3113
3118
|
--quiet suppress the human summary
|
|
3119
|
+
--verbose show runtime engine and scan details
|
|
3114
3120
|
--color force ANSI colors
|
|
3115
3121
|
--no-color disable ANSI colors
|
|
3116
3122
|
--engine <all|typescript|rust|cpp>
|
|
@@ -3379,13 +3385,50 @@ function severityColor(severity) {
|
|
|
3379
3385
|
function severityIcon(severity) {
|
|
3380
3386
|
return severity === "LOW" ? "\xB7" : severity === "INFO" ? "i" : "!";
|
|
3381
3387
|
}
|
|
3382
|
-
function
|
|
3388
|
+
function printVerbose(report, forceColor) {
|
|
3389
|
+
const enabled = colorEnabled(forceColor);
|
|
3390
|
+
const native = report.metadata.native;
|
|
3391
|
+
let backend = "typescript";
|
|
3392
|
+
let backendDetail = "TypeScript analyzers";
|
|
3393
|
+
if (native?.fallback) {
|
|
3394
|
+
backendDetail = "TypeScript fallback";
|
|
3395
|
+
} else if (native?.engine === "all") {
|
|
3396
|
+
backend = "rust + cpp";
|
|
3397
|
+
backendDetail = "Rust and C++ workers";
|
|
3398
|
+
} else if (native?.engine === "rust") {
|
|
3399
|
+
backend = "rust";
|
|
3400
|
+
backendDetail = "Rust worker";
|
|
3401
|
+
} else if (native?.engine === "cpp") {
|
|
3402
|
+
backend = "cpp";
|
|
3403
|
+
backendDetail = "C++ worker";
|
|
3404
|
+
}
|
|
3405
|
+
const p = report.project;
|
|
3406
|
+
const lines = [
|
|
3407
|
+
"",
|
|
3408
|
+
` ${paint(`flamer.js v${CLI_VERSION}`, ANSI.bold + ANSI.cyan, enabled)} ${paint(p.name, ANSI.bold, enabled)}`,
|
|
3409
|
+
` ${paint("cli", ANSI.dim, enabled)} : typescript`,
|
|
3410
|
+
` ${paint("backend", ANSI.dim, enabled)} : ${backend}`,
|
|
3411
|
+
` ${paint("details", ANSI.dim, enabled)} : ${backendDetail}`,
|
|
3412
|
+
` ${paint("path", ANSI.dim, enabled)} : ${p.root || p.name}`,
|
|
3413
|
+
` ${paint("files", ANSI.dim, enabled)} : ${(p.totalFiles || 0).toLocaleString()}`,
|
|
3414
|
+
` ${paint("lines", ANSI.dim, enabled)} : ${(p.totalLines || 0).toLocaleString()}`,
|
|
3415
|
+
` ${paint("duration", ANSI.dim, enabled)} : ${report.metadata.durationSeconds.toFixed(2)}s`
|
|
3416
|
+
];
|
|
3417
|
+
if (native?.fallback) {
|
|
3418
|
+
lines.push(
|
|
3419
|
+
` ${paint("fallback", ANSI.dim, enabled)} : ${[...new Set(native.fallback)].join("; ")}`
|
|
3420
|
+
);
|
|
3421
|
+
}
|
|
3422
|
+
process.stdout.write(lines.join("\n") + "\n");
|
|
3423
|
+
}
|
|
3424
|
+
function printSummary(report, forceColor, verbose = false) {
|
|
3383
3425
|
const enabled = colorEnabled(forceColor);
|
|
3384
3426
|
const p = report.project;
|
|
3385
3427
|
const out = [];
|
|
3386
3428
|
const width = 62;
|
|
3387
3429
|
const duration = report.metadata.durationSeconds;
|
|
3388
3430
|
out.push("");
|
|
3431
|
+
if (verbose) printVerbose(report, forceColor);
|
|
3389
3432
|
out.push(
|
|
3390
3433
|
` ${paint("FLAMER", ANSI.bold + ANSI.cyan, enabled)} ${paint(p.name, ANSI.bold, enabled)}`
|
|
3391
3434
|
);
|
|
@@ -3458,7 +3501,7 @@ async function main() {
|
|
|
3458
3501
|
}
|
|
3459
3502
|
}
|
|
3460
3503
|
if (opts.format === "summary") {
|
|
3461
|
-
if (!opts.quiet) printSummary(report, opts.color);
|
|
3504
|
+
if (!opts.quiet) printSummary(report, opts.color, opts.verbose);
|
|
3462
3505
|
} else {
|
|
3463
3506
|
process.stdout.write(json + "\n");
|
|
3464
3507
|
}
|