@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
package/dist/rules/ast.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export declare const walk: WalkFn;
|
|
|
23
23
|
/**
|
|
24
24
|
* Walk an AST node tree without descending into nested function scopes.
|
|
25
25
|
* The root node is always traversed; only inner function boundaries are skipped.
|
|
26
|
-
* Useful for
|
|
26
|
+
* Useful for provision-access analysis where inner functions may shadow
|
|
27
27
|
* the trail context parameter name.
|
|
28
28
|
*/
|
|
29
29
|
export declare const walkScope: WalkFn;
|
|
@@ -39,16 +39,20 @@ export declare const getStringValue: (node: AstNode) => string | null;
|
|
|
39
39
|
export declare const extractStringLiteral: (node: AstNode | undefined) => string | null;
|
|
40
40
|
/** Extract the first string argument from a CallExpression. */
|
|
41
41
|
export declare const extractFirstStringArg: (node: AstNode) => string | null;
|
|
42
|
-
/** Collect `const foo =
|
|
42
|
+
/** Collect `const foo = provision('id', ...)` bindings from a parsed file. */
|
|
43
|
+
export declare const collectNamedProvisionIds: (ast: AstNode) => ReadonlyMap<string, string>;
|
|
44
|
+
/** Collect all inline `provision('id', ...)` definition IDs from a parsed file. */
|
|
45
|
+
export declare const collectProvisionDefinitionIds: (ast: AstNode) => ReadonlySet<string>;
|
|
46
|
+
/** Backward-compatible aliases while the migration is in flight. */
|
|
43
47
|
export declare const collectNamedServiceIds: (ast: AstNode) => ReadonlyMap<string, string>;
|
|
44
|
-
/**
|
|
48
|
+
/** Backward-compatible aliases while the migration is in flight. */
|
|
45
49
|
export declare const collectServiceDefinitionIds: (ast: AstNode) => ReadonlySet<string>;
|
|
46
50
|
/** Find a Property node by key name inside an ObjectExpression config. */
|
|
47
51
|
export declare const findConfigProperty: (config: AstNode, propertyName: string) => AstNode | null;
|
|
48
52
|
export interface TrailDefinition {
|
|
49
53
|
/** Trail ID string, e.g. "entity.show" */
|
|
50
54
|
readonly id: string;
|
|
51
|
-
/** "trail" or "
|
|
55
|
+
/** "trail" or "signal" */
|
|
52
56
|
readonly kind: string;
|
|
53
57
|
/** The config object argument (second arg to trail() call) */
|
|
54
58
|
readonly config: AstNode;
|
|
@@ -57,15 +61,15 @@ export interface TrailDefinition {
|
|
|
57
61
|
}
|
|
58
62
|
export declare const findTrailDefinitions: (ast: AstNode) => TrailDefinition[];
|
|
59
63
|
/**
|
|
60
|
-
* Find `
|
|
64
|
+
* Find `blaze:` property values.
|
|
61
65
|
*
|
|
62
|
-
* When given an ObjectExpression (trail config), returns only its direct `
|
|
66
|
+
* When given an ObjectExpression (trail config), returns only its direct `blaze:`
|
|
63
67
|
* properties. When given a full AST, finds trail definitions first and extracts
|
|
64
|
-
* `
|
|
65
|
-
* (e.g. `
|
|
68
|
+
* `blaze:` from each config — in both cases ignoring nested `blaze:` properties
|
|
69
|
+
* (e.g. `meta: { blaze: ... }`).
|
|
66
70
|
*/
|
|
67
|
-
export declare const
|
|
68
|
-
/** Check if a node is a call to `.
|
|
69
|
-
export declare const
|
|
71
|
+
export declare const findBlazeBodies: (node: AstNode) => AstNode[];
|
|
72
|
+
/** Check if a node is a call to `.blaze()` on some object. */
|
|
73
|
+
export declare const isBlazeCall: (node: AstNode) => boolean;
|
|
70
74
|
export {};
|
|
71
75
|
//# sourceMappingURL=ast.d.ts.map
|
package/dist/rules/ast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/rules/ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC;IAC7C,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAMD,0EAA0E;AAC1E,eAAO,MAAM,KAAK,GAAI,UAAU,MAAM,EAAE,YAAY,MAAM,KAAG,OAAO,GAAG,IAOtE,CAAC;AAMF,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;AAkBtE,4DAA4D;AAC5D,eAAO,MAAM,IAAI,EAAE,MASlB,CAAC;AAsBF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,MASvB,CAAC;AAMF,mEAAmE;AACnE,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,EAAE,QAAQ,MAAM,KAAG,MAQjE,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,cAAc,GAAI,MAAM,OAAO,GAAG,SAAS,KAAG,MAAM,GAAG,IAKnE,CAAC;AAEF,2CAA2C;AAC3C,eAAO,MAAM,eAAe,GAAI,MAAM,OAAO,GAAG,SAAS,KAAG,IAAI,IAAI,OAWnE,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,cAAc,GAAI,MAAM,OAAO,KAAG,MAAM,GAAG,IAGvD,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,GAC/B,MAAM,OAAO,GAAG,SAAS,KACxB,MAAM,GAAG,IACiD,CAAC;AAE9D,+DAA+D;AAC/D,eAAO,MAAM,qBAAqB,GAAI,MAAM,OAAO,KAAG,MAAM,GAAG,IAQ9D,CAAC;AAqBF,
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/rules/ast.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/ast.js
CHANGED
|
@@ -62,7 +62,7 @@ const walkScopeInner = (node, visit) => {
|
|
|
62
62
|
/**
|
|
63
63
|
* Walk an AST node tree without descending into nested function scopes.
|
|
64
64
|
* The root node is always traversed; only inner function boundaries are skipped.
|
|
65
|
-
* Useful for
|
|
65
|
+
* Useful for provision-access analysis where inner functions may shadow
|
|
66
66
|
* the trail context parameter name.
|
|
67
67
|
*/
|
|
68
68
|
export const walkScope = (node, visit) => {
|
|
@@ -124,10 +124,10 @@ export const extractFirstStringArg = (node) => {
|
|
|
124
124
|
const [firstArg] = args ?? [];
|
|
125
125
|
return extractStringLiteral(firstArg);
|
|
126
126
|
};
|
|
127
|
-
const
|
|
127
|
+
const isProvisionCall = (node) => !!node &&
|
|
128
128
|
node.type === 'CallExpression' &&
|
|
129
129
|
identifierName(node.callee) ===
|
|
130
|
-
'
|
|
130
|
+
'provision';
|
|
131
131
|
const extractBindingName = (node) => {
|
|
132
132
|
if (!node) {
|
|
133
133
|
return null;
|
|
@@ -140,30 +140,30 @@ const extractBindingName = (node) => {
|
|
|
140
140
|
}
|
|
141
141
|
return null;
|
|
142
142
|
};
|
|
143
|
-
/** Collect `const foo =
|
|
144
|
-
export const
|
|
143
|
+
/** Collect `const foo = provision('id', ...)` bindings from a parsed file. */
|
|
144
|
+
export const collectNamedProvisionIds = (ast) => {
|
|
145
145
|
const ids = new Map();
|
|
146
146
|
walk(ast, (node) => {
|
|
147
147
|
if (node.type !== 'VariableDeclarator') {
|
|
148
148
|
return;
|
|
149
149
|
}
|
|
150
150
|
const { id, init } = node;
|
|
151
|
-
if (!
|
|
151
|
+
if (!isProvisionCall(init)) {
|
|
152
152
|
return;
|
|
153
153
|
}
|
|
154
154
|
const name = extractBindingName(id);
|
|
155
|
-
const
|
|
156
|
-
if (name &&
|
|
157
|
-
ids.set(name,
|
|
155
|
+
const provisionId = init ? extractFirstStringArg(init) : null;
|
|
156
|
+
if (name && provisionId) {
|
|
157
|
+
ids.set(name, provisionId);
|
|
158
158
|
}
|
|
159
159
|
});
|
|
160
160
|
return ids;
|
|
161
161
|
};
|
|
162
|
-
/** Collect all inline `
|
|
163
|
-
export const
|
|
162
|
+
/** Collect all inline `provision('id', ...)` definition IDs from a parsed file. */
|
|
163
|
+
export const collectProvisionDefinitionIds = (ast) => {
|
|
164
164
|
const ids = new Set();
|
|
165
165
|
walk(ast, (node) => {
|
|
166
|
-
if (!
|
|
166
|
+
if (!isProvisionCall(node)) {
|
|
167
167
|
return;
|
|
168
168
|
}
|
|
169
169
|
const id = extractFirstStringArg(node);
|
|
@@ -173,6 +173,10 @@ export const collectServiceDefinitionIds = (ast) => {
|
|
|
173
173
|
});
|
|
174
174
|
return ids;
|
|
175
175
|
};
|
|
176
|
+
/** Backward-compatible aliases while the migration is in flight. */
|
|
177
|
+
export const collectNamedServiceIds = collectNamedProvisionIds;
|
|
178
|
+
/** Backward-compatible aliases while the migration is in flight. */
|
|
179
|
+
export const collectServiceDefinitionIds = collectProvisionDefinitionIds;
|
|
176
180
|
// ---------------------------------------------------------------------------
|
|
177
181
|
// Config property extraction helpers
|
|
178
182
|
// ---------------------------------------------------------------------------
|
|
@@ -194,11 +198,11 @@ export const findConfigProperty = (config, propertyName) => {
|
|
|
194
198
|
};
|
|
195
199
|
/**
|
|
196
200
|
* Find all `trail("id", { ... })`, `trail({ id: "x", ... })`, and
|
|
197
|
-
* `
|
|
201
|
+
* `signal("id", { ... })` call sites.
|
|
198
202
|
*
|
|
199
203
|
* Returns the trail ID, kind, and config object node for each definition.
|
|
200
204
|
*/
|
|
201
|
-
const TRAIL_CALLEE_NAMES = new Set(['trail', '
|
|
205
|
+
const TRAIL_CALLEE_NAMES = new Set(['trail', 'signal']);
|
|
202
206
|
const getTrailCalleeName = (node) => {
|
|
203
207
|
if (node.type !== 'CallExpression') {
|
|
204
208
|
return null;
|
|
@@ -275,50 +279,50 @@ export const findTrailDefinitions = (ast) => {
|
|
|
275
279
|
return definitions;
|
|
276
280
|
};
|
|
277
281
|
// ---------------------------------------------------------------------------
|
|
278
|
-
//
|
|
282
|
+
// Blaze body extraction
|
|
279
283
|
// ---------------------------------------------------------------------------
|
|
280
284
|
/**
|
|
281
|
-
* Extract top-level `
|
|
285
|
+
* Extract top-level `blaze:` property values from an ObjectExpression's direct properties.
|
|
282
286
|
*
|
|
283
|
-
* Does not recurse into nested objects, so `
|
|
287
|
+
* Does not recurse into nested objects, so `meta: { blaze: ... }` is ignored.
|
|
284
288
|
*/
|
|
285
|
-
const
|
|
289
|
+
const extractBlazeFromConfig = (config) => {
|
|
286
290
|
const bodies = [];
|
|
287
291
|
const properties = config['properties'];
|
|
288
292
|
if (!properties) {
|
|
289
293
|
return bodies;
|
|
290
294
|
}
|
|
291
295
|
for (const prop of properties) {
|
|
292
|
-
if (prop.type === 'Property' && prop.key?.name === '
|
|
296
|
+
if (prop.type === 'Property' && prop.key?.name === 'blaze' && prop.value) {
|
|
293
297
|
bodies.push(prop.value);
|
|
294
298
|
}
|
|
295
299
|
}
|
|
296
300
|
return bodies;
|
|
297
301
|
};
|
|
298
302
|
/**
|
|
299
|
-
* Find `
|
|
303
|
+
* Find `blaze:` property values.
|
|
300
304
|
*
|
|
301
|
-
* When given an ObjectExpression (trail config), returns only its direct `
|
|
305
|
+
* When given an ObjectExpression (trail config), returns only its direct `blaze:`
|
|
302
306
|
* properties. When given a full AST, finds trail definitions first and extracts
|
|
303
|
-
* `
|
|
304
|
-
* (e.g. `
|
|
307
|
+
* `blaze:` from each config — in both cases ignoring nested `blaze:` properties
|
|
308
|
+
* (e.g. `meta: { blaze: ... }`).
|
|
305
309
|
*/
|
|
306
|
-
export const
|
|
310
|
+
export const findBlazeBodies = (node) => {
|
|
307
311
|
if (node.type === 'ObjectExpression') {
|
|
308
|
-
return
|
|
312
|
+
return extractBlazeFromConfig(node);
|
|
309
313
|
}
|
|
310
|
-
// Full AST — find trail definitions and extract
|
|
314
|
+
// Full AST — find trail definitions and extract blaze from their configs
|
|
311
315
|
const bodies = [];
|
|
312
316
|
for (const def of findTrailDefinitions(node)) {
|
|
313
|
-
bodies.push(...
|
|
317
|
+
bodies.push(...extractBlazeFromConfig(def.config));
|
|
314
318
|
}
|
|
315
319
|
return bodies;
|
|
316
320
|
};
|
|
317
321
|
// ---------------------------------------------------------------------------
|
|
318
322
|
// Misc helpers
|
|
319
323
|
// ---------------------------------------------------------------------------
|
|
320
|
-
/** Check if a node is a call to `.
|
|
321
|
-
export const
|
|
324
|
+
/** Check if a node is a call to `.blaze()` on some object. */
|
|
325
|
+
export const isBlazeCall = (node) => {
|
|
322
326
|
if (node.type !== 'CallExpression') {
|
|
323
327
|
return false;
|
|
324
328
|
}
|
|
@@ -332,6 +336,6 @@ export const isRunCall = (node) => {
|
|
|
332
336
|
}
|
|
333
337
|
const prop = callee.property;
|
|
334
338
|
return (prop?.type === 'Identifier' &&
|
|
335
|
-
prop.name === '
|
|
339
|
+
prop.name === 'blaze');
|
|
336
340
|
};
|
|
337
341
|
//# sourceMappingURL=ast.js.map
|
package/dist/rules/ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/rules/ast.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/rules/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects imports of trailhead-specific modules and types in trail files.
|
|
3
|
+
*
|
|
4
|
+
* Uses AST parsing for accurate detection — no false positives from
|
|
5
|
+
* imports in comments or strings.
|
|
6
|
+
*/
|
|
7
|
+
import type { WardenRule } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Detects imports of trailhead-specific types in trail implementation files.
|
|
10
|
+
*/
|
|
11
|
+
export declare const contextNoTrailheadTypes: WardenRule;
|
|
12
|
+
//# sourceMappingURL=context-no-trailhead-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-no-trailhead-types.d.ts","sourceRoot":"","sources":["../../src/rules/context-no-trailhead-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAgH/D;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,UA0BrC,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects imports of trailhead-specific modules and types in trail files.
|
|
3
|
+
*
|
|
4
|
+
* Uses AST parsing for accurate detection — no false positives from
|
|
5
|
+
* imports in comments or strings.
|
|
6
|
+
*/
|
|
7
|
+
import { offsetToLine, parse, walk } from './ast.js';
|
|
8
|
+
const SURFACE_MODULES = new Set([
|
|
9
|
+
'express',
|
|
10
|
+
'hono',
|
|
11
|
+
'fastify',
|
|
12
|
+
'@modelcontextprotocol/sdk',
|
|
13
|
+
'node:http',
|
|
14
|
+
'node:https',
|
|
15
|
+
'@hono/node-server',
|
|
16
|
+
'koa',
|
|
17
|
+
]);
|
|
18
|
+
const SURFACE_TYPE_NAMES = new Set([
|
|
19
|
+
'Request',
|
|
20
|
+
'Response',
|
|
21
|
+
'NextFunction',
|
|
22
|
+
'McpSession',
|
|
23
|
+
'McpCallToolRequest',
|
|
24
|
+
'IncomingMessage',
|
|
25
|
+
'ServerResponse',
|
|
26
|
+
]);
|
|
27
|
+
const makeDiag = (filePath, sourceCode, node, message) => ({
|
|
28
|
+
filePath,
|
|
29
|
+
line: offsetToLine(sourceCode, node.start),
|
|
30
|
+
message,
|
|
31
|
+
rule: 'context-no-trailhead-types',
|
|
32
|
+
severity: 'error',
|
|
33
|
+
});
|
|
34
|
+
const findSurfaceTypeName = (specifiers) => {
|
|
35
|
+
for (const spec of specifiers) {
|
|
36
|
+
const name = spec.imported?.name ?? spec.local?.name;
|
|
37
|
+
if (name && SURFACE_TYPE_NAMES.has(name)) {
|
|
38
|
+
return name;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
};
|
|
43
|
+
const getImportModuleName = (node) => {
|
|
44
|
+
if (node.type !== 'ImportDeclaration') {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const source = node['source'];
|
|
48
|
+
return source?.value ?? null;
|
|
49
|
+
};
|
|
50
|
+
const checkSpecifiersForSurfaceTypes = (node, filePath, sourceCode) => {
|
|
51
|
+
const specifiers = node['specifiers'];
|
|
52
|
+
if (!specifiers) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
const typeName = findSurfaceTypeName(specifiers);
|
|
56
|
+
if (!typeName) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
return makeDiag(filePath, sourceCode, node, `Do not import trailhead type "${typeName}" in trail implementation files.`);
|
|
60
|
+
};
|
|
61
|
+
const classifyImport = (node, filePath, sourceCode) => {
|
|
62
|
+
const moduleName = getImportModuleName(node);
|
|
63
|
+
if (!moduleName) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
if (SURFACE_MODULES.has(moduleName)) {
|
|
67
|
+
return makeDiag(filePath, sourceCode, node, `Do not import from trailhead module "${moduleName}" in trail implementation files.`);
|
|
68
|
+
}
|
|
69
|
+
return checkSpecifiersForSurfaceTypes(node, filePath, sourceCode);
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Detects imports of trailhead-specific types in trail implementation files.
|
|
73
|
+
*/
|
|
74
|
+
export const contextNoTrailheadTypes = {
|
|
75
|
+
check(sourceCode, filePath) {
|
|
76
|
+
if (!/\btrail\s*\(/.test(sourceCode)) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
const ast = parse(filePath, sourceCode);
|
|
80
|
+
if (!ast) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
const diagnostics = [];
|
|
84
|
+
walk(ast, (node) => {
|
|
85
|
+
const diag = classifyImport(node, filePath, sourceCode);
|
|
86
|
+
if (diag) {
|
|
87
|
+
diagnostics.push(diag);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return diagnostics;
|
|
91
|
+
},
|
|
92
|
+
description: 'Disallow trailhead-specific type imports (Request, Response, McpSession, etc.) in trail implementation files.',
|
|
93
|
+
name: 'context-no-trailhead-types',
|
|
94
|
+
severity: 'error',
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=context-no-trailhead-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-no-trailhead-types.js","sourceRoot":"","sources":["../../src/rules/context-no-trailhead-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates that `ctx.cross()` calls match the declared `crosses` array.
|
|
3
|
+
*
|
|
4
|
+
* Statically analyzes trail `blaze` functions to find `ctx.cross('trailId', ...)`
|
|
5
|
+
* calls and compares them against the `crosses: [...]` declaration in the trail
|
|
6
|
+
* config. Reports errors for undeclared crossings and warnings for unused ones.
|
|
7
|
+
*/
|
|
8
|
+
import type { WardenRule } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Validates that `ctx.cross()` calls align with declared `crosses` arrays.
|
|
11
|
+
*/
|
|
12
|
+
export declare const crossDeclarations: WardenRule;
|
|
13
|
+
//# sourceMappingURL=cross-declarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-declarations.d.ts","sourceRoot":"","sources":["../../src/rules/cross-declarations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAsV/D;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,UAuB/B,CAAC"}
|