@ontrails/warden 1.0.0-beta.1 → 1.0.0-beta.11

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 (179) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +174 -0
  3. package/README.md +31 -7
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +23 -9
  6. package/dist/cli.js.map +1 -1
  7. package/dist/index.d.ts +6 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +6 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/rules/ast.d.ts +39 -9
  12. package/dist/rules/ast.d.ts.map +1 -1
  13. package/dist/rules/ast.js +227 -53
  14. package/dist/rules/ast.js.map +1 -1
  15. package/dist/rules/context-no-surface-types.js +1 -1
  16. package/dist/rules/context-no-surface-types.js.map +1 -1
  17. package/dist/rules/follow-declarations.d.ts +13 -0
  18. package/dist/rules/follow-declarations.d.ts.map +1 -0
  19. package/dist/rules/follow-declarations.js +264 -0
  20. package/dist/rules/follow-declarations.js.map +1 -0
  21. package/dist/rules/implementation-returns-result.d.ts +1 -1
  22. package/dist/rules/implementation-returns-result.d.ts.map +1 -1
  23. package/dist/rules/implementation-returns-result.js +52 -6
  24. package/dist/rules/implementation-returns-result.js.map +1 -1
  25. package/dist/rules/index.d.ts +4 -8
  26. package/dist/rules/index.d.ts.map +1 -1
  27. package/dist/rules/index.js +10 -8
  28. package/dist/rules/index.js.map +1 -1
  29. package/dist/rules/no-direct-impl-in-route.d.ts +4 -4
  30. package/dist/rules/no-direct-impl-in-route.d.ts.map +1 -1
  31. package/dist/rules/no-direct-impl-in-route.js +15 -14
  32. package/dist/rules/no-direct-impl-in-route.js.map +1 -1
  33. package/dist/rules/no-direct-implementation-call.d.ts +3 -3
  34. package/dist/rules/no-direct-implementation-call.js +7 -7
  35. package/dist/rules/no-direct-implementation-call.js.map +1 -1
  36. package/dist/rules/no-sync-result-assumption.d.ts +1 -1
  37. package/dist/rules/no-sync-result-assumption.js +5 -5
  38. package/dist/rules/no-sync-result-assumption.js.map +1 -1
  39. package/dist/rules/no-throw-in-detour-target.js +2 -2
  40. package/dist/rules/no-throw-in-detour-target.js.map +1 -1
  41. package/dist/rules/no-throw-in-implementation.d.ts +1 -1
  42. package/dist/rules/no-throw-in-implementation.js +3 -3
  43. package/dist/rules/no-throw-in-implementation.js.map +1 -1
  44. package/dist/rules/service-declarations.d.ts +14 -0
  45. package/dist/rules/service-declarations.d.ts.map +1 -0
  46. package/dist/rules/service-declarations.js +343 -0
  47. package/dist/rules/service-declarations.js.map +1 -0
  48. package/dist/rules/service-exists.d.ts +6 -0
  49. package/dist/rules/service-exists.d.ts.map +1 -0
  50. package/dist/rules/service-exists.js +89 -0
  51. package/dist/rules/service-exists.js.map +1 -0
  52. package/dist/rules/specs.d.ts +1 -1
  53. package/dist/rules/specs.d.ts.map +1 -1
  54. package/dist/rules/specs.js +2 -2
  55. package/dist/rules/specs.js.map +1 -1
  56. package/dist/rules/types.d.ts +2 -0
  57. package/dist/rules/types.d.ts.map +1 -1
  58. package/dist/trails/context-no-surface-types.trail.d.ts +13 -0
  59. package/dist/trails/context-no-surface-types.trail.d.ts.map +1 -0
  60. package/dist/trails/context-no-surface-types.trail.js +21 -0
  61. package/dist/trails/context-no-surface-types.trail.js.map +1 -0
  62. package/dist/trails/follow-declarations.trail.d.ts +13 -0
  63. package/dist/trails/follow-declarations.trail.d.ts.map +1 -0
  64. package/dist/trails/follow-declarations.trail.js +22 -0
  65. package/dist/trails/follow-declarations.trail.js.map +1 -0
  66. package/dist/trails/implementation-returns-result.trail.d.ts +13 -0
  67. package/dist/trails/implementation-returns-result.trail.d.ts.map +1 -0
  68. package/dist/trails/implementation-returns-result.trail.js +20 -0
  69. package/dist/trails/implementation-returns-result.trail.js.map +1 -0
  70. package/dist/trails/index.d.ts +16 -0
  71. package/dist/trails/index.d.ts.map +1 -0
  72. package/dist/trails/index.js +15 -0
  73. package/dist/trails/index.js.map +1 -0
  74. package/dist/trails/no-direct-impl-in-route.trail.d.ts +13 -0
  75. package/dist/trails/no-direct-impl-in-route.trail.d.ts.map +1 -0
  76. package/dist/trails/no-direct-impl-in-route.trail.js +22 -0
  77. package/dist/trails/no-direct-impl-in-route.trail.js.map +1 -0
  78. package/dist/trails/no-direct-implementation-call.trail.d.ts +13 -0
  79. package/dist/trails/no-direct-implementation-call.trail.d.ts.map +1 -0
  80. package/dist/trails/no-direct-implementation-call.trail.js +16 -0
  81. package/dist/trails/no-direct-implementation-call.trail.js.map +1 -0
  82. package/dist/trails/no-sync-result-assumption.trail.d.ts +13 -0
  83. package/dist/trails/no-sync-result-assumption.trail.d.ts.map +1 -0
  84. package/dist/trails/no-sync-result-assumption.trail.js +19 -0
  85. package/dist/trails/no-sync-result-assumption.trail.js.map +1 -0
  86. package/dist/trails/no-throw-in-detour-target.trail.d.ts +15 -0
  87. package/dist/trails/no-throw-in-detour-target.trail.d.ts.map +1 -0
  88. package/dist/trails/no-throw-in-detour-target.trail.js +20 -0
  89. package/dist/trails/no-throw-in-detour-target.trail.js.map +1 -0
  90. package/dist/trails/no-throw-in-implementation.trail.d.ts +13 -0
  91. package/dist/trails/no-throw-in-implementation.trail.d.ts.map +1 -0
  92. package/dist/trails/no-throw-in-implementation.trail.js +20 -0
  93. package/dist/trails/no-throw-in-implementation.trail.js.map +1 -0
  94. package/dist/trails/prefer-schema-inference.trail.d.ts +13 -0
  95. package/dist/trails/prefer-schema-inference.trail.d.ts.map +1 -0
  96. package/dist/trails/prefer-schema-inference.trail.js +21 -0
  97. package/dist/trails/prefer-schema-inference.trail.js.map +1 -0
  98. package/dist/trails/run.d.ts +17 -0
  99. package/dist/trails/run.d.ts.map +1 -0
  100. package/dist/trails/run.js +39 -0
  101. package/dist/trails/run.js.map +1 -0
  102. package/dist/trails/schema.d.ts +53 -0
  103. package/dist/trails/schema.d.ts.map +1 -0
  104. package/dist/trails/schema.js +42 -0
  105. package/dist/trails/schema.js.map +1 -0
  106. package/dist/trails/service-declarations.trail.d.ts +13 -0
  107. package/dist/trails/service-declarations.trail.d.ts.map +1 -0
  108. package/dist/trails/service-declarations.trail.js +25 -0
  109. package/dist/trails/service-declarations.trail.js.map +1 -0
  110. package/dist/trails/service-exists.trail.d.ts +15 -0
  111. package/dist/trails/service-exists.trail.d.ts.map +1 -0
  112. package/dist/trails/service-exists.trail.js +27 -0
  113. package/dist/trails/service-exists.trail.js.map +1 -0
  114. package/dist/trails/topo.d.ts +3 -0
  115. package/dist/trails/topo.d.ts.map +1 -0
  116. package/dist/trails/topo.js +5 -0
  117. package/dist/trails/topo.js.map +1 -0
  118. package/dist/trails/valid-describe-refs.trail.d.ts +15 -0
  119. package/dist/trails/valid-describe-refs.trail.d.ts.map +1 -0
  120. package/dist/trails/valid-describe-refs.trail.js +18 -0
  121. package/dist/trails/valid-describe-refs.trail.js.map +1 -0
  122. package/dist/trails/valid-detour-refs.trail.d.ts +15 -0
  123. package/dist/trails/valid-detour-refs.trail.d.ts.map +1 -0
  124. package/dist/trails/valid-detour-refs.trail.js +24 -0
  125. package/dist/trails/valid-detour-refs.trail.js.map +1 -0
  126. package/dist/trails/wrap-rule.d.ts +29 -0
  127. package/dist/trails/wrap-rule.d.ts.map +1 -0
  128. package/dist/trails/wrap-rule.js +47 -0
  129. package/dist/trails/wrap-rule.js.map +1 -0
  130. package/package.json +5 -4
  131. package/src/__tests__/cli.test.ts +7 -7
  132. package/src/__tests__/drift.test.ts +1 -1
  133. package/src/__tests__/follow-declarations.test.ts +303 -0
  134. package/src/__tests__/implementation-returns-result.test.ts +60 -6
  135. package/src/__tests__/no-direct-implementation-call.test.ts +8 -8
  136. package/src/__tests__/no-sync-result-assumption.test.ts +6 -6
  137. package/src/__tests__/no-throw-in-detour-target.test.ts +6 -6
  138. package/src/__tests__/prefer-schema-inference.test.ts +4 -4
  139. package/src/__tests__/rules.test.ts +59 -20
  140. package/src/__tests__/service-declarations.test.ts +318 -0
  141. package/src/__tests__/service-exists.test.ts +122 -0
  142. package/src/__tests__/trails.test.ts +19 -0
  143. package/src/__tests__/valid-describe-refs.test.ts +4 -4
  144. package/src/__tests__/wrap-rule.test.ts +41 -0
  145. package/src/cli.ts +37 -9
  146. package/src/index.ts +25 -0
  147. package/src/rules/ast.ts +292 -63
  148. package/src/rules/context-no-surface-types.ts +1 -1
  149. package/src/rules/follow-declarations.ts +380 -0
  150. package/src/rules/implementation-returns-result.ts +63 -6
  151. package/src/rules/index.ts +10 -8
  152. package/src/rules/no-direct-impl-in-route.ts +20 -16
  153. package/src/rules/no-direct-implementation-call.ts +7 -7
  154. package/src/rules/no-sync-result-assumption.ts +5 -5
  155. package/src/rules/no-throw-in-detour-target.ts +2 -2
  156. package/src/rules/no-throw-in-implementation.ts +3 -3
  157. package/src/rules/service-declarations.ts +618 -0
  158. package/src/rules/service-exists.ts +177 -0
  159. package/src/rules/specs.ts +5 -5
  160. package/src/rules/types.ts +2 -0
  161. package/src/trails/context-no-surface-types.trail.ts +21 -0
  162. package/src/trails/follow-declarations.trail.ts +22 -0
  163. package/src/trails/implementation-returns-result.trail.ts +20 -0
  164. package/src/trails/index.ts +16 -0
  165. package/src/trails/no-direct-impl-in-route.trail.ts +22 -0
  166. package/src/trails/no-direct-implementation-call.trail.ts +16 -0
  167. package/src/trails/no-sync-result-assumption.trail.ts +19 -0
  168. package/src/trails/no-throw-in-detour-target.trail.ts +20 -0
  169. package/src/trails/no-throw-in-implementation.trail.ts +20 -0
  170. package/src/trails/prefer-schema-inference.trail.ts +21 -0
  171. package/src/trails/run.ts +53 -0
  172. package/src/trails/schema.ts +50 -0
  173. package/src/trails/service-declarations.trail.ts +25 -0
  174. package/src/trails/service-exists.trail.ts +27 -0
  175. package/src/trails/topo.ts +6 -0
  176. package/src/trails/valid-describe-refs.trail.ts +18 -0
  177. package/src/trails/valid-detour-refs.trail.ts +24 -0
  178. package/src/trails/wrap-rule.ts +92 -0
  179. package/tsconfig.tsbuildinfo +1 -1
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Flags direct `.implementation()` calls in application code.
2
+ * Flags direct `.run()` calls in application code.
3
3
  *
