@ontrails/warden 1.0.0-beta.12 → 1.0.0-beta.13
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.
- package/CHANGELOG.md +51 -31
- package/README.md +17 -17
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -10
- package/dist/cli.js.map +1 -1
- package/dist/drift.d.ts +6 -6
- package/dist/drift.d.ts.map +1 -1
- package/dist/drift.js +8 -8
- package/dist/drift.js.map +1 -1
- package/dist/formatters.js +2 -2
- package/dist/formatters.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/rules/ast.d.ts +15 -11
- package/dist/rules/ast.d.ts.map +1 -1
- package/dist/rules/ast.js +34 -30
- package/dist/rules/ast.js.map +1 -1
- package/dist/rules/context-no-trailhead-types.d.ts +12 -0
- package/dist/rules/context-no-trailhead-types.d.ts.map +1 -0
- package/dist/rules/context-no-trailhead-types.js +96 -0
- package/dist/rules/context-no-trailhead-types.js.map +1 -0
- package/dist/rules/cross-declarations.d.ts +13 -0
- package/dist/rules/cross-declarations.d.ts.map +1 -0
- package/dist/rules/cross-declarations.js +264 -0
- package/dist/rules/cross-declarations.js.map +1 -0
- package/dist/rules/follow-declarations.d.ts +1 -1
- package/dist/rules/follow-declarations.js +5 -5
- package/dist/rules/follow-declarations.js.map +1 -1
- package/dist/rules/implementation-returns-result.d.ts +2 -2
- package/dist/rules/implementation-returns-result.js +6 -6
- package/dist/rules/implementation-returns-result.js.map +1 -1
- package/dist/rules/index.d.ts +4 -4
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +12 -12
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/no-direct-impl-in-route.d.ts +4 -4
- package/dist/rules/no-direct-impl-in-route.js +14 -14
- package/dist/rules/no-direct-impl-in-route.js.map +1 -1
- package/dist/rules/no-direct-implementation-call.d.ts +3 -3
- package/dist/rules/no-direct-implementation-call.js +7 -7
- package/dist/rules/no-direct-implementation-call.js.map +1 -1
- package/dist/rules/no-sync-result-assumption.d.ts +1 -1
- package/dist/rules/no-sync-result-assumption.js +5 -5
- package/dist/rules/no-sync-result-assumption.js.map +1 -1
- package/dist/rules/no-throw-in-detour-target.js +2 -2
- package/dist/rules/no-throw-in-detour-target.js.map +1 -1
- package/dist/rules/no-throw-in-implementation.d.ts +1 -1
- package/dist/rules/no-throw-in-implementation.js +3 -3
- package/dist/rules/no-throw-in-implementation.js.map +1 -1
- package/dist/rules/provision-declarations.d.ts +14 -0
- package/dist/rules/provision-declarations.d.ts.map +1 -0
- package/dist/rules/provision-declarations.js +344 -0
- package/dist/rules/provision-declarations.js.map +1 -0
- package/dist/rules/provision-exists.d.ts +6 -0
- package/dist/rules/provision-exists.d.ts.map +1 -0
- package/dist/rules/provision-exists.js +89 -0
- package/dist/rules/provision-exists.js.map +1 -0
- package/dist/rules/service-declarations.d.ts +7 -5
- package/dist/rules/service-declarations.d.ts.map +1 -1
- package/dist/rules/service-declarations.js +106 -103
- package/dist/rules/service-declarations.js.map +1 -1
- package/dist/rules/service-exists.d.ts +3 -1
- package/dist/rules/service-exists.d.ts.map +1 -1
- package/dist/rules/service-exists.js +35 -33
- package/dist/rules/service-exists.js.map +1 -1
- package/dist/rules/specs.d.ts +1 -1
- package/dist/rules/specs.d.ts.map +1 -1
- package/dist/rules/specs.js +1 -1
- package/dist/rules/specs.js.map +1 -1
- package/dist/rules/types.d.ts +2 -2
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/trails/context-no-surface-types.trail.js +1 -1
- package/dist/trails/context-no-trailhead-types.trail.d.ts +13 -0
- package/dist/trails/context-no-trailhead-types.trail.d.ts.map +1 -0
- package/dist/trails/context-no-trailhead-types.trail.js +21 -0
- package/dist/trails/context-no-trailhead-types.trail.js.map +1 -0
- package/dist/trails/cross-declarations.trail.d.ts +13 -0
- package/dist/trails/cross-declarations.trail.d.ts.map +1 -0
- package/dist/trails/cross-declarations.trail.js +22 -0
- package/dist/trails/cross-declarations.trail.js.map +1 -0
- package/dist/trails/follow-declarations.trail.js +1 -1
- package/dist/trails/implementation-returns-result.trail.js +1 -1
- package/dist/trails/index.d.ts +4 -4
- package/dist/trails/index.d.ts.map +1 -1
- package/dist/trails/index.js +4 -4
- package/dist/trails/index.js.map +1 -1
- package/dist/trails/no-direct-impl-in-route.trail.js +4 -4
- package/dist/trails/no-direct-impl-in-route.trail.js.map +1 -1
- package/dist/trails/no-direct-implementation-call.trail.js +2 -2
- package/dist/trails/no-direct-implementation-call.trail.js.map +1 -1
- package/dist/trails/no-sync-result-assumption.trail.js +2 -2
- package/dist/trails/no-sync-result-assumption.trail.js.map +1 -1
- package/dist/trails/no-throw-in-detour-target.trail.d.ts +1 -1
- package/dist/trails/no-throw-in-detour-target.trail.js +1 -1
- package/dist/trails/no-throw-in-implementation.trail.js +1 -1
- package/dist/trails/prefer-schema-inference.trail.js +1 -1
- package/dist/trails/provision-declarations.trail.d.ts +13 -0
- package/dist/trails/provision-declarations.trail.d.ts.map +1 -0
- package/dist/trails/provision-declarations.trail.js +25 -0
- package/dist/trails/provision-declarations.trail.js.map +1 -0
- package/dist/trails/provision-exists.trail.d.ts +15 -0
- package/dist/trails/provision-exists.trail.d.ts.map +1 -0
- package/dist/trails/provision-exists.trail.js +27 -0
- package/dist/trails/provision-exists.trail.js.map +1 -0
- package/dist/trails/run.d.ts +2 -2
- package/dist/trails/run.d.ts.map +1 -1
- package/dist/trails/run.js +6 -6
- package/dist/trails/run.js.map +1 -1
- package/dist/trails/schema.d.ts +1 -1
- package/dist/trails/schema.js +2 -2
- package/dist/trails/schema.js.map +1 -1
- package/dist/trails/service-declarations.trail.d.ts +13 -0
- package/dist/trails/service-declarations.trail.d.ts.map +1 -1
- package/dist/trails/service-declarations.trail.js +9 -7
- package/dist/trails/service-declarations.trail.js.map +1 -1
- package/dist/trails/service-exists.trail.d.ts +17 -0
- package/dist/trails/service-exists.trail.d.ts.map +1 -1
- package/dist/trails/service-exists.trail.js +10 -8
- package/dist/trails/service-exists.trail.js.map +1 -1
- package/dist/trails/valid-describe-refs.trail.d.ts +1 -1
- package/dist/trails/valid-detour-refs.trail.d.ts +1 -1
- package/dist/trails/valid-detour-refs.trail.js +2 -2
- package/dist/trails/wrap-rule.js +14 -14
- package/dist/trails/wrap-rule.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/cli.test.ts +8 -8
- package/src/__tests__/{follow-declarations.test.ts → cross-declarations.test.ts} +78 -78
- package/src/__tests__/drift.test.ts +5 -5
- package/src/__tests__/formatters.test.ts +2 -2
- package/src/__tests__/implementation-returns-result.test.ts +11 -11
- package/src/__tests__/no-direct-implementation-call.test.ts +10 -10
- package/src/__tests__/no-sync-result-assumption.test.ts +6 -6
- package/src/__tests__/no-throw-in-detour-target.test.ts +6 -6
- package/src/__tests__/prefer-schema-inference.test.ts +4 -4
- package/src/__tests__/provision-declarations.test.ts +318 -0
- package/src/__tests__/provision-exists.test.ts +122 -0
- package/src/__tests__/rules.test.ts +38 -38
- package/src/__tests__/valid-describe-refs.test.ts +4 -4
- package/src/__tests__/wrap-rule.test.ts +4 -4
- package/src/cli.ts +17 -13
- package/src/drift.ts +12 -12
- package/src/formatters.ts +2 -2
- package/src/index.ts +8 -8
- package/src/rules/ast.ts +36 -31
- package/src/rules/{context-no-surface-types.ts → context-no-trailhead-types.ts} +8 -8
- package/src/rules/{follow-declarations.ts → cross-declarations.ts} +63 -56
- package/src/rules/implementation-returns-result.ts +6 -6
- package/src/rules/index.ts +12 -12
- package/src/rules/no-direct-impl-in-route.ts +17 -17
- package/src/rules/no-direct-implementation-call.ts +7 -7
- package/src/rules/no-sync-result-assumption.ts +5 -5
- package/src/rules/no-throw-in-detour-target.ts +2 -2
- package/src/rules/no-throw-in-implementation.ts +3 -3
- package/src/rules/{service-declarations.ts → provision-declarations.ts} +145 -129
- package/src/rules/{service-exists.ts → provision-exists.ts} +51 -46
- package/src/rules/specs.ts +4 -4
- package/src/rules/types.ts +2 -2
- package/src/trails/{context-no-surface-types.trail.ts → context-no-trailhead-types.trail.ts} +5 -5
- package/src/trails/cross-declarations.trail.ts +22 -0
- package/src/trails/implementation-returns-result.trail.ts +1 -1
- package/src/trails/index.ts +4 -4
- package/src/trails/no-direct-impl-in-route.trail.ts +4 -4
- package/src/trails/no-direct-implementation-call.trail.ts +2 -2
- package/src/trails/no-sync-result-assumption.trail.ts +2 -2
- package/src/trails/no-throw-in-detour-target.trail.ts +1 -1
- package/src/trails/no-throw-in-implementation.trail.ts +1 -1
- package/src/trails/prefer-schema-inference.trail.ts +1 -1
- package/src/trails/provision-declarations.trail.ts +25 -0
- package/src/trails/provision-exists.trail.ts +27 -0
- package/src/trails/run.ts +7 -7
- package/src/trails/schema.ts +2 -2
- package/src/trails/valid-detour-refs.trail.ts +2 -2
- package/src/trails/wrap-rule.ts +17 -17
- package/tsconfig.tsbuildinfo +1 -1
- package/src/__tests__/service-declarations.test.ts +0 -318
- package/src/__tests__/service-exists.test.ts +0 -122
- package/src/trails/follow-declarations.trail.ts +0 -22
- package/src/trails/service-declarations.trail.ts +0 -25
- package/src/trails/service-exists.trail.ts +0 -27
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,KAAK,EACL,IAAI,GACL,MAAM,UAAU,CAAC;AAUlB,MAAM,+BAA+B,GAAG,CACtC,GAAiC,EACjC,QAAgB,EAChB,UAAkB,EAClB,WAA+B,EACzB,EAAE;IACR,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,GAAG,CAAC,MAAiB,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YAClB,IAAI,WAAW,CAAC,IAAe,CAAC,EAAE,CAAC;gBACjC,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,kBAAkB,GAAG,CAAC,MAAe,EAAW,EAAE,CACtD,kBAAkB,CAAC,MAAiB,EAAE,SAAS,CAAC,KAAK,IAAI,CAAC;AAE5D;;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,SAAS,GAAG,oBAAoB,CAAC,GAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClE,kBAAkB,CAAC,CAAC,CAAC,MAAiB,CAAC,CACxC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,+BAA+B,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,WAAW,EACT,+EAA+E;IACjF,IAAI,EAAE,yBAAyB;IAE/B,QAAQ,EAAE,MAAM;CACjB,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Flags direct `.
|
|
2
|
+
* Flags direct `.blaze()` calls in application code.
|
|
3
3
|
*
|
|
4
|
-
* Uses AST parsing to find `.
|
|
4
|
+
* Uses AST parsing to find `.blaze()` call expressions,
|
|
5
5
|
* ignoring occurrences in strings and comments.
|
|
6
6
|
*/
|
|
7
7
|
import type { WardenRule } from './types.js';
|
|
8
8
|
/**
|
|
9
|
-
* Flags direct `.
|
|
9
|
+
* Flags direct `.blaze()` calls in application code.
|
|
10
10
|
*/
|
|
11
11
|
export declare const noDirectImplementationCall: WardenRule;
|
|
12
12
|
//# sourceMappingURL=no-direct-implementation-call.d.ts.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Flags direct `.
|
|
2
|
+
* Flags direct `.blaze()` calls in application code.
|
|
3
3
|
*
|
|
4
|
-
* Uses AST parsing to find `.
|
|
4
|
+
* Uses AST parsing to find `.blaze()` call expressions,
|
|
5
5
|
* ignoring occurrences in strings and comments.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { isBlazeCall, offsetToLine, parse, walk } from './ast.js';
|
|
8
8
|
import { isFrameworkInternalFile, isTestFile } from './scan.js';
|
|
9
9
|
/**
|
|
10
|
-
* Flags direct `.
|
|
10
|
+
* Flags direct `.blaze()` 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 (
|
|
23
|
+
if (isBlazeCall(node)) {
|
|
24
24
|
diagnostics.push({
|
|
25
25
|
filePath,
|
|
26
26
|
line: offsetToLine(sourceCode, node.start),
|
|
27
|
-
message: 'Use ctx.
|
|
27
|
+
message: 'Use ctx.cross("trailId", input) instead of direct .blaze() calls. Direct implementation access bypasses validation, tracing, and gates.',
|
|
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 .
|
|
35
|
+
description: 'Disallow direct .blaze() calls in application code. Use ctx.cross() 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,
|
|
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,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAClE,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,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,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,8EAA8E;IAChF,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 `.
|
|
3
|
+
* Flags code that assumes `.blaze()` 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 = /\.
|
|
3
|
+
const IMPLEMENTATION_CALL_PATTERN = /\.blaze\s*\(/;
|
|
4
4
|
const isAwaitedImplementationCall = (line) => {
|
|
5
|
-
const callIndex = line.indexOf('.
|
|
5
|
+
const callIndex = line.indexOf('.blaze(');
|
|
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: .
|
|
20
|
+
const MISSING_AWAIT_MESSAGE = 'Missing await: .blaze() returns Promise<Result> after normalization. Use `const result = await trail.blaze(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 `.
|
|
85
|
+
* Flags code that assumes `.blaze()` 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 .
|
|
94
|
+
description: 'Disallow treating .blaze() 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":"AACA,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB,MAAM,qBAAqB,GACzB,qDAAqD,CAAC;AACxD,MAAM,2BAA2B,GAAG,
|
|
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 {
|
|
7
|
+
import { findBlazeBodies, 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
|
|
36
|
+
for (const body of findBlazeBodies(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":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,
|
|
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 `
|
|
2
|
+
* Finds `throw` statements inside `blaze:` 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 `
|
|
2
|
+
* Finds `throw` statements inside `blaze:` 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 {
|
|
7
|
+
import { findBlazeBodies, 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
|
|
15
|
+
for (const body of findBlazeBodies(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,
|
|
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,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGtE,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,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,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 provision access matches the declared `provisions` array.
|
|
3
|
+
*
|
|
4
|
+
* Statically analyzes trail `blaze` functions to find `db.from(ctx)` and
|
|
5
|
+
* `ctx.provision('db.main')` calls and compares them against the declared
|
|
6
|
+
* `provisions: [...]` 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 provision access aligns with declared `provisions` arrays.
|
|
12
|
+
*/
|
|
13
|
+
export declare const provisionDeclarations: WardenRule;
|
|
14
|
+
//# sourceMappingURL=provision-declarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provision-declarations.d.ts","sourceRoot":"","sources":["../../src/rules/provision-declarations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAgkB/D;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,UA8BnC,CAAC"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates that provision access matches the declared `provisions` array.
|
|
3
|
+
*
|
|
4
|
+
* Statically analyzes trail `blaze` functions to find `db.from(ctx)` and
|
|
5
|
+
* `ctx.provision('db.main')` calls and compares them against the declared
|
|
6
|
+
* `provisions: [...]` array in the trail config. Reports errors for undeclared
|
|
7
|
+
* access and warnings for unused declarations.
|
|
8
|
+
*/
|
|
9
|
+
import { collectNamedProvisionIds, extractFirstStringArg, findConfigProperty, findBlazeBodies, 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 `provision('id', ...)` call. */
|
|
22
|
+
const isInlineProvisionCall = (node) => {
|
|
23
|
+
if (node.type !== 'CallExpression') {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return (identifierName(node.callee) ===
|
|
27
|
+
'provision');
|
|
28
|
+
};
|
|
29
|
+
/** Get `provisions` array elements from a trail config. */
|
|
30
|
+
const getProvisionElements = (config) => {
|
|
31
|
+
const provisionsProp = findConfigProperty(config, 'provisions');
|
|
32
|
+
if (!provisionsProp) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const arrayNode = provisionsProp.value;
|
|
36
|
+
if (!arrayNode || arrayNode.type !== 'ArrayExpression') {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
const elements = arrayNode['elements'];
|
|
40
|
+
return elements ?? [];
|
|
41
|
+
};
|
|
42
|
+
/** Extract one declared provision from a `provisions` array element. */
|
|
43
|
+
const extractDeclaredProvision = (element, provisionIdsByName) => {
|
|
44
|
+
if (element.type === 'Identifier') {
|
|
45
|
+
const name = identifierName(element);
|
|
46
|
+
return {
|
|
47
|
+
id: name ? (provisionIdsByName.get(name) ?? null) : null,
|
|
48
|
+
name,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (isStringLiteral(element)) {
|
|
52
|
+
return { id: getStringValue(element), name: null };
|
|
53
|
+
}
|
|
54
|
+
if (isInlineProvisionCall(element)) {
|
|
55
|
+
return { id: extractFirstStringArg(element), name: null };
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
};
|
|
59
|
+
/** Extract declared provisions from a trail config's `provisions` array. */
|
|
60
|
+
const extractDeclaredProvisions = (config, provisionIdsByName) => getProvisionElements(config).flatMap((element) => {
|
|
61
|
+
const provision = extractDeclaredProvision(element, provisionIdsByName);
|
|
62
|
+
return provision ? [provision] : [];
|
|
63
|
+
});
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Called service extraction
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
/** Extract the second parameter name from a blaze function node. */
|
|
68
|
+
const extractContextParamName = (blazeBody) => {
|
|
69
|
+
const params = blazeBody['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.provision(...)` call. */
|
|
119
|
+
const isMemberProvisionCall = (callee, ctxNames) => {
|
|
120
|
+
const pair = extractMemberPair(callee);
|
|
121
|
+
return !!pair && ctxNames.has(pair.objName) && pair.propName === 'provision';
|
|
122
|
+
};
|
|
123
|
+
/** Extract `ctx.provision(db)` and destructured `provision(db)` lookup names. */
|
|
124
|
+
const extractLookupProvisionName = (node, ctxNames, provisionAliases) => {
|
|
125
|
+
const callee = extractCallCallee(node);
|
|
126
|
+
if (!callee) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
if (isMemberProvisionCall(callee, ctxNames)) {
|
|
130
|
+
return extractFirstIdentifierArg(node);
|
|
131
|
+
}
|
|
132
|
+
if (provisionAliases.has(identifierName(callee) ?? '')) {
|
|
133
|
+
return extractFirstIdentifierArg(node);
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
};
|
|
137
|
+
/** Extract `ctx.provision('id')` and destructured `provision('id')` lookup IDs. */
|
|
138
|
+
const extractLookupProvisionId = (node, ctxNames, provisionAliases) => {
|
|
139
|
+
const callee = extractCallCallee(node);
|
|
140
|
+
if (!callee) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
if (isMemberProvisionCall(callee, ctxNames)) {
|
|
144
|
+
return extractFirstStringArg(node);
|
|
145
|
+
}
|
|
146
|
+
const calleeName = identifierName(callee);
|
|
147
|
+
const args = node['arguments'];
|
|
148
|
+
if (calleeName && provisionAliases.has(calleeName) && args?.length === 1) {
|
|
149
|
+
return extractFirstStringArg(node);
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
};
|
|
153
|
+
/** Collect local aliases for the provision accessor (e.g. `const { provision } = ctx`). */
|
|
154
|
+
const collectProvisionAliases = (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 !== 'provision') {
|
|
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 blaze bodies and collect provision access that can be resolved statically. */
|
|
190
|
+
const extractCalledProvisions = (config) => {
|
|
191
|
+
const fromNames = new Set();
|
|
192
|
+
const lookupIds = new Set();
|
|
193
|
+
const lookupNames = new Set();
|
|
194
|
+
for (const body of findBlazeBodies(config)) {
|
|
195
|
+
const ctxNames = buildCtxNames(body);
|
|
196
|
+
const provisionAliases = collectProvisionAliases(body, ctxNames);
|
|
197
|
+
walkScope(body, (node) => {
|
|
198
|
+
const fromName = extractFromCallName(node, ctxNames);
|
|
199
|
+
if (fromName) {
|
|
200
|
+
fromNames.add(fromName);
|
|
201
|
+
}
|
|
202
|
+
const lookupId = extractLookupProvisionId(node, ctxNames, provisionAliases);
|
|
203
|
+
if (lookupId) {
|
|
204
|
+
lookupIds.add(lookupId);
|
|
205
|
+
}
|
|
206
|
+
const lookupName = extractLookupProvisionName(node, ctxNames, provisionAliases);
|
|
207
|
+
if (lookupName) {
|
|
208
|
+
lookupNames.add(lookupName);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return { fromNames, lookupIds, lookupNames };
|
|
213
|
+
};
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
// Diagnostics
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
const renderDeclaredProvision = (provision) => provision.name ?? provision.id ?? '<unknown>';
|
|
218
|
+
const buildUndeclaredFromDiagnostic = (trailId, provisionName, filePath, line) => ({
|
|
219
|
+
filePath,
|
|
220
|
+
line,
|
|
221
|
+
message: `Trail "${trailId}": ${provisionName}.from(ctx) called but '${provisionName}' is not declared in provisions`,
|
|
222
|
+
rule: 'provision-declarations',
|
|
223
|
+
severity: 'error',
|
|
224
|
+
});
|
|
225
|
+
const buildUndeclaredLookupDiagnostic = (trailId, provisionId, filePath, line) => ({
|
|
226
|
+
filePath,
|
|
227
|
+
line,
|
|
228
|
+
message: `Trail "${trailId}": ctx.provision('${provisionId}') called but '${provisionId}' is not declared in provisions`,
|
|
229
|
+
rule: 'provision-declarations',
|
|
230
|
+
severity: 'error',
|
|
231
|
+
});
|
|
232
|
+
const buildUndeclaredLookupNameDiagnostic = (trailId, provisionName, filePath, line) => ({
|
|
233
|
+
filePath,
|
|
234
|
+
line,
|
|
235
|
+
message: `Trail "${trailId}": ctx.provision(${provisionName}) called but '${provisionName}' is not declared in provisions`,
|
|
236
|
+
rule: 'provision-declarations',
|
|
237
|
+
severity: 'error',
|
|
238
|
+
});
|
|
239
|
+
const buildUnusedDiagnostic = (trailId, declaredProvision, filePath, line) => ({
|
|
240
|
+
filePath,
|
|
241
|
+
line,
|
|
242
|
+
message: `Trail "${trailId}": '${renderDeclaredProvision(declaredProvision)}' declared in provisions but never used`,
|
|
243
|
+
rule: 'provision-declarations',
|
|
244
|
+
severity: 'warn',
|
|
245
|
+
});
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
// Comparison
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
const provisionWasUsed = (declaredProvision, calledProvisions) => {
|
|
250
|
+
if (declaredProvision.name &&
|
|
251
|
+
(calledProvisions.fromNames.has(declaredProvision.name) ||
|
|
252
|
+
calledProvisions.lookupNames.has(declaredProvision.name))) {
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
if (declaredProvision.id &&
|
|
256
|
+
calledProvisions.lookupIds.has(declaredProvision.id)) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
return false;
|
|
260
|
+
};
|
|
261
|
+
const buildDeclaredNames = (declaredProvisions) => new Set(declaredProvisions.flatMap((provision) => provision.name ? [provision.name] : []));
|
|
262
|
+
const buildDeclaredIds = (declaredProvisions) => new Set(declaredProvisions.flatMap((provision) => provision.id ? [provision.id] : []));
|
|
263
|
+
const reportUndeclaredFromCalls = (trailId, filePath, line, calledProvisions, declaredNames, diagnostics) => {
|
|
264
|
+
for (const provisionName of calledProvisions.fromNames) {
|
|
265
|
+
if (!declaredNames.has(provisionName)) {
|
|
266
|
+
diagnostics.push(buildUndeclaredFromDiagnostic(trailId, provisionName, filePath, line));
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
const reportUndeclaredLookupCalls = (trailId, filePath, line, calledProvisions, declaredIds, declaredNames, diagnostics) => {
|
|
271
|
+
for (const provisionName of calledProvisions.lookupNames) {
|
|
272
|
+
// Name-based lookup checks remain reliable even when an imported provision ID
|
|
273
|
+
// cannot be resolved locally.
|
|
274
|
+
if (!declaredNames.has(provisionName)) {
|
|
275
|
+
diagnostics.push(buildUndeclaredLookupNameDiagnostic(trailId, provisionName, filePath, line));
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
for (const provisionId of calledProvisions.lookupIds) {
|
|
279
|
+
if (!declaredIds.has(provisionId)) {
|
|
280
|
+
diagnostics.push(buildUndeclaredLookupDiagnostic(trailId, provisionId, filePath, line));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
const reportUnusedDeclarations = (trailId, filePath, line, declaredProvisions, calledProvisions, diagnostics) => {
|
|
285
|
+
for (const declaredProvision of declaredProvisions) {
|
|
286
|
+
if (provisionWasUsed(declaredProvision, calledProvisions)) {
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
if (declaredProvision.name && declaredProvision.id === null) {
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
diagnostics.push(buildUnusedDiagnostic(trailId, declaredProvision, filePath, line));
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
const hasNoProvisionActivity = (declaredProvisions, calledProvisions) => declaredProvisions.length === 0 &&
|
|
296
|
+
calledProvisions.fromNames.size === 0 &&
|
|
297
|
+
calledProvisions.lookupIds.size === 0 &&
|
|
298
|
+
calledProvisions.lookupNames.size === 0;
|
|
299
|
+
const analyzeTrailServices = (def, sourceCode, provisionIdsByName) => {
|
|
300
|
+
const declaredProvisions = extractDeclaredProvisions(def.config, provisionIdsByName);
|
|
301
|
+
return {
|
|
302
|
+
calledProvisions: extractCalledProvisions(def.config),
|
|
303
|
+
declaredIds: buildDeclaredIds(declaredProvisions),
|
|
304
|
+
declaredNames: buildDeclaredNames(declaredProvisions),
|
|
305
|
+
declaredProvisions,
|
|
306
|
+
line: offsetToLine(sourceCode, def.start),
|
|
307
|
+
};
|
|
308
|
+
};
|
|
309
|
+
const checkTrailDefinition = (def, filePath, sourceCode, provisionIdsByName, diagnostics) => {
|
|
310
|
+
const { calledProvisions, declaredIds, declaredNames, declaredProvisions, line, } = analyzeTrailServices(def, sourceCode, provisionIdsByName);
|
|
311
|
+
if (hasNoProvisionActivity(declaredProvisions, calledProvisions)) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
reportUndeclaredFromCalls(def.id, filePath, line, calledProvisions, declaredNames, diagnostics);
|
|
315
|
+
reportUndeclaredLookupCalls(def.id, filePath, line, calledProvisions, declaredIds, declaredNames, diagnostics);
|
|
316
|
+
reportUnusedDeclarations(def.id, filePath, line, declaredProvisions, calledProvisions, diagnostics);
|
|
317
|
+
};
|
|
318
|
+
// ---------------------------------------------------------------------------
|
|
319
|
+
// Rule
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
/**
|
|
322
|
+
* Validates that provision access aligns with declared `provisions` arrays.
|
|
323
|
+
*/
|
|
324
|
+
export const provisionDeclarations = {
|
|
325
|
+
check(sourceCode, filePath) {
|
|
326
|
+
if (isTestFile(filePath)) {
|
|
327
|
+
return [];
|
|
328
|
+
}
|
|
329
|
+
const ast = parse(filePath, sourceCode);
|
|
330
|
+
if (!ast) {
|
|
331
|
+
return [];
|
|
332
|
+
}
|
|
333
|
+
const diagnostics = [];
|
|
334
|
+
const provisionIdsByName = collectNamedProvisionIds(ast);
|
|
335
|
+
for (const def of findTrailDefinitions(ast)) {
|
|
336
|
+
checkTrailDefinition(def, filePath, sourceCode, provisionIdsByName, diagnostics);
|
|
337
|
+
}
|
|
338
|
+
return diagnostics;
|
|
339
|
+
},
|
|
340
|
+
description: 'Ensure provision.from(ctx) and ctx.provision() calls match the declared provisions array in trail definitions.',
|
|
341
|
+
name: 'provision-declarations',
|
|
342
|
+
severity: 'error',
|
|
343
|
+
};
|
|
344
|
+
//# sourceMappingURL=provision-declarations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provision-declarations.js","sourceRoot":"","sources":["../../src/rules/provision-declarations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provision-exists.d.ts","sourceRoot":"","sources":["../../src/rules/provision-exists.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AAiIpB;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,sBA+B7B,CAAC"}
|