@descent-vtt/spec-guard 0.8.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 (69) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +119 -19
  3. package/dist/cli.d.ts +37 -2
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +274 -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 +9 -21
  20. package/dist/glob.d.ts.map +1 -1
  21. package/dist/glob.js +12 -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 +18 -8
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +10 -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 +21 -17
  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/query.d.ts +5 -2
  44. package/dist/query.d.ts.map +1 -1
  45. package/dist/query.js +7 -3
  46. package/dist/query.js.map +1 -1
  47. package/dist/reporter.d.ts +10 -0
  48. package/dist/reporter.d.ts.map +1 -1
  49. package/dist/reporter.js +20 -0
  50. package/dist/reporter.js.map +1 -1
  51. package/dist/runner.d.ts +39 -2
  52. package/dist/runner.d.ts.map +1 -1
  53. package/dist/runner.js +85 -72
  54. package/dist/runner.js.map +1 -1
  55. package/dist/specs.d.ts +3 -1
  56. package/dist/specs.d.ts.map +1 -1
  57. package/dist/specs.js +6 -5
  58. package/dist/specs.js.map +1 -1
  59. package/dist/structure.d.ts +2 -2
  60. package/dist/structure.d.ts.map +1 -1
  61. package/dist/structure.js +5 -4
  62. package/dist/structure.js.map +1 -1
  63. package/dist/types.d.ts +17 -2
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/watch.d.ts +125 -0
  66. package/dist/watch.d.ts.map +1 -0
  67. package/dist/watch.js +321 -0
  68. package/dist/watch.js.map +1 -0
  69. package/package.json +8 -2
package/dist/structure.js CHANGED
@@ -10,9 +10,10 @@
10
10
  */
11
11
  import path from 'node:path';
12
12
  import { comparePaths } from './engine.js';
13
- import { createExcludeMatcher, createGlobMatcher, defaultDirectoryReader, globToRegExp, isGlob, toPosix, walkPaths, } from './glob.js';
13
+ import { createExcludeMatcher, createGlobMatcher, globToRegExp, isGlob, toPosix, walkPaths, } from './glob.js';
14
+ import { nodeIo } from './io.js';
14
15
  import { LedgerBuilder, UNCERTAIN_REASONS } from './scope.js';
