@nielspeter/eess-ts 0.2.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +75 -32
- 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 +141 -55
- 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 +385 -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 +182 -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 +177 -39
- 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 +16 -19
- 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 +243 -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 +109 -42
- 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 +8 -3
- package/dist/cli/commands/baseline.d.ts.map +1 -1
- package/dist/cli/commands/baseline.js +111 -7
- 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 +385 -47
- 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 +47 -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 +101 -43
- 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 +25 -32
- package/dist/cli/load-rules.js.map +1 -1
- package/dist/cli/resolve-config.d.ts +0 -8
- package/dist/cli/resolve-config.d.ts.map +1 -1
- package/dist/cli/resolve-config.js +25 -55
- 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 +351 -0
- package/dist/cli/rule-file-findings.js.map +1 -0
- package/dist/cli/watch.d.ts +17 -34
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +14 -129
- 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 +41 -19
- 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 +41 -37
- 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 +20 -6
- 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 +155 -93
- 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 +150 -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 +49 -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 +117 -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 +390 -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 +19 -0
- package/dist/core/exclusion-comments.d.ts.map +1 -0
- package/dist/core/exclusion-comments.js +7 -0
- package/dist/core/exclusion-comments.js.map +1 -0
- package/dist/core/execute-rule.d.ts +158 -0
- package/dist/core/execute-rule.d.ts.map +1 -0
- package/dist/core/execute-rule.js +666 -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/invalidate-on-modify.d.ts +20 -0
- package/dist/core/invalidate-on-modify.d.ts.map +1 -0
- package/dist/core/invalidate-on-modify.js +26 -0
- package/dist/core/invalidate-on-modify.js.map +1 -0
- package/dist/core/line-index.d.ts +3 -0
- package/dist/core/line-index.d.ts.map +1 -0
- package/dist/core/line-index.js +227 -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 +593 -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 +224 -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 +22 -0
- package/dist/core/path-universe.d.ts.map +1 -0
- package/dist/core/path-universe.js +45 -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 +29 -4
- package/dist/core/project.js.map +1 -1
- package/dist/core/rule-builder.d.ts +303 -0
- package/dist/core/rule-builder.d.ts.map +1 -0
- package/dist/core/rule-builder.js +463 -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 +88 -0
- package/dist/core/rule-declaration.js.map +1 -0
- package/dist/core/terminal-builder.d.ts +629 -0
- package/dist/core/terminal-builder.d.ts.map +1 -0
- package/dist/core/terminal-builder.js +807 -0
- package/dist/core/terminal-builder.js.map +1 -0
- package/dist/core/terminal-execution.d.ts +39 -0
- package/dist/core/terminal-execution.d.ts.map +1 -0
- package/dist/core/terminal-execution.js +103 -0
- package/dist/core/terminal-execution.js.map +1 -0
- package/dist/core/ts-comment-mask.d.ts +2 -0
- package/dist/core/ts-comment-mask.d.ts.map +1 -0
- package/dist/core/ts-comment-mask.js +102 -0
- package/dist/core/ts-comment-mask.js.map +1 -0
- package/dist/core/vacuity-diagnosis.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/graphql-rule-builder.d.ts +95 -0
- package/dist/graphql/graphql-rule-builder.d.ts.map +1 -0
- package/dist/graphql/graphql-rule-builder.js +127 -0
- package/dist/graphql/graphql-rule-builder.js.map +1 -0
- package/dist/graphql/index.d.ts +1 -0
- package/dist/graphql/index.d.ts.map +1 -1
- package/dist/graphql/index.js +2 -1
- package/dist/graphql/index.js.map +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts +44 -23
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +80 -72
- 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 +82 -12
- package/dist/graphql/schema-loader.js.map +1 -1
- package/dist/graphql/schema-predicates.d.ts.map +1 -1
- package/dist/graphql/schema-predicates.js +17 -12
- package/dist/graphql/schema-predicates.js.map +1 -1
- package/dist/graphql/schema-rule-builder.d.ts +15 -24
- package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
- package/dist/graphql/schema-rule-builder.js +39 -77
- 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 +28 -0
- package/dist/helpers/baseline-generator.d.ts.map +1 -0
- package/dist/helpers/baseline-generator.js +27 -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 +135 -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 +53 -84
- 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 +16 -0
- package/dist/helpers/diff-aware.d.ts.map +1 -0
- package/dist/helpers/diff-aware.js +16 -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 +164 -86
- 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 +55 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -15
- 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 +54 -8
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +145 -8
- package/dist/models/arch-function.js.map +1 -1
- package/dist/models/arch-jsx-element.d.ts.map +1 -1
- package/dist/models/arch-jsx-element.js +18 -19
- 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/jsx.d.ts.map +1 -1
- package/dist/predicates/jsx.js +2 -1
- package/dist/predicates/jsx.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 +49 -16
- package/dist/presets/agent-guardrails.d.ts.map +1 -1
- package/dist/presets/agent-guardrails.js +308 -19
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/presets/boundaries.d.ts +46 -3
- 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 +23 -3
- 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 +10 -5
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +19 -3
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layered.d.ts +47 -3
- 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 +81 -10
- 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 +267 -2
- package/dist/presets/shared.d.ts.map +1 -1
- package/dist/presets/shared.js +367 -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 +63 -39
- 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 +80 -47
- package/dist/rules/metrics.js.map +1 -1
- package/dist/smells/clusters.d.ts +78 -0
- package/dist/smells/clusters.d.ts.map +1 -0
- package/dist/smells/clusters.js +124 -0
- package/dist/smells/clusters.js.map +1 -0
- package/dist/smells/duplicate-bodies.d.ts +92 -5
- package/dist/smells/duplicate-bodies.d.ts.map +1 -1
- package/dist/smells/duplicate-bodies.js +203 -73
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/duplicate-report.d.ts +90 -0
- package/dist/smells/duplicate-report.d.ts.map +1 -0
- package/dist/smells/duplicate-report.js +344 -0
- package/dist/smells/duplicate-report.js.map +1 -0
- package/dist/smells/fingerprint.d.ts +20 -1
- package/dist/smells/fingerprint.d.ts.map +1 -1
- package/dist/smells/fingerprint.js +27 -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 +28 -0
- package/dist/smells/similar-pairs.d.ts.map +1 -0
- package/dist/smells/similar-pairs.js +134 -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 +112 -14
- package/dist/smells/smell-builder.js.map +1 -1
- package/dist/smells/variation.d.ts +47 -0
- package/dist/smells/variation.d.ts.map +1 -0
- package/dist/smells/variation.js +90 -0
- package/dist/smells/variation.js.map +1 -0
- package/dist/tsconfig/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 +65 -16
- package/dist/tsconfig/tsconfig-builder.js.map +1 -1
- package/package.json +4 -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,47 @@
|
|
|
1
|
+
import type { Fingerprint } from './fingerprint.js';
|
|
2
|
+
/**
|
|
3
|
+
* One way two similar bodies differ: a text that appears in A where B has
|
|
4
|
+
* another, at structurally-aligned positions.
|
|
5
|
+
*
|
|
6
|
+
* `occurrences` is how many aligned positions carry this same substitution. A
|
|
7
|
+
* systematic rename — `cls` to `fn` throughout — is ONE axis with many
|
|
8
|
+
* occurrences, which is the whole point: it is one decision a reader has to
|
|
9
|
+
* evaluate, not twelve.
|
|
10
|
+
*/
|
|
11
|
+
export interface VariationAxis {
|
|
12
|
+
readonly from: string;
|
|
13
|
+
readonly to: string;
|
|
14
|
+
readonly occurrences: number;
|
|
15
|
+
}
|
|
16
|
+
/** What varies between two aligned bodies, and how much of them is shared. */
|
|
17
|
+
export interface Variation {
|
|
18
|
+
/** Distinct substitutions, most frequent first. */
|
|
19
|
+
readonly axes: readonly VariationAxis[];
|
|
20
|
+
/** Aligned text-bearing positions whose texts are identical. */
|
|
21
|
+
readonly sharedTexts: number;
|
|
22
|
+
/** Aligned text-bearing positions compared in total. */
|
|
23
|
+
readonly comparedTexts: number;
|
|
24
|
+
/**
|
|
25
|
+
* `true` when the bodies were too large to align, so the result is a declared
|
|
26
|
+
* non-answer rather than a computed zero (ADR-010: a pass is constructed from
|
|
27
|
+
* evidence, never from a default).
|
|
28
|
+
*/
|
|
29
|
+
readonly skipped: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* What varies between two structurally-similar bodies.
|
|
33
|
+
*
|
|
34
|
+
* The detector's score answers "how alike are these shapes". It cannot answer
|
|
35
|
+
* the question a reader actually has — "should I consolidate them" — and that
|
|
36
|
+
* turns almost entirely on HOW MANY things vary:
|
|
37
|
+
*
|
|
38
|
+
* - one axis (`executeCheck` to `executeWarn`) — extract a parameter, clearly
|
|
39
|
+
* - three axes (a measure, a name, a message) — extract, probably
|
|
40
|
+
* - nine axes (every property name differs) — a shared idiom; leave it
|
|
41
|
+
*
|
|
42
|
+
* All three score alike today and read alike on screen, which is why triaging a
|
|
43
|
+
* finding means opening both files. This returns what the reader would have gone
|
|
44
|
+
* looking for.
|
|
45
|
+
*/
|
|
46
|
+
export declare function variationBetween(a: Fingerprint, b: Fingerprint): Variation;
|
|
47
|
+
//# sourceMappingURL=variation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variation.d.ts","sourceRoot":"","sources":["../../src/smells/variation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAA;IACvC,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAiDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,SAAS,CA2B1E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bodies larger than this are not aligned. Traceback needs the full O(n*m)
|
|
3
|
+
* matrix, unlike `computeSimilarity`'s two-row form, so a pathological pair
|
|
4
|
+
* would allocate hundreds of MB. At the cap the matrix is 1200*1200 Int32 =
|
|
5
|
+
* ~5.8MB, allocated one pair at a time and only for pairs already REPORTED —
|
|
6
|
+
* never on the hot path that compares every pair.
|
|
7
|
+
*/
|
|
8
|
+
const MAX_ALIGN = 1200;
|
|
9
|
+
/**
|
|
10
|
+
* Which positions of `a` and `b` the LCS pairs up.
|
|
11
|
+
*
|
|
12
|
+
* `computeSimilarity` throws its alignment away and keeps only the length. The
|
|
13
|
+
* alignment is the thing worth having: it is what lets a caller ask "at the
|
|
14
|
+
* places these two bodies agree structurally, do they say the same words?" —
|
|
15
|
+
* the question that separates a copy-paste from a shared idiom.
|
|
16
|
+
*/
|
|
17
|
+
function alignByKind(a, b) {
|
|
18
|
+
const m = a.length;
|
|
19
|
+
const n = b.length;
|
|
20
|
+
const dp = new Int32Array((m + 1) * (n + 1));
|
|
21
|
+
const at = (i, j) => i * (n + 1) + j;
|
|
22
|
+
for (let i = 1; i <= m; i++) {
|
|
23
|
+
for (let j = 1; j <= n; j++) {
|
|
24
|
+
dp[at(i, j)] =
|
|
25
|
+
a[i - 1] === b[j - 1]
|
|
26
|
+
? (dp[at(i - 1, j - 1)] ?? 0) + 1
|
|
27
|
+
: Math.max(dp[at(i - 1, j)] ?? 0, dp[at(i, j - 1)] ?? 0);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const pairs = [];
|
|
31
|
+
let i = m;
|
|
32
|
+
let j = n;
|
|
33
|
+
while (i > 0 && j > 0) {
|
|
34
|
+
if (a[i - 1] === b[j - 1]) {
|
|
35
|
+
pairs.push([i - 1, j - 1]);
|
|
36
|
+
i--;
|
|
37
|
+
j--;
|
|
38
|
+
}
|
|
39
|
+
else if ((dp[at(i - 1, j)] ?? 0) >= (dp[at(i, j - 1)] ?? 0)) {
|
|
40
|
+
i--;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
j--;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return pairs.reverse();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* What varies between two structurally-similar bodies.
|
|
50
|
+
*
|
|
51
|
+
* The detector's score answers "how alike are these shapes". It cannot answer
|
|
52
|
+
* the question a reader actually has — "should I consolidate them" — and that
|
|
53
|
+
* turns almost entirely on HOW MANY things vary:
|
|
54
|
+
*
|
|
55
|
+
* - one axis (`executeCheck` to `executeWarn`) — extract a parameter, clearly
|
|
56
|
+
* - three axes (a measure, a name, a message) — extract, probably
|
|
57
|
+
* - nine axes (every property name differs) — a shared idiom; leave it
|
|
58
|
+
*
|
|
59
|
+
* All three score alike today and read alike on screen, which is why triaging a
|
|
60
|
+
* finding means opening both files. This returns what the reader would have gone
|
|
61
|
+
* looking for.
|
|
62
|
+
*/
|
|
63
|
+
export function variationBetween(a, b) {
|
|
64
|
+
if (a.kinds.length > MAX_ALIGN || b.kinds.length > MAX_ALIGN) {
|
|
65
|
+
return { axes: [], sharedTexts: 0, comparedTexts: 0, skipped: true };
|
|
66
|
+
}
|
|
67
|
+
const alignment = alignByKind(a.kinds, b.kinds);
|
|
68
|
+
const counts = new Map();
|
|
69
|
+
let shared = 0;
|
|
70
|
+
let compared = 0;
|
|
71
|
+
for (const [i, j] of alignment) {
|
|
72
|
+
const ta = a.texts[i];
|
|
73
|
+
const tb = b.texts[j];
|
|
74
|
+
if (ta === undefined && tb === undefined)
|
|
75
|
+
continue;
|
|
76
|
+
compared += 1;
|
|
77
|
+
if (ta === tb) {
|
|
78
|
+
shared += 1;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const from = ta ?? '';
|
|
82
|
+
const to = tb ?? '';
|
|
83
|
+
const key = `${from}\0${to}`;
|
|
84
|
+
const prev = counts.get(key);
|
|
85
|
+
counts.set(key, { from, to, occurrences: (prev?.occurrences ?? 0) + 1 });
|
|
86
|
+
}
|
|
87
|
+
const axes = [...counts.values()].sort((x, y) => y.occurrences - x.occurrences || x.from.localeCompare(y.from));
|
|
88
|
+
return { axes, sharedTexts: shared, comparedTexts: compared, skipped: false };
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=variation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variation.js","sourceRoot":"","sources":["../../src/smells/variation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ArchProject } from '../core/project.js';
|
|
2
|
+
import { TsconfigBuilder } from './tsconfig-builder.js';
|
|
3
|
+
/**
|
|
4
|
+
* Assert facts about a project's resolved TypeScript compiler options.
|
|
5
|
+
*
|
|
6
|
+
* Returns a builder with the same `.because()` / `.rule()` / `.excluding()` /
|
|
7
|
+
* `.check()` / `.warn()` / `.asSeverity()` / `.violations()` surface as every
|
|
8
|
+
* other rule. A flat top-level entry point like `project` — deliberately NOT a
|
|
9
|
+
* `config` namespace, which would collide with the tool's own
|
|
10
|
+
* `defineConfig` / `CliConfig` ("configure the tool") surface.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* tsconfig(p)
|
|
14
|
+
* .requires({ strict: true, noUncheckedIndexedAccess: true })
|
|
15
|
+
* .because('ADR-001 requires strict mode')
|
|
16
|
+
* .check()
|
|
17
|
+
*/
|
|
18
|
+
export declare function tsconfig(project: ArchProject): TsconfigBuilder;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tsconfig/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAE9D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TsconfigBuilder } from './tsconfig-builder.js';
|
|
2
|
+
/**
|
|
3
|
+
* Assert facts about a project's resolved TypeScript compiler options.
|
|
4
|
+
*
|
|
5
|
+
* Returns a builder with the same `.because()` / `.rule()` / `.excluding()` /
|
|
6
|
+
* `.check()` / `.warn()` / `.asSeverity()` / `.violations()` surface as every
|
|
7
|
+
* other rule. A flat top-level entry point like `project` — deliberately NOT a
|
|
8
|
+
* `config` namespace, which would collide with the tool's own
|
|
9
|
+
* `defineConfig` / `CliConfig` ("configure the tool") surface.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* tsconfig(p)
|
|
13
|
+
* .requires({ strict: true, noUncheckedIndexedAccess: true })
|
|
14
|
+
* .because('ADR-001 requires strict mode')
|
|
15
|
+
* .check()
|
|
16
|
+
*/
|
|
17
|
+
export function tsconfig(project) {
|
|
18
|
+
return new TsconfigBuilder(project);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tsconfig/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAoB;IAC3C,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;AACrC,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { RuleDescription } from '@nielspeter/eess';
|
|
2
|
+
import type { CollectResult } from '../core/terminal-builder.js';
|
|
1
3
|
import type { CompilerOptions } from 'ts-morph';
|
|
2
|
-
import { TerminalBuilder } from '@nielspeter/eess';
|
|
3
4
|
import type { ArchProject } from '../core/project.js';
|
|
4
|
-
import
|
|
5
|
+
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
5
6
|
/**
|
|
6
7
|
* Asserts that a project's resolved TypeScript compiler options match a
|
|
7
8
|
* user-supplied spec. A non-iterating rule (one project → one options object),
|
|
@@ -19,14 +20,46 @@ export declare class TsconfigBuilder extends TerminalBuilder {
|
|
|
19
20
|
* Each present key must equal the project's resolved value (strict-family
|
|
20
21
|
* flags are resolved through `strict: true` the way tsc resolves them).
|
|
21
22
|
* Multiple `.requires()` calls merge additively; later keys win on conflict.
|
|
23
|
+
*
|
|
24
|
+
* Copy-on-write (bug 0016): a held `tsconfig(p)` is not edited by this call.
|
|
25
|
+
* No `copy()` override is needed because the merge builds a fresh object
|
|
26
|
+
* rather than mutating the inherited reference.
|
|
22
27
|
*/
|
|
23
28
|
requires(spec: Partial<CompilerOptions>): this;
|
|
24
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Whether this rule states an assertion at all — the assertion gate's question.
|
|
31
|
+
*
|
|
32
|
+
* True once a requirement has been declared; `tsconfig()` with none asserts nothing.
|
|
33
|
+
*
|
|
34
|
+
* Overrides the `TerminalBuilder` default (`true`), whose JSDoc carries the
|
|
35
|
+
* contract and the reason this is public rather than protected.
|
|
36
|
+
*/
|
|
37
|
+
assertsSomething(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* The remedy for this builder's assertion-less state, as one string.
|
|
40
|
+
*
|
|
41
|
+
* One channel, so `diagnose()`'s advice and the finding's own message cannot
|
|
42
|
+
* disagree. Overrides `TerminalBuilder`'s generic text with wording specific to
|
|
43
|
+
* what this builder is missing.
|
|
44
|
+
*/
|
|
45
|
+
assertionAdvice(): string;
|
|
46
|
+
/** Named by id or the fixed rule description, not 'unnamed' (plan 0070 §4). */
|
|
47
|
+
describeRule(): RuleDescription;
|
|
48
|
+
/**
|
|
49
|
+
* Requirements this rule declared — plan 0098.
|
|
50
|
+
*
|
|
51
|
+
* This family examines a CONFIG, not a corpus, so its unit is not a subject
|
|
52
|
+
* count. Zero means `.require({})`: a tsconfig rule that asserts nothing,
|
|
53
|
+
* which is this family's shape of the vacuity every other family expresses as
|
|
54
|
+
* an empty selection.
|
|
55
|
+
*/
|
|
56
|
+
examinedUnits(): number;
|
|
57
|
+
protected collectViolations(): CollectResult;
|
|
58
|
+
/**
|
|
59
|
+
* Prefer the public `getCompilerOptions()` (implemented by `project()` /
|
|
60
|
+
* `workspace()`); fall back to the internal ts-morph project so a bare
|
|
61
|
+
* `ArchProject` literal (e.g. a test double) still works.
|
|
62
|
+
*/
|
|
63
|
+
private getOptions;
|
|
25
64
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Entry point for a tsconfig config-assertion rule. Mirrors `project()` /
|
|
28
|
-
* `smells` — a flat top-level entry returning a builder that composes with
|
|
29
|
-
* `.because()` / `.excluding()` / `.check()` / `.warn()`.
|
|
30
|
-
*/
|
|
31
|
-
export declare function tsconfig(p: ArchProject): TsconfigBuilder;
|
|
32
65
|
//# sourceMappingURL=tsconfig-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsconfig-builder.d.ts","sourceRoot":"","sources":["../../src/tsconfig/tsconfig-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tsconfig-builder.d.ts","sourceRoot":"","sources":["../../src/tsconfig/tsconfig-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAGhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAK7D;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IAGtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,aAAa,CAA+B;gBAEvB,OAAO,EAAE,WAAW;IAIjD;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAM9C;;;;;;;OAOG;IACM,gBAAgB,IAAI,OAAO;IAIpC;;;;;;OAMG;IACM,eAAe,IAAI,MAAM;IAOlC,+EAA+E;IACtE,YAAY,IAAI,eAAe;IAOxC;;;;;;;OAOG;IACH,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,iBAAiB,IAAI,aAAa;IA+B5C;;;;OAIG;IACH,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { collectResult } from '@nielspeter/eess';
|
|
2
|
+
import { isRecord } from '@nielspeter/eess/internal';
|
|
1
3
|
import { ScriptTarget, ModuleKind, ModuleResolutionKind } from 'ts-morph';
|
|
2
|
-
import { TerminalBuilder } from '
|
|
4
|
+
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
3
5
|
import { isStrictFamily, resolveFlag } from './strict-family.js';
|
|
4
6
|
const RULE_DESCRIPTION = 'tsconfig compiler options must satisfy requirements';
|
|
5
7
|
/**
|
|
@@ -22,13 +24,58 @@ export class TsconfigBuilder extends TerminalBuilder {
|
|
|
22
24
|
* Each present key must equal the project's resolved value (strict-family
|
|
23
25
|
* flags are resolved through `strict: true` the way tsc resolves them).
|
|
24
26
|
* Multiple `.requires()` calls merge additively; later keys win on conflict.
|
|
27
|
+
*
|
|
28
|
+
* Copy-on-write (bug 0016): a held `tsconfig(p)` is not edited by this call.
|
|
29
|
+
* No `copy()` override is needed because the merge builds a fresh object
|
|
30
|
+
* rather than mutating the inherited reference.
|
|
25
31
|
*/
|
|
26
32
|
requires(spec) {
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
const next = this.copy();
|
|
34
|
+
next._requirements = { ...this._requirements, ...spec };
|
|
35
|
+
return next;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Whether this rule states an assertion at all — the assertion gate's question.
|
|
39
|
+
*
|
|
40
|
+
* True once a requirement has been declared; `tsconfig()` with none asserts nothing.
|
|
41
|
+
*
|
|
42
|
+
* Overrides the `TerminalBuilder` default (`true`), whose JSDoc carries the
|
|
43
|
+
* contract and the reason this is public rather than protected.
|
|
44
|
+
*/
|
|
45
|
+
assertsSomething() {
|
|
46
|
+
return Object.keys(this._requirements).length > 0;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The remedy for this builder's assertion-less state, as one string.
|
|
50
|
+
*
|
|
51
|
+
* One channel, so `diagnose()`'s advice and the finding's own message cannot
|
|
52
|
+
* disagree. Overrides `TerminalBuilder`'s generic text with wording specific to
|
|
53
|
+
* what this builder is missing.
|
|
54
|
+
*/
|
|
55
|
+
assertionAdvice() {
|
|
56
|
+
return ('this rule has no requirements, so it asserts nothing and can never fail. Add ' +
|
|
57
|
+
'.requires({...}) with at least one compiler option, or delete the rule.');
|
|
58
|
+
}
|
|
59
|
+
/** Named by id or the fixed rule description, not 'unnamed' (plan 0070 §4). */
|
|
60
|
+
describeRule() {
|
|
61
|
+
return {
|
|
62
|
+
...super.describeRule(),
|
|
63
|
+
rule: this._metadata?.id ?? RULE_DESCRIPTION,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Requirements this rule declared — plan 0098.
|
|
68
|
+
*
|
|
69
|
+
* This family examines a CONFIG, not a corpus, so its unit is not a subject
|
|
70
|
+
* count. Zero means `.require({})`: a tsconfig rule that asserts nothing,
|
|
71
|
+
* which is this family's shape of the vacuity every other family expresses as
|
|
72
|
+
* an empty selection.
|
|
73
|
+
*/
|
|
74
|
+
examinedUnits() {
|
|
75
|
+
return Object.keys(this._requirements).length;
|
|
29
76
|
}
|
|
30
77
|
collectViolations() {
|
|
31
|
-
const opts = this.
|
|
78
|
+
const opts = this.getOptions();
|
|
32
79
|
const file = this.project.tsConfigPath;
|
|
33
80
|
const violations = [];
|
|
34
81
|
for (const key of Object.keys(this._requirements)) {
|
|
@@ -48,16 +95,21 @@ export class TsconfigBuilder extends TerminalBuilder {
|
|
|
48
95
|
suggestion: fixSuggestion(key, expected, strictFamily, opts),
|
|
49
96
|
});
|
|
50
97
|
}
|
|
51
|
-
|
|
98
|
+
// Plan 0098. This family examines a CONFIG, not a corpus, so its unit is the
|
|
99
|
+
// requirements the author declared — the loop above is over exactly these.
|
|
100
|
+
// Zero means `.require({})`: a tsconfig rule that asserts nothing, which is
|
|
101
|
+
// this family's shape of the vacuity every other family expresses as an
|
|
102
|
+
// empty selection.
|
|
103
|
+
return collectResult(violations, { examined: this.examinedUnits() });
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Prefer the public `getCompilerOptions()` (implemented by `project()` /
|
|
107
|
+
* `workspace()`); fall back to the internal ts-morph project so a bare
|
|
108
|
+
* `ArchProject` literal (e.g. a test double) still works.
|
|
109
|
+
*/
|
|
110
|
+
getOptions() {
|
|
111
|
+
return this.project.getCompilerOptions?.() ?? this.project._project.getCompilerOptions();
|
|
52
112
|
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Entry point for a tsconfig config-assertion rule. Mirrors `project()` /
|
|
56
|
-
* `smells` — a flat top-level entry returning a builder that composes with
|
|
57
|
-
* `.because()` / `.excluding()` / `.check()` / `.warn()`.
|
|
58
|
-
*/
|
|
59
|
-
export function tsconfig(p) {
|
|
60
|
-
return new TsconfigBuilder(p);
|
|
61
113
|
}
|
|
62
114
|
/**
|
|
63
115
|
* Human-readable fix hint for a mismatched flag. Enum-backed values are rendered
|
|
@@ -143,7 +195,4 @@ function deepEqual(a, b) {
|
|
|
143
195
|
}
|
|
144
196
|
return false;
|
|
145
197
|
}
|
|
146
|
-
function isRecord(value) {
|
|
147
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
148
|
-
}
|
|
149
198
|
//# sourceMappingURL=tsconfig-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsconfig-builder.js","sourceRoot":"","sources":["../../src/tsconfig/tsconfig-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tsconfig-builder.js","sourceRoot":"","sources":["../../src/tsconfig/tsconfig-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nielspeter/eess-ts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Architecture testing for TypeScript — the TS dialect of the eess family (formerly ts-archunit)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -79,9 +79,11 @@
|
|
|
79
79
|
"author": "Niels Peter",
|
|
80
80
|
"scripts": {
|
|
81
81
|
"prepublishOnly": "npm run build",
|
|
82
|
+
"prebuild": "rm -rf dist",
|
|
82
83
|
"build": "tsc -p tsconfig.build.json && chmod +x dist/cli/bin.js",
|
|
83
84
|
"test": "vitest run",
|
|
84
85
|
"test:watch": "vitest",
|
|
86
|
+
"test:matrix": "npm run build && vitest run --config vitest.matrix.config.ts",
|
|
85
87
|
"typecheck": "tsc --noEmit"
|
|
86
88
|
},
|
|
87
89
|
"keywords": [
|
|
@@ -113,7 +115,7 @@
|
|
|
113
115
|
}
|
|
114
116
|
},
|
|
115
117
|
"dependencies": {
|
|
116
|
-
"@nielspeter/eess": "^0.
|
|
118
|
+
"@nielspeter/eess": "^0.5.0",
|
|
117
119
|
"jiti": "^2.6.1",
|
|
118
120
|
"picomatch": "^4.0.4",
|
|
119
121
|
"ts-morph": "^27.0.2"
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { ImportDeclaration, ExportDeclaration, SourceFile } from 'ts-morph';
|
|
2
|
-
/**
|
|
3
|
-
* A module dependency edge — an `import … from` or an `export … from` re-export.
|
|
4
|
-
*/
|
|
5
|
-
export type DependencyDecl = ImportDeclaration | ExportDeclaration;
|
|
6
|
-
/**
|
|
7
|
-
* Every module dependency edge of a source file: its import declarations plus
|
|
8
|
-
* its `export … from` re-exports.
|
|
9
|
-
*
|
|
10
|
-
* A re-export is a real dependency — `export { x } from './y'` makes this module
|
|
11
|
-
* depend on `./y` exactly as an `import` would — so dependency-direction rules
|
|
12
|
-
* (`importFrom` / `notImportFrom` / `onlyImportFrom` / `dependOn`) must see it.
|
|
13
|
-
* ts-morph's `getImportDeclarations()` alone misses re-exports, which lets a
|
|
14
|
-
* forbidden edge hide behind `export … from` and pass a rule that should fail.
|
|
15
|
-
* A bare `export { x }` with no `from` has no target module and is skipped.
|
|
16
|
-
*/
|
|
17
|
-
export declare function getDependencyDecls(sf: SourceFile): DependencyDecl[];
|
|
18
|
-
/**
|
|
19
|
-
* Resolve a dependency edge to an absolute path (when the target resolves to a
|
|
20
|
-
* file in the project) or its raw specifier (for external packages).
|
|
21
|
-
*/
|
|
22
|
-
export declare function resolveDependencyPath(decl: DependencyDecl): string;
|
|
23
|
-
/**
|
|
24
|
-
* Is this dependency edge type-only? `import type …` / `export type … from …`,
|
|
25
|
-
* or an import whose every named specifier is inline `type`.
|
|
26
|
-
*/
|
|
27
|
-
export declare function isTypeOnlyDependency(decl: DependencyDecl): boolean;
|
|
28
|
-
//# sourceMappingURL=module-dependencies.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-dependencies.d.ts","sourceRoot":"","sources":["../../src/core/module-dependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAGhF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AAElE;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,UAAU,GAAG,cAAc,EAAE,CAKnE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAGlE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAElE"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Node } from 'ts-morph';
|
|
2
|
-
import { isTypeOnlyImport } from './import-options.js';
|
|
3
|
-
/**
|
|
4
|
-
* Every module dependency edge of a source file: its import declarations plus
|
|
5
|
-
* its `export … from` re-exports.
|
|
6
|
-
*
|
|
7
|
-
* A re-export is a real dependency — `export { x } from './y'` makes this module
|
|
8
|
-
* depend on `./y` exactly as an `import` would — so dependency-direction rules
|
|
9
|
-
* (`importFrom` / `notImportFrom` / `onlyImportFrom` / `dependOn`) must see it.
|
|
10
|
-
* ts-morph's `getImportDeclarations()` alone misses re-exports, which lets a
|
|
11
|
-
* forbidden edge hide behind `export … from` and pass a rule that should fail.
|
|
12
|
-
* A bare `export { x }` with no `from` has no target module and is skipped.
|
|
13
|
-
*/
|
|
14
|
-
export function getDependencyDecls(sf) {
|
|
15
|
-
const reexports = sf
|
|
16
|
-
.getExportDeclarations()
|
|
17
|
-
.filter((d) => d.getModuleSpecifierValue() !== undefined);
|
|
18
|
-
return [...sf.getImportDeclarations(), ...reexports];
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Resolve a dependency edge to an absolute path (when the target resolves to a
|
|
22
|
-
* file in the project) or its raw specifier (for external packages).
|
|
23
|
-
*/
|
|
24
|
-
export function resolveDependencyPath(decl) {
|
|
25
|
-
const resolved = decl.getModuleSpecifierSourceFile();
|
|
26
|
-
return resolved ? resolved.getFilePath() : (decl.getModuleSpecifierValue() ?? '');
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Is this dependency edge type-only? `import type …` / `export type … from …`,
|
|
30
|
-
* or an import whose every named specifier is inline `type`.
|
|
31
|
-
*/
|
|
32
|
-
export function isTypeOnlyDependency(decl) {
|
|
33
|
-
return Node.isImportDeclaration(decl) ? isTypeOnlyImport(decl) : decl.isTypeOnly();
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=module-dependencies.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-dependencies.js","sourceRoot":"","sources":["../../src/core/module-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAOtD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAc;IAC/C,MAAM,SAAS,GAAG,EAAE;SACjB,qBAAqB,EAAE;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB,EAAE,KAAK,SAAS,CAAC,CAAA;IAC3D,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,EAAE,GAAG,SAAS,CAAC,CAAA;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAoB;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAA;IACpD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAA;AACnF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAoB;IACvD,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;AACpF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"within.d.ts","sourceRoot":"","sources":["../../src/helpers/within.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAA;AAEvF;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,SAAS,IAAI,yBAAyB,CAAA;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,aAAa,CAMhE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"within.js","sourceRoot":"","sources":["../../src/helpers/within.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAA;AAiBvF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,MAAM,CAAC,SAA0B;IAC/C,OAAO;QACL,SAAS;YACP,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAA;QACjD,CAAC;KACF,CAAA;AACH,CAAC"}
|