@descent-vtt/spec-guard 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +147 -0
  2. package/README.md +224 -27
  3. package/dist/cli.d.ts +37 -2
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +275 -59
  6. package/dist/cli.js.map +1 -1
  7. package/dist/config.d.ts +66 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +165 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/engine.d.ts +22 -8
  12. package/dist/engine.d.ts.map +1 -1
  13. package/dist/engine.js +118 -67
  14. package/dist/engine.js.map +1 -1
  15. package/dist/facts.d.ts +106 -0
  16. package/dist/facts.d.ts.map +1 -0
  17. package/dist/facts.js +188 -0
  18. package/dist/facts.js.map +1 -0
  19. package/dist/glob.d.ts +17 -21
  20. package/dist/glob.d.ts.map +1 -1
  21. package/dist/glob.js +13 -24
  22. package/dist/glob.js.map +1 -1
  23. package/dist/imports.d.ts +6 -1
  24. package/dist/imports.d.ts.map +1 -1
  25. package/dist/imports.js +9 -5
  26. package/dist/imports.js.map +1 -1
  27. package/dist/index.d.ts +20 -8
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +11 -5
  30. package/dist/index.js.map +1 -1
  31. package/dist/io.d.ts +51 -0
  32. package/dist/io.d.ts.map +1 -0
  33. package/dist/io.js +44 -0
  34. package/dist/io.js.map +1 -0
  35. package/dist/mcp.d.ts +11 -0
  36. package/dist/mcp.d.ts.map +1 -1
  37. package/dist/mcp.js +23 -18
  38. package/dist/mcp.js.map +1 -1
  39. package/dist/memo.d.ts +53 -0
  40. package/dist/memo.d.ts.map +1 -0
  41. package/dist/memo.js +67 -0
  42. package/dist/memo.js.map +1 -0
  43. package/dist/parser.d.ts.map +1 -1
  44. package/dist/parser.js +17 -0
  45. package/dist/parser.js.map +1 -1
  46. package/dist/query.d.ts +5 -2
  47. package/dist/query.d.ts.map +1 -1
  48. package/dist/query.js +12 -3
  49. package/dist/query.js.map +1 -1
  50. package/dist/reporter.d.ts +10 -0
  51. package/dist/reporter.d.ts.map +1 -1
  52. package/dist/reporter.js +33 -4
  53. package/dist/reporter.js.map +1 -1
  54. package/dist/rules.d.ts +12 -1
  55. package/dist/rules.d.ts.map +1 -1
  56. package/dist/rules.js +45 -1
  57. package/dist/rules.js.map +1 -1
  58. package/dist/runner.d.ts +42 -2
  59. package/dist/runner.d.ts.map +1 -1
  60. package/dist/runner.js +261 -76
  61. package/dist/runner.js.map +1 -1
  62. package/dist/specs.d.ts +3 -1
  63. package/dist/specs.d.ts.map +1 -1
  64. package/dist/specs.js +6 -5
  65. package/dist/specs.js.map +1 -1
  66. package/dist/structure.d.ts +104 -0
  67. package/dist/structure.d.ts.map +1 -0
  68. package/dist/structure.js +254 -0
  69. package/dist/structure.js.map +1 -0
  70. package/dist/types.d.ts +50 -5
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/watch.d.ts +125 -0
  73. package/dist/watch.d.ts.map +1 -0
  74. package/dist/watch.js +321 -0
  75. package/dist/watch.js.map +1 -0
  76. package/package.json +8 -2
