@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
package/dist/models/slice.js
CHANGED
|
@@ -1,33 +1,129 @@
|
|
|
1
1
|
import picomatch from 'picomatch';
|
|
2
|
+
import { isProjectRelative, relativeToRoot } from '../core/project-relative.js';
|
|
3
|
+
/**
|
|
4
|
+
* Characters that make a segment non-literal for prefix purposes.
|
|
5
|
+
*
|
|
6
|
+
* Only `*` and `?`. Brackets and braces are excluded deliberately: `[slug]`,
|
|
7
|
+
* `(marketing)` and `{a,b}` occur as real directory names, and a `baseDir` cut
|
|
8
|
+
* before them is located in the path literally — which is what makes those routes
|
|
9
|
+
* resolve correctly. Cutting at `*`/`?` matters for partial wildcards
|
|
10
|
+
* (`src/feature-*\/x/*`), where keeping the segment would put a `*` inside
|
|
11
|
+
* `baseDir` and no path could ever contain it.
|
|
12
|
+
*/
|
|
13
|
+
const WILDCARD_CHARS = /[*?]/;
|
|
14
|
+
/**
|
|
15
|
+
* Normalize a `matching()` glob so every spelling of one intent agrees.
|
|
16
|
+
*
|
|
17
|
+
* Redundant and therefore stripped: a leading `**\/` (patterns are matched against
|
|
18
|
+
* absolute paths anyway), a leading `./` (never present in an absolute path), and a
|
|
19
|
+
* trailing `/` once the glob already contains a wildcard segment.
|
|
20
|
+
*
|
|
21
|
+
* A trailing `/` on a wildcard-free glob becomes an explicit `*`, so `'src/features/'`
|
|
22
|
+
* ("the things inside features") is exactly `'src/features/*'`. These are all
|
|
23
|
+
* equivalent — `'src/features/*'`, `'src/features/*\/'`, `'src/features/'`,
|
|
24
|
+
* `'**\/src/features/*'`, `'./src/features/*'` — while `'src/features'` (no slash) is
|
|
25
|
+
* deliberately different: its final segment is a name filter, yielding one slice.
|
|
26
|
+
*/
|
|
27
|
+
function parseMatchingGlob(glob) {
|
|
28
|
+
let normalized = glob;
|
|
29
|
+
// Loop over BOTH redundant prefixes together: './' and '**/' can appear in
|
|
30
|
+
// either order ('**/./src/*'), and stripping one kind to exhaustion before the
|
|
31
|
+
// other left a residual that made the whole glob unmatchable.
|
|
32
|
+
while (normalized.startsWith('./') || normalized.startsWith('**/')) {
|
|
33
|
+
normalized = normalized.startsWith('./') ? normalized.slice(2) : normalized.slice(3);
|
|
34
|
+
}
|
|
35
|
+
// A trailing '/' is redundant once the glob already contains a wildcard segment:
|
|
36
|
+
// that wildcard is the slice level, and the pattern appends its own '*/**'. Left
|
|
37
|
+
// in, it demanded one directory MORE than baseDir implies, so every file sitting
|
|
38
|
+
// directly in the matched directory was silently dropped ('src/feature-*/' lost
|
|
39
|
+
// each feature's index.ts; 'packages/*/src/' lost everything directly in src).
|
|
40
|
+
//
|
|
41
|
+
// With no wildcard anywhere the slash is meaningful and stays: 'src/features/'
|
|
42
|
+
// means "the directories inside features". The test is about the glob as a whole,
|
|
43
|
+
// not the final segment's shape — `[slug]` and `(marketing)` are real directory
|
|
44
|
+
// names, and testing them for metacharacters is what broke them before.
|
|
45
|
+
if (normalized.endsWith('/')) {
|
|
46
|
+
const withoutSlash = normalized.slice(0, -1);
|
|
47
|
+
const hasWildcardSegment = withoutSlash.split('/').some((seg) => WILDCARD_CHARS.test(seg));
|
|
48
|
+
// With a wildcard already present that wildcard IS the slice level, so the
|
|
49
|
+
// slash is noise. Otherwise 'dir/' means "the things inside dir", which is
|
|
50
|
+
// exactly 'dir/*' — make it explicit so both spellings take the same path and
|
|
51
|
+
// a flat directory (files, no subdirectories) resolves for both.
|
|
52
|
+
normalized = hasWildcardSegment ? withoutSlash : normalized + '*';
|
|
53
|
+
}
|
|
54
|
+
const segments = normalized.split('/').filter((segment) => segment !== '');
|
|
55
|
+
// The slice level is the first wildcard segment; everything literal before it is
|
|
56
|
+
// the directory prefix we locate in the path. A trailing '/' has already been
|
|
57
|
+
// turned into an explicit '*', so the remaining no-wildcard case is a bare
|
|
58
|
+
// 'src/feature-', where the final segment is a NAME FILTER rather than a
|
|
59
|
+
// directory — which is what distinguishes it from 'src/features/'.
|
|
60
|
+
const wildcardIdx = segments.findIndex((segment) => WILDCARD_CHARS.test(segment));
|
|
61
|
+
const prefixSegments = wildcardIdx >= 0 ? segments.slice(0, wildcardIdx) : segments.slice(0, -1);
|
|
62
|
+
const baseDir = prefixSegments.length > 0 ? prefixSegments.join('/') + '/' : '';
|
|
63
|
+
// The pattern keeps the glob's own shape (interior segments included) so that
|
|
64
|
+
// `packages/*/src/*` still requires the `/src/` level, and `dir/*` still matches
|
|
65
|
+
// files sitting directly in `dir` as well as subdirectories. Only `baseDir` is
|
|
66
|
+
// segment-derived — it is the part that has to be findable in a real path.
|
|
67
|
+
const fullGlob = (normalized.startsWith('/') ? normalized : '**/' + normalized) + '*/**';
|
|
68
|
+
return { fullGlob, baseDir };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The literal directory prefix a `matching()` glob would search for, or `''` when
|
|
72
|
+
* it has none (`'*'`, `'src'`, `'{a,b}/x/*'`). Exposed so the rule builder can
|
|
73
|
+
* state the *actual* cause of an empty result instead of guessing at one.
|
|
74
|
+
*/
|
|
75
|
+
export function matchingGlobPrefix(glob) {
|
|
76
|
+
return parseMatchingGlob(glob).baseDir;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The glob `matching()` actually hands to picomatch.
|
|
80
|
+
*
|
|
81
|
+
* Exposed for glob diagnosis (plan 0069), which must declare **the string the
|
|
82
|
+
* matcher receives** — the same rule `GlobKind` states for what a glob is
|
|
83
|
+
* matched against. Declaring the author's spelling instead makes the whole
|
|
84
|
+
* mechanism wrong for this entry point: `'src/features/*'` is rewritten to
|
|
85
|
+
* `'**\/src/features/**\/*'`-shaped, so the author's string matches nothing in
|
|
86
|
+
* either view and every nested-layout `matching()` rule — the shape the docs
|
|
87
|
+
* teach — is reported dead. It also made `'./src/features/*'`, which
|
|
88
|
+
* `parseMatchingGlob` deliberately supports, report a `dot-segment` fault with
|
|
89
|
+
* a remedy that would break a working rule.
|
|
90
|
+
*/
|
|
91
|
+
export function matchingGlobPattern(glob) {
|
|
92
|
+
return parseMatchingGlob(glob).fullGlob;
|
|
93
|
+
}
|
|
2
94
|
/**
|
|
3
95
|
* Resolve slices by matching a glob pattern against source file paths.
|
|
4
|
-
* Each unique directory matching the glob becomes a slice.
|
|
5
96
|
*
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
8
|
-
*
|
|
97
|
+
* The segment following the glob's literal prefix names each slice. That segment
|
|
98
|
+
* is a **directory** when files are nested under it, and otherwise each matching
|
|
99
|
+
* **file** name — `matching('src/features/*')` over `features/billing/order.ts`
|
|
100
|
+
* yields a `billing` slice, while over a flat `services/order.service.ts` it
|
|
101
|
+
* yields an `order.service.ts` slice.
|
|
102
|
+
*
|
|
103
|
+
* Every spelling of the same intent agrees: `'src/features/*'`,
|
|
104
|
+
* `'src/features/*\/'`, `'src/features/'` and `'**\/src/features/*'` are equivalent.
|
|
9
105
|
*
|
|
10
106
|
* @param project - The loaded ArchProject
|
|
11
|
-
* @param glob - A glob
|
|
12
|
-
* @returns Array of slices, one per
|
|
107
|
+
* @param glob - A glob whose literal prefix locates the slices; the next segment names them
|
|
108
|
+
* @returns Array of slices, one per distinct name
|
|
13
109
|
*
|
|
14
110
|
* @example
|
|
15
|
-
* resolveByMatching(project, 'src/features
|
|
111
|
+
* resolveByMatching(project, 'src/features/*')
|
|
16
112
|
* // => [{ name: 'auth', files: [...] }, { name: 'billing', files: [...] }]
|
|
17
113
|
*/
|
|
18
114
|
export function resolveByMatching(project, glob) {
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
|
|
115
|
+
const { fullGlob, baseDir } = parseMatchingGlob(glob);
|
|
116
|
+
// No literal directory prefix (e.g. '*', '**', 'src' with no '/'). Bail rather
|
|
117
|
+
// than search for '' in the path: `indexOf('')` is 0, so the "slice name" would
|
|
118
|
+
// be the path's first segment — empty on POSIX (harmless by accident) but the
|
|
119
|
+
// drive letter on Windows, which would mint ONE slice holding every file and
|
|
120
|
+
// silently pass every inter-slice condition. Returning no slices makes the
|
|
121
|
+
// discovery guard fire instead (ADR-008).
|
|
122
|
+
if (baseDir === '')
|
|
123
|
+
return [];
|
|
23
124
|
const isMatch = picomatch(fullGlob);
|
|
24
125
|
const sourceFiles = project.getSourceFiles();
|
|
25
126
|
const sliceMap = new Map();
|
|
26
|
-
// Extract the base directory (everything up to and including the last / in the original glob)
|
|
27
|
-
// For 'src/feature-', basedir is 'src/' so that 'feature-a' is extracted as slice name.
|
|
28
|
-
// For 'src/features/*/', basedir is 'src/features/' so that the wildcard dirs are slice names.
|
|
29
|
-
const lastSlashIdx = glob.lastIndexOf('/');
|
|
30
|
-
const baseDir = lastSlashIdx >= 0 ? glob.slice(0, lastSlashIdx + 1) : '';
|
|
31
127
|
for (const sf of sourceFiles) {
|
|
32
128
|
const filePath = sf.getFilePath();
|
|
33
129
|
if (!isMatch(filePath))
|
|
@@ -63,8 +159,8 @@ export function resolveByMatching(project, glob) {
|
|
|
63
159
|
*
|
|
64
160
|
* @example
|
|
65
161
|
* resolveByDefinition(project, {
|
|
66
|
-
* presentation: 'src/controllers/**',
|
|
67
|
-
* domain: '
|
|
162
|
+
* presentation: 'src/controllers/**', // relative: those folders AT THE ROOT
|
|
163
|
+
* domain: '**\/domain/**', // anchored: a domain/ anywhere
|
|
68
164
|
* })
|
|
69
165
|
*/
|
|
70
166
|
export function resolveByDefinition(project, definition) {
|
|
@@ -73,12 +169,26 @@ export function resolveByDefinition(project, definition) {
|
|
|
73
169
|
const matchers = entries.map(([name, glob]) => ({
|
|
74
170
|
name,
|
|
75
171
|
isMatch: picomatch(glob),
|
|
172
|
+
// Bug 0033. A project-relative glob matched nothing here while the path
|
|
173
|
+
// predicates and `matching()` both accepted one — so `layers: { api:
|
|
174
|
+
// 'src/api/**' }` failed beside a `shared: ['src/shared/**']` that worked,
|
|
175
|
+
// in the same preset call. Same rule as the predicates (plan 0067 C):
|
|
176
|
+
// relative means **from the project root**, which is narrower and more
|
|
177
|
+
// accurate than the `'**/src/api/**'` the old advice prescribed.
|
|
178
|
+
relative: isProjectRelative(glob),
|
|
76
179
|
files: [],
|
|
77
180
|
}));
|
|
78
181
|
for (const sf of sourceFiles) {
|
|
79
182
|
const filePath = sf.getFilePath();
|
|
183
|
+
// Per FILE, not once per project: a workspace has several roots and each
|
|
184
|
+
// file belongs to one of them (bug 0035). `project.tsConfigPath` is only
|
|
185
|
+
// the fallback, for a project built without `project()`/`workspace()` —
|
|
186
|
+
// an in-memory test double, where ts-morph records no config path either.
|
|
187
|
+
const fromRoot = relativeToRoot(sf, filePath, project.tsConfigPath);
|
|
80
188
|
for (const matcher of matchers) {
|
|
81
|
-
|
|
189
|
+
const hit = matcher.isMatch(filePath) ||
|
|
190
|
+
(matcher.relative && fromRoot !== undefined && matcher.isMatch(fromRoot));
|
|
191
|
+
if (hit) {
|
|
82
192
|
matcher.files.push(sf);
|
|
83
193
|
break; // first match wins
|
|
84
194
|
}
|
package/dist/models/slice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/models/slice.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/models/slice.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/predicates/call.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/predicates/call.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAYtD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAQ1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAiB5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAa5F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAkB9E"}
|
package/dist/predicates/call.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Node } from 'ts-morph';
|
|
2
2
|
import picomatch from 'picomatch';
|
|
3
|
+
import { globNode } from '@nielspeter/eess';
|
|
3
4
|
/**
|
|
4
5
|
* Normalize text for matching: replace optional chaining `?.` with `.`
|
|
5
6
|
* so users don't need to account for both forms.
|
|
@@ -97,6 +98,10 @@ export function withArgMatching(index, pattern) {
|
|
|
97
98
|
export function withStringArg(index, glob) {
|
|
98
99
|
const isMatch = picomatch(glob);
|
|
99
100
|
return {
|
|
101
|
+
// `literal`: this glob is matched against a string literal in the source,
|
|
102
|
+
// not a path. Declared anyway so `doctor` can tell "declares nothing" from
|
|
103
|
+
// "declares something that is legitimately not path-checkable".
|
|
104
|
+
globs: globNode({ glob, kind: 'literal' }),
|
|
100
105
|
description: `with string argument ${String(index)} matching '${glob}'`,
|
|
101
106
|
test: (call) => {
|
|
102
107
|
const args = call.getArguments();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/predicates/call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,OAAO,SAAS,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/predicates/call.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,27 @@ export declare function resideInFile<T extends Located>(glob: string): Predicate
|
|
|
44
44
|
* resideInFolder('** /src/services/**')
|
|
45
45
|
*/
|
|
46
46
|
export declare function resideInFolder<T extends Located>(glob: string): Predicate<T>;
|
|
47
|
+
/**
|
|
48
|
+
* Matches modules whose file path matches the given glob.
|
|
49
|
+
*
|
|
50
|
+
* Similar to resideInFile but semantically clearer for modules —
|
|
51
|
+
* "modules that have path matching" vs "elements that reside in file".
|
|
52
|
+
*
|
|
53
|
+
* Lives here, beside `resideInFile`/`resideInFolder`, rather than in
|
|
54
|
+
* `predicates/module.ts`: it is an **identity** predicate, and identity
|
|
55
|
+
* predicates are legitimately single-glob — you match one location pattern,
|
|
56
|
+
* not a blacklist. The `api/no-single-glob-predicates` dogfood rule bans
|
|
57
|
+
* single-glob predicates in `module.ts` precisely because a module predicate
|
|
58
|
+
* like `importFrom`/`notImportFrom` must be variadic, and it carved out
|
|
59
|
+
* identity predicates by name in a comment. Moving the function makes that
|
|
60
|
+
* carve-out the rule's own scope instead of a comment beside it — exclusion by
|
|
61
|
+
* construction (ADR-009 rule 3). No public API change: `src/index.ts`
|
|
62
|
+
* re-exports it under the same name, and there is no `./predicates` subpath.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* modules(p).that().havePathMatching('** /services/*.ts')
|
|
66
|
+
*/
|
|
67
|
+
export declare function havePathMatching(glob: string): Predicate<SourceFile>;
|
|
47
68
|
/**
|
|
48
69
|
* Matches elements that are exported from their module.
|
|
49
70
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/predicates/identity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/predicates/identity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,iGAAiG;AACjG,MAAM,WAAW,KAAK;IACpB,OAAO,IAAI,MAAM,GAAG,SAAS,CAAA;CAC9B;AAED,yDAAyD;AACzD,MAAM,WAAW,OAAO;IACtB,aAAa,IAAI,UAAU,CAAA;CAC5B;AAED,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,UAAU,IAAI,OAAO,CAAA;CACtB;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CASxF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAQlF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAQhF;AAID;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAkB1E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CA2B5E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAcpE;AAID;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAKhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAKnE"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import picomatch from 'picomatch';
|
|
2
|
+
import { globNode } from '@nielspeter/eess';
|
|
3
|
+
import { isProjectRelative, relativeToRoot } from '../core/project-relative.js';
|
|
2
4
|
// --- Name predicates ---
|
|
3
5
|
/**
|
|
4
6
|
* Matches elements whose name matches the given pattern.
|
|
@@ -50,9 +52,23 @@ export function haveNameEndingWith(suffix) {
|
|
|
50
52
|
*/
|
|
51
53
|
export function resideInFile(glob) {
|
|
52
54
|
const isMatch = picomatch(glob);
|
|
55
|
+
const relative = isProjectRelative(glob);
|
|
53
56
|
return {
|
|
57
|
+
// `base: 'normalized'` when the glob is project-relative — the anchor check
|
|
58
|
+
// in `syntacticFault` calls an unanchored glob dead against absolute paths,
|
|
59
|
+
// and it stops being dead exactly when it starts working (plan 0067 C).
|
|
60
|
+
globs: globNode({ glob, kind: 'file-path', base: relative ? 'normalized' : 'absolute' }),
|
|
54
61
|
description: `reside in file matching "${glob}"`,
|
|
55
|
-
test: (element) =>
|
|
62
|
+
test: (element) => {
|
|
63
|
+
const sourceFile = element.getSourceFile();
|
|
64
|
+
const filePath = sourceFile.getFilePath();
|
|
65
|
+
if (isMatch(filePath))
|
|
66
|
+
return true;
|
|
67
|
+
if (!relative)
|
|
68
|
+
return false;
|
|
69
|
+
const fromRoot = relativeToRoot(sourceFile, filePath);
|
|
70
|
+
return fromRoot !== undefined && isMatch(fromRoot);
|
|
71
|
+
},
|
|
56
72
|
};
|
|
57
73
|
}
|
|
58
74
|
/**
|
|
@@ -65,12 +81,68 @@ export function resideInFile(glob) {
|
|
|
65
81
|
*/
|
|
66
82
|
export function resideInFolder(glob) {
|
|
67
83
|
const isMatch = picomatch(glob);
|
|
84
|
+
const relative = isProjectRelative(glob);
|
|
68
85
|
return {
|
|
86
|
+
// `parent-dir`, not `file-path`: the test below reads the directory
|
|
87
|
+
// portion, so this glob is matched against the immediate parent and
|
|
88
|
+
// nothing else. It is the only selector in src/ that does.
|
|
89
|
+
globs: globNode({
|
|
90
|
+
glob,
|
|
91
|
+
kind: 'parent-dir',
|
|
92
|
+
base: relative ? 'normalized' : 'absolute',
|
|
93
|
+
}),
|
|
69
94
|
description: `reside in folder matching "${glob}"`,
|
|
70
95
|
test: (element) => {
|
|
71
|
-
const
|
|
96
|
+
const sourceFile = element.getSourceFile();
|
|
97
|
+
const filePath = sourceFile.getFilePath();
|
|
72
98
|
const dirPath = filePath.substring(0, filePath.lastIndexOf('/'));
|
|
73
|
-
|
|
99
|
+
if (isMatch(dirPath))
|
|
100
|
+
return true;
|
|
101
|
+
// Project-relative: the same directory, named from the project root
|
|
102
|
+
// (plan 0067 C). `'src/domain/**'` means that folder AT THE ROOT, which
|
|
103
|
+
// is narrower and more accurate than the `'**/src/domain/**'` the old
|
|
104
|
+
// advice prescribed.
|
|
105
|
+
if (!relative)
|
|
106
|
+
return false;
|
|
107
|
+
const fromRoot = relativeToRoot(sourceFile, dirPath);
|
|
108
|
+
return fromRoot !== undefined && isMatch(fromRoot);
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Matches modules whose file path matches the given glob.
|
|
114
|
+
*
|
|
115
|
+
* Similar to resideInFile but semantically clearer for modules —
|
|
116
|
+
* "modules that have path matching" vs "elements that reside in file".
|
|
117
|
+
*
|
|
118
|
+
* Lives here, beside `resideInFile`/`resideInFolder`, rather than in
|
|
119
|
+
* `predicates/module.ts`: it is an **identity** predicate, and identity
|
|
120
|
+
* predicates are legitimately single-glob — you match one location pattern,
|
|
121
|
+
* not a blacklist. The `api/no-single-glob-predicates` dogfood rule bans
|
|
122
|
+
* single-glob predicates in `module.ts` precisely because a module predicate
|
|
123
|
+
* like `importFrom`/`notImportFrom` must be variadic, and it carved out
|
|
124
|
+
* identity predicates by name in a comment. Moving the function makes that
|
|
125
|
+
* carve-out the rule's own scope instead of a comment beside it — exclusion by
|
|
126
|
+
* construction (ADR-009 rule 3). No public API change: `src/index.ts`
|
|
127
|
+
* re-exports it under the same name, and there is no `./predicates` subpath.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* modules(p).that().havePathMatching('** /services/*.ts')
|
|
131
|
+
*/
|
|
132
|
+
export function havePathMatching(glob) {
|
|
133
|
+
const isMatch = picomatch(glob);
|
|
134
|
+
const relative = isProjectRelative(glob);
|
|
135
|
+
return {
|
|
136
|
+
globs: globNode({ glob, kind: 'file-path', base: relative ? 'normalized' : 'absolute' }),
|
|
137
|
+
description: `have path matching "${glob}"`,
|
|
138
|
+
test: (sourceFile) => {
|
|
139
|
+
const filePath = sourceFile.getFilePath();
|
|
140
|
+
if (isMatch(filePath))
|
|
141
|
+
return true;
|
|
142
|
+
if (!relative)
|
|
143
|
+
return false;
|
|
144
|
+
const fromRoot = relativeToRoot(sourceFile, filePath);
|
|
145
|
+
return fromRoot !== undefined && isMatch(fromRoot);
|
|
74
146
|
},
|
|
75
147
|
};
|
|
76
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/predicates/identity.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/predicates/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export type { Named, Located, Exportable } from './identity.js';
|
|
2
|
-
export { haveNameMatching, haveNameStartingWith, haveNameEndingWith, resideInFile, resideInFolder, areExported, areNotExported, } from './identity.js';
|
|
2
|
+
export { haveNameMatching, haveNameStartingWith, haveNameEndingWith, resideInFile, resideInFolder, havePathMatching, areExported, areNotExported, } from './identity.js';
|
|
3
3
|
export * as classPredicates from './class.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/predicates/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,eAAe,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/predicates/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,eAAe,MAAM,YAAY,CAAA"}
|
package/dist/predicates/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { haveNameMatching, haveNameStartingWith, haveNameEndingWith, resideInFile, resideInFolder, areExported, areNotExported, } from './identity.js';
|
|
1
|
+
export { haveNameMatching, haveNameStartingWith, haveNameEndingWith, resideInFile, resideInFolder, havePathMatching, areExported, areNotExported, } from './identity.js';
|
|
2
2
|
export * as classPredicates from './class.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/predicates/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,eAAe,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/predicates/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,eAAe,MAAM,YAAY,CAAA"}
|
|
@@ -16,11 +16,13 @@ export declare function haveComplexity(opts: {
|
|
|
16
16
|
greaterThan: number;
|
|
17
17
|
}): Predicate<ArchFunction>;
|
|
18
18
|
/**
|
|
19
|
-
* Predicate: class has more than N lines of code
|
|
19
|
+
* Predicate: class has more than N lines of code — comments and blank lines
|
|
20
|
+
* excluded (bug 0170).
|
|
20
21
|
*/
|
|
21
22
|
export declare function haveMoreLinesThan(threshold: number): Predicate<ClassDeclaration>;
|
|
22
23
|
/**
|
|
23
|
-
* Predicate: function has more than N lines of code
|
|
24
|
+
* Predicate: function has more than N lines of code — comments and blank lines
|
|
25
|
+
* excluded (bug 0170).
|
|
24
26
|
*/
|
|
25
27
|
export declare function haveMoreFunctionLinesThan(threshold: number): Predicate<ArchFunction>;
|
|
26
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/predicates/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAa9B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,YAAY,CAAC,CAOrF;AAED
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/predicates/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAa9B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,YAAY,CAAC,CAOrF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAOhF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAOpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAOlF"}
|
|
@@ -30,7 +30,8 @@ export function haveComplexity(opts) {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Predicate: class has more than N lines of code
|
|
33
|
+
* Predicate: class has more than N lines of code — comments and blank lines
|
|
34
|
+
* excluded (bug 0170).
|
|
34
35
|
*/
|
|
35
36
|
export function haveMoreLinesThan(threshold) {
|
|
36
37
|
return {
|
|
@@ -41,7 +42,8 @@ export function haveMoreLinesThan(threshold) {
|
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
44
|
/**
|
|
44
|
-
* Predicate: function has more than N lines of code
|
|
45
|
+
* Predicate: function has more than N lines of code — comments and blank lines
|
|
46
|
+
* excluded (bug 0170).
|
|
45
47
|
*/
|
|
46
48
|
export function haveMoreFunctionLinesThan(threshold) {
|
|
47
49
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/predicates/metrics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEzF;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAExC;IACC,OAAO;QACL,WAAW,EAAE,8CAA8C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;QACrF,IAAI,CAAC,GAAqB;YACxB,MAAM,MAAM,GAAG;gBACb,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3C,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAChD,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAChD,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aACjD,CAAA;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7E,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAA6B;IAC1D,OAAO;QACL,WAAW,EAAE,gCAAgC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;QACvE,IAAI,CAAC,EAAgB;YACnB,OAAO,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAA;QAC9D,CAAC;KACF,CAAA;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/predicates/metrics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEzF;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAExC;IACC,OAAO;QACL,WAAW,EAAE,8CAA8C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;QACrF,IAAI,CAAC,GAAqB;YACxB,MAAM,MAAM,GAAG;gBACb,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3C,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAChD,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAChD,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aACjD,CAAA;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7E,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAA6B;IAC1D,OAAO;QACL,WAAW,EAAE,gCAAgC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;QACvE,IAAI,CAAC,EAAgB;YACnB,OAAO,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAA;QAC9D,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO;QACL,WAAW,EAAE,kBAAkB,MAAM,CAAC,SAAS,CAAC,QAAQ;QACxD,IAAI,CAAC,GAAqB;YACxB,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;QACrC,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,OAAO;QACL,WAAW,EAAE,kBAAkB,MAAM,CAAC,SAAS,CAAC,QAAQ;QACxD,IAAI,CAAC,EAAgB;YACnB,OAAO,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAA;QAC9C,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO;QACL,WAAW,EAAE,kBAAkB,MAAM,CAAC,SAAS,CAAC,UAAU;QAC1D,IAAI,CAAC,GAAqB;YACxB,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;QACrC,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -4,8 +4,10 @@ import type { ImportOptions } from '../core/import-options.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* Matches modules that import from a path matching any of the given globs.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* Each import contributes the resolved absolute path **and**, when the
|
|
8
|
+
* specifier is non-relative, the specifier as written; a glob matches the
|
|
9
|
+
* import if it matches either. So a bare package name works whether or not the
|
|
10
|
+
* package is installed. See `importCandidates` for why.
|
|
9
11
|
*
|
|
10
12
|
* @example
|
|
11
13
|
* modules(p).that().importFrom('** /infrastructure/**')
|
|
@@ -31,14 +33,4 @@ export declare function notImportFrom(...globs: string[]): Predicate<SourceFile>
|
|
|
31
33
|
* modules(p).that().exportSymbolNamed('default')
|
|
32
34
|
*/
|
|
33
35
|
export declare function exportSymbolNamed(name: string): Predicate<SourceFile>;
|
|
34
|
-
/**
|
|
35
|
-
* Matches modules whose file path matches the given glob.
|
|
36
|
-
*
|
|
37
|
-
* Similar to resideInFile but semantically clearer for modules —
|
|
38
|
-
* "modules that have path matching" vs "elements that reside in file".
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* modules(p).that().havePathMatching('** /services/*.ts')
|
|
42
|
-
*/
|
|
43
|
-
export declare function havePathMatching(glob: string): Predicate<SourceFile>;
|
|
44
36
|
//# sourceMappingURL=module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/predicates/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/predicates/module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAsD9D;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAC1F,wBAAgB,UAAU,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAarE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAC7F,wBAAgB,aAAa,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAkBxE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAKrE"}
|