@nielspeter/eess-ts 0.2.1 → 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 +61 -35
- 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 -24
- 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
|
@@ -1,40 +1,76 @@
|
|
|
1
1
|
import picomatch from 'picomatch';
|
|
2
|
-
import {
|
|
2
|
+
import { globAnyOf } from '@nielspeter/eess';
|
|
3
|
+
import { splitGlobArgs } from '../core/import-options.js';
|
|
4
|
+
import { candidatesFor } from '../core/import-candidates.js';
|
|
5
|
+
import { edgesOf, FORWARD_EDGE_KINDS } from '../core/module-edges.js';
|
|
6
|
+
import { rootOf } from '../core/project-relative.js';
|
|
3
7
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
+
* Which edge kinds these predicates see.
|
|
9
|
+
*
|
|
10
|
+
* The **same set as the conditions** (`DEPENDENCY_KINDS` in
|
|
11
|
+
* `conditions/dependency.ts`), and it has to be: `notImportFrom` is one
|
|
12
|
+
* identifier with two definitions chosen by chain position, so a predicate that
|
|
13
|
+
* disagreed with its own condition about what an import is would be this plan's
|
|
14
|
+
* Problem statement inside one method name.
|
|
15
|
+
*/
|
|
16
|
+
const PREDICATE_KINDS = FORWARD_EDGE_KINDS;
|
|
17
|
+
/**
|
|
18
|
+
* Every string a glob may be matched against, across every edge in the file.
|
|
19
|
+
*
|
|
20
|
+
* Flattened rather than grouped per edge: these predicates only ask "does ANY
|
|
21
|
+
* edge match", so which edge a candidate came from is not needed. See
|
|
22
|
+
* `candidatesFor` for why one edge can contribute two strings.
|
|
23
|
+
*
|
|
24
|
+
* **Two consumers, moving subjects in opposite directions** (plan 0071 §3), which
|
|
25
|
+
* is why widening this is in scope rather than an implementation detail:
|
|
26
|
+
*
|
|
27
|
+
* - `notImportFrom` is **anti-monotone** — a file with a matching re-export now
|
|
28
|
+
* fails the predicate and drops out of the selection, so rules select FEWER
|
|
29
|
+
* subjects and report FEWER findings. Losing findings is the one direction this
|
|
30
|
+
* release claims cannot happen, so it is asserted by identity.
|
|
31
|
+
* - `importFrom` is **monotone-increasing** — more files match, more subjects,
|
|
32
|
+
* more findings.
|
|
33
|
+
*
|
|
34
|
+
* The condition-layer measurement ("0 findings lost") cannot see either: this
|
|
35
|
+
* repo's own rules use `notImportFrom` in condition position 16 times and
|
|
36
|
+
* predicate position zero, so the corpus structurally cannot show the loss.
|
|
8
37
|
*/
|
|
9
|
-
function
|
|
10
|
-
return
|
|
11
|
-
.filter((
|
|
12
|
-
.
|
|
38
|
+
function importCandidatePaths(sourceFile, ignoreTypeImports = false) {
|
|
39
|
+
return (edgesOf(sourceFile)
|
|
40
|
+
.filter((edge) => {
|
|
41
|
+
if (!PREDICATE_KINDS[edge.kind])
|
|
42
|
+
return false;
|
|
43
|
+
if (!ignoreTypeImports)
|
|
44
|
+
return true;
|
|
45
|
+
return !edge.typeOnly;
|
|
46
|
+
})
|
|
47
|
+
// The importing file's root, so a project-relative import glob works here
|
|
48
|
+
// exactly as it does in the condition family (bugs 0037, 0036). Measured
|
|
49
|
+
// before this: `importFrom('src/domain/**')` selected 0 modules where the
|
|
50
|
+
// anchored spelling selected 5.
|
|
51
|
+
.flatMap((edge) => [...candidatesFor(edge.specifier, edge.resolvedPath, rootOf(sourceFile))]));
|
|
13
52
|
}
|
|
14
53
|
export function importFrom(...args) {
|
|
15
|
-
|
|
16
|
-
// eess-exclude eess/adr005-no-type-assertions: tuple-union rest param — TS cannot narrow [string[], ImportOptions] | string[] to string[] from Array.isArray(args[0])
|
|
17
|
-
const globs = Array.isArray(args[0]) ? args[0] : args;
|
|
18
|
-
// eess-exclude eess/adr005-no-type-assertions: tuple-union rest param — args[1] is ImportOptions only in the [globs, options] overload
|
|
19
|
-
const options = Array.isArray(args[0]) && args.length > 1 ? args[1] : undefined;
|
|
54
|
+
const { globs, options } = splitGlobArgs(args);
|
|
20
55
|
const ignoreType = options?.ignoreTypeImports === true;
|
|
21
56
|
const matchers = globs.map((g) => picomatch(g));
|
|
22
57
|
return {
|
|
58
|
+
globs: globAnyOf(globs, 'import-target'),
|
|
23
59
|
description: 'import from ' + globs.map((g) => `"${g}"`).join(', '),
|
|
24
|
-
test: (sourceFile) =>
|
|
60
|
+
test: (sourceFile) => importCandidatePaths(sourceFile, ignoreType).some((p) => matchers.some((m) => m(p))),
|
|
25
61
|
};
|
|
26
62
|
}
|
|
27
63
|
export function notImportFrom(...args) {
|
|
28
|
-
|
|
29
|
-
// eess-exclude eess/adr005-no-type-assertions: tuple-union rest param — TS cannot narrow [string[], ImportOptions] | string[] to string[] from Array.isArray(args[0])
|
|
30
|
-
const globs = Array.isArray(args[0]) ? args[0] : args;
|
|
31
|
-
// eess-exclude eess/adr005-no-type-assertions: tuple-union rest param — args[1] is ImportOptions only in the [globs, options] overload
|
|
32
|
-
const options = Array.isArray(args[0]) && args.length > 1 ? args[1] : undefined;
|
|
64
|
+
const { globs, options } = splitGlobArgs(args);
|
|
33
65
|
const ignoreType = options?.ignoreTypeImports === true;
|
|
34
66
|
const matchers = globs.map((g) => picomatch(g));
|
|
35
67
|
return {
|
|
68
|
+
// `import-target` is never checked against the path universe: an installed
|
|
69
|
+
// package resolves into node_modules, which is outside the project by
|
|
70
|
+
// construction, so checking it would fail every correct dependency rule.
|
|
71
|
+
globs: globAnyOf(globs, 'import-target'),
|
|
36
72
|
description: 'not import from ' + globs.map((g) => `"${g}"`).join(', '),
|
|
37
|
-
test: (sourceFile) => !
|
|
73
|
+
test: (sourceFile) => !importCandidatePaths(sourceFile, ignoreType).some((p) => matchers.some((m) => m(p))),
|
|
38
74
|
};
|
|
39
75
|
}
|
|
40
76
|
/**
|
|
@@ -51,20 +87,4 @@ export function exportSymbolNamed(name) {
|
|
|
51
87
|
test: (sourceFile) => sourceFile.getExportedDeclarations().has(name),
|
|
52
88
|
};
|
|
53
89
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Matches modules whose file path matches the given glob.
|
|
56
|
-
*
|
|
57
|
-
* Similar to resideInFile but semantically clearer for modules —
|
|
58
|
-
* "modules that have path matching" vs "elements that reside in file".
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* modules(p).that().havePathMatching('** /services/*.ts')
|
|
62
|
-
*/
|
|
63
|
-
export function havePathMatching(glob) {
|
|
64
|
-
const isMatch = picomatch(glob);
|
|
65
|
-
return {
|
|
66
|
-
description: `have path matching "${glob}"`,
|
|
67
|
-
test: (sourceFile) => isMatch(sourceFile.getFilePath()),
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
90
|
//# sourceMappingURL=module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/predicates/module.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/predicates/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
import type { ArchViolation } from '@nielspeter/eess';
|
|
1
2
|
import type { ArchProject } from '../core/project.js';
|
|
2
|
-
import type {
|
|
3
|
+
import type { RuleBuilderLike } from '@nielspeter/eess';
|
|
3
4
|
import type { PresetBaseOptions } from './shared.js';
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* This preset's rule ids. The `no-inline-logic` arm is a **template literal**
|
|
7
|
+
* because those ids are built from the caller's own `noInlineLogic` entries, so
|
|
8
|
+
* the set is not closed. A typo in the API name is therefore still accepted by
|
|
9
|
+
* the type — the runtime finding is what covers that arm.
|
|
10
|
+
*/
|
|
11
|
+
type AgentGuardrailsRuleId = `preset/agent/no-inline-logic/${string}` | 'preset/agent/no-generic-errors' | 'preset/agent/no-stubs' | 'preset/agent/no-empty-bodies' | 'preset/agent/no-copy-paste';
|
|
12
|
+
export interface AgentGuardrailsOptions extends PresetBaseOptions<AgentGuardrailsRuleId> {
|
|
5
13
|
/** Glob for the source files the rules apply to. */
|
|
6
14
|
src: string;
|
|
7
15
|
/** Banned call names — one rule generated per entry (e.g. `['parseInt', 'eval']`). */
|
|
@@ -12,21 +20,20 @@ export interface AgentGuardrailsOptions extends PresetBaseOptions {
|
|
|
12
20
|
noCopyPaste?: boolean;
|
|
13
21
|
}
|
|
14
22
|
/**
|
|
15
|
-
*
|
|
16
|
-
* logic, generic errors, stub comments, empty bodies, copy-paste.
|
|
23
|
+
* `report` names a delivery mode; omitting it returns the un-executed builders.
|
|
17
24
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* format: 'json' })` and own emission of the error-severity violations. The
|
|
21
|
-
* copy-paste rule defaults to **warn**: warns are reported to stderr but are
|
|
22
|
-
* NOT aggregated into the returned array or the thrown error — override it to
|
|
23
|
-
* `'error'` (`overrides: { 'preset/agent/no-copy-paste': 'error' }`) to include
|
|
24
|
-
* it in the returned/JSON set. Each rule carries agent-facing `because` /
|
|
25
|
-
* `suggestion` / `imperative` metadata so `explain --format agent` and the check
|
|
26
|
-
* JSON give the agent an actionable fix.
|
|
25
|
+
* Overloaded so the common call keeps its exact type — a bare union would make
|
|
26
|
+
* every existing `.violations()` call site an error (26 test files, measured).
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
28
|
+
* **The reporting overload is declared FIRST, and that ordering is load-bearing.**
|
|
29
|
+
* `Parameters<typeof preset>[1]` resolves to the LAST overload, and several tests
|
|
30
|
+
* type their options helper that way; with the builder overload last, that helper
|
|
31
|
+
* keeps the shape callers actually use. Overload resolution still picks the
|
|
32
|
+
* reporting one for a call that names `report`, because it is the first match.
|
|
30
33
|
*/
|
|
34
|
+
export declare function agentGuardrails(p: ArchProject, options: AgentGuardrailsOptions & {
|
|
35
|
+
report: 'builders';
|
|
36
|
+
}): RuleBuilderLike[];
|
|
31
37
|
export declare function agentGuardrails(p: ArchProject, options: AgentGuardrailsOptions): ArchViolation[];
|
|
38
|
+
export {};
|
|
32
39
|
//# sourceMappingURL=agent-guardrails.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-guardrails.d.ts","sourceRoot":"","sources":["../../src/presets/agent-guardrails.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-guardrails.d.ts","sourceRoot":"","sources":["../../src/presets/agent-guardrails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AASrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAYpD;;;;;GAKG;AACH,KAAK,qBAAqB,GACtB,gCAAgC,MAAM,EAAE,GACxC,gCAAgC,GAChC,uBAAuB,GACvB,8BAA8B,GAC9B,4BAA4B,CAAA;AAEhC,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB,CAAC,qBAAqB,CAAC;IACtF,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAA;IACX,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAwBD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,WAAW,EACd,OAAO,EAAE,sBAAsB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACvD,eAAe,EAAE,CAAA;AACpB,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,sBAAsB,GAAG,aAAa,EAAE,CAAA"}
|
|
@@ -3,32 +3,59 @@ import { call } from '../helpers/matchers.js';
|
|
|
3
3
|
import { functionNoGenericErrors } from '../rules/errors.js';
|
|
4
4
|
import { noStubComments, noEmptyBodies } from '../rules/hygiene.js';
|
|
5
5
|
import { smells } from '../smells/index.js';
|
|
6
|
-
import {
|
|
6
|
+
import { overrideFindings, validateOverrides, declareEmptyIfListed, presetDeclarationSpelling, declaredEmptyFindings, assertEnabled, deliver, } from './shared.js';
|
|
7
7
|
/**
|
|
8
8
|
* Preset targeting the mistakes AI coding agents make most often — inline
|
|
9
9
|
* logic, generic errors, stub comments, empty bodies, copy-paste.
|
|
10
10
|
*
|
|
11
|
-
* Returns
|
|
12
|
-
*
|
|
13
|
-
* format
|
|
14
|
-
* copy-paste
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* it in the returned/JSON set. Each rule carries agent-facing `because` /
|
|
18
|
-
* `suggestion` / `imperative` metadata so `explain --format agent` and the check
|
|
19
|
-
* JSON give the agent an actionable fix.
|
|
11
|
+
* Returns severity-carrying builders (the returning form, plan 0060), so an
|
|
12
|
+
* agent's rules file does `export default [...agentGuardrails(p, { ... })]` and
|
|
13
|
+
* `eess-ts check --format json` surfaces every violation, including the
|
|
14
|
+
* copy-paste **warn**. Each rule carries agent-facing `because` / `suggestion` /
|
|
15
|
+
* `imperative` metadata so `explain --format agent` and the check JSON give the
|
|
16
|
+
* agent an actionable fix.
|
|
20
17
|
*
|
|
21
18
|
* Uses function-variant rules so standalone functions, arrow functions, and
|
|
22
19
|
* class methods are all covered.
|
|
23
20
|
*/
|
|
21
|
+
// Presets collect object-literal functions unconditionally. `functions()`
|
|
22
|
+
// keeps it opt-in because widening a selector the USER wrote silently changes
|
|
23
|
+
// their rule; a preset's subject set is the preset's own, and this one already
|
|
24
|
+
// promises "standalone functions, arrow functions, and class methods are all
|
|
25
|
+
// covered". A handler map — the shape agents generate most — was none of the
|
|
26
|
+
// three, so `{ POST: () => {} }` slipped every guardrail (bug 0013).
|
|
27
|
+
const COLLECT_ALL = { includeObjectLiteralFunctions: true };
|
|
24
28
|
export function agentGuardrails(p, options) {
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
// Plan 0100's `attempted`: the ids the caller's OPTIONS ask for, before any
|
|
30
|
+
// override is consulted — every rule this preset can build sits behind an
|
|
31
|
+
// optional flag, so this can legitimately be `[]` (nothing was ever enabled).
|
|
32
|
+
// NOT what override validation uses below — see `knownOverrideIds`'s own doc.
|
|
33
|
+
const attempted = collectRuleIds(options);
|
|
34
|
+
const knownIds = knownOverrideIds(options);
|
|
35
|
+
validateOverrides(options.overrides, knownIds);
|
|
36
|
+
const overrideProblems = overrideFindings(options.overrides, knownIds);
|
|
37
|
+
const builders = [];
|
|
38
|
+
// Recorded HERE, at the one place a rule is actually built — the same argument
|
|
39
|
+
// `collectRule` makes for its `constructed` parameter ("the known-id list
|
|
40
|
+
// cannot answer this"). Deriving it instead from `collectRuleIds()` filtered by
|
|
41
|
+
// severity restates the construction conditionals a second time; the two agree
|
|
42
|
+
// today only because they are kept in step by hand, and the first rule added to
|
|
43
|
+
// one and not the other makes a declaration bind to a rule that was never built.
|
|
44
|
+
const constructed = [];
|
|
27
45
|
const push = (builder, meta, def) => {
|
|
28
|
-
|
|
46
|
+
const sev = lookup(options.overrides, meta.id) ?? def;
|
|
47
|
+
// Plan 0089's carrier, applied here as well as in `collectRule` — this
|
|
48
|
+
// preset builds through its own helper, and a carrier that reached only the
|
|
49
|
+
// shared path would cover the families someone remembered.
|
|
50
|
+
if (sev !== 'off') {
|
|
51
|
+
constructed.push(meta.id);
|
|
52
|
+
builders.push(declareEmptyIfListed(builder
|
|
53
|
+
.rule({ ...meta, declarationSpelling: presetDeclarationSpelling(meta.id) })
|
|
54
|
+
.asSeverity(sev), meta.id, options));
|
|
55
|
+
}
|
|
29
56
|
};
|
|
30
57
|
for (const api of options.noInlineLogic ?? []) {
|
|
31
|
-
push(functions(p).that().resideInFile(options.src).should().notContain(call(api)), {
|
|
58
|
+
push(functions(p, COLLECT_ALL).that().resideInFile(options.src).should().notContain(call(api)), {
|
|
32
59
|
id: `preset/agent/no-inline-logic/${api}`,
|
|
33
60
|
because: `${api} inline in a function is logic that belongs behind a named helper`,
|
|
34
61
|
suggestion: `extract the ${api} call into a named helper function`,
|
|
@@ -36,7 +63,11 @@ export function agentGuardrails(p, options) {
|
|
|
36
63
|
}, 'error');
|
|
37
64
|
}
|
|
38
65
|
if (options.noGenericErrors) {
|
|
39
|
-
push(functions(p
|
|
66
|
+
push(functions(p, COLLECT_ALL)
|
|
67
|
+
.that()
|
|
68
|
+
.resideInFile(options.src)
|
|
69
|
+
.should()
|
|
70
|
+
.satisfy(functionNoGenericErrors()), {
|
|
40
71
|
id: 'preset/agent/no-generic-errors',
|
|
41
72
|
because: 'a generic Error loses the type/context callers need to handle it',
|
|
42
73
|
suggestion: 'throw a domain-specific error (NotFoundError, ValidationError, …)',
|
|
@@ -44,7 +75,7 @@ export function agentGuardrails(p, options) {
|
|
|
44
75
|
}, 'error');
|
|
45
76
|
}
|
|
46
77
|
if (options.noStubs) {
|
|
47
|
-
push(functions(p).that().resideInFile(options.src).should().satisfy(noStubComments()), {
|
|
78
|
+
push(functions(p, COLLECT_ALL).that().resideInFile(options.src).should().satisfy(noStubComments()), {
|
|
48
79
|
id: 'preset/agent/no-stubs',
|
|
49
80
|
because: 'stub comments (TODO/FIXME/"not implemented") ship unfinished work',
|
|
50
81
|
suggestion: 'implement the body or remove the stub before committing',
|
|
@@ -52,7 +83,7 @@ export function agentGuardrails(p, options) {
|
|
|
52
83
|
}, 'error');
|
|
53
84
|
}
|
|
54
85
|
if (options.noEmptyBodies) {
|
|
55
|
-
push(functions(p).that().resideInFile(options.src).should().satisfy(noEmptyBodies()), {
|
|
86
|
+
push(functions(p, COLLECT_ALL).that().resideInFile(options.src).should().satisfy(noEmptyBodies()), {
|
|
56
87
|
id: 'preset/agent/no-empty-bodies',
|
|
57
88
|
because: 'an empty function body is almost always an unfinished stub',
|
|
58
89
|
suggestion: 'implement the body — every function must have at least one statement',
|
|
@@ -67,9 +98,83 @@ export function agentGuardrails(p, options) {
|
|
|
67
98
|
imperative: 'Do NOT duplicate a function body — extract the shared logic',
|
|
68
99
|
}, 'warn');
|
|
69
100
|
}
|
|
70
|
-
|
|
101
|
+
// Unknown override keys FIRST: they say the configuration is wrong, which
|
|
102
|
+
// the reader needs before any finding produced under it (bug 0038).
|
|
103
|
+
// `constructed` is recorded at the `push` site above, not re-derived here.
|
|
104
|
+
const otherFindings = [
|
|
105
|
+
...overrideProblems,
|
|
106
|
+
...declaredEmptyFindings(options.expectEmpty, constructed),
|
|
107
|
+
];
|
|
108
|
+
return deliver([
|
|
109
|
+
...otherFindings,
|
|
110
|
+
// Plan 0100, LAST of the config-findings: only when nothing else above
|
|
111
|
+
// already explains the empty result (an unknown override key, an unbound
|
|
112
|
+
// `expectEmpty`) does "no rule was ever enabled" get to be the diagnosis.
|
|
113
|
+
...assertEnabled(attempted, otherFindings, {
|
|
114
|
+
id: 'preset/agent/constructs-nothing',
|
|
115
|
+
presetName: 'agentGuardrails',
|
|
116
|
+
optionsHint: 'noInlineLogic, noGenericErrors, noStubs, noEmptyBodies, noCopyPaste',
|
|
117
|
+
}),
|
|
118
|
+
...builders,
|
|
119
|
+
], options);
|
|
71
120
|
}
|
|
72
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Widen the typed override map for a lookup by a runtime-built id.
|
|
123
|
+
*
|
|
124
|
+
* `no-inline-logic/${api}` ids are constructed from the caller's own options, so
|
|
125
|
+
* the key here is a `string` and the map is keyed by a literal union. The
|
|
126
|
+
* widening is confined to this one function rather than loosening the option
|
|
127
|
+
* type, which is what makes the typo a compile error for every other key.
|
|
128
|
+
*/
|
|
129
|
+
function lookup(overrides, id) {
|
|
130
|
+
const widened = overrides;
|
|
131
|
+
return widened?.[id];
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The four ids this preset can construct regardless of whether their flag is
|
|
135
|
+
* currently set — fixed, matching `AgentGuardrailsRuleId`'s own closed union
|
|
136
|
+
* members (everything but the open `no-inline-logic/${string}` arm).
|
|
137
|
+
*/
|
|
138
|
+
const STATIC_RULE_IDS = [
|
|
139
|
+
'preset/agent/no-generic-errors',
|
|
140
|
+
'preset/agent/no-stubs',
|
|
141
|
+
'preset/agent/no-empty-bodies',
|
|
142
|
+
'preset/agent/no-copy-paste',
|
|
143
|
+
];
|
|
144
|
+
/**
|
|
145
|
+
* Rule ids the given options WOULD generate if every flag were on — for
|
|
146
|
+
* override-key validation. Static ids are always known (a key for a rule not
|
|
147
|
+
* yet enabled is still a real rule, not a typo); `no-inline-logic/${api}` ids
|
|
148
|
+
* stay scoped to what `noInlineLogic` actually named, because that arm is open
|
|
149
|
+
* by construction and the only way to catch a typo in it is to compare against
|
|
150
|
+
* what the caller wrote.
|
|
151
|
+
*
|
|
152
|
+
* Deliberately NOT `attempted` below, which is flag-gated. Reusing `attempted`
|
|
153
|
+
* here was the bug plan 0100's review found: `overrides: { 'preset/agent/no-
|
|
154
|
+
* generic-errors': 'off' } }` with `noGenericErrors` unset reported "matches no
|
|
155
|
+
* rule in this preset" with an EMPTY enumeration — a real, correctly-spelled id
|
|
156
|
+
* misdiagnosed as unknown, and `otherFindings.length > 0` from that wrong
|
|
157
|
+
* finding then silently suppressed the correct `constructs-nothing` finding
|
|
158
|
+
* `assertEnabled` would otherwise have reported. `dataLayerIsolation` never had
|
|
159
|
+
* this bug: it already validates against the full static `RULE_IDS`, not its
|
|
160
|
+
* flag-gated `attempted`.
|
|
161
|
+
*/
|
|
162
|
+
function knownOverrideIds(options) {
|
|
163
|
+
const ids = [...STATIC_RULE_IDS];
|
|
164
|
+
for (const api of options.noInlineLogic ?? [])
|
|
165
|
+
ids.push(`preset/agent/no-inline-logic/${api}`);
|
|
166
|
+
return ids;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Ids plan 0100's `attempted` needs: the ones the caller's OPTIONS actually
|
|
170
|
+
* ask for, flag-gated — `assertEnabled` fires when this is empty. NOT for
|
|
171
|
+
* override validation; see {@link knownOverrideIds}.
|
|
172
|
+
*
|
|
173
|
+
* Kept in step with the five `if (options.x)` blocks in `agentGuardrails`
|
|
174
|
+
* itself BY HAND — same shape of fragility this file already notes for
|
|
175
|
+
* `constructed` (review: nothing enforces the two stay copy-identical as
|
|
176
|
+
* flags are added).
|
|
177
|
+
*/
|
|
73
178
|
function collectRuleIds(options) {
|
|
74
179
|
const ids = [];
|
|
75
180
|
for (const api of options.noInlineLogic ?? [])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-guardrails.js","sourceRoot":"","sources":["../../src/presets/agent-guardrails.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-guardrails.js","sourceRoot":"","sources":["../../src/presets/agent-guardrails.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { ArchViolation } from '@nielspeter/eess';
|
|
2
|
+
import type { ImportOptions } from '../core/import-options.js';
|
|
1
3
|
import type { ArchProject } from '../core/project.js';
|
|
2
|
-
import type {
|
|
4
|
+
import type { RuleBuilderLike } from '@nielspeter/eess';
|
|
3
5
|
import type { PresetBaseOptions } from './shared.js';
|
|
4
|
-
|
|
6
|
+
/** This preset's rule ids, derived from `RULE_IDS` so the two cannot drift. */
|
|
7
|
+
type StrictBoundariesRuleId = (typeof RULE_IDS)[number];
|
|
8
|
+
export interface StrictBoundariesOptions extends PresetBaseOptions<StrictBoundariesRuleId> {
|
|
5
9
|
/** Glob pattern for boundary folders (e.g., 'src/features/*') */
|
|
6
10
|
folders: string;
|
|
7
11
|
/** Glob patterns for shared folders accessible by all boundaries */
|
|
@@ -10,10 +14,49 @@ export interface StrictBoundariesOptions extends PresetBaseOptions {
|
|
|
10
14
|
isolateTests?: boolean;
|
|
11
15
|
/** If true, warn on copy-pasted function bodies across boundaries */
|
|
12
16
|
noCopyPaste?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* This project's answer to "is a type-only edge a dependency?", applied to
|
|
19
|
+
* every rule this preset constructs **whose condition takes one** — plan 0089:
|
|
20
|
+
* `no-cycles`, `no-cross-boundary`, `shared-isolation`, `test-isolation`.
|
|
21
|
+
* `no-duplicate-bodies` is excluded because it compares function bodies, not imports.
|
|
22
|
+
*
|
|
23
|
+
* The conditions disagree by default, deliberately: `beFreeOfCycles` ignores
|
|
24
|
+
* type-only imports because it asks whether the module is *evaluated*, and an
|
|
25
|
+
* erased import cannot contribute to an initialization cycle; the layer and
|
|
26
|
+
* boundary conditions count them because they ask whether the code is
|
|
27
|
+
* *coupled*. Holding a builder, that distinction is visible and you choose per
|
|
28
|
+
* condition. Through a preset it is invisible, and this option exists because
|
|
29
|
+
* a preset user could not align them even when their project wanted them
|
|
30
|
+
* aligned.
|
|
31
|
+
*
|
|
32
|
+
* So passing it moves exactly one side, and which side depends on the value:
|
|
33
|
+
* `{ ignoreTypeImports: true }` stops the layer rules counting type coupling
|
|
34
|
+
* (the cycle rule already ignored it); `{ ignoreTypeImports: false }` makes
|
|
35
|
+
* the cycle rule count type edges (the layer rules already did). `docs/presets.md`
|
|
36
|
+
* carries that table.
|
|
37
|
+
*/
|
|
38
|
+
importOptions?: ImportOptions;
|
|
13
39
|
}
|
|
40
|
+
declare const RULE_IDS: readonly ["preset/boundaries/shared-discovery", "preset/boundaries/no-cycles", "preset/boundaries/no-cross-boundary", "preset/boundaries/shared-isolation", "preset/boundaries/test-isolation", "preset/boundaries/no-duplicate-bodies"];
|
|
14
41
|
/**
|
|
15
42
|
* Enforce strict module boundaries: no cycles, no cross-boundary imports,
|
|
16
43
|
* shared isolation, and optional copy-paste detection.
|
|
17
44
|
*/
|
|
45
|
+
/**
|
|
46
|
+
* `report` names a delivery mode; omitting it returns the un-executed builders.
|
|
47
|
+
*
|
|
48
|
+
* Overloaded so the common call keeps its exact type — a bare union would make
|
|
49
|
+
* every existing `.violations()` call site an error (26 test files, measured).
|
|
50
|
+
*
|
|
51
|
+
* **The reporting overload is declared FIRST, and that ordering is load-bearing.**
|
|
52
|
+
* `Parameters<typeof preset>[1]` resolves to the LAST overload, and several tests
|
|
53
|
+
* type their options helper that way; with the builder overload last, that helper
|
|
54
|
+
* keeps the shape callers actually use. Overload resolution still picks the
|
|
55
|
+
* reporting one for a call that names `report`, because it is the first match.
|
|
56
|
+
*/
|
|
57
|
+
export declare function strictBoundaries(p: ArchProject, options: StrictBoundariesOptions & {
|
|
58
|
+
report: 'builders';
|
|
59
|
+
}): RuleBuilderLike[];
|
|
18
60
|
export declare function strictBoundaries(p: ArchProject, options: StrictBoundariesOptions): ArchViolation[];
|
|
61
|
+
export {};
|
|
19
62
|
//# sourceMappingURL=boundaries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundaries.d.ts","sourceRoot":"","sources":["../../src/presets/boundaries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"boundaries.d.ts","sourceRoot":"","sources":["../../src/presets/boundaries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAWpD,+EAA+E;AAC/E,KAAK,sBAAsB,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvD,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB,CAAC,sBAAsB,CAAC;IACxF,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,QAAA,MAAM,QAAQ,0OAOJ,CAAA;AAmFV;;;GAGG;AACH;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,WAAW,EACd,OAAO,EAAE,uBAAuB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACxD,eAAe,EAAE,CAAA;AACpB,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,GAAG,aAAa,EAAE,CAAA"}
|