@ontrails/warden 1.0.0-beta.1 → 1.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-lint.log +1 -1
- package/CHANGELOG.md +174 -0
- package/README.md +31 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +23 -9
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/rules/ast.d.ts +39 -9
- package/dist/rules/ast.d.ts.map +1 -1
- package/dist/rules/ast.js +227 -53
- package/dist/rules/ast.js.map +1 -1
- package/dist/rules/context-no-surface-types.js +1 -1
- package/dist/rules/context-no-surface-types.js.map +1 -1
- package/dist/rules/follow-declarations.d.ts +13 -0
- package/dist/rules/follow-declarations.d.ts.map +1 -0
- package/dist/rules/follow-declarations.js +264 -0
- package/dist/rules/follow-declarations.js.map +1 -0
- package/dist/rules/implementation-returns-result.d.ts +1 -1
- package/dist/rules/implementation-returns-result.d.ts.map +1 -1
- package/dist/rules/implementation-returns-result.js +52 -6
- package/dist/rules/implementation-returns-result.js.map +1 -1
- package/dist/rules/index.d.ts +4 -8
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +10 -8
- 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.d.ts.map +1 -1
- package/dist/rules/no-direct-impl-in-route.js +15 -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/service-declarations.d.ts +14 -0
- package/dist/rules/service-declarations.d.ts.map +1 -0
- package/dist/rules/service-declarations.js +343 -0
- package/dist/rules/service-declarations.js.map +1 -0
- package/dist/rules/service-exists.d.ts +6 -0
- package/dist/rules/service-exists.d.ts.map +1 -0
- package/dist/rules/service-exists.js +89 -0
- package/dist/rules/service-exists.js.map +1 -0
- package/dist/rules/specs.d.ts +1 -1
- package/dist/rules/specs.d.ts.map +1 -1
- package/dist/rules/specs.js +2 -2
- package/dist/rules/specs.js.map +1 -1
- package/dist/rules/types.d.ts +2 -0
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/trails/context-no-surface-types.trail.d.ts +13 -0
- package/dist/trails/context-no-surface-types.trail.d.ts.map +1 -0
- package/dist/trails/context-no-surface-types.trail.js +21 -0
- package/dist/trails/context-no-surface-types.trail.js.map +1 -0
- package/dist/trails/follow-declarations.trail.d.ts +13 -0
- package/dist/trails/follow-declarations.trail.d.ts.map +1 -0
- package/dist/trails/follow-declarations.trail.js +22 -0
- package/dist/trails/follow-declarations.trail.js.map +1 -0
- package/dist/trails/implementation-returns-result.trail.d.ts +13 -0
- package/dist/trails/implementation-returns-result.trail.d.ts.map +1 -0
- package/dist/trails/implementation-returns-result.trail.js +20 -0
- package/dist/trails/implementation-returns-result.trail.js.map +1 -0
- package/dist/trails/index.d.ts +16 -0
- package/dist/trails/index.d.ts.map +1 -0
- package/dist/trails/index.js +15 -0
- package/dist/trails/index.js.map +1 -0
- package/dist/trails/no-direct-impl-in-route.trail.d.ts +13 -0
- package/dist/trails/no-direct-impl-in-route.trail.d.ts.map +1 -0
- package/dist/trails/no-direct-impl-in-route.trail.js +22 -0
- package/dist/trails/no-direct-impl-in-route.trail.js.map +1 -0
- package/dist/trails/no-direct-implementation-call.trail.d.ts +13 -0
- package/dist/trails/no-direct-implementation-call.trail.d.ts.map +1 -0
- package/dist/trails/no-direct-implementation-call.trail.js +16 -0
- package/dist/trails/no-direct-implementation-call.trail.js.map +1 -0
- package/dist/trails/no-sync-result-assumption.trail.d.ts +13 -0
- package/dist/trails/no-sync-result-assumption.trail.d.ts.map +1 -0
- package/dist/trails/no-sync-result-assumption.trail.js +19 -0
- package/dist/trails/no-sync-result-assumption.trail.js.map +1 -0
- package/dist/trails/no-throw-in-detour-target.trail.d.ts +15 -0
- package/dist/trails/no-throw-in-detour-target.trail.d.ts.map +1 -0
- package/dist/trails/no-throw-in-detour-target.trail.js +20 -0
- package/dist/trails/no-throw-in-detour-target.trail.js.map +1 -0
- package/dist/trails/no-throw-in-implementation.trail.d.ts +13 -0
- package/dist/trails/no-throw-in-implementation.trail.d.ts.map +1 -0
- package/dist/trails/no-throw-in-implementation.trail.js +20 -0
- package/dist/trails/no-throw-in-implementation.trail.js.map +1 -0
- package/dist/trails/prefer-schema-inference.trail.d.ts +13 -0
- package/dist/trails/prefer-schema-inference.trail.d.ts.map +1 -0
- package/dist/trails/prefer-schema-inference.trail.js +21 -0
- package/dist/trails/prefer-schema-inference.trail.js.map +1 -0
- package/dist/trails/run.d.ts +17 -0
- package/dist/trails/run.d.ts.map +1 -0
- package/dist/trails/run.js +39 -0
- package/dist/trails/run.js.map +1 -0
- package/dist/trails/schema.d.ts +53 -0
- package/dist/trails/schema.d.ts.map +1 -0
- package/dist/trails/schema.js +42 -0
- package/dist/trails/schema.js.map +1 -0
- package/dist/trails/service-declarations.trail.d.ts +13 -0
- package/dist/trails/service-declarations.trail.d.ts.map +1 -0
- package/dist/trails/service-declarations.trail.js +25 -0
- package/dist/trails/service-declarations.trail.js.map +1 -0
- package/dist/trails/service-exists.trail.d.ts +15 -0
- package/dist/trails/service-exists.trail.d.ts.map +1 -0
- package/dist/trails/service-exists.trail.js +27 -0
- package/dist/trails/service-exists.trail.js.map +1 -0
- package/dist/trails/topo.d.ts +3 -0
- package/dist/trails/topo.d.ts.map +1 -0
- package/dist/trails/topo.js +5 -0
- package/dist/trails/topo.js.map +1 -0
- package/dist/trails/valid-describe-refs.trail.d.ts +15 -0
- package/dist/trails/valid-describe-refs.trail.d.ts.map +1 -0
- package/dist/trails/valid-describe-refs.trail.js +18 -0
- package/dist/trails/valid-describe-refs.trail.js.map +1 -0
- package/dist/trails/valid-detour-refs.trail.d.ts +15 -0
- package/dist/trails/valid-detour-refs.trail.d.ts.map +1 -0
- package/dist/trails/valid-detour-refs.trail.js +24 -0
- package/dist/trails/valid-detour-refs.trail.js.map +1 -0
- package/dist/trails/wrap-rule.d.ts +29 -0
- package/dist/trails/wrap-rule.d.ts.map +1 -0
- package/dist/trails/wrap-rule.js +47 -0
- package/dist/trails/wrap-rule.js.map +1 -0
- package/package.json +5 -4
- package/src/__tests__/cli.test.ts +7 -7
- package/src/__tests__/drift.test.ts +1 -1
- package/src/__tests__/follow-declarations.test.ts +303 -0
- package/src/__tests__/implementation-returns-result.test.ts +60 -6
- package/src/__tests__/no-direct-implementation-call.test.ts +8 -8
- 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__/rules.test.ts +59 -20
- package/src/__tests__/service-declarations.test.ts +318 -0
- package/src/__tests__/service-exists.test.ts +122 -0
- package/src/__tests__/trails.test.ts +19 -0
- package/src/__tests__/valid-describe-refs.test.ts +4 -4
- package/src/__tests__/wrap-rule.test.ts +41 -0
- package/src/cli.ts +37 -9
- package/src/index.ts +25 -0
- package/src/rules/ast.ts +292 -63
- package/src/rules/context-no-surface-types.ts +1 -1
- package/src/rules/follow-declarations.ts +380 -0
- package/src/rules/implementation-returns-result.ts +63 -6
- package/src/rules/index.ts +10 -8
- package/src/rules/no-direct-impl-in-route.ts +20 -16
- 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 +618 -0
- package/src/rules/service-exists.ts +177 -0
- package/src/rules/specs.ts +5 -5
- package/src/rules/types.ts +2 -0
- package/src/trails/context-no-surface-types.trail.ts +21 -0
- package/src/trails/follow-declarations.trail.ts +22 -0
- package/src/trails/implementation-returns-result.trail.ts +20 -0
- package/src/trails/index.ts +16 -0
- package/src/trails/no-direct-impl-in-route.trail.ts +22 -0
- package/src/trails/no-direct-implementation-call.trail.ts +16 -0
- package/src/trails/no-sync-result-assumption.trail.ts +19 -0
- package/src/trails/no-throw-in-detour-target.trail.ts +20 -0
- package/src/trails/no-throw-in-implementation.trail.ts +20 -0
- package/src/trails/prefer-schema-inference.trail.ts +21 -0
- package/src/trails/run.ts +53 -0
- package/src/trails/schema.ts +50 -0
- package/src/trails/service-declarations.trail.ts +25 -0
- package/src/trails/service-exists.trail.ts +27 -0
- package/src/trails/topo.ts +6 -0
- package/src/trails/valid-describe-refs.trail.ts +18 -0
- package/src/trails/valid-detour-refs.trail.ts +24 -0
- package/src/trails/wrap-rule.ts +92 -0
- package/tsconfig.tsbuildinfo +1 -1
package/.turbo/turbo-lint.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,179 @@
|
|
|
1
1
|
# @ontrails/warden
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.11
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add services as a first-class primitive.
|
|
8
|
+
|
|
9
|
+
Services make infrastructure dependencies declarative, injectable, and governable. Define a service with `service()`, declare it on a trail with `services: [db]`, and access it with `db.from(ctx)` or `ctx.service()`.
|
|
10
|
+
|
|
11
|
+
**Core:** `service()` factory, `ServiceSpec<T>`, `ServiceContext`, singleton resolution in `executeTrail`, in-flight creation dedup, `isService` guard, `findDuplicateServiceId`, topo service discovery and validation, `services` field on trail specs.
|
|
12
|
+
|
|
13
|
+
**Testing:** Auto-resolution of `mock` factories in `testAll`, `testExamples`, `testContracts`, and `testFollows`. Explicit `services` overrides with correct precedence (`explicit > ctx.extensions > auto-mock`). Service mock propagation through follow graphs.
|
|
14
|
+
|
|
15
|
+
**Warden:** `service-declarations` rule validates `db.from(ctx)` and `ctx.service()` usage matches declared `services: [...]`. `service-exists` rule validates declared service IDs resolve in project context. Scope-aware AST walking skips nested function boundaries.
|
|
16
|
+
|
|
17
|
+
**Surfaces:** Service overrides thread through `dispatch` and `blaze` on CLI, MCP, and HTTP.
|
|
18
|
+
|
|
19
|
+
**Introspection:** Survey and surface map outputs include service graph. Topo exposes `.services`, `.getService()`, `.hasService()`, `.listServices()`, `.serviceIds()`, `.serviceCount`.
|
|
20
|
+
|
|
21
|
+
**Docs:** ADR-009 accepted. Unified services guide, updated vocabulary, getting-started, architecture, and package READMEs.
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- Updated dependencies
|
|
26
|
+
- @ontrails/core@1.0.0-beta.11
|
|
27
|
+
- @ontrails/schema@1.0.0-beta.11
|
|
28
|
+
|
|
29
|
+
## 1.0.0-beta.10
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- Cleanup and hardening pass across all packages.
|
|
34
|
+
|
|
35
|
+
**core**: Deduplicate `DispatchOptions` as type alias of `ExecuteTrailOptions`. Replace `TrailContext` index signature with typed `extensions` field for type safety. Deep-merge `extensions` in `executeTrail` context resolution. Remove unused `Surface` type, `adapters.ts`, `health.ts`, and `job.ts` proof-of-concept from published package.
|
|
36
|
+
|
|
37
|
+
**cli**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `blaze()` with opt-out via `validate: false`.
|
|
38
|
+
|
|
39
|
+
**http**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `blaze()` with opt-out.
|
|
40
|
+
|
|
41
|
+
**mcp**: Remove vestigial `kind` checks from build. Run `validateTopo()` automatically in `blaze()` with opt-out.
|
|
42
|
+
|
|
43
|
+
**warden**: Project-aware rule context preserved in trail wrappers.
|
|
44
|
+
|
|
45
|
+
- Updated dependencies
|
|
46
|
+
- @ontrails/core@1.0.0-beta.10
|
|
47
|
+
- @ontrails/schema@1.0.0-beta.10
|
|
48
|
+
|
|
49
|
+
## 1.0.0-beta.9
|
|
50
|
+
|
|
51
|
+
### Minor Changes
|
|
52
|
+
|
|
53
|
+
- Consolidated improvements across all surface packages.
|
|
54
|
+
|
|
55
|
+
**core**: Add `TrailResult<T>` utility type, `topo.ids()` and `topo.count` accessors, `dispatch()` for headless trail execution, and extract shared `executeTrail` pipeline used by CLI/MCP/HTTP.
|
|
56
|
+
|
|
57
|
+
**http**: Detect route path collisions and return `Result` from `buildHttpRoutes()`, wire request `AbortSignal` through to trail context, and make write → POST mapping explicit in intent-to-method lookup.
|
|
58
|
+
|
|
59
|
+
**mcp**: Return `Result` from `buildMcpTools()` on collision instead of throwing.
|
|
60
|
+
|
|
61
|
+
**cli**: Verify exception catching via centralized `executeTrail`.
|
|
62
|
+
|
|
63
|
+
**testing**: Follow context awareness improvements.
|
|
64
|
+
|
|
65
|
+
**warden**: Refactor rules as composable trails with examples.
|
|
66
|
+
|
|
67
|
+
**schema**: Error code and empty body fixes.
|
|
68
|
+
|
|
69
|
+
### Patch Changes
|
|
70
|
+
|
|
71
|
+
- Updated dependencies
|
|
72
|
+
- @ontrails/core@1.0.0-beta.9
|
|
73
|
+
- @ontrails/schema@1.0.0-beta.9
|
|
74
|
+
|
|
75
|
+
## 1.0.0-beta.8
|
|
76
|
+
|
|
77
|
+
### Patch Changes
|
|
78
|
+
|
|
79
|
+
- Updated dependencies
|
|
80
|
+
- @ontrails/schema@1.0.0-beta.8
|
|
81
|
+
- @ontrails/core@1.0.0-beta.8
|
|
82
|
+
|
|
83
|
+
## 1.0.0-beta.7
|
|
84
|
+
|
|
85
|
+
### Patch Changes
|
|
86
|
+
|
|
87
|
+
- Updated dependencies
|
|
88
|
+
- @ontrails/schema@1.0.0-beta.7
|
|
89
|
+
- @ontrails/core@1.0.0-beta.7
|
|
90
|
+
|
|
91
|
+
## 1.0.0-beta.6
|
|
92
|
+
|
|
93
|
+
### Patch Changes
|
|
94
|
+
|
|
95
|
+
- Fix Codex review findings on type-utils and follow-declarations.
|
|
96
|
+
|
|
97
|
+
**core**: `inputOf()`/`outputOf()` now preserve the exact Zod schema subtype instead of widening to `z.ZodType`.
|
|
98
|
+
|
|
99
|
+
**warden**: `follow-declarations` rule now recognizes single-object trail overload, detects any context parameter name (not just `ctx`), matches destructured `follow()` calls, resolves const identifiers in `follow` arrays, and restricts run body extraction to top-level config properties.
|
|
100
|
+
|
|
101
|
+
- Updated dependencies
|
|
102
|
+
- @ontrails/core@1.0.0-beta.6
|
|
103
|
+
- @ontrails/schema@1.0.0-beta.6
|
|
104
|
+
|
|
105
|
+
## 1.0.0-beta.5
|
|
106
|
+
|
|
107
|
+
### Minor Changes
|
|
108
|
+
|
|
109
|
+
- Type utilities and follow-declarations warden rule.
|
|
110
|
+
|
|
111
|
+
**core**: Add `TrailInput<T>`, `TrailOutput<T>` utility types and `inputOf()`, `outputOf()` runtime schema accessors.
|
|
112
|
+
|
|
113
|
+
**warden**: Add `follow-declarations` rule — statically analyzes `ctx.follow()` calls against declared `follow: [...]` arrays. Errors on undeclared calls, warns on unused declarations.
|
|
114
|
+
|
|
115
|
+
### Patch Changes
|
|
116
|
+
|
|
117
|
+
- Updated dependencies
|
|
118
|
+
- @ontrails/core@1.0.0-beta.5
|
|
119
|
+
- @ontrails/schema@1.0.0-beta.5
|
|
120
|
+
|
|
121
|
+
## 1.0.0-beta.4
|
|
122
|
+
|
|
123
|
+
### Major Changes
|
|
124
|
+
|
|
125
|
+
- API simplification: unified trail model, intent enum, run, metadata.
|
|
126
|
+
|
|
127
|
+
**BREAKING CHANGES:**
|
|
128
|
+
|
|
129
|
+
- `hike()` removed — use `trail()` with optional `follow: [...]` field
|
|
130
|
+
- `follows` renamed to `follow` (singular, matching `ctx.follow()`)
|
|
131
|
+
- `topo.hikes` removed — single `topo.trails` map
|
|
132
|
+
- `kind: 'hike'` removed — everything is `kind: 'trail'`
|
|
133
|
+
- `readOnly`/`destructive` booleans replaced by `intent: 'read' | 'write' | 'destroy'`
|
|
134
|
+
- `implementation` field renamed to `run`
|
|
135
|
+
- `markers` field renamed to `metadata`
|
|
136
|
+
- `testHike` renamed to `testFollows`, `HikeScenario` to `FollowScenario`
|
|
137
|
+
- `blaze()` now returns the surface handle (`Command` for CLI, `Server` for MCP)
|
|
138
|
+
|
|
139
|
+
### Patch Changes
|
|
140
|
+
|
|
141
|
+
- Updated dependencies
|
|
142
|
+
- @ontrails/core@1.0.0-beta.4
|
|
143
|
+
- @ontrails/schema@1.0.0-beta.4
|
|
144
|
+
|
|
145
|
+
## 1.0.0-beta.3
|
|
146
|
+
|
|
147
|
+
### Minor Changes
|
|
148
|
+
|
|
149
|
+
- Bug fixes across all surface packages found via parallel Codex review.
|
|
150
|
+
|
|
151
|
+
**core**: Fix Result.toJson false circular detection on DAGs, deserializeError subclass round-trip, topo cross-kind ID collisions, validateTopo multi-node cycle detection, error example input validation bypass, and deriveFields array type collapse.
|
|
152
|
+
|
|
153
|
+
**cli**: Switch blaze to parseAsync for proper async error handling, add boolean flag negation (--no-flag), and strict number parsing that rejects partial input.
|
|
154
|
+
|
|
155
|
+
**mcp**: Align BlobRef with core (including ReadableStream support) and detect tool-name collisions after normalization.
|
|
156
|
+
|
|
157
|
+
**testing**: Include hikes in testContracts validation, with follow-context awareness.
|
|
158
|
+
|
|
159
|
+
**warden**: Collect hike detour targets, validate detour refs in hike specs, and stop implementation-returns-result from walking into nested function bodies.
|
|
160
|
+
|
|
161
|
+
### Patch Changes
|
|
162
|
+
|
|
163
|
+
- Updated dependencies
|
|
164
|
+
- @ontrails/core@1.0.0-beta.3
|
|
165
|
+
- @ontrails/schema@1.0.0-beta.3
|
|
166
|
+
|
|
167
|
+
## 1.0.0-beta.2
|
|
168
|
+
|
|
169
|
+
### Patch Changes
|
|
170
|
+
|
|
171
|
+
- Fix workspace dependency resolution in published packages. Now using bun publish
|
|
172
|
+
which correctly replaces workspace:^ with actual version numbers.
|
|
173
|
+
- Updated dependencies
|
|
174
|
+
- @ontrails/core@1.0.0-beta.2
|
|
175
|
+
- @ontrails/schema@1.0.0-beta.2
|
|
176
|
+
|
|
3
177
|
## 1.0.0-beta.1
|
|
4
178
|
|
|
5
179
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# @ontrails/warden
|
|
2
2
|
|
|
3
|
-
AST-based code convention rules for Trails.
|
|
3
|
+
AST-based code convention rules for Trails. 13 lint rules that catch contract violations at development time, plus surface lock drift detection and CI formatters.
|
|
4
4
|
|
|
5
|
-
Structural checks (
|
|
5
|
+
Structural checks (follow target existence, declared service existence, recursive follow, example schema validation) live in `validateTopo()` from `@ontrails/core`. Warden handles the code-level rules that need AST analysis.
|
|
6
6
|
|
|
7
7
|
## Usage
|
|
8
8
|
|
|
@@ -28,15 +28,18 @@ console.log(formatWardenReport(report));
|
|
|
28
28
|
|
|
29
29
|
| Rule | Severity | What it catches |
|
|
30
30
|
| --- | --- | --- |
|
|
31
|
-
| `no-throw-in-implementation` | error | `throw` inside
|
|
32
|
-
| `implementation-returns-result` | error |
|
|
31
|
+
| `no-throw-in-implementation` | error | `throw` inside run bodies |
|
|
32
|
+
| `implementation-returns-result` | error | Run functions returning raw values instead of `Result` |
|
|
33
33
|
| `context-no-surface-types` | error | Surface type imports (`Request`, `McpSession`) in trail files |
|
|
34
|
-
| `no-sync-result-assumption` | error | Missing `await` on
|
|
34
|
+
| `no-sync-result-assumption` | error | Missing `await` on run results |
|
|
35
35
|
| `valid-detour-refs` | error | Detour targets that do not exist in the topo |
|
|
36
36
|
| `no-throw-in-detour-target` | error | `throw` inside detour target trails |
|
|
37
|
-
| `no-direct-implementation-call` | warn | Direct `.
|
|
38
|
-
| `no-direct-impl-in-route` | warn | Direct `.
|
|
37
|
+
| `no-direct-implementation-call` | warn | Direct `.run()` calls bypassing `ctx.follow()` |
|
|
38
|
+
| `no-direct-impl-in-route` | warn | Direct `.run()` calls inside trail bodies with `follow` |
|
|
39
39
|
| `prefer-schema-inference` | warn | Redundant field overrides already derivable from the schema |
|
|
40
|
+
| `follow-declarations` | error/warn | `ctx.follow()` calls that drift from declared `follow: [...]` |
|
|
41
|
+
| `service-declarations` | error/warn | `service.from(ctx)` / `ctx.service()` usage that drifts from declared `services: [...]` |
|
|
42
|
+
| `service-exists` | error | Declared or referenced service IDs that do not resolve in project context |
|
|
40
43
|
| `valid-describe-refs` | warn | `@see` refs in `.describe()` that do not resolve |
|
|
41
44
|
|
|
42
45
|
## Drift detection
|
|
@@ -70,6 +73,25 @@ CI formatters for structured output:
|
|
|
70
73
|
import { formatGitHubAnnotations, formatJson, formatSummary } from '@ontrails/warden';
|
|
71
74
|
```
|
|
72
75
|
|
|
76
|
+
## Trail-based API
|
|
77
|
+
|
|
78
|
+
Every built-in warden rule is also available as a composable trail. This makes rules queryable, testable, and invocable through any Trails surface.
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { wardenTopo, runWardenTrails } from '@ontrails/warden';
|
|
82
|
+
|
|
83
|
+
// Inspect the warden rule trails
|
|
84
|
+
console.log(wardenTopo.ids()); // ['warden.rule.no-throw-in-implementation', ...]
|
|
85
|
+
|
|
86
|
+
// Run all rule trails against a source file
|
|
87
|
+
const diagnostics = await runWardenTrails(filePath, sourceCode, {
|
|
88
|
+
knownTrailIds: myApp.ids(),
|
|
89
|
+
knownServiceIds: myApp.serviceIds(),
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
To wrap a custom rule as a trail, use `wrapRule` (imported from `@ontrails/warden/trails/wrap-rule`). This is the same factory used internally to build all built-in rule trails.
|
|
94
|
+
|
|
73
95
|
## API
|
|
74
96
|
|
|
75
97
|
| Export | What it does |
|
|
@@ -78,6 +100,8 @@ import { formatGitHubAnnotations, formatJson, formatSummary } from '@ontrails/wa
|
|
|
78
100
|
| `formatWardenReport(report)` | Human-readable report |
|
|
79
101
|
| `checkDrift(app)` | Check if `surface.lock` matches the current topo |
|
|
80
102
|
| `wardenRules` | Registry of all built-in rules |
|
|
103
|
+
| `wardenTopo` | `Topo` of all built-in rule trails (one per rule) |
|
|
104
|
+
| `runWardenTrails(filePath, sourceCode, options?)` | Dispatch all rule trails for a file, collect diagnostics |
|
|
81
105
|
| `formatGitHubAnnotations(report)` | GitHub Actions annotation format |
|
|
82
106
|
| `formatJson(report)` | Machine-readable JSON |
|
|
83
107
|
| `formatSummary(report)` | Compact summary line |
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAU9C,OAAO,KAAK,EAGV,gBAAgB,EAEjB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACnC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAoND;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,UAAS,aAAkB,KAC1B,OAAO,CAAC,YAAY,CAqBtB,CAAC;AAsDF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,YAAY,KAAG,MAmBzD,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { resolve } from 'node:path';
|
|
8
8
|
import { checkDrift } from './drift.js';
|
|
9
|
-
import { findConfigProperty, findTrailDefinitions, parse, walk, } from './rules/ast.js';
|
|
9
|
+
import { collectServiceDefinitionIds, findConfigProperty, findTrailDefinitions, parse, walk, } from './rules/ast.js';
|
|
10
10
|
import { wardenRules } from './rules/index.js';
|
|
11
11
|
/**
|
|
12
12
|
* Collect all .ts files under a directory, excluding node_modules, dist, and .git.
|
|
@@ -67,6 +67,15 @@ const collectDetourTargetTrailIds = (sourceCode, filePath, detourTargetTrailIds)
|
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
|
+
const collectKnownServiceIds = (sourceCode, filePath, knownServiceIds) => {
|
|
71
|
+
const ast = parse(filePath, sourceCode);
|
|
72
|
+
if (!ast) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
for (const id of collectServiceDefinitionIds(ast)) {
|
|
76
|
+
knownServiceIds.add(id);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
70
79
|
const loadSourceFiles = async (rootDir) => {
|
|
71
80
|
const sourceFiles = [];
|
|
72
81
|
for (const filePath of collectTsFiles(rootDir)) {
|
|
@@ -82,14 +91,10 @@ const loadSourceFiles = async (rootDir) => {
|
|
|
82
91
|
}
|
|
83
92
|
return sourceFiles;
|
|
84
93
|
};
|
|
85
|
-
const
|
|
86
|
-
const knownTrailIds = new Set([
|
|
87
|
-
...appTopo.trails.keys(),
|
|
88
|
-
...appTopo.hikes.keys(),
|
|
89
|
-
]);
|
|
94
|
+
const collectTopoDetourTargetTrailIds = (appTopo) => {
|
|
90
95
|
const detourTargetTrailIds = new Set();
|
|
91
|
-
for (const
|
|
92
|
-
const detours =
|
|
96
|
+
for (const trail of appTopo.trails.values()) {
|
|
97
|
+
const detours = trail['detours'];
|
|
93
98
|
if (!detours) {
|
|
94
99
|
continue;
|
|
95
100
|
}
|
|
@@ -99,17 +104,26 @@ const buildProjectContextFromTopo = (appTopo) => {
|
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
}
|
|
102
|
-
return
|
|
107
|
+
return detourTargetTrailIds;
|
|
108
|
+
};
|
|
109
|
+
const buildProjectContextFromTopo = (appTopo) => {
|
|
110
|
+
const knownTrailIds = new Set(appTopo.trails.keys());
|
|
111
|
+
const knownServiceIds = new Set(appTopo.services.keys());
|
|
112
|
+
const detourTargetTrailIds = collectTopoDetourTargetTrailIds(appTopo);
|
|
113
|
+
return { detourTargetTrailIds, knownServiceIds, knownTrailIds };
|
|
103
114
|
};
|
|
104
115
|
const buildProjectContextFromFiles = (sourceFiles) => {
|
|
105
116
|
const knownTrailIds = new Set();
|
|
117
|
+
const knownServiceIds = new Set();
|
|
106
118
|
const detourTargetTrailIds = new Set();
|
|
107
119
|
for (const sourceFile of sourceFiles) {
|
|
108
120
|
collectKnownTrailIds(sourceFile.sourceCode, sourceFile.filePath, knownTrailIds);
|
|
121
|
+
collectKnownServiceIds(sourceFile.sourceCode, sourceFile.filePath, knownServiceIds);
|
|
109
122
|
collectDetourTargetTrailIds(sourceFile.sourceCode, sourceFile.filePath, detourTargetTrailIds);
|
|
110
123
|
}
|
|
111
124
|
return {
|
|
112
125
|
detourTargetTrailIds,
|
|
126
|
+
knownServiceIds,
|
|
113
127
|
knownTrailIds,
|
|
114
128
|
};
|
|
115
129
|
};
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export { noSyncResultAssumption } from './rules/no-sync-result-assumption.js';
|
|
|
16
16
|
export { implementationReturnsResult } from './rules/implementation-returns-result.js';
|
|
17
17
|
export { noThrowInDetourTarget } from './rules/no-throw-in-detour-target.js';
|
|
18
18
|
export { preferSchemaInference } from './rules/prefer-schema-inference.js';
|
|
19
|
+
export { serviceDeclarations } from './rules/service-declarations.js';
|
|
20
|
+
export { serviceExists } from './rules/service-exists.js';
|
|
19
21
|
export { validDescribeRefs } from './rules/valid-describe-refs.js';
|
|
20
22
|
export { wardenRules } from './rules/index.js';
|
|
21
23
|
export type { WardenOptions, WardenReport } from './cli.js';
|
|
@@ -23,4 +25,8 @@ export { formatWardenReport, runWarden } from './cli.js';
|
|
|
23
25
|
export { formatGitHubAnnotations, formatJson, formatSummary, } from './formatters.js';
|
|
24
26
|
export type { DriftResult } from './drift.js';
|
|
25
27
|
export { checkDrift } from './drift.js';
|
|
28
|
+
export { wardenTopo } from './trails/topo.js';
|
|
29
|
+
export { runWardenTrails } from './trails/run.js';
|
|
30
|
+
export { contextNoSurfaceTypesTrail, diagnosticSchema, followDeclarationsTrail, implementationReturnsResultTrail, noDirectImplInRouteTrail, noDirectImplementationCallTrail, noSyncResultAssumptionTrail, noThrowInDetourTargetTrail, noThrowInImplementationTrail, preferSchemaInferenceTrail, ruleInput, ruleOutput, serviceDeclarationsTrail, serviceExistsTrail, validDescribeRefsTrail, validDetourRefsTrail, } from './trails/index.js';
|
|
31
|
+
export type { RuleInput, RuleOutput } from './trails/index.js';
|
|
26
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,gCAAgC,EAChC,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,SAAS,EACT,UAAU,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,8 @@ export { noSyncResultAssumption } from './rules/no-sync-result-assumption.js';
|
|
|
16
16
|
export { implementationReturnsResult } from './rules/implementation-returns-result.js';
|
|
17
17
|
export { noThrowInDetourTarget } from './rules/no-throw-in-detour-target.js';
|
|
18
18
|
export { preferSchemaInference } from './rules/prefer-schema-inference.js';
|
|
19
|
+
export { serviceDeclarations } from './rules/service-declarations.js';
|
|
20
|
+
export { serviceExists } from './rules/service-exists.js';
|
|
19
21
|
export { validDescribeRefs } from './rules/valid-describe-refs.js';
|
|
20
22
|
// Rule registry
|
|
21
23
|
export { wardenRules } from './rules/index.js';
|
|
@@ -23,4 +25,8 @@ export { formatWardenReport, runWarden } from './cli.js';
|
|
|
23
25
|
// CI formatters
|
|
24
26
|
export { formatGitHubAnnotations, formatJson, formatSummary, } from './formatters.js';
|
|
25
27
|
export { checkDrift } from './drift.js';
|
|
28
|
+
// Trail layer
|
|
29
|
+
export { wardenTopo } from './trails/topo.js';
|
|
30
|
+
export { runWardenTrails } from './trails/run.js';
|
|
31
|
+
export { contextNoSurfaceTypesTrail, diagnosticSchema, followDeclarationsTrail, implementationReturnsResultTrail, noDirectImplInRouteTrail, noDirectImplementationCallTrail, noSyncResultAssumptionTrail, noThrowInDetourTargetTrail, noThrowInImplementationTrail, preferSchemaInferenceTrail, ruleInput, ruleOutput, serviceDeclarationsTrail, serviceExistsTrail, validDescribeRefsTrail, validDetourRefsTrail, } from './trails/index.js';
|
|
26
32
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,mBAAmB;AACnB,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzD,gBAAgB;AAChB,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,mBAAmB;AACnB,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzD,gBAAgB;AAChB,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,gCAAgC,EAChC,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,SAAS,EACT,UAAU,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC"}
|
package/dist/rules/ast.d.ts
CHANGED
|
@@ -17,25 +17,55 @@ export interface AstNode {
|
|
|
17
17
|
}
|
|
18
18
|
/** Parse TypeScript source into an AST. Returns null on parse failure. */
|
|
19
19
|
export declare const parse: (filePath: string, sourceCode: string) => AstNode | null;
|
|
20
|
+
type WalkFn = (node: unknown, visit: (node: AstNode) => void) => void;
|
|
20
21
|
/** Walk an AST node tree, calling `visit` on every node. */
|
|
21
|
-
export declare const walk:
|
|
22
|
+
export declare const walk: WalkFn;
|
|
23
|
+
/**
|
|
24
|
+
* Walk an AST node tree without descending into nested function scopes.
|
|
25
|
+
* The root node is always traversed; only inner function boundaries are skipped.
|
|
26
|
+
* Useful for service-access analysis where inner functions may shadow
|
|
27
|
+
* the trail context parameter name.
|
|
28
|
+
*/
|
|
29
|
+
export declare const walkScope: WalkFn;
|
|
22
30
|
/** Find the byte offset's line number (1-based) in source code. */
|
|
23
31
|
export declare const offsetToLine: (sourceCode: string, offset: number) => number;
|
|
24
|
-
/**
|
|
25
|
-
export declare const
|
|
32
|
+
/** Get the name of an Identifier node, or null. */
|
|
33
|
+
export declare const identifierName: (node: AstNode | undefined) => string | null;
|
|
34
|
+
/** Check if a node is a string literal. */
|
|
35
|
+
export declare const isStringLiteral: (node: AstNode | undefined) => node is AstNode;
|
|
36
|
+
/** Extract the string value from a string literal node. */
|
|
37
|
+
export declare const getStringValue: (node: AstNode) => string | null;
|
|
38
|
+
/** Extract a string literal value, or null when the node is not a string. */
|
|
39
|
+
export declare const extractStringLiteral: (node: AstNode | undefined) => string | null;
|
|
40
|
+
/** Extract the first string argument from a CallExpression. */
|
|
41
|
+
export declare const extractFirstStringArg: (node: AstNode) => string | null;
|
|
42
|
+
/** Collect `const foo = service('id', ...)` bindings from a parsed file. */
|
|
43
|
+
export declare const collectNamedServiceIds: (ast: AstNode) => ReadonlyMap<string, string>;
|
|
44
|
+
/** Collect all inline `service('id', ...)` definition IDs from a parsed file. */
|
|
45
|
+
export declare const collectServiceDefinitionIds: (ast: AstNode) => ReadonlySet<string>;
|
|
46
|
+
/** Find a Property node by key name inside an ObjectExpression config. */
|
|
47
|
+
export declare const findConfigProperty: (config: AstNode, propertyName: string) => AstNode | null;
|
|
26
48
|
export interface TrailDefinition {
|
|
27
49
|
/** Trail ID string, e.g. "entity.show" */
|
|
28
50
|
readonly id: string;
|
|
29
|
-
/** "trail" or "
|
|
51
|
+
/** "trail" or "event" */
|
|
30
52
|
readonly kind: string;
|
|
31
|
-
/** The config object argument (second arg to trail
|
|
53
|
+
/** The config object argument (second arg to trail() call) */
|
|
32
54
|
readonly config: AstNode;
|
|
33
55
|
/** Start offset of the call expression */
|
|
34
56
|
readonly start: number;
|
|
35
57
|
}
|
|
36
|
-
/** Check if a node is a call to `.implementation()` on some object. */
|
|
37
|
-
export declare const isImplementationCall: (node: AstNode) => boolean;
|
|
38
58
|
export declare const findTrailDefinitions: (ast: AstNode) => TrailDefinition[];
|
|
39
|
-
/**
|
|
40
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Find `run:` property values.
|
|
61
|
+
*
|
|
62
|
+
* When given an ObjectExpression (trail config), returns only its direct `run:`
|
|
63
|
+
* properties. When given a full AST, finds trail definitions first and extracts
|
|
64
|
+
* `run:` from each config — in both cases ignoring nested `run:` properties
|
|
65
|
+
* (e.g. `metadata: { run: ... }`).
|
|
66
|
+
*/
|
|
67
|
+
export declare const findRunBodies: (node: AstNode) => AstNode[];
|
|
68
|
+
/** Check if a node is a call to `.run()` on some object. */
|
|
69
|
+
export declare const isRunCall: (node: AstNode) => boolean;
|
|
70
|
+
export {};
|
|
41
71
|
//# 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,
|
|
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,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,GACjC,KAAK,OAAO,KACX,WAAW,CAAC,MAAM,EAAE,MAAM,CAwB5B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,2BAA2B,GACtC,KAAK,OAAO,KACX,WAAW,CAAC,MAAM,CAepB,CAAC;AAMF,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,OAAO,EACf,cAAc,MAAM,KACnB,OAAO,GAAG,IAcZ,CAAC;AAMF,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AA2FD,eAAO,MAAM,oBAAoB,GAAI,KAAK,OAAO,KAAG,eAAe,EAWlE,CAAC;AAyBF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,OAAO,KAAG,OAAO,EAWpD,CAAC;AAMF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,GAAI,MAAM,OAAO,KAAG,OAmBzC,CAAC"}
|