@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
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { Node } from 'ts-morph';
|
|
2
|
+
import { getElementName, getElementFile, getElementLine } from '../core/violation.js';
|
|
3
|
+
import { sidesOf } from './correspondence-builder.js';
|
|
4
|
+
function isNodeBearer(value) {
|
|
5
|
+
return (typeof value === 'object' &&
|
|
6
|
+
value !== null &&
|
|
7
|
+
'getNode' in value &&
|
|
8
|
+
typeof value.getNode === 'function');
|
|
9
|
+
}
|
|
10
|
+
/** Resolve a subject to a ts-morph node for file:line, or undefined if it carries none. */
|
|
11
|
+
function toNode(subject) {
|
|
12
|
+
if (Node.isNode(subject))
|
|
13
|
+
return subject;
|
|
14
|
+
if (isNodeBearer(subject)) {
|
|
15
|
+
const node = subject.getNode();
|
|
16
|
+
if (Node.isNode(node))
|
|
17
|
+
return node;
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
function keyViolations(keyed, key, message, meta) {
|
|
22
|
+
const subjects = keyed.get(key) ?? [];
|
|
23
|
+
if (subjects.length === 0) {
|
|
24
|
+
// Plain-key side — no source location available.
|
|
25
|
+
return [baseViolation({ element: key, file: '', line: 0 }, message, meta)];
|
|
26
|
+
}
|
|
27
|
+
return subjects.map((subject) => {
|
|
28
|
+
const node = toNode(subject);
|
|
29
|
+
if (node) {
|
|
30
|
+
return baseViolation({
|
|
31
|
+
element: getElementName(node),
|
|
32
|
+
file: getElementFile(node),
|
|
33
|
+
line: getElementLine(node),
|
|
34
|
+
}, message, meta);
|
|
35
|
+
}
|
|
36
|
+
return baseViolation({ element: key, file: '', line: 0 }, message, meta);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A declaration names a side this rule does not have — plan 0097.
|
|
41
|
+
*
|
|
42
|
+
* Covers `.expectEmpty(name)` and `.distinctKeysOn(name)` alike, because both
|
|
43
|
+
* are membership tests against side names and both were silent on a typo. The
|
|
44
|
+
* remedy is mechanical and names the sides that DO exist, so the reader does
|
|
45
|
+
* not have to go and look.
|
|
46
|
+
*/
|
|
47
|
+
function unboundSideViolation(name, actual, metadata, reason) {
|
|
48
|
+
const known = actual.map((s) => `'${s}'`).join(' and ');
|
|
49
|
+
return {
|
|
50
|
+
...baseViolation({ element: name, file: '', line: 0 }, `this rule declares something about a side named '${name}', but its sides are ${known} — ` +
|
|
51
|
+
`so the declaration binds to nothing and asserts nothing.`, {
|
|
52
|
+
rule: `crossProject [${actual.join(' <-> ')}]`,
|
|
53
|
+
because: reason,
|
|
54
|
+
ruleId: metadata?.id,
|
|
55
|
+
}),
|
|
56
|
+
suggestion: `Correct the side name to one of ${known}, or remove the declaration.`,
|
|
57
|
+
docs: undefined,
|
|
58
|
+
bypassFilters: true,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The declared side filled up — plan 0097.
|
|
63
|
+
*
|
|
64
|
+
* This finding is why `.expectEmpty(side)` replaced `allowEmpty(side)`: the
|
|
65
|
+
* permission had no failing state, so a side that gained keys silently kept a
|
|
66
|
+
* rule green that was certifying nothing about them. An assertion that expires
|
|
67
|
+
* reports itself; a permission never does.
|
|
68
|
+
*
|
|
69
|
+
* Its remedy is mechanical and is the one ADR-009 rule 2 asks be verified:
|
|
70
|
+
* remove the declaration, and the finding clears.
|
|
71
|
+
*/
|
|
72
|
+
function unexpectedlyNonEmptyViolation(sideName, meta) {
|
|
73
|
+
return {
|
|
74
|
+
...baseViolation({ element: sideName, file: '', line: 0 }, `crossProject side '${sideName}' was declared empty with .expectEmpty('${sideName}'), ` +
|
|
75
|
+
`and now matches subjects — so the declaration no longer describes this rule.`, meta),
|
|
76
|
+
suggestion: `Remove .expectEmpty('${sideName}') so the side is compared like any other, or narrow ` +
|
|
77
|
+
`the '${sideName}' selector if it was meant to stay empty.`,
|
|
78
|
+
docs: undefined,
|
|
79
|
+
bypassFilters: true,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function emptyViolation(sideName, meta) {
|
|
83
|
+
return {
|
|
84
|
+
...baseViolation({ element: sideName, file: '', line: 0 }, `crossProject side '${sideName}' matched 0 subjects — a pairing over an ` +
|
|
85
|
+
`empty side certifies nothing. Fix the selector, or call .expectEmpty('${sideName}') ` +
|
|
86
|
+
`if an empty side is valid here.`, meta),
|
|
87
|
+
// Its own remedy, overriding what `baseViolation` copied from the rule's
|
|
88
|
+
// metadata (bug 0021). `baseViolation` is shared with real violations, where
|
|
89
|
+
// inheriting the author's `suggestion` is correct — so the override has to be
|
|
90
|
+
// here, and the guard in `execute-rule.ts` cannot reach it.
|
|
91
|
+
suggestion: `Fix the '${sideName}' selector so it matches at least one subject, or call ` +
|
|
92
|
+
`.expectEmpty('${sideName}') if an empty side is the point — that asserts it, and fails the day the side fills up.`,
|
|
93
|
+
docs: undefined,
|
|
94
|
+
// Config-level meta-finding: no source file to attribute to, so it must
|
|
95
|
+
// survive diff-aware/baseline or the guard re-greens under standard CI.
|
|
96
|
+
bypassFilters: true,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The common shape of every crossProject finding.
|
|
101
|
+
*
|
|
102
|
+
* `element`/`file`/`line` travel together as one `at` — they are a location,
|
|
103
|
+
* and passing three positional strings-and-a-number invited exactly the
|
|
104
|
+
* transposition the parameter cap exists to prevent.
|
|
105
|
+
*/
|
|
106
|
+
function baseViolation(at, message, meta) {
|
|
107
|
+
const { element, file, line } = at;
|
|
108
|
+
return {
|
|
109
|
+
rule: meta.rule,
|
|
110
|
+
ruleId: meta.ruleId,
|
|
111
|
+
element,
|
|
112
|
+
file,
|
|
113
|
+
line,
|
|
114
|
+
message,
|
|
115
|
+
because: meta.because,
|
|
116
|
+
suggestion: meta.suggestion,
|
|
117
|
+
docs: meta.docs,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Declarations — `.expectEmpty(name)` / `.withDistinctKeys(name)` — that name a
|
|
122
|
+
* side this crossProject does not have.
|
|
123
|
+
*
|
|
124
|
+
* A declaration that binds to no side is a configuration finding, not a no-op
|
|
125
|
+
* (plan 0097, correcting the same defect the shipped version had).
|
|
126
|
+
* `.expectEmpty('servcies')` was accepted silently and asserted nothing
|
|
127
|
+
* forever: the exact hazard this class's own docstring rejects the permanent
|
|
128
|
+
* form for ("one word, silent forever, TYPO OR NOT, and nothing revisits it"),
|
|
129
|
+
* inherited whole by the replacement.
|
|
130
|
+
*
|
|
131
|
+
* ADR-010 part 3 already ruled the structurally identical preset case — a
|
|
132
|
+
* declaration binding to no constructed rule is a FAILING finding, never a
|
|
133
|
+
* warning — so this follows settled precedent rather than deciding anew.
|
|
134
|
+
*
|
|
135
|
+
* Here rather than in the setter: `.expectEmpty(name)` may legally precede
|
|
136
|
+
* `.side(name, …)`, so the setter cannot know yet.
|
|
137
|
+
*
|
|
138
|
+
* A Set, not a concatenation: a name in BOTH sets produced two findings with
|
|
139
|
+
* identical element, message, file and line — the identity shape bugs 0064,
|
|
140
|
+
* 0065 and 0067 were filed for. And membership is tested against the side LIST
|
|
141
|
+
* rather than two name comparisons, so it cannot rot if arity ever changes.
|
|
142
|
+
*/
|
|
143
|
+
export function unboundDeclarationFindings(declared, sideA, sideB) {
|
|
144
|
+
const declaredNames = new Set([...declared.expectEmptySides, ...declared.distinctKeys]);
|
|
145
|
+
return [...declaredNames]
|
|
146
|
+
.filter((n) => !declared.sides.some((side) => side.name === n))
|
|
147
|
+
.map((name) => unboundSideViolation(name, [sideA.name, sideB.name], declared.metadata, declared.reason));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Findings about each side being empty, and about a declaration that says so
|
|
151
|
+
* while the side is not.
|
|
152
|
+
*/
|
|
153
|
+
export function emptinessFindings(p) {
|
|
154
|
+
const { sideA, sideB, result, meta, declared } = p;
|
|
155
|
+
const emptyFindings = [];
|
|
156
|
+
const falseDeclarations = [];
|
|
157
|
+
for (const [side, isEmpty] of [
|
|
158
|
+
[sideA, result.aEmpty],
|
|
159
|
+
[sideB, result.bEmpty],
|
|
160
|
+
]) {
|
|
161
|
+
// Per-side only. A `declaresEmpty()` helper stood here with an
|
|
162
|
+
// `_expectEmpty || every(side => declared)` body; the `every` half was
|
|
163
|
+
// unreachable — if every side is in the set then `has(side.name)` is
|
|
164
|
+
// already true for the side under test — and three reviewers deleted it
|
|
165
|
+
// against the full suite with nothing failing. Its stated rationale
|
|
166
|
+
// ("without the OR a user who declared both sides still redded") was a
|
|
167
|
+
// property the code never had.
|
|
168
|
+
const sideDeclared = declared.expectEmptySides.has(side.name);
|
|
169
|
+
if (isEmpty && !sideDeclared) {
|
|
170
|
+
emptyFindings.push(emptyViolation(side.name, meta));
|
|
171
|
+
}
|
|
172
|
+
// The expiry half, and the reason this is an assertion rather than a
|
|
173
|
+
// permission: a declared-empty side that filled up is the intent
|
|
174
|
+
// reporting itself, where `allowEmpty()` stayed silent forever.
|
|
175
|
+
if (!isEmpty && declared.expectEmptySides.has(side.name)) {
|
|
176
|
+
falseDeclarations.push(unexpectedlyNonEmptyViolation(side.name, meta));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return { emptyFindings, falseDeclarations };
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Findings from the pairing itself — keys on one side with no partner
|
|
183
|
+
* on the other, in whichever directions the rule asked about.
|
|
184
|
+
*/
|
|
185
|
+
export function matchFindings(p) {
|
|
186
|
+
const { sideA, sideB, aKeyed, bKeyed, result, meta, declared } = p;
|
|
187
|
+
const violations = [];
|
|
188
|
+
if (declared.checkComplete) {
|
|
189
|
+
for (const key of result.missing) {
|
|
190
|
+
violations.push(...keyViolations(aKeyed, key, `${sideA.name} "${key}" has no matching ${sideB.name}`, meta));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (declared.checkNoOrphans) {
|
|
194
|
+
for (const key of result.orphans) {
|
|
195
|
+
violations.push(...keyViolations(bKeyed, key, `${sideB.name} "${key}" has no matching ${sideA.name}`, meta));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Over-normalization guard (opt-in): one key from many subjects can mask a
|
|
199
|
+
// real "two subjects, one counterpart" mismatch.
|
|
200
|
+
return violations;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Findings for a side whose key function maps several distinct subjects onto
|
|
204
|
+
* one key — over-normalization can mask a real mismatch.
|
|
205
|
+
*/
|
|
206
|
+
export function duplicateKeyFindings(p) {
|
|
207
|
+
const { sideA, sideB, aKeyed, bKeyed, meta, declared } = p;
|
|
208
|
+
const violations = [];
|
|
209
|
+
for (const side of [sideA, sideB]) {
|
|
210
|
+
if (!declared.distinctKeys.has(side.name))
|
|
211
|
+
continue;
|
|
212
|
+
const keyed = side === sideA ? aKeyed : bKeyed;
|
|
213
|
+
for (const [key, subjects] of keyed) {
|
|
214
|
+
if (subjects.length > 1) {
|
|
215
|
+
violations.push(...keyViolations(keyed, key, `${side.name} maps ${String(subjects.length)} distinct subjects to the key "${key}" — over-normalization can mask a real mismatch`, meta));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// NOTE: independence of the two sides is a *requirement* stated in the docs,
|
|
220
|
+
// not something the builder can mechanically enforce — two literal lists can
|
|
221
|
+
// be legitimately independent (e.g. Object.keys of two different runtime
|
|
222
|
+
// objects), so a "both sides literal" heuristic would false-positive, and a
|
|
223
|
+
// console.warn is invisible to the agent consumer (ADR-008). Left to review.
|
|
224
|
+
// The false declaration FIRST — it says the configuration is wrong, which the
|
|
225
|
+
// reader needs before the findings produced under it, matching the ordering
|
|
226
|
+
// `RuleBuilder.evaluate` and the preset config findings already use.
|
|
227
|
+
return violations;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Run the pairing and collect its findings, in four phases:
|
|
231
|
+
* unbound declarations, emptiness, the match itself, then duplicate keys.
|
|
232
|
+
*
|
|
233
|
+
* ## The arity throw is an invariant, not an error path
|
|
234
|
+
*
|
|
235
|
+
* Unreachable through `.check()` / `.warn()` / `.violations()` as of the
|
|
236
|
+
* bug-0025 fix: `assertsSomething()` is false for wrong arity, so the gate
|
|
237
|
+
* reports it as a configuration finding before this method is called. Kept as
|
|
238
|
+
* the invariant it always was — this method indexes `_sides[0]` and
|
|
239
|
+
* `_sides[1]` below, and a direct subclass caller deserves the named error
|
|
240
|
+
* rather than an undefined read. Do not treat it as the answer to "what
|
|
241
|
+
* happens with the wrong number of sides": the loud answer is the gate, and if
|
|
242
|
+
* this ever throws again through a terminal, the gate is gone.
|
|
243
|
+
*
|
|
244
|
+
* There is deliberately NO missing-assertion throw: the gate reports that as a
|
|
245
|
+
* configuration finding before this runs (bug 0019), which is why the gate sits
|
|
246
|
+
* ahead of this method — a `RangeError` from here escaped the CLI's
|
|
247
|
+
* `ArchRuleError`-only catch and dropped every remaining rule file. The
|
|
248
|
+
* sides-count check stays, because wrong arity is a different fault from a
|
|
249
|
+
* missing assertion and its remedy is another `.side(...)`.
|
|
250
|
+
*/
|
|
251
|
+
/**
|
|
252
|
+
* The two sides and the metadata every finding from them carries.
|
|
253
|
+
*
|
|
254
|
+
* Extracted so `collectViolations` reads as the decision sequence it is —
|
|
255
|
+
* unbound, then emptiness, then matching — rather than opening with a guard
|
|
256
|
+
* and a literal. The arity check lives here because it is the precondition
|
|
257
|
+
* for the metadata: the rule name is built from both side names.
|
|
258
|
+
*/
|
|
259
|
+
export function resolveSides(sides, reason, metadata) {
|
|
260
|
+
const [sideA, sideB] = sides;
|
|
261
|
+
if (sides.length !== 2 || sideA === undefined || sideB === undefined) {
|
|
262
|
+
throw new RangeError(`crossProject() requires exactly two .side(...) calls; got ${String(sides.length)}.`);
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
sideA,
|
|
266
|
+
sideB,
|
|
267
|
+
meta: {
|
|
268
|
+
rule: `crossProject [${sideA.name} <-> ${sideB.name}]`,
|
|
269
|
+
because: reason,
|
|
270
|
+
ruleId: metadata?.id,
|
|
271
|
+
suggestion: metadata?.suggestion,
|
|
272
|
+
docs: metadata?.docs,
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Both sides, materialized once — plan 0096, and the ONE method both readers
|
|
278
|
+
* call.
|
|
279
|
+
*
|
|
280
|
+
* CrossProject has no corpus of its own: its sides ARE its input, so the
|
|
281
|
+
* examined unit is their keys and the "selection" is the materialization
|
|
282
|
+
* itself. Sharing it matters more here than anywhere else, because
|
|
283
|
+
* `Side.materialize` is a bare closure over a user-supplied `keyFn` and a full
|
|
284
|
+
* rule selection — so a second derivation would re-run arbitrary user code,
|
|
285
|
+
* and `diagnose()` calling the accessor before `check()` would pay for the
|
|
286
|
+
* whole thing twice.
|
|
287
|
+
*/
|
|
288
|
+
export function materializeSides(owner, a, b) {
|
|
289
|
+
// Narrowed, not asserted (ADR-005). A `?? new Map()` fallback would be worse
|
|
290
|
+
// than the `!` this replaced — the compute always returns two entries, so the
|
|
291
|
+
// fallback could never fire, and a branch that cannot fire is the shape this
|
|
292
|
+
// whole programme is about even when it is only types. Throwing says the same
|
|
293
|
+
// thing without lying about it.
|
|
294
|
+
const pair = sidesOf(owner, () => [a.materialize(), b.materialize()]);
|
|
295
|
+
const [first, second] = pair;
|
|
296
|
+
if (first === undefined || second === undefined) {
|
|
297
|
+
throw new RangeError(`crossProject(): the memoized side pair held ${String(pair.length)} entries, not 2.`);
|
|
298
|
+
}
|
|
299
|
+
return [first, second];
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=correspondence-findings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correspondence-findings.js","sourceRoot":"","sources":["../../src/builders/correspondence-findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { CollectResult } from '../core/terminal-builder.js';
|
|
1
2
|
import type { SourceFile } from 'ts-morph';
|
|
2
3
|
import type { ArchProject } from '../core/project.js';
|
|
3
4
|
import type { PairCondition } from '../core/pair-condition.js';
|
|
4
5
|
import type { Layer, LayerPair } from '../models/cross-layer.js';
|
|
5
|
-
import {
|
|
6
|
+
import type { GlobNode } from '@nielspeter/eess';
|
|
7
|
+
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
6
8
|
/**
|
|
7
9
|
* Builder for cross-layer consistency rules.
|
|
8
10
|
*
|
|
@@ -11,8 +13,8 @@ import { TerminalBuilder } from '@nielspeter/eess';
|
|
|
11
13
|
*
|
|
12
14
|
* @example
|
|
13
15
|
* crossLayer(project)
|
|
14
|
-
* .layer('routes', 'src/routes/**')
|
|
15
|
-
* .layer('schemas', 'src/schemas/**')
|
|
16
|
+
* .layer('routes', '**\/src/routes/**')
|
|
17
|
+
* .layer('schemas', '**\/src/schemas/**')
|
|
16
18
|
* .mapping((a, b) => a.getBaseName().replace('Route', '') === b.getBaseName().replace('Schema', ''))
|
|
17
19
|
* .forEachPair()
|
|
18
20
|
* .should(haveMatchingCounterpart())
|
|
@@ -20,13 +22,24 @@ import { TerminalBuilder } from '@nielspeter/eess';
|
|
|
20
22
|
*/
|
|
21
23
|
export declare class CrossLayerBuilder {
|
|
22
24
|
private readonly project;
|
|
23
|
-
private
|
|
25
|
+
private _layerDefs;
|
|
24
26
|
constructor(project: ArchProject);
|
|
25
27
|
/**
|
|
26
28
|
* Define a layer by name and glob pattern.
|
|
27
29
|
* At least two layers must be defined before calling `.mapping()`.
|
|
28
30
|
*/
|
|
29
31
|
layer(name: string, pattern: string): this;
|
|
32
|
+
/**
|
|
33
|
+
* An independent copy, carrying the layer definitions (bug 0016).
|
|
34
|
+
*
|
|
35
|
+
* This class does not extend {@link TerminalBuilder} — it produces a rule
|
|
36
|
+
* rather than being one — so it does not inherit that class's `copy()`. It
|
|
37
|
+
* still needs copy-on-write for the same reason: a held `crossLayer(p)`
|
|
38
|
+
* accumulated a layer per `.layer()` call across every rule derived from it,
|
|
39
|
+
* and `mapping()` pairs *consecutive* layers, so an extra layer silently
|
|
40
|
+
* changes which pairs a later rule compares.
|
|
41
|
+
*/
|
|
42
|
+
private copy;
|
|
30
43
|
/**
|
|
31
44
|
* Provide a mapping function that determines which elements form pairs.
|
|
32
45
|
* The function receives one element from each layer and returns `true` if they should be paired.
|
|
@@ -42,7 +55,8 @@ export declare class CrossLayerBuilder {
|
|
|
42
55
|
export declare class MappedCrossLayerBuilder {
|
|
43
56
|
private readonly layers;
|
|
44
57
|
private readonly pairs;
|
|
45
|
-
|
|
58
|
+
private readonly project?;
|
|
59
|
+
constructor(layers: Layer[], pairs: LayerPair[], project?: ArchProject | undefined);
|
|
46
60
|
/**
|
|
47
61
|
* Iterate over each matched pair. Returns a builder for attaching conditions.
|
|
48
62
|
*/
|
|
@@ -54,7 +68,8 @@ export declare class MappedCrossLayerBuilder {
|
|
|
54
68
|
export declare class PairConditionBuilder {
|
|
55
69
|
private readonly layers;
|
|
56
70
|
private readonly pairs;
|
|
57
|
-
|
|
71
|
+
private readonly project?;
|
|
72
|
+
constructor(layers: Layer[], pairs: LayerPair[], project?: ArchProject | undefined);
|
|
58
73
|
/**
|
|
59
74
|
* Attach a pair condition to evaluate against matched pairs.
|
|
60
75
|
*/
|
|
@@ -67,8 +82,67 @@ export declare class PairFinalBuilder extends TerminalBuilder {
|
|
|
67
82
|
private readonly layers;
|
|
68
83
|
private readonly pairs;
|
|
69
84
|
private readonly condition;
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
private readonly project?;
|
|
86
|
+
/**
|
|
87
|
+
* @param project - Optional so the constructor stays source-compatible; the
|
|
88
|
+
* chain always supplies it. Without it `doctor` cannot check this rule's
|
|
89
|
+
* layer globs and has to report that it could not, which is honest but
|
|
90
|
+
* useless — and used to be silent.
|
|
91
|
+
*/
|
|
92
|
+
constructor(layers: Layer[], pairs: LayerPair[], condition: PairCondition, project?: ArchProject | undefined);
|
|
93
|
+
/** The project this rule was built against. See `RuleBuilder.getProject`. */
|
|
94
|
+
getProject(): ArchProject | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* The layer globs, one tree each.
|
|
97
|
+
*
|
|
98
|
+
* Per layer rather than one `any` node, for the same reason as
|
|
99
|
+
* `assignedFrom`: a dead glob means that layer is empty, and every pair
|
|
100
|
+
* involving it is silently unchecked. Folding them together would report a
|
|
101
|
+
* fault only when EVERY layer was empty.
|
|
102
|
+
*/
|
|
103
|
+
globs(): readonly GlobNode[];
|
|
104
|
+
/**
|
|
105
|
+
* Does the condition this rule was built with diagnose its own empty layers?
|
|
106
|
+
*
|
|
107
|
+
* **Asked of the condition, not asserted about all of them** (plan 0081). This
|
|
108
|
+
* returned a bare `true` while the docstring here claimed "all three produce a
|
|
109
|
+
* finding naming the layer" — and at v0.45.0 that was false, because
|
|
110
|
+
* `haveMatchingCounterpart` missed a dead FINAL layer. The blanket declaration
|
|
111
|
+
* suppressed the gate for precisely the case its declared owner did not handle,
|
|
112
|
+
* so the reader got silence instead of a generic message
|
|
113
|
+
* ([ts-archunit bug 0040](https://github.com/nielspeter/ts-archunit/blob/main/bugs/fixed/0040-a-crosslayer-rule-reports-nothing-when-its-layer-resolves-nothing.md)).
|
|
114
|
+
*
|
|
115
|
+
* A prose claim about three implementations goes stale when a fourth arrives.
|
|
116
|
+
* A tag read off the condition cannot: an untagged condition is covered by the
|
|
117
|
+
* gate, which is the recoverable direction.
|
|
118
|
+
*
|
|
119
|
+
* The gate is worth standing down for when the tag IS present: it short-circuits
|
|
120
|
+
* before the condition runs, and the condition's finding names the dead layer
|
|
121
|
+
* and points at the `.layer()` call to edit — a remedy corrected three times
|
|
122
|
+
* before it was right (bug 0042).
|
|
123
|
+
*/
|
|
124
|
+
protected ownsDiscoveryDiagnosis(): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Pairs this rule examined — plan 0098. `condition.evaluate` receives exactly
|
|
127
|
+
* this array, so the count cannot drift from what was checked.
|
|
128
|
+
*/
|
|
129
|
+
/**
|
|
130
|
+
* This family counts layer pairs — the pairs of layers it compares.
|
|
131
|
+
*
|
|
132
|
+
* Plan 0099: `CollectResult.examined` is unit-typed per family (ADR-009 part
|
|
133
|
+
* 1), and the zero-examined message prints the noun. Inheriting the base
|
|
134
|
+
* `'subjects'` is a category error in a sentence whose whole job is naming what
|
|
135
|
+
* was and was not looked at.
|
|
136
|
+
*/
|
|
137
|
+
protected examinedUnitNoun(): string;
|
|
138
|
+
/**
|
|
139
|
+
* How many units this rule actually examined — ADR-010's evidence that a pass
|
|
140
|
+
* was constructed rather than defaulted.
|
|
141
|
+
*
|
|
142
|
+
* The materialized elements of the layer selection.
|
|
143
|
+
*/
|
|
144
|
+
examinedUnits(): number;
|
|
145
|
+
protected collectViolations(): CollectResult;
|
|
72
146
|
}
|
|
73
147
|
/**
|
|
74
148
|
* Entry point: create a cross-layer consistency rule builder.
|
|
@@ -78,19 +152,28 @@ export declare class PairFinalBuilder extends TerminalBuilder {
|
|
|
78
152
|
*
|
|
79
153
|
* @example
|
|
80
154
|
* crossLayer(project)
|
|
81
|
-
* .layer('routes', 'src/routes/**')
|
|
82
|
-
* .layer('schemas', 'src/schemas/**')
|
|
155
|
+
* .layer('routes', '**\/src/routes/**')
|
|
156
|
+
* .layer('schemas', '**\/src/schemas/**')
|
|
83
157
|
* .mapping((a, b) => a.getBaseName().replace('-route', '') === b.getBaseName().replace('-schema', ''))
|
|
84
158
|
* .forEachPair()
|
|
85
159
|
* .should(haveMatchingCounterpart())
|
|
86
160
|
* .check()
|
|
161
|
+
*/
|
|
162
|
+
/**
|
|
163
|
+
* @deprecated Superseded by `crossProject()` **for pairings that are key equality** —
|
|
164
|
+
* `key(a) === key(b)` with each key derived from its own side. That covers most
|
|
165
|
+
* rules, including `haveConsistentExports` (a key function may return an array, so
|
|
166
|
+
* one file expands into one key per symbol). It is a rewrite, not a rename: the
|
|
167
|
+
* pairing moves from `.mapping(fn)` into the key.
|
|
168
|
+
*
|
|
169
|
+
* KEEP `crossLayer` if your `.mapping(fn)` is not key equality — prefix matching,
|
|
170
|
+
* directory nesting, "imports its schema" — or if you use `satisfyPairCondition`,
|
|
171
|
+
* whose callback builds its own violation (including `measured`/`metricUnit` for the
|
|
172
|
+
* baseline ratchet) and has no `crossProject` equivalent. Chains of 3+ layers become
|
|
173
|
+
* N−1 separate rules.
|
|
87
174
|
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* (not just two globs within one project) and is the engine `crossLayer` should
|
|
91
|
-
* have been built on. `crossLayer` continues to work; new rules should prefer
|
|
92
|
-
* `correspondence({ left, right }).should().beComplete(...)`. Full internal
|
|
93
|
-
* delegation onto `correspondence()` is a follow-up (see plan 0059, Phase 3).
|
|
175
|
+
* Migration table and the full list of what changes:
|
|
176
|
+
* https://github.com/nielspeter/eess/blob/main/docs/cross-project.md#migrating-from-crosslayer
|
|
94
177
|
*/
|
|
95
178
|
export declare function crossLayer(p: ArchProject): CrossLayerBuilder;
|
|
96
179
|
//# sourceMappingURL=cross-layer-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-layer-builder.d.ts","sourceRoot":"","sources":["../../src/builders/cross-layer-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"cross-layer-builder.d.ts","sourceRoot":"","sources":["../../src/builders/cross-layer-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,2BAA2B,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAiD7D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,UAAU,CAA+C;gBAEpC,OAAO,EAAE,WAAW;IAEjD;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAM1C;;;;;;;;;OASG;IACH,OAAO,CAAC,IAAI;IAMZ;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,OAAO,GAAG,uBAAuB;CAkBhF;AAED;;;GAGG;AAQH,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFR,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE,WAAW,YAAA;IAGxC;;OAEG;IACH,WAAW,IAAI,oBAAoB;CAGpC;AAED;;GAEG;AAQH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFR,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE,WAAW,YAAA;IAGxC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG,gBAAgB;CAGnD;AAED;;GAEG;AAQH,qBAAa,gBAAiB,SAAQ,eAAe;IAQjD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAV3B;;;;;OAKG;gBAEgB,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,SAAS,EAAE,EAClB,SAAS,EAAE,aAAa,EACxB,OAAO,CAAC,EAAE,WAAW,YAAA;IAKxC,6EAA6E;IAC7E,UAAU,IAAI,WAAW,GAAG,SAAS;IAIrC;;;;;;;OAOG;IACM,KAAK,IAAI,SAAS,QAAQ,EAAE;IAcrC;;;;;;;;;;;;;;;;;;;OAmBG;cACgB,sBAAsB,IAAI,OAAO;IASpD;;;OAGG;IAEH;;;;;;;OAOG;cACgB,gBAAgB,IAAI,MAAM;IAI7C;;;;;OAKG;IACH,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,iBAAiB,IAAI,aAAa;CAsB7C;AAED;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAE5D"}
|