@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
package/dist/cli/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { parseArgs } from 'node:util';
|
|
2
|
+
import { isRecord, requireRuleFiles } from '@nielspeter/eess/internal';
|
|
2
3
|
import { readFileSync } from 'node:fs';
|
|
3
4
|
import { fileURLToPath } from 'node:url';
|
|
4
5
|
import path from 'node:path';
|
|
@@ -8,45 +9,52 @@ import { runCheck } from './commands/check.js';
|
|
|
8
9
|
import { runBaseline } from './commands/baseline.js';
|
|
9
10
|
import { runExplain } from './commands/explain.js';
|
|
10
11
|
import { runInit } from './commands/init.js';
|
|
12
|
+
import { runDoctor } from './commands/doctor.js';
|
|
11
13
|
import { watchAndRerun } from './watch.js';
|
|
12
14
|
function getVersion() {
|
|
13
15
|
const pkgPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../package.json');
|
|
16
|
+
// `JSON.parse` returns `any`, so the shape has to be established rather than
|
|
17
|
+
// asserted — and this runs for `--version`, where a malformed package.json
|
|
18
|
+
// should not crash the CLI with a TypeError about reading a property of a
|
|
19
|
+
// string (ADR-005, bug 0049).
|
|
14
20
|
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
15
|
-
if (pkg && typeof pkg
|
|
21
|
+
if (isRecord(pkg) && typeof pkg.version === 'string')
|
|
16
22
|
return pkg.version;
|
|
17
|
-
|
|
18
|
-
return '0.0.0';
|
|
23
|
+
return '0.0.0-unknown';
|
|
19
24
|
}
|
|
20
25
|
const HELP_TEXT = `
|
|
21
26
|
eess-ts — Architecture testing for TypeScript
|
|
22
27
|
|
|
23
28
|
Usage:
|
|
24
|
-
eess-ts init
|
|
25
|
-
eess-ts check [files...]
|
|
26
|
-
eess-ts baseline [files...]
|
|
27
|
-
eess-ts explain [files...]
|
|
29
|
+
eess-ts init Scaffold config + rules for a new project
|
|
30
|
+
eess-ts check [files...] Run architecture rules
|
|
31
|
+
eess-ts baseline [files...] Generate baseline file
|
|
32
|
+
eess-ts explain [files...] Dump all active rules as JSON
|
|
33
|
+
eess-ts doctor [files...] Report rules that cannot enforce anything
|
|
28
34
|
|
|
29
35
|
Options:
|
|
30
|
-
--preset <name> init: recommended (default) | agent-guardrails
|
|
31
|
-
|
|
32
|
-
--
|
|
33
|
-
--dry-run init: print the plan, write nothing
|
|
36
|
+
--preset <name> init: starter preset — recommended (default) | agent-guardrails
|
|
37
|
+
| layered | strict-boundaries | data-layer
|
|
38
|
+
--tsconfig <path> init: tsconfig path to wire in (default: tsconfig.json)
|
|
34
39
|
--no-baseline init: skip arch-baseline.json
|
|
40
|
+
--fix Apply deterministic fixes; dry-run (preview) unless --apply
|
|
41
|
+
--apply With --fix, write the fixes to disk
|
|
42
|
+
--force init: overwrite existing files
|
|
43
|
+
--dry-run init: print what would be created; write nothing
|
|
35
44
|
--baseline <path> Baseline file for filtering known violations
|
|
36
45
|
--output <path> Output path for baseline file (default: arch-baseline.json)
|
|
37
46
|
--changed Only report violations in changed files (git diff)
|
|
38
47
|
--base <branch> Base branch for diff (default: main)
|
|
39
|
-
--format <format> check: terminal, json, github, auto (default: auto)
|
|
48
|
+
--format <format> check: terminal, json, github, auto (default: auto)
|
|
40
49
|
explain: json (default), markdown, agent
|
|
41
|
-
|
|
42
|
-
--
|
|
43
|
-
--apply With --fix, write the fixes to disk
|
|
50
|
+
doctor: terminal (default), json
|
|
51
|
+
--markdown Output explain results as markdown table
|
|
44
52
|
-w, --watch Watch for changes and re-run (check command only)
|
|
45
53
|
--config <path> Path to config file
|
|
46
54
|
-v, --version Show version number
|
|
47
55
|
-h, --help Show this help message
|
|
48
56
|
`;
|
|
49
|
-
// eess-exclude eess/no-unused-exports: consumed by the test suite
|
|
57
|
+
// eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
|
|
50
58
|
export function parseCliArgs(args) {
|
|
51
59
|
return parseArgs({
|
|
52
60
|
args,
|
|
@@ -61,29 +69,22 @@ export function parseCliArgs(args) {
|
|
|
61
69
|
help: { type: 'boolean', short: 'h', default: false },
|
|
62
70
|
version: { type: 'boolean', short: 'v', default: false },
|
|
63
71
|
watch: { type: 'boolean', short: 'w', default: false },
|
|
64
|
-
fix: { type: 'boolean', default: false },
|
|
65
|
-
apply: { type: 'boolean', default: false },
|
|
66
72
|
preset: { type: 'string' },
|
|
67
73
|
tsconfig: { type: 'string' },
|
|
68
74
|
force: { type: 'boolean', default: false },
|
|
69
75
|
'dry-run': { type: 'boolean', default: false },
|
|
70
76
|
'no-baseline': { type: 'boolean', default: false },
|
|
77
|
+
fix: { type: 'boolean', default: false },
|
|
78
|
+
apply: { type: 'boolean', default: false },
|
|
71
79
|
},
|
|
72
80
|
allowPositionals: true,
|
|
73
81
|
strict: true,
|
|
74
82
|
});
|
|
75
83
|
}
|
|
76
84
|
/** Require rule files to be specified, printing an error and setting exit code if missing. */
|
|
77
|
-
function requireRuleFiles(ruleFiles) {
|
|
78
|
-
if (ruleFiles.length > 0)
|
|
79
|
-
return true;
|
|
80
|
-
console.error('Error: No rule files specified. Pass rule files as arguments or set them in config.');
|
|
81
|
-
process.exitCode = 1;
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
85
|
/** Handle the `check` subcommand. */
|
|
85
86
|
async function handleCheck(ruleFiles, values, config, format, baseline, changed, base) {
|
|
86
|
-
if (!requireRuleFiles(ruleFiles))
|
|
87
|
+
if (!requireRuleFiles(ruleFiles, 'eess-ts.config.ts'))
|
|
87
88
|
return;
|
|
88
89
|
if (values.watch === true) {
|
|
89
90
|
const watchDirs = config.watchDirs ?? ['src'];
|
|
@@ -120,13 +121,35 @@ async function handleCheck(ruleFiles, values, config, format, baseline, changed,
|
|
|
120
121
|
}
|
|
121
122
|
/** Handle the `baseline` subcommand. */
|
|
122
123
|
async function handleBaseline(ruleFiles, output) {
|
|
123
|
-
if (!requireRuleFiles(ruleFiles))
|
|
124
|
+
if (!requireRuleFiles(ruleFiles, 'eess-ts.config.ts'))
|
|
124
125
|
return;
|
|
125
|
-
await runBaseline({ ruleFiles, output });
|
|
126
|
+
const code = await runBaseline({ ruleFiles, output });
|
|
127
|
+
if (code !== 0)
|
|
128
|
+
process.exitCode = code;
|
|
129
|
+
}
|
|
130
|
+
/** Reject a `--format` value that isn't valid for the given subcommand. */
|
|
131
|
+
const FORMATS = {
|
|
132
|
+
check: ['terminal', 'json', 'github', 'auto'],
|
|
133
|
+
explain: ['json', 'markdown', 'agent'],
|
|
134
|
+
// `doctor` has only these two. It was unvalidated while the command was
|
|
135
|
+
// hidden, so `--format github` ran silently as terminal — tolerable for an
|
|
136
|
+
// undocumented command, not for one listed in `--help` (plan 0077 review).
|
|
137
|
+
doctor: ['terminal', 'json'],
|
|
138
|
+
};
|
|
139
|
+
function isValidFormat(command, format) {
|
|
140
|
+
if (format === undefined)
|
|
141
|
+
return true;
|
|
142
|
+
const allowed = FORMATS[command];
|
|
143
|
+
if (!allowed.includes(format)) {
|
|
144
|
+
console.error(`Error: --format '${format}' is not valid for '${command}'. Valid values: ${allowed.join(', ')}.`);
|
|
145
|
+
process.exitCode = 1;
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return true;
|
|
126
149
|
}
|
|
127
150
|
/** Handle the `explain` subcommand. */
|
|
128
151
|
async function handleExplain(ruleFiles, markdown, format) {
|
|
129
|
-
if (!requireRuleFiles(ruleFiles))
|
|
152
|
+
if (!requireRuleFiles(ruleFiles, 'eess-ts.config.ts'))
|
|
130
153
|
return;
|
|
131
154
|
await runExplain({ ruleFiles, markdown, format });
|
|
132
155
|
}
|
|
@@ -147,34 +170,40 @@ export async function run(args) {
|
|
|
147
170
|
process.exitCode = 1;
|
|
148
171
|
return;
|
|
149
172
|
}
|
|
150
|
-
|
|
173
|
+
if (values.watch === true && command !== 'check') {
|
|
174
|
+
console.error('Error: --watch is only supported with the check command.');
|
|
175
|
+
process.exitCode = 1;
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// `init` scaffolds the config, so it runs before config resolution.
|
|
151
179
|
if (command === 'init') {
|
|
152
|
-
|
|
180
|
+
const code = runInit({
|
|
153
181
|
preset: values.preset,
|
|
154
182
|
tsconfig: values.tsconfig,
|
|
155
183
|
force: values.force,
|
|
156
184
|
dryRun: values['dry-run'],
|
|
157
185
|
noBaseline: values['no-baseline'],
|
|
158
186
|
});
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if (values.watch === true && command !== 'check') {
|
|
162
|
-
console.error('Error: --watch is only supported with the check command.');
|
|
163
|
-
process.exitCode = 1;
|
|
187
|
+
if (code !== 0)
|
|
188
|
+
process.exitCode = code;
|
|
164
189
|
return;
|
|
165
190
|
}
|
|
166
191
|
const config = await resolveConfig(values.config);
|
|
167
192
|
const ruleFiles = positionals.slice(1).length > 0 ? positionals.slice(1) : (config.rules ?? []);
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
: 'auto';
|
|
193
|
+
// A guard over the union, not a cast onto it: `values.format` comes from the
|
|
194
|
+
// command line and `config.format` from a file, so neither is typed by anything
|
|
195
|
+
// the compiler can see (bug 0049).
|
|
196
|
+
const requested = values.format ?? config.format ?? 'auto';
|
|
197
|
+
const isOutputFormat = (v) => ['terminal', 'json', 'github', 'auto'].some((f) => f === v);
|
|
198
|
+
const format = isOutputFormat(requested) ? requested : 'auto';
|
|
175
199
|
const baseline = values.baseline ?? config.baseline;
|
|
176
200
|
const base = values.base ?? 'main';
|
|
177
201
|
const changed = values.changed ?? false;
|
|
202
|
+
if ((command === 'check' && !isValidFormat('check', values.format)) ||
|
|
203
|
+
(command === 'explain' && !isValidFormat('explain', values.format)) ||
|
|
204
|
+
(command === 'doctor' && !isValidFormat('doctor', values.format))) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
178
207
|
if (command === 'check') {
|
|
179
208
|
await handleCheck(ruleFiles, values, config, format, baseline, changed, base);
|
|
180
209
|
}
|
|
@@ -184,6 +213,35 @@ export async function run(args) {
|
|
|
184
213
|
else if (command === 'explain') {
|
|
185
214
|
await handleExplain(ruleFiles, values.markdown, values.format);
|
|
186
215
|
}
|
|
216
|
+
else if (command === 'doctor') {
|
|
217
|
+
// Supported since plan 0077, which settled the keep-or-retire question 0069
|
|
218
|
+
// left open. It is scoped, not experimental: it diagnoses rule files the CLI
|
|
219
|
+
// can LOAD — the `arch.rules.ts` shape `init` scaffolds, which
|
|
220
|
+
// `getting-started.md` calls the default path. Rules hosted in a vitest or
|
|
221
|
+
// jest file cannot be imported outside their runner; `diagnose()` is the
|
|
222
|
+
// answer there and reports the same findings.
|
|
223
|
+
//
|
|
224
|
+
// Still not a build gate (0069): it is invoked deliberately, and `check` is
|
|
225
|
+
// the gate.
|
|
226
|
+
//
|
|
227
|
+
// What it uniquely catches is a **dead glob** — a rule whose selector can
|
|
228
|
+
// never match, so it certifies nothing. `check` does not call `diagnose()`
|
|
229
|
+
// at all, and measured, it exits **0 with no output** on such a rule while
|
|
230
|
+
// `doctor` names the site and exits 1. That is the ADR-008 false green this
|
|
231
|
+
// whole area exists for, and until 0069's R3b flips it into a check-time
|
|
232
|
+
// failure, `doctor` and `diagnose()` are the only surfaces that see it.
|
|
233
|
+
//
|
|
234
|
+
// NOT load failures, which an earlier version of this comment claimed:
|
|
235
|
+
// `check` already reports an unloadable rule file as an error-severity
|
|
236
|
+
// configuration finding with a remedy (`cli/rule-file-findings.ts`), and
|
|
237
|
+
// does it better than this command's bare stderr line.
|
|
238
|
+
const code = await runDoctor({
|
|
239
|
+
ruleFiles,
|
|
240
|
+
format: values.format === 'json' ? 'json' : 'terminal',
|
|
241
|
+
});
|
|
242
|
+
if (code !== 0)
|
|
243
|
+
process.exitCode = code;
|
|
244
|
+
}
|
|
187
245
|
else {
|
|
188
246
|
console.error(`Error: Unknown command "${command}". Use --help for usage.`);
|
|
189
247
|
process.exitCode = 1;
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,SAAS,UAAU;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAA;IAChG,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/D,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/load-rules.d.ts
CHANGED
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
check: (opts?: CheckOptions) => void;
|
|
5
|
-
/** Collect violations without printing/throwing — used by --fix. */
|
|
6
|
-
violations?: () => ArchViolation[];
|
|
7
|
-
}
|
|
8
|
-
export interface LoadOptions {
|
|
1
|
+
import type { RuleBuilderLike } from '@nielspeter/eess';
|
|
2
|
+
export type { RuleBuilderLike } from '@nielspeter/eess';
|
|
3
|
+
interface LoadOptions {
|
|
9
4
|
/** Use cache-busting imports for watch mode. Default: false */
|
|
10
5
|
fresh?: boolean;
|
|
11
6
|
}
|
|
12
7
|
/**
|
|
13
|
-
* Load rule files
|
|
8
|
+
* Load rule files (supports `.ts` and `.js`/`.mjs`).
|
|
14
9
|
*
|
|
15
10
|
* Rule files must export a default array of rule builders or a function
|
|
16
|
-
* returning one. When `fresh` is true,
|
|
17
|
-
*
|
|
11
|
+
* returning one. When `fresh` is true, the module cache is busted so watch-mode
|
|
12
|
+
* re-runs pick up file changes.
|
|
18
13
|
*/
|
|
19
14
|
export declare function loadRuleFiles(files: string[], options?: LoadOptions): Promise<RuleBuilderLike[]>;
|
|
20
15
|
//# sourceMappingURL=load-rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-rules.d.ts","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load-rules.d.ts","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIvD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,UAAU,WAAW;IACnB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAmC5B"}
|
package/dist/cli/load-rules.js
CHANGED
|
@@ -1,40 +1,35 @@
|
|
|
1
|
+
import { ArchConfigError } from '@nielspeter/eess';
|
|
1
2
|
import path from 'node:path';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
// `import()` cannot load `.ts`. Cached, except in watch mode where a fresh
|
|
5
|
-
// instance busts the module cache to pick up edits.
|
|
6
|
-
let cachedJiti;
|
|
7
|
-
function getJiti(fresh) {
|
|
8
|
-
if (fresh)
|
|
9
|
-
return createJiti(import.meta.url, { fsCache: false, moduleCache: false });
|
|
10
|
-
if (!cachedJiti)
|
|
11
|
-
cachedJiti = createJiti(import.meta.url);
|
|
12
|
-
return cachedJiti;
|
|
13
|
-
}
|
|
3
|
+
import { importRuleModule } from './import-rule-module.js';
|
|
4
|
+
import { isNullaryCallable } from '@nielspeter/eess/internal';
|
|
14
5
|
/**
|
|
15
|
-
* Load rule files
|
|
6
|
+
* Load rule files (supports `.ts` and `.js`/`.mjs`).
|
|
16
7
|
*
|
|
17
8
|
* Rule files must export a default array of rule builders or a function
|
|
18
|
-
* returning one. When `fresh` is true,
|
|
19
|
-
*
|
|
9
|
+
* returning one. When `fresh` is true, the module cache is busted so watch-mode
|
|
10
|
+
* re-runs pick up file changes.
|
|
20
11
|
*/
|
|
21
12
|
export async function loadRuleFiles(files, options) {
|
|
22
13
|
const builders = [];
|
|
23
|
-
const jiti = getJiti(options?.fresh === true);
|
|
24
14
|
for (const file of files) {
|
|
25
15
|
const resolved = path.resolve(file);
|
|
26
|
-
const mod = await
|
|
16
|
+
const mod = await importRuleModule(resolved, options?.fresh === true);
|
|
27
17
|
const exported = extractDefault(mod);
|
|
28
18
|
const items = resolveExported(exported, file);
|
|
29
|
-
// A non-builder value in the default-export array is a
|
|
30
|
-
// silent skip
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
19
|
+
// A non-builder value in the default-export array is a LOUD ERROR, never a
|
|
20
|
+
// silent skip (plan 0061 Phase 0). A silently-dropped rule is a
|
|
21
|
+
// green-but-empty gate, which is the defect this tool exists to forbid — a
|
|
22
|
+
// void preset call (`preset(...)` returning `undefined`) is the classic
|
|
23
|
+
// offender and must fail here rather than vanish.
|
|
24
|
+
//
|
|
25
|
+
// **eess deliberately diverges from ts-archunit here**, which skips
|
|
26
|
+
// non-builders and returns `[]` for a malformed default export. Plan 0165's
|
|
27
|
+
// wholesale engine copy reverted this in both directions at once — source
|
|
28
|
+
// AND the tests that pinned it — so the fail-open landed green. Restored,
|
|
29
|
+
// with `tests/cli/load-rules.test.ts` carrying eess's assertions.
|
|
35
30
|
items.forEach((item, index) => {
|
|
36
31
|
if (!isRuleBuilderLike(item)) {
|
|
37
|
-
throw new
|
|
32
|
+
throw new ArchConfigError('loadRuleFiles', `Rule file "${file}": default export entry [${index}] is not a rule builder ` +
|
|
38
33
|
`(got ${describeValue(item)}). Every entry must be a builder with a .check() ` +
|
|
39
34
|
`method — e.g. \`modules(p).that()…\`. A preset that returns void cannot be placed ` +
|
|
40
35
|
`directly in the array; call it in its own statement, or export a builder.`);
|
|
@@ -56,17 +51,15 @@ function resolveExported(exported, file) {
|
|
|
56
51
|
if (Array.isArray(exported)) {
|
|
57
52
|
return exported;
|
|
58
53
|
}
|
|
59
|
-
if (
|
|
60
|
-
// Runtime validated: exported is a function, call it and check result
|
|
61
|
-
// eess-exclude eess/adr005-no-type-assertions: exported is runtime-verified as callable (typeof check); the static `Function` type is not callable with a typed signature
|
|
54
|
+
if (isNullaryCallable(exported)) {
|
|
62
55
|
const result = exported();
|
|
63
56
|
if (Array.isArray(result)) {
|
|
64
57
|
return result;
|
|
65
58
|
}
|
|
66
|
-
throw new
|
|
59
|
+
throw new ArchConfigError('resolveExported', `Rule file "${file}": default-exported function must return an array of rule builders ` +
|
|
67
60
|
`(got ${describeValue(result)}).`);
|
|
68
61
|
}
|
|
69
|
-
throw new
|
|
62
|
+
throw new ArchConfigError('resolveExported', `Rule file "${file}": default export must be an array of rule builders, or a function ` +
|
|
70
63
|
`returning one (got ${describeValue(exported)}). Add \`export default [ …builders ]\`.`);
|
|
71
64
|
}
|
|
72
65
|
/** Short human-readable description of an unexpected value, for error messages. */
|
|
@@ -83,7 +76,7 @@ function extractDefault(mod) {
|
|
|
83
76
|
}
|
|
84
77
|
// Dynamic import returns a module namespace object — 'in' narrows safely
|
|
85
78
|
if ('default' in mod) {
|
|
86
|
-
return mod
|
|
79
|
+
return mod.default;
|
|
87
80
|
}
|
|
88
81
|
return undefined;
|
|
89
82
|
}
|
|
@@ -91,7 +84,7 @@ function isRuleBuilderLike(value) {
|
|
|
91
84
|
if (value === null || value === undefined || typeof value !== 'object') {
|
|
92
85
|
return false;
|
|
93
86
|
}
|
|
94
|
-
// Structural type check: must have a '
|
|
95
|
-
return '
|
|
87
|
+
// Structural type check: must have a 'violations' method
|
|
88
|
+
return 'violations' in value && typeof value.violations === 'function';
|
|
96
89
|
}
|
|
97
90
|
//# sourceMappingURL=load-rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-rules.js","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"load-rules.js","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
1
|
import type { CliConfig } from './config.js';
|
|
2
|
-
/**
|
|
3
|
-
* Resolve CLI configuration from an explicit path or by searching for a config file.
|
|
4
|
-
*
|
|
5
|
-
* Config resolution order:
|
|
6
|
-
* 1. CLI flags (highest priority) — handled by caller
|
|
7
|
-
* 2. eess-ts.config.ts in project root
|
|
8
|
-
* 3. Defaults (project: 'tsconfig.json', format: 'auto')
|
|
9
|
-
*/
|
|
10
2
|
export declare function resolveConfig(explicitPath?: string): Promise<CliConfig>;
|
|
11
3
|
//# sourceMappingURL=resolve-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-config.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"resolve-config.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAgB5C,wBAAsB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAS7E"}
|
|
@@ -1,71 +1,41 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
// Config file names, in resolution order. First match wins.
|
|
5
|
-
const CONFIG_FILENAMES = ['eess-ts.config.ts', 'eess-ts.config.js'];
|
|
2
|
+
import { findConfigFile, extractSharedConfig, isRecord } from '@nielspeter/eess/internal';
|
|
3
|
+
import { importRuleModule } from './import-rule-module.js';
|
|
6
4
|
/**
|
|
7
|
-
* Resolve CLI configuration from an explicit path or by searching for
|
|
5
|
+
* Resolve CLI configuration from an explicit path or by searching for one.
|
|
8
6
|
*
|
|
9
7
|
* Config resolution order:
|
|
10
8
|
* 1. CLI flags (highest priority) — handled by caller
|
|
11
9
|
* 2. eess-ts.config.ts in project root
|
|
12
10
|
* 3. Defaults (project: 'tsconfig.json', format: 'auto')
|
|
11
|
+
*
|
|
12
|
+
* Finding the file and validating the shared fields are the kernel's — they were
|
|
13
|
+
* duplicated with `eess-mermaid` (`findConfigFile` scored 100%). What stays here
|
|
14
|
+
* is this dialect's own filenames, its own two extra fields, and its loader.
|
|
13
15
|
*/
|
|
16
|
+
const CONFIG_FILENAMES = ['eess-ts.config.ts', 'eess-ts.config.js'];
|
|
14
17
|
export async function resolveConfig(explicitPath) {
|
|
15
|
-
const configPath = explicitPath ?? findConfigFile();
|
|
18
|
+
const configPath = explicitPath ?? findConfigFile(CONFIG_FILENAMES);
|
|
16
19
|
if (configPath === undefined)
|
|
17
20
|
return {};
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// interopDefault: false — extractDefault reads `.default` itself, and the
|
|
24
|
-
// interop proxy breaks on `export default null` (its `then` probe during
|
|
25
|
-
// await dereferences the null default).
|
|
26
|
-
const jiti = createJiti(import.meta.url, { interopDefault: false });
|
|
27
|
-
const mod = await jiti.import(path.resolve(configPath));
|
|
28
|
-
return extractDefault(mod);
|
|
29
|
-
}
|
|
30
|
-
function findConfigFile() {
|
|
31
|
-
const cwd = process.cwd();
|
|
32
|
-
for (const name of CONFIG_FILENAMES) {
|
|
33
|
-
const candidate = path.join(cwd, name);
|
|
34
|
-
if (fs.existsSync(candidate))
|
|
35
|
-
return candidate;
|
|
36
|
-
}
|
|
37
|
-
return undefined;
|
|
21
|
+
// Native `import()` first, jiti only if Node refuses the file's module format
|
|
22
|
+
// — see `import-rule-module.ts`. A config in a `"type": "commonjs"` project is
|
|
23
|
+
// bug 0074; a config in an ESM project must share the CLI's module registry.
|
|
24
|
+
const mod = await importRuleModule(path.resolve(configPath), false);
|
|
25
|
+
return { ...extractSharedConfig(mod), ...tsOnlyFields(mod) };
|
|
38
26
|
}
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*/
|
|
43
|
-
function extractDefault(mod) {
|
|
44
|
-
if (mod === null || mod === undefined || typeof mod !== 'object') {
|
|
45
|
-
return {};
|
|
46
|
-
}
|
|
47
|
-
// Dynamic import returns a module namespace — 'in' narrows safely
|
|
48
|
-
if (!('default' in mod)) {
|
|
27
|
+
/** `project` and `baseline` — the two fields no other dialect has. */
|
|
28
|
+
function tsOnlyFields(mod) {
|
|
29
|
+
if (!isRecord(mod) || !('default' in mod))
|
|
49
30
|
return {};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (defaultExport === null || defaultExport === undefined || typeof defaultExport !== 'object') {
|
|
31
|
+
const defaultExport = mod.default;
|
|
32
|
+
if (!isRecord(defaultExport))
|
|
53
33
|
return {};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
config.baseline = defaultExport.baseline;
|
|
61
|
-
if ('format' in defaultExport) {
|
|
62
|
-
const format = defaultExport.format;
|
|
63
|
-
if (format === 'terminal' || format === 'json' || format === 'github' || format === 'auto') {
|
|
64
|
-
config.format = format;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if ('rules' in defaultExport && Array.isArray(defaultExport.rules))
|
|
68
|
-
config.rules = defaultExport.rules.filter((r) => typeof r === 'string');
|
|
69
|
-
return config;
|
|
34
|
+
const out = {};
|
|
35
|
+
if (typeof defaultExport['project'] === 'string')
|
|
36
|
+
out.project = defaultExport['project'];
|
|
37
|
+
if (typeof defaultExport['baseline'] === 'string')
|
|
38
|
+
out.baseline = defaultExport['baseline'];
|
|
39
|
+
return out;
|
|
70
40
|
}
|
|
71
41
|
//# sourceMappingURL=resolve-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAG1D;;;;;;;;;;;GAWG;AACH,MAAM,gBAAgB,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAA;AAEnE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,YAAqB;IACvD,MAAM,UAAU,GAAG,YAAY,IAAI,cAAc,CAAC,gBAAgB,CAAC,CAAA;IACnE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAEvC,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,MAAM,GAAG,GAAY,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAA;IAC5E,OAAO,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAA;AAC9D,CAAC;AAED,sEAAsE;AACtE,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IACpD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAA;IACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,MAAM,GAAG,GAA4C,EAAE,CAAA;IACvD,IAAI,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,GAAG,CAAC,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACxF,IAAI,OAAO,aAAa,CAAC,UAAU,CAAC,KAAK,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IAC3F,OAAO,GAAG,CAAA;AACZ,CAAC"}
|