@ontrails/warden 1.0.0-beta.2 → 1.0.0-beta.22

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 (249) hide show
  1. package/CHANGELOG.md +508 -6
  2. package/README.md +77 -26
  3. package/bin/warden.ts +50 -0
  4. package/package.json +27 -5
  5. package/src/adapter-check.ts +136 -0
  6. package/src/ast.ts +28 -0
  7. package/src/cli.ts +1374 -103
  8. package/src/command.ts +953 -0
  9. package/src/config.ts +184 -0
  10. package/src/draft.ts +22 -0
  11. package/src/drift.ts +106 -22
  12. package/src/fix.ts +120 -0
  13. package/src/formatters.ts +79 -9
  14. package/src/guide.ts +245 -0
  15. package/src/index.ts +206 -14
  16. package/src/project-context.ts +163 -0
  17. package/src/resolve.ts +530 -0
  18. package/src/rules/activation-orphan.ts +97 -0
  19. package/src/rules/ast.ts +3176 -85
  20. package/src/rules/circular-refs.ts +154 -0
  21. package/src/rules/composes-declarations.ts +704 -0
  22. package/src/rules/context-no-surface-types.ts +68 -8
  23. package/src/rules/contour-exists.ts +251 -0
  24. package/src/rules/contour-ids.ts +15 -0
  25. package/src/rules/dead-internal-trail.ts +154 -0
  26. package/src/rules/draft-file-marking.ts +160 -0
  27. package/src/rules/draft-visible-debt.ts +87 -0
  28. package/src/rules/error-mapping-completeness.ts +288 -0
  29. package/src/rules/example-valid.ts +401 -0
  30. package/src/rules/fires-declarations.ts +758 -0
  31. package/src/rules/implementation-returns-result.ts +1265 -95
  32. package/src/rules/incomplete-accessor-for-standard-op.ts +272 -0
  33. package/src/rules/incomplete-crud.ts +580 -0
  34. package/src/rules/index.ts +219 -18
  35. package/src/rules/intent-propagation.ts +127 -0
  36. package/src/rules/layer-field-name-drift.ts +96 -0
  37. package/src/rules/metadata.ts +654 -0
  38. package/src/rules/missing-reconcile.ts +98 -0
  39. package/src/rules/missing-visibility.ts +110 -0
  40. package/src/rules/no-destructured-compose.ts +192 -0
  41. package/src/rules/no-dev-permit-in-source.ts +99 -0
  42. package/src/rules/no-direct-implementation-call.ts +7 -7
  43. package/src/rules/no-legacy-layer-imports.ts +211 -0
  44. package/src/rules/no-native-error-result.ts +111 -0
  45. package/src/rules/no-redundant-result-error-wrap.ts +331 -0
  46. package/src/rules/no-retired-cross-vocabulary.ts +194 -0
  47. package/src/rules/no-sync-result-assumption.ts +1134 -99
  48. package/src/rules/no-throw-in-detour-recover.ts +225 -0
  49. package/src/rules/no-throw-in-implementation.ts +10 -9
  50. package/src/rules/no-top-level-surface.ts +389 -0
  51. package/src/rules/on-references-exist.ts +194 -0
  52. package/src/rules/orphaned-signal.ts +150 -0
  53. package/src/rules/owner-projection-parity.ts +146 -0
  54. package/src/rules/permit-governance.ts +25 -0
  55. package/src/rules/public-export-example-coverage.ts +553 -0
  56. package/src/rules/public-internal-deep-imports.ts +517 -0
  57. package/src/rules/public-output-schema.ts +29 -0
  58. package/src/rules/public-union-output-discriminants.ts +150 -0
  59. package/src/rules/read-intent-fires.ts +187 -0
  60. package/src/rules/reference-exists.ts +98 -0
  61. package/src/rules/registry-names.ts +145 -0
  62. package/src/rules/resolved-import-boundary.ts +146 -0
  63. package/src/rules/resource-declarations.ts +704 -0
  64. package/src/rules/resource-exists.ts +179 -0
  65. package/src/rules/resource-id-grammar.ts +65 -0
  66. package/src/rules/resource-mock-coverage.ts +115 -0
  67. package/src/rules/scan.ts +38 -25
  68. package/src/rules/scheduled-destroy-intent.ts +44 -0
  69. package/src/rules/signal-graph-coaching.ts +191 -0
  70. package/src/rules/specs.ts +9 -5
  71. package/src/rules/static-resource-accessor-preference.ts +657 -0
  72. package/src/rules/surface-facet-coherence.ts +370 -0
  73. package/src/rules/trail-versioning-source.ts +1094 -0
  74. package/src/rules/trail-versioning-topo.ts +172 -0
  75. package/src/rules/types.ts +270 -6
  76. package/src/rules/unmaterialized-activation-source.ts +84 -0
  77. package/src/rules/unreachable-detour-shadowing.ts +344 -0
  78. package/src/rules/valid-describe-refs.ts +160 -32
  79. package/src/rules/valid-detour-contract.ts +78 -0
  80. package/src/rules/warden-export-symmetry.ts +533 -0
  81. package/src/rules/warden-rules-use-ast.ts +996 -0
  82. package/src/rules/webhook-route-collision.ts +243 -0
  83. package/src/trails/activation-orphan.trail.ts +84 -0
  84. package/src/trails/circular-refs.trail.ts +29 -0
  85. package/src/trails/composes-declarations.trail.ts +22 -0
  86. package/src/trails/context-no-surface-types.trail.ts +21 -0
  87. package/src/trails/contour-exists.trail.ts +21 -0
  88. package/src/trails/dead-internal-trail.trail.ts +26 -0
  89. package/src/trails/deprecation-without-guidance.trail.ts +21 -0
  90. package/src/trails/draft-file-marking.trail.ts +16 -0
  91. package/src/trails/draft-visible-debt.trail.ts +16 -0
  92. package/src/trails/error-mapping-completeness.trail.ts +29 -0
  93. package/src/trails/example-valid.trail.ts +25 -0
  94. package/src/trails/fires-declarations.trail.ts +23 -0
  95. package/src/trails/fork-without-preserved-blaze.trail.ts +31 -0
  96. package/src/trails/implementation-returns-result.trail.ts +20 -0
  97. package/src/trails/incomplete-accessor-for-standard-op.trail.ts +76 -0
  98. package/src/trails/incomplete-crud.trail.ts +39 -0
  99. package/src/trails/index.ts +78 -0
  100. package/src/trails/intent-propagation.trail.ts +30 -0
  101. package/src/trails/layer-field-name-drift.trail.ts +39 -0
  102. package/src/trails/marker-schema-unsupported.trail.ts +23 -0
  103. package/src/trails/missing-reconcile.trail.ts +33 -0
  104. package/src/trails/missing-visibility.trail.ts +22 -0
  105. package/src/trails/no-destructured-compose.trail.ts +44 -0
  106. package/src/trails/no-dev-permit-in-source.trail.ts +16 -0
  107. package/src/trails/no-direct-implementation-call.trail.ts +16 -0
  108. package/src/trails/no-legacy-layer-imports.trail.ts +41 -0
  109. package/src/trails/no-native-error-result.trail.ts +18 -0
  110. package/src/trails/no-redundant-result-error-wrap.trail.ts +55 -0
  111. package/src/trails/no-retired-cross-vocabulary.trail.ts +42 -0
  112. package/src/trails/no-sync-result-assumption.trail.ts +19 -0
  113. package/src/trails/no-throw-in-detour-recover.trail.ts +24 -0
  114. package/src/trails/no-throw-in-implementation.trail.ts +20 -0
  115. package/src/trails/no-top-level-surface.trail.ts +43 -0
  116. package/src/trails/on-references-exist.trail.ts +21 -0
  117. package/src/trails/orphaned-signal.trail.ts +36 -0
  118. package/src/trails/owner-projection-parity.trail.ts +26 -0
  119. package/src/trails/pending-force.trail.ts +21 -0
  120. package/src/trails/permit-governance.trail.ts +51 -0
  121. package/src/trails/prefer-schema-inference.trail.ts +21 -0
  122. package/src/trails/public-export-example-coverage.trail.ts +16 -0
  123. package/src/trails/public-internal-deep-imports.trail.ts +94 -0
  124. package/src/trails/public-output-schema.trail.ts +55 -0
  125. package/src/trails/public-union-output-discriminants.trail.ts +33 -0
  126. package/src/trails/read-intent-fires.trail.ts +20 -0
  127. package/src/trails/reference-exists.trail.ts +25 -0
  128. package/src/trails/resolved-import-boundary.trail.ts +109 -0
  129. package/src/trails/resource-declarations.trail.ts +25 -0
  130. package/src/trails/resource-exists.trail.ts +27 -0
  131. package/src/trails/resource-id-grammar.trail.ts +39 -0
  132. package/src/trails/resource-mock-coverage.trail.ts +40 -0
  133. package/src/trails/run.ts +162 -0
  134. package/src/trails/scheduled-destroy-intent.trail.ts +56 -0
  135. package/src/trails/schema.ts +194 -0
  136. package/src/trails/signal-graph-coaching.trail.ts +77 -0
  137. package/src/trails/static-resource-accessor-preference.trail.ts +25 -0
  138. package/src/trails/surface-facet-coherence.trail.ts +25 -0
  139. package/src/trails/topo.ts +6 -0
  140. package/src/trails/unmaterialized-activation-source.trail.ts +72 -0
  141. package/src/trails/unreachable-detour-shadowing.trail.ts +45 -0
  142. package/src/trails/valid-describe-refs.trail.ts +18 -0
  143. package/src/trails/valid-detour-contract.trail.ts +71 -0
  144. package/src/trails/version-gap.trail.ts +35 -0
  145. package/src/trails/version-pinned-compose.trail.ts +23 -0
  146. package/src/trails/version-without-examples.trail.ts +38 -0
  147. package/src/trails/warden-export-symmetry.trail.ts +16 -0
  148. package/src/trails/warden-rules-use-ast.trail.ts +45 -0
  149. package/src/trails/webhook-route-collision.trail.ts +50 -0
  150. package/src/trails/wrap-rule.ts +213 -0
  151. package/src/workspaces.ts +238 -0
  152. package/.turbo/turbo-build.log +0 -1
  153. package/.turbo/turbo-lint.log +0 -3
  154. package/.turbo/turbo-typecheck.log +0 -1
  155. package/dist/cli.d.ts +0 -46
  156. package/dist/cli.d.ts.map +0 -1
  157. package/dist/cli.js +0 -221
  158. package/dist/cli.js.map +0 -1
  159. package/dist/drift.d.ts +0 -26
  160. package/dist/drift.d.ts.map +0 -1
  161. package/dist/drift.js +0 -27
  162. package/dist/drift.js.map +0 -1
  163. package/dist/formatters.d.ts +0 -29
  164. package/dist/formatters.d.ts.map +0 -1
  165. package/dist/formatters.js +0 -87
  166. package/dist/formatters.js.map +0 -1
  167. package/dist/index.d.ts +0 -26
  168. package/dist/index.d.ts.map +0 -1
  169. package/dist/index.js +0 -26
  170. package/dist/index.js.map +0 -1
  171. package/dist/rules/ast.d.ts +0 -41
  172. package/dist/rules/ast.d.ts.map +0 -1
  173. package/dist/rules/ast.js +0 -163
  174. package/dist/rules/ast.js.map +0 -1
  175. package/dist/rules/context-no-surface-types.d.ts +0 -12
  176. package/dist/rules/context-no-surface-types.d.ts.map +0 -1
  177. package/dist/rules/context-no-surface-types.js +0 -96
  178. package/dist/rules/context-no-surface-types.js.map +0 -1
  179. package/dist/rules/implementation-returns-result.d.ts +0 -13
  180. package/dist/rules/implementation-returns-result.d.ts.map +0 -1
  181. package/dist/rules/implementation-returns-result.js +0 -231
  182. package/dist/rules/implementation-returns-result.js.map +0 -1
  183. package/dist/rules/index.d.ts +0 -22
  184. package/dist/rules/index.d.ts.map +0 -1
  185. package/dist/rules/index.js +0 -41
  186. package/dist/rules/index.js.map +0 -1
  187. package/dist/rules/no-direct-impl-in-route.d.ts +0 -12
  188. package/dist/rules/no-direct-impl-in-route.d.ts.map +0 -1
  189. package/dist/rules/no-direct-impl-in-route.js +0 -46
  190. package/dist/rules/no-direct-impl-in-route.js.map +0 -1
  191. package/dist/rules/no-direct-implementation-call.d.ts +0 -12
  192. package/dist/rules/no-direct-implementation-call.d.ts.map +0 -1
  193. package/dist/rules/no-direct-implementation-call.js +0 -39
  194. package/dist/rules/no-direct-implementation-call.js.map +0 -1
  195. package/dist/rules/no-sync-result-assumption.d.ts +0 -6
  196. package/dist/rules/no-sync-result-assumption.d.ts.map +0 -1
  197. package/dist/rules/no-sync-result-assumption.js +0 -98
  198. package/dist/rules/no-sync-result-assumption.js.map +0 -1
  199. package/dist/rules/no-throw-in-detour-target.d.ts +0 -12
  200. package/dist/rules/no-throw-in-detour-target.d.ts.map +0 -1
  201. package/dist/rules/no-throw-in-detour-target.js +0 -87
  202. package/dist/rules/no-throw-in-detour-target.js.map +0 -1
  203. package/dist/rules/no-throw-in-implementation.d.ts +0 -9
  204. package/dist/rules/no-throw-in-implementation.d.ts.map +0 -1
  205. package/dist/rules/no-throw-in-implementation.js +0 -34
  206. package/dist/rules/no-throw-in-implementation.js.map +0 -1
  207. package/dist/rules/prefer-schema-inference.d.ts +0 -7
  208. package/dist/rules/prefer-schema-inference.d.ts.map +0 -1
  209. package/dist/rules/prefer-schema-inference.js +0 -86
  210. package/dist/rules/prefer-schema-inference.js.map +0 -1
  211. package/dist/rules/scan.d.ts +0 -8
  212. package/dist/rules/scan.d.ts.map +0 -1
  213. package/dist/rules/scan.js +0 -32
  214. package/dist/rules/scan.js.map +0 -1
  215. package/dist/rules/specs.d.ts +0 -29
  216. package/dist/rules/specs.d.ts.map +0 -1
  217. package/dist/rules/specs.js +0 -192
  218. package/dist/rules/specs.js.map +0 -1
  219. package/dist/rules/structure.d.ts +0 -13
  220. package/dist/rules/structure.d.ts.map +0 -1
  221. package/dist/rules/structure.js +0 -142
  222. package/dist/rules/structure.js.map +0 -1
  223. package/dist/rules/types.d.ts +0 -52
  224. package/dist/rules/types.d.ts.map +0 -1
  225. package/dist/rules/types.js +0 -2
  226. package/dist/rules/types.js.map +0 -1
  227. package/dist/rules/valid-describe-refs.d.ts +0 -7
  228. package/dist/rules/valid-describe-refs.d.ts.map +0 -1
  229. package/dist/rules/valid-describe-refs.js +0 -51
  230. package/dist/rules/valid-describe-refs.js.map +0 -1
  231. package/dist/rules/valid-detour-refs.d.ts +0 -6
  232. package/dist/rules/valid-detour-refs.d.ts.map +0 -1
  233. package/dist/rules/valid-detour-refs.js +0 -116
  234. package/dist/rules/valid-detour-refs.js.map +0 -1
  235. package/src/__tests__/cli.test.ts +0 -198
  236. package/src/__tests__/drift.test.ts +0 -74
  237. package/src/__tests__/formatters.test.ts +0 -157
  238. package/src/__tests__/implementation-returns-result.test.ts +0 -75
  239. package/src/__tests__/no-direct-implementation-call.test.ts +0 -83
  240. package/src/__tests__/no-sync-result-assumption.test.ts +0 -85
  241. package/src/__tests__/no-throw-in-detour-target.test.ts +0 -78
  242. package/src/__tests__/prefer-schema-inference.test.ts +0 -84
  243. package/src/__tests__/rules.test.ts +0 -188
  244. package/src/__tests__/valid-describe-refs.test.ts +0 -60
  245. package/src/rules/no-direct-impl-in-route.ts +0 -77
  246. package/src/rules/no-throw-in-detour-target.ts +0 -150
  247. package/src/rules/valid-detour-refs.ts +0 -187
  248. package/tsconfig.json +0 -9
  249. package/tsconfig.tsbuildinfo +0 -1
