@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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createJiti } from 'jiti';
|
|
2
|
+
import { importFresh } from './watch.js';
|
|
3
|
+
/**
|
|
4
|
+
* Load a rule file or config module — natively when Node can, via jiti when it cannot.
|
|
5
|
+
*
|
|
6
|
+
* **Native first, and that ordering is the whole design.** A rule file loaded
|
|
7
|
+
* through jiti gets jiti's own module registry, so the copy of eess-ts it imports
|
|
8
|
+
* is a DIFFERENT instance from the CLI's. Two things break silently when that
|
|
9
|
+
* happens, both measured (plan 0165):
|
|
10
|
+
*
|
|
11
|
+
* - `instanceof ArchRuleError` is false for an error that is one, so
|
|
12
|
+
* `check.ts` skipped `ruleFileTruncated()` and a truncated run said nothing
|
|
13
|
+
* about the rules that never ran — bug 0029 reopened by the loader.
|
|
14
|
+
* (`isArchRuleError` in `core/errors.ts` fixes that half structurally, and it
|
|
15
|
+
* is worth keeping regardless: a consumer with two copies of eess-ts on disk
|
|
16
|
+
* hits it with no jiti involved.)
|
|
17
|
+
* - `execute-rule.ts`'s module-level `callerAggregatesReports` flag is set on
|
|
18
|
+
* the CLI's copy and read on the rule file's, so every configuration finding
|
|
19
|
+
* was written twice — once by the rule file and once by the CLI re-reporting
|
|
20
|
+
* the thrown error. That half CANNOT be fixed structurally: module state has
|
|
21
|
+
* no cross-registry identity to compare.
|
|
22
|
+
*
|
|
23
|
+
* So jiti is the fallback, not the default, and it is entered on exactly one
|
|
24
|
+
* condition: Node refused the file because the CONSUMER project is
|
|
25
|
+
* `"type": "commonjs"` and the file uses ESM syntax — bug 0074, what
|
|
26
|
+
* `npm init -y` writes. Everything else rethrows, including an `ArchRuleError`
|
|
27
|
+
* thrown by a self-executing rule file, which must never be retried (a second
|
|
28
|
+
* execution would print its findings twice).
|
|
29
|
+
*/
|
|
30
|
+
export async function importRuleModule(file, fresh) {
|
|
31
|
+
try {
|
|
32
|
+
return fresh ? await importFresh(file) : await import(file);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
if (!isModuleFormatRefusal(error))
|
|
36
|
+
throw error;
|
|
37
|
+
// jiti transpiles to CJS, so the host's `"type": "commonjs"` stops mattering.
|
|
38
|
+
// `fsCache`/`moduleCache` off when fresh, for the same reason `importFresh`
|
|
39
|
+
// exists: watch mode must re-execute an edited file.
|
|
40
|
+
const jiti = fresh
|
|
41
|
+
? createJiti(import.meta.url, { fsCache: false, moduleCache: false })
|
|
42
|
+
: createJiti(import.meta.url);
|
|
43
|
+
return jiti.import(file);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Did Node refuse this file for its MODULE FORMAT, rather than for anything the
|
|
48
|
+
* file does?
|
|
49
|
+
*
|
|
50
|
+
* Narrow on purpose. A broad `catch` that fell back to jiti on any error would
|
|
51
|
+
* re-execute a rule file that had already run — doubling its output — and would
|
|
52
|
+
* hide a genuine syntax error behind a second, differently-worded failure.
|
|
53
|
+
*/
|
|
54
|
+
function isModuleFormatRefusal(error) {
|
|
55
|
+
if (!(error instanceof SyntaxError))
|
|
56
|
+
return false;
|
|
57
|
+
return (error.message.includes('Cannot use import statement outside a module') ||
|
|
58
|
+
error.message.includes("Unexpected token 'export'"));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=import-rule-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-rule-module.js","sourceRoot":"","sources":["../../src/cli/import-rule-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAc;IACjE,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7D,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAA;QAC9C,8EAA8E;QAC9E,4EAA4E;QAC5E,qDAAqD;QACrD,MAAM,IAAI,GAAG,KAAK;YAChB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YACrE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;QAAE,OAAO,KAAK,CAAA;IACjD,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACtE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CACpD,CAAA;AACH,CAAC"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -10,13 +10,13 @@ interface ParsedArgs {
|
|
|
10
10
|
version?: boolean;
|
|
11
11
|
watch?: boolean;
|
|
12
12
|
markdown?: boolean;
|
|
13
|
-
fix?: boolean;
|
|
14
|
-
apply?: boolean;
|
|
15
13
|
preset?: string;
|
|
16
14
|
tsconfig?: string;
|
|
17
15
|
force?: boolean;
|
|
18
16
|
'dry-run'?: boolean;
|
|
19
17
|
'no-baseline'?: boolean;
|
|
18
|
+
fix?: boolean;
|
|
19
|
+
apply?: boolean;
|
|
20
20
|
};
|
|
21
21
|
positionals: string[];
|
|
22
22
|
}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AA2DA,UAAU,UAAU;IAClB,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,GAAG,CAAC,EAAE,OAAO,CAAA;QACb,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,CAAA;IACD,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyBvD;AAsGD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGvD"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { parseArgs } from 'node:util';
|
|
2
|
+
import { isRecord } from '@nielspeter/eess';
|
|
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,13 +69,13 @@ 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,
|
|
@@ -122,7 +130,29 @@ async function handleCheck(ruleFiles, values, config, format, baseline, changed,
|
|
|
122
130
|
async function handleBaseline(ruleFiles, output) {
|
|
123
131
|
if (!requireRuleFiles(ruleFiles))
|
|
124
132
|
return;
|
|
125
|
-
await runBaseline({ ruleFiles, output });
|
|
133
|
+
const code = await runBaseline({ ruleFiles, output });
|
|
134
|
+
if (code !== 0)
|
|
135
|
+
process.exitCode = code;
|
|
136
|
+
}
|
|
137
|
+
/** Reject a `--format` value that isn't valid for the given subcommand. */
|
|
138
|
+
const FORMATS = {
|
|
139
|
+
check: ['terminal', 'json', 'github', 'auto'],
|
|
140
|
+
explain: ['json', 'markdown', 'agent'],
|
|
141
|
+
// `doctor` has only these two. It was unvalidated while the command was
|
|
142
|
+
// hidden, so `--format github` ran silently as terminal — tolerable for an
|
|
143
|
+
// undocumented command, not for one listed in `--help` (plan 0077 review).
|
|
144
|
+
doctor: ['terminal', 'json'],
|
|
145
|
+
};
|
|
146
|
+
function isValidFormat(command, format) {
|
|
147
|
+
if (format === undefined)
|
|
148
|
+
return true;
|
|
149
|
+
const allowed = FORMATS[command];
|
|
150
|
+
if (!allowed.includes(format)) {
|
|
151
|
+
console.error(`Error: --format '${format}' is not valid for '${command}'. Valid values: ${allowed.join(', ')}.`);
|
|
152
|
+
process.exitCode = 1;
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
126
156
|
}
|
|
127
157
|
/** Handle the `explain` subcommand. */
|
|
128
158
|
async function handleExplain(ruleFiles, markdown, format) {
|
|
@@ -147,34 +177,40 @@ export async function run(args) {
|
|
|
147
177
|
process.exitCode = 1;
|
|
148
178
|
return;
|
|
149
179
|
}
|
|
150
|
-
|
|
180
|
+
if (values.watch === true && command !== 'check') {
|
|
181
|
+
console.error('Error: --watch is only supported with the check command.');
|
|
182
|
+
process.exitCode = 1;
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// `init` scaffolds the config, so it runs before config resolution.
|
|
151
186
|
if (command === 'init') {
|
|
152
|
-
|
|
187
|
+
const code = runInit({
|
|
153
188
|
preset: values.preset,
|
|
154
189
|
tsconfig: values.tsconfig,
|
|
155
190
|
force: values.force,
|
|
156
191
|
dryRun: values['dry-run'],
|
|
157
192
|
noBaseline: values['no-baseline'],
|
|
158
193
|
});
|
|
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;
|
|
194
|
+
if (code !== 0)
|
|
195
|
+
process.exitCode = code;
|
|
164
196
|
return;
|
|
165
197
|
}
|
|
166
198
|
const config = await resolveConfig(values.config);
|
|
167
199
|
const ruleFiles = positionals.slice(1).length > 0 ? positionals.slice(1) : (config.rules ?? []);
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
: 'auto';
|
|
200
|
+
// A guard over the union, not a cast onto it: `values.format` comes from the
|
|
201
|
+
// command line and `config.format` from a file, so neither is typed by anything
|
|
202
|
+
// the compiler can see (bug 0049).
|
|
203
|
+
const requested = values.format ?? config.format ?? 'auto';
|
|
204
|
+
const isOutputFormat = (v) => ['terminal', 'json', 'github', 'auto'].some((f) => f === v);
|
|
205
|
+
const format = isOutputFormat(requested) ? requested : 'auto';
|
|
175
206
|
const baseline = values.baseline ?? config.baseline;
|
|
176
207
|
const base = values.base ?? 'main';
|
|
177
208
|
const changed = values.changed ?? false;
|
|
209
|
+
if ((command === 'check' && !isValidFormat('check', values.format)) ||
|
|
210
|
+
(command === 'explain' && !isValidFormat('explain', values.format)) ||
|
|
211
|
+
(command === 'doctor' && !isValidFormat('doctor', values.format))) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
178
214
|
if (command === 'check') {
|
|
179
215
|
await handleCheck(ruleFiles, values, config, format, baseline, changed, base);
|
|
180
216
|
}
|
|
@@ -184,6 +220,35 @@ export async function run(args) {
|
|
|
184
220
|
else if (command === 'explain') {
|
|
185
221
|
await handleExplain(ruleFiles, values.markdown, values.format);
|
|
186
222
|
}
|
|
223
|
+
else if (command === 'doctor') {
|
|
224
|
+
// Supported since plan 0077, which settled the keep-or-retire question 0069
|
|
225
|
+
// left open. It is scoped, not experimental: it diagnoses rule files the CLI
|
|
226
|
+
// can LOAD — the `arch.rules.ts` shape `init` scaffolds, which
|
|
227
|
+
// `getting-started.md` calls the default path. Rules hosted in a vitest or
|
|
228
|
+
// jest file cannot be imported outside their runner; `diagnose()` is the
|
|
229
|
+
// answer there and reports the same findings.
|
|
230
|
+
//
|
|
231
|
+
// Still not a build gate (0069): it is invoked deliberately, and `check` is
|
|
232
|
+
// the gate.
|
|
233
|
+
//
|
|
234
|
+
// What it uniquely catches is a **dead glob** — a rule whose selector can
|
|
235
|
+
// never match, so it certifies nothing. `check` does not call `diagnose()`
|
|
236
|
+
// at all, and measured, it exits **0 with no output** on such a rule while
|
|
237
|
+
// `doctor` names the site and exits 1. That is the ADR-008 false green this
|
|
238
|
+
// whole area exists for, and until 0069's R3b flips it into a check-time
|
|
239
|
+
// failure, `doctor` and `diagnose()` are the only surfaces that see it.
|
|
240
|
+
//
|
|
241
|
+
// NOT load failures, which an earlier version of this comment claimed:
|
|
242
|
+
// `check` already reports an unloadable rule file as an error-severity
|
|
243
|
+
// configuration finding with a remedy (`cli/rule-file-findings.ts`), and
|
|
244
|
+
// does it better than this command's bare stderr line.
|
|
245
|
+
const code = await runDoctor({
|
|
246
|
+
ruleFiles,
|
|
247
|
+
format: values.format === 'json' ? 'json' : 'terminal',
|
|
248
|
+
});
|
|
249
|
+
if (code !== 0)
|
|
250
|
+
process.exitCode = code;
|
|
251
|
+
}
|
|
187
252
|
else {
|
|
188
253
|
console.error(`Error: Unknown command "${command}". Use --help for usage.`);
|
|
189
254
|
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":"AAGA,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,CAkC5B"}
|
package/dist/cli/load-rules.js
CHANGED
|
@@ -1,37 +1,31 @@
|
|
|
1
1
|
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
|
-
}
|
|
2
|
+
import { importRuleModule } from './import-rule-module.js';
|
|
3
|
+
import { isNullaryCallable } from '@nielspeter/eess';
|
|
14
4
|
/**
|
|
15
|
-
* Load rule files
|
|
5
|
+
* Load rule files (supports `.ts` and `.js`/`.mjs`).
|
|
16
6
|
*
|
|
17
7
|
* Rule files must export a default array of rule builders or a function
|
|
18
|
-
* returning one. When `fresh` is true,
|
|
19
|
-
*
|
|
8
|
+
* returning one. When `fresh` is true, the module cache is busted so watch-mode
|
|
9
|
+
* re-runs pick up file changes.
|
|
20
10
|
*/
|
|
21
11
|
export async function loadRuleFiles(files, options) {
|
|
22
12
|
const builders = [];
|
|
23
|
-
const jiti = getJiti(options?.fresh === true);
|
|
24
13
|
for (const file of files) {
|
|
25
14
|
const resolved = path.resolve(file);
|
|
26
|
-
const mod = await
|
|
15
|
+
const mod = await importRuleModule(resolved, options?.fresh === true);
|
|
27
16
|
const exported = extractDefault(mod);
|
|
28
17
|
const items = resolveExported(exported, file);
|
|
29
|
-
// A non-builder value in the default-export array is a
|
|
30
|
-
// silent skip
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
18
|
+
// A non-builder value in the default-export array is a LOUD ERROR, never a
|
|
19
|
+
// silent skip (plan 0061 Phase 0). A silently-dropped rule is a
|
|
20
|
+
// green-but-empty gate, which is the defect this tool exists to forbid — a
|
|
21
|
+
// void preset call (`preset(...)` returning `undefined`) is the classic
|
|
22
|
+
// offender and must fail here rather than vanish.
|
|
23
|
+
//
|
|
24
|
+
// **eess deliberately diverges from ts-archunit here**, which skips
|
|
25
|
+
// non-builders and returns `[]` for a malformed default export. Plan 0165's
|
|
26
|
+
// wholesale engine copy reverted this in both directions at once — source
|
|
27
|
+
// AND the tests that pinned it — so the fail-open landed green. Restored,
|
|
28
|
+
// with `tests/cli/load-rules.test.ts` carrying eess's assertions.
|
|
35
29
|
items.forEach((item, index) => {
|
|
36
30
|
if (!isRuleBuilderLike(item)) {
|
|
37
31
|
throw new Error(`Rule file "${file}": default export entry [${index}] is not a rule builder ` +
|
|
@@ -56,9 +50,7 @@ function resolveExported(exported, file) {
|
|
|
56
50
|
if (Array.isArray(exported)) {
|
|
57
51
|
return exported;
|
|
58
52
|
}
|
|
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
|
|
53
|
+
if (isNullaryCallable(exported)) {
|
|
62
54
|
const result = exported();
|
|
63
55
|
if (Array.isArray(result)) {
|
|
64
56
|
return result;
|
|
@@ -83,7 +75,7 @@ function extractDefault(mod) {
|
|
|
83
75
|
}
|
|
84
76
|
// Dynamic import returns a module namespace object — 'in' narrows safely
|
|
85
77
|
if ('default' in mod) {
|
|
86
|
-
return mod
|
|
78
|
+
return mod.default;
|
|
87
79
|
}
|
|
88
80
|
return undefined;
|
|
89
81
|
}
|
|
@@ -91,7 +83,7 @@ function isRuleBuilderLike(value) {
|
|
|
91
83
|
if (value === null || value === undefined || typeof value !== 'object') {
|
|
92
84
|
return false;
|
|
93
85
|
}
|
|
94
|
-
// Structural type check: must have a '
|
|
95
|
-
return '
|
|
86
|
+
// Structural type check: must have a 'violations' method
|
|
87
|
+
return 'violations' in value && typeof value.violations === 'function';
|
|
96
88
|
}
|
|
97
89
|
//# 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,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"load-rules.js","sourceRoot":"","sources":["../../src/cli/load-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-config.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-config.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAI5C;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAU7E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import { importRuleModule } from './import-rule-module.js';
|
|
3
|
+
import { isRecord } from '@nielspeter/eess';
|
|
2
4
|
import fs from 'node:fs';
|
|
3
|
-
import { createJiti } from 'jiti';
|
|
4
|
-
// Config file names, in resolution order. First match wins.
|
|
5
5
|
const CONFIG_FILENAMES = ['eess-ts.config.ts', 'eess-ts.config.js'];
|
|
6
6
|
/**
|
|
7
7
|
* Resolve CLI configuration from an explicit path or by searching for a config file.
|
|
@@ -15,16 +15,10 @@ export async function resolveConfig(explicitPath) {
|
|
|
15
15
|
const configPath = explicitPath ?? findConfigFile();
|
|
16
16
|
if (configPath === undefined)
|
|
17
17
|
return {};
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
// must behave identically regardless of the host package's type.
|
|
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));
|
|
18
|
+
// Native `import()` first, jiti only if Node refuses the file's module format
|
|
19
|
+
// — see `import-rule-module.ts`. A config in a `"type": "commonjs"` project is
|
|
20
|
+
// bug 0074; a config in an ESM project must share the CLI's module registry.
|
|
21
|
+
const mod = await importRuleModule(path.resolve(configPath), false);
|
|
28
22
|
return extractDefault(mod);
|
|
29
23
|
}
|
|
30
24
|
function findConfigFile() {
|
|
@@ -48,24 +42,30 @@ function extractDefault(mod) {
|
|
|
48
42
|
if (!('default' in mod)) {
|
|
49
43
|
return {};
|
|
50
44
|
}
|
|
51
|
-
const defaultExport = mod
|
|
45
|
+
const defaultExport = mod.default;
|
|
52
46
|
if (defaultExport === null || defaultExport === undefined || typeof defaultExport !== 'object') {
|
|
53
47
|
return {};
|
|
54
48
|
}
|
|
55
|
-
// Runtime validate: only pick known CliConfig fields
|
|
49
|
+
// Runtime validate: only pick known CliConfig fields
|
|
50
|
+
if (!isRecord(defaultExport))
|
|
51
|
+
return {};
|
|
52
|
+
const obj = defaultExport;
|
|
56
53
|
const config = {};
|
|
57
|
-
if ('project'
|
|
58
|
-
config.project =
|
|
59
|
-
if ('baseline'
|
|
60
|
-
config.baseline =
|
|
61
|
-
if ('format'
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
if (typeof obj['project'] === 'string')
|
|
55
|
+
config.project = obj['project'];
|
|
56
|
+
if (typeof obj['baseline'] === 'string')
|
|
57
|
+
config.baseline = obj['baseline'];
|
|
58
|
+
if (typeof obj['format'] === 'string') {
|
|
59
|
+
// A guard over the literal union, so the narrowing is the check rather than
|
|
60
|
+
// a cast that repeats it. `includes` on a `string[]` cannot narrow; a
|
|
61
|
+
// predicate over the same list can.
|
|
62
|
+
const isFormat = (v) => ['terminal', 'json', 'github', 'auto'].some((f) => f === v);
|
|
63
|
+
if (isFormat(obj['format'])) {
|
|
64
|
+
config.format = obj['format'];
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
if (
|
|
68
|
-
config.rules =
|
|
67
|
+
if (Array.isArray(obj['rules']))
|
|
68
|
+
config.rules = obj['rules'].filter((r) => typeof r === 'string');
|
|
69
69
|
return config;
|
|
70
70
|
}
|
|
71
71
|
//# 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":"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"}
|