@@ -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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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * What a watch session knows about the tree: every read, cached, with who read
3
+ * it. ADR-0014.
4
+ *
5
+ * Three rules, and everything else follows from them.
6
+ *
7
+ * **A read is a fact, and a reader records it.** A session gives each rule a
8
+ * door of its own (`view`). The door answers from the cache, filling it on a
9
+ * miss, and records the fact against the rule either way: a rule that was
10
+ * served from the cache still depends on what the cache said.
11
+ *
12
+ * **Events only evict.** An event names a path and says nothing reliable about
13
+ * what happened to it. Evicting forgets facts; it never writes one.
14
+ *
15
+ * **What was evicted is read again before anything runs, and compared.** A fact
16
+ * whose value is the same as before changed nothing, whatever the event
17
+ * suggested. Only the fields readers use count: a directory's names and their
18
+ * kinds, a path's kind and a file's size, a file's bytes by hash. Timestamps
19
+ * are never compared, so their granularity is not a hole and `touch` is not a
20
+ * change.
21
+ */
22
+ import type { Io } from './io.js';
23
+ export type FactKind = 'listing' | 'stat' | 'content' | 'realpath';
24
+ type Kind = FactKind;
25
+ /** A fact's identity: what was read, of which path. */
26
+ export type FactKey = string;
27
+ /** Settled, so a failed read is replayed as the same failure. */
28
+ export type Outcome<T> = {
29
+ ok: true;
30
+ value: T;
31
+ } | {
32
+ ok: false;
33
+ error: unknown;
34
+ };
35
+ interface Fact {
36
+ kind: Kind;
37
+ /** The path as it was read, resolved. */
38
+ path: string;
39
+ /** The path as events are compared with it. */
40
+ folded: string;
41
+ outcome: Promise<Outcome<unknown>>;
42
+ }
43
+ /**
44
+ * The part of a fact a reader can observe, as a string two reads can compare.
45
+ *
46
+ * Built as a value and serialised, rather than spelled in marker characters, so
47
+ * that every part of it is something a reader does look at: a directory's names
48
+ * with the answers to each kind question, a path's kind and a file's size, a
49
+ * file's bytes by hash. A failed read counts its message for file contents only:
50
+ * the import index reports that message, while nothing reports why a directory
51
+ * could not be listed or a real path resolved - only that it could not.
52
+ */
53
+ declare function fingerprint(kind: Kind, outcome: Outcome<unknown>): string;
54
+ /**
55
+ * Which facts a batch of events evicts.
56
+ *
57
+ * A `change` naming a directory whose listing is known evicts that directory
58
+ * and its parent's listing, and nothing beneath it: Windows reports a
59
+ * directory's `change` on every save inside it, and the files beneath have
60
+ * events of their own. Anything else - a `rename`, or a path that is not a
61
+ * known directory - evicts beneath the path too, because an entry that
62
+ * appeared, disappeared or was replaced takes everything under it along. Node
63
+ * documents `rename` as the event for a name that appears or disappears; that
64
+ * is the one thing about an event this relies on.
65
+ */
66
+ declare function evictions(events: readonly WatchEvent[], root: string, knownDirectory: (folded: string) => boolean): (fact: {
67
+ kind: Kind;
68
+ folded: string;
69
+ }) => boolean;
70
+ /**
71
+ * The two decisions the cache makes, together: what an event evicts, and what
72
+ * counts as a change. A parameter only so the equivalence test can hand the
73
+ * cache a deliberately wrong one and watch the test fail.
74
+ */
75
+ export interface FactPolicy {
76
+ evictions: typeof evictions;
77
+ fingerprint: typeof fingerprint;
78
+ }
79
+ export declare const FACT_POLICY: FactPolicy;
80
+ /** One change a watcher reported: a path, relative to the root, or everything. */
81
+ export interface WatchEvent {
82
+ type: 'rename' | 'change';
83
+ /** Relative to the watched root, or null when the watcher could not say. */
84
+ filename: string | null;
85
+ }
86
+ export interface FactCache {
87
+ /** A door that reads through the cache and records every fact it serves. */
88
+ view(record: Set<FactKey>): Io;
89
+ /**
90
+ * Forgets what the events may have changed, and returns the facts forgotten.
91
+ * An event with no filename forgets everything; see `evictions` for the rest.
92
+ */
93
+ evict(events: readonly WatchEvent[]): Map<FactKey, Fact>;
94
+ /** Forgets everything, and returns it. */
95
+ evictAll(): Map<FactKey, Fact>;
96
+ /**
97
+ * Reads again each forgotten fact somebody used, and returns the keys whose
98
+ * observable value changed. Facts nobody used are simply gone.
99
+ */
100
+ refresh(forgotten: ReadonlyMap<FactKey, Fact>, used: (key: FactKey) => boolean): Promise<Set<FactKey>>;
101
+ /** Facts held, for tests and for the numbers ADR-0014 reports. */
102
+ readonly size: number;
103
+ }
104
+ export declare function createFactCache(root: string, io: Io, policy?: FactPolicy): FactCache;
105
+ export {};
106
+ //# sourceMappingURL=facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../src/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AACnE,KAAK,IAAI,GAAG,QAAQ,CAAC;AAErB,uDAAuD;AACvD,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,iEAAiE;AACjE,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,UAAU,IAAI;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;CACpC;AAyBD;;;;;;;;;GASG;AACH,iBAAS,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAIlE;AA4BD;;;;;;;;;;;GAWG;AACH,iBAAS,SAAS,CAChB,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAC1C,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAoBnD;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,WAAW,CAAC;CACjC;AAED,eAAO,MAAM,WAAW,EAAE,UAAuC,CAAC;AAElE,kFAAkF;AAClF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,4EAA4E;IAC5E,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,0CAA0C;IAC1C,QAAQ,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B;;;OAGG;IACH,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACvG,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAE,UAAwB,GAAG,SAAS,CA+EjG"}
package/dist/facts.js ADDED
@@ -0,0 +1,188 @@
1
+ /**
2
+ * What a watch session knows about the tree: every read, cached, with who read
3
+ * it. ADR-0014.
4
+ *
5
+ * Three rules, and everything else follows from them.
6
+ *
7
+ * **A read is a fact, and a reader records it.** A session gives each rule a
8
+ * door of its own (`view`). The door answers from the cache, filling it on a
9
+ * miss, and records the fact against the rule either way: a rule that was
10
+ * served from the cache still depends on what the cache said.
11
+ *
12
+ * **Events only evict.** An event names a path and says nothing reliable about
13
+ * what happened to it. Evicting forgets facts; it never writes one.
14
+ *
15
+ * **What was evicted is read again before anything runs, and compared.** A fact
16
+ * whose value is the same as before changed nothing, whatever the event
17
+ * suggested. Only the fields readers use count: a directory's names and their
18
+ * kinds, a path's kind and a file's size, a file's bytes by hash. Timestamps
19
+ * are never compared, so their granularity is not a hole and `touch` is not a
20
+ * change.
21
+ */
22
+ import path from 'node:path';
23
+ import { contentHash } from './memo.js';
24
+ /**
25
+ * How a path is compared with an event's: resolved, case-folded and
26
+ * Unicode-normalised.
27
+ *
28
+ * Folding evicts too much on a case-sensitive filesystem, and only when two
29
+ * names differ by case alone. Not folding would evict too little on the two
30
+ * that are not - an event spelled `Src/a.ts` has to reach a fact read as
31
+ * `src/a.ts` - and too little is the direction that serves an old answer.
32
+ */
33
+ function fold(target) {
34
+ return path.resolve(target).normalize('NFC').toLowerCase();
35
+ }
36
+ function keyOf(kind, target) {
37
+ return `${kind}:${fold(target)}`;
38
+ }
39
+ /**
40
+ * The part of a fact a reader can observe, as a string two reads can compare.
41
+ *
42
+ * Built as a value and serialised, rather than spelled in marker characters, so
43
+ * that every part of it is something a reader does look at: a directory's names
44
+ * with the answers to each kind question, a path's kind and a file's size, a
45
+ * file's bytes by hash. A failed read counts its message for file contents only:
46
+ * the import index reports that message, while nothing reports why a directory
47
+ * could not be listed or a real path resolved - only that it could not.
48
+ */
49
+ function fingerprint(kind, outcome) {
50
+ // A failure is an object, which no observation is, holding the message only
51
+ // where one is read: `{}` for a directory or a real path.
52
+ return JSON.stringify(outcome.ok ? observed(kind, outcome.value) : { error: kind === 'content' ? outcome.error.message : undefined });
53
+ }
54
+ function observed(kind, value) {
55
+ if (kind === 'listing') {
56
+ // Sorted, because two reads of one directory need not list it in one order.
57
+ return value
58
+ .map((entry) => JSON.stringify([entry.name, entry.isSymbolicLink(), entry.isDirectory(), entry.isFile()]))
59
+ .sort();
60
+ }
61
+ if (kind === 'stat') {
62
+ const stats = value;
63
+ // A directory's size is whatever its filesystem says it is, and nothing reads it.
64
+ return stats === null ? null : [stats.isDirectory(), stats.isFile(), stats.isFile() ? stats.size : null];
65
+ }
66
+ return kind === 'content' ? contentHash(value) : value;
67
+ }
68
+ function settle(promise) {
69
+ return promise.then((value) => ({ ok: true, value }), (error) => ({ ok: false, error }));
70
+ }
71
+ function replay(outcome) {
72
+ return outcome.then((settled) => (settled.ok ? settled.value : Promise.reject(settled.error)));
73
+ }
74
+ /**
75
+ * Which facts a batch of events evicts.
76
+ *
77
+ * A `change` naming a directory whose listing is known evicts that directory
78
+ * and its parent's listing, and nothing beneath it: Windows reports a
79
+ * directory's `change` on every save inside it, and the files beneath have
80
+ * events of their own. Anything else - a `rename`, or a path that is not a
81
+ * known directory - evicts beneath the path too, because an entry that
82
+ * appeared, disappeared or was replaced takes everything under it along. Node
83
+ * documents `rename` as the event for a name that appears or disappears; that
84
+ * is the one thing about an event this relies on.
85
+ */
86
+ function evictions(events, root, knownDirectory) {
87
+ const shallow = new Set();
88
+ const deep = new Set();
89
+ for (const event of events) {
90
+ const target = fold(path.join(root, event.filename));
91
+ if (event.type === 'change' && knownDirectory(target))
92
+ shallow.add(target);
93
+ else
94
+ deep.add(target);
95
+ }
96
+ const parents = new Set([...shallow, ...deep].map((target) => path.dirname(target)));
97
+ // Each fact's ancestors are looked up, rather than each event's descendants
98
+ // searched for: `npm install` is thousands of events, and the cost of a batch
99
+ // should not grow with them.
100
+ return ({ kind, folded }) => {
101
+ if (shallow.has(folded) || deep.has(folded))
102
+ return true;
103
+ if (kind === 'listing' && parents.has(folded))
104
+ return true;
105
+ for (let directory = path.dirname(folded); directory !== path.dirname(directory); directory = path.dirname(directory)) {
106
+ if (deep.has(directory))
107
+ return true;
108
+ }
109
+ return false;
110
+ };
111
+ }
112
+ export const FACT_POLICY = { evictions, fingerprint };
113
+ export function createFactCache(root, io, policy = FACT_POLICY) {
114
+ const facts = new Map();
115
+ const read = (kind, target, load) => {
116
+ const key = keyOf(kind, target);
117
+ let fact = facts.get(key);
118
+ if (fact === undefined) {
119
+ fact = { kind, path: path.resolve(target), folded: fold(target), outcome: settle(load()) };
120
+ facts.set(key, fact);
121
+ }
122
+ return { key, fact };
123
+ };
124
+ const reload = (fact) => {
125
+ const load = {
126
+ listing: () => io.readDirectory(fact.path),
127
+ stat: () => io.stat(fact.path),
128
+ content: () => io.readFile(fact.path),
129
+ realpath: () => io.realpath(fact.path),
130
+ };
131
+ return { ...fact, outcome: settle(load[fact.kind]()) };
132
+ };
133
+ const take = (predicate) => {
134
+ const taken = new Map();
135
+ for (const [key, fact] of facts) {
136
+ if (predicate(fact, key))
137
+ taken.set(key, fact);
138
+ }
139
+ for (const key of taken.keys())
140
+ facts.delete(key);
141
+ return taken;
142
+ };
143
+ return {
144
+ get size() {
145
+ return facts.size;
146
+ },
147
+ view(record) {
148
+ const served = (kind, target, load) => {
149
+ const { key, fact } = read(kind, target, load);
150
+ record.add(key);
151
+ return replay(fact.outcome);
152
+ };
153
+ return {
154
+ readDirectory: (directory) => served('listing', directory, () => io.readDirectory(directory)),
155
+ stat: (target) => served('stat', target, () => io.stat(target)),
156
+ readFile: (file) => served('content', file, () => io.readFile(file)),
157
+ realpath: (target) => served('realpath', target, () => io.realpath(target)),
158
+ };
159
+ },
160
+ evict(events) {
161
+ if (events.some((event) => event.filename === null))
162
+ return this.evictAll();
163
+ return take(policy.evictions(events, root, (folded) => facts.has(`listing:${folded}`)));
164
+ },
165
+ evictAll() {
166
+ return take(() => true);
167
+ },
168
+ async refresh(forgotten, used) {
169
+ const changed = new Set();
170
+ await Promise.all([...forgotten].map(async ([key, before]) => {
171
+ if (!used(key))
172
+ return;
173
+ // Another read may have cached the path again since it was evicted;
174
+ // that read is the current one, and the comparison is with it.
175
+ let after = facts.get(key);
176
+ if (after === undefined) {
177
+ after = reload(before);
178
+ facts.set(key, after);
179
+ }
180
+ const [was, is] = await Promise.all([before.outcome, after.outcome]);
181
+ if (policy.fingerprint(before.kind, was) !== policy.fingerprint(after.kind, is))
182
+ changed.add(key);
183
+ }));
184
+ return changed;
185
+ },
186
+ };
187
+ }
188
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../src/facts.ts"],"names":[],"mappings":"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"}
package/dist/glob.d.ts CHANGED
@@ -5,7 +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, type Stats } from 'node:fs';
8
+ import { type Io } from './io.js';
9
9
  import { type ScopePolicy, type SkipReason } from './scope.js';
