@descent-vtt/spec-guard 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -22
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/engine.d.ts +68 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +214 -91
- package/dist/engine.js.map +1 -1
- package/dist/glob.d.ts +19 -0
- package/dist/glob.d.ts.map +1 -1
- package/dist/glob.js +11 -2
- package/dist/glob.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -171,7 +171,7 @@ spec-guard [patterns...] [options]
|
|
|
171
171
|
| `-v, --verbose` | Print passing assertions too |
|
|
172
172
|
| `--fail-fast` | Stop at the first failing assertion |
|
|
173
173
|
| `--json` | Machine-readable report on stdout |
|
|
174
|
-
| `--engine <auto\|rg\|js>` | Search engine (default `auto`: ripgrep
|
|
174
|
+
| `--engine <auto\|rg\|js>` | Search engine (default `auto`: scanner for small trees, ripgrep for big ones) |
|
|
175
175
|
| `--strict` | Treat a `target` that does not exist as a failure, not a warning |
|
|
176
176
|
| `--include-specs` | Also count matches inside the spec files themselves |
|
|
177
177
|
| `--max-snippets <n>` | Failure snippets per assertion (default 5) |
|
|
@@ -255,19 +255,37 @@ in one pass. Measured on Windows 11 / Node 24 / ripgrep 15 against a synthetic
|
|
|
255
255
|
| ripgrep engine | ~280 ms | **~72 ms** |
|
|
256
256
|
| JavaScript fallback | ~780 ms | **~283 ms** |
|
|
257
257
|
|
|
258
|
+
`auto` then picks between the two engines **per search group**, because they
|
|
259
|
+
have different shapes of cost: ripgrep is dominated by process startup and
|
|
260
|
+
barely notices tree size, while the built-in scanner has no startup cost and
|
|
261
|
+
grows linearly. Starting a process to search a handful of files is a bad trade.
|
|
262
|
+
|
|
263
|
+
The decision uses a bounded enumeration as its probe: spec-guard walks the
|
|
264
|
+
target set until it either finishes - in which case the file list is already in
|
|
265
|
+
hand and the scanner runs against it, with no process and no second walk - or
|
|
266
|
+
exceeds a budget, in which case ripgrep takes over. Measured end to end:
|
|
267
|
+
|
|
268
|
+
| | this repo's own specs | 2,000 files |
|
|
269
|
+
| --- | --- | --- |
|
|
270
|
+
| `--engine rg` | 793.7 ms | 195.8 ms |
|
|
271
|
+
| `--engine js` | 19.5 ms | 330.6 ms |
|
|
272
|
+
| `--engine auto` | **19.1 ms** | **171.9 ms** |
|
|
273
|
+
|
|
274
|
+
The crossover is ~575 files on Windows and ~25 on Linux, because what is really
|
|
275
|
+
being measured is process spawn cost. `scripts/bench-engines.mjs` reproduces
|
|
276
|
+
both; [ADR-0004](docs/adr/0004-adaptive-engine.md) has the full tables.
|
|
277
|
+
|
|
258
278
|
Two honest caveats:
|
|
259
279
|
|
|
260
|
-
- **
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
size. If your repository is small and you care about the last millisecond,
|
|
265
|
-
`--engine js` is a legitimate choice.
|
|
266
|
-
- **ripgrep is the reference implementation.** The fallback matches it on
|
|
280
|
+
- **The reported engine is the one that ran, not the one available.** On a small
|
|
281
|
+
repository `--json` reports `"engine": "javascript"` even with ripgrep
|
|
282
|
+
installed. That is the optimisation working, not a failure to find `rg`.
|
|
283
|
+
- **ripgrep is the reference implementation.** The scanner matches it on
|
|
267
284
|
everything the test suite covers - counts, snippets, word boundaries, globs,
|
|
268
285
|
binary skipping, file-size limits - but ripgrep also honours `.gitignore`,
|
|
269
|
-
while the
|
|
270
|
-
`coverage`, `.git`, dotfiles, and friends).
|
|
286
|
+
while the scanner uses a fixed ignore list (`node_modules`, `dist`, `build`,
|
|
287
|
+
`coverage`, `.git`, dotfiles, and friends). On a repository where those differ
|
|
288
|
+
materially, pin the engine with `--engine rg`.
|
|
271
289
|
|
|
272
290
|
## Programmatic API
|
|
273
291
|
|
|
@@ -368,20 +386,27 @@ prebuilt binary and is never a runtime dependency.
|
|
|
368
386
|
### Mutation testing
|
|
369
387
|
|
|
370
388
|
Coverage says a line ran. It does not say an assertion would notice if the line
|
|
371
|
-
behaved differently. This repository measures the difference: **
|
|
372
|
-
2,
|
|
389
|
+
behaved differently. This repository measures the difference: **86.40%** of
|
|
390
|
+
2,118 mutants are killed in CI, against 98.98% line coverage.
|
|
373
391
|
|
|
374
|
-
That gap is the point. The first run scored 77.23%, and the weakest file was
|
|
375
|
-
|
|
392
|
+
That gap is the point. The first run scored 77.23%, and the weakest file was the
|
|
393
|
+
reporter at 65.48% - not because it lacked tests, but because its tests were
|
|
376
394
|
almost all `toContain` against colourless output. A mutant could prepend a junk
|
|
377
|
-
line
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
395
|
+
line, drop a colour, or turn `remaining > 0` into `remaining >= 0` and every
|
|
396
|
+
test still passed. Exact whole-output comparison took it to 87.30%. The engine
|
|
397
|
+
and the walker were then rewritten for testability rather than papered over with
|
|
398
|
+
more tests, which is what moved them from 75%/78% to 83%/93%.
|
|
399
|
+
|
|
400
|
+
`npm run test:mutation` runs it locally and takes about half an hour; CI runs it
|
|
401
|
+
on **every push** in under seven minutes, gated at 85%. The CI figure is the one
|
|
402
|
+
quoted above, and it is the lower of the two: the same commit scores 88.76% on
|
|
403
|
+
Windows, where three times as many mutants hang and Stryker counts a hang as a
|
|
404
|
+
kill.
|
|
405
|
+
|
|
406
|
+
Three cautionary tales are in [ADR-0003](docs/adr/0003-mutation-testing.md): a
|
|
407
|
+
run whose score was pure fiction because the mutants were never activated, a
|
|
408
|
+
tuning knob that lifted the score six points without adding a test, and the
|
|
409
|
+
platform gap above.
|
|
385
410
|
|
|
386
411
|
## Requirements
|
|
387
412
|
|
package/dist/cli.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export interface CliOptions {
|
|
|
35
35
|
}
|
|
36
36
|
export declare class UsageError extends Error {
|
|
37
37
|
}
|
|
38
|
-
export declare const HELP = "spec-guard - Executable architecture assertions for Markdown specs & ADRs\n\nUsage\n spec-guard [patterns...] [options]\n\nPatterns\n Globs or paths to the Markdown specs to execute. A directory expands to the\n Markdown files inside it. Defaults to \"docs/**/*.md\" when omitted.\n\nOptions\n -r, --root <path> Codebase root that assertions are resolved against (default: cwd)\n -v, --verbose Print passing assertions too\n --fail-fast Stop at the first failing assertion\n --json Emit a machine-readable JSON report\n --engine <name> auto | rg | js (default: auto - ripgrep
|
|
38
|
+
export declare const HELP = "spec-guard - Executable architecture assertions for Markdown specs & ADRs\n\nUsage\n spec-guard [patterns...] [options]\n\nPatterns\n Globs or paths to the Markdown specs to execute. A directory expands to the\n Markdown files inside it. Defaults to \"docs/**/*.md\" when omitted.\n\nOptions\n -r, --root <path> Codebase root that assertions are resolved against (default: cwd)\n -v, --verbose Print passing assertions too\n --fail-fast Stop at the first failing assertion\n --json Emit a machine-readable JSON report\n --engine <name> auto | rg | js (default: auto - scanner for small trees, ripgrep for big ones)\n --strict Treat a target path that does not exist as a failure\n --include-specs Also count matches inside the spec files themselves\n --max-snippets <n> Failure snippets per assertion (default: 5)\n --concurrency <n> Assertions executed in parallel (default: 8)\n --allow-empty Exit 0 when no spec files matched\n --color/--no-color Force colour on or off (NO_COLOR is honoured)\n -h, --help Show this help\n --version Print the version\n\nDirectives\n <!-- @assert-absence target=\"src/\" symbol=\"LegacyGateway\" -->\n <!-- @assert-count target=\"src/\" symbol=\"SessionManager\" expected=\"1\" -->\n <!-- @assert-present file=\"SECURITY.md\" -->\n\nExit codes\n 0 all assertions passed 1 an assertion failed 2 spec-guard could not run";
|
|
39
39
|
/** Minimal, dependency-free argv parser. Supports `--flag value` and `--flag=value`. */
|
|
40
40
|
export declare function parseArgs(argv: readonly string[], cwd: string): CliOptions;
|
|
41
41
|
/** Runs the CLI and resolves to the process exit code. */
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAaxC,eAAO,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAaxC,eAAO,MAAM,IAAI,2+CA8B8D,CAAC;AAuBhF,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAmG1E;AAYD,0DAA0D;AAC1D,wBAAsB,IAAI,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,EAAE,EAAE,GAAE,KAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+DpH"}
|
package/dist/cli.js
CHANGED
|
@@ -40,7 +40,7 @@ Options
|
|
|
40
40
|
-v, --verbose Print passing assertions too
|
|
41
41
|
--fail-fast Stop at the first failing assertion
|
|
42
42
|
--json Emit a machine-readable JSON report
|
|
43
|
-
--engine <name> auto | rg | js (default: auto - ripgrep
|
|
43
|
+
--engine <name> auto | rg | js (default: auto - scanner for small trees, ripgrep for big ones)
|
|
44
44
|
--strict Treat a target path that does not exist as a failure
|
|
45
45
|
--include-specs Also count matches inside the spec files themselves
|
|
46
46
|
--max-snippets <n> Failure snippets per assertion (default: ${DEFAULT_MAX_SNIPPETS})
|
package/dist/engine.d.ts
CHANGED
|
@@ -59,13 +59,80 @@ export declare function resetRipgrepProbe(): void;
|
|
|
59
59
|
export declare function findRipgrep(): Promise<string | null>;
|
|
60
60
|
/** Builds the argv for one ripgrep pass over `patterns`. */
|
|
61
61
|
export declare function buildRipgrepArgs(request: SearchRequest, patterns?: readonly string[]): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Whether a set of patterns may share one ripgrep pass.
|
|
64
|
+
*
|
|
65
|
+
* Kept separate from the engine so the decision can be asserted directly: from
|
|
66
|
+
* the outside a correct batch and a correct set of separate passes are
|
|
67
|
+
* indistinguishable by design, which makes this the only place the rule is
|
|
68
|
+
* observable.
|
|
69
|
+
*/
|
|
70
|
+
export declare function shouldBatchPatterns(patterns: readonly string[], options: SearchOptions): boolean;
|
|
71
|
+
export interface RipgrepSink {
|
|
72
|
+
/** Feeds one line of ripgrep --json output. */
|
|
73
|
+
line(text: string): void;
|
|
74
|
+
readonly tallies: Map<string, Tally>;
|
|
75
|
+
readonly failure: Error | null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parses ripgrep's newline-delimited JSON into per-pattern tallies.
|
|
79
|
+
*
|
|
80
|
+
* This is deliberately pure and separate from the subprocess: every interesting
|
|
81
|
+
* case here - a base64 path, a match with no submatches, an excluded file, an
|
|
82
|
+
* unattributable match - is trivial to exercise as data and nearly impossible
|
|
83
|
+
* to provoke from a real ripgrep on demand.
|
|
84
|
+
*/
|
|
85
|
+
export declare function createRipgrepSink(request: SearchRequest, patterns: readonly string[]): RipgrepSink;
|
|
62
86
|
/** Builds the matching RegExp shared by the JS engine. */
|
|
63
87
|
export declare function buildJsRegExp(symbol: string, options: SearchOptions): RegExp;
|
|
88
|
+
interface CandidateFile {
|
|
89
|
+
absolutePath: string;
|
|
90
|
+
relativePath: string;
|
|
91
|
+
}
|
|
92
|
+
export interface Enumeration {
|
|
93
|
+
files: CandidateFile[];
|
|
94
|
+
/** True when the walk stopped early because the budget was reached. */
|
|
95
|
+
exceeded: boolean;
|
|
96
|
+
bytes: number;
|
|
97
|
+
}
|
|
98
|
+
export interface EnumerationBudget {
|
|
99
|
+
maxFiles: number;
|
|
100
|
+
maxBytes: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Lists the files a request would search, sorted by relative path.
|
|
104
|
+
*
|
|
105
|
+
* With a budget, the walk abandons as soon as the tree proves bigger than the
|
|
106
|
+
* budget allows. That makes it usable as a cheap probe: enumeration is stat-only
|
|
107
|
+
* work, so finding out a tree is "too big" costs a bounded number of stats
|
|
108
|
+
* rather than a full traversal.
|
|
109
|
+
*/
|
|
110
|
+
export declare function enumerateCandidates(request: SearchRequest, budget?: EnumerationBudget): Promise<Enumeration>;
|
|
64
111
|
/** Counts matches in one file and records per-line snippets. */
|
|
65
112
|
export declare function scanContent(content: string, relativePath: string, regexp: RegExp): Tally;
|
|
66
113
|
/** An engine that is guaranteed to implement the batch API. */
|
|
67
|
-
export type BatchEngine = Engine & Required<Pick<Engine, 'searchBatch'
|
|
114
|
+
export type BatchEngine = Engine & Required<Pick<Engine, 'searchBatch'>> & {
|
|
115
|
+
/** Scans a file list that the caller already enumerated. */
|
|
116
|
+
searchFiles(files: readonly CandidateFile[], requests: SearchRequest[]): Promise<SearchResult[]>;
|
|
117
|
+
};
|
|
68
118
|
export declare const javascriptEngine: BatchEngine;
|
|
119
|
+
/**
|
|
120
|
+
* How much scanning the JavaScript engine may do before ripgrep is worth a
|
|
121
|
+
* process spawn.
|
|
122
|
+
*
|
|
123
|
+
* Measured with scripts/bench-engines.mjs. ripgrep's cost is dominated by
|
|
124
|
+
* process startup and is nearly flat in tree size; the JavaScript scanner grows
|
|
125
|
+
* linearly. The crossover is therefore wherever a spawn costs, and that differs
|
|
126
|
+
* by an order of magnitude between platforms:
|
|
127
|
+
*
|
|
128
|
+
* Windows 11, Node 24, rg 15 spawn floor ~130ms crossover ~575 files
|
|
129
|
+
* Linux (container), Node 22, rg 13 spawn floor ~15ms crossover ~25 files
|
|
130
|
+
*
|
|
131
|
+
* The budget is set just below each crossover, so choosing JavaScript is never
|
|
132
|
+
* the slower option by more than a few milliseconds, while a small tree on
|
|
133
|
+
* Windows avoids a spawn that would cost ten times the whole search.
|
|
134
|
+
*/
|
|
135
|
+
export declare const SMALL_TREE_BUDGET: EnumerationBudget;
|
|
69
136
|
/** Resolves the engine to use, honouring an explicit preference. */
|
|
70
137
|
export declare function resolveEngine(preference?: EnginePreference): Promise<Engine>;
|
|
71
138
|
export type CachedEngine = Engine & {
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzF,gFAAgF;AAChF,eAAO,MAAM,aAAa,QAAmB,CAAC;AAQ9C,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD;;;OAGG;IACH,WAAW,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAClE;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;AAEjE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAWD,oDAAoD;AACpD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAWrE;AAqBD,mEAAmE;AACnE,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAMpG;AAOD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAepD;AAeD,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAqB,GAAG,MAAM,EAAE,CAWjH;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.js
CHANGED
|
@@ -155,14 +155,12 @@ class RipgrepEngine {
|
|
|
155
155
|
if (!first)
|
|
156
156
|
return [];
|
|
157
157
|
const patterns = [...new Set(requests.map((request) => request.symbol))];
|
|
158
|
-
|
|
159
|
-
if (!batchable) {
|
|
158
|
+
if (!shouldBatchPatterns(patterns, first.options)) {
|
|
160
159
|
return Promise.all(requests.map((request) => this.search(request)));
|
|
161
160
|
}
|
|
162
161
|
try {
|
|
163
162
|
const tallies = await this.run(first, patterns);
|
|
164
163
|
return requests.map((request) => this.toResult(tallies.get(request.symbol)));
|
|
165
|
-
/* c8 ignore next 4 */
|
|
166
164
|
}
|
|
167
165
|
catch (error) {
|
|
168
166
|
if (!(error instanceof UnattributableBatch))
|
|
@@ -182,62 +180,15 @@ class RipgrepEngine {
|
|
|
182
180
|
windowsHide: true,
|
|
183
181
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
184
182
|
});
|
|
185
|
-
const
|
|
186
|
-
const tallies = new Map(patterns.map((pattern) => [pattern, emptyTally()]));
|
|
183
|
+
const sink = createRipgrepSink(request, patterns);
|
|
187
184
|
let pending = '';
|
|
188
185
|
let stderr = '';
|
|
189
|
-
let failure = null;
|
|
190
|
-
const handleEvent = (line) => {
|
|
191
|
-
if (line.length === 0 || failure)
|
|
192
|
-
return;
|
|
193
|
-
let event;
|
|
194
|
-
try {
|
|
195
|
-
event = JSON.parse(line);
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
/* c8 ignore next -- ripgrep only ever emits valid JSON lines */
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
if (event.type !== 'match' || !event.data)
|
|
202
|
-
return;
|
|
203
|
-
const data = event.data;
|
|
204
|
-
const submatches = data.submatches ?? [];
|
|
205
|
-
if (submatches.length === 0)
|
|
206
|
-
return;
|
|
207
|
-
// ripgrep echoes the path as given ("./src/a.ts" when the target is
|
|
208
|
-
// "."); normalise so both engines report the same relative path.
|
|
209
|
-
const absolute = path.resolve(request.root, decodeText(data.path));
|
|
210
|
-
if (request.options.excludeFiles.has(absolute))
|
|
211
|
-
return;
|
|
212
|
-
const file = toPosix(path.relative(request.root, absolute));
|
|
213
|
-
const lineNumber = data.line_number ?? 0;
|
|
214
|
-
const text = truncate(decodeText(data.lines));
|
|
215
|
-
for (const submatch of submatches) {
|
|
216
|
-
// With --fixed-strings and no --ignore-case the matched text is the
|
|
217
|
-
// pattern verbatim, which is what makes attribution exact.
|
|
218
|
-
const pattern = single ?? decodeText(submatch.match);
|
|
219
|
-
const tally = tallies.get(pattern);
|
|
220
|
-
/* c8 ignore next 4 -- belt and braces: --fixed-strings guarantees a hit */
|
|
221
|
-
if (!tally) {
|
|
222
|
-
failure = new UnattributableBatch(`ripgrep reported an unexpected match: ${pattern}`);
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
tally.count += 1;
|
|
226
|
-
const last = tally.locations.at(-1);
|
|
227
|
-
if (last && last.file === file && last.line === lineNumber) {
|
|
228
|
-
last.count += 1;
|
|
229
|
-
}
|
|
230
|
-
else if (tally.locations.length < MAX_COLLECTED_MATCHES) {
|
|
231
|
-
tally.locations.push({ file, line: lineNumber, column: (submatch.start ?? 0) + 1, text, count: 1 });
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
};
|
|
235
186
|
child.stdout.setEncoding('utf8');
|
|
236
187
|
child.stdout.on('data', (chunk) => {
|
|
237
188
|
pending += chunk;
|
|
238
189
|
let newline = pending.indexOf('\n');
|
|
239
190
|
while (newline !== -1) {
|
|
240
|
-
|
|
191
|
+
sink.line(pending.slice(0, newline));
|
|
241
192
|
pending = pending.slice(newline + 1);
|
|
242
193
|
newline = pending.indexOf('\n');
|
|
243
194
|
}
|
|
@@ -248,9 +199,9 @@ class RipgrepEngine {
|
|
|
248
199
|
});
|
|
249
200
|
child.once('error', reject);
|
|
250
201
|
child.once('close', (code) => {
|
|
251
|
-
|
|
252
|
-
if (failure) {
|
|
253
|
-
reject(failure);
|
|
202
|
+
sink.line(pending);
|
|
203
|
+
if (sink.failure) {
|
|
204
|
+
reject(sink.failure);
|
|
254
205
|
return;
|
|
255
206
|
}
|
|
256
207
|
// 0 = matches, 1 = no matches, 2 = an actual failure.
|
|
@@ -258,11 +209,86 @@ class RipgrepEngine {
|
|
|
258
209
|
reject(new Error(`ripgrep exited with code ${code}${stderr ? `: ${stderr.trim()}` : ''}`));
|
|
259
210
|
return;
|
|
260
211
|
}
|
|
261
|
-
resolve(tallies);
|
|
212
|
+
resolve(sink.tallies);
|
|
262
213
|
});
|
|
263
214
|
});
|
|
264
215
|
}
|
|
265
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Whether a set of patterns may share one ripgrep pass.
|
|
219
|
+
*
|
|
220
|
+
* Kept separate from the engine so the decision can be asserted directly: from
|
|
221
|
+
* the outside a correct batch and a correct set of separate passes are
|
|
222
|
+
* indistinguishable by design, which makes this the only place the rule is
|
|
223
|
+
* observable.
|
|
224
|
+
*/
|
|
225
|
+
export function shouldBatchPatterns(patterns, options) {
|
|
226
|
+
if (patterns.length <= 1)
|
|
227
|
+
return false;
|
|
228
|
+
if (options.regex || options.ignoreCase)
|
|
229
|
+
return false;
|
|
230
|
+
return canBatchLiterals(patterns);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Parses ripgrep's newline-delimited JSON into per-pattern tallies.
|
|
234
|
+
*
|
|
235
|
+
* This is deliberately pure and separate from the subprocess: every interesting
|
|
236
|
+
* case here - a base64 path, a match with no submatches, an excluded file, an
|
|
237
|
+
* unattributable match - is trivial to exercise as data and nearly impossible
|
|
238
|
+
* to provoke from a real ripgrep on demand.
|
|
239
|
+
*/
|
|
240
|
+
export function createRipgrepSink(request, patterns) {
|
|
241
|
+
const single = patterns.length === 1 ? patterns[0] : null;
|
|
242
|
+
const tallies = new Map(patterns.map((pattern) => [pattern, emptyTally()]));
|
|
243
|
+
const sink = {
|
|
244
|
+
tallies,
|
|
245
|
+
failure: null,
|
|
246
|
+
line(text) {
|
|
247
|
+
if (text.length === 0 || sink.failure)
|
|
248
|
+
return;
|
|
249
|
+
let event;
|
|
250
|
+
try {
|
|
251
|
+
event = JSON.parse(text);
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
if (event.type !== 'match' || !event.data)
|
|
257
|
+
return;
|
|
258
|
+
const data = event.data;
|
|
259
|
+
const submatches = data.submatches ?? [];
|
|
260
|
+
if (submatches.length === 0)
|
|
261
|
+
return;
|
|
262
|
+
// ripgrep echoes the path as given ("./src/a.ts" when the target is
|
|
263
|
+
// "."); normalise so both engines report the same relative path.
|
|
264
|
+
const absolute = path.resolve(request.root, decodeText(data.path));
|
|
265
|
+
if (request.options.excludeFiles.has(absolute))
|
|
266
|
+
return;
|
|
267
|
+
const file = toPosix(path.relative(request.root, absolute));
|
|
268
|
+
const lineNumber = data.line_number ?? 0;
|
|
269
|
+
const text_ = truncate(decodeText(data.lines));
|
|
270
|
+
for (const submatch of submatches) {
|
|
271
|
+
// With --fixed-strings and no --ignore-case the matched text is the
|
|
272
|
+
// pattern verbatim, which is what makes attribution exact.
|
|
273
|
+
const pattern = single ?? decodeText(submatch.match);
|
|
274
|
+
const tally = tallies.get(pattern);
|
|
275
|
+
if (!tally) {
|
|
276
|
+
sink.failure = new UnattributableBatch(`ripgrep reported an unexpected match: ${pattern}`);
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
tally.count += 1;
|
|
280
|
+
const last = tally.locations.at(-1);
|
|
281
|
+
if (last && last.file === file && last.line === lineNumber) {
|
|
282
|
+
last.count += 1;
|
|
283
|
+
}
|
|
284
|
+
else if (tally.locations.length < MAX_COLLECTED_MATCHES) {
|
|
285
|
+
tally.locations.push({ file, line: lineNumber, column: (submatch.start ?? 0) + 1, text: text_, count: 1 });
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
return sink;
|
|
291
|
+
}
|
|
266
292
|
/* --------------------------------------------------------------- javascript */
|
|
267
293
|
/** Builds the matching RegExp shared by the JS engine. */
|
|
268
294
|
export function buildJsRegExp(symbol, options) {
|
|
@@ -299,6 +325,13 @@ class JavaScriptEngine {
|
|
|
299
325
|
if (!first)
|
|
300
326
|
return [];
|
|
301
327
|
const files = await this.collectFiles(first);
|
|
328
|
+
return this.searchFiles(files, requests);
|
|
329
|
+
}
|
|
330
|
+
/** Scans an already-enumerated file list. */
|
|
331
|
+
async searchFiles(files, requests) {
|
|
332
|
+
const [first] = requests;
|
|
333
|
+
if (!first)
|
|
334
|
+
return [];
|
|
302
335
|
const patterns = [...new Set(requests.map((request) => request.symbol))];
|
|
303
336
|
const regexps = new Map(patterns.map((pattern) => [pattern, buildJsRegExp(pattern, first.options)]));
|
|
304
337
|
const tallies = new Map(patterns.map((pattern) => [pattern, emptyTally()]));
|
|
@@ -344,33 +377,58 @@ class JavaScriptEngine {
|
|
|
344
377
|
}
|
|
345
378
|
/** Every file a request should look at, sorted by relative path. */
|
|
346
379
|
async collectFiles(request) {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
380
|
+
return (await enumerateCandidates(request)).files;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Lists the files a request would search, sorted by relative path.
|
|
385
|
+
*
|
|
386
|
+
* With a budget, the walk abandons as soon as the tree proves bigger than the
|
|
387
|
+
* budget allows. That makes it usable as a cheap probe: enumeration is stat-only
|
|
388
|
+
* work, so finding out a tree is "too big" costs a bounded number of stats
|
|
389
|
+
* rather than a full traversal.
|
|
390
|
+
*/
|
|
391
|
+
export async function enumerateCandidates(request, budget) {
|
|
392
|
+
const matcher = createGlobMatcher(request.options.globs);
|
|
393
|
+
const found = new Map();
|
|
394
|
+
let bytes = 0;
|
|
395
|
+
let exceeded = false;
|
|
396
|
+
const admit = (absolutePath, relativePath, size) => {
|
|
397
|
+
found.set(absolutePath, { absolutePath, relativePath });
|
|
398
|
+
bytes += size;
|
|
399
|
+
if (budget && (found.size > budget.maxFiles || bytes > budget.maxBytes)) {
|
|
400
|
+
exceeded = true;
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
403
|
+
return true;
|
|
404
|
+
};
|
|
405
|
+
outer: for (const target of request.targets.length > 0 ? request.targets : ['.']) {
|
|
406
|
+
const absoluteTarget = path.resolve(request.root, target);
|
|
407
|
+
const stats = await fs.stat(absoluteTarget).catch(() => null);
|
|
408
|
+
if (!stats)
|
|
409
|
+
continue;
|
|
410
|
+
if (stats.isFile()) {
|
|
411
|
+
const relativePath = toPosix(path.relative(request.root, absoluteTarget));
|
|
412
|
+
if (stats.size <= MAX_FILE_SIZE && matcher(relativePath)) {
|
|
413
|
+
if (!admit(absoluteTarget, relativePath, stats.size))
|
|
414
|
+
break outer;
|
|
415
|
+
}
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
for await (const file of walkFiles(absoluteTarget)) {
|
|
419
|
+
if (file.size > MAX_FILE_SIZE)
|
|
353
420
|
continue;
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
if (stats.size <= MAX_FILE_SIZE && matcher(relativePath)) {
|
|
357
|
-
found.set(absoluteTarget, { absolutePath: absoluteTarget, relativePath });
|
|
358
|
-
}
|
|
421
|
+
const relativePath = toPosix(path.relative(request.root, file.absolutePath));
|
|
422
|
+
if (!matcher(relativePath))
|
|
359
423
|
continue;
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if (file.size > MAX_FILE_SIZE)
|
|
363
|
-
continue;
|
|
364
|
-
const relativePath = toPosix(path.relative(request.root, file.absolutePath));
|
|
365
|
-
if (!matcher(relativePath))
|
|
366
|
-
continue;
|
|
367
|
-
found.set(file.absolutePath, { absolutePath: file.absolutePath, relativePath });
|
|
368
|
-
}
|
|
424
|
+
if (!admit(file.absolutePath, relativePath, file.size))
|
|
425
|
+
break outer;
|
|
369
426
|
}
|
|
370
|
-
for (const excluded of request.options.excludeFiles)
|
|
371
|
-
found.delete(excluded);
|
|
372
|
-
return [...found.values()].sort((a, b) => (a.relativePath < b.relativePath ? -1 : 1));
|
|
373
427
|
}
|
|
428
|
+
for (const excluded of request.options.excludeFiles)
|
|
429
|
+
found.delete(excluded);
|
|
430
|
+
const files = [...found.values()].sort((a, b) => (a.relativePath < b.relativePath ? -1 : 1));
|
|
431
|
+
return { files, exceeded, bytes };
|
|
374
432
|
}
|
|
375
433
|
/** Counts matches in one file and records per-line snippets. */
|
|
376
434
|
export function scanContent(content, relativePath, regexp) {
|
|
@@ -423,6 +481,23 @@ export function scanContent(content, relativePath, regexp) {
|
|
|
423
481
|
return { count, locations: [...byLine.values()].sort((a, b) => a.line - b.line) };
|
|
424
482
|
}
|
|
425
483
|
export const javascriptEngine = new JavaScriptEngine();
|
|
484
|
+
/**
|
|
485
|
+
* How much scanning the JavaScript engine may do before ripgrep is worth a
|
|
486
|
+
* process spawn.
|
|
487
|
+
*
|
|
488
|
+
* Measured with scripts/bench-engines.mjs. ripgrep's cost is dominated by
|
|
489
|
+
* process startup and is nearly flat in tree size; the JavaScript scanner grows
|
|
490
|
+
* linearly. The crossover is therefore wherever a spawn costs, and that differs
|
|
491
|
+
* by an order of magnitude between platforms:
|
|
492
|
+
*
|
|
493
|
+
* Windows 11, Node 24, rg 15 spawn floor ~130ms crossover ~575 files
|
|
494
|
+
* Linux (container), Node 22, rg 13 spawn floor ~15ms crossover ~25 files
|
|
495
|
+
*
|
|
496
|
+
* The budget is set just below each crossover, so choosing JavaScript is never
|
|
497
|
+
* the slower option by more than a few milliseconds, while a small tree on
|
|
498
|
+
* Windows avoids a spawn that would cost ten times the whole search.
|
|
499
|
+
*/
|
|
500
|
+
export const SMALL_TREE_BUDGET = process.platform === 'win32' ? { maxFiles: 512, maxBytes: 1024 * 1024 } : { maxFiles: 32, maxBytes: 64 * 1024 };
|
|
426
501
|
/** Spawn failures that mean "this binary is not installed", not "search failed". */
|
|
427
502
|
const MISSING_BINARY_CODES = new Set(['ENOENT', 'EACCES', 'EPERM', 'EINVAL', 'UNKNOWN']);
|
|
428
503
|
function isMissingBinary(error) {
|
|
@@ -430,34 +505,82 @@ function isMissingBinary(error) {
|
|
|
430
505
|
return typeof code === 'string' && MISSING_BINARY_CODES.has(code);
|
|
431
506
|
}
|
|
432
507
|
/**
|
|
433
|
-
*
|
|
508
|
+
* Identity tokens for exclude sets.
|
|
434
509
|
*
|
|
435
|
-
*
|
|
436
|
-
*
|
|
437
|
-
*
|
|
438
|
-
*
|
|
510
|
+
* The enumeration cache key has to account for `excludeFiles`, because
|
|
511
|
+
* enumeration applies it - two groups over the same targets but with different
|
|
512
|
+
* exclusions are different questions. Hashing the paths would be wasteful (a
|
|
513
|
+
* run excludes every spec file), and the runner passes one set for the whole
|
|
514
|
+
* run, so identity is both cheap and sufficient.
|
|
439
515
|
*/
|
|
440
|
-
|
|
441
|
-
|
|
516
|
+
const excludeSetIds = new WeakMap();
|
|
517
|
+
let nextExcludeSetId = 0;
|
|
518
|
+
function excludeSetId(excludeFiles) {
|
|
519
|
+
let id = excludeSetIds.get(excludeFiles);
|
|
520
|
+
if (id === undefined) {
|
|
521
|
+
id = nextExcludeSetId++;
|
|
522
|
+
excludeSetIds.set(excludeFiles, id);
|
|
523
|
+
}
|
|
524
|
+
return id;
|
|
525
|
+
}
|
|
526
|
+
function enumerationKey(request) {
|
|
527
|
+
return JSON.stringify([
|
|
528
|
+
request.root,
|
|
529
|
+
request.targets,
|
|
530
|
+
request.options.globs,
|
|
531
|
+
excludeSetId(request.options.excludeFiles),
|
|
532
|
+
]);
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Picks an engine per search group instead of once per run.
|
|
536
|
+
*
|
|
537
|
+
* The probe is the work: it enumerates the target set under a budget, which is
|
|
538
|
+
* stat-only. If the tree fits, the file list is already in hand and the
|
|
539
|
+
* JavaScript scan runs against it with no spawn and no second walk. If the walk
|
|
540
|
+
* abandons, the tree is big enough that ripgrep will win comfortably, and the
|
|
541
|
+
* abandoned enumeration cost a bounded number of stats.
|
|
542
|
+
*
|
|
543
|
+
* Deciding per group rather than per run matters because one spec can assert
|
|
544
|
+
* against `src/` and a single file in the same run.
|
|
545
|
+
*/
|
|
546
|
+
class AdaptiveEngine {
|
|
547
|
+
usedRipgrep = false;
|
|
548
|
+
ripgrepMissing = false;
|
|
442
549
|
ripgrep = new RipgrepEngine(process.env.SPEC_GUARD_RG || 'rg');
|
|
550
|
+
enumerations = new Map();
|
|
443
551
|
get name() {
|
|
444
|
-
return this.
|
|
552
|
+
return this.usedRipgrep ? 'ripgrep' : 'javascript';
|
|
445
553
|
}
|
|
446
554
|
async search(request) {
|
|
447
555
|
const [result] = await this.searchBatch([request]);
|
|
448
556
|
return result;
|
|
449
557
|
}
|
|
450
558
|
async searchBatch(requests) {
|
|
451
|
-
|
|
559
|
+
const [first] = requests;
|
|
560
|
+
if (!first)
|
|
561
|
+
return [];
|
|
562
|
+
if (!this.ripgrepMissing) {
|
|
563
|
+
const key = enumerationKey(first);
|
|
564
|
+
let probe = this.enumerations.get(key);
|
|
565
|
+
if (!probe) {
|
|
566
|
+
probe = enumerateCandidates(first, SMALL_TREE_BUDGET);
|
|
567
|
+
this.enumerations.set(key, probe);
|
|
568
|
+
}
|
|
569
|
+
const enumeration = await probe;
|
|
570
|
+
if (!enumeration.exceeded) {
|
|
571
|
+
// Small tree: the walk already produced the file list, so scanning it
|
|
572
|
+
// here costs less than starting a process.
|
|
573
|
+
return javascriptEngine.searchFiles(enumeration.files, requests);
|
|
574
|
+
}
|
|
452
575
|
try {
|
|
453
576
|
const results = await this.ripgrep.searchBatch(requests);
|
|
454
|
-
this.
|
|
577
|
+
this.usedRipgrep = true;
|
|
455
578
|
return results;
|
|
456
579
|
}
|
|
457
580
|
catch (error) {
|
|
458
581
|
if (!isMissingBinary(error))
|
|
459
582
|
throw error;
|
|
460
|
-
this.
|
|
583
|
+
this.ripgrepMissing = true;
|
|
461
584
|
}
|
|
462
585
|
}
|
|
463
586
|
return javascriptEngine.searchBatch(requests);
|
|
@@ -474,7 +597,7 @@ export async function resolveEngine(preference = 'auto') {
|
|
|
474
597
|
}
|
|
475
598
|
return new RipgrepEngine(binary);
|
|
476
599
|
}
|
|
477
|
-
return new
|
|
600
|
+
return new AdaptiveEngine();
|
|
478
601
|
}
|
|
479
602
|
/**
|
|
480
603
|
* Wraps an engine with a de-duplicating cache plus an automatic fallback to the
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/glob.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* behave identically on every platform. spec-guard therefore always expands
|
|
6
6
|
* patterns itself instead of trusting the shell.
|
|
7
7
|
*/
|
|
8
|
+
import { type Dirent } from 'node:fs';
|
|
8
9
|
/** Directories never worth searching. Mirrors ripgrep's practical defaults. */
|
|
9
10
|
export declare const DEFAULT_IGNORED_DIRECTORIES: ReadonlySet<string>;
|
|
10
11
|
/** True when the pattern contains glob metacharacters. */
|
|
@@ -27,6 +28,9 @@ export declare function globToRegExp(pattern: string, options?: {
|
|
|
27
28
|
* containing `/` is matched against the whole relative path.
|
|
28
29
|
*/
|
|
29
30
|
export declare function createGlobMatcher(patterns: readonly string[]): (relativePath: string) => boolean;
|
|
31
|
+
/** Reads one directory. Injectable so the ordering guarantee can be tested. */
|
|
32
|
+
export type DirectoryReader = (directory: string) => Promise<Dirent[]>;
|
|
33
|
+
export declare const defaultDirectoryReader: DirectoryReader;
|
|
30
34
|
export interface WalkOptions {
|
|
31
35
|
/** Directory names to skip entirely. */
|
|
32
36
|
ignoredDirectories?: ReadonlySet<string>;
|
|
@@ -34,6 +38,15 @@ export interface WalkOptions {
|
|
|
34
38
|
includeHidden?: boolean;
|
|
35
39
|
/** Follow symbolic links (off by default - cycles are not worth the risk). */
|
|
36
40
|
followSymlinks?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Directory reader, defaulting to `fs.readdir`.
|
|
43
|
+
*
|
|
44
|
+
* This exists because the ordering guarantee below is otherwise untestable on
|
|
45
|
+
* Windows: NTFS returns directory entries already sorted, so a test that
|
|
46
|
+
* checks the output is ordered passes even if the sort is deleted. Injecting
|
|
47
|
+
* an unordered reader makes the guarantee real on every platform.
|
|
48
|
+
*/
|
|
49
|
+
readDirectory?: DirectoryReader;
|
|
37
50
|
}
|
|
38
51
|
export interface WalkedFile {
|
|
39
52
|
absolutePath: string;
|
|
@@ -41,6 +54,12 @@ export interface WalkedFile {
|
|
|
41
54
|
relativePath: string;
|
|
42
55
|
size: number;
|
|
43
56
|
}
|
|
57
|
+
/** Orders directory entries by name, byte-wise and stable across platforms. */
|
|
58
|
+
export declare function compareDirents(a: {
|
|
59
|
+
name: string;
|
|
60
|
+
}, b: {
|
|
61
|
+
name: string;
|
|
62
|
+
}): number;
|
|
44
63
|
/**
|
|
45
64
|
* Depth-first directory walk yielding regular files.
|
|
46
65
|
* Emits nothing when `root` is missing or is not a directory.
|
package/dist/glob.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtD,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,EAAE,WAAW,CAAC,MAAM,CAkB1D,CAAC;AAIH,0DAA0D;AAC1D,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAiE5F;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAchG;AAED,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEvE,eAAO,MAAM,sBAAsB,EAAE,eACW,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE/E;AAED;;;GAGG;AACH,wBAAuB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,CAyDpG;AAED,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAUxE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,IAAI,EAAE,MAAM,EACZ,iBAAiB,GAAE,SAAS,MAAM,EAAiC,GAClE,OAAO,CAAC,MAAM,EAAE,CAAC,CAoCnB"}
|
package/dist/glob.js
CHANGED
|
@@ -122,6 +122,11 @@ export function createGlobMatcher(patterns) {
|
|
|
122
122
|
});
|
|
123
123
|
return (relativePath) => matchers.some(({ regexp, basenameOnly }) => regexp.test(basenameOnly ? path.posix.basename(relativePath) : relativePath));
|
|
124
124
|
}
|
|
125
|
+
export const defaultDirectoryReader = (directory) => fs.readdir(directory, { withFileTypes: true });
|
|
126
|
+
/** Orders directory entries by name, byte-wise and stable across platforms. */
|
|
127
|
+
export function compareDirents(a, b) {
|
|
128
|
+
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
|
|
129
|
+
}
|
|
125
130
|
/**
|
|
126
131
|
* Depth-first directory walk yielding regular files.
|
|
127
132
|
* Emits nothing when `root` is missing or is not a directory.
|
|
@@ -130,16 +135,20 @@ export async function* walkFiles(root, options = {}) {
|
|
|
130
135
|
const ignored = options.ignoredDirectories ?? DEFAULT_IGNORED_DIRECTORIES;
|
|
131
136
|
const includeHidden = options.includeHidden ?? false;
|
|
132
137
|
const followSymlinks = options.followSymlinks ?? false;
|
|
138
|
+
const readDirectory = options.readDirectory ?? defaultDirectoryReader;
|
|
133
139
|
const seen = new Set();
|
|
134
140
|
async function* visit(directory, prefix) {
|
|
135
141
|
let entries;
|
|
136
142
|
try {
|
|
137
|
-
entries = await
|
|
143
|
+
entries = await readDirectory(directory);
|
|
138
144
|
}
|
|
139
145
|
catch {
|
|
140
146
|
return;
|
|
141
147
|
}
|
|
142
|
-
|
|
148
|
+
// Sorted explicitly: readdir order is filesystem-defined (NTFS happens to
|
|
149
|
+
// return names in order, ext4 returns them in hash order), and spec-guard
|
|
150
|
+
// reports snippets in a stable order regardless of where it runs.
|
|
151
|
+
entries.sort(compareDirents);
|
|
143
152
|
for (const entry of entries) {
|
|
144
153
|
const name = entry.name;
|
|
145
154
|
if (!includeHidden && name.startsWith('.'))
|
package/dist/glob.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
*/
|
|
14
14
|
export { main, parseArgs, HELP, UsageError, EXIT_OK, EXIT_FAILED, EXIT_ERROR } from './cli.js';
|
|
15
15
|
export type { CliIO, CliOptions } from './cli.js';
|
|
16
|
-
export { buildJsRegExp, buildRipgrepArgs, createCachedEngine, escapeRegExp, findRipgrep, javascriptEngine, resetRipgrepProbe, resolveEngine, scanContent, MAX_FILE_SIZE, } from './engine.js';
|
|
17
|
-
export type { Engine, EnginePreference, SearchRequest } from './engine.js';
|
|
18
|
-
export { createGlobMatcher, expandSpecPatterns, globBase, globToRegExp, isGlob, toPosix, walkFiles, DEFAULT_IGNORED_DIRECTORIES, } from './glob.js';
|
|
19
|
-
export type { WalkedFile, WalkOptions } from './glob.js';
|
|
16
|
+
export { buildJsRegExp, buildRipgrepArgs, canBatchLiterals, createCachedEngine, createRipgrepSink, enumerateCandidates, escapeRegExp, findRipgrep, javascriptEngine, resetRipgrepProbe, resolveEngine, runSearches, scanContent, shouldBatchPatterns, MAX_FILE_SIZE, SMALL_TREE_BUDGET, } from './engine.js';
|
|
17
|
+
export type { BatchEngine, CachedEngine, Engine, EnginePreference, Enumeration, EnumerationBudget, RipgrepSink, SearchRequest, } from './engine.js';
|
|
18
|
+
export { compareDirents, createGlobMatcher, defaultDirectoryReader, expandSpecPatterns, globBase, globToRegExp, isGlob, toPosix, walkFiles, DEFAULT_IGNORED_DIRECTORIES, } from './glob.js';
|
|
19
|
+
export type { DirectoryReader, WalkedFile, WalkOptions } from './glob.js';
|
|
20
20
|
export { maskCode, parseAttributes, parseDirectives } from './parser.js';
|
|
21
21
|
export type { ParseContext } from './parser.js';
|
|
22
22
|
export { executeAssertion, resolveDirective, runSpecGuard, DEFAULT_CONCURRENCY, DEFAULT_MAX_SNIPPETS, } from './runner.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC/F,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC/F,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,OAAO,EACP,SAAS,EACT,2BAA2B,GAC5B,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxG,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,YAAY,EACV,SAAS,EACT,eAAe,EACf,MAAM,EACN,SAAS,EACT,cAAc,EACd,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* ```
|
|
13
13
|
*/
|
|
14
14
|
export { main, parseArgs, HELP, UsageError, EXIT_OK, EXIT_FAILED, EXIT_ERROR } from './cli.js';
|
|
15
|
-
export { buildJsRegExp, buildRipgrepArgs, createCachedEngine, escapeRegExp, findRipgrep, javascriptEngine, resetRipgrepProbe, resolveEngine, scanContent, MAX_FILE_SIZE, } from './engine.js';
|
|
16
|
-
export { createGlobMatcher, expandSpecPatterns, globBase, globToRegExp, isGlob, toPosix, walkFiles, DEFAULT_IGNORED_DIRECTORIES, } from './glob.js';
|
|
15
|
+
export { buildJsRegExp, buildRipgrepArgs, canBatchLiterals, createCachedEngine, createRipgrepSink, enumerateCandidates, escapeRegExp, findRipgrep, javascriptEngine, resetRipgrepProbe, resolveEngine, runSearches, scanContent, shouldBatchPatterns, MAX_FILE_SIZE, SMALL_TREE_BUDGET, } from './engine.js';
|
|
16
|
+
export { compareDirents, createGlobMatcher, defaultDirectoryReader, expandSpecPatterns, globBase, globToRegExp, isGlob, toPosix, walkFiles, DEFAULT_IGNORED_DIRECTORIES, } from './glob.js';
|
|
17
17
|
export { maskCode, parseAttributes, parseDirectives } from './parser.js';
|
|
18
18
|
export { executeAssertion, resolveDirective, runSpecGuard, DEFAULT_CONCURRENCY, DEFAULT_MAX_SNIPPETS, } from './runner.js';
|
|
19
19
|
export { createPainter, formatJson, formatReport, shouldUseAscii, shouldUseColor } from './reporter.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG/F,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG/F,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAYrB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,OAAO,EACP,SAAS,EACT,2BAA2B,GAC5B,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|