4
- * Uses AST parsing to find `.implementation()` call expressions,
4
+ * Uses AST parsing to find `.run()` call expressions,
5
5
  * ignoring occurrences in strings and comments.
6
6
  */
7
- import { isImplementationCall, offsetToLine, parse, walk } from './ast.js';
7
+ import { isRunCall, offsetToLine, parse, walk } from './ast.js';
8
8
  import { isFrameworkInternalFile, isTestFile } from './scan.js';
9
9
  /**
10
- * Flags direct `.implementation()` calls in application code.
10
+ * Flags direct `.run()` calls in application code.
11
11
  */
12
12
  export const noDirectImplementationCall = {
13
13
  check(sourceCode, filePath) {
@@ -20,11 +20,11 @@ export const noDirectImplementationCall = {
20
20
  }
21
21
  const diagnostics = [];
22
22
  walk(ast, (node) => {
23
- if (isImplementationCall(node)) {
23
+ if (isRunCall(node)) {
24
24
  diagnostics.push({
25
25
  filePath,
26
26
  line: offsetToLine(sourceCode, node.start),
27
- message: 'Use ctx.follow("trailId", input) instead of direct .implementation() calls. Direct implementation access bypasses validation, tracing, and layers.',
27
+ message: 'Use ctx.follow("trailId", input) instead of direct .run() calls. Direct implementation access bypasses validation, tracing, and layers.',
28
28
  rule: 'no-direct-implementation-call',
29
29
  severity: 'warn',
30
30
  });
@@ -32,7 +32,7 @@ export const noDirectImplementationCall = {
32
32
  });
33
33
  return diagnostics;
34
34
  },
35
- description: 'Disallow direct .implementation() calls in application code. Use ctx.follow() instead.',
35
+ description: 'Disallow direct .run() calls in application code. Use ctx.follow() instead.',
36
36
  name: 'no-direct-implementation-call',
37
37
  severity: 'warn',
38
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"no-direct-implementation-call.js","sourceRoot":"","sources":["../../src/rules/no-direct-implementation-call.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGhE;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAe;IACpD,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAuB,EAAE,CAAC;QAE3C,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACjB,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC;oBACf,QAAQ;oBACR,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;oBAC1C,OAAO,EACL,oJAAoJ;oBACtJ,IAAI,EAAE,+BAA+B;oBACrC,QAAQ,EAAE,MAAM;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,WAAW,EACT,wFAAwF;IAC1F,IAAI,EAAE,+BAA+B;IACrC,QAAQ,EAAE,MAAM;CACjB,CAAC"}
1
+ {"version":3,"file":"no-direct-implementation-call.js","sourceRoot":"","sources":["../../src/rules/no-direct-implementation-call.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGhE;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAe;IACpD,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAuB,EAAE,CAAC;QAE3C,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACjB,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,WAAW,CAAC,IAAI,CAAC;oBACf,QAAQ;oBACR,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;oBAC1C,OAAO,EACL,yIAAyI;oBAC3I,IAAI,EAAE,+BAA+B;oBACrC,QAAQ,EAAE,MAAM;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,WAAW,EACT,6EAA6E;IAC/E,IAAI,EAAE,+BAA+B;IACrC,QAAQ,EAAE,MAAM;CACjB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { WardenRule } from './types.js';
2
2
  /**
3
- * Flags code that assumes `.implementation()` returns a synchronous result.
3
+ * Flags code that assumes `.run()` returns a synchronous result.
4
4
  */
5
5
  export declare const noSyncResultAssumption: WardenRule;
6
6
  //# sourceMappingURL=no-sync-result-assumption.d.ts.map
@@ -1,8 +1,8 @@
1
1
  import { isFrameworkInternalFile, isTestFile, stripQuotedContent, } from './scan.js';
2
2
  const RESULT_ACCESS_PATTERN = /\.(?:isOk|isErr|match|map)\s*\(|\.(?:value|error)\b/;
3
- const IMPLEMENTATION_CALL_PATTERN = /\.implementation\s*\(/;
3
+ const IMPLEMENTATION_CALL_PATTERN = /\.run\s*\(/;
4
4
  const isAwaitedImplementationCall = (line) => {
5
- const callIndex = line.indexOf('.implementation(');
5
+ const callIndex = line.indexOf('.run(');
6
6
  if (callIndex === -1) {
7
7
  return false;
8
8
  }
@@ -17,7 +17,7 @@ const isPendingUse = (line, variableName) => {
17
17
  const pendingPattern = new RegExp(`\\b${escaped}\\s*(?:\\.(?:isOk|isErr|match|map)\\s*\\(|\\.(?:value|error)\\b)`);
18
18
  return pendingPattern.test(line);
19
19
  };
20
- const MISSING_AWAIT_MESSAGE = 'Missing await: .implementation() returns Promise<Result> after normalization. Use `const result = await trail.implementation(input, ctx)`.';
20
+ const MISSING_AWAIT_MESSAGE = 'Missing await: .run() returns Promise<Result> after normalization. Use `const result = await trail.run(input, ctx)`.';
21
21
  const createMissingAwaitDiagnostic = (filePath, line) => ({
22
22
  filePath,
23
23
  line,
@@ -82,7 +82,7 @@ const scanSourceCode = (sourceCode, filePath) => {
82
82
  return diagnostics;
83
83
  };
84
84
  /**
85
- * Flags code that assumes `.implementation()` returns a synchronous result.
85
+ * Flags code that assumes `.run()` returns a synchronous result.
86
86
  */
87
87
  export const noSyncResultAssumption = {
88
88
  check(sourceCode, filePath) {
@@ -91,7 +91,7 @@ export const noSyncResultAssumption = {
91
91
  }
92
92
  return scanSourceCode(stripQuotedContent(sourceCode), filePath);
93
93
  },
94
- description: 'Disallow treating .implementation() as synchronous after normalization. Always await the returned Promise<Result>.',
94
+ description: 'Disallow treating .run() as synchronous after normalization. Always await the returned Promise<Result>.',
95
95
  name: 'no-sync-result-assumption',
96
96
  severity: 'error',
97
97
  };
@@ -1 +1 @@
1
- {"version":3,"file":"no-sync-result-assumption.js","sourceRoot":"","sources":["../../src/rules/no-sync-result-assumption.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-sync-result-assumption.js","sourceRoot":"","sources":["../../src/rules/no-sync-result-assumption.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Uses AST parsing for accurate detection of detour target IDs and
5
5
  * throw statements within those trail implementations.
6
6
  */
7
- import { findImplementationBodies, findTrailDefinitions, offsetToLine, parse, walk, } from './ast.js';
7
+ import { findRunBodies, findTrailDefinitions, offsetToLine, parse, walk, } from './ast.js';
8
8
  import { isTestFile } from './scan.js';
9
9
  /** Collect all trail IDs referenced as detour targets in the AST. */
10
10
  const collectDetourTargets = (ast) => {
@@ -33,7 +33,7 @@ const findThrowsInTargetedTrails = (ast, sourceCode, filePath, detourTargets) =>
33
33
  if (!detourTargets.has(def.id)) {
34
34
  continue;
35
35
  }
36
- for (const body of findImplementationBodies(def.config)) {
36
+ for (const body of findRunBodies(def.config)) {
37
37
  walk(body, (node) => {
38
38
  if (node.type === 'ThrowStatement') {
39
39
  diagnostics.push({
@@ -1 +1 @@
1
- {"version":3,"file":"no-throw-in-detour-target.js","sourceRoot":"","sources":["../../src/rules/no-throw-in-detour-target.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-throw-in-detour-target.js","sourceRoot":"","sources":["../../src/rules/no-throw-in-detour-target.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Finds `throw` statements inside `implementation:` function bodies.
2
+ * Finds `throw` statements inside `run:` function bodies.
3
3
  *
4
4
  * Uses AST parsing for accurate detection — no false positives from
5
5
  * throw in comments, strings, or nested non-implementation functions.
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Finds `throw` statements inside `implementation:` function bodies.
2
+ * Finds `throw` statements inside `run:` function bodies.
3
3
  *
4
4
  * Uses AST parsing for accurate detection — no false positives from
5
5
  * throw in comments, strings, or nested non-implementation functions.
6
6
  */
7
- import { findImplementationBodies, offsetToLine, parse, walk } from './ast.js';
7
+ import { findRunBodies, offsetToLine, parse, walk } from './ast.js';
8
8
  export const noThrowInImplementation = {
9
9
  check(sourceCode, filePath) {
10
10
  const ast = parse(filePath, sourceCode);
@@ -12,7 +12,7 @@ export const noThrowInImplementation = {
12
12
  return [];
13
13
  }
14
14
  const diagnostics = [];
15
- for (const body of findImplementationBodies(ast)) {
15
+ for (const body of findRunBodies(ast)) {
16
16
  walk(body, (node) => {
17
17
  if (node.type === 'ThrowStatement') {
18
18
  diagnostics.push({
@@ -1 +1 @@
1
- {"version":3,"file":"no-throw-in-implementation.js","sourceRoot":"","sources":["../../src/rules/no-throw-in-implementation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAG/E,MAAM,CAAC,MAAM,uBAAuB,GAAe;IACjD,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAuB,EAAE,CAAC;QAE3C,KAAK,MAAM,IAAI,IAAI,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClB,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACnC,WAAW,CAAC,IAAI,CAAC;wBACf,QAAQ;wBACR,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;wBAC1C,OAAO,EACL,+DAA+D;wBACjE,IAAI,EAAE,4BAA4B;wBAClC,QAAQ,EAAE,OAAO;qBAClB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,WAAW,EACT,+FAA+F;IACjG,IAAI,EAAE,4BAA4B;IAClC,QAAQ,EAAE,OAAO;CAClB,CAAC"}
1
+ {"version":3,"file":"no-throw-in-implementation.js","sourceRoot":"","sources":["../../src/rules/no-throw-in-implementation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGpE,MAAM,CAAC,MAAM,uBAAuB,GAAe;IACjD,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAuB,EAAE,CAAC;QAE3C,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClB,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACnC,WAAW,CAAC,IAAI,CAAC;wBACf,QAAQ;wBACR,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;wBAC1C,OAAO,EACL,+DAA+D;wBACjE,IAAI,EAAE,4BAA4B;wBAClC,QAAQ,EAAE,OAAO;qBAClB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,WAAW,EACT,+FAA+F;IACjG,IAAI,EAAE,4BAA4B;IAClC,QAAQ,EAAE,OAAO;CAClB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Validates that service access matches the declared `services` array.
3
+ *
4
+ * Statically analyzes trail run functions to find `db.from(ctx)` and
5
+ * `ctx.service('db.main')` calls and compares them against the declared
6
+ * `services: [...]` array in the trail config. Reports errors for undeclared
7
+ * access and warnings for unused declarations.
8
+ */
9
+ import type { WardenRule } from './types.js';
10
+ /**
11
+ * Validates that service access aligns with declared `services` arrays.
12
+ */
13
+ export declare const serviceDeclarations: WardenRule;
14
+ //# sourceMappingURL=service-declarations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-declarations.d.ts","sourceRoot":"","sources":["../../src/rules/service-declarations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAgjB/D;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UA8BjC,CAAC"}
@@ -0,0 +1,343 @@
1
+ /**
2
+ * Validates that service access matches the declared `services` array.
3
+ *
4
+ * Statically analyzes trail run functions to find `db.from(ctx)` and
5
+ * `ctx.service('db.main')` calls and compares them against the declared
6
+ * `services: [...]` array in the trail config. Reports errors for undeclared
7
+ * access and warnings for unused declarations.
8
+ */
9
+ import { collectNamedServiceIds, extractFirstStringArg, findConfigProperty, findRunBodies, findTrailDefinitions, getStringValue, identifierName, isStringLiteral, offsetToLine, parse, walkScope, } from './ast.js';
10
+ import { isTestFile } from './scan.js';
11
+ const MEMBER_TYPES = new Set(['StaticMemberExpression', 'MemberExpression']);
12
+ /** Extract object and property Identifier names from a MemberExpression. */
13
+ const extractMemberPair = (callee) => {
14
+ if (!MEMBER_TYPES.has(callee.type)) {
15
+ return null;
16
+ }
17
+ const objName = identifierName(callee.object);
18
+ const propName = identifierName(callee.property);
19
+ return objName && propName ? { objName, propName } : null;
20
+ };
21
+ /** Check if a node is an inline `service('id', ...)` call. */
22
+ const isInlineServiceCall = (node) => {
23
+ if (node.type !== 'CallExpression') {
24
+ return false;
25
+ }
26
+ return (identifierName(node.callee) ===
27
+ 'service');
28
+ };
29
+ /** Get `services` array elements from a trail config. */
30
+ const getServiceElements = (config) => {
31
+ const servicesProp = findConfigProperty(config, 'services');
32
+ if (!servicesProp) {
33
+ return [];
34
+ }
35
+ const arrayNode = servicesProp.value;
36
+ if (!arrayNode || arrayNode.type !== 'ArrayExpression') {
37
+ return [];
38
+ }
39
+ const elements = arrayNode['elements'];
40
+ return elements ?? [];
41
+ };
42
+ /** Extract one declared service from a `services` array element. */
43
+ const extractDeclaredService = (element, serviceIdsByName) => {
44
+ if (element.type === 'Identifier') {
45
+ const name = identifierName(element);
46
+ return {
47
+ id: name ? (serviceIdsByName.get(name) ?? null) : null,
48
+ name,
49
+ };
50
+ }
51
+ if (isStringLiteral(element)) {
52
+ return { id: getStringValue(element), name: null };
53
+ }
54
+ if (isInlineServiceCall(element)) {
55
+ return { id: extractFirstStringArg(element), name: null };
56
+ }
57
+ return null;
58
+ };
59
+ /** Extract declared services from a trail config's `services` array. */
60
+ const extractDeclaredServices = (config, serviceIdsByName) => getServiceElements(config).flatMap((element) => {
61
+ const service = extractDeclaredService(element, serviceIdsByName);
62
+ return service ? [service] : [];
63
+ });
64
+ // ---------------------------------------------------------------------------
65
+ // Called service extraction
66
+ // ---------------------------------------------------------------------------
67
+ /** Extract the second parameter name from a run function node. */
68
+ const extractContextParamName = (runBody) => {
69
+ const params = runBody['params'];
70
+ if (!params || params.length < 2) {
71
+ return null;
72
+ }
73
+ return identifierName(params[1]);
74
+ };
75
+ /** Build the set of context parameter names to match against. */
76
+ const buildCtxNames = (body) => {
77
+ const ctxNames = new Set(['ctx', 'context']);
78
+ const paramName = extractContextParamName(body);
79
+ if (paramName) {
80
+ ctxNames.add(paramName);
81
+ }
82
+ return ctxNames;
83
+ };
84
+ /** Extract a CallExpression callee, or null. */
85
+ const extractCallCallee = (node) => {
86
+ if (node.type !== 'CallExpression') {
87
+ return null;
88
+ }
89
+ return (node.callee ??
90
+ null);
91
+ };
92
+ /** Extract the first identifier argument from a CallExpression. */
93
+ const extractFirstIdentifierArg = (node) => {
94
+ const args = node['arguments'];
95
+ const [firstArg] = args ?? [];
96
+ return identifierName(firstArg);
97
+ };
98
+ const extractCallInfo = (node) => {
99
+ const callee = extractCallCallee(node);
100
+ return callee
101
+ ? {
102
+ callee,
103
+ firstArgName: extractFirstIdentifierArg(node),
104
+ }
105
+ : null;
106
+ };
107
+ /** Extract `db.from(ctx)` object names. */
108
+ const extractFromCallName = (node, ctxNames) => {
109
+ const call = extractCallInfo(node);
110
+ const pair = call ? extractMemberPair(call.callee) : null;
111
+ return pair &&
112
+ pair.propName === 'from' &&
113
+ call?.firstArgName &&
114
+ ctxNames.has(call.firstArgName)
115
+ ? pair.objName
116
+ : null;
117
+ };
118
+ /** Check if a callee is a member-style `ctx.service(...)` call. */
119
+ const isMemberServiceCall = (callee, ctxNames) => {
120
+ const pair = extractMemberPair(callee);
121
+ return !!pair && ctxNames.has(pair.objName) && pair.propName === 'service';
122
+ };
123
+ /** Extract `ctx.service(db)` and destructured `service(db)` lookup names. */
124
+ const extractLookupServiceName = (node, ctxNames, serviceAliases) => {
125
+ const callee = extractCallCallee(node);
126
+ if (!callee) {
127
+ return null;
128
+ }
129
+ if (isMemberServiceCall(callee, ctxNames)) {
130
+ return extractFirstIdentifierArg(node);
131
+ }
132
+ if (serviceAliases.has(identifierName(callee) ?? '')) {
133
+ return extractFirstIdentifierArg(node);
134
+ }
135
+ return null;
136
+ };
137
+ /** Extract `ctx.service('id')` and destructured `service('id')` lookup IDs. */
138
+ const extractLookupServiceId = (node, ctxNames, serviceAliases) => {
139
+ const callee = extractCallCallee(node);
140
+ if (!callee) {
141
+ return null;
142
+ }
143
+ if (isMemberServiceCall(callee, ctxNames)) {
144
+ return extractFirstStringArg(node);
145
+ }
146
+ const calleeName = identifierName(callee);
147
+ const args = node['arguments'];
148
+ if (calleeName && serviceAliases.has(calleeName) && args?.length === 1) {
149
+ return extractFirstStringArg(node);
150
+ }
151
+ return null;
152
+ };
153
+ /** Collect local aliases for the service accessor (e.g. `const { service } = ctx`). */
154
+ const collectServiceAliases = (body, ctxNames) => {
155
+ const aliases = new Set();
156
+ const extractAliasNames = (pattern) => {
157
+ if (pattern?.type !== 'ObjectPattern') {
158
+ return [];
159
+ }
160
+ const properties = pattern['properties'];
161
+ return (properties ?? []).flatMap((property) => {
162
+ if (property.type !== 'Property') {
163
+ return [];
164
+ }
165
+ const keyName = identifierName(property.key);
166
+ if (keyName !== 'service') {
167
+ return [];
168
+ }
169
+ const alias = identifierName(property.value) ??
170
+ keyName;
171
+ return [alias];
172
+ });
173
+ };
174
+ walkScope(body, (node) => {
175
+ if (node.type !== 'VariableDeclarator') {
176
+ return;
177
+ }
178
+ const { id, init } = node;
179
+ const initName = identifierName(init);
180
+ if (!initName || !ctxNames.has(initName)) {
181
+ return;
182
+ }
183
+ for (const alias of extractAliasNames(id)) {
184
+ aliases.add(alias);
185
+ }
186
+ });
187
+ return aliases;
188
+ };
189
+ /** Walk run bodies and collect service access that can be resolved statically. */
190
+ const extractCalledServices = (config) => {
191
+ const fromNames = new Set();
192
+ const lookupIds = new Set();
193
+ const lookupNames = new Set();
194
+ for (const body of findRunBodies(config)) {
195
+ const ctxNames = buildCtxNames(body);
196
+ const serviceAliases = collectServiceAliases(body, ctxNames);
197
+ walkScope(body, (node) => {
198
+ const fromName = extractFromCallName(node, ctxNames);
199
+ if (fromName) {
200
+ fromNames.add(fromName);
201
+ }
202
+ const lookupId = extractLookupServiceId(node, ctxNames, serviceAliases);
203
+ if (lookupId) {
204
+ lookupIds.add(lookupId);
205
+ }
206
+ const lookupName = extractLookupServiceName(node, ctxNames, serviceAliases);
207
+ if (lookupName) {
208
+ lookupNames.add(lookupName);
209
+ }
210
+ });
211
+ }
212
+ return { fromNames, lookupIds, lookupNames };
213
+ };
214
+ // ---------------------------------------------------------------------------
215
+ // Diagnostics
216
+ // ---------------------------------------------------------------------------
217
+ const renderDeclaredService = (service) => service.name ?? service.id ?? '<unknown>';
218
+ const buildUndeclaredFromDiagnostic = (trailId, serviceName, filePath, line) => ({
219
+ filePath,
220
+ line,
221
+ message: `Trail "${trailId}": ${serviceName}.from(ctx) called but '${serviceName}' is not declared in services`,
222
+ rule: 'service-declarations',
223
+ severity: 'error',
224
+ });
225
+ const buildUndeclaredLookupDiagnostic = (trailId, serviceId, filePath, line) => ({
226
+ filePath,
227
+ line,
228
+ message: `Trail "${trailId}": ctx.service('${serviceId}') called but '${serviceId}' is not declared in services`,
229
+ rule: 'service-declarations',
230
+ severity: 'error',
231
+ });
232
+ const buildUndeclaredLookupNameDiagnostic = (trailId, serviceName, filePath, line) => ({
233
+ filePath,
234
+ line,
235
+ message: `Trail "${trailId}": ctx.service(${serviceName}) called but '${serviceName}' is not declared in services`,
236
+ rule: 'service-declarations',
237
+ severity: 'error',
238
+ });
239
+ const buildUnusedDiagnostic = (trailId, declaredService, filePath, line) => ({
240
+ filePath,
241
+ line,
242
+ message: `Trail "${trailId}": '${renderDeclaredService(declaredService)}' declared in services but never used`,
243
+ rule: 'service-declarations',
244
+ severity: 'warn',
245
+ });
246
+ // ---------------------------------------------------------------------------
247
+ // Comparison
248
+ // ---------------------------------------------------------------------------
249
+ const serviceWasUsed = (declaredService, calledServices) => {
250
+ if (declaredService.name &&
251
+ (calledServices.fromNames.has(declaredService.name) ||
252
+ calledServices.lookupNames.has(declaredService.name))) {
253
+ return true;
254
+ }
255
+ if (declaredService.id && calledServices.lookupIds.has(declaredService.id)) {
256
+ return true;
257
+ }
258
+ return false;
259
+ };
260
+ const buildDeclaredNames = (declaredServices) => new Set(declaredServices.flatMap((service) => (service.name ? [service.name] : [])));
261
+ const buildDeclaredIds = (declaredServices) => new Set(declaredServices.flatMap((service) => (service.id ? [service.id] : [])));
262
+ const reportUndeclaredFromCalls = (trailId, filePath, line, calledServices, declaredNames, diagnostics) => {
263
+ for (const serviceName of calledServices.fromNames) {
264
+ if (!declaredNames.has(serviceName)) {
265
+ diagnostics.push(buildUndeclaredFromDiagnostic(trailId, serviceName, filePath, line));
266
+ }
267
+ }
268
+ };
269
+ const reportUndeclaredLookupCalls = (trailId, filePath, line, calledServices, declaredIds, declaredNames, diagnostics) => {
270
+ for (const serviceName of calledServices.lookupNames) {
271
+ // Name-based lookup checks remain reliable even when an imported service ID
272
+ // cannot be resolved locally.
273
+ if (!declaredNames.has(serviceName)) {
274
+ diagnostics.push(buildUndeclaredLookupNameDiagnostic(trailId, serviceName, filePath, line));
275
+ }
276
+ }
277
+ for (const serviceId of calledServices.lookupIds) {
278
+ if (!declaredIds.has(serviceId)) {
279
+ diagnostics.push(buildUndeclaredLookupDiagnostic(trailId, serviceId, filePath, line));
280
+ }
281
+ }
282
+ };
283
+ const reportUnusedDeclarations = (trailId, filePath, line, declaredServices, calledServices, diagnostics) => {
284
+ for (const declaredService of declaredServices) {
285
+ if (serviceWasUsed(declaredService, calledServices)) {
286
+ continue;
287
+ }
288
+ if (declaredService.name && declaredService.id === null) {
289
+ continue;
290
+ }
291
+ diagnostics.push(buildUnusedDiagnostic(trailId, declaredService, filePath, line));
292
+ }
293
+ };
294
+ const hasNoServiceActivity = (declaredServices, calledServices) => declaredServices.length === 0 &&
295
+ calledServices.fromNames.size === 0 &&
296
+ calledServices.lookupIds.size === 0 &&
297
+ calledServices.lookupNames.size === 0;
298
+ const analyzeTrailServices = (def, sourceCode, serviceIdsByName) => {
299
+ const declaredServices = extractDeclaredServices(def.config, serviceIdsByName);
300
+ return {
301
+ calledServices: extractCalledServices(def.config),
302
+ declaredIds: buildDeclaredIds(declaredServices),
303
+ declaredNames: buildDeclaredNames(declaredServices),
304
+ declaredServices,
305
+ line: offsetToLine(sourceCode, def.start),
306
+ };
307
+ };
308
+ const checkTrailDefinition = (def, filePath, sourceCode, serviceIdsByName, diagnostics) => {
309
+ const { calledServices, declaredIds, declaredNames, declaredServices, line } = analyzeTrailServices(def, sourceCode, serviceIdsByName);
310
+ if (hasNoServiceActivity(declaredServices, calledServices)) {
311
+ return;
312
+ }
313
+ reportUndeclaredFromCalls(def.id, filePath, line, calledServices, declaredNames, diagnostics);
314
+ reportUndeclaredLookupCalls(def.id, filePath, line, calledServices, declaredIds, declaredNames, diagnostics);
315
+ reportUnusedDeclarations(def.id, filePath, line, declaredServices, calledServices, diagnostics);
316
+ };
317
+ // ---------------------------------------------------------------------------
318
+ // Rule
319
+ // ---------------------------------------------------------------------------
320
+ /**
321
+ * Validates that service access aligns with declared `services` arrays.
322
+ */
323
+ export const serviceDeclarations = {
324
+ check(sourceCode, filePath) {
325
+ if (isTestFile(filePath)) {
326
+ return [];
327
+ }
328
+ const ast = parse(filePath, sourceCode);
329
+ if (!ast) {
330
+ return [];
331
+ }
332
+ const diagnostics = [];
333
+ const serviceIdsByName = collectNamedServiceIds(ast);
334
+ for (const def of findTrailDefinitions(ast)) {
335
+ checkTrailDefinition(def, filePath, sourceCode, serviceIdsByName, diagnostics);
336
+ }
337
+ return diagnostics;
338
+ },
339
+ description: 'Ensure service.from(ctx) and ctx.service() calls match the declared services array in trail definitions.',
340
+ name: 'service-declarations',
341
+ severity: 'error',
342
+ };
343
+ //# sourceMappingURL=service-declarations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-declarations.js","sourceRoot":"","sources":["../../src/rules/service-declarations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ProjectAwareWardenRule } from './types.js';
2
+ /**
3
+ * Checks that all declared services resolve to known service definitions.
4
+ */
5
+ export declare const serviceExists: ProjectAwareWardenRule;
6
+ //# sourceMappingURL=service-exists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-exists.d.ts","sourceRoot":"","sources":["../../src/rules/service-exists.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AA4HpB;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,sBA+B3B,CAAC"}