@nielspeter/eess-ts 0.2.0 → 0.4.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/README.md +87 -34
- package/dist/builders/call-rule-builder.d.ts +66 -26
- package/dist/builders/call-rule-builder.d.ts.map +1 -1
- package/dist/builders/call-rule-builder.js +73 -31
- package/dist/builders/call-rule-builder.js.map +1 -1
- package/dist/builders/class-rule-builder.d.ts +125 -26
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +134 -30
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/builders/correspondence-builder.d.ts +287 -0
- package/dist/builders/correspondence-builder.d.ts.map +1 -0
- package/dist/builders/correspondence-builder.js +393 -0
- package/dist/builders/correspondence-builder.js.map +1 -0
- package/dist/builders/correspondence-findings.d.ts +104 -0
- package/dist/builders/correspondence-findings.d.ts.map +1 -0
- package/dist/builders/correspondence-findings.js +301 -0
- package/dist/builders/correspondence-findings.js.map +1 -0
- package/dist/builders/cross-layer-builder.d.ts +99 -16
- package/dist/builders/cross-layer-builder.d.ts.map +1 -1
- package/dist/builders/cross-layer-builder.js +181 -35
- package/dist/builders/cross-layer-builder.js.map +1 -1
- package/dist/builders/function-rule-builder.d.ts +144 -25
- package/dist/builders/function-rule-builder.d.ts.map +1 -1
- package/dist/builders/function-rule-builder.js +173 -26
- package/dist/builders/function-rule-builder.js.map +1 -1
- package/dist/builders/jsx-rule-builder.d.ts +70 -14
- package/dist/builders/jsx-rule-builder.d.ts.map +1 -1
- package/dist/builders/jsx-rule-builder.js +73 -14
- package/dist/builders/jsx-rule-builder.js.map +1 -1
- package/dist/builders/module-rule-builder.d.ts +2 -2
- package/dist/builders/module-rule-builder.d.ts.map +1 -1
- package/dist/builders/module-rule-builder.js +12 -3
- package/dist/builders/module-rule-builder.js.map +1 -1
- package/dist/builders/scoped-function-rule-builder.d.ts +11 -0
- package/dist/builders/scoped-function-rule-builder.d.ts.map +1 -1
- package/dist/builders/scoped-function-rule-builder.js +12 -0
- package/dist/builders/scoped-function-rule-builder.js.map +1 -1
- package/dist/builders/slice-discovery-message.d.ts +36 -0
- package/dist/builders/slice-discovery-message.d.ts.map +1 -0
- package/dist/builders/slice-discovery-message.js +181 -0
- package/dist/builders/slice-discovery-message.js.map +1 -0
- package/dist/builders/slice-rule-builder.d.ts +151 -12
- package/dist/builders/slice-rule-builder.d.ts.map +1 -1
- package/dist/builders/slice-rule-builder.js +242 -35
- package/dist/builders/slice-rule-builder.js.map +1 -1
- package/dist/builders/type-rule-builder.d.ts +95 -24
- package/dist/builders/type-rule-builder.d.ts.map +1 -1
- package/dist/builders/type-rule-builder.js +105 -29
- package/dist/builders/type-rule-builder.js.map +1 -1
- package/dist/{helpers → builders}/within.d.ts +2 -2
- package/dist/builders/within.d.ts.map +1 -0
- package/dist/{helpers → builders}/within.js +1 -1
- package/dist/builders/within.js.map +1 -0
- package/dist/cli/commands/baseline.d.ts +3 -2
- package/dist/cli/commands/baseline.d.ts.map +1 -1
- package/dist/cli/commands/baseline.js +68 -6
- package/dist/cli/commands/baseline.js.map +1 -1
- package/dist/cli/commands/check.d.ts +7 -2
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +241 -45
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +224 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +2 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +19 -10
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/init.d.ts +9 -3
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +162 -137
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/import-rule-module.d.ts +29 -0
- package/dist/cli/import-rule-module.d.ts.map +1 -0
- package/dist/cli/import-rule-module.js +60 -0
- package/dist/cli/import-rule-module.js.map +1 -0
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +98 -33
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/load-rules.d.ts +6 -11
- package/dist/cli/load-rules.d.ts.map +1 -1
- package/dist/cli/load-rules.js +21 -29
- package/dist/cli/load-rules.js.map +1 -1
- package/dist/cli/resolve-config.d.ts.map +1 -1
- package/dist/cli/resolve-config.js +24 -14
- package/dist/cli/resolve-config.js.map +1 -1
- package/dist/cli/rule-file-findings.d.ts +178 -0
- package/dist/cli/rule-file-findings.d.ts.map +1 -0
- package/dist/cli/rule-file-findings.js +293 -0
- package/dist/cli/rule-file-findings.js.map +1 -0
- package/dist/cli/watch.d.ts +20 -7
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +39 -14
- package/dist/cli/watch.js.map +1 -1
- package/dist/conditions/body-analysis-function.d.ts.map +1 -1
- package/dist/conditions/body-analysis-function.js +16 -7
- package/dist/conditions/body-analysis-function.js.map +1 -1
- package/dist/conditions/body-analysis-module.d.ts.map +1 -1
- package/dist/conditions/body-analysis-module.js +14 -9
- package/dist/conditions/body-analysis-module.js.map +1 -1
- package/dist/conditions/body-analysis.d.ts.map +1 -1
- package/dist/conditions/body-analysis.js +16 -7
- package/dist/conditions/body-analysis.js.map +1 -1
- package/dist/conditions/call.d.ts.map +1 -1
- package/dist/conditions/call.js +38 -17
- package/dist/conditions/call.js.map +1 -1
- package/dist/conditions/catch-analysis.d.ts +2 -1
- package/dist/conditions/catch-analysis.d.ts.map +1 -1
- package/dist/conditions/catch-analysis.js.map +1 -1
- package/dist/conditions/cross-layer.d.ts +2 -10
- package/dist/conditions/cross-layer.d.ts.map +1 -1
- package/dist/conditions/cross-layer.js +227 -23
- package/dist/conditions/cross-layer.js.map +1 -1
- package/dist/conditions/dependency.d.ts +35 -6
- package/dist/conditions/dependency.d.ts.map +1 -1
- package/dist/conditions/dependency.js +299 -45
- package/dist/conditions/dependency.js.map +1 -1
- package/dist/conditions/exports.d.ts.map +1 -1
- package/dist/conditions/exports.js +10 -0
- package/dist/conditions/exports.js.map +1 -1
- package/dist/conditions/function.d.ts.map +1 -1
- package/dist/conditions/function.js +19 -5
- package/dist/conditions/function.js.map +1 -1
- package/dist/conditions/helpers.d.ts +2 -1
- package/dist/conditions/helpers.d.ts.map +1 -1
- package/dist/conditions/helpers.js +4 -1
- package/dist/conditions/helpers.js.map +1 -1
- package/dist/conditions/jsx.d.ts.map +1 -1
- package/dist/conditions/jsx.js +7 -2
- package/dist/conditions/jsx.js.map +1 -1
- package/dist/conditions/match-identity.d.ts +43 -0
- package/dist/conditions/match-identity.d.ts.map +1 -0
- package/dist/conditions/match-identity.js +43 -0
- package/dist/conditions/match-identity.js.map +1 -0
- package/dist/conditions/members.d.ts.map +1 -1
- package/dist/conditions/members.js +17 -4
- package/dist/conditions/members.js.map +1 -1
- package/dist/conditions/reverse-dependency.d.ts +18 -5
- package/dist/conditions/reverse-dependency.d.ts.map +1 -1
- package/dist/conditions/reverse-dependency.js +109 -92
- package/dist/conditions/reverse-dependency.js.map +1 -1
- package/dist/conditions/slice.d.ts +86 -2
- package/dist/conditions/slice.d.ts.map +1 -1
- package/dist/conditions/slice.js +234 -53
- package/dist/conditions/slice.js.map +1 -1
- package/dist/conditions/structural.d.ts.map +1 -1
- package/dist/conditions/structural.js +16 -4
- package/dist/conditions/structural.js.map +1 -1
- package/dist/core/check-all.d.ts +19 -0
- package/dist/core/check-all.d.ts.map +1 -0
- package/dist/core/check-all.js +96 -0
- package/dist/core/check-all.js.map +1 -0
- package/dist/core/combinators.d.ts +48 -0
- package/dist/core/combinators.d.ts.map +1 -0
- package/dist/core/combinators.js +56 -0
- package/dist/core/combinators.js.map +1 -0
- package/dist/core/descendant-cache.d.ts +36 -0
- package/dist/core/descendant-cache.d.ts.map +1 -0
- package/dist/core/descendant-cache.js +119 -0
- package/dist/core/descendant-cache.js.map +1 -0
- package/dist/core/diagnose.d.ts +234 -0
- package/dist/core/diagnose.d.ts.map +1 -0
- package/dist/core/diagnose.js +382 -0
- package/dist/core/diagnose.js.map +1 -0
- package/dist/core/disk-set.d.ts +48 -0
- package/dist/core/disk-set.d.ts.map +1 -0
- package/dist/core/disk-set.js +218 -0
- package/dist/core/disk-set.js.map +1 -0
- package/dist/core/element-cache.d.ts +75 -0
- package/dist/core/element-cache.d.ts.map +1 -0
- package/dist/core/element-cache.js +32 -0
- package/dist/core/element-cache.js.map +1 -0
- package/dist/core/empty-project-advice.d.ts +75 -0
- package/dist/core/empty-project-advice.d.ts.map +1 -0
- package/dist/core/empty-project-advice.js +61 -0
- package/dist/core/empty-project-advice.js.map +1 -0
- package/dist/core/exclusion-comments.d.ts +54 -0
- package/dist/core/exclusion-comments.d.ts.map +1 -0
- package/dist/core/exclusion-comments.js +310 -0
- package/dist/core/exclusion-comments.js.map +1 -0
- package/dist/core/execute-rule.d.ts +150 -0
- package/dist/core/execute-rule.d.ts.map +1 -0
- package/dist/core/execute-rule.js +580 -0
- package/dist/core/execute-rule.js.map +1 -0
- package/dist/core/glob-diagnosis.d.ts +78 -0
- package/dist/core/glob-diagnosis.d.ts.map +1 -0
- package/dist/core/glob-diagnosis.js +134 -0
- package/dist/core/glob-diagnosis.js.map +1 -0
- package/dist/core/glob-evaluator.d.ts +48 -0
- package/dist/core/glob-evaluator.d.ts.map +1 -0
- package/dist/core/glob-evaluator.js +89 -0
- package/dist/core/glob-evaluator.js.map +1 -0
- package/dist/core/import-candidates.d.ts +60 -0
- package/dist/core/import-candidates.d.ts.map +1 -0
- package/dist/core/import-candidates.js +93 -0
- package/dist/core/import-candidates.js.map +1 -0
- package/dist/core/import-options.d.ts +55 -2
- package/dist/core/import-options.d.ts.map +1 -1
- package/dist/core/import-options.js +64 -0
- package/dist/core/import-options.js.map +1 -1
- package/dist/core/line-index.d.ts +3 -0
- package/dist/core/line-index.d.ts.map +1 -0
- package/dist/core/line-index.js +229 -0
- package/dist/core/line-index.js.map +1 -0
- package/dist/core/metric-violation.d.ts +86 -0
- package/dist/core/metric-violation.d.ts.map +1 -0
- package/dist/core/metric-violation.js +132 -0
- package/dist/core/metric-violation.js.map +1 -0
- package/dist/core/module-edges.d.ts +361 -0
- package/dist/core/module-edges.d.ts.map +1 -0
- package/dist/core/module-edges.js +592 -0
- package/dist/core/module-edges.js.map +1 -0
- package/dist/core/object-literal-functions.d.ts +42 -0
- package/dist/core/object-literal-functions.d.ts.map +1 -0
- package/dist/core/object-literal-functions.js +75 -0
- package/dist/core/object-literal-functions.js.map +1 -0
- package/dist/core/orphan-exclusions.d.ts +44 -0
- package/dist/core/orphan-exclusions.d.ts.map +1 -0
- package/dist/core/orphan-exclusions.js +214 -0
- package/dist/core/orphan-exclusions.js.map +1 -0
- package/dist/core/pair-condition.d.ts +32 -3
- package/dist/core/pair-condition.d.ts.map +1 -1
- package/dist/core/path-universe.d.ts +54 -0
- package/dist/core/path-universe.d.ts.map +1 -0
- package/dist/core/path-universe.js +65 -0
- package/dist/core/path-universe.js.map +1 -0
- package/dist/core/per-root-compiler-options.d.ts +20 -0
- package/dist/core/per-root-compiler-options.d.ts.map +1 -0
- package/dist/core/per-root-compiler-options.js +57 -0
- package/dist/core/per-root-compiler-options.js.map +1 -0
- package/dist/core/project-relative.d.ts +98 -0
- package/dist/core/project-relative.d.ts.map +1 -0
- package/dist/core/project-relative.js +185 -0
- package/dist/core/project-relative.js.map +1 -0
- package/dist/core/project.d.ts +7 -1
- package/dist/core/project.d.ts.map +1 -1
- package/dist/core/project.js +24 -0
- package/dist/core/project.js.map +1 -1
- package/dist/core/rule-builder.d.ts +282 -0
- package/dist/core/rule-builder.d.ts.map +1 -0
- package/dist/core/rule-builder.js +445 -0
- package/dist/core/rule-builder.js.map +1 -0
- package/dist/core/rule-declaration.d.ts +32 -0
- package/dist/core/rule-declaration.d.ts.map +1 -0
- package/dist/core/rule-declaration.js +126 -0
- package/dist/core/rule-declaration.js.map +1 -0
- package/dist/core/terminal-builder.d.ts +625 -0
- package/dist/core/terminal-builder.d.ts.map +1 -0
- package/dist/core/terminal-builder.js +787 -0
- package/dist/core/terminal-builder.js.map +1 -0
- package/dist/core/terminal-execution.d.ts +23 -0
- package/dist/core/terminal-execution.d.ts.map +1 -0
- package/dist/core/terminal-execution.js +71 -0
- package/dist/core/terminal-execution.js.map +1 -0
- package/dist/core/vacuity-diagnosis.d.ts +103 -0
- package/dist/core/vacuity-diagnosis.d.ts.map +1 -0
- package/dist/core/vacuity-diagnosis.js +415 -0
- package/dist/core/vacuity-diagnosis.js.map +1 -0
- package/dist/core/violation.d.ts +16 -11
- package/dist/core/violation.d.ts.map +1 -1
- package/dist/core/violation.js +33 -13
- package/dist/core/violation.js.map +1 -1
- package/dist/graphql/index.js +1 -1
- package/dist/graphql/index.js.map +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts +98 -23
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +151 -21
- package/dist/graphql/resolver-rule-builder.js.map +1 -1
- package/dist/graphql/schema-loader.d.ts +21 -0
- package/dist/graphql/schema-loader.d.ts.map +1 -1
- package/dist/graphql/schema-loader.js +81 -12
- package/dist/graphql/schema-loader.js.map +1 -1
- package/dist/graphql/schema-rule-builder.d.ts +57 -20
- package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
- package/dist/graphql/schema-rule-builder.js +101 -25
- package/dist/graphql/schema-rule-builder.js.map +1 -1
- package/dist/helpers/baseline-diagnostics.d.ts +45 -0
- package/dist/helpers/baseline-diagnostics.d.ts.map +1 -0
- package/dist/helpers/baseline-diagnostics.js +168 -0
- package/dist/helpers/baseline-diagnostics.js.map +1 -0
- package/dist/helpers/baseline-generator.d.ts +19 -0
- package/dist/helpers/baseline-generator.d.ts.map +1 -0
- package/dist/helpers/baseline-generator.js +18 -0
- package/dist/helpers/baseline-generator.js.map +1 -0
- package/dist/helpers/baseline.d.ts +336 -0
- package/dist/helpers/baseline.d.ts.map +1 -0
- package/dist/helpers/baseline.js +664 -0
- package/dist/helpers/baseline.js.map +1 -0
- package/dist/helpers/body-traversal.d.ts +27 -2
- package/dist/helpers/body-traversal.d.ts.map +1 -1
- package/dist/helpers/body-traversal.js +122 -16
- package/dist/helpers/body-traversal.js.map +1 -1
- package/dist/helpers/callback-extractor.d.ts.map +1 -1
- package/dist/helpers/callback-extractor.js +48 -47
- package/dist/helpers/callback-extractor.js.map +1 -1
- package/dist/helpers/complexity.d.ts +13 -5
- package/dist/helpers/complexity.d.ts.map +1 -1
- package/dist/helpers/complexity.js +15 -6
- package/dist/helpers/complexity.js.map +1 -1
- package/dist/helpers/diff-aware.d.ts +44 -0
- package/dist/helpers/diff-aware.d.ts.map +1 -0
- package/dist/helpers/diff-aware.js +84 -0
- package/dist/helpers/diff-aware.js.map +1 -0
- package/dist/helpers/matchers.d.ts +68 -7
- package/dist/helpers/matchers.d.ts.map +1 -1
- package/dist/helpers/matchers.js +114 -20
- package/dist/helpers/matchers.js.map +1 -1
- package/dist/helpers/slice-graph.d.ts +100 -8
- package/dist/helpers/slice-graph.d.ts.map +1 -1
- package/dist/helpers/slice-graph.js +126 -34
- package/dist/helpers/slice-graph.js.map +1 -1
- package/dist/helpers/tarjan.d.ts +0 -14
- package/dist/helpers/tarjan.d.ts.map +1 -1
- package/dist/helpers/tarjan.js +29 -16
- package/dist/helpers/tarjan.js.map +1 -1
- package/dist/index.d.ts +56 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -13
- package/dist/index.js.map +1 -1
- package/dist/models/arch-call.d.ts +3 -2
- package/dist/models/arch-call.d.ts.map +1 -1
- package/dist/models/arch-call.js.map +1 -1
- package/dist/models/arch-function.d.ts +28 -6
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +106 -3
- package/dist/models/arch-function.js.map +1 -1
- package/dist/models/arch-jsx-element.js +2 -2
- package/dist/models/arch-jsx-element.js.map +1 -1
- package/dist/models/slice.d.ts +33 -9
- package/dist/models/slice.d.ts.map +1 -1
- package/dist/models/slice.js +129 -19
- package/dist/models/slice.js.map +1 -1
- package/dist/predicates/call.d.ts.map +1 -1
- package/dist/predicates/call.js +5 -0
- package/dist/predicates/call.js.map +1 -1
- package/dist/predicates/identity.d.ts +21 -0
- package/dist/predicates/identity.d.ts.map +1 -1
- package/dist/predicates/identity.js +75 -3
- package/dist/predicates/identity.js.map +1 -1
- package/dist/predicates/index.d.ts +1 -1
- package/dist/predicates/index.d.ts.map +1 -1
- package/dist/predicates/index.js +1 -1
- package/dist/predicates/index.js.map +1 -1
- package/dist/predicates/metrics.d.ts +4 -2
- package/dist/predicates/metrics.d.ts.map +1 -1
- package/dist/predicates/metrics.js +4 -2
- package/dist/predicates/metrics.js.map +1 -1
- package/dist/predicates/module.d.ts +4 -12
- package/dist/predicates/module.d.ts.map +1 -1
- package/dist/predicates/module.js +57 -37
- package/dist/predicates/module.js.map +1 -1
- package/dist/presets/agent-guardrails.d.ts +22 -15
- package/dist/presets/agent-guardrails.d.ts.map +1 -1
- package/dist/presets/agent-guardrails.js +124 -19
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/presets/boundaries.d.ts +45 -2
- package/dist/presets/boundaries.d.ts.map +1 -1
- package/dist/presets/boundaries.js +132 -23
- package/dist/presets/boundaries.js.map +1 -1
- package/dist/presets/data-layer.d.ts +22 -2
- package/dist/presets/data-layer.d.ts.map +1 -1
- package/dist/presets/data-layer.js +58 -16
- package/dist/presets/data-layer.js.map +1 -1
- package/dist/presets/index.d.ts +7 -5
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +9 -3
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layered.d.ts +46 -2
- package/dist/presets/layered.d.ts.map +1 -1
- package/dist/presets/layered.js +66 -29
- package/dist/presets/layered.js.map +1 -1
- package/dist/presets/recommended.d.ts +80 -9
- package/dist/presets/recommended.d.ts.map +1 -1
- package/dist/presets/recommended.js +25 -23
- package/dist/presets/recommended.js.map +1 -1
- package/dist/presets/shared.d.ts +270 -2
- package/dist/presets/shared.d.ts.map +1 -1
- package/dist/presets/shared.js +338 -4
- package/dist/presets/shared.js.map +1 -1
- package/dist/rules/code-quality.d.ts.map +1 -1
- package/dist/rules/code-quality.js +15 -6
- package/dist/rules/code-quality.js.map +1 -1
- package/dist/rules/hygiene.d.ts +1 -1
- package/dist/rules/hygiene.js +1 -1
- package/dist/rules/metrics-function.d.ts +2 -1
- package/dist/rules/metrics-function.d.ts.map +1 -1
- package/dist/rules/metrics-function.js +33 -6
- package/dist/rules/metrics-function.js.map +1 -1
- package/dist/rules/metrics.d.ts +2 -1
- package/dist/rules/metrics.d.ts.map +1 -1
- package/dist/rules/metrics.js +39 -9
- package/dist/rules/metrics.js.map +1 -1
- package/dist/smells/duplicate-bodies.d.ts +58 -5
- package/dist/smells/duplicate-bodies.d.ts.map +1 -1
- package/dist/smells/duplicate-bodies.js +137 -56
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/fingerprint.d.ts +8 -1
- package/dist/smells/fingerprint.d.ts.map +1 -1
- package/dist/smells/fingerprint.js +21 -3
- package/dist/smells/fingerprint.js.map +1 -1
- package/dist/smells/inconsistent-siblings.d.ts +128 -7
- package/dist/smells/inconsistent-siblings.d.ts.map +1 -1
- package/dist/smells/inconsistent-siblings.js +288 -86
- package/dist/smells/inconsistent-siblings.js.map +1 -1
- package/dist/smells/sibling-files.d.ts +47 -0
- package/dist/smells/sibling-files.d.ts.map +1 -0
- package/dist/smells/sibling-files.js +104 -0
- package/dist/smells/sibling-files.js.map +1 -0
- package/dist/smells/similar-pairs.d.ts +27 -0
- package/dist/smells/similar-pairs.d.ts.map +1 -0
- package/dist/smells/similar-pairs.js +52 -0
- package/dist/smells/similar-pairs.js.map +1 -0
- package/dist/smells/smell-builder.d.ts +57 -12
- package/dist/smells/smell-builder.d.ts.map +1 -1
- package/dist/smells/smell-builder.js +111 -14
- package/dist/smells/smell-builder.js.map +1 -1
- package/dist/tsconfig/index.d.ts +19 -0
- package/dist/tsconfig/index.d.ts.map +1 -0
- package/dist/tsconfig/index.js +20 -0
- package/dist/tsconfig/index.js.map +1 -0
- package/dist/tsconfig/tsconfig-builder.d.ts +42 -9
- package/dist/tsconfig/tsconfig-builder.d.ts.map +1 -1
- package/dist/tsconfig/tsconfig-builder.js +64 -16
- package/dist/tsconfig/tsconfig-builder.js.map +1 -1
- package/package.json +3 -2
- package/dist/core/module-dependencies.d.ts +0 -28
- package/dist/core/module-dependencies.d.ts.map +0 -1
- package/dist/core/module-dependencies.js +0 -35
- package/dist/core/module-dependencies.js.map +0 -1
- package/dist/helpers/within.d.ts.map +0 -1
- package/dist/helpers/within.js.map +0 -1
|
@@ -2,25 +2,68 @@ import { createRequire } from 'node:module';
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import picomatch from 'picomatch';
|
|
5
|
-
// Cached reference to the graphql package
|
|
5
|
+
// Cached reference to the graphql package. Module-level state, swappable via
|
|
6
|
+
// setGraphQLLoaderForTests() below — safe only because Vitest gives each test
|
|
7
|
+
// FILE its own instance of this module (vitest.config.ts pins `isolate: true`
|
|
8
|
+
// and says why: bug 0080). A worker that reused this module across files
|
|
9
|
+
// would let one file's swapped loader leak into another's.
|
|
6
10
|
let cachedGraphQL;
|
|
7
11
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
12
|
+
* The actual loading step, indirected through a swappable reference (see
|
|
13
|
+
* {@link setGraphQLLoaderForTests}). Uses createRequire for synchronous
|
|
14
|
+
* loading since schema loading is synchronous.
|
|
15
|
+
*/
|
|
16
|
+
function defaultLoadGraphQL() {
|
|
17
|
+
const esmRequire = createRequire(import.meta.url);
|
|
18
|
+
// `createRequire` returns `any` for an optional peer dependency resolved at
|
|
19
|
+
// runtime, so there is no typed path here — the JS-interop boundary ADR-005
|
|
20
|
+
// allows. The `catch` below is the real guard: a missing or malformed
|
|
21
|
+
// `graphql` throws with an install instruction rather than failing later on a
|
|
22
|
+
// property access (bug 0049).
|
|
23
|
+
// Both ids on ONE directive: the two rule files declare this check under
|
|
24
|
+
// different names, and the grammar takes a comma-separated list. Stacking two
|
|
25
|
+
// single-line directives does not work — each covers exactly the next line, so
|
|
26
|
+
// the first would waive the second's comment rather than the cast.
|
|
27
|
+
// eess-exclude eess/adr005-no-type-assertions, adr005/no-as-cast-module: optional peer dep, no typed path
|
|
28
|
+
return esmRequire('graphql');
|
|
29
|
+
}
|
|
30
|
+
let loadGraphQL = defaultLoadGraphQL;
|
|
31
|
+
/**
|
|
32
|
+
* Load the graphql package synchronously. Throws a clear error describing why
|
|
33
|
+
* the package could not be used.
|
|
11
34
|
*/
|
|
12
35
|
function requireGraphQL() {
|
|
13
36
|
if (cachedGraphQL)
|
|
14
37
|
return cachedGraphQL;
|
|
15
38
|
try {
|
|
16
|
-
|
|
17
|
-
// eess-exclude eess/adr005-no-type-assertions: runtime require() of the optional 'graphql' peer dependency; its module shape is not statically known at this JS-interop boundary
|
|
18
|
-
cachedGraphQL = esmRequire('graphql');
|
|
39
|
+
cachedGraphQL = loadGraphQL();
|
|
19
40
|
return cachedGraphQL;
|
|
20
41
|
}
|
|
21
|
-
catch (
|
|
22
|
-
|
|
23
|
-
|
|
42
|
+
catch (cause) {
|
|
43
|
+
// The install instruction only answers "the `graphql` package itself is
|
|
44
|
+
// missing". Node's own MODULE_NOT_FOUND names the specifier it failed to
|
|
45
|
+
// resolve: requiring the missing top-level package throws
|
|
46
|
+
// "Cannot find module 'graphql'", while requiring an installed-but-corrupt
|
|
47
|
+
// package (one of ITS internal files missing) throws naming that internal
|
|
48
|
+
// file instead — same code, different specifier. Checking the message for
|
|
49
|
+
// the exact top-level specifier (verified against Node's actual output,
|
|
50
|
+
// see the fixture in tests/graphql/schema-loader-require-errors.test.ts)
|
|
51
|
+
// is what keeps a corrupt install from being told to run an install that
|
|
52
|
+
// cannot fix it. Every other cause — that corrupt-internal-file case, a
|
|
53
|
+
// version mismatch, a throw from `graphql`'s own module initialisation —
|
|
54
|
+
// used to be reported as "not installed" too, discarding the one line
|
|
55
|
+
// that would have told the reader what actually happened. Found by
|
|
56
|
+
// running `preset/recommended/no-silent-catch` over our own `src/` for
|
|
57
|
+
// the first time.
|
|
58
|
+
const notInstalled = cause instanceof Error &&
|
|
59
|
+
'code' in cause &&
|
|
60
|
+
cause.code === 'MODULE_NOT_FOUND' &&
|
|
61
|
+
/Cannot find module 'graphql'/.test(cause.message);
|
|
62
|
+
if (notInstalled) {
|
|
63
|
+
throw new Error('[eess-ts/graphql] The "graphql" package is required but not installed.\n' +
|
|
64
|
+
'Install it with: npm install graphql', { cause });
|
|
65
|
+
}
|
|
66
|
+
throw new Error(`[eess-ts/graphql] The "graphql" package is installed but could not be loaded: ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
|
|
24
67
|
}
|
|
25
68
|
}
|
|
26
69
|
/**
|
|
@@ -37,7 +80,7 @@ export function loadSchemaFromGlob(rootDir, glob) {
|
|
|
37
80
|
// Find all .graphql files matching the glob
|
|
38
81
|
const graphqlFiles = findGraphqlFiles(resolvedRoot, matcher);
|
|
39
82
|
if (graphqlFiles.length === 0) {
|
|
40
|
-
throw new Error(`[eess/graphql] No .graphql files found matching "${glob}" in ${resolvedRoot}`);
|
|
83
|
+
throw new Error(`[eess-ts/graphql] No .graphql files found matching "${glob}" in ${resolvedRoot}`);
|
|
41
84
|
}
|
|
42
85
|
// Read all files and collect SDL
|
|
43
86
|
const documents = [];
|
|
@@ -106,8 +149,34 @@ export function isGraphQLAvailable() {
|
|
|
106
149
|
return true;
|
|
107
150
|
}
|
|
108
151
|
catch (err) {
|
|
109
|
-
|
|
152
|
+
// `false` is the honest answer for BOTH "not installed" and "installed but
|
|
153
|
+
// broken". This is an availability PROBE — making it rethrow turned the
|
|
154
|
+
// barrel export's runtime guard into a crash. The distinction between the
|
|
155
|
+
// two causes is preserved and reported by `loadSchemaFromSDL`'s throw,
|
|
156
|
+
// which `schema-loader-require-errors.test.ts` pins.
|
|
157
|
+
void err;
|
|
110
158
|
return false;
|
|
111
159
|
}
|
|
112
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Replace how `graphql` is loaded. **Tests only** —
|
|
163
|
+
* [ts-archunit bug 0080](https://github.com/nielspeter/ts-archunit/blob/main/bugs/fixed/0080-a-node-module-mock-does-not-isolate-under-full-suite-concurrency.md):
|
|
164
|
+
* `vi.doMock('node:module', ...)` intercepts a Node builtin, which is not
|
|
165
|
+
* reliably isolated per-file under Vitest's worker-reuse defaults and failed
|
|
166
|
+
* intermittently under full-suite load. This seam replaces only this
|
|
167
|
+
* module's own loading step — nothing shared with any other file to race on.
|
|
168
|
+
*/
|
|
169
|
+
// eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
|
|
170
|
+
export function setGraphQLLoaderForTests(loader) {
|
|
171
|
+
loadGraphQL = loader;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Restore the real loader and clear the cached package. **Tests only** — see
|
|
175
|
+
* {@link setGraphQLLoaderForTests}.
|
|
176
|
+
*/
|
|
177
|
+
// eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
|
|
178
|
+
export function resetGraphQLLoaderForTests() {
|
|
179
|
+
loadGraphQL = defaultLoadGraphQL;
|
|
180
|
+
cachedGraphQL = undefined;
|
|
181
|
+
}
|
|
113
182
|
//# sourceMappingURL=schema-loader.js.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../src/graphql/schema-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,11 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
1
|
+
import type { RuleDescription } from '@nielspeter/eess';
|
|
2
|
+
import type { CollectResult } from '../core/terminal-builder.js';
|
|
3
|
+
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
3
4
|
import type { LoadedSchema } from './schema-loader.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
5
|
export declare class SchemaRuleBuilder extends TerminalBuilder {
|
|
20
6
|
private readonly loaded;
|
|
21
|
-
private
|
|
22
|
-
private
|
|
7
|
+
private _predicates;
|
|
8
|
+
private _conditions;
|
|
23
9
|
constructor(loaded: LoadedSchema);
|
|
24
10
|
/**
|
|
25
11
|
* Filter to only Query root type fields.
|
|
@@ -67,7 +53,58 @@ export declare class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
67
53
|
* @param resolverFileTexts - Map of file paths to source text
|
|
68
54
|
*/
|
|
69
55
|
haveMatchingResolver(resolverFileTexts: ReadonlyMap<string, string>): this;
|
|
70
|
-
|
|
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
|
+
/**
|
|
92
|
+
* This family counts schema types — the SDL types it selected.
|
|
93
|
+
*
|
|
94
|
+
* Plan 0099: `CollectResult.examined` is unit-typed per family (ADR-009 part
|
|
95
|
+
* 1), and the zero-examined message prints the noun. Inheriting the base
|
|
96
|
+
* `'subjects'` is a category error in a sentence whose whole job is naming what
|
|
97
|
+
* was and was not looked at.
|
|
98
|
+
*/
|
|
99
|
+
protected examinedUnitNoun(): string;
|
|
100
|
+
/**
|
|
101
|
+
* How many units this rule actually examined — ADR-010's evidence that a pass
|
|
102
|
+
* was constructed rather than defaulted.
|
|
103
|
+
*
|
|
104
|
+
* The schema types this rule selected.
|
|
105
|
+
*/
|
|
106
|
+
examinedUnits(): number;
|
|
107
|
+
protected collectViolations(): CollectResult;
|
|
71
108
|
private getElements;
|
|
72
109
|
private buildRuleDescription;
|
|
73
110
|
}
|
|
@@ -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,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"schema-rule-builder.d.ts","sourceRoot":"","sources":["../../src/graphql/schema-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D,OAAO,KAAK,EAAE,YAAY,EAA0C,MAAM,oBAAoB,CAAA;AA6C9F,qBAAa,iBAAkB,SAAQ,eAAe;IAIxC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,WAAW,CAAiC;gBAEvB,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,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,GAAG,IAAI,IAAI;IAIX;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,SAAS,IAAI,IAAI;IAMjB;;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;;;;;;;;OAQG;cACgB,IAAI,IAAI,IAAI;IAO/B;;;;;;;OAOG;IACM,gBAAgB,IAAI,OAAO;IAIpC;;;;;;OAMG;IACM,eAAe,IAAI,MAAM;IAOlC,gEAAgE;IACvD,YAAY,IAAI,eAAe;IAOxC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAQhB,4CAA4C;IAE5C;;;;;;;OAOG;cACgB,gBAAgB,IAAI,MAAM;IAI7C;;;;;OAKG;IACH,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,iBAAiB,IAAI,aAAa;IAwB5C,OAAO,CAAC,WAAW;IAqCnB,OAAO,CAAC,oBAAoB;CAQ7B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { TerminalBuilder } from '
|
|
1
|
+
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
2
|
+
import { selectionMemo } from '@nielspeter/eess';
|
|
2
3
|
import { queries as queriesPredicate, mutations as mutationsPredicate, typesNamed as typesNamedPredicate, returnListOf as returnListOfPredicate, } from './schema-predicates.js';
|
|
3
4
|
import { haveFields as haveFieldsCondition, acceptArgs as acceptArgsCondition, haveMatchingResolver as haveMatchingResolverCondition, } from './schema-conditions.js';
|
|
4
5
|
/**
|
|
@@ -30,6 +31,7 @@ function isObjectType(type) {
|
|
|
30
31
|
* .check()
|
|
31
32
|
* ```
|
|
32
33
|
*/
|
|
34
|
+
const selectionOf = selectionMemo();
|
|
33
35
|
export class SchemaRuleBuilder extends TerminalBuilder {
|
|
34
36
|
loaded;
|
|
35
37
|
_predicates = [];
|
|
@@ -43,29 +45,33 @@ export class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
43
45
|
* Filter to only Query root type fields.
|
|
44
46
|
*/
|
|
45
47
|
queries() {
|
|
46
|
-
this.
|
|
47
|
-
|
|
48
|
+
const next = this.copy();
|
|
49
|
+
next._predicates.push(queriesPredicate());
|
|
50
|
+
return next;
|
|
48
51
|
}
|
|
49
52
|
/**
|
|
50
53
|
* Filter to only Mutation root type fields.
|
|
51
54
|
*/
|
|
52
55
|
mutations() {
|
|
53
|
-
this.
|
|
54
|
-
|
|
56
|
+
const next = this.copy();
|
|
57
|
+
next._predicates.push(mutationsPredicate());
|
|
58
|
+
return next;
|
|
55
59
|
}
|
|
56
60
|
/**
|
|
57
61
|
* Filter to object types matching the given name pattern.
|
|
58
62
|
*/
|
|
59
63
|
typesNamed(pattern) {
|
|
60
|
-
this.
|
|
61
|
-
|
|
64
|
+
const next = this.copy();
|
|
65
|
+
next._predicates.push(typesNamedPredicate(pattern));
|
|
66
|
+
return next;
|
|
62
67
|
}
|
|
63
68
|
/**
|
|
64
69
|
* Filter to fields returning a list of the given type.
|
|
65
70
|
*/
|
|
66
71
|
returnListOf(typeName) {
|
|
67
|
-
this.
|
|
68
|
-
|
|
72
|
+
const next = this.copy();
|
|
73
|
+
next._predicates.push(returnListOfPredicate(typeName));
|
|
74
|
+
return next;
|
|
69
75
|
}
|
|
70
76
|
// --- Chain methods ---
|
|
71
77
|
/**
|
|
@@ -97,15 +103,17 @@ export class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
97
103
|
* Assert that types have all listed fields.
|
|
98
104
|
*/
|
|
99
105
|
haveFields(...names) {
|
|
100
|
-
this.
|
|
101
|
-
|
|
106
|
+
const next = this.copy();
|
|
107
|
+
next._conditions.push(haveFieldsCondition(...names));
|
|
108
|
+
return next;
|
|
102
109
|
}
|
|
103
110
|
/**
|
|
104
111
|
* Assert that fields accept all listed arguments.
|
|
105
112
|
*/
|
|
106
113
|
acceptArgs(...names) {
|
|
107
|
-
this.
|
|
108
|
-
|
|
114
|
+
const next = this.copy();
|
|
115
|
+
next._conditions.push(acceptArgsCondition(...names));
|
|
116
|
+
return next;
|
|
109
117
|
}
|
|
110
118
|
/**
|
|
111
119
|
* Assert that schema fields have matching resolver implementations.
|
|
@@ -113,21 +121,89 @@ export class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
113
121
|
* @param resolverFileTexts - Map of file paths to source text
|
|
114
122
|
*/
|
|
115
123
|
haveMatchingResolver(resolverFileTexts) {
|
|
116
|
-
this.
|
|
117
|
-
|
|
124
|
+
const next = this.copy();
|
|
125
|
+
next._conditions.push(haveMatchingResolverCondition(resolverFileTexts));
|
|
126
|
+
return next;
|
|
118
127
|
}
|
|
119
128
|
// --- 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
|
+
/**
|
|
182
|
+
* This family counts schema types — the SDL types it selected.
|
|
183
|
+
*
|
|
184
|
+
* Plan 0099: `CollectResult.examined` is unit-typed per family (ADR-009 part
|
|
185
|
+
* 1), and the zero-examined message prints the noun. Inheriting the base
|
|
186
|
+
* `'subjects'` is a category error in a sentence whose whole job is naming what
|
|
187
|
+
* was and was not looked at.
|
|
188
|
+
*/
|
|
189
|
+
examinedUnitNoun() {
|
|
190
|
+
return 'schema types';
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* How many units this rule actually examined — ADR-010's evidence that a pass
|
|
194
|
+
* was constructed rather than defaulted.
|
|
195
|
+
*
|
|
196
|
+
* The schema types this rule selected.
|
|
197
|
+
*/
|
|
198
|
+
examinedUnits() {
|
|
199
|
+
return this.selected().length;
|
|
200
|
+
}
|
|
120
201
|
collectViolations() {
|
|
121
|
-
const
|
|
122
|
-
const filtered = allElements.filter((element) => this._predicates.every((predicate) => predicate.test(element)));
|
|
202
|
+
const filtered = this.selected();
|
|
123
203
|
if (filtered.length === 0) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const ruleId = this._metadata?.id ?? 'unnamed';
|
|
128
|
-
console.warn(`[eess] Schema rule '${ruleId}' has predicates but no conditions. ` +
|
|
129
|
-
`Did you forget to add a condition after .should()?`);
|
|
130
|
-
return [];
|
|
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 };
|
|
131
207
|
}
|
|
132
208
|
const context = {
|
|
133
209
|
rule: this.buildRuleDescription(),
|
|
@@ -140,7 +216,7 @@ export class SchemaRuleBuilder extends TerminalBuilder {
|
|
|
140
216
|
for (const condition of this._conditions) {
|
|
141
217
|
violations.push(...condition.evaluate(filtered, context));
|
|
142
218
|
}
|
|
143
|
-
return violations;
|
|
219
|
+
return { violations, examined: filtered.length };
|
|
144
220
|
}
|
|
145
221
|
getElements() {
|
|
146
222
|
const elements = [];
|
|
@@ -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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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ArchViolation } from '@nielspeter/eess';
|
|
2
|
+
/**
|
|
3
|
+
* Why a baseline stopped matching — the diagnosis half of `Baseline`.
|
|
4
|
+
*
|
|
5
|
+
* `Baseline` answers "is this finding already accepted?", which is three short
|
|
6
|
+
* methods. Explaining why an accepted set suddenly matches nothing is a
|
|
7
|
+
* different job and five times the code, and keeping both in one class is what
|
|
8
|
+
* pushed it past its own size rule.
|
|
9
|
+
*
|
|
10
|
+
* These take an explicit {@link BaselineFacts} rather than the instance, so each
|
|
11
|
+
* diagnosis is callable — and testable — against a stated set of facts instead
|
|
12
|
+
* of a constructed object.
|
|
13
|
+
*/
|
|
14
|
+
export interface BaselineFacts {
|
|
15
|
+
readonly knownHashes: ReadonlySet<string>;
|
|
16
|
+
readonly knownSubjects: ReadonlyMap<string, string>;
|
|
17
|
+
readonly root: string;
|
|
18
|
+
readonly sourcePath: string | undefined;
|
|
19
|
+
readonly hashVersion: number;
|
|
20
|
+
isKnown(violation: ArchViolation): boolean;
|
|
21
|
+
hasEntry(violation: ArchViolation): boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function descriptionChangeFinding(ctx: BaselineFacts, violations: ArchViolation[]): ArchViolation | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* A meta-finding for a baseline that is present, non-empty, and matched
|
|
26
|
+
* **nothing** in a run that produced findings it could have matched.
|
|
27
|
+
*
|
|
28
|
+
* Gated on the measurement, not on the version field. An earlier cut fired
|
|
29
|
+
* whenever `hashVersion` was older, which was wrong for most users: v2
|
|
30
|
+
* hashing is byte-identical to v1 for any violation whose fields contain no
|
|
31
|
+
* path, so the majority of existing baselines still match perfectly. Failing
|
|
32
|
+
* those with "its entries match nothing" was both a false red and a false
|
|
33
|
+
* statement — a derived value reported as a fact with nothing disagreeing
|
|
34
|
+
* with it, which is the ADR-009 rule 5 mistake this bug was about.
|
|
35
|
+
*
|
|
36
|
+
* `matched === 0` is the independently-derived signal, and it covers every
|
|
37
|
+
* cause at once: a v1 file, a root that resolved differently here than where
|
|
38
|
+
* the file was written, or a baseline for a different project entirely.
|
|
39
|
+
*
|
|
40
|
+
* Silent when the run produced nothing to match (`matchable === 0`) — an
|
|
41
|
+
* empty run is not evidence about the baseline. Carries `bypassFilters`
|
|
42
|
+
* because the filters are what it is reporting on (ADR-008; plan 0067).
|
|
43
|
+
*/
|
|
44
|
+
export declare function unmatchedBaselineFinding(ctx: BaselineFacts, matched: number, matchable: number): ArchViolation | undefined;
|
|
45
|
+
//# sourceMappingURL=baseline-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline-diagnostics.d.ts","sourceRoot":"","sources":["../../src/helpers/baseline-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGrD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAA;IAC1C,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAA;CAC5C;AA0CD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,aAAa,EAClB,UAAU,EAAE,aAAa,EAAE,GAC1B,aAAa,GAAG,SAAS,CAkC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,SAAS,CA6B3B"}
|