10
10
  /** True when the pattern contains glob metacharacters. */
11
11
  export declare function isGlob(pattern: string): boolean;
@@ -27,19 +27,6 @@ export declare function globToRegExp(pattern: string, options?: {
27
27
  * containing `/` is matched against the whole relative path.
28
28
  */
29
29
  export declare function createGlobMatcher(patterns: readonly string[]): (relativePath: string) => boolean;
30
- /**
31
- * `fs.stat`, or null for a path that cannot be stat'd.
32
- *
33
- * One helper rather than five `.catch(() => null)` tails. Each of those was a
34
- * function whose only distinguishing behaviour is that it returns null rather
35
- * than undefined, and since every caller tests the result for falsiness, no
36
- * caller could tell the difference. Here the difference is the contract, and
37
- * one assertion holds it.
38
- */
39
- export declare function statOrNull(target: string): Promise<Stats | null>;
40
- /** Reads one directory. Injectable so the ordering guarantee can be tested. */
41
- export type DirectoryReader = (directory: string) => Promise<Dirent[]>;
42
- export declare const defaultDirectoryReader: DirectoryReader;
43
30
  /**
44
31
  * Builds a predicate for `exclude` patterns, following gitignore/ripgrep rules
45
32
  * rather than the include-filter rules above.
@@ -77,14 +64,23 @@ export interface WalkOptions {
77
64
  */
78
65
  onSkip?: (relativePath: string, reason: SkipReason) => void;
79
66
  /**
80
- * Directory reader, defaulting to `fs.readdir`.
67
+ * Called for every directory the walk enters, below the one it started in.
68
+ *
69
+ * For the rules about directories (ADR-0013). Deriving directories from the
70
+ * files a walk yields cannot see an empty one, and an empty package is the
71
+ * clearest case of a package missing its manifest.
72
+ */
73
+ onDirectory?: (relativePath: string) => void;
74
+ /**
75
+ * The door the walk reads through, defaulting to the filesystem.
81
76
  *
82
- * This exists because the ordering guarantee below is otherwise untestable on
83
- * Windows: NTFS returns directory entries already sorted, so a test that
84
- * checks the output is ordered passes even if the sort is deleted. Injecting
85
- * an unordered reader makes the guarantee real on every platform.
77
+ * Injectable first because the ordering guarantee below is otherwise
78
+ * untestable on Windows: NTFS returns directory entries already sorted, so a
79
+ * test that checks the output is ordered passes even if the sort is deleted.
80
+ * An unordered reader makes the guarantee real on every platform. A watch
81
+ * session now passes one too, to see what the walk read (ADR-0014).
86
82
  */
87
- readDirectory?: DirectoryReader;
83
+ io?: Io;
88
84
  }
89
85
  /** A file the walk found, before anyone has asked how big it is. */
90
86
  export interface WalkedPath {
@@ -128,5 +124,5 @@ export declare function globBase(pattern: string): {
128
124
  * paths. Plain paths are taken literally; a directory expands to the Markdown
129
125
  * files it contains.
130
126
  */
131
- export declare function expandSpecPatterns(patterns: readonly string[], root: string, defaultExtensions?: readonly string[]): Promise<string[]>;
127
+ export declare function expandSpecPatterns(patterns: readonly string[], root: string, defaultExtensions?: readonly string[], io?: Io): Promise<string[]>;
132
128
  //# sourceMappingURL=glob.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAkB,KAAK,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAGlE,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAI9E,0DAA0D;AAC1D,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAOD;;;;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;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAEtE;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;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAoBnG;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5D;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC;AAED,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,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;;;;;;GAMG;AACH,wBAAuB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,CASpG;AAED;;;;;;;GAOG;AACH,wBAAuB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,CA6DpG;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,CAmCnB"}
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAU,KAAK,EAAE,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAI9E,0DAA0D;AAC1D,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAOD;;;;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;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAoBnG;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5D;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;;;;;;OAQG;IACH,EAAE,CAAC,EAAE,EAAE,CAAC;CACT;AAED,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,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;;;;;;GAMG;AACH,wBAAuB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,CAUpG;AAED;;;;;;;GAOG;AACH,wBAAuB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,CA8DpG;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,EACnE,EAAE,GAAE,EAAW,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCnB"}
package/dist/glob.js CHANGED
@@ -5,8 +5,8 @@
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 { promises as fs } from 'node:fs';
9
8
  import path from 'node:path';
9
+ import { nodeIo } from './io.js';
10
10
  import { DEFAULT_SCOPE } from './scope.js';
11
11
  const MAGIC_RE = /[*?[\]{}]/;
12
12
  /** True when the pattern contains glob metacharacters. */
@@ -106,19 +106,6 @@ export function createGlobMatcher(patterns) {
106
106
  });
107
107
  return (relativePath) => matchers.some(({ regexp, basenameOnly }) => regexp.test(basenameOnly ? path.posix.basename(relativePath) : relativePath));
108
108
  }
109
- /**
110
- * `fs.stat`, or null for a path that cannot be stat'd.
111
- *
112
- * One helper rather than five `.catch(() => null)` tails. Each of those was a
113
- * function whose only distinguishing behaviour is that it returns null rather
114
- * than undefined, and since every caller tests the result for falsiness, no
115
- * caller could tell the difference. Here the difference is the contract, and
116
- * one assertion holds it.
117
- */
118
- export async function statOrNull(target) {
119
- return fs.stat(target).catch(() => null);
120
- }
121
- export const defaultDirectoryReader = (directory) => fs.readdir(directory, { withFileTypes: true });
122
109
  /**
123
110
  * Builds a predicate for `exclude` patterns, following gitignore/ripgrep rules
124
111
  * rather than the include-filter rules above.
@@ -167,8 +154,9 @@ export function compareDirents(a, b) {
167
154
  * permissions forbid it - is reported as unreadable rather than yielded.
168
155
  */
169
156
  export async function* walkFiles(root, options = {}) {
157
+ const io = options.io ?? nodeIo;
170
158
  for await (const file of walkPaths(root, options)) {
171
- const stats = await statOrNull(file.absolutePath);
159
+ const stats = await io.stat(file.absolutePath);
172
160
  if (!stats) {
173
161
  options.onSkip?.(file.relativePath, 'unreadable');
174
162
  continue;
@@ -187,13 +175,13 @@ export async function* walkFiles(root, options = {}) {
187
175
  export async function* walkPaths(root, options = {}) {
188
176
  const scope = options.scope ?? DEFAULT_SCOPE;
189
177
  const followSymlinks = options.followSymlinks ?? false;
190
- const readDirectory = options.readDirectory ?? defaultDirectoryReader;
178
+ const io = options.io ?? nodeIo;
191
179
  const onSkip = options.onSkip;
192
180
  const seen = new Set();
193
181
  async function* visit(directory, prefix) {
194
182
  let entries;
195
183
  try {
196
- entries = await readDirectory(directory);
184
+ entries = await io.readDirectory(directory);
197
185
  }
198
186
  catch {
199
187
  // A directory we cannot list may hold anything, so it is reported rather
@@ -214,7 +202,7 @@ export async function* walkPaths(root, options = {}) {
214
202
  if (entry.isSymbolicLink()) {
215
203
  if (!followSymlinks)
216
204
  continue;
217
- const stats = await statOrNull(absolutePath);
205
+ const stats = await io.stat(absolutePath);
218
206
  if (!stats)
219
207
  continue;
220
208
  isDirectory = stats.isDirectory();
@@ -229,10 +217,11 @@ export async function* walkPaths(root, options = {}) {
229
217
  // Each physical directory is visited at most once. That stops symlink
230
218
  // cycles, and - more importantly for a search tool - stops a linked
231
219
  // tree from counting the same match twice.
232
- const real = followSymlinks ? await fs.realpath(absolutePath).catch(() => absolutePath) : absolutePath;
220
+ const real = followSymlinks ? await io.realpath(absolutePath).catch(() => absolutePath) : absolutePath;
233
221
  if (seen.has(real))
234
222
  continue;
235
223
  seen.add(real);
224
+ options.onDirectory?.(relativePath);
236
225
  yield* visit(absolutePath, relativePath);
237
226
  continue;
238
227
  }
@@ -241,7 +230,7 @@ export async function* walkPaths(root, options = {}) {
241
230
  yield { absolutePath, relativePath };
242
231
  }
243
232
  }
244
- const rootStats = await statOrNull(root);
233
+ const rootStats = await io.stat(root);
245
234
  if (!rootStats?.isDirectory())
246
235
  return;
247
236
  yield* visit(root, '');
@@ -264,18 +253,18 @@ export function globBase(pattern) {
264
253
  * paths. Plain paths are taken literally; a directory expands to the Markdown
265
254
  * files it contains.
266
255
  */
267
- export async function expandSpecPatterns(patterns, root, defaultExtensions = ['.md', '.markdown', '.mdx']) {
256
+ export async function expandSpecPatterns(patterns, root, defaultExtensions = ['.md', '.markdown', '.mdx'], io = nodeIo) {
268
257
  const found = new Set();
269
258
  for (const rawPattern of patterns) {
270
259
  const pattern = toPosix(rawPattern);
271
260
  if (!isGlob(pattern)) {
272
261
  const absolute = path.resolve(root, pattern);
273
- const stats = await statOrNull(absolute);
262
+ const stats = await io.stat(absolute);
274
263
  if (stats?.isFile()) {
275
264
  found.add(absolute);
276
265
  }
277
266
  else if (stats?.isDirectory()) {
278
- for await (const file of walkPaths(absolute)) {
267
+ for await (const file of walkPaths(absolute, { io })) {
279
268
  if (defaultExtensions.some((extension) => file.relativePath.toLowerCase().endsWith(extension))) {
280
269
  found.add(file.absolutePath);
281
270
  }
@@ -287,7 +276,7 @@ export async function expandSpecPatterns(patterns, root, defaultExtensions = ['.
287
276
  const { base } = globBase(pattern);
288
277
  const walkRoot = isAbsolutePattern ? base || path.parse(pattern).root : path.resolve(root, base);
289
278
  const matcher = createGlobMatcher([pattern]);
290
- for await (const file of walkPaths(walkRoot)) {
279
+ for await (const file of walkPaths(walkRoot, { io })) {
291
280
  const candidate = isAbsolutePattern
292
281
  ? toPosix(file.absolutePath)
293
282
  : toPosix(path.relative(root, file.absolutePath));