@ontrails/warden 1.0.0-beta.4 → 1.0.0-beta.42

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 (279) hide show
  1. package/CHANGELOG.md +837 -13
  2. package/README.md +133 -26
  3. package/bin/warden.ts +51 -0
  4. package/package.json +27 -6
  5. package/src/adapter-check.ts +136 -0
  6. package/src/cli.ts +1570 -105
  7. package/src/command.ts +986 -0
  8. package/src/config.ts +193 -0
  9. package/src/draft.ts +22 -0
  10. package/src/drift.ts +233 -23
  11. package/src/fix.ts +126 -0
  12. package/src/formatters.ts +78 -13
  13. package/src/guide.ts +245 -0
  14. package/src/index.ts +247 -15
  15. package/src/project-context.ts +446 -0
  16. package/src/project-rules.ts +290 -0
  17. package/src/resolve.ts +531 -0
  18. package/src/rules/activation-orphan.ts +97 -0
  19. package/src/rules/captured-kernel.ts +375 -0
  20. package/src/rules/circular-refs.ts +150 -0
  21. package/src/rules/cli-command-route-coherence.ts +177 -0
  22. package/src/rules/composes-declarations.ts +839 -0
  23. package/src/rules/context-no-surface-types.ts +79 -15
  24. package/src/rules/dead-internal-trail.ts +161 -0
  25. package/src/rules/dead-public-trail.ts +258 -0
  26. package/src/rules/draft-file-marking.ts +155 -0
  27. package/src/rules/draft-visible-debt.ts +82 -0
  28. package/src/rules/duplicate-exported-symbol.ts +211 -0
  29. package/src/rules/duplicate-public-contract.ts +137 -0
  30. package/src/rules/entity-exists.ts +254 -0
  31. package/src/rules/entity-ids.ts +15 -0
  32. package/src/rules/error-mapping-completeness.ts +290 -0
  33. package/src/rules/example-valid.ts +395 -0
  34. package/src/rules/fires-declarations.ts +740 -0
  35. package/src/rules/governed-symbol-residue.ts +438 -0
  36. package/src/rules/implementation-returns-result.ts +1409 -166
  37. package/src/rules/incomplete-accessor-for-standard-op.ts +272 -0
  38. package/src/rules/incomplete-crud.ts +583 -0
  39. package/src/rules/index.ts +277 -10
  40. package/src/rules/intent-propagation.ts +125 -0
  41. package/src/rules/layer-field-name-drift.ts +102 -0
  42. package/src/rules/library-projection-coherence.ts +100 -0
  43. package/src/rules/metadata.ts +871 -0
  44. package/src/rules/missing-reconcile.ts +97 -0
  45. package/src/rules/missing-visibility.ts +111 -0
  46. package/src/rules/no-destructured-compose.ts +196 -0
  47. package/src/rules/no-dev-permit-in-source.ts +99 -0
  48. package/src/rules/no-direct-implementation-call.ts +12 -7
  49. package/src/rules/no-legacy-cli-alias-export.ts +247 -0
  50. package/src/rules/no-legacy-layer-imports.ts +211 -0
  51. package/src/rules/no-native-error-result.ts +118 -0
  52. package/src/rules/no-redundant-result-error-wrap.ts +384 -0
  53. package/src/rules/no-retired-cross-vocabulary.ts +204 -0
  54. package/src/rules/no-sync-result-assumption.ts +1141 -98
  55. package/src/rules/no-throw-in-detour-recover.ts +225 -0
  56. package/src/rules/no-throw-in-implementation.ts +15 -8
  57. package/src/rules/no-top-level-surface.ts +371 -0
  58. package/src/rules/on-references-exist.ts +194 -0
  59. package/src/rules/orphaned-signal.ts +149 -0
  60. package/src/rules/owner-projection-parity.ts +143 -0
  61. package/src/rules/permit-governance.ts +25 -0
  62. package/src/rules/public-export-example-coverage.ts +573 -0
  63. package/src/rules/public-internal-deep-imports.ts +456 -0
  64. package/src/rules/public-output-schema.ts +29 -0
  65. package/src/rules/public-union-output-discriminants.ts +150 -0
  66. package/src/rules/read-intent-fires.ts +188 -0
  67. package/src/rules/reference-exists.ts +97 -0
  68. package/src/rules/registry-names.ts +167 -0
  69. package/src/rules/resolved-import-boundary.ts +146 -0
  70. package/src/rules/resource-declarations.ts +697 -0
  71. package/src/rules/resource-exists.ts +181 -0
  72. package/src/rules/resource-id-grammar.ts +65 -0
  73. package/src/rules/resource-mock-coverage.ts +115 -0
  74. package/src/rules/retired-vocabulary.ts +633 -0
  75. package/src/rules/scan.ts +38 -25
  76. package/src/rules/scheduled-destroy-intent.ts +44 -0
  77. package/src/rules/signal-graph-coaching.ts +220 -0
  78. package/src/rules/source/composition.ts +165 -0
  79. package/src/rules/source/drafts.ts +164 -0
  80. package/src/rules/source/entities.ts +618 -0
  81. package/src/rules/source/pragmas.ts +45 -0
  82. package/src/rules/source/resources.ts +64 -0
  83. package/src/rules/source/signals.ts +397 -0
  84. package/src/rules/source/stores.ts +310 -0
  85. package/src/rules/specs.ts +9 -5
  86. package/src/rules/static-resource-accessor-preference.ts +653 -0
  87. package/src/rules/surface-overlay-coherence.ts +262 -0
  88. package/src/rules/surface-trailhead-coherence.ts +366 -0
  89. package/src/rules/trail-fork-coaching.ts +625 -0
  90. package/src/rules/trail-versioning-source.ts +1076 -0
  91. package/src/rules/trail-versioning-topo.ts +172 -0
  92. package/src/rules/trailhead-override-divergence.ts +356 -0
  93. package/src/rules/types.ts +354 -8
  94. package/src/rules/unmaterialized-activation-source.ts +85 -0
  95. package/src/rules/unreachable-detour-shadowing.ts +339 -0
  96. package/src/rules/valid-describe-refs.ts +162 -32
  97. package/src/rules/valid-detour-contract.ts +78 -0
  98. package/src/rules/warden-export-symmetry.ts +540 -0
  99. package/src/rules/warden-rules-use-ast.ts +1109 -0
  100. package/src/rules/webhook-route-collision.ts +306 -0
  101. package/src/trails/activation-orphan.trail.ts +84 -0
  102. package/src/trails/captured-kernel.trail.ts +108 -0
  103. package/src/trails/circular-refs.trail.ts +29 -0
  104. package/src/trails/cli-command-route-coherence.trail.ts +47 -0
  105. package/src/trails/composes-declarations.trail.ts +22 -0
  106. package/src/trails/context-no-surface-types.trail.ts +21 -0
  107. package/src/trails/dead-internal-trail.trail.ts +26 -0
  108. package/src/trails/dead-public-trail.trail.ts +31 -0
  109. package/src/trails/deprecation-without-guidance.trail.ts +21 -0
  110. package/src/trails/draft-file-marking.trail.ts +16 -0
  111. package/src/trails/draft-visible-debt.trail.ts +16 -0
  112. package/src/trails/duplicate-exported-symbol.trail.ts +48 -0
  113. package/src/trails/duplicate-public-contract.trail.ts +47 -0
  114. package/src/trails/entity-exists.trail.ts +21 -0
  115. package/src/trails/error-mapping-completeness.trail.ts +30 -0
  116. package/src/trails/example-valid.trail.ts +25 -0
  117. package/src/trails/fires-declarations.trail.ts +23 -0
  118. package/src/trails/fork-without-preserved-implementation.trail.ts +31 -0
  119. package/src/trails/governed-symbol-residue.trail.ts +24 -0
  120. package/src/trails/implementation-returns-result.trail.ts +20 -0
  121. package/src/trails/incomplete-accessor-for-standard-op.trail.ts +76 -0
  122. package/src/trails/incomplete-crud.trail.ts +39 -0
  123. package/src/trails/index.ts +89 -0
  124. package/src/trails/intent-propagation.trail.ts +30 -0
  125. package/src/trails/layer-field-name-drift.trail.ts +39 -0
  126. package/src/trails/library-projection-coherence.trail.ts +43 -0
  127. package/src/trails/marker-schema-unsupported.trail.ts +23 -0
  128. package/src/trails/missing-reconcile.trail.ts +33 -0
  129. package/src/trails/missing-visibility.trail.ts +22 -0
  130. package/src/trails/no-destructured-compose.trail.ts +44 -0
  131. package/src/trails/no-dev-permit-in-source.trail.ts +16 -0
  132. package/src/trails/no-direct-implementation-call.trail.ts +16 -0
  133. package/src/trails/no-legacy-cli-alias-export.trail.ts +41 -0
  134. package/src/trails/no-legacy-layer-imports.trail.ts +41 -0
  135. package/src/trails/no-native-error-result.trail.ts +18 -0
  136. package/src/trails/no-redundant-result-error-wrap.trail.ts +55 -0
  137. package/src/trails/no-retired-cross-vocabulary.trail.ts +42 -0
  138. package/src/trails/no-sync-result-assumption.trail.ts +19 -0
  139. package/src/trails/no-throw-in-detour-recover.trail.ts +24 -0
  140. package/src/trails/no-throw-in-implementation.trail.ts +20 -0
  141. package/src/trails/no-top-level-surface.trail.ts +43 -0
  142. package/src/trails/on-references-exist.trail.ts +21 -0
  143. package/src/trails/orphaned-signal.trail.ts +36 -0
  144. package/src/trails/owner-projection-parity.trail.ts +26 -0
  145. package/src/trails/pending-force.trail.ts +21 -0
  146. package/src/trails/permit-governance.trail.ts +51 -0
  147. package/src/trails/prefer-schema-inference.trail.ts +21 -0
  148. package/src/trails/public-export-example-coverage.trail.ts +16 -0
  149. package/src/trails/public-internal-deep-imports.trail.ts +94 -0
  150. package/src/trails/public-output-schema.trail.ts +55 -0
  151. package/src/trails/public-union-output-discriminants.trail.ts +33 -0
  152. package/src/trails/read-intent-fires.trail.ts +20 -0
  153. package/src/trails/reference-exists.trail.ts +25 -0
  154. package/src/trails/resolved-import-boundary.trail.ts +109 -0
  155. package/src/trails/resource-declarations.trail.ts +25 -0
  156. package/src/trails/resource-exists.trail.ts +27 -0
  157. package/src/trails/resource-id-grammar.trail.ts +39 -0
  158. package/src/trails/resource-mock-coverage.trail.ts +40 -0
  159. package/src/trails/run.ts +160 -0
  160. package/src/trails/scheduled-destroy-intent.trail.ts +56 -0
  161. package/src/trails/schema.ts +237 -0
  162. package/src/trails/signal-graph-coaching.trail.ts +77 -0
  163. package/src/trails/static-resource-accessor-preference.trail.ts +25 -0
  164. package/src/trails/surface-overlay-coherence.trail.ts +24 -0
  165. package/src/trails/surface-trailhead-coherence.trail.ts +25 -0
  166. package/src/trails/topo.ts +6 -0
  167. package/src/trails/trail-fork-coaching.trail.ts +42 -0
  168. package/src/trails/trailhead-override-divergence.trail.ts +47 -0
  169. package/src/trails/unmaterialized-activation-source.trail.ts +72 -0
  170. package/src/trails/unreachable-detour-shadowing.trail.ts +45 -0
  171. package/src/trails/valid-describe-refs.trail.ts +18 -0
  172. package/src/trails/valid-detour-contract.trail.ts +71 -0
  173. package/src/trails/version-gap.trail.ts +35 -0
  174. package/src/trails/version-pinned-compose.trail.ts +23 -0
  175. package/src/trails/version-without-examples.trail.ts +38 -0
  176. package/src/trails/warden-export-symmetry.trail.ts +16 -0
  177. package/src/trails/warden-rules-use-ast.trail.ts +64 -0
  178. package/src/trails/webhook-route-collision.trail.ts +50 -0
  179. package/src/trails/wrap-rule.ts +224 -0
  180. package/src/workspaces.ts +199 -0
  181. package/.turbo/turbo-build.log +0 -1
  182. package/.turbo/turbo-lint.log +0 -3
  183. package/.turbo/turbo-typecheck.log +0 -1
  184. package/dist/cli.d.ts +0 -46
  185. package/dist/cli.d.ts.map +0 -1
  186. package/dist/cli.js +0 -218
  187. package/dist/cli.js.map +0 -1
  188. package/dist/drift.d.ts +0 -26
  189. package/dist/drift.d.ts.map +0 -1
  190. package/dist/drift.js +0 -27
  191. package/dist/drift.js.map +0 -1
  192. package/dist/formatters.d.ts +0 -29
  193. package/dist/formatters.d.ts.map +0 -1
  194. package/dist/formatters.js +0 -87
  195. package/dist/formatters.js.map +0 -1
  196. package/dist/index.d.ts +0 -26
  197. package/dist/index.d.ts.map +0 -1
  198. package/dist/index.js +0 -26
  199. package/dist/index.js.map +0 -1
  200. package/dist/rules/ast.d.ts +0 -41
  201. package/dist/rules/ast.d.ts.map +0 -1
  202. package/dist/rules/ast.js +0 -161
  203. package/dist/rules/ast.js.map +0 -1
  204. package/dist/rules/context-no-surface-types.d.ts +0 -12
  205. package/dist/rules/context-no-surface-types.d.ts.map +0 -1
  206. package/dist/rules/context-no-surface-types.js +0 -96
  207. package/dist/rules/context-no-surface-types.js.map +0 -1
  208. package/dist/rules/implementation-returns-result.d.ts +0 -13
  209. package/dist/rules/implementation-returns-result.d.ts.map +0 -1
  210. package/dist/rules/implementation-returns-result.js +0 -277
  211. package/dist/rules/implementation-returns-result.js.map +0 -1
  212. package/dist/rules/index.d.ts +0 -15
  213. package/dist/rules/index.d.ts.map +0 -1
  214. package/dist/rules/index.js +0 -34
  215. package/dist/rules/index.js.map +0 -1
  216. package/dist/rules/no-direct-impl-in-route.d.ts +0 -12
  217. package/dist/rules/no-direct-impl-in-route.d.ts.map +0 -1
  218. package/dist/rules/no-direct-impl-in-route.js +0 -47
  219. package/dist/rules/no-direct-impl-in-route.js.map +0 -1
  220. package/dist/rules/no-direct-implementation-call.d.ts +0 -12
  221. package/dist/rules/no-direct-implementation-call.d.ts.map +0 -1
  222. package/dist/rules/no-direct-implementation-call.js +0 -39
  223. package/dist/rules/no-direct-implementation-call.js.map +0 -1
  224. package/dist/rules/no-sync-result-assumption.d.ts +0 -6
  225. package/dist/rules/no-sync-result-assumption.d.ts.map +0 -1
  226. package/dist/rules/no-sync-result-assumption.js +0 -98
  227. package/dist/rules/no-sync-result-assumption.js.map +0 -1
  228. package/dist/rules/no-throw-in-detour-target.d.ts +0 -12
  229. package/dist/rules/no-throw-in-detour-target.d.ts.map +0 -1
  230. package/dist/rules/no-throw-in-detour-target.js +0 -87
  231. package/dist/rules/no-throw-in-detour-target.js.map +0 -1
  232. package/dist/rules/no-throw-in-implementation.d.ts +0 -9
  233. package/dist/rules/no-throw-in-implementation.d.ts.map +0 -1
  234. package/dist/rules/no-throw-in-implementation.js +0 -34
  235. package/dist/rules/no-throw-in-implementation.js.map +0 -1
  236. package/dist/rules/prefer-schema-inference.d.ts +0 -7
  237. package/dist/rules/prefer-schema-inference.d.ts.map +0 -1
  238. package/dist/rules/prefer-schema-inference.js +0 -86
  239. package/dist/rules/prefer-schema-inference.js.map +0 -1
  240. package/dist/rules/scan.d.ts +0 -8
  241. package/dist/rules/scan.d.ts.map +0 -1
  242. package/dist/rules/scan.js +0 -32
  243. package/dist/rules/scan.js.map +0 -1
  244. package/dist/rules/specs.d.ts +0 -29
  245. package/dist/rules/specs.d.ts.map +0 -1
  246. package/dist/rules/specs.js +0 -192
  247. package/dist/rules/specs.js.map +0 -1
  248. package/dist/rules/structure.d.ts +0 -13
  249. package/dist/rules/structure.d.ts.map +0 -1
  250. package/dist/rules/structure.js +0 -142
  251. package/dist/rules/structure.js.map +0 -1
  252. package/dist/rules/types.d.ts +0 -52
  253. package/dist/rules/types.d.ts.map +0 -1
  254. package/dist/rules/types.js +0 -2
  255. package/dist/rules/types.js.map +0 -1
  256. package/dist/rules/valid-describe-refs.d.ts +0 -7
  257. package/dist/rules/valid-describe-refs.d.ts.map +0 -1
  258. package/dist/rules/valid-describe-refs.js +0 -51
  259. package/dist/rules/valid-describe-refs.js.map +0 -1
  260. package/dist/rules/valid-detour-refs.d.ts +0 -6
  261. package/dist/rules/valid-detour-refs.d.ts.map +0 -1
  262. package/dist/rules/valid-detour-refs.js +0 -116
  263. package/dist/rules/valid-detour-refs.js.map +0 -1
  264. package/src/__tests__/cli.test.ts +0 -198
  265. package/src/__tests__/drift.test.ts +0 -74
  266. package/src/__tests__/formatters.test.ts +0 -157
  267. package/src/__tests__/implementation-returns-result.test.ts +0 -129
  268. package/src/__tests__/no-direct-implementation-call.test.ts +0 -83
  269. package/src/__tests__/no-sync-result-assumption.test.ts +0 -85
  270. package/src/__tests__/no-throw-in-detour-target.test.ts +0 -78
  271. package/src/__tests__/prefer-schema-inference.test.ts +0 -84
  272. package/src/__tests__/rules.test.ts +0 -227
  273. package/src/__tests__/valid-describe-refs.test.ts +0 -60
  274. package/src/rules/ast.ts +0 -213
  275. package/src/rules/no-direct-impl-in-route.ts +0 -81
  276. package/src/rules/no-throw-in-detour-target.ts +0 -150
  277. package/src/rules/valid-detour-refs.ts +0 -187
  278. package/tsconfig.json +0 -9
  279. package/tsconfig.tsbuildinfo +0 -1
