@nielspeter/eess-ts 0.4.0 → 0.5.0
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/dist/builders/call-rule-builder.d.ts.map +1 -1
- package/dist/builders/call-rule-builder.js +2 -1
- package/dist/builders/call-rule-builder.js.map +1 -1
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +7 -25
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/builders/correspondence-builder.d.ts.map +1 -1
- package/dist/builders/correspondence-builder.js +6 -14
- package/dist/builders/correspondence-builder.js.map +1 -1
- package/dist/builders/cross-layer-builder.d.ts.map +1 -1
- package/dist/builders/cross-layer-builder.js +7 -6
- package/dist/builders/cross-layer-builder.js.map +1 -1
- package/dist/builders/function-rule-builder.d.ts.map +1 -1
- package/dist/builders/function-rule-builder.js +4 -13
- package/dist/builders/function-rule-builder.js.map +1 -1
- package/dist/builders/module-rule-builder.d.ts.map +1 -1
- package/dist/builders/module-rule-builder.js +4 -16
- package/dist/builders/module-rule-builder.js.map +1 -1
- package/dist/builders/slice-rule-builder.d.ts.map +1 -1
- package/dist/builders/slice-rule-builder.js +4 -3
- package/dist/builders/slice-rule-builder.js.map +1 -1
- package/dist/builders/type-rule-builder.d.ts.map +1 -1
- package/dist/builders/type-rule-builder.js +4 -13
- package/dist/builders/type-rule-builder.js.map +1 -1
- package/dist/cli/commands/baseline.d.ts +5 -1
- package/dist/cli/commands/baseline.d.ts.map +1 -1
- package/dist/cli/commands/baseline.js +47 -5
- package/dist/cli/commands/baseline.js.map +1 -1
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +155 -13
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/doctor.js +1 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/explain.js +1 -1
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/init.js +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/import-rule-module.d.ts.map +1 -1
- package/dist/cli/import-rule-module.js +1 -14
- package/dist/cli/import-rule-module.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/load-rules.d.ts.map +1 -1
- package/dist/cli/load-rules.js +5 -4
- package/dist/cli/load-rules.js.map +1 -1
- package/dist/cli/resolve-config.d.ts +0 -8
- package/dist/cli/resolve-config.d.ts.map +1 -1
- package/dist/cli/resolve-config.js +18 -48
- package/dist/cli/resolve-config.js.map +1 -1
- package/dist/cli/rule-file-findings.d.ts.map +1 -1
- package/dist/cli/rule-file-findings.js +60 -2
- package/dist/cli/rule-file-findings.js.map +1 -1
- package/dist/cli/watch.d.ts +13 -43
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +8 -148
- package/dist/cli/watch.js.map +1 -1
- package/dist/conditions/call.d.ts.map +1 -1
- package/dist/conditions/call.js +4 -3
- package/dist/conditions/call.js.map +1 -1
- package/dist/conditions/cross-layer.js +2 -2
- package/dist/conditions/cross-layer.js.map +1 -1
- package/dist/conditions/dependency.js +2 -2
- package/dist/conditions/dependency.js.map +1 -1
- package/dist/conditions/exports.d.ts.map +1 -1
- package/dist/conditions/exports.js +31 -37
- package/dist/conditions/exports.js.map +1 -1
- package/dist/conditions/function.js +1 -1
- package/dist/conditions/function.js.map +1 -1
- package/dist/conditions/jsx.js +1 -1
- package/dist/conditions/jsx.js.map +1 -1
- package/dist/conditions/members.d.ts.map +1 -1
- package/dist/conditions/members.js +3 -2
- package/dist/conditions/members.js.map +1 -1
- package/dist/conditions/reverse-dependency.d.ts.map +1 -1
- package/dist/conditions/reverse-dependency.js +47 -2
- package/dist/conditions/reverse-dependency.js.map +1 -1
- package/dist/conditions/slice.js +1 -1
- package/dist/conditions/slice.js.map +1 -1
- package/dist/conditions/structural.js +1 -1
- package/dist/conditions/structural.js.map +1 -1
- package/dist/core/check-all.d.ts.map +1 -1
- package/dist/core/check-all.js +61 -7
- package/dist/core/check-all.js.map +1 -1
- package/dist/core/combinators.d.ts.map +1 -1
- package/dist/core/combinators.js +20 -27
- package/dist/core/combinators.js.map +1 -1
- package/dist/core/descendant-cache.d.ts.map +1 -1
- package/dist/core/descendant-cache.js +5 -7
- package/dist/core/descendant-cache.js.map +1 -1
- package/dist/core/diagnose.js +15 -7
- package/dist/core/diagnose.js.map +1 -1
- package/dist/core/disk-set.js +1 -1
- package/dist/core/disk-set.js.map +1 -1
- package/dist/core/element-cache.js +1 -1
- package/dist/core/element-cache.js.map +1 -1
- package/dist/core/exclusion-comments.d.ts +15 -50
- package/dist/core/exclusion-comments.d.ts.map +1 -1
- package/dist/core/exclusion-comments.js +4 -307
- package/dist/core/exclusion-comments.js.map +1 -1
- package/dist/core/execute-rule.d.ts +8 -0
- package/dist/core/execute-rule.d.ts.map +1 -1
- package/dist/core/execute-rule.js +99 -13
- package/dist/core/execute-rule.js.map +1 -1
- package/dist/core/glob-evaluator.js +2 -2
- package/dist/core/glob-evaluator.js.map +1 -1
- package/dist/core/invalidate-on-modify.d.ts +20 -0
- package/dist/core/invalidate-on-modify.d.ts.map +1 -0
- package/dist/core/invalidate-on-modify.js +26 -0
- package/dist/core/invalidate-on-modify.js.map +1 -0
- package/dist/core/line-index.d.ts.map +1 -1
- package/dist/core/line-index.js +6 -8
- package/dist/core/line-index.js.map +1 -1
- package/dist/core/metric-violation.d.ts +1 -1
- package/dist/core/module-edges.d.ts.map +1 -1
- package/dist/core/module-edges.js +26 -25
- package/dist/core/module-edges.js.map +1 -1
- package/dist/core/orphan-exclusions.d.ts.map +1 -1
- package/dist/core/orphan-exclusions.js +15 -5
- package/dist/core/orphan-exclusions.js.map +1 -1
- package/dist/core/path-universe.d.ts +10 -42
- package/dist/core/path-universe.d.ts.map +1 -1
- package/dist/core/path-universe.js +0 -20
- package/dist/core/path-universe.js.map +1 -1
- package/dist/core/project.d.ts.map +1 -1
- package/dist/core/project.js +6 -5
- package/dist/core/project.js.map +1 -1
- package/dist/core/rule-builder.d.ts +22 -1
- package/dist/core/rule-builder.d.ts.map +1 -1
- package/dist/core/rule-builder.js +38 -20
- package/dist/core/rule-builder.js.map +1 -1
- package/dist/core/rule-declaration.d.ts.map +1 -1
- package/dist/core/rule-declaration.js +14 -52
- package/dist/core/rule-declaration.js.map +1 -1
- package/dist/core/terminal-builder.d.ts +17 -13
- package/dist/core/terminal-builder.d.ts.map +1 -1
- package/dist/core/terminal-builder.js +41 -21
- package/dist/core/terminal-builder.js.map +1 -1
- package/dist/core/terminal-execution.d.ts +22 -6
- package/dist/core/terminal-execution.d.ts.map +1 -1
- package/dist/core/terminal-execution.js +39 -7
- package/dist/core/terminal-execution.js.map +1 -1
- package/dist/core/ts-comment-mask.d.ts +2 -0
- package/dist/core/ts-comment-mask.d.ts.map +1 -0
- package/dist/core/ts-comment-mask.js +102 -0
- package/dist/core/ts-comment-mask.js.map +1 -0
- package/dist/core/vacuity-diagnosis.js +1 -1
- package/dist/core/vacuity-diagnosis.js.map +1 -1
- package/dist/graphql/graphql-rule-builder.d.ts +95 -0
- package/dist/graphql/graphql-rule-builder.d.ts.map +1 -0
- package/dist/graphql/graphql-rule-builder.js +127 -0
- package/dist/graphql/graphql-rule-builder.js.map +1 -0
- package/dist/graphql/index.d.ts +1 -0
- package/dist/graphql/index.d.ts.map +1 -1
- package/dist/graphql/index.js +1 -0
- package/dist/graphql/index.js.map +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts +22 -76
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +8 -130
- package/dist/graphql/resolver-rule-builder.js.map +1 -1
- package/dist/graphql/schema-loader.d.ts.map +1 -1
- package/dist/graphql/schema-loader.js +4 -3
- package/dist/graphql/schema-loader.js.map +1 -1
- package/dist/graphql/schema-predicates.d.ts.map +1 -1
- package/dist/graphql/schema-predicates.js +17 -12
- package/dist/graphql/schema-predicates.js.map +1 -1
- package/dist/graphql/schema-rule-builder.d.ts +21 -67
- package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
- package/dist/graphql/schema-rule-builder.js +6 -120
- package/dist/graphql/schema-rule-builder.js.map +1 -1
- package/dist/helpers/baseline-generator.d.ts +9 -0
- package/dist/helpers/baseline-generator.d.ts.map +1 -1
- package/dist/helpers/baseline-generator.js +9 -0
- package/dist/helpers/baseline-generator.js.map +1 -1
- package/dist/helpers/baseline.d.ts.map +1 -1
- package/dist/helpers/baseline.js +4 -4
- package/dist/helpers/baseline.js.map +1 -1
- package/dist/helpers/body-traversal.d.ts.map +1 -1
- package/dist/helpers/body-traversal.js +13 -0
- package/dist/helpers/body-traversal.js.map +1 -1
- package/dist/helpers/callback-extractor.js +6 -38
- package/dist/helpers/callback-extractor.js.map +1 -1
- package/dist/helpers/complexity.d.ts +1 -1
- package/dist/helpers/complexity.js +1 -1
- package/dist/helpers/diff-aware.d.ts +11 -39
- package/dist/helpers/diff-aware.d.ts.map +1 -1
- package/dist/helpers/diff-aware.js +11 -79
- package/dist/helpers/diff-aware.js.map +1 -1
- package/dist/helpers/matchers.d.ts.map +1 -1
- package/dist/helpers/matchers.js +51 -67
- package/dist/helpers/matchers.js.map +1 -1
- package/dist/index.d.ts +15 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -18
- package/dist/index.js.map +1 -1
- package/dist/models/arch-function.d.ts +26 -2
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +51 -17
- package/dist/models/arch-function.js.map +1 -1
- package/dist/models/arch-jsx-element.d.ts.map +1 -1
- package/dist/models/arch-jsx-element.js +16 -17
- package/dist/models/arch-jsx-element.js.map +1 -1
- package/dist/predicates/jsx.d.ts.map +1 -1
- package/dist/predicates/jsx.js +2 -1
- package/dist/predicates/jsx.js.map +1 -1
- package/dist/presets/agent-guardrails.d.ts +29 -3
- package/dist/presets/agent-guardrails.d.ts.map +1 -1
- package/dist/presets/agent-guardrails.js +185 -1
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/presets/boundaries.d.ts +2 -2
- package/dist/presets/boundaries.d.ts.map +1 -1
- package/dist/presets/data-layer.d.ts +2 -2
- package/dist/presets/data-layer.d.ts.map +1 -1
- package/dist/presets/index.d.ts +4 -1
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +11 -1
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layered.d.ts +2 -2
- package/dist/presets/layered.d.ts.map +1 -1
- package/dist/presets/recommended.d.ts +3 -3
- package/dist/presets/recommended.d.ts.map +1 -1
- package/dist/presets/shared.d.ts +8 -11
- package/dist/presets/shared.d.ts.map +1 -1
- package/dist/presets/shared.js +57 -28
- package/dist/presets/shared.js.map +1 -1
- package/dist/rules/metrics-function.d.ts.map +1 -1
- package/dist/rules/metrics-function.js +59 -62
- package/dist/rules/metrics-function.js.map +1 -1
- package/dist/rules/metrics.d.ts.map +1 -1
- package/dist/rules/metrics.js +62 -59
- package/dist/rules/metrics.js.map +1 -1
- package/dist/smells/clusters.d.ts +78 -0
- package/dist/smells/clusters.d.ts.map +1 -0
- package/dist/smells/clusters.js +124 -0
- package/dist/smells/clusters.js.map +1 -0
- package/dist/smells/duplicate-bodies.d.ts +38 -4
- package/dist/smells/duplicate-bodies.d.ts.map +1 -1
- package/dist/smells/duplicate-bodies.js +93 -44
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/duplicate-report.d.ts +90 -0
- package/dist/smells/duplicate-report.d.ts.map +1 -0
- package/dist/smells/duplicate-report.js +344 -0
- package/dist/smells/duplicate-report.js.map +1 -0
- package/dist/smells/fingerprint.d.ts +12 -0
- package/dist/smells/fingerprint.d.ts.map +1 -1
- package/dist/smells/fingerprint.js +8 -2
- package/dist/smells/fingerprint.js.map +1 -1
- package/dist/smells/inconsistent-siblings.js +1 -1
- package/dist/smells/inconsistent-siblings.js.map +1 -1
- package/dist/smells/similar-pairs.d.ts +9 -8
- package/dist/smells/similar-pairs.d.ts.map +1 -1
- package/dist/smells/similar-pairs.js +83 -1
- package/dist/smells/similar-pairs.js.map +1 -1
- package/dist/smells/smell-builder.d.ts.map +1 -1
- package/dist/smells/smell-builder.js +3 -2
- package/dist/smells/smell-builder.js.map +1 -1
- package/dist/smells/variation.d.ts +47 -0
- package/dist/smells/variation.d.ts.map +1 -0
- package/dist/smells/variation.js +90 -0
- package/dist/smells/variation.js.map +1 -0
- package/dist/tsconfig/tsconfig-builder.d.ts.map +1 -1
- package/dist/tsconfig/tsconfig-builder.js +3 -2
- package/dist/tsconfig/tsconfig-builder.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { stampGlobs } from '@nielspeter/eess/internal';
|
|
2
|
+
import { globAnyOf } from '@nielspeter/eess';
|
|
3
3
|
import { collectFunctions } from '../models/arch-function.js';
|
|
4
|
-
import { selectionMemo } from '@nielspeter/eess';
|
|
5
4
|
import { functionContain, functionNotContain, functionUseInsteadOf, } from '../conditions/body-analysis-function.js';
|
|
5
|
+
import { GraphqlRuleBuilder } from './graphql-rule-builder.js';
|
|
6
6
|
/**
|
|
7
7
|
* Predicate: filter to resolver functions for fields returning types matching the pattern.
|
|
8
8
|
*
|
|
@@ -42,13 +42,10 @@ export function resolveFieldReturning(pattern) {
|
|
|
42
42
|
* .check()
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
|
-
|
|
46
|
-
export class ResolverRuleBuilder extends TerminalBuilder {
|
|
45
|
+
export class ResolverRuleBuilder extends GraphqlRuleBuilder {
|
|
47
46
|
sourceFiles;
|
|
48
47
|
glob;
|
|
49
48
|
project;
|
|
50
|
-
_predicates = [];
|
|
51
|
-
_conditions = [];
|
|
52
49
|
/**
|
|
53
50
|
* @param sourceFiles - The resolver files, already filtered by `resolvers()`.
|
|
54
51
|
* @param glob - The glob they were filtered by, for diagnostics only.
|
|
@@ -99,31 +96,6 @@ export class ResolverRuleBuilder extends TerminalBuilder {
|
|
|
99
96
|
next._predicates.push(resolveFieldReturning(pattern));
|
|
100
97
|
return next;
|
|
101
98
|
}
|
|
102
|
-
// --- Chain methods ---
|
|
103
|
-
/**
|
|
104
|
-
* Begin the predicate phase. Purely a readability marker.
|
|
105
|
-
*/
|
|
106
|
-
that() {
|
|
107
|
-
return this;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Add another predicate (AND).
|
|
111
|
-
*/
|
|
112
|
-
and() {
|
|
113
|
-
return this;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Begin the condition phase.
|
|
117
|
-
*/
|
|
118
|
-
should() {
|
|
119
|
-
return this;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Add another condition (AND).
|
|
123
|
-
*/
|
|
124
|
-
andShould() {
|
|
125
|
-
return this;
|
|
126
|
-
}
|
|
127
99
|
// --- Condition methods (reuse body analysis) ---
|
|
128
100
|
/**
|
|
129
101
|
* Assert that the resolver body contains at least one match.
|
|
@@ -150,67 +122,6 @@ export class ResolverRuleBuilder extends TerminalBuilder {
|
|
|
150
122
|
return next;
|
|
151
123
|
}
|
|
152
124
|
// --- Evaluation ---
|
|
153
|
-
/**
|
|
154
|
-
* An independent copy, carrying both lists.
|
|
155
|
-
*
|
|
156
|
-
* This builder does not extend `RuleBuilder`, so it does not inherit that
|
|
157
|
-
* class's override — and neither `that()` nor `should()` forked here at all,
|
|
158
|
-
* which made the bug 0016 leak worse on this hierarchy than on the main one:
|
|
159
|
-
* a held `schema()` selection accumulated every predicate and condition of
|
|
160
|
-
* every rule derived from it. `docs/graphql.md` teaches exactly that shape.
|
|
161
|
-
*/
|
|
162
|
-
copy() {
|
|
163
|
-
const clone = super.copy();
|
|
164
|
-
clone._predicates = [...this._predicates];
|
|
165
|
-
clone._conditions = [...this._conditions];
|
|
166
|
-
return clone;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Whether this rule states an assertion at all — the assertion gate's question.
|
|
170
|
-
*
|
|
171
|
-
* True once a condition has been added.
|
|
172
|
-
*
|
|
173
|
-
* Overrides the `TerminalBuilder` default (`true`), whose JSDoc carries the
|
|
174
|
-
* contract and the reason this is public rather than protected.
|
|
175
|
-
*/
|
|
176
|
-
assertsSomething() {
|
|
177
|
-
return this._conditions.length > 0;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* The remedy for this builder's assertion-less state, as one string.
|
|
181
|
-
*
|
|
182
|
-
* One channel, so `diagnose()`'s advice and the finding's own message cannot
|
|
183
|
-
* disagree. Overrides `TerminalBuilder`'s generic text with wording specific to
|
|
184
|
-
* what this builder is missing.
|
|
185
|
-
*/
|
|
186
|
-
assertionAdvice() {
|
|
187
|
-
return ('this rule has no condition, so it asserts nothing and can never fail. Add a ' +
|
|
188
|
-
'condition after .should(), e.g. contain(...), notContain(...) or useInsteadOf(...).');
|
|
189
|
-
}
|
|
190
|
-
/** Named by id or description, not 'unnamed' (plan 0070 §4). */
|
|
191
|
-
describeRule() {
|
|
192
|
-
return {
|
|
193
|
-
...super.describeRule(),
|
|
194
|
-
rule: this._metadata?.id ?? this.buildRuleDescription(),
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* The set the conditions receive — plan 0096, and the ONE method both readers
|
|
199
|
-
* call.
|
|
200
|
-
*
|
|
201
|
-
* The first attempt at 0096 let `collectViolations()` and the evidence
|
|
202
|
-
* accessor derive this separately, and they disagreed inside one commit: this
|
|
203
|
-
* builder counted PRE-predicate while its sibling `SchemaRuleBuilder` counted
|
|
204
|
-
* post. Measured, a chain whose `.that()` selected nothing reported 14 units
|
|
205
|
-
* examined, handed its conditions 0, and passed green with `diagnose()`
|
|
206
|
-
* silent — the fail-open cell ADR-009 exists to close, inside the wave that
|
|
207
|
-
* closes it. Sharing the method is what makes "the preview derives from the
|
|
208
|
-
* same computation the gate uses" structural rather than a claim.
|
|
209
|
-
*/
|
|
210
|
-
selected() {
|
|
211
|
-
return selectionOf(this, () => this.getElements().filter((element) => this._predicates.every((predicate) => predicate.test(element))));
|
|
212
|
-
}
|
|
213
|
-
/** Units this rule examined — plan 0096. The selection, not what precedes it. */
|
|
214
125
|
/**
|
|
215
126
|
* This family counts resolvers — the resolver functions it selected.
|
|
216
127
|
*
|
|
@@ -222,34 +133,11 @@ export class ResolverRuleBuilder extends TerminalBuilder {
|
|
|
222
133
|
examinedUnitNoun() {
|
|
223
134
|
return 'resolvers';
|
|
224
135
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
* was constructed rather than defaulted.
|
|
228
|
-
*
|
|
229
|
-
* The resolvers this rule selected.
|
|
230
|
-
*/
|
|
231
|
-
examinedUnits() {
|
|
232
|
-
return this.selected().length;
|
|
136
|
+
descriptionSubject() {
|
|
137
|
+
return 'resolvers';
|
|
233
138
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if (filtered.length === 0) {
|
|
237
|
-
// Plan 0098: the early exit IS the zero-evidence case, stated rather than
|
|
238
|
-
// implied by an empty violation list.
|
|
239
|
-
return { violations: [], examined: 0 };
|
|
240
|
-
}
|
|
241
|
-
const context = {
|
|
242
|
-
rule: this.buildRuleDescription(),
|
|
243
|
-
because: this._reason,
|
|
244
|
-
ruleId: this._metadata?.id,
|
|
245
|
-
suggestion: this._metadata?.suggestion,
|
|
246
|
-
docs: this._metadata?.docs,
|
|
247
|
-
};
|
|
248
|
-
const violations = [];
|
|
249
|
-
for (const condition of this._conditions) {
|
|
250
|
-
violations.push(...condition.evaluate(filtered, context));
|
|
251
|
-
}
|
|
252
|
-
return { violations, examined: filtered.length };
|
|
139
|
+
conditionExamples() {
|
|
140
|
+
return 'contain(...), notContain(...) or useInsteadOf(...)';
|
|
253
141
|
}
|
|
254
142
|
getElements() {
|
|
255
143
|
// Object-literal collection is opt-in for `functions()`, where turning it on
|
|
@@ -262,15 +150,5 @@ export class ResolverRuleBuilder extends TerminalBuilder {
|
|
|
262
150
|
// against it then passes on the wrong subjects (ADR-008).
|
|
263
151
|
return this.sourceFiles.flatMap((sf) => collectFunctions(sf, { includeObjectLiteralFunctions: true }));
|
|
264
152
|
}
|
|
265
|
-
buildRuleDescription() {
|
|
266
|
-
const predicateDesc = this._predicates.map((p) => p.description).join(' and ');
|
|
267
|
-
const conditionDesc = this._conditions.map((c) => c.description).join(' and ');
|
|
268
|
-
const parts = ['resolvers'];
|
|
269
|
-
if (predicateDesc)
|
|
270
|
-
parts.push(`that ${predicateDesc}`);
|
|
271
|
-
if (conditionDesc)
|
|
272
|
-
parts.push(`should ${conditionDesc}`);
|
|
273
|
-
return parts.join(' ');
|
|
274
|
-
}
|
|
275
153
|
}
|
|
276
154
|
//# sourceMappingURL=resolver-rule-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver-rule-builder.js","sourceRoot":"","sources":["../../src/graphql/resolver-rule-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolver-rule-builder.js","sourceRoot":"","sources":["../../src/graphql/resolver-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../src/graphql/schema-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../src/graphql/schema-loader.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;IAClC,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KACrB,CAAC,CAAA;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,IAAI,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAAA;IACxD,eAAe,IAAI,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAAA;IAC3D,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAA;CAChC;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,iBAAiB,CAAA;CAChD;AAgFD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAyB9E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAGhF;AAgDD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAa5C;AAED;;;;;;;GAOG;AAEH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,cAAc,GAAG,IAAI,CAE3E;AAED;;;GAGG;AAEH,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ArchConfigError } from '@nielspeter/eess';
|
|
1
2
|
import { createRequire } from 'node:module';
|
|
2
3
|
import fs from 'node:fs';
|
|
3
4
|
import path from 'node:path';
|
|
@@ -60,10 +61,10 @@ function requireGraphQL() {
|
|
|
60
61
|
cause.code === 'MODULE_NOT_FOUND' &&
|
|
61
62
|
/Cannot find module 'graphql'/.test(cause.message);
|
|
62
63
|
if (notInstalled) {
|
|
63
|
-
throw new
|
|
64
|
+
throw new ArchConfigError('requireGraphQL', '[eess-ts/graphql] The "graphql" package is required but not installed.\n' +
|
|
64
65
|
'Install it with: npm install graphql', { cause });
|
|
65
66
|
}
|
|
66
|
-
throw new
|
|
67
|
+
throw new ArchConfigError('requireGraphQL', `[eess-ts/graphql] The "graphql" package is installed but could not be loaded: ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
/**
|
|
@@ -80,7 +81,7 @@ export function loadSchemaFromGlob(rootDir, glob) {
|
|
|
80
81
|
// Find all .graphql files matching the glob
|
|
81
82
|
const graphqlFiles = findGraphqlFiles(resolvedRoot, matcher);
|
|
82
83
|
if (graphqlFiles.length === 0) {
|
|
83
|
-
throw new
|
|
84
|
+
throw new ArchConfigError('loadSchemaFromGlob', `[eess-ts/graphql] No .graphql files found matching "${glob}" in ${resolvedRoot}`);
|
|
84
85
|
}
|
|
85
86
|
// Read all files and collect SDL
|
|
86
87
|
const documents = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../src/graphql/schema-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,SAAS,MAAM,WAAW,CAAA;AAmEjC,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,yEAAyE;AACzE,2DAA2D;AAC3D,IAAI,aAAyC,CAAA;AAE7C;;;;GAIG;AACH,SAAS,kBAAkB;IACzB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjD,4EAA4E;IAC5E,4EAA4E;IAC5E,sEAAsE;IACtE,8EAA8E;IAC9E,8BAA8B;IAC9B,yEAAyE;IACzE,8EAA8E;IAC9E,+EAA+E;IAC/E,mEAAmE;IACnE,0GAA0G;IAC1G,OAAO,UAAU,CAAC,SAAS,CAAmB,CAAA;AAChD,CAAC;AAED,IAAI,WAAW,GAAyB,kBAAkB,CAAA;AAE1D;;;GAGG;AACH,SAAS,cAAc;IACrB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IAEvC,IAAI,CAAC;QACH,aAAa,GAAG,WAAW,EAAE,CAAA;QAC7B,OAAO,aAAa,CAAA;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,yEAAyE;QACzE,0DAA0D;QAC1D,2EAA2E;QAC3E,0EAA0E;QAC1E,0EAA0E;QAC1E,wEAAwE;QACxE,yEAAyE;QACzE,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,sEAAsE;QACtE,mEAAmE;QACnE,uEAAuE;QACvE,kBAAkB;QAClB,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK;YACtB,MAAM,IAAI,KAAK;YACf,KAAK,CAAC,IAAI,KAAK,kBAAkB;YACjC,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACpD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../src/graphql/schema-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-predicates.d.ts","sourceRoot":"","sources":["../../src/graphql/schema-predicates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAEjF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACjC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;
|
|
1
|
+
{"version":3,"file":"schema-predicates.d.ts","sourceRoot":"","sources":["../../src/graphql/schema-predicates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAEjF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACjC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAkBD;;GAEG;AACH,wBAAgB,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC,CAElD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAAC,aAAa,CAAC,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAgB7E;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAkBhF"}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Filter to
|
|
2
|
+
* Filter to the FIELDS of one root type.
|
|
3
|
+
*
|
|
4
|
+
* `element.field !== undefined` is what makes this a field predicate rather
|
|
5
|
+
* than a type one: `getElements()` emits a type-level element per SDL type AND
|
|
6
|
+
* a field-level element per field, so without it `queries()` would also select
|
|
7
|
+
* the `Query` type itself — one extra subject that no field condition can say
|
|
8
|
+
* anything true about.
|
|
3
9
|
*/
|
|
4
|
-
|
|
10
|
+
function rootTypeFields(typeName, description) {
|
|
5
11
|
return {
|
|
6
|
-
description
|
|
7
|
-
test(element)
|
|
8
|
-
return element.typeName === 'Query' && element.field !== undefined;
|
|
9
|
-
},
|
|
12
|
+
description,
|
|
13
|
+
test: (element) => element.typeName === typeName && element.field !== undefined,
|
|
10
14
|
};
|
|
11
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Filter to only Query root type fields.
|
|
18
|
+
*/
|
|
19
|
+
export function queries() {
|
|
20
|
+
return rootTypeFields('Query', 'are queries');
|
|
21
|
+
}
|
|
12
22
|
/**
|
|
13
23
|
* Filter to only Mutation root type fields.
|
|
14
24
|
*/
|
|
15
25
|
export function mutations() {
|
|
16
|
-
return
|
|
17
|
-
description: 'are mutations',
|
|
18
|
-
test(element) {
|
|
19
|
-
return element.typeName === 'Mutation' && element.field !== undefined;
|
|
20
|
-
},
|
|
21
|
-
};
|
|
26
|
+
return rootTypeFields('Mutation', 'are mutations');
|
|
22
27
|
}
|
|
23
28
|
/**
|
|
24
29
|
* Filter to object types whose name matches the given pattern.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-predicates.js","sourceRoot":"","sources":["../../src/graphql/schema-predicates.ts"],"names":[],"mappings":"AAqBA
|
|
1
|
+
{"version":3,"file":"schema-predicates.js","sourceRoot":"","sources":["../../src/graphql/schema-predicates.ts"],"names":[],"mappings":"AAqBA;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,QAAgB,EAAE,WAAmB;IAC3D,OAAO;QACL,WAAW;QACX,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;KAChF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,cAAc,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAwB;IACjD,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3E,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO;YACL,WAAW,EAAE,eAAe,IAAI,EAAE;YAClC,IAAI,CAAC,OAAsB;gBACzB,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;YACpE,CAAC;SACF,CAAA;IACH,CAAC;IACD,OAAO;QACL,WAAW,EAAE,eAAe,IAAI,EAAE;QAClC,IAAI,CAAC,OAAsB;YACzB,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACtE,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAAyB;IACpD,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC9E,OAAO;QACL,WAAW,EAAE,kBAAkB,IAAI,EAAE;QACrC,IAAI,CAAC,OAAsB;YACzB,IAAI,CAAC,OAAO,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAA;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC7C,2DAA2D;YAC3D,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACjD,IAAI,CAAC,SAAS;gBAAE,OAAO,KAAK,CAAA;YAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;YAC9B,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAA;YACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,SAAS,KAAK,QAAQ,CAAA;YAC/B,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACjC,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1,11 +1,23 @@
|
|
|
1
|
-
import type { RuleDescription } from '@nielspeter/eess';
|
|
2
|
-
import type { CollectResult } from '../core/terminal-builder.js';
|
|
3
|
-
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
4
1
|
import type { LoadedSchema } from './schema-loader.js';
|
|
5
|
-
|
|
2
|
+
import type { SchemaElement } from './schema-predicates.js';
|
|
3
|
+
import { GraphqlRuleBuilder } from './graphql-rule-builder.js';
|
|
4
|
+
/**
|
|
5
|
+
* Fluent rule builder for GraphQL schema architecture rules.
|
|
6
|
+
*
|
|
7
|
+
* Operates on SchemaElements extracted from .graphql files.
|
|
8
|
+
* Follows the same builder pattern as SliceRuleBuilder (standalone, not extending RuleBuilder).
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* schema(p, 'src/schema/*.graphql')
|
|
13
|
+
* .typesNamed(/Collection$/)
|
|
14
|
+
* .should()
|
|
15
|
+
* .haveFields('total', 'skip', 'limit', 'items')
|
|
16
|
+
* .check()
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class SchemaRuleBuilder extends GraphqlRuleBuilder<SchemaElement> {
|
|
6
20
|
private readonly loaded;
|
|
7
|
-
private _predicates;
|
|
8
|
-
private _conditions;
|
|
9
21
|
constructor(loaded: LoadedSchema);
|
|
10
22
|
/**
|
|
11
23
|
* Filter to only Query root type fields.
|
|
@@ -23,22 +35,6 @@ export declare class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
23
35
|
* Filter to fields returning a list of the given type.
|
|
24
36
|
*/
|
|
25
37
|
returnListOf(typeName: string | RegExp): this;
|
|
26
|
-
/**
|
|
27
|
-
* Begin the predicate phase. Purely a readability marker.
|
|
28
|
-
*/
|
|
29
|
-
that(): this;
|
|
30
|
-
/**
|
|
31
|
-
* Add another predicate (AND).
|
|
32
|
-
*/
|
|
33
|
-
and(): this;
|
|
34
|
-
/**
|
|
35
|
-
* Begin the condition phase.
|
|
36
|
-
*/
|
|
37
|
-
should(): this;
|
|
38
|
-
/**
|
|
39
|
-
* Add another condition (AND).
|
|
40
|
-
*/
|
|
41
|
-
andShould(): this;
|
|
42
38
|
/**
|
|
43
39
|
* Assert that types have all listed fields.
|
|
44
40
|
*/
|
|
@@ -53,41 +49,6 @@ export declare class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
53
49
|
* @param resolverFileTexts - Map of file paths to source text
|
|
54
50
|
*/
|
|
55
51
|
haveMatchingResolver(resolverFileTexts: ReadonlyMap<string, string>): this;
|
|
56
|
-
/**
|
|
57
|
-
* An independent copy, carrying both lists.
|
|
58
|
-
*
|
|
59
|
-
* This builder does not extend `RuleBuilder`, so it does not inherit that
|
|
60
|
-
* class's override — and neither `that()` nor `should()` forked here at all,
|
|
61
|
-
* which made the bug 0016 leak worse on this hierarchy than on the main one:
|
|
62
|
-
* a held `schema()` selection accumulated every predicate and condition of
|
|
63
|
-
* every rule derived from it. `docs/graphql.md` teaches exactly that shape.
|
|
64
|
-
*/
|
|
65
|
-
protected copy(): this;
|
|
66
|
-
/**
|
|
67
|
-
* Whether this rule states an assertion at all — the assertion gate's question.
|
|
68
|
-
*
|
|
69
|
-
* True once a condition has been added.
|
|
70
|
-
*
|
|
71
|
-
* Overrides the `TerminalBuilder` default (`true`), whose JSDoc carries the
|
|
72
|
-
* contract and the reason this is public rather than protected.
|
|
73
|
-
*/
|
|
74
|
-
assertsSomething(): boolean;
|
|
75
|
-
/**
|
|
76
|
-
* The remedy for this builder's assertion-less state, as one string.
|
|
77
|
-
*
|
|
78
|
-
* One channel, so `diagnose()`'s advice and the finding's own message cannot
|
|
79
|
-
* disagree. Overrides `TerminalBuilder`'s generic text with wording specific to
|
|
80
|
-
* what this builder is missing.
|
|
81
|
-
*/
|
|
82
|
-
assertionAdvice(): string;
|
|
83
|
-
/** Named by id or description, not 'unnamed' (plan 0070 §4). */
|
|
84
|
-
describeRule(): RuleDescription;
|
|
85
|
-
/**
|
|
86
|
-
* The set the conditions receive — plan 0096, and the ONE method both readers
|
|
87
|
-
* call. See `ResolverRuleBuilder.selected()` for why sharing it is the point.
|
|
88
|
-
*/
|
|
89
|
-
private selected;
|
|
90
|
-
/** Units this rule examined — plan 0096. */
|
|
91
52
|
/**
|
|
92
53
|
* This family counts schema types — the SDL types it selected.
|
|
93
54
|
*
|
|
@@ -97,15 +58,8 @@ export declare class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
97
58
|
* was and was not looked at.
|
|
98
59
|
*/
|
|
99
60
|
protected examinedUnitNoun(): string;
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
*
|
|
104
|
-
* The schema types this rule selected.
|
|
105
|
-
*/
|
|
106
|
-
examinedUnits(): number;
|
|
107
|
-
protected collectViolations(): CollectResult;
|
|
108
|
-
private getElements;
|
|
109
|
-
private buildRuleDescription;
|
|
61
|
+
protected descriptionSubject(): string;
|
|
62
|
+
protected conditionExamples(): string;
|
|
63
|
+
protected getElements(): SchemaElement[];
|
|
110
64
|
}
|
|
111
65
|
//# sourceMappingURL=schema-rule-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-rule-builder.d.ts","sourceRoot":"","sources":["../../src/graphql/schema-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"schema-rule-builder.d.ts","sourceRoot":"","sources":["../../src/graphql/schema-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA0C,MAAM,oBAAoB,CAAA;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAY3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAe9D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAkB,SAAQ,kBAAkB,CAAC,aAAa,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAMjD;;OAEG;IACH,OAAO,IAAI,IAAI;IAMf;;OAEG;IACH,SAAS,IAAI,IAAI;IAMjB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM1C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ7C;;OAEG;IACH,UAAU,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMpC;;OAEG;IACH,UAAU,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMpC;;;;OAIG;IACH,oBAAoB,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ1E;;;;;;;OAOG;cACgB,gBAAgB,IAAI,MAAM;cAI1B,kBAAkB,IAAI,MAAM;cAI5B,iBAAiB,IAAI,MAAM;cAI3B,WAAW,IAAI,aAAa,EAAE;CAoClD"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
2
|
-
import { selectionMemo } from '@nielspeter/eess';
|
|
3
1
|
import { queries as queriesPredicate, mutations as mutationsPredicate, typesNamed as typesNamedPredicate, returnListOf as returnListOfPredicate, } from './schema-predicates.js';
|
|
4
2
|
import { haveFields as haveFieldsCondition, acceptArgs as acceptArgsCondition, haveMatchingResolver as haveMatchingResolverCondition, } from './schema-conditions.js';
|
|
3
|
+
import { GraphqlRuleBuilder } from './graphql-rule-builder.js';
|
|
5
4
|
/**
|
|
6
5
|
* Structural type guard: check if a GraphQL type has `getFields()`.
|
|
7
6
|
* Only GraphQLObjectType, GraphQLInterfaceType, and GraphQLInputObjectType have getFields.
|
|
@@ -31,11 +30,8 @@ function isObjectType(type) {
|
|
|
31
30
|
* .check()
|
|
32
31
|
* ```
|
|
33
32
|
*/
|
|
34
|
-
|
|
35
|
-
export class SchemaRuleBuilder extends TerminalBuilder {
|
|
33
|
+
export class SchemaRuleBuilder extends GraphqlRuleBuilder {
|
|
36
34
|
loaded;
|
|
37
|
-
_predicates = [];
|
|
38
|
-
_conditions = [];
|
|
39
35
|
constructor(loaded) {
|
|
40
36
|
super();
|
|
41
37
|
this.loaded = loaded;
|
|
@@ -73,31 +69,6 @@ export class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
73
69
|
next._predicates.push(returnListOfPredicate(typeName));
|
|
74
70
|
return next;
|
|
75
71
|
}
|
|
76
|
-
// --- Chain methods ---
|
|
77
|
-
/**
|
|
78
|
-
* Begin the predicate phase. Purely a readability marker.
|
|
79
|
-
*/
|
|
80
|
-
that() {
|
|
81
|
-
return this;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Add another predicate (AND).
|
|
85
|
-
*/
|
|
86
|
-
and() {
|
|
87
|
-
return this;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Begin the condition phase.
|
|
91
|
-
*/
|
|
92
|
-
should() {
|
|
93
|
-
return this;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Add another condition (AND).
|
|
97
|
-
*/
|
|
98
|
-
andShould() {
|
|
99
|
-
return this;
|
|
100
|
-
}
|
|
101
72
|
// --- Condition methods ---
|
|
102
73
|
/**
|
|
103
74
|
* Assert that types have all listed fields.
|
|
@@ -126,58 +97,6 @@ export class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
126
97
|
return next;
|
|
127
98
|
}
|
|
128
99
|
// --- Evaluation ---
|
|
129
|
-
/**
|
|
130
|
-
* An independent copy, carrying both lists.
|
|
131
|
-
*
|
|
132
|
-
* This builder does not extend `RuleBuilder`, so it does not inherit that
|
|
133
|
-
* class's override — and neither `that()` nor `should()` forked here at all,
|
|
134
|
-
* which made the bug 0016 leak worse on this hierarchy than on the main one:
|
|
135
|
-
* a held `schema()` selection accumulated every predicate and condition of
|
|
136
|
-
* every rule derived from it. `docs/graphql.md` teaches exactly that shape.
|
|
137
|
-
*/
|
|
138
|
-
copy() {
|
|
139
|
-
const clone = super.copy();
|
|
140
|
-
clone._predicates = [...this._predicates];
|
|
141
|
-
clone._conditions = [...this._conditions];
|
|
142
|
-
return clone;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Whether this rule states an assertion at all — the assertion gate's question.
|
|
146
|
-
*
|
|
147
|
-
* True once a condition has been added.
|
|
148
|
-
*
|
|
149
|
-
* Overrides the `TerminalBuilder` default (`true`), whose JSDoc carries the
|
|
150
|
-
* contract and the reason this is public rather than protected.
|
|
151
|
-
*/
|
|
152
|
-
assertsSomething() {
|
|
153
|
-
return this._conditions.length > 0;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* The remedy for this builder's assertion-less state, as one string.
|
|
157
|
-
*
|
|
158
|
-
* One channel, so `diagnose()`'s advice and the finding's own message cannot
|
|
159
|
-
* disagree. Overrides `TerminalBuilder`'s generic text with wording specific to
|
|
160
|
-
* what this builder is missing.
|
|
161
|
-
*/
|
|
162
|
-
assertionAdvice() {
|
|
163
|
-
return ('this rule has no condition, so it asserts nothing and can never fail. Add a ' +
|
|
164
|
-
'condition after .should(), e.g. haveFields(...) or acceptArgs(...).');
|
|
165
|
-
}
|
|
166
|
-
/** Named by id or description, not 'unnamed' (plan 0070 §4). */
|
|
167
|
-
describeRule() {
|
|
168
|
-
return {
|
|
169
|
-
...super.describeRule(),
|
|
170
|
-
rule: this._metadata?.id ?? this.buildRuleDescription(),
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* The set the conditions receive — plan 0096, and the ONE method both readers
|
|
175
|
-
* call. See `ResolverRuleBuilder.selected()` for why sharing it is the point.
|
|
176
|
-
*/
|
|
177
|
-
selected() {
|
|
178
|
-
return selectionOf(this, () => this.getElements().filter((element) => this._predicates.every((predicate) => predicate.test(element))));
|
|
179
|
-
}
|
|
180
|
-
/** Units this rule examined — plan 0096. */
|
|
181
100
|
/**
|
|
182
101
|
* This family counts schema types — the SDL types it selected.
|
|
183
102
|
*
|
|
@@ -189,34 +108,11 @@ export class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
189
108
|
examinedUnitNoun() {
|
|
190
109
|
return 'schema types';
|
|
191
110
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
* was constructed rather than defaulted.
|
|
195
|
-
*
|
|
196
|
-
* The schema types this rule selected.
|
|
197
|
-
*/
|
|
198
|
-
examinedUnits() {
|
|
199
|
-
return this.selected().length;
|
|
111
|
+
descriptionSubject() {
|
|
112
|
+
return 'schema';
|
|
200
113
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
if (filtered.length === 0) {
|
|
204
|
-
// Plan 0098: the early exit IS the zero-evidence case, stated rather than
|
|
205
|
-
// implied by an empty violation list.
|
|
206
|
-
return { violations: [], examined: 0 };
|
|
207
|
-
}
|
|
208
|
-
const context = {
|
|
209
|
-
rule: this.buildRuleDescription(),
|
|
210
|
-
because: this._reason,
|
|
211
|
-
ruleId: this._metadata?.id,
|
|
212
|
-
suggestion: this._metadata?.suggestion,
|
|
213
|
-
docs: this._metadata?.docs,
|
|
214
|
-
};
|
|
215
|
-
const violations = [];
|
|
216
|
-
for (const condition of this._conditions) {
|
|
217
|
-
violations.push(...condition.evaluate(filtered, context));
|
|
218
|
-
}
|
|
219
|
-
return { violations, examined: filtered.length };
|
|
114
|
+
conditionExamples() {
|
|
115
|
+
return 'haveFields(...) or acceptArgs(...)';
|
|
220
116
|
}
|
|
221
117
|
getElements() {
|
|
222
118
|
const elements = [];
|
|
@@ -250,15 +146,5 @@ export class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
250
146
|
}
|
|
251
147
|
return elements;
|
|
252
148
|
}
|
|
253
|
-
buildRuleDescription() {
|
|
254
|
-
const predicateDesc = this._predicates.map((p) => p.description).join(' and ');
|
|
255
|
-
const conditionDesc = this._conditions.map((c) => c.description).join(' and ');
|
|
256
|
-
const parts = ['schema'];
|
|
257
|
-
if (predicateDesc)
|
|
258
|
-
parts.push(`that ${predicateDesc}`);
|
|
259
|
-
if (conditionDesc)
|
|
260
|
-
parts.push(`should ${conditionDesc}`);
|
|
261
|
-
return parts.join(' ');
|
|
262
|
-
}
|
|
263
149
|
}
|
|
264
150
|
//# sourceMappingURL=schema-rule-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-rule-builder.js","sourceRoot":"","sources":["../../src/graphql/schema-rule-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema-rule-builder.js","sourceRoot":"","sources":["../../src/graphql/schema-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,15 @@ import type { ArchViolation } from '@nielspeter/eess';
|
|
|
6
6
|
* `.violations()` terminal (severity-stamped), and write them to a baseline
|
|
7
7
|
* file.
|
|
8
8
|
*
|
|
9
|
+
* **This bypasses the evidence gate, deliberately and knowingly.** ADR-014
|
|
10
|
+
* requires every emitter to refuse a verdict it has no evidence for, and
|
|
11
|
+
* `eess-ts check` / `--fix` / `baseline` / `checkAll()` all do. This helper does
|
|
12
|
+
* not: it is typed to accept a bare array and documented as not throwing, so
|
|
13
|
+
* `collectViolations(...) + generateBaseline(...)` still mints a baseline from
|
|
14
|
+
* builders that certified nothing. **Prefer `eess-ts baseline`**, which gates
|
|
15
|
+
* per rule file and refuses. Closing this is a public-API decision — see
|
|
16
|
+
* proposal 011 ask C — not a wiring one.
|
|
17
|
+
*
|
|
9
18
|
* @example
|
|
10
19
|
* const violations = collectViolations(
|
|
11
20
|
* classes(p).that().extend('Base').should().notContain(call('parseInt')),
|