gurkencheck 0.0.6 → 0.0.9
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 +134 -3
- package/dist/config-parser.d.ts.map +1 -1
- package/dist/config-parser.js +7 -1
- package/dist/config-parser.js.map +1 -1
- package/dist/diagnostics.d.ts +34 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +53 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/exit-codes.d.ts +10 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +10 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/feature-finder.d.ts +38 -0
- package/dist/feature-finder.d.ts.map +1 -1
- package/dist/feature-finder.js +86 -8
- package/dist/feature-finder.js.map +1 -1
- package/dist/formatters/index.d.ts +44 -4
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +52 -15
- package/dist/formatters/index.js.map +1 -1
- package/dist/formatters/stylish.d.ts +3 -0
- package/dist/formatters/stylish.d.ts.map +1 -1
- package/dist/formatters/stylish.js +32 -1
- package/dist/formatters/stylish.js.map +1 -1
- package/dist/formatters/tap.d.ts +14 -0
- package/dist/formatters/tap.d.ts.map +1 -1
- package/dist/formatters/tap.js +22 -7
- package/dist/formatters/tap.js.map +1 -1
- package/dist/gherkin/parse.d.ts +42 -1
- package/dist/gherkin/parse.d.ts.map +1 -1
- package/dist/gherkin/parse.js +68 -3
- package/dist/gherkin/parse.js.map +1 -1
- package/dist/index.d.ts +27 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/linter.d.ts +31 -3
- package/dist/linter.d.ts.map +1 -1
- package/dist/linter.js +82 -15
- package/dist/linter.js.map +1 -1
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +4 -0
- package/dist/logger.js.map +1 -1
- package/dist/main.d.ts +9 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +158 -31
- package/dist/main.js.map +1 -1
- package/dist/rules/no-dupe-feature-names.d.ts.map +1 -1
- package/dist/rules/no-dupe-feature-names.js +26 -13
- package/dist/rules/no-dupe-feature-names.js.map +1 -1
- package/dist/rules/no-dupe-file-names.d.ts.map +1 -1
- package/dist/rules/no-dupe-file-names.js +32 -17
- package/dist/rules/no-dupe-file-names.js.map +1 -1
- package/dist/rules/no-dupe-scenario-names.d.ts.map +1 -1
- package/dist/rules/no-dupe-scenario-names.js +34 -22
- package/dist/rules/no-dupe-scenario-names.js.map +1 -1
- package/dist/rules.d.ts +41 -3
- package/dist/rules.d.ts.map +1 -1
- package/dist/rules.js +112 -4
- package/dist/rules.js.map +1 -1
- package/dist/stats/collect.d.ts +31 -0
- package/dist/stats/collect.d.ts.map +1 -0
- package/dist/stats/collect.js +249 -0
- package/dist/stats/collect.js.map +1 -0
- package/dist/stats/command.d.ts +4 -0
- package/dist/stats/command.d.ts.map +1 -0
- package/dist/stats/command.js +113 -0
- package/dist/stats/command.js.map +1 -0
- package/dist/stats/format/index.d.ts +25 -0
- package/dist/stats/format/index.d.ts.map +1 -0
- package/dist/stats/format/index.js +25 -0
- package/dist/stats/format/index.js.map +1 -0
- package/dist/stats/format/json.d.ts +10 -0
- package/dist/stats/format/json.d.ts.map +1 -0
- package/dist/stats/format/json.js +5 -0
- package/dist/stats/format/json.js.map +1 -0
- package/dist/stats/format/markdown.d.ts +8 -0
- package/dist/stats/format/markdown.d.ts.map +1 -0
- package/dist/stats/format/markdown.js +123 -0
- package/dist/stats/format/markdown.js.map +1 -0
- package/dist/stats/format/shared.d.ts +34 -0
- package/dist/stats/format/shared.d.ts.map +1 -0
- package/dist/stats/format/shared.js +37 -0
- package/dist/stats/format/shared.js.map +1 -0
- package/dist/stats/format/text.d.ts +5 -0
- package/dist/stats/format/text.d.ts.map +1 -0
- package/dist/stats/format/text.js +175 -0
- package/dist/stats/format/text.js.map +1 -0
- package/dist/stats/index.d.ts +21 -0
- package/dist/stats/index.d.ts.map +1 -0
- package/dist/stats/index.js +17 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/stats/normalise.d.ts +38 -0
- package/dist/stats/normalise.d.ts.map +1 -0
- package/dist/stats/normalise.js +65 -0
- package/dist/stats/normalise.js.map +1 -0
- package/dist/stats/similar.d.ts +61 -0
- package/dist/stats/similar.d.ts.map +1 -0
- package/dist/stats/similar.js +173 -0
- package/dist/stats/similar.js.map +1 -0
- package/dist/stats/types.d.ts +159 -0
- package/dist/stats/types.d.ts.map +1 -0
- package/dist/stats/types.js +10 -0
- package/dist/stats/types.js.map +1 -0
- package/dist/types.d.ts +47 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/util/glob.d.ts +18 -0
- package/dist/util/glob.d.ts.map +1 -1
- package/dist/util/glob.js +126 -22
- package/dist/util/glob.js.map +1 -1
- package/dist/util/stream.d.ts +31 -0
- package/dist/util/stream.d.ts.map +1 -0
- package/dist/util/stream.js +67 -0
- package/dist/util/stream.js.map +1 -0
- package/dist/watch.d.ts +36 -0
- package/dist/watch.d.ts.map +1 -0
- package/dist/watch.js +203 -0
- package/dist/watch.js.map +1 -0
- package/package.json +1 -1
package/dist/util/glob.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/util/glob.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/util/glob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working through a list without starting all of it at once.
|
|
3
|
+
*/
|
|
4
|
+
/** Values to work through, however they arrive. */
|
|
5
|
+
export type Sequence<T> = Iterable<T> | AsyncIterable<T>;
|
|
6
|
+
/**
|
|
7
|
+
* Maps over the values, keeping at most `window` results in flight, and hands
|
|
8
|
+
* each one over in the order the values were given.
|
|
9
|
+
*
|
|
10
|
+
* `Promise.all` over a list starts every one of them at once, which for a
|
|
11
|
+
* list of files means a file descriptor each and every result held in memory
|
|
12
|
+
* until the last one arrives. A window bounds both: what is held is a
|
|
13
|
+
* property of the window rather than of the length of the list.
|
|
14
|
+
*
|
|
15
|
+
* Results come back in order whatever order they finish in, so a caller that
|
|
16
|
+
* cares about the order the values were given - and the rules looking across
|
|
17
|
+
* files do - gets it without sorting anything.
|
|
18
|
+
*
|
|
19
|
+
* Stopping early stops the work: nothing beyond the window is started, what
|
|
20
|
+
* is left is dropped, and a source still producing values is closed.
|
|
21
|
+
*
|
|
22
|
+
* The values may arrive as an array or as something producing them one at a
|
|
23
|
+
* time, so a walk of a directory tree can feed this without being collected
|
|
24
|
+
* first.
|
|
25
|
+
*
|
|
26
|
+
* `map` must not reject. A result is started before anything awaits it, so a
|
|
27
|
+
* rejection would be an unhandled one rather than something the caller could
|
|
28
|
+
* catch.
|
|
29
|
+
*/
|
|
30
|
+
export declare function mapWithWindow<T, R>(values: Sequence<T>, window: number, map: (value: T) => Promise<R>): AsyncGenerator<R>;
|
|
31
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/util/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mDAAmD;AACnD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAWzD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAuB,aAAa,CAAC,CAAC,EAAE,CAAC,EACvC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EACnB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC5B,cAAc,CAAC,CAAC,CAAC,CA8BnB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working through a list without starting all of it at once.
|
|
3
|
+
*/
|
|
4
|
+
/** One iterator over either kind, so the rest need not care which it is. */
|
|
5
|
+
async function* asAsync(values) {
|
|
6
|
+
if (Symbol.asyncIterator in values) {
|
|
7
|
+
yield* values;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
yield* values;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Maps over the values, keeping at most `window` results in flight, and hands
|
|
15
|
+
* each one over in the order the values were given.
|
|
16
|
+
*
|
|
17
|
+
* `Promise.all` over a list starts every one of them at once, which for a
|
|
18
|
+
* list of files means a file descriptor each and every result held in memory
|
|
19
|
+
* until the last one arrives. A window bounds both: what is held is a
|
|
20
|
+
* property of the window rather than of the length of the list.
|
|
21
|
+
*
|
|
22
|
+
* Results come back in order whatever order they finish in, so a caller that
|
|
23
|
+
* cares about the order the values were given - and the rules looking across
|
|
24
|
+
* files do - gets it without sorting anything.
|
|
25
|
+
*
|
|
26
|
+
* Stopping early stops the work: nothing beyond the window is started, what
|
|
27
|
+
* is left is dropped, and a source still producing values is closed.
|
|
28
|
+
*
|
|
29
|
+
* The values may arrive as an array or as something producing them one at a
|
|
30
|
+
* time, so a walk of a directory tree can feed this without being collected
|
|
31
|
+
* first.
|
|
32
|
+
*
|
|
33
|
+
* `map` must not reject. A result is started before anything awaits it, so a
|
|
34
|
+
* rejection would be an unhandled one rather than something the caller could
|
|
35
|
+
* catch.
|
|
36
|
+
*/
|
|
37
|
+
export async function* mapWithWindow(values, window, map) {
|
|
38
|
+
const width = Math.max(1, Math.trunc(window));
|
|
39
|
+
const source = asAsync(values);
|
|
40
|
+
const inFlight = [];
|
|
41
|
+
let drained = false;
|
|
42
|
+
const fill = async () => {
|
|
43
|
+
while (!drained && inFlight.length < width) {
|
|
44
|
+
const next = await source.next();
|
|
45
|
+
if (next.done === true) {
|
|
46
|
+
drained = true;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
inFlight.push(map(next.value));
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
try {
|
|
53
|
+
await fill();
|
|
54
|
+
while (inFlight.length > 0) {
|
|
55
|
+
// Taken from the front, so the order in is the order out.
|
|
56
|
+
const result = await inFlight.shift();
|
|
57
|
+
yield result;
|
|
58
|
+
await fill();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
// Stopping early stops the source too, so a walk feeding this does not
|
|
63
|
+
// carry on over a tree nobody is going to look at.
|
|
64
|
+
await source.return(undefined);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/util/stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,4EAA4E;AAC5E,KAAK,SAAS,CAAC,CAAC,OAAO,CAAI,MAAmB;IAC5C,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,CAAC,MAAM,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,CAAC,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,aAAa,CAClC,MAAmB,EACnB,MAAc,EACd,GAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACrC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACvB,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,0DAA0D;YAC1D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAG,CAAC;YACvC,MAAM,MAAM,CAAC;YACb,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;IACH,CAAC;YAAS,CAAC;QACT,uEAAuE;QACvE,mDAAmD;QACnD,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
|
package/dist/watch.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Diagnostics } from './diagnostics.ts';
|
|
2
|
+
/** How long changes are allowed to keep arriving before a pass starts. */
|
|
3
|
+
export declare const DEFAULT_SETTLE_MS = 80;
|
|
4
|
+
export interface WatchOptions {
|
|
5
|
+
/** Where diagnostics about the watch itself go. */
|
|
6
|
+
diagnostics: Diagnostics;
|
|
7
|
+
/**
|
|
8
|
+
* How long to wait for changes to stop arriving before checking again.
|
|
9
|
+
*
|
|
10
|
+
* Saving a file is rarely one event: an editor may write, rename and
|
|
11
|
+
* change the mode, and a formatter on save adds more. Waiting for the flurry
|
|
12
|
+
* to end means one pass rather than four.
|
|
13
|
+
*/
|
|
14
|
+
settleMs?: number;
|
|
15
|
+
/** Names to take no notice of, matched against any part of the path. */
|
|
16
|
+
ignore?: readonly string[];
|
|
17
|
+
/**
|
|
18
|
+
* Stops the watch when it aborts.
|
|
19
|
+
*
|
|
20
|
+
* Ctrl-C stops it too. This is for a caller that is not a terminal - a test,
|
|
21
|
+
* or an editor closing the project it was watching.
|
|
22
|
+
*/
|
|
23
|
+
signal?: AbortSignal;
|
|
24
|
+
}
|
|
25
|
+
/** True when a change to this path could change what a run would report. */
|
|
26
|
+
export declare function isInteresting(relativePath: string, configFileName: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Runs `check` once, then again whenever something under `roots` changes,
|
|
29
|
+
* until the process is interrupted.
|
|
30
|
+
*
|
|
31
|
+
* Resolves when it is stopped, so the caller can go on to exit tidily. A pass
|
|
32
|
+
* failing does not stop the watch: the point of watching is to be told when
|
|
33
|
+
* it stops failing.
|
|
34
|
+
*/
|
|
35
|
+
export declare function watch(roots: readonly string[], configFileName: string, options: WatchOptions, check: () => Promise<unknown>): Promise<number>;
|
|
36
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAElD,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,WAAW,EAAE,WAAW,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAGnF;AAED;;;;;;;GAOG;AACH,wBAAsB,KAAK,CACzB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAiLjB"}
|
package/dist/watch.js
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checking again whenever the feature files change.
|
|
3
|
+
*
|
|
4
|
+
* This knows about watching and nothing about linting: it is handed something
|
|
5
|
+
* to run, and runs it whenever the tree underneath changes. What that
|
|
6
|
+
* something does - which formatter, which rules - is the caller's business.
|
|
7
|
+
*
|
|
8
|
+
* Every pass is a whole run. Keeping the parsed files between passes was the
|
|
9
|
+
* obvious optimisation and is the wrong trade here: the rules that look
|
|
10
|
+
* across files rebuild their state from every file anyway, so the only thing
|
|
11
|
+
* caching saves is the reading and parsing - and it saves it by holding every
|
|
12
|
+
* syntax tree in memory for as long as the process lives, which for a suite
|
|
13
|
+
* of any size is hundreds of megabytes sitting idle between keystrokes. A
|
|
14
|
+
* whole pass over a few thousand files takes well under a second, and the
|
|
15
|
+
* memory stays where a bounded read-ahead put it.
|
|
16
|
+
*/
|
|
17
|
+
import fs from 'node:fs';
|
|
18
|
+
import path from 'node:path';
|
|
19
|
+
import { EXIT_OK } from './exit-codes.js';
|
|
20
|
+
/** How long changes are allowed to keep arriving before a pass starts. */
|
|
21
|
+
export const DEFAULT_SETTLE_MS = 80;
|
|
22
|
+
/** True when a change to this path could change what a run would report. */
|
|
23
|
+
export function isInteresting(relativePath, configFileName) {
|
|
24
|
+
const name = path.basename(relativePath);
|
|
25
|
+
return relativePath.endsWith('.feature') || name === configFileName;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Runs `check` once, then again whenever something under `roots` changes,
|
|
29
|
+
* until the process is interrupted.
|
|
30
|
+
*
|
|
31
|
+
* Resolves when it is stopped, so the caller can go on to exit tidily. A pass
|
|
32
|
+
* failing does not stop the watch: the point of watching is to be told when
|
|
33
|
+
* it stops failing.
|
|
34
|
+
*/
|
|
35
|
+
export async function watch(roots, configFileName, options, check) {
|
|
36
|
+
const { diagnostics } = options;
|
|
37
|
+
const settleMs = options.settleMs ?? DEFAULT_SETTLE_MS;
|
|
38
|
+
const ignore = options.ignore ?? [];
|
|
39
|
+
const watchers = [];
|
|
40
|
+
const changed = new Set();
|
|
41
|
+
/** Set once the watch is waiting, so a watcher failing then can end it. */
|
|
42
|
+
let stopWatching;
|
|
43
|
+
let timer;
|
|
44
|
+
let running = false;
|
|
45
|
+
let againAfterThis = false;
|
|
46
|
+
const ignored = (relativePath) => ignore.some((entry) => relativePath.split(path.sep).includes(entry));
|
|
47
|
+
/**
|
|
48
|
+
* Runs a pass, and one more afterwards if anything changed while it ran.
|
|
49
|
+
* A change arriving mid-pass may or may not have been picked up, and
|
|
50
|
+
* checking twice is cheaper than being wrong about it.
|
|
51
|
+
*/
|
|
52
|
+
const runCheck = async () => {
|
|
53
|
+
if (running) {
|
|
54
|
+
againAfterThis = true;
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
running = true;
|
|
58
|
+
try {
|
|
59
|
+
do {
|
|
60
|
+
againAfterThis = false;
|
|
61
|
+
try {
|
|
62
|
+
await check();
|
|
63
|
+
}
|
|
64
|
+
catch (thrown) {
|
|
65
|
+
// What is being run belongs to the caller. A pass that falls over
|
|
66
|
+
// must not end the watch, or you would have to start it again to
|
|
67
|
+
// find out you had fixed the thing that broke it.
|
|
68
|
+
diagnostics.report({
|
|
69
|
+
level: 'error',
|
|
70
|
+
message: `The check failed: ${thrown instanceof Error ? thrown.message : String(thrown)}`,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
} while (againAfterThis);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
running = false;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const schedule = () => {
|
|
80
|
+
if (timer !== undefined) {
|
|
81
|
+
clearTimeout(timer);
|
|
82
|
+
}
|
|
83
|
+
timer = setTimeout(() => {
|
|
84
|
+
timer = undefined;
|
|
85
|
+
const what = changed.size === 1 ? ([...changed][0] ?? 'a file') : `${changed.size} files`;
|
|
86
|
+
changed.clear();
|
|
87
|
+
diagnostics.report({ level: 'notice', message: `\n${what} changed - checking again` });
|
|
88
|
+
void runCheck();
|
|
89
|
+
}, settleMs);
|
|
90
|
+
// A watch should not be the reason a process stays alive once the thing
|
|
91
|
+
// it was watching for has been dealt with.
|
|
92
|
+
timer.unref?.();
|
|
93
|
+
};
|
|
94
|
+
/** Watchers still working. A watcher that gives up takes itself out. */
|
|
95
|
+
const living = new Set();
|
|
96
|
+
for (const root of roots) {
|
|
97
|
+
// Checked before watching rather than left to fs.watch, because what
|
|
98
|
+
// fs.watch does about a missing directory is not the same everywhere: it
|
|
99
|
+
// throws on some platforms and reports an error event later on others,
|
|
100
|
+
// and the second kind would leave this waiting on a watch of nothing.
|
|
101
|
+
let directory = false;
|
|
102
|
+
try {
|
|
103
|
+
directory = fs.statSync(root).isDirectory();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
directory = false;
|
|
107
|
+
}
|
|
108
|
+
if (!directory) {
|
|
109
|
+
diagnostics.report({
|
|
110
|
+
level: 'error',
|
|
111
|
+
message: `Could not watch "${root}": it is not a directory.`,
|
|
112
|
+
});
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const watcher = fs.watch(root, { recursive: true }, (_event, filename) => {
|
|
117
|
+
// Some platforms hand over no name; there is nothing to filter on, so
|
|
118
|
+
// check rather than risk missing a change.
|
|
119
|
+
if (filename === null) {
|
|
120
|
+
schedule();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const relativePath = filename.toString();
|
|
124
|
+
if (ignored(relativePath) || !isInteresting(relativePath, configFileName)) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
changed.add(path.basename(relativePath));
|
|
128
|
+
schedule();
|
|
129
|
+
});
|
|
130
|
+
watcher.on('error', (thrown) => {
|
|
131
|
+
// One watch giving up should not take the others with it - but if
|
|
132
|
+
// they all give up there is nothing left to wait for, and waiting
|
|
133
|
+
// anyway would be a process that never returns.
|
|
134
|
+
diagnostics.report({
|
|
135
|
+
level: 'detail',
|
|
136
|
+
message: `No longer watching "${root}": ${thrown.message}`,
|
|
137
|
+
});
|
|
138
|
+
watcher.close();
|
|
139
|
+
living.delete(watcher);
|
|
140
|
+
if (living.size === 0) {
|
|
141
|
+
stopWatching?.();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
watchers.push(watcher);
|
|
145
|
+
living.add(watcher);
|
|
146
|
+
}
|
|
147
|
+
catch (thrown) {
|
|
148
|
+
diagnostics.report({
|
|
149
|
+
level: 'error',
|
|
150
|
+
message: `Could not watch "${root}": ${thrown instanceof Error ? thrown.message : String(thrown)}`,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (watchers.length === 0) {
|
|
155
|
+
diagnostics.report({
|
|
156
|
+
level: 'error',
|
|
157
|
+
message: 'Nothing could be watched, so there would be nothing to wait for.',
|
|
158
|
+
});
|
|
159
|
+
return EXIT_OK;
|
|
160
|
+
}
|
|
161
|
+
await runCheck();
|
|
162
|
+
diagnostics.report({
|
|
163
|
+
level: 'notice',
|
|
164
|
+
message: '\nWatching for changes. Press Ctrl-C to stop.',
|
|
165
|
+
});
|
|
166
|
+
return await new Promise((resolve) => {
|
|
167
|
+
let stopped = false;
|
|
168
|
+
const stop = () => {
|
|
169
|
+
if (stopped) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
stopped = true;
|
|
173
|
+
process.off('SIGINT', stop);
|
|
174
|
+
process.off('SIGTERM', stop);
|
|
175
|
+
options.signal?.removeEventListener('abort', stop);
|
|
176
|
+
if (timer !== undefined) {
|
|
177
|
+
clearTimeout(timer);
|
|
178
|
+
}
|
|
179
|
+
for (const watcher of watchers) {
|
|
180
|
+
watcher.close();
|
|
181
|
+
}
|
|
182
|
+
// The ^C the terminal echoed is sitting at the start of the line.
|
|
183
|
+
diagnostics.report({ level: 'notice', message: '' });
|
|
184
|
+
resolve(EXIT_OK);
|
|
185
|
+
};
|
|
186
|
+
stopWatching = stop;
|
|
187
|
+
process.on('SIGINT', stop);
|
|
188
|
+
process.on('SIGTERM', stop);
|
|
189
|
+
// A watcher may have given up while the first pass was running, in which
|
|
190
|
+
// case there is nothing left to wait for.
|
|
191
|
+
if (living.size === 0) {
|
|
192
|
+
stop();
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (options.signal?.aborted === true) {
|
|
196
|
+
stop();
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
options.signal?.addEventListener('abort', stop, { once: true });
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|