15
- export function createTreeIndex(root, readDirectory = defaultDirectoryReader) {
16
+ export function createTreeIndex(root, io = nodeIo) {
16
17
  // Each directory's read, by its path from the root, kept twice over: as the
17
18
  // reader returned it, for the walk - which needs a failed read to fail, and
18
19
  // sorts in place a list that is then already sorted - and as a lookup by
@@ -25,7 +26,7 @@ export function createTreeIndex(root, readDirectory = defaultDirectoryReader) {
25
26
  const read = (relativeDirectory) => {
26
27
  let cached = reads.get(relativeDirectory);
27
28
  if (!cached) {
28
- const entries = readDirectory(path.join(root, relativeDirectory));
29
+ const entries = io.readDirectory(path.join(root, relativeDirectory));
29
30
  const listing = entries.then((found) => new Map(found.map((entry) => [entry.name, entry])), () => null);
30
31
  cached = { entries, listing };
31
32
  reads.set(relativeDirectory, cached);
@@ -53,7 +54,7 @@ export function createTreeIndex(root, readDirectory = defaultDirectoryReader) {
53
54
  const fromRoot = (relativePath) => path.posix.join(target, relativePath);
54
55
  const walked = walkPaths(path.join(root, target), {
55
56
  scope,
56
- readDirectory: (directory) => read(toPosix(path.relative(root, directory)) || '.').entries,
57
+ io: { ...io, readDirectory: (directory) => read(toPosix(path.relative(root, directory)) || '.').entries },
57
58
  onDirectory: (relativePath) => tree.directories.push(fromRoot(relativePath)),
58
59
  // Only the gaps. `.git` and `node_modules` are the run's policy, and
59
60
  // are no more news here than they are to a search.
@@ -1 +1 @@
1
- {"version":3,"file":"structure.js","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,MAAM,EACN,OAAO,EACP,SAAS,GAEV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAsC,MAAM,YAAY,CAAC;AAyClG,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,aAAa,GAAoB,sBAAsB;IACnG,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,SAAS;IACT,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2E,CAAC;IACjG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/C,MAAM,IAAI,GAAG,CAAC,iBAAyB,EAAmE,EAAE;QAC1G,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAC7D,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;YACF,MAAM,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,EAAE,iBAAyB,EAA2B,EAAE;QAC3E,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QACtC,IAAI,iBAAiB,KAAK,GAAG;YAAE,OAAO,OAAO,CAAC;QAC9C,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5C,IAAI,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC5D,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QACpE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,KAAkB,EAAiB,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,KAAK,IAAmB,EAAE;gBACnC,MAAM,IAAI,GAAS,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC5D,MAAM,QAAQ,GAAG,CAAC,YAAoB,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBACzF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;oBAChD,KAAK;oBACL,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO;oBAC1F,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBAC5E,qEAAqE;oBACrE,mDAAmD;oBACnD,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE;wBAC/B,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;4BAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;oBAC5E,CAAC;iBACF,CAAC,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM;oBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC9E,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,EAAE,CAAC;YACL,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,MAAM,CAAC,KAAgB,EAAE,YAAoB;IAC1D,IAAI,YAAY,KAAK,GAAG;QAAE,OAAO,WAAW,CAAC;IAC7C,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9G,OAAO,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,KAAK,CAAC,KAAgB,EAAE,SAAiB,EAAE,KAAa;IACrE,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAY,EAAE,MAAc;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAA2B;QACrC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QACzC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACvC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC;KAC1E,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ;SACpB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAW,CAAC,CAAC;SACzF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,qBAAqB,QAAQ,UAAU,OAAO,CAAC,CAAC,CAAC,iDAAiD,CAAC;IAC5G,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,OAAO,qBAAqB,QAAQ,gEAAgE,CAAC;IACvG,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;QACjG,OAAO,qBAAqB,QAAQ,uEAAuE,CAAC;IAC9G,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;QACtF,OAAO,mBAAmB,KAAK,4EAA4E,CAAC;IAC9G,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,mBAAmB,KAAK,4CAA4C,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAiCD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAqB,EACrB,OAAyB,EACzB,KAAgB;IAEhB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,MAAc,EAAQ,EAAE;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,QAAQ;gBAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACrC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACrD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;wBAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC3G,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;oBAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,KAAK,GAAmB;QAC5B,OAAO;QACP,cAAc;QACd,SAAS,EAAE,OAAO,CAAC,MAAM;QACzB,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;KACtB,CAAC;IAEF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CACvG,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAE,KAAK,CAAC,EAAE,CAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4EAA4E;IAC5E,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAa,CAAC;QACvC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAW,EAAE,EAAE,CAAC;QAClG,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CACrG,CACF,CACF,CACF,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE;QAC7B,IAAK,KAAK,CAAC,EAAE,CAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QACpD,wEAAwE;QACxE,4CAA4C;QAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,KAAK,iBAAiB,CAAC;QACzF,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAmB,QAAQ,CAAC,EAAE,CAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"structure.js","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -233,8 +233,6 @@ export interface Assertion {
233
233
  baseline: readonly BaselineEntry[];
234
234
  /** Whether a baseline entry that no longer matches fails the run. */
235
235
  ratchet: RatchetMode;
236
- /** Targets that do not exist on disk. */
237
- missingTargets: string[];
238
236
  /**
239
237
  * Tolerate a scope containing no files.
240
238
  *
@@ -320,6 +318,21 @@ export interface RunSummary {
320
318
  */
321
319
  inactive: number;
322
320
  }
321
+ /**
322
+ * What a command took from a project's configuration, by key. ADR-0014.
323
+ *
324
+ * Carried on a report because an option in a file nobody is looking at is an
325
+ * option nobody knows is in force - and `allowEmptyScope` there weakens every
326
+ * rule in the project.
327
+ */
328
+ export interface ConfigUse {
329
+ /** The file the options came from, relative to the root. */
330
+ file: string;
331
+ /** Keys whose values were used. */
332
+ applied: string[];
333
+ /** Keys the command line set too, and won. */
334
+ overridden: string[];
335
+ }
323
336
  export interface RunReport {
324
337
  ok: boolean;
325
338
  root: string;
@@ -340,5 +353,7 @@ export interface RunReport {
340
353
  * tool exists to prevent.
341
354
  */
342
355
  inactiveSpecs: InactiveSpec[];
356
+ /** What the command line took from the project's configuration, when it took anything. */
357
+ config?: ConfigUse;
343
358
  }
344
359
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * `spec-guard --watch`: the same report, again, whenever the tree changes.
3
+ * ADR-0014.
4
+ *
5
+ * Two parts. A session answers "what does a run say now" and re-executes a
6
+ * rule only when its resolved form or something it read has changed; what may
7
+ * be reused, and why, is in facts.ts and memo.ts. The scheduler around it turns
8
+ * a watcher's events into batches, never runs two at once, redraws the terminal,
9
+ * and stops on Ctrl+C.
10
+ *
11
+ * The session is held to a fresh run of the same tree by
12
+ * tests/watch-equivalence.test.ts, and nothing here is trusted beyond that.
13
+ */
14
+ import { type FactPolicy, type WatchEvent } from './facts.js';
15
+ import { type Io, type TreeWatcher } from './io.js';
16
+ import { type Memo, type SessionMemo } from './memo.js';
17
+ import { type ReporterOptions } from './reporter.js';
18
+ import { type ExecuteOptions, type RunOptions, type RunResult } from './runner.js';
19
+ import type { Assertion, ConfigUse } from './types.js';
20
+ /** The options a session's run takes: a run's, less the engine it never uses. */
21
+ export type SessionRunOptions = Pick<RunOptions, 'allowMissingTargets' | 'strictTargets' | 'allowEmptyScope' | 'maxSnippets' | 'includeSpecs' | 'defaultSkips' | 'ignoreStatus' | 'concurrency'>;
22
+ /** What one run of a session is asked to do. */
23
+ export interface SessionSettings {
24
+ patterns: readonly string[];
25
+ run: SessionRunOptions;
26
+ /** What those settings took from the project's configuration, for the report. */
27
+ config?: ConfigUse;
28
+ }
29
+ export interface SessionOptions {
30
+ root: string;
31
+ /** The filesystem underneath the session's cache. */
32
+ io?: Io;
33
+ /**
34
+ * Decides a run's settings, reading whatever it needs through the door it is
35
+ * handed - so an edit to `package.json` reaches the session as a changed fact
36
+ * like any other. Throws to fail the run with its message.
37
+ */
38
+ settings: (io: Io) => Promise<SessionSettings>;
39
+ /** What an event evicts and what counts as a change. */
40
+ policy?: FactPolicy;
41
+ /** Where pure work is remembered. */
42
+ memo?: SessionMemo;
43
+ /** What decides whether a rule's last result can be reused. */
44
+ identify?: (assertion: Assertion, run: SessionRunOptions) => string;
45
+ /** The per-run caches a rule executes with. */
46
+ caches?: (root: string, door: Io, memo: Memo) => RuleCaches;
47
+ }
48
+ /** The caches one execution of one rule reads through. */
49
+ export type RuleCaches = Pick<ExecuteOptions, 'engine' | 'imports' | 'hasFiles' | 'tree'>;
50
+ /**
51
+ * A rule's own caches, over its own door.
52
+ *
53
+ * Never shared between rules. Each is keyed by path, which makes it a fact
54
+ * under another name: a second rule served from the first one's walk would skip
55
+ * the reads, and with them the record of what it depends on.
56
+ */
57
+ export declare function ruleCaches(root: string, door: Io, memo: Memo): RuleCaches;
58
+ export interface SessionRun {
59
+ report: RunResult;
60
+ /** How many snippets a failure shows, as the run was configured. */
61
+ maxSnippets: number;
62
+ /** Rules executed by this run rather than carried over from the last. */
63
+ executed: number;
64
+ }
65
+ export interface Session {
66
+ /** What a run says now. */
67
+ run(): Promise<SessionRun>;
68
+ /** Evicts what the events may have changed, and reads it again. Returns how many facts changed. */
69
+ observe(events: readonly WatchEvent[]): Promise<number>;
70
+ /** Forgets every fact, so the next run executes every rule. */
71
+ forget(): void;
72
+ /** Facts held, for the numbers ADR-0014 reports. */
73
+ readonly facts: number;
74
+ }
75
+ /**
76
+ * What decides a rule's result besides the tree: its resolved form, and the run
77
+ * options its execution reads. Two rules with equal identities executed over the
78
+ * same facts give the same result, which is the whole of what reuse relies on.
79
+ *
80
+ * Only the options execution reads. The ones resolution reads - which specs are
81
+ * excluded, which directories skipped - are already in the resolved form, as the
82
+ * spec files it leaves out and the scope it walks, and are held there, where a
83
+ * rule is changed by them, rather than beside it.
84
+ */
85
+ export declare function identity(assertion: Assertion, run: SessionRunOptions): string;
86
+ export declare function createSession(options: SessionOptions): Session;
87
+ /** How long a batch waits for quiet after its last event. */
88
+ export declare const QUIET_MS = 50;
89
+ /** How long a batch waits after its first event, however noisy the tree stays. */
90
+ export declare const MAX_WAIT_MS = 500;
91
+ /** The exit code of an interrupted command, as a shell reports one: 128 + SIGINT. */
92
+ export declare const EXIT_INTERRUPTED = 130;
93
+ /** Timers, injectable so a test can run the scheduler without waiting. */
94
+ export interface Clock {
95
+ now(): number;
96
+ setTimeout(callback: () => void, ms: number): unknown;
97
+ clearTimeout(handle: unknown): void;
98
+ }
99
+ export declare const systemClock: Clock;
100
+ export interface WatchOptions {
101
+ root: string;
102
+ session: Session;
103
+ /** Starts watching the root; may throw. */
104
+ watch: (listener: (event: WatchEvent) => void, onError: (error: Error) => void) => TreeWatcher;
105
+ /** Writes text as it is, with no newline added. */
106
+ write: (text: string) => void;
107
+ /** Clear the screen and redraw, rather than append. */
108
+ isTTY: boolean;
109
+ reporter: ReporterOptions;
110
+ /** Registers the handler for Ctrl+C and SIGTERM, and returns how to unregister it. */
111
+ onInterrupt: (handler: () => void) => () => void;
112
+ /** Registers the handler for a line on stdin, and returns how to unregister it. */
113
+ onLine?: (handler: () => void) => () => void;
114
+ clock?: Clock;
115
+ }
116
+ /**
117
+ * Runs a session until it is interrupted, and resolves to the exit code.
118
+ *
119
+ * 130 when stopped, since a session is neither a pass nor a failure. 2 when it
120
+ * cannot start or its watcher fails, including when the root disappears.
121
+ */
122
+ export declare function runWatch(options: WatchOptions): Promise<number>;
123
+ /** A watcher's error, with what to do about the one a person can fix. */
124
+ export declare function describeWatchError(error: Error): string;
125
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
package/dist/watch.js ADDED
@@ -0,0 +1,321 @@
1
+ /**
2
+ * `spec-guard --watch`: the same report, again, whenever the tree changes.
3
+ * ADR-0014.
4
+ *
5
+ * Two parts. A session answers "what does a run say now" and re-executes a
6
+ * rule only when its resolved form or something it read has changed; what may
7
+ * be reused, and why, is in facts.ts and memo.ts. The scheduler around it turns
8
+ * a watcher's events into batches, never runs two at once, redraws the terminal,
9
+ * and stops on Ctrl+C.
10
+ *
11
+ * The session is held to a fresh run of the same tree by
12
+ * tests/watch-equivalence.test.ts, and nothing here is trusted beyond that.
13
+ */
14
+ import path from 'node:path';
15
+ import { createCachedEngine, createJavaScriptEngine } from './engine.js';
16
+ import { createFactCache } from './facts.js';
17
+ import { createImportIndex } from './imports.js';
18
+ import { nodeIo } from './io.js';
19
+ import { createMemo } from './memo.js';
20
+ import { formatReport } from './reporter.js';
21
+ import { createScopeProbe, DEFAULT_CONCURRENCY, DEFAULT_MAX_SNIPPETS, executeAssertion, planRun, reportRun, } from './runner.js';
22
+ import { readSpecs } from './specs.js';
23
+ import { createTreeIndex } from './structure.js';
24
+ /**
25
+ * A rule's own caches, over its own door.
26
+ *
27
+ * Never shared between rules. Each is keyed by path, which makes it a fact
28
+ * under another name: a second rule served from the first one's walk would skip
29
+ * the reads, and with them the record of what it depends on.
30
+ */
31
+ export function ruleCaches(root, door, memo) {
32
+ const scanner = createJavaScriptEngine(door, memo);
33
+ return {
34
+ engine: createCachedEngine(scanner, scanner),
35
+ imports: createImportIndex(door, memo),
36
+ hasFiles: createScopeProbe(door),
37
+ tree: createTreeIndex(root, door),
38
+ };
39
+ }
40
+ /**
41
+ * What decides a rule's result besides the tree: its resolved form, and the run
42
+ * options its execution reads. Two rules with equal identities executed over the
43
+ * same facts give the same result, which is the whole of what reuse relies on.
44
+ *
45
+ * Only the options execution reads. The ones resolution reads - which specs are
46
+ * excluded, which directories skipped - are already in the resolved form, as the
47
+ * spec files it leaves out and the scope it walks, and are held there, where a
48
+ * rule is changed by them, rather than beside it.
49
+ */
50
+ export function identity(assertion, run) {
51
+ const { allowMissingTargets, strictTargets, allowEmptyScope, maxSnippets } = run;
52
+ return JSON.stringify([assertion, allowMissingTargets, strictTargets, allowEmptyScope, maxSnippets], (_key, value) => value instanceof Set ? [...value] : value instanceof Map ? [...value] : value);
53
+ }
54
+ export function createSession(options) {
55
+ const root = path.resolve(options.root);
56
+ const facts = createFactCache(root, options.io ?? nodeIo, options.policy);
57
+ const memo = options.memo ?? createMemo();
58
+ const identify = options.identify ?? identity;
59
+ const cachesFor = options.caches ?? ruleCaches;
60
+ let executed = new Map();
61
+ /** Facts the settings and the specs were read from. */
62
+ let planned = new Set();
63
+ /** Facts whose value changed since the last run. */
64
+ let changed = new Set();
65
+ const used = (key) => planned.has(key) || [...executed.values()].some((entry) => entry.reads.has(key));
66
+ async function execute(assertion, run) {
67
+ const reads = new Set();
68
+ const door = facts.view(reads);
69
+ const result = await executeAssertion(assertion, {
70
+ ...cachesFor(root, door, memo),
71
+ root,
72
+ io: door,
73
+ allowMissingTargets: run.allowMissingTargets ?? false,
74
+ strictTargets: run.strictTargets ?? false,
75
+ allowEmptyScope: run.allowEmptyScope ?? false,
76
+ maxSnippets: run.maxSnippets ?? DEFAULT_MAX_SNIPPETS,
77
+ });
78
+ return { result, reads };
79
+ }
80
+ return {
81
+ get facts() {
82
+ return facts.size;
83
+ },
84
+ async run() {
85
+ const startedAt = performance.now();
86
+ const reads = new Set();
87
+ const door = facts.view(reads);
88
+ const settings = await options.settings(door);
89
+ const plan = planRun(await readSpecs(settings.patterns, root, door, memo), root, settings.run);
90
+ planned = reads;
91
+ const before = executed;
92
+ const dirty = changed;
93
+ changed = new Set();
94
+ const next = new Map();
95
+ const results = [];
96
+ let count = 0;
97
+ const identities = plan.assertions.map((assertion) => identify(assertion, settings.run));
98
+ let cursor = 0;
99
+ const worker = async () => {
100
+ while (cursor < plan.assertions.length) {
101
+ const index = cursor++;
102
+ const key = identities[index];
103
+ const last = before.get(key);
104
+ let entry;
105
+ if (last !== undefined && ![...last.reads].some((read) => dirty.has(read))) {
106
+ entry = last;
107
+ }
108
+ else {
109
+ entry = await execute(plan.assertions[index], settings.run);
110
+ count += 1;
111
+ }
112
+ next.set(key, entry);
113
+ results[index] = entry.result;
114
+ }
115
+ };
116
+ const workers = Math.max(1, Math.min(settings.run.concurrency ?? DEFAULT_CONCURRENCY, plan.assertions.length));
117
+ await Promise.all(Array.from({ length: workers }, worker));
118
+ executed = next;
119
+ memo.sweep();
120
+ const report = reportRun(plan, results, { name: 'javascript', fallbacks: [] }, startedAt);
121
+ return {
122
+ report: { ...report, config: settings.config },
123
+ maxSnippets: settings.run.maxSnippets ?? DEFAULT_MAX_SNIPPETS,
124
+ executed: count,
125
+ };
126
+ },
127
+ async observe(events) {
128
+ const found = await facts.refresh(facts.evict(events), used);
129
+ for (const key of found)
130
+ changed.add(key);
131
+ return found.size;
132
+ },
133
+ forget() {
134
+ facts.evictAll();
135
+ executed = new Map();
136
+ changed = new Set();
137
+ },
138
+ };
139
+ }
140
+ /* ---------------------------------------------------------------- scheduler */
141
+ /** How long a batch waits for quiet after its last event. */
142
+ export const QUIET_MS = 50;
143
+ /** How long a batch waits after its first event, however noisy the tree stays. */
144
+ export const MAX_WAIT_MS = 500;
145
+ /** The exit code of an interrupted command, as a shell reports one: 128 + SIGINT. */
146
+ export const EXIT_INTERRUPTED = 130;
147
+ export const systemClock = {
148
+ now: () => Date.now(),
149
+ setTimeout: (callback, ms) => setTimeout(callback, ms),
150
+ clearTimeout: (handle) => clearTimeout(handle),
151
+ };
152
+ const CLEAR_SCREEN = '\x1b[2J\x1b[3J\x1b[H';
153
+ /** Up one line, and clear it: the status line a quiet batch rewrites. */
154
+ const REWRITE_LINE = '\x1b[1A\x1b[2K';
155
+ function plural(count, one, many) {
156
+ return `${count} ${count === 1 ? one : many}`;
157
+ }
158
+ /** A report stripped of how long things took, to tell a new report from the last. */
159
+ function signature(report) {
160
+ return JSON.stringify(report, (key, value) => (key === 'durationMs' ? undefined : value));
161
+ }
162
+ /** Why a first run cannot become a session, or null when it can. */
163
+ function outsideRoot(report) {
164
+ const outside = report.specFiles.filter((file) => path.isAbsolute(file) || file === '..' || file.startsWith('../'));
165
+ return outside.length === 0
166
+ ? null
167
+ : `--watch watches ${report.root}, and ${outside.length === 1 ? 'this spec is' : 'these specs are'} outside it: ${outside.join(', ')}`;
168
+ }
169
+ /**
170
+ * Runs a session until it is interrupted, and resolves to the exit code.
171
+ *
172
+ * 130 when stopped, since a session is neither a pass nor a failure. 2 when it
173
+ * cannot start or its watcher fails, including when the root disappears.
174
+ */
175
+ export async function runWatch(options) {
176
+ const clock = options.clock ?? systemClock;
177
+ const { session, write } = options;
178
+ let finish = () => { };
179
+ const finished = new Promise((resolve) => {
180
+ finish = resolve;
181
+ });
182
+ let stopped = false;
183
+ // From the start: the first run begins before anything can be queued, and a
184
+ // batch must not begin beside it.
185
+ let running = true;
186
+ let everything = false;
187
+ const pending = [];
188
+ let firstQueuedAt = 0;
189
+ let timer;
190
+ let lastSignature = null;
191
+ const status = (run, changes, startedAt) => [
192
+ `watching ${plural(run.report.summary.specs, 'spec', 'specs')}`,
193
+ changes,
194
+ `${run.executed} of ${plural(run.report.summary.total, 'rule', 'rules')} ${changes === 'first run' ? 'executed' : 're-executed'}`,
195
+ `${Math.round(clock.now() - startedAt)} ms`,
196
+ 'Enter re-runs everything, Ctrl+C stops',
197
+ ].join(' · ');
198
+ const heading = () => (options.isTTY ? CLEAR_SCREEN : `--- ${new Date(clock.now()).toTimeString().slice(0, 8)} ---\n`);
199
+ const render = (run, line) => {
200
+ const current = signature(run.report);
201
+ if (current === lastSignature) {
202
+ write(`${options.isTTY ? REWRITE_LINE : ''}${line}\n`);
203
+ return;
204
+ }
205
+ lastSignature = current;
206
+ const body = run.report.summary.specs === 0
207
+ ? 'spec-guard: no spec files matched, watching for one to appear'
208
+ : formatReport(run.report, options.reporter, run.maxSnippets);
209
+ write(`${heading()}${body}\n\n${line}\n`);
210
+ };
211
+ const stop = (code) => {
212
+ if (stopped)
213
+ return;
214
+ stopped = true;
215
+ clock.clearTimeout(timer);
216
+ watcher?.close();
217
+ unregisterInterrupt();
218
+ unregisterLine?.();
219
+ finish(code);
220
+ };
221
+ // Reached only from the timer `schedule` sets, which it sets only while nothing
222
+ // runs and the session has not stopped, and which stopping clears.
223
+ const batch = async () => {
224
+ running = true;
225
+ const events = pending.splice(0);
226
+ const rerunAll = everything;
227
+ everything = false;
228
+ const startedAt = clock.now();
229
+ try {
230
+ if (rerunAll)
231
+ session.forget();
232
+ else
233
+ await session.observe(events);
234
+ const run = await session.run();
235
+ if (stopped)
236
+ return;
237
+ // A configuration edited to name specs outside the root is refused the
238
+ // way a first run refuses it, without ending a session someone is using.
239
+ const outside = outsideRoot(run.report);
240
+ if (outside !== null)
241
+ throw new Error(outside);
242
+ const changes = rerunAll ? 'every rule, on request' : plural(new Set(events.map((event) => event.filename)).size, 'change', 'changes');
243
+ render(run, status(run, changes, startedAt));
244
+ }
245
+ catch (error) {
246
+ if (stopped)
247
+ return;
248
+ lastSignature = null;
249
+ write(`${heading()}spec-guard: ${error instanceof Error ? error.message : String(error)}\n\nwatching · waiting for a change · Ctrl+C stops\n`);
250
+ }
251
+ finally {
252
+ running = false;
253
+ }
254
+ schedule();
255
+ };
256
+ /** Sets the timer for the next batch, if there is anything for one to do and it may start. */
257
+ const schedule = () => {
258
+ if (stopped || running || (pending.length === 0 && !everything))
259
+ return;
260
+ clock.clearTimeout(timer);
261
+ const waited = clock.now() - firstQueuedAt;
262
+ timer = clock.setTimeout(() => void batch(), everything ? 0 : Math.max(0, Math.min(QUIET_MS, MAX_WAIT_MS - waited)));
263
+ };
264
+ const queue = (event) => {
265
+ if (pending.length === 0)
266
+ firstQueuedAt = clock.now();
267
+ pending.push(event);
268
+ schedule();
269
+ };
270
+ let watcher;
271
+ const unregisterInterrupt = options.onInterrupt(() => stop(EXIT_INTERRUPTED));
272
+ const unregisterLine = options.onLine?.(() => {
273
+ everything = true;
274
+ schedule();
275
+ });
276
+ const cannot = (message) => {
277
+ write(`spec-guard: ${message}\n`);
278
+ stop(2);
279
+ return 2;
280
+ };
281
+ // The watcher first, so nothing that changes during the first run is missed.
282
+ try {
283
+ watcher = options.watch(queue, (error) => {
284
+ if (stopped)
285
+ return;
286
+ write(`spec-guard: the watch on ${options.root} failed: ${describeWatchError(error)}\n`);
287
+ stop(2);
288
+ });
289
+ }
290
+ catch (error) {
291
+ return cannot(`cannot watch ${options.root}: ${describeWatchError(error)}`);
292
+ }
293
+ const startedAt = clock.now();
294
+ try {
295
+ const first = await session.run();
296
+ if (stopped)
297
+ return finished;
298
+ const outside = outsideRoot(first.report);
299
+ if (outside !== null)
300
+ return cannot(outside);
301
+ render(first, status(first, 'first run', startedAt));
302
+ }
303
+ catch (error) {
304
+ if (stopped)
305
+ return finished;
306
+ return cannot(error instanceof Error ? error.message : String(error));
307
+ }
308
+ finally {
309
+ running = false;
310
+ }
311
+ schedule();
312
+ return finished;
313
+ }
314
+ /** A watcher's error, with what to do about the one a person can fix. */
315
+ export function describeWatchError(error) {
316
+ const code = error.code;
317
+ return code === 'ENOSPC'
318
+ ? `${error.message} (the system's limit on watched directories was reached; raise fs.inotify.max_user_watches)`
319
+ : error.message;
320
+ }
321
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}