@@ -1,277 +0,0 @@
1
- /**
2
- * Finds implementations that return raw values instead of `Result`.
3
- *
4
- * Uses AST parsing to find `run:` bodies and check that
5
- * every return statement returns Result.ok(), Result.err(), ctx.follow(),
6
- * or a tracked Result-typed variable.
7
- */
8
- import { findRunBodies, findTrailDefinitions, offsetToLine, parse, walk, } from './ast.js';
9
- import { isTestFile } from './scan.js';
10
- // ---------------------------------------------------------------------------
11
- // Member expression helpers
12
- // ---------------------------------------------------------------------------
13
- /** Extract object.property names from a MemberExpression callee. */
14
- const extractMemberNames = (callee) => {
15
- const obj = callee.object;
16
- const prop = callee.property;
17
- const objName = obj?.type === 'Identifier'
18
- ? obj.name
19
- : undefined;
20
- const propName = prop?.type === 'Identifier'
21
- ? prop.name
22
- : undefined;
23
- return { objName, propName };
24
- };
25
- const isMemberExpression = (callee) => callee.type === 'StaticMemberExpression' ||
26
- callee.type === 'MemberExpression';
27
- const isResultMemberCall = (callee) => {
28
- if (!isMemberExpression(callee)) {
29
- return false;
30
- }
31
- const { objName, propName } = extractMemberNames(callee);
32
- if (objName === 'Result' && (propName === 'ok' || propName === 'err')) {
33
- return true;
34
- }
35
- if (objName === 'ctx' && propName === 'follow') {
36
- return true;
37
- }
38
- return propName === 'run';
39
- };
40
- // ---------------------------------------------------------------------------
41
- // Expression classification
42
- // ---------------------------------------------------------------------------
43
- /** Check if an expression node is an allowed Result-returning expression. */
44
- const isResultExpression = (node) => {
45
- if (node.type === 'CallExpression') {
46
- const callee = node['callee'];
47
- if (!callee) {
48
- return false;
49
- }
50
- return isResultMemberCall(callee);
51
- }
52
- if (node.type === 'AwaitExpression') {
53
- const arg = node.argument;
54
- return arg ? isResultExpression(arg) : false;
55
- }
56
- return false;
57
- };
58
- /** Check if a node is a call to a known Result-returning helper. */
59
- const isHelperCall = (node, helperNames) => {
60
- const target = node.type === 'AwaitExpression'
61
- ? (node.argument ?? null)
62
- : node;
63
- if (!target || target.type !== 'CallExpression') {
64
- return false;
65
- }
66
- const callee = target['callee'];
67
- if (callee?.type === 'Identifier') {
68
- const { name } = callee;
69
- return helperNames.has(name);
70
- }
71
- return false;
72
- };
73
- /** Unwrap an optional AwaitExpression to get the inner identifier name. */
74
- const resolveIdentifierName = (node) => {
75
- if (node.type === 'Identifier') {
76
- return node.name;
77
- }
78
- if (node.type === 'AwaitExpression') {
79
- const inner = node.argument;
80
- if (inner?.type === 'Identifier') {
81
- return inner.name;
82
- }
83
- }
84
- return null;
85
- };
86
- /** Check if a return argument is an allowed Result value. */
87
- const isAllowedReturnArgument = (argument, helperNames, resultVars) => {
88
- if (isResultExpression(argument)) {
89
- return true;
90
- }
91
- if (isHelperCall(argument, helperNames)) {
92
- return true;
93
- }
94
- const varName = resolveIdentifierName(argument);
95
- return varName !== null && resultVars.has(varName);
96
- };
97
- // ---------------------------------------------------------------------------
98
- // Variable tracking
99
- // ---------------------------------------------------------------------------
100
- /** Track a VariableDeclarator, adding to resultVars if it produces a Result. */
101
- const trackResultVariable = (node, resultVars) => {
102
- const { init } = node;
103
- const { id } = node;
104
- if (init && id?.type === 'Identifier') {
105
- const { name } = id;
106
- if (isResultExpression(init)) {
107
- resultVars.add(name);
108
- }
109
- }
110
- };
111
- // ---------------------------------------------------------------------------
112
- // Shallow walk (stops at nested function boundaries)
113
- // ---------------------------------------------------------------------------
114
- const FUNCTION_BOUNDARY_TYPES = new Set([
115
- 'ArrowFunctionExpression',
116
- 'FunctionExpression',
117
- 'FunctionDeclaration',
118
- ]);
119
- /** Check if a value is a function-boundary AST node that should not be recursed into. */
120
- const isFunctionBoundary = (val) => !!val &&
121
- typeof val === 'object' &&
122
- FUNCTION_BOUNDARY_TYPES.has(val.type);
123
- /** Recurse into a single AST property value, skipping function boundaries. */
124
- const visitValue = (val, visit, recurse) => {
125
- if (Array.isArray(val)) {
126
- for (const item of val) {
127
- if (!isFunctionBoundary(item)) {
128
- recurse(item, visit);
129
- }
130
- }
131
- }
132
- else if (val &&
133
- typeof val === 'object' &&
134
- val.type &&
135
- !isFunctionBoundary(val)) {
136
- recurse(val, visit);
137
- }
138
- };
139
- /**
140
- * Walk an AST node tree without recursing into nested function bodies.
141
- *
142
- * This ensures that return statements inside `.map()`, `.filter()`, `.then()`
143
- * callbacks etc. are not mistakenly checked as implementation-level returns.
144
- */
145
- const walkShallow = (node, visit) => {
146
- if (!node || typeof node !== 'object') {
147
- return;
148
- }
149
- const n = node;
150
- if (n.type) {
151
- visit(n);
152
- }
153
- for (const val of Object.values(n)) {
154
- visitValue(val, visit, walkShallow);
155
- }
156
- };
157
- // ---------------------------------------------------------------------------
158
- // Return statement checking
159
- // ---------------------------------------------------------------------------
160
- /** Check return statements in a block body for non-Result returns. */
161
- const checkReturnStatements = (blockBody, trailInfo, filePath, sourceCode, helperNames, diagnostics) => {
162
- const resultVars = new Set();
163
- walkShallow(blockBody, (node) => {
164
- if (node.type === 'VariableDeclarator') {
165
- trackResultVariable(node, resultVars);
166
- }
167
- if (node.type !== 'ReturnStatement') {
168
- return;
169
- }
170
- const { argument } = node;
171
- // Bare return — not a value return
172
- if (!argument) {
173
- return;
174
- }
175
- if (isAllowedReturnArgument(argument, helperNames, resultVars)) {
176
- return;
177
- }
178
- diagnostics.push({
179
- filePath,
180
- line: offsetToLine(sourceCode, node.start),
181
- message: `${trailInfo.label} "${trailInfo.id}" implementation must return Result.ok(...) or Result.err(...), not a raw value.`,
182
- rule: 'implementation-returns-result',
183
- severity: 'error',
184
- });
185
- });
186
- };
187
- // ---------------------------------------------------------------------------
188
- // Result helper name collection
189
- // ---------------------------------------------------------------------------
190
- /** Check if a return type annotation mentions Result. */
191
- const hasResultReturnType = (node, sourceCode) => {
192
- const { returnType } = node;
193
- if (!returnType) {
194
- return false;
195
- }
196
- const annotationText = sourceCode.slice(returnType.start, returnType.end);
197
- return /\bResult\s*</.test(annotationText);
198
- };
199
- const isFunctionLikeExpression = (node) => node.type === 'ArrowFunctionExpression' || node.type === 'FunctionExpression';
200
- /** Collect names of top-level functions/consts with explicit Result return types. */
201
- const collectResultHelperNames = (ast, sourceCode) => {
202
- const names = new Set();
203
- walk(ast, (node) => {
204
- if (node.type === 'VariableDeclarator') {
205
- const { id } = node;
206
- const { init } = node;
207
- if (id?.type === 'Identifier' &&
208
- init &&
209
- isFunctionLikeExpression(init) &&
210
- hasResultReturnType(init, sourceCode)) {
211
- names.add(id.name);
212
- }
213
- }
214
- if (node.type === 'FunctionDeclaration') {
215
- const { id } = node;
216
- if (id?.type === 'Identifier' && hasResultReturnType(node, sourceCode)) {
217
- names.add(id.name);
218
- }
219
- }
220
- });
221
- return names;
222
- };
223
- // ---------------------------------------------------------------------------
224
- // Per-implementation checking
225
- // ---------------------------------------------------------------------------
226
- const checkImplementation = (implValue, info, filePath, sourceCode, helperNames, diagnostics) => {
227
- const fnBody = implValue.body;
228
- if (!fnBody) {
229
- return;
230
- }
231
- if (fnBody.type === 'BlockStatement' || fnBody.type === 'FunctionBody') {
232
- checkReturnStatements(fnBody, info, filePath, sourceCode, helperNames, diagnostics);
233
- return;
234
- }
235
- if (!isResultExpression(fnBody) && !isHelperCall(fnBody, helperNames)) {
236
- diagnostics.push({
237
- filePath,
238
- line: offsetToLine(sourceCode, implValue.start),
239
- message: `${info.label} "${info.id}" implementation must return Result.ok(...) or Result.err(...), not a raw value.`,
240
- rule: 'implementation-returns-result',
241
- severity: 'error',
242
- });
243
- }
244
- };
245
- // ---------------------------------------------------------------------------
246
- // Rule
247
- // ---------------------------------------------------------------------------
248
- const checkAllDefinitions = (ast, filePath, sourceCode) => {
249
- const diagnostics = [];
250
- const helperNames = collectResultHelperNames(ast, sourceCode);
251
- for (const def of findTrailDefinitions(ast)) {
252
- const info = { id: def.id, label: 'Trail' };
253
- for (const implValue of findRunBodies(def.config)) {
254
- checkImplementation(implValue, info, filePath, sourceCode, helperNames, diagnostics);
255
- }
256
- }
257
- return diagnostics;
258
- };
259
- /**
260
- * Finds implementations that return raw values instead of `Result`.
261
- */
262
- export const implementationReturnsResult = {
263
- check(sourceCode, filePath) {
264
- if (isTestFile(filePath)) {
265
- return [];
266
- }
267
- const ast = parse(filePath, sourceCode);
268
- if (!ast) {
269
- return [];
270
- }
271
- return checkAllDefinitions(ast, filePath, sourceCode);
272
- },
273
- description: 'Disallow implementations that return raw values instead of Result.ok() or Result.err().',
274
- name: 'implementation-returns-result',
275
- severity: 'error',
276
- };
277
- //# sourceMappingURL=implementation-returns-result.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"implementation-returns-result.js","sourceRoot":"","sources":["../../src/rules/implementation-returns-result.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { WardenRule } from './types.js';
2
- export type { ProjectAwareWardenRule, ProjectContext, WardenDiagnostic, WardenRule, WardenSeverity, } from './types.js';
3
- export { noThrowInImplementation } from './no-throw-in-implementation.js';
4
- export { contextNoSurfaceTypes } from './context-no-surface-types.js';
5
- export { validDetourRefs } from './valid-detour-refs.js';
6
- export { noDirectImplInRoute } from './no-direct-impl-in-route.js';
7
- export { noDirectImplementationCall } from './no-direct-implementation-call.js';
8
- export { noSyncResultAssumption } from './no-sync-result-assumption.js';
9
- export { implementationReturnsResult } from './implementation-returns-result.js';
10
- export { noThrowInDetourTarget } from './no-throw-in-detour-target.js';
11
- export { preferSchemaInference } from './prefer-schema-inference.js';
12
- export { validDescribeRefs } from './valid-describe-refs.js';
13
- /** All built-in warden rules, keyed by rule name. */
14
- export declare const wardenRules: ReadonlyMap<string, WardenRule>;
15
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,qDAAqD;AACrD,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CActD,CAAC"}
@@ -1,34 +0,0 @@
1
- import { contextNoSurfaceTypes } from './context-no-surface-types.js';
2
- import { implementationReturnsResult } from './implementation-returns-result.js';
3
- import { noDirectImplInRoute } from './no-direct-impl-in-route.js';
4
- import { noDirectImplementationCall } from './no-direct-implementation-call.js';
5
- import { noSyncResultAssumption } from './no-sync-result-assumption.js';
6
- import { noThrowInDetourTarget } from './no-throw-in-detour-target.js';
7
- import { noThrowInImplementation } from './no-throw-in-implementation.js';
8
- import { preferSchemaInference } from './prefer-schema-inference.js';
9
- import { validDescribeRefs } from './valid-describe-refs.js';
10
- import { validDetourRefs } from './valid-detour-refs.js';
11
- export { noThrowInImplementation } from './no-throw-in-implementation.js';
12
- export { contextNoSurfaceTypes } from './context-no-surface-types.js';
13
- export { validDetourRefs } from './valid-detour-refs.js';
14
- export { noDirectImplInRoute } from './no-direct-impl-in-route.js';
15
- export { noDirectImplementationCall } from './no-direct-implementation-call.js';
16
- export { noSyncResultAssumption } from './no-sync-result-assumption.js';
17
- export { implementationReturnsResult } from './implementation-returns-result.js';
18
- export { noThrowInDetourTarget } from './no-throw-in-detour-target.js';
19
- export { preferSchemaInference } from './prefer-schema-inference.js';
20
- export { validDescribeRefs } from './valid-describe-refs.js';
21
- /** All built-in warden rules, keyed by rule name. */
22
- export const wardenRules = new Map([
23
- [noThrowInImplementation.name, noThrowInImplementation],
24
- [contextNoSurfaceTypes.name, contextNoSurfaceTypes],
25
- [preferSchemaInference.name, preferSchemaInference],
26
- [validDescribeRefs.name, validDescribeRefs],
27
- [validDetourRefs.name, validDetourRefs],
28
- [noDirectImplementationCall.name, noDirectImplementationCall],
29
- [noSyncResultAssumption.name, noSyncResultAssumption],
30
- [implementationReturnsResult.name, implementationReturnsResult],
31
- [noThrowInDetourTarget.name, noThrowInDetourTarget],
32
- [noDirectImplInRoute.name, noDirectImplInRoute],
33
- ]);
34
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAUzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,qDAAqD;AACrD,MAAM,CAAC,MAAM,WAAW,GAAoC,IAAI,GAAG,CAGjE;IACA,CAAC,uBAAuB,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvD,CAAC,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACnD,CAAC,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACnD,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAC3C,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC;IACvC,CAAC,0BAA0B,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC7D,CAAC,sBAAsB,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACrD,CAAC,2BAA2B,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC/D,CAAC,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACnD,CAAC,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,CAAC;CAChD,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Detects trail implementations with `follow` that call `.run()` directly.
3
- *
4
- * Uses AST parsing to find trail definitions that declare `follow` and check for
5
- * `.run()` call expressions in their bodies.
6
- */
7
- import type { WardenRule } from './types.js';
8
- /**
9
- * Detects trails with `follow` that call another trail's `.run()` directly.
10
- */
11
- export declare const noDirectImplInRoute: WardenRule;
12
- //# sourceMappingURL=no-direct-impl-in-route.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-direct-impl-in-route.d.ts","sourceRoot":"","sources":["../../src/rules/no-direct-impl-in-route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAkC/D;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UA2BjC,CAAC"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Detects trail implementations with `follow` that call `.run()` directly.
3
- *
4
- * Uses AST parsing to find trail definitions that declare `follow` and check for
5
- * `.run()` call expressions in their bodies.
6
- */
7
- import { findConfigProperty, findRunBodies, findTrailDefinitions, isRunCall, offsetToLine, parse, walk, } from './ast.js';
8
- const findImplCallsInTrailWithFollow = (def, filePath, sourceCode, diagnostics) => {
9
- for (const body of findRunBodies(def.config)) {
10
- walk(body, (node) => {
11
- if (isRunCall(node)) {
12
- diagnostics.push({
13
- filePath,
14
- line: offsetToLine(sourceCode, node.start),
15
- message: 'Use ctx.follow("trailId", input) instead of direct .run() calls. ctx.follow() validates input and propagates tracing.',
16
- rule: 'no-direct-impl-in-route',
17
- severity: 'warn',
18
- });
19
- }
20
- });
21
- }
22
- };
23
- const hasFollowProperty = (config) => findConfigProperty(config, 'follow') !== null;
24
- /**
25
- * Detects trails with `follow` that call another trail's `.run()` directly.
26
- */
27
- export const noDirectImplInRoute = {
28
- check(sourceCode, filePath) {
29
- if (!/\btrail\s*\(/.test(sourceCode)) {
30
- return [];
31
- }
32
- const ast = parse(filePath, sourceCode);
33
- if (!ast) {
34
- return [];
35
- }
36
- const diagnostics = [];
37
- const followDefs = findTrailDefinitions(ast).filter((d) => hasFollowProperty(d.config));
38
- for (const def of followDefs) {
39
- findImplCallsInTrailWithFollow(def, filePath, sourceCode, diagnostics);
40
- }
41
- return diagnostics;
42
- },
43
- description: 'Prefer ctx.follow() over direct .run() calls in trail bodies with follow.',
44
- name: 'no-direct-impl-in-route',
45
- severity: 'warn',
46
- };
47
- //# sourceMappingURL=no-direct-impl-in-route.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-direct-impl-in-route.js","sourceRoot":"","sources":["../../src/rules/no-direct-impl-in-route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,YAAY,EACZ,KAAK,EACL,IAAI,GACL,MAAM,UAAU,CAAC;AAUlB,MAAM,8BAA8B,GAAG,CACrC,GAAiC,EACjC,QAAgB,EAChB,UAAkB,EAClB,WAA+B,EACzB,EAAE;IACR,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,MAAiB,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YAClB,IAAI,SAAS,CAAC,IAAe,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,uHAAuH;oBACzH,IAAI,EAAE,yBAAyB;oBAC/B,QAAQ,EAAE,MAAM;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAe,EAAW,EAAE,CACrD,kBAAkB,CAAC,MAAiB,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,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;QAC3C,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnE,iBAAiB,CAAC,CAAC,CAAC,MAAiB,CAAC,CACvC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,8BAA8B,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,WAAW,EACT,2EAA2E;IAC7E,IAAI,EAAE,yBAAyB;IAE/B,QAAQ,EAAE,MAAM;CACjB,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Flags direct `.run()` calls in application code.
3
- *
4
- * Uses AST parsing to find `.run()` call expressions,
5
- * ignoring occurrences in strings and comments.
6
- */
7
- import type { WardenRule } from './types.js';
8
- /**
9
- * Flags direct `.run()` calls in application code.
10
- */
11
- export declare const noDirectImplementationCall: WardenRule;
12
- //# sourceMappingURL=no-direct-implementation-call.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-direct-implementation-call.d.ts","sourceRoot":"","sources":["../../src/rules/no-direct-implementation-call.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,UAgCxC,CAAC"}
@@ -1,39 +0,0 @@
1
- /**
2
- * Flags direct `.run()` calls in application code.
3
- *
4
- * Uses AST parsing to find `.run()` call expressions,
5
- * ignoring occurrences in strings and comments.
6
- */
7
- import { isRunCall, offsetToLine, parse, walk } from './ast.js';
8
- import { isFrameworkInternalFile, isTestFile } from './scan.js';
9
- /**
10
- * Flags direct `.run()` calls in application code.
11
- */
12
- export const noDirectImplementationCall = {
13
- check(sourceCode, filePath) {
14
- if (isTestFile(filePath) || isFrameworkInternalFile(filePath)) {
15
- return [];
16
- }
17
- const ast = parse(filePath, sourceCode);
18
- if (!ast) {
19
- return [];
20
- }
21
- const diagnostics = [];
22
- walk(ast, (node) => {
23
- if (isRunCall(node)) {
24
- diagnostics.push({
25
- filePath,
26
- line: offsetToLine(sourceCode, node.start),
27
- message: 'Use ctx.follow("trailId", input) instead of direct .run() calls. Direct implementation access bypasses validation, tracing, and layers.',
28
- rule: 'no-direct-implementation-call',
29
- severity: 'warn',
30
- });
31
- }
32
- });
33
- return diagnostics;
34
- },
35
- description: 'Disallow direct .run() calls in application code. Use ctx.follow() instead.',
36
- name: 'no-direct-implementation-call',
37
- severity: 'warn',
38
- };
39
- //# sourceMappingURL=no-direct-implementation-call.js.map
@@ -1 +0,0 @@
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 +0,0 @@
1
- import type { WardenRule } from './types.js';
2
- /**
3
- * Flags code that assumes `.run()` returns a synchronous result.
4
- */
5
- export declare const noSyncResultAssumption: WardenRule;
6
- //# sourceMappingURL=no-sync-result-assumption.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-sync-result-assumption.d.ts","sourceRoot":"","sources":["../../src/rules/no-sync-result-assumption.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AA6I/D;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,UAWpC,CAAC"}
@@ -1,98 +0,0 @@
1
- import { isFrameworkInternalFile, isTestFile, stripQuotedContent, } from './scan.js';
2
- const RESULT_ACCESS_PATTERN = /\.(?:isOk|isErr|match|map)\s*\(|\.(?:value|error)\b/;
3
- const IMPLEMENTATION_CALL_PATTERN = /\.run\s*\(/;
4
- const isAwaitedImplementationCall = (line) => {
5
- const callIndex = line.indexOf('.run(');
6
- if (callIndex === -1) {
7
- return false;
8
- }
9
- const awaitIndex = line.indexOf('await');
10
- return awaitIndex !== -1 && awaitIndex < callIndex;
11
- };
12
- const isDirectResultAccess = (line) => IMPLEMENTATION_CALL_PATTERN.test(line) &&
13
- RESULT_ACCESS_PATTERN.test(line) &&
14
- !isAwaitedImplementationCall(line);
15
- const isPendingUse = (line, variableName) => {
16
- const escaped = variableName.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&');
17
- const pendingPattern = new RegExp(`\\b${escaped}\\s*(?:\\.(?:isOk|isErr|match|map)\\s*\\(|\\.(?:value|error)\\b)`);
18
- return pendingPattern.test(line);
19
- };
20
- const MISSING_AWAIT_MESSAGE = 'Missing await: .run() returns Promise<Result> after normalization. Use `const result = await trail.run(input, ctx)`.';
21
- const createMissingAwaitDiagnostic = (filePath, line) => ({
22
- filePath,
23
- line,
24
- message: MISSING_AWAIT_MESSAGE,
25
- rule: 'no-sync-result-assumption',
26
- severity: 'error',
27
- });
28
- const trackPendingCall = (line) => {
29
- const match = line.match(/\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*([^;]*)/);
30
- if (!match?.[1] || !match[2] || !IMPLEMENTATION_CALL_PATTERN.test(match[2])) {
31
- return undefined;
32
- }
33
- if (isAwaitedImplementationCall(match[2])) {
34
- return undefined;
35
- }
36
- return match[1];
37
- };
38
- const addPendingCall = (pendingCalls, variableName, lineNumber) => {
39
- pendingCalls.push({
40
- line: lineNumber,
41
- remainingLines: 6,
42
- variableName,
43
- });
44
- };
45
- const advancePendingCalls = (line, filePath, lineNumber, pendingCalls, diagnostics) => {
46
- for (let j = pendingCalls.length - 1; j >= 0; j -= 1) {
47
- const pendingCall = pendingCalls[j];
48
- if (pendingCall && isPendingUse(line, pendingCall.variableName)) {
49
- diagnostics.push(createMissingAwaitDiagnostic(filePath, lineNumber));
50
- pendingCalls.splice(j, 1);
51
- }
52
- else if (pendingCall) {
53
- pendingCall.remainingLines -= 1;
54
- if (pendingCall.remainingLines <= 0) {
55
- pendingCalls.splice(j, 1);
56
- }
57
- }
58
- }
59
- };
60
- const processLine = (line, filePath, lineNumber, pendingCalls, diagnostics) => {
61
- if (isDirectResultAccess(line)) {
62
- diagnostics.push(createMissingAwaitDiagnostic(filePath, lineNumber));
63
- return;
64
- }
65
- const variableName = trackPendingCall(line);
66
- if (variableName) {
67
- addPendingCall(pendingCalls, variableName, lineNumber);
68
- }
69
- advancePendingCalls(line, filePath, lineNumber, pendingCalls, diagnostics);
70
- };
71
- const scanSourceCode = (sourceCode, filePath) => {
72
- const diagnostics = [];
73
- const lines = sourceCode.split('\n');
74
- const pendingCalls = [];
75
- for (let i = 0; i < lines.length; i += 1) {
76
- const line = lines[i];
77
- if (!line) {
78
- continue;
79
- }
80
- processLine(line, filePath, i + 1, pendingCalls, diagnostics);
81
- }
82
- return diagnostics;
83
- };
84
- /**
85
- * Flags code that assumes `.run()` returns a synchronous result.
86
- */
87
- export const noSyncResultAssumption = {
88
- check(sourceCode, filePath) {
89
- if (isTestFile(filePath) || isFrameworkInternalFile(filePath)) {
90
- return [];
91
- }
92
- return scanSourceCode(stripQuotedContent(sourceCode), filePath);
93
- },
94
- description: 'Disallow treating .run() as synchronous after normalization. Always await the returned Promise<Result>.',
95
- name: 'no-sync-result-assumption',
96
- severity: 'error',
97
- };
98
- //# sourceMappingURL=no-sync-result-assumption.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-sync-result-assumption.js","sourceRoot":"","sources":["../../src/rules/no-sync-result-assumption.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB,MAAM,qBAAqB,GACzB,qDAAqD,CAAC;AACxD,MAAM,2BAA2B,GAAG,YAAY,CAAC;AAEjD,MAAM,2BAA2B,GAAG,CAAC,IAAY,EAAW,EAAE;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,GAAG,SAAS,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAW,EAAE,CACrD,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;IACtC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAErC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,YAAoB,EAAW,EAAE;IACnE,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,IAAI,MAAM,CAC/B,MAAM,OAAO,kEAAkE,CAChF,CAAC;IACF,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AAQF,MAAM,qBAAqB,GACzB,sHAAsH,CAAC;AAEzH,MAAM,4BAA4B,GAAG,CACnC,QAAgB,EAChB,IAAY,EACM,EAAE,CAAC,CAAC;IACtB,QAAQ;IACR,IAAI;IACJ,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,2BAA2B;IACjC,QAAQ,EAAE,OAAO;CAClB,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,wDAAwD,CACzD,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,YAA2B,EAC3B,YAAoB,EACpB,UAAkB,EACZ,EAAE;IACR,YAAY,CAAC,IAAI,CAAC;QAChB,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,CAAC;QACjB,YAAY;KACb,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,IAAY,EACZ,QAAgB,EAChB,UAAkB,EAClB,YAA2B,EAC3B,WAA+B,EACzB,EAAE;IACR,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,WAAW,IAAI,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;YAChE,WAAW,CAAC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;YACrE,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,WAAW,CAAC,cAAc,IAAI,CAAC,CAAC;YAChC,IAAI,WAAW,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;gBACpC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,IAAY,EACZ,QAAgB,EAChB,UAAkB,EAClB,YAA2B,EAC3B,WAA+B,EACzB,EAAE;IACR,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,YAAY,EAAE,CAAC;QACjB,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,UAAkB,EAClB,QAAgB,EACa,EAAE;IAC/B,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,YAAY,GAAkB,EAAE,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAe;IAChD,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,cAAc,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IACD,WAAW,EACT,yGAAyG;IAC3G,IAAI,EAAE,2BAA2B;IACjC,QAAQ,EAAE,OAAO;CAClB,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Flags throws in implementations that are used as detour targets.
3
- *
4
- * Uses AST parsing for accurate detection of detour target IDs and
5
- * throw statements within those trail implementations.
6
- */
7
- import type { ProjectAwareWardenRule } from './types.js';
8
- /**
9
- * Flags throws in implementations that are used as detour targets.
10
- */
11
- export declare const noThrowInDetourTarget: ProjectAwareWardenRule;
12
- //# sourceMappingURL=no-throw-in-detour-target.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-throw-in-detour-target.d.ts","sourceRoot":"","sources":["../../src/rules/no-throw-in-detour-target.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AAyFpB;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,sBAsCnC,CAAC"}