@@ -1,231 +0,0 @@
1
- /**
2
- * Finds implementations that return raw values instead of `Result`.
3
- *
4
- * Uses AST parsing to find `implementation:` 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 { findImplementationBodies, 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 === 'implementation';
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
- // Return statement checking
113
- // ---------------------------------------------------------------------------
114
- /** Check return statements in a block body for non-Result returns. */
115
- const checkReturnStatements = (blockBody, trailInfo, filePath, sourceCode, helperNames, diagnostics) => {
116
- const resultVars = new Set();
117
- walk(blockBody, (node) => {
118
- if (node.type === 'VariableDeclarator') {
119
- trackResultVariable(node, resultVars);
120
- }
121
- if (node.type !== 'ReturnStatement') {
122
- return;
123
- }
124
- const { argument } = node;
125
- // Bare return — not a value return
126
- if (!argument) {
127
- return;
128
- }
129
- if (isAllowedReturnArgument(argument, helperNames, resultVars)) {
130
- return;
131
- }
132
- diagnostics.push({
133
- filePath,
134
- line: offsetToLine(sourceCode, node.start),
135
- message: `${trailInfo.label} "${trailInfo.id}" implementation must return Result.ok(...) or Result.err(...), not a raw value.`,
136
- rule: 'implementation-returns-result',
137
- severity: 'error',
138
- });
139
- });
140
- };
141
- // ---------------------------------------------------------------------------
142
- // Result helper name collection
143
- // ---------------------------------------------------------------------------
144
- /** Check if a return type annotation mentions Result. */
145
- const hasResultReturnType = (node, sourceCode) => {
146
- const { returnType } = node;
147
- if (!returnType) {
148
- return false;
149
- }
150
- const annotationText = sourceCode.slice(returnType.start, returnType.end);
151
- return /\bResult\s*</.test(annotationText);
152
- };
153
- const isFunctionLikeExpression = (node) => node.type === 'ArrowFunctionExpression' || node.type === 'FunctionExpression';
154
- /** Collect names of top-level functions/consts with explicit Result return types. */
155
- const collectResultHelperNames = (ast, sourceCode) => {
156
- const names = new Set();
157
- walk(ast, (node) => {
158
- if (node.type === 'VariableDeclarator') {
159
- const { id } = node;
160
- const { init } = node;
161
- if (id?.type === 'Identifier' &&
162
- init &&
163
- isFunctionLikeExpression(init) &&
164
- hasResultReturnType(init, sourceCode)) {
165
- names.add(id.name);
166
- }
167
- }
168
- if (node.type === 'FunctionDeclaration') {
169
- const { id } = node;
170
- if (id?.type === 'Identifier' && hasResultReturnType(node, sourceCode)) {
171
- names.add(id.name);
172
- }
173
- }
174
- });
175
- return names;
176
- };
177
- // ---------------------------------------------------------------------------
178
- // Per-implementation checking
179
- // ---------------------------------------------------------------------------
180
- const checkImplementation = (implValue, info, filePath, sourceCode, helperNames, diagnostics) => {
181
- const fnBody = implValue.body;
182
- if (!fnBody) {
183
- return;
184
- }
185
- if (fnBody.type === 'BlockStatement' || fnBody.type === 'FunctionBody') {
186
- checkReturnStatements(fnBody, info, filePath, sourceCode, helperNames, diagnostics);
187
- return;
188
- }
189
- if (!isResultExpression(fnBody) && !isHelperCall(fnBody, helperNames)) {
190
- diagnostics.push({
191
- filePath,
192
- line: offsetToLine(sourceCode, implValue.start),
193
- message: `${info.label} "${info.id}" implementation must return Result.ok(...) or Result.err(...), not a raw value.`,
194
- rule: 'implementation-returns-result',
195
- severity: 'error',
196
- });
197
- }
198
- };
199
- // ---------------------------------------------------------------------------
200
- // Rule
201
- // ---------------------------------------------------------------------------
202
- const checkAllDefinitions = (ast, filePath, sourceCode) => {
203
- const diagnostics = [];
204
- const helperNames = collectResultHelperNames(ast, sourceCode);
205
- for (const def of findTrailDefinitions(ast)) {
206
- const info = { id: def.id, label: def.kind === 'hike' ? 'Hike' : 'Trail' };
207
- for (const implValue of findImplementationBodies(def.config)) {
208
- checkImplementation(implValue, info, filePath, sourceCode, helperNames, diagnostics);
209
- }
210
- }
211
- return diagnostics;
212
- };
213
- /**
214
- * Finds implementations that return raw values instead of `Result`.
215
- */
216
- export const implementationReturnsResult = {
217
- check(sourceCode, filePath) {
218
- if (isTestFile(filePath)) {
219
- return [];
220
- }
221
- const ast = parse(filePath, sourceCode);
222
- if (!ast) {
223
- return [];
224
- }
225
- return checkAllDefinitions(ast, filePath, sourceCode);
226
- },
227
- description: 'Disallow implementations that return raw values instead of Result.ok() or Result.err().',
228
- name: 'implementation-returns-result',
229
- severity: 'error',
230
- };
231
- //# 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,22 +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
- /**
14
- * All built-in warden rules, keyed by rule name.
15
- *
16
- * Rules that duplicate validateTopo checks (follows-trails-exist,
17
- * no-recursive-follows, event-origins-exist, examples-match-schema,
18
- * require-output-schema) and follows-matches-calls (now covered by
19
- * testExamples follows coverage) have been removed.
20
- */
21
- export declare const wardenRules: ReadonlyMap<string, WardenRule>;
22
- //# 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;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CActD,CAAC"}
@@ -1,41 +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
- /**
22
- * All built-in warden rules, keyed by rule name.
23
- *
24
- * Rules that duplicate validateTopo checks (follows-trails-exist,
25
- * no-recursive-follows, event-origins-exist, examples-match-schema,
26
- * require-output-schema) and follows-matches-calls (now covered by
27
- * testExamples follows coverage) have been removed.
28
- */
29
- export const wardenRules = new Map([
30
- [noThrowInImplementation.name, noThrowInImplementation],
31
- [contextNoSurfaceTypes.name, contextNoSurfaceTypes],
32
- [preferSchemaInference.name, preferSchemaInference],
33
- [validDescribeRefs.name, validDescribeRefs],
34
- [validDetourRefs.name, validDetourRefs],
35
- [noDirectImplementationCall.name, noDirectImplementationCall],
36
- [noSyncResultAssumption.name, noSyncResultAssumption],
37
- [implementationReturnsResult.name, implementationReturnsResult],
38
- [noThrowInDetourTarget.name, noThrowInDetourTarget],
39
- [noDirectImplInRoute.name, noDirectImplInRoute],
40
- ]);
41
- //# 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;;;;;;;GAOG;AACH,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 hike implementations that call `.implementation()` directly.
3
- *
4
- * Uses AST parsing to find hike definition bodies and check for
5
- * `.implementation()` call expressions.
6
- */
7
- import type { WardenRule } from './types.js';
8
- /**
9
- * Detects routes that call another trail's `.implementation()` 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;AAUH,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AA+B/D;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,UA2BjC,CAAC"}
@@ -1,46 +0,0 @@
1
- /**
2
- * Detects hike implementations that call `.implementation()` directly.
3
- *
4
- * Uses AST parsing to find hike definition bodies and check for
5
- * `.implementation()` call expressions.
6
- */
7
- import { findImplementationBodies, findTrailDefinitions, isImplementationCall, offsetToLine, parse, walk, } from './ast.js';
8
- const findImplCallsInHike = (def, filePath, sourceCode, diagnostics) => {
9
- for (const body of findImplementationBodies(def.config)) {
10
- walk(body, (node) => {
11
- if (isImplementationCall(node)) {
12
- diagnostics.push({
13
- filePath,
14
- line: offsetToLine(sourceCode, node.start),
15
- message: 'Use ctx.follow("trailId", input) instead of direct .implementation() calls. ctx.follow() validates input and propagates tracing.',
16
- rule: 'no-direct-impl-in-route',
17
- severity: 'warn',
18
- });
19
- }
20
- });
21
- }
22
- };
23
- /**
24
- * Detects routes that call another trail's `.implementation()` directly.
25
- */
26
- export const noDirectImplInRoute = {
27
- check(sourceCode, filePath) {
28
- if (!/\bhike\s*\(/.test(sourceCode)) {
29
- return [];
30
- }
31
- const ast = parse(filePath, sourceCode);
32
- if (!ast) {
33
- return [];
34
- }
35
- const diagnostics = [];
36
- const hikeDefs = findTrailDefinitions(ast).filter((d) => d.kind === 'hike');
37
- for (const def of hikeDefs) {
38
- findImplCallsInHike(def, filePath, sourceCode, diagnostics);
39
- }
40
- return diagnostics;
41
- },
42
- description: 'Prefer ctx.follow() over direct .implementation() calls in route bodies.',
43
- name: 'no-direct-impl-in-route',
44
- severity: 'warn',
45
- };
46
- //# 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,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,KAAK,EACL,IAAI,GACL,MAAM,UAAU,CAAC;AAUlB,MAAM,mBAAmB,GAAG,CAC1B,GAAiC,EACjC,QAAgB,EAChB,UAAkB,EAClB,WAA+B,EACzB,EAAE;IACR,KAAK,MAAM,IAAI,IAAI,wBAAwB,CAAC,GAAG,CAAC,MAAiB,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YAClB,IAAI,oBAAoB,CAAC,IAAe,CAAC,EAAE,CAAC;gBAC1C,WAAW,CAAC,IAAI,CAAC;oBACf,QAAQ;oBACR,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;oBAC1C,OAAO,EACL,kIAAkI;oBACpI,IAAI,EAAE,yBAAyB;oBAC/B,QAAQ,EAAE,MAAM;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,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,QAAQ,GAAG,oBAAoB,CAAC,GAAc,CAAC,CAAC,MAAM,CAC1D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CACzB,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,WAAW,EACT,0EAA0E;IAC5E,IAAI,EAAE,yBAAyB;IAE/B,QAAQ,EAAE,MAAM;CACjB,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Flags direct `.implementation()` calls in application code.
3
- *
4
- * Uses AST parsing to find `.implementation()` call expressions,
5
- * ignoring occurrences in strings and comments.
6
- */
7
- import type { WardenRule } from './types.js';
8
- /**
9
- * Flags direct `.implementation()` 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 `.implementation()` calls in application code.
3
- *
4
- * Uses AST parsing to find `.implementation()` call expressions,
5
- * ignoring occurrences in strings and comments.
6
- */
7
- import { isImplementationCall, offsetToLine, parse, walk } from './ast.js';
8
- import { isFrameworkInternalFile, isTestFile } from './scan.js';
9
- /**
10
- * Flags direct `.implementation()` 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 (isImplementationCall(node)) {
24
- diagnostics.push({
25
- filePath,
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.',
28
- rule: 'no-direct-implementation-call',
29
- severity: 'warn',
30
- });
31
- }
32
- });
33
- return diagnostics;
34
- },
35
- description: 'Disallow direct .implementation() 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,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,6 +0,0 @@
1
- import type { WardenRule } from './types.js';
2
- /**
3
- * Flags code that assumes `.implementation()` 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 = /\.implementation\s*\(/;
4
- const isAwaitedImplementationCall = (line) => {
5
- const callIndex = line.indexOf('.implementation(');
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: .implementation() returns Promise<Result> after normalization. Use `const result = await trail.implementation(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 `.implementation()` 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 .implementation() 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":"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"}
@@ -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"}