@yalehwang/archguard 0.1.32 → 0.1.33
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/dist/analysis/gim/direction-hint.d.ts.map +1 -1
- package/dist/analysis/gim/direction-hint.js +15 -5
- package/dist/analysis/gim/direction-hint.js.map +1 -1
- package/dist/analysis/gim/gim-loss-evaluator.d.ts.map +1 -1
- package/dist/analysis/gim/gim-loss-evaluator.js +12 -6
- package/dist/analysis/gim/gim-loss-evaluator.js.map +1 -1
- package/dist/analysis/jl/adjacency-builder.d.ts +8 -0
- package/dist/analysis/jl/adjacency-builder.d.ts.map +1 -0
- package/dist/analysis/jl/adjacency-builder.js +65 -0
- package/dist/analysis/jl/adjacency-builder.js.map +1 -0
- package/dist/analysis/jl/cluster-boundary-analyzer.d.ts +13 -0
- package/dist/analysis/jl/cluster-boundary-analyzer.d.ts.map +1 -0
- package/dist/analysis/jl/cluster-boundary-analyzer.js +233 -0
- package/dist/analysis/jl/cluster-boundary-analyzer.js.map +1 -0
- package/dist/analysis/jl/drift-calculator.d.ts +6 -0
- package/dist/analysis/jl/drift-calculator.d.ts.map +1 -0
- package/dist/analysis/jl/drift-calculator.js +104 -0
- package/dist/analysis/jl/drift-calculator.js.map +1 -0
- package/dist/analysis/jl/drift-exit-code.d.ts +4 -0
- package/dist/analysis/jl/drift-exit-code.d.ts.map +1 -0
- package/dist/analysis/jl/drift-exit-code.js +9 -0
- package/dist/analysis/jl/drift-exit-code.js.map +1 -0
- package/dist/analysis/jl/entity-aligner.d.ts +6 -0
- package/dist/analysis/jl/entity-aligner.d.ts.map +1 -0
- package/dist/analysis/jl/entity-aligner.js +33 -0
- package/dist/analysis/jl/entity-aligner.js.map +1 -0
- package/dist/analysis/jl/history-writer.d.ts +7 -0
- package/dist/analysis/jl/history-writer.d.ts.map +1 -0
- package/dist/analysis/jl/history-writer.js +74 -0
- package/dist/analysis/jl/history-writer.js.map +1 -0
- package/dist/analysis/jl/intrinsic-dimension.d.ts +14 -0
- package/dist/analysis/jl/intrinsic-dimension.d.ts.map +1 -0
- package/dist/analysis/jl/intrinsic-dimension.js +80 -0
- package/dist/analysis/jl/intrinsic-dimension.js.map +1 -0
- package/dist/analysis/jl/jl-projector.d.ts +7 -0
- package/dist/analysis/jl/jl-projector.d.ts.map +1 -0
- package/dist/analysis/jl/jl-projector.js +52 -0
- package/dist/analysis/jl/jl-projector.js.map +1 -0
- package/dist/analysis/jl/kmeans.d.ts +11 -0
- package/dist/analysis/jl/kmeans.d.ts.map +1 -0
- package/dist/analysis/jl/kmeans.js +273 -0
- package/dist/analysis/jl/kmeans.js.map +1 -0
- package/dist/analysis/jl/types.d.ts +166 -0
- package/dist/analysis/jl/types.d.ts.map +1 -0
- package/dist/analysis/jl/types.js +19 -0
- package/dist/analysis/jl/types.js.map +1 -0
- package/dist/analysis/shape-smells/index.d.ts +5 -0
- package/dist/analysis/shape-smells/index.d.ts.map +1 -0
- package/dist/analysis/shape-smells/index.js +5 -0
- package/dist/analysis/shape-smells/index.js.map +1 -0
- package/dist/analysis/shape-smells/literal-dispersion.d.ts +9 -0
- package/dist/analysis/shape-smells/literal-dispersion.d.ts.map +1 -0
- package/dist/analysis/shape-smells/literal-dispersion.js +157 -0
- package/dist/analysis/shape-smells/literal-dispersion.js.map +1 -0
- package/dist/analysis/shape-smells/persistence.d.ts +5 -0
- package/dist/analysis/shape-smells/persistence.d.ts.map +1 -0
- package/dist/analysis/shape-smells/persistence.js +59 -0
- package/dist/analysis/shape-smells/persistence.js.map +1 -0
- package/dist/analysis/shape-smells/scope-filter.d.ts +7 -0
- package/dist/analysis/shape-smells/scope-filter.d.ts.map +1 -0
- package/dist/analysis/shape-smells/scope-filter.js +28 -0
- package/dist/analysis/shape-smells/scope-filter.js.map +1 -0
- package/dist/analysis/shape-smells/types.d.ts +40 -0
- package/dist/analysis/shape-smells/types.d.ts.map +1 -0
- package/dist/analysis/shape-smells/types.js +2 -0
- package/dist/analysis/shape-smells/types.js.map +1 -0
- package/dist/analysis/snapshot-store.js +2 -2
- package/dist/analysis/snapshot-store.js.map +1 -1
- package/dist/analysis/test-analyzer.d.ts.map +1 -1
- package/dist/analysis/test-analyzer.js +1 -1
- package/dist/analysis/test-analyzer.js.map +1 -1
- package/dist/cli/analyze/normalize-to-diagrams.d.ts.map +1 -1
- package/dist/cli/analyze/normalize-to-diagrams.js +35 -0
- package/dist/cli/analyze/normalize-to-diagrams.js.map +1 -1
- package/dist/cli/analyze/run-analysis.d.ts +2 -0
- package/dist/cli/analyze/run-analysis.d.ts.map +1 -1
- package/dist/cli/analyze/run-analysis.js +2 -0
- package/dist/cli/analyze/run-analysis.js.map +1 -1
- package/dist/cli/cache/cache-manager.js +1 -1
- package/dist/cli/cache/cache-manager.js.map +1 -1
- package/dist/cli/cognitive/ccb-assembler.js.map +1 -1
- package/dist/cli/commands/analyze.d.ts +17 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +129 -2
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/diff.js +1 -1
- package/dist/cli/commands/diff.js.map +1 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/query.d.ts +3 -0
- package/dist/cli/commands/query.d.ts.map +1 -1
- package/dist/cli/commands/query.js +128 -0
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/config-loader.d.ts.map +1 -1
- package/dist/cli/config-loader.js +6 -1
- package/dist/cli/config-loader.js.map +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp/analyze-tool.js.map +1 -1
- package/dist/cli/mcp/mcp-server.d.ts.map +1 -1
- package/dist/cli/mcp/mcp-server.js +8 -2
- package/dist/cli/mcp/mcp-server.js.map +1 -1
- package/dist/cli/mcp/tools/arch-health-tools.d.ts +16 -0
- package/dist/cli/mcp/tools/arch-health-tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools/arch-health-tools.js +207 -0
- package/dist/cli/mcp/tools/arch-health-tools.js.map +1 -0
- package/dist/cli/mcp/tools/atlas-analytics-tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools/atlas-analytics-tools.js +5 -4
- package/dist/cli/mcp/tools/atlas-analytics-tools.js.map +1 -1
- package/dist/cli/mcp/tools/gim-tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools/gim-tools.js +5 -1
- package/dist/cli/mcp/tools/gim-tools.js.map +1 -1
- package/dist/cli/mcp/tools/git-history-analyze-tool.d.ts.map +1 -1
- package/dist/cli/mcp/tools/git-history-analyze-tool.js.map +1 -1
- package/dist/cli/mcp/tools/git-history-evidence-pack-tool.js.map +1 -1
- package/dist/cli/mcp/tools/git-history-tools.js.map +1 -1
- package/dist/cli/mcp/tools/metric-trend-tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools/metric-trend-tools.js +2 -1
- package/dist/cli/mcp/tools/metric-trend-tools.js.map +1 -1
- package/dist/cli/mcp/tools/package-metrics-tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools/package-metrics-tools.js +2 -1
- package/dist/cli/mcp/tools/package-metrics-tools.js.map +1 -1
- package/dist/cli/mcp/tools/shape-smell-tools.d.ts +3 -0
- package/dist/cli/mcp/tools/shape-smell-tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools/shape-smell-tools.js +187 -0
- package/dist/cli/mcp/tools/shape-smell-tools.js.map +1 -0
- package/dist/cli/mcp/tools/test-analysis-tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools/test-analysis-tools.js +4 -4
- package/dist/cli/mcp/tools/test-analysis-tools.js.map +1 -1
- package/dist/cli/processors/arch-json-provider.d.ts.map +1 -1
- package/dist/cli/processors/arch-json-provider.js +10 -1
- package/dist/cli/processors/arch-json-provider.js.map +1 -1
- package/dist/cli/processors/diagram-output-router.d.ts +1 -0
- package/dist/cli/processors/diagram-output-router.d.ts.map +1 -1
- package/dist/cli/processors/diagram-output-router.js +54 -66
- package/dist/cli/processors/diagram-output-router.js.map +1 -1
- package/dist/cli/query/engine-loader.d.ts.map +1 -1
- package/dist/cli/query/engine-loader.js +3 -3
- package/dist/cli/query/engine-loader.js.map +1 -1
- package/dist/cli/query/query-artifacts.js +2 -2
- package/dist/cli/query/query-artifacts.js.map +1 -1
- package/dist/cli/utils/cluster-archjson-loader.d.ts +3 -0
- package/dist/cli/utils/cluster-archjson-loader.d.ts.map +1 -0
- package/dist/cli/utils/cluster-archjson-loader.js +28 -0
- package/dist/cli/utils/cluster-archjson-loader.js.map +1 -0
- package/dist/cli/utils/drift-baseline.d.ts +27 -0
- package/dist/cli/utils/drift-baseline.d.ts.map +1 -0
- package/dist/cli/utils/drift-baseline.js +95 -0
- package/dist/cli/utils/drift-baseline.js.map +1 -0
- package/dist/cli/utils/drift-reporter.d.ts +3 -0
- package/dist/cli/utils/drift-reporter.d.ts.map +1 -0
- package/dist/cli/utils/drift-reporter.js +49 -0
- package/dist/cli/utils/drift-reporter.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/interfaces/language-plugin.d.ts +1 -0
- package/dist/core/interfaces/language-plugin.d.ts.map +1 -1
- package/dist/core/pack-registry/errors.d.ts +5 -0
- package/dist/core/pack-registry/errors.d.ts.map +1 -0
- package/dist/core/pack-registry/errors.js +9 -0
- package/dist/core/pack-registry/errors.js.map +1 -0
- package/dist/core/pack-registry/index.d.ts +7 -0
- package/dist/core/pack-registry/index.d.ts.map +1 -0
- package/dist/core/pack-registry/index.js +4 -0
- package/dist/core/pack-registry/index.js.map +1 -0
- package/dist/core/pack-registry/knowledge-pack-schema.d.ts +188 -0
- package/dist/core/pack-registry/knowledge-pack-schema.d.ts.map +1 -0
- package/dist/core/pack-registry/knowledge-pack-schema.js +108 -0
- package/dist/core/pack-registry/knowledge-pack-schema.js.map +1 -0
- package/dist/core/pack-registry/pack-registry.d.ts +15 -0
- package/dist/core/pack-registry/pack-registry.d.ts.map +1 -0
- package/dist/core/pack-registry/pack-registry.js +99 -0
- package/dist/core/pack-registry/pack-registry.js.map +1 -0
- package/dist/core/pack-registry/types.d.ts +87 -0
- package/dist/core/pack-registry/types.d.ts.map +1 -0
- package/dist/core/pack-registry/types.js +2 -0
- package/dist/core/pack-registry/types.js.map +1 -0
- package/dist/core/plugin-registry.d.ts +2 -0
- package/dist/core/plugin-registry.d.ts.map +1 -1
- package/dist/core/plugin-registry.js +15 -2
- package/dist/core/plugin-registry.js.map +1 -1
- package/dist/core/query/arch-index-builder.js.map +1 -1
- package/dist/core/rule-engine/ast-node.d.ts +6 -0
- package/dist/core/rule-engine/ast-node.d.ts.map +1 -0
- package/dist/core/rule-engine/ast-node.js +15 -0
- package/dist/core/rule-engine/ast-node.js.map +1 -0
- package/dist/core/rule-engine/index.d.ts +5 -0
- package/dist/core/rule-engine/index.d.ts.map +1 -0
- package/dist/core/rule-engine/index.js +4 -0
- package/dist/core/rule-engine/index.js.map +1 -0
- package/dist/core/rule-engine/rule-based-plugin.d.ts +22 -0
- package/dist/core/rule-engine/rule-based-plugin.d.ts.map +1 -0
- package/dist/core/rule-engine/rule-based-plugin.js +171 -0
- package/dist/core/rule-engine/rule-based-plugin.js.map +1 -0
- package/dist/core/rule-engine/rule-engine.d.ts +52 -0
- package/dist/core/rule-engine/rule-engine.d.ts.map +1 -0
- package/dist/core/rule-engine/rule-engine.js +655 -0
- package/dist/core/rule-engine/rule-engine.js.map +1 -0
- package/dist/mermaid/auto-repair.js +1 -1
- package/dist/mermaid/auto-repair.js.map +1 -1
- package/dist/mermaid/cpp-package-flowchart-generator.js.map +1 -1
- package/dist/mermaid/diagram-generator.d.ts.map +1 -1
- package/dist/mermaid/diagram-generator.js +17 -18
- package/dist/mermaid/diagram-generator.js.map +1 -1
- package/dist/mermaid/generator.d.ts.map +1 -1
- package/dist/mermaid/generator.js.map +1 -1
- package/dist/mermaid/types.d.ts +25 -1
- package/dist/mermaid/types.d.ts.map +1 -1
- package/dist/mermaid/validation-pipeline.d.ts +4 -16
- package/dist/mermaid/validation-pipeline.d.ts.map +1 -1
- package/dist/mermaid/validation-pipeline.js.map +1 -1
- package/dist/parser/archjson-aggregator.js +1 -1
- package/dist/parser/archjson-aggregator.js.map +1 -1
- package/dist/parser/parse-worker.js +2 -1
- package/dist/parser/parse-worker.js.map +1 -1
- package/dist/parser/typescript-parser.d.ts.map +1 -1
- package/dist/parser/typescript-parser.js +3 -2
- package/dist/parser/typescript-parser.js.map +1 -1
- package/dist/plugins/cpp/builders/class-builder.d.ts +1 -0
- package/dist/plugins/cpp/builders/class-builder.d.ts.map +1 -1
- package/dist/plugins/cpp/builders/class-builder.js +19 -0
- package/dist/plugins/cpp/builders/class-builder.js.map +1 -1
- package/dist/plugins/cpp/mappers/class-capture-mapper.d.ts +14 -0
- package/dist/plugins/cpp/mappers/class-capture-mapper.d.ts.map +1 -0
- package/dist/plugins/cpp/mappers/class-capture-mapper.js +76 -0
- package/dist/plugins/cpp/mappers/class-capture-mapper.js.map +1 -0
- package/dist/plugins/cpp/mappers/enum-capture-mapper.d.ts +6 -0
- package/dist/plugins/cpp/mappers/enum-capture-mapper.d.ts.map +1 -0
- package/dist/plugins/cpp/mappers/enum-capture-mapper.js +31 -0
- package/dist/plugins/cpp/mappers/enum-capture-mapper.js.map +1 -0
- package/dist/plugins/cpp/mappers/field-capture-mapper.d.ts +12 -0
- package/dist/plugins/cpp/mappers/field-capture-mapper.d.ts.map +1 -0
- package/dist/plugins/cpp/mappers/field-capture-mapper.js +66 -0
- package/dist/plugins/cpp/mappers/field-capture-mapper.js.map +1 -0
- package/dist/plugins/cpp/mappers/function-capture-mapper.d.ts +6 -0
- package/dist/plugins/cpp/mappers/function-capture-mapper.d.ts.map +1 -0
- package/dist/plugins/cpp/mappers/function-capture-mapper.js +25 -0
- package/dist/plugins/cpp/mappers/function-capture-mapper.js.map +1 -0
- package/dist/plugins/cpp/mappers/include-capture-mapper.d.ts +5 -0
- package/dist/plugins/cpp/mappers/include-capture-mapper.d.ts.map +1 -0
- package/dist/plugins/cpp/mappers/include-capture-mapper.js +10 -0
- package/dist/plugins/cpp/mappers/include-capture-mapper.js.map +1 -0
- package/dist/plugins/cpp/queries/classes.scm +7 -0
- package/dist/plugins/cpp/queries/enums.scm +3 -0
- package/dist/plugins/cpp/queries/fields.scm +6 -0
- package/dist/plugins/cpp/queries/functions.scm +7 -0
- package/dist/plugins/cpp/queries/includes.scm +8 -0
- package/dist/plugins/cpp/tree-sitter-bridge.d.ts +5 -12
- package/dist/plugins/cpp/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/cpp/tree-sitter-bridge.js +47 -227
- package/dist/plugins/cpp/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/golang/atlas/behavior-analyzer.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/behavior-analyzer.js.map +1 -1
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.js.map +1 -1
- package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.js.map +1 -1
- package/dist/plugins/golang/atlas/go-mod-resolver.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/go-mod-resolver.js +2 -1
- package/dist/plugins/golang/atlas/go-mod-resolver.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/capability-mermaid-template.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/capability-mermaid-template.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/flow-mermaid-template.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/flow-mermaid-template.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/goroutine-mermaid-template.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/goroutine-mermaid-template.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/mermaid-templates.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/mermaid-templates.js.map +1 -1
- package/dist/plugins/golang/go-atlas-adapter.d.ts +3 -3
- package/dist/plugins/golang/go-atlas-adapter.d.ts.map +1 -1
- package/dist/plugins/golang/go-atlas-adapter.js +4 -4
- package/dist/plugins/golang/go-atlas-adapter.js.map +1 -1
- package/dist/plugins/golang/go-parse-coordinator.d.ts.map +1 -1
- package/dist/plugins/golang/go-parse-coordinator.js.map +1 -1
- package/dist/plugins/golang/gopls-client.d.ts +1 -1
- package/dist/plugins/golang/gopls-client.d.ts.map +1 -1
- package/dist/plugins/golang/gopls-client.js +17 -9
- package/dist/plugins/golang/gopls-client.js.map +1 -1
- package/dist/plugins/golang/gopls-interface-resolver.js.map +1 -1
- package/dist/plugins/golang/index.d.ts.map +1 -1
- package/dist/plugins/golang/index.js +5 -2
- package/dist/plugins/golang/index.js.map +1 -1
- package/dist/plugins/golang/interface-matcher.d.ts.map +1 -1
- package/dist/plugins/golang/interface-matcher.js.map +1 -1
- package/dist/plugins/golang/types.d.ts +4 -0
- package/dist/plugins/golang/types.d.ts.map +1 -1
- package/dist/plugins/java/dependency-extractor.d.ts.map +1 -1
- package/dist/plugins/java/dependency-extractor.js.map +1 -1
- package/dist/plugins/java/types.d.ts +1 -1
- package/dist/plugins/java/types.d.ts.map +1 -1
- package/dist/plugins/kotlin/builders/class-builder.js.map +1 -1
- package/dist/plugins/kotlin/builders/function-builder.js.map +1 -1
- package/dist/plugins/kotlin/index.d.ts +2 -2
- package/dist/plugins/kotlin/index.d.ts.map +1 -1
- package/dist/plugins/kotlin/index.js.map +1 -1
- package/dist/plugins/kotlin/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/python/archjson-mapper.d.ts.map +1 -1
- package/dist/plugins/python/archjson-mapper.js.map +1 -1
- package/dist/plugins/python/index.d.ts.map +1 -1
- package/dist/plugins/python/index.js.map +1 -1
- package/dist/plugins/shared/capture-mapper.d.ts +12 -0
- package/dist/plugins/shared/capture-mapper.d.ts.map +1 -0
- package/dist/plugins/shared/capture-mapper.js +33 -0
- package/dist/plugins/shared/capture-mapper.js.map +1 -0
- package/dist/plugins/shared/index.d.ts +4 -0
- package/dist/plugins/shared/index.d.ts.map +1 -0
- package/dist/plugins/shared/index.js +3 -0
- package/dist/plugins/shared/index.js.map +1 -0
- package/dist/plugins/shared/native-parser-backend.d.ts +2 -1
- package/dist/plugins/shared/native-parser-backend.d.ts.map +1 -1
- package/dist/plugins/shared/native-parser-backend.js +15 -3
- package/dist/plugins/shared/native-parser-backend.js.map +1 -1
- package/dist/plugins/shared/parser-backend.d.ts.map +1 -1
- package/dist/plugins/shared/parser-backend.js +2 -1
- package/dist/plugins/shared/parser-backend.js.map +1 -1
- package/dist/plugins/shared/parser-runtime.d.ts.map +1 -1
- package/dist/plugins/shared/parser-runtime.js +5 -1
- package/dist/plugins/shared/parser-runtime.js.map +1 -1
- package/dist/plugins/shared/query-loader.d.ts +14 -0
- package/dist/plugins/shared/query-loader.d.ts.map +1 -0
- package/dist/plugins/shared/query-loader.js +47 -0
- package/dist/plugins/shared/query-loader.js.map +1 -0
- package/dist/plugins/shared/syntax-tree.d.ts +13 -0
- package/dist/plugins/shared/syntax-tree.d.ts.map +1 -1
- package/dist/plugins/shared/wasm-parser-backend.d.ts.map +1 -1
- package/dist/plugins/shared/wasm-parser-backend.js +13 -4
- package/dist/plugins/shared/wasm-parser-backend.js.map +1 -1
- package/dist/plugins/typescript/builders/module-graph-builder.d.ts.map +1 -1
- package/dist/plugins/typescript/builders/module-graph-builder.js +1 -3
- package/dist/plugins/typescript/builders/module-graph-builder.js.map +1 -1
- package/dist/plugins/typescript/index.d.ts.map +1 -1
- package/dist/plugins/typescript/index.js +6 -6
- package/dist/plugins/typescript/index.js.map +1 -1
- package/dist/types/config-cli.d.ts +3 -0
- package/dist/types/config-cli.d.ts.map +1 -1
- package/dist/types/fitness-rules.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/error-message.d.ts +2 -0
- package/dist/utils/error-message.d.ts.map +1 -0
- package/dist/utils/error-message.js +8 -0
- package/dist/utils/error-message.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
export type ProjectionMode = 'direct' | 'jl';
|
|
2
|
+
export interface JLConfig {
|
|
3
|
+
seed: number;
|
|
4
|
+
epsilon: number;
|
|
5
|
+
directModeThreshold: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const DEFAULT_JL_CONFIG: JLConfig;
|
|
8
|
+
export declare const FEATURE_VERSION = "1.0";
|
|
9
|
+
export declare const HISTORY_SCHEMA_VERSION = 1;
|
|
10
|
+
export declare const MAX_SNAPSHOTS = 500;
|
|
11
|
+
export declare const VARIANCE_THRESHOLD = 0.95;
|
|
12
|
+
export declare const TREND_DELTA_THRESHOLD = 0.002;
|
|
13
|
+
export interface IntrinsicDimensionResult {
|
|
14
|
+
timestamp: string;
|
|
15
|
+
commitSha?: string;
|
|
16
|
+
entityCount: number;
|
|
17
|
+
mode: ProjectionMode;
|
|
18
|
+
featureVersion: string;
|
|
19
|
+
k: number | null;
|
|
20
|
+
dInt: number;
|
|
21
|
+
dIntNormalized: number;
|
|
22
|
+
varianceExplained: number[];
|
|
23
|
+
epsilon: number | null;
|
|
24
|
+
entityIndex?: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface ArchHealthHistory {
|
|
27
|
+
schemaVersion: number;
|
|
28
|
+
language: string;
|
|
29
|
+
snapshots: IntrinsicDimensionResult[];
|
|
30
|
+
}
|
|
31
|
+
export interface AppendSnapshotResult {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
reason?: string;
|
|
34
|
+
previous: IntrinsicDimensionResult | null;
|
|
35
|
+
}
|
|
36
|
+
export type DriftLevel = 'stable' | 'moderate' | 'significant' | 'critical';
|
|
37
|
+
export declare const DRIFT_THRESHOLDS: Readonly<{
|
|
38
|
+
moderate: number;
|
|
39
|
+
significant: number;
|
|
40
|
+
critical: number;
|
|
41
|
+
}>;
|
|
42
|
+
export declare const DEFAULT_DRIFT_OPTIONS: DriftOptions;
|
|
43
|
+
export interface EntityDrift {
|
|
44
|
+
entityId: string;
|
|
45
|
+
drift: number;
|
|
46
|
+
level: DriftLevel;
|
|
47
|
+
deltaFanIn: number;
|
|
48
|
+
deltaFanOut: number;
|
|
49
|
+
deltaCoverage: number;
|
|
50
|
+
}
|
|
51
|
+
export interface DriftSnapshot {
|
|
52
|
+
timestamp: string;
|
|
53
|
+
commitSha?: string;
|
|
54
|
+
entityIndex: string[];
|
|
55
|
+
adjacencyRows: number[][];
|
|
56
|
+
}
|
|
57
|
+
export interface DriftReport {
|
|
58
|
+
fromSnapshot: {
|
|
59
|
+
timestamp: string;
|
|
60
|
+
commitSha?: string;
|
|
61
|
+
};
|
|
62
|
+
toSnapshot: {
|
|
63
|
+
timestamp: string;
|
|
64
|
+
commitSha?: string;
|
|
65
|
+
};
|
|
66
|
+
mode: ProjectionMode;
|
|
67
|
+
nUnion: number;
|
|
68
|
+
k: number | null;
|
|
69
|
+
sharedEntityCount: number;
|
|
70
|
+
addedEntities: string[];
|
|
71
|
+
removedEntities: string[];
|
|
72
|
+
drifts: EntityDrift[];
|
|
73
|
+
summary: {
|
|
74
|
+
critical: number;
|
|
75
|
+
significant: number;
|
|
76
|
+
moderate: number;
|
|
77
|
+
stable: number;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export interface DriftOptions {
|
|
81
|
+
base?: string;
|
|
82
|
+
threshold: number;
|
|
83
|
+
topK?: number;
|
|
84
|
+
minLevel?: DriftLevel;
|
|
85
|
+
}
|
|
86
|
+
export interface AlignmentResult {
|
|
87
|
+
entityIndex: string[];
|
|
88
|
+
shared: string[];
|
|
89
|
+
added: string[];
|
|
90
|
+
removed: string[];
|
|
91
|
+
}
|
|
92
|
+
export interface KMeansOptions {
|
|
93
|
+
kInit?: number;
|
|
94
|
+
maxIterations?: number;
|
|
95
|
+
convergenceThreshold?: number;
|
|
96
|
+
seed?: number;
|
|
97
|
+
sampleSize?: number;
|
|
98
|
+
sampleThreshold?: number;
|
|
99
|
+
}
|
|
100
|
+
export interface KMeansResult {
|
|
101
|
+
k: number;
|
|
102
|
+
assignments: number[];
|
|
103
|
+
centroids: number[][];
|
|
104
|
+
silhouetteScore: number;
|
|
105
|
+
converged: boolean;
|
|
106
|
+
iterations: number;
|
|
107
|
+
orphanIndices: number[];
|
|
108
|
+
entityIndices: number[];
|
|
109
|
+
warning?: string;
|
|
110
|
+
}
|
|
111
|
+
export interface ClusterBoundaryOptions {
|
|
112
|
+
minPackageSize?: number;
|
|
113
|
+
splitThreshold?: number;
|
|
114
|
+
packageDepth?: number;
|
|
115
|
+
includeOrphans?: boolean;
|
|
116
|
+
crossPackageThreshold?: number;
|
|
117
|
+
dominantCoverageThreshold?: number;
|
|
118
|
+
kInit?: number;
|
|
119
|
+
seed?: number;
|
|
120
|
+
}
|
|
121
|
+
export interface PackageBASScore {
|
|
122
|
+
packageName: string;
|
|
123
|
+
entityCount: number;
|
|
124
|
+
purity: number;
|
|
125
|
+
coverage: number;
|
|
126
|
+
bas: number;
|
|
127
|
+
dominantCluster: number;
|
|
128
|
+
}
|
|
129
|
+
export interface SplitPackageIssue {
|
|
130
|
+
packageName: string;
|
|
131
|
+
purity: number;
|
|
132
|
+
bas: number;
|
|
133
|
+
clusterDistribution: Array<{
|
|
134
|
+
clusterId: number;
|
|
135
|
+
ratio: number;
|
|
136
|
+
}>;
|
|
137
|
+
}
|
|
138
|
+
export interface CrossDomainFusion {
|
|
139
|
+
clusterId: number;
|
|
140
|
+
involvedPackages: Array<{
|
|
141
|
+
packageName: string;
|
|
142
|
+
ratio: number;
|
|
143
|
+
}>;
|
|
144
|
+
representativeEntities: string[];
|
|
145
|
+
}
|
|
146
|
+
export interface ClusterSummary {
|
|
147
|
+
clusterId: number;
|
|
148
|
+
entityCount: number;
|
|
149
|
+
dominantPackage: string;
|
|
150
|
+
dominantPackageRatio: number;
|
|
151
|
+
}
|
|
152
|
+
export interface ClusterBoundaryReport {
|
|
153
|
+
mode: ProjectionMode;
|
|
154
|
+
globalBAS: number;
|
|
155
|
+
silhouetteScore: number;
|
|
156
|
+
clusterCount: number;
|
|
157
|
+
entityCount: number;
|
|
158
|
+
packageCount: number;
|
|
159
|
+
packageScores: PackageBASScore[];
|
|
160
|
+
splitPackages: SplitPackageIssue[];
|
|
161
|
+
crossDomainFusions: CrossDomainFusion[];
|
|
162
|
+
orphanEntities: string[];
|
|
163
|
+
clusters: ClusterSummary[];
|
|
164
|
+
warning?: string;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analysis/jl/types.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAC;AAE7C,MAAM,WAAW,QAAQ;IAEvB,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAEhB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,iBAAiB,EAAE,QAI/B,CAAC;AAGF,eAAO,MAAM,eAAe,QAAQ,CAAC;AAGrC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAGxC,eAAO,MAAM,aAAa,MAAM,CAAC;AAGjC,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAGvC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAK3C,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IAKvB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAQvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAKD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,wBAAwB,EAAE,CAAC;CACvC;AAGD,MAAM,WAAW,oBAAoB;IAEnC,EAAE,EAAE,OAAO,CAAC;IAEZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAAC;CAC3C;AAOD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAM5E,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAIA,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,YAEnC,CAAC;AAGF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IAEjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAMD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;CAC3B;AAGD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,IAAI,EAAE,cAAc,CAAC;IAErB,MAAM,EAAE,MAAM,CAAC;IAEf,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAGD,MAAM,WAAW,YAAY;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAGD,MAAM,WAAW,eAAe;IAE9B,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAOD,MAAM,WAAW,aAAa;IAK5B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,WAAW,YAAY;IAE3B,CAAC,EAAE,MAAM,CAAC;IAKV,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IAEtB,eAAe,EAAE,MAAM,CAAC;IAExB,SAAS,EAAE,OAAO,CAAC;IAEnB,UAAU,EAAE,MAAM,CAAC;IAEnB,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,sBAAsB;IAErC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,cAAc,CAAC,EAAE,OAAO,CAAC;IAKzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAM/B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAGD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,sBAAsB,EAAE,MAAM,EAAE,CAAC;CAClC;AAGD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAGD,MAAM,WAAW,qBAAqB;IAEpC,IAAI,EAAE,cAAc,CAAC;IAErB,SAAS,EAAE,MAAM,CAAC;IAElB,eAAe,EAAE,MAAM,CAAC;IAExB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAE3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const DEFAULT_JL_CONFIG = {
|
|
2
|
+
seed: 42,
|
|
3
|
+
epsilon: 0.3,
|
|
4
|
+
directModeThreshold: 1000,
|
|
5
|
+
};
|
|
6
|
+
export const FEATURE_VERSION = '1.0';
|
|
7
|
+
export const HISTORY_SCHEMA_VERSION = 1;
|
|
8
|
+
export const MAX_SNAPSHOTS = 500;
|
|
9
|
+
export const VARIANCE_THRESHOLD = 0.95;
|
|
10
|
+
export const TREND_DELTA_THRESHOLD = 0.002;
|
|
11
|
+
export const DRIFT_THRESHOLDS = {
|
|
12
|
+
moderate: 0.5,
|
|
13
|
+
significant: 1.5,
|
|
14
|
+
critical: 3.0,
|
|
15
|
+
};
|
|
16
|
+
export const DEFAULT_DRIFT_OPTIONS = {
|
|
17
|
+
threshold: DRIFT_THRESHOLDS.critical,
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analysis/jl/types.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,iBAAiB,GAAa;IACzC,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,GAAG;IACZ,mBAAmB,EAAE,IAAI;CAC1B,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAGrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAGxC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAGjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAGvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AA4D3C,MAAM,CAAC,MAAM,gBAAgB,GAIxB;IACH,QAAQ,EAAE,GAAG;IACb,WAAW,EAAE,GAAG;IAChB,QAAQ,EAAE,GAAG;CACd,CAAC;AAGF,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,SAAS,EAAE,gBAAgB,CAAC,QAAQ;CACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/index.ts"],"names":[],"mappings":"AAIA,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/index.ts"],"names":[],"mappings":"AAIA,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DiscriminatorType, SourceLocation, LiteralDispersionSmell } from './types.js';
|
|
2
|
+
export declare function extractDiscriminatorTypes(source: string, filePath: string): DiscriminatorType[];
|
|
3
|
+
export declare function scanFileForComparisons(source: string, filePath: string): SourceLocation[];
|
|
4
|
+
export interface DetectDispersionOptions {
|
|
5
|
+
threshold?: number;
|
|
6
|
+
srcRoot?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectDispersion(types: DiscriminatorType[], fileContents: Map<string, string>, options?: DetectDispersionOptions): LiteralDispersionSmell[];
|
|
9
|
+
//# sourceMappingURL=literal-dispersion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal-dispersion.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/literal-dispersion.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EAEjB,cAAc,EACd,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAiDpB,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAiE/F;AAUD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAqCzF;AAMD,MAAM,WAAW,uBAAuB;IAKtC,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,iBAAiB,EAAE,EAC1B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,EAAE,CA6D1B"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { filterCrossModule } from './scope-filter.js';
|
|
2
|
+
const STRING_LITERAL_UNION_RE = /(?:export\s+)?type\s+(\w+)\s*=\s*((?:"[^"]*"\s*\|\s*)*"[^"]*")\s*;?/g;
|
|
3
|
+
const STRING_LITERAL_RE = /"([^"]*)"/g;
|
|
4
|
+
const ENUM_RE = /(?:export\s+)?enum\s+(\w+)\s*\{([^}]*)\}/gs;
|
|
5
|
+
const ENUM_MEMBER_RE = /(\w+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|(\d+)))?\s*(?:,|$)/g;
|
|
6
|
+
const CASE_LITERAL_RE = /case\s+"([^"]+)":/g;
|
|
7
|
+
const CASE_ENUM_MEMBER_RE = /case\s+\w+\.(\w+)\s*:/g;
|
|
8
|
+
function getLines(source) {
|
|
9
|
+
return source.split('\n').map((text, idx) => ({ text, num: idx + 1 }));
|
|
10
|
+
}
|
|
11
|
+
export function extractDiscriminatorTypes(source, filePath) {
|
|
12
|
+
const types = [];
|
|
13
|
+
for (const match of source.matchAll(STRING_LITERAL_UNION_RE)) {
|
|
14
|
+
const typeName = match[1];
|
|
15
|
+
const unionBody = match[2];
|
|
16
|
+
const values = [];
|
|
17
|
+
for (const litMatch of unionBody.matchAll(STRING_LITERAL_RE)) {
|
|
18
|
+
values.push(litMatch[1]);
|
|
19
|
+
}
|
|
20
|
+
if (values.length > 0) {
|
|
21
|
+
const beforeMatch = source.substring(0, match.index);
|
|
22
|
+
const lineNum = beforeMatch.split('\n').length;
|
|
23
|
+
types.push({
|
|
24
|
+
name: typeName,
|
|
25
|
+
values,
|
|
26
|
+
kind: 'string-literal-union',
|
|
27
|
+
file: filePath,
|
|
28
|
+
line: lineNum,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
for (const match of source.matchAll(ENUM_RE)) {
|
|
33
|
+
const typeName = match[1];
|
|
34
|
+
const memberBlock = match[2];
|
|
35
|
+
const values = [];
|
|
36
|
+
for (const memMatch of memberBlock.matchAll(ENUM_MEMBER_RE)) {
|
|
37
|
+
const stringVal = memMatch[2] ?? memMatch[3];
|
|
38
|
+
const numVal = memMatch[4];
|
|
39
|
+
if (stringVal !== undefined) {
|
|
40
|
+
values.push(stringVal);
|
|
41
|
+
}
|
|
42
|
+
else if (numVal !== undefined) {
|
|
43
|
+
values.push(numVal);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
values.push(memMatch[1]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (values.length > 0) {
|
|
50
|
+
const beforeMatch = source.substring(0, match.index);
|
|
51
|
+
const lineNum = beforeMatch.split('\n').length;
|
|
52
|
+
types.push({
|
|
53
|
+
name: typeName,
|
|
54
|
+
values,
|
|
55
|
+
kind: 'enum',
|
|
56
|
+
file: filePath,
|
|
57
|
+
line: lineNum,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return types;
|
|
62
|
+
}
|
|
63
|
+
export function scanFileForComparisons(source, filePath) {
|
|
64
|
+
const locations = [];
|
|
65
|
+
const lines = getLines(source);
|
|
66
|
+
for (const { text, num } of lines) {
|
|
67
|
+
const eqMatch = text.match(/(?:===?\s*"([^"]+)")|(?:"([^"]+)"\s*===?)/g);
|
|
68
|
+
if (eqMatch) {
|
|
69
|
+
for (const m of eqMatch) {
|
|
70
|
+
const valMatch = m.match(/"([^"]+)"/);
|
|
71
|
+
if (valMatch) {
|
|
72
|
+
locations.push({ file: filePath, line: num });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (CASE_LITERAL_RE.test(text)) {
|
|
77
|
+
CASE_LITERAL_RE.lastIndex = 0;
|
|
78
|
+
for (const _cm of text.matchAll(CASE_LITERAL_RE)) {
|
|
79
|
+
locations.push({ file: filePath, line: num });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (CASE_ENUM_MEMBER_RE.test(text)) {
|
|
83
|
+
CASE_ENUM_MEMBER_RE.lastIndex = 0;
|
|
84
|
+
for (const _cm of text.matchAll(CASE_ENUM_MEMBER_RE)) {
|
|
85
|
+
locations.push({ file: filePath, line: num });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return locations;
|
|
90
|
+
}
|
|
91
|
+
export function detectDispersion(types, fileContents, options = {}) {
|
|
92
|
+
const threshold = options.threshold ?? 2;
|
|
93
|
+
const smells = [];
|
|
94
|
+
for (const typeDef of types) {
|
|
95
|
+
const valueLocations = new Map();
|
|
96
|
+
for (const val of typeDef.values) {
|
|
97
|
+
if (!valueLocations.has(val)) {
|
|
98
|
+
valueLocations.set(val, []);
|
|
99
|
+
}
|
|
100
|
+
valueLocations.get(val).push({ file: typeDef.file, line: typeDef.line });
|
|
101
|
+
}
|
|
102
|
+
for (const [file, source] of fileContents) {
|
|
103
|
+
const compLocations = scanFileForComparisons(source, file);
|
|
104
|
+
const lines = getLines(source);
|
|
105
|
+
for (const compLoc of compLocations) {
|
|
106
|
+
const lineText = lines[compLoc.line - 1]?.text ?? '';
|
|
107
|
+
const matchedValue = extractComparedValue(lineText, typeDef);
|
|
108
|
+
if (matchedValue !== null && typeDef.values.includes(matchedValue)) {
|
|
109
|
+
if (!valueLocations.has(matchedValue)) {
|
|
110
|
+
valueLocations.set(matchedValue, []);
|
|
111
|
+
}
|
|
112
|
+
valueLocations.get(matchedValue).push(compLoc);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
for (const [val, locs] of valueLocations) {
|
|
117
|
+
const uniqueFiles = [...new Set(locs.map((l) => l.file))];
|
|
118
|
+
const dispersion = uniqueFiles.length;
|
|
119
|
+
if (dispersion >= threshold) {
|
|
120
|
+
smells.push({
|
|
121
|
+
typeName: typeDef.name,
|
|
122
|
+
value: val,
|
|
123
|
+
files: uniqueFiles.sort(),
|
|
124
|
+
dispersion,
|
|
125
|
+
severity: dispersion >= 3 ? 'warning' : 'info',
|
|
126
|
+
locations: locs,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (options.srcRoot) {
|
|
132
|
+
return filterCrossModule(smells, options.srcRoot);
|
|
133
|
+
}
|
|
134
|
+
return smells;
|
|
135
|
+
}
|
|
136
|
+
function extractComparedValue(line, typeDef) {
|
|
137
|
+
const eqDirect = line.match(/(?:===?\s*"([^"]+)")|(?:"([^"]+)"\s*===?)/);
|
|
138
|
+
if (eqDirect) {
|
|
139
|
+
const val = eqDirect[1] ?? eqDirect[2];
|
|
140
|
+
return val;
|
|
141
|
+
}
|
|
142
|
+
const caseLit = line.match(/case\s+"([^"]+)":/);
|
|
143
|
+
if (caseLit) {
|
|
144
|
+
return caseLit[1];
|
|
145
|
+
}
|
|
146
|
+
if (typeDef.kind === 'enum') {
|
|
147
|
+
const caseEnum = line.match(/case\s+\w+\.(\w+)\s*:/);
|
|
148
|
+
if (caseEnum) {
|
|
149
|
+
const memberName = caseEnum[1];
|
|
150
|
+
if (typeDef.values.includes(memberName)) {
|
|
151
|
+
return memberName;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=literal-dispersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal-dispersion.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/literal-dispersion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ShapeSmellAnalysis, LiteralDispersionSmell } from './types.js';
|
|
2
|
+
export declare function persistResults(archDir: string, analysis: ShapeSmellAnalysis): Promise<void>;
|
|
3
|
+
export declare function loadResults(archDir: string): Promise<ShapeSmellAnalysis | null>;
|
|
4
|
+
export declare function loadLiteralDispersion(archDir: string): Promise<LiteralDispersionSmell[] | null>;
|
|
5
|
+
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/persistence.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAiB7E,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAajG;AAQD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAmCrF;AAKD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,CAM1C"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { errorMessage } from '../../utils/error-message.js';
|
|
4
|
+
const SHAPE_SMELLS_SUBDIR = 'query/shape-smells';
|
|
5
|
+
const MANIFEST_FILE = 'manifest.json';
|
|
6
|
+
const LITERAL_DISPERSION_FILE = 'literal-dispersion.json';
|
|
7
|
+
function shapeSmellsDir(outputDir) {
|
|
8
|
+
return path.join(outputDir, SHAPE_SMELLS_SUBDIR);
|
|
9
|
+
}
|
|
10
|
+
export async function persistResults(archDir, analysis) {
|
|
11
|
+
const dir = shapeSmellsDir(archDir);
|
|
12
|
+
await fs.ensureDir(dir);
|
|
13
|
+
await fs.writeJson(path.join(dir, MANIFEST_FILE), analysis.manifest, { spaces: 2 });
|
|
14
|
+
const literalResult = analysis.results.find((r) => r.layer === 'literal-dispersion');
|
|
15
|
+
if (literalResult) {
|
|
16
|
+
await fs.writeJson(path.join(dir, LITERAL_DISPERSION_FILE), literalResult.smells, {
|
|
17
|
+
spaces: 2,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function loadResults(archDir) {
|
|
22
|
+
const dir = shapeSmellsDir(archDir);
|
|
23
|
+
if (!(await fs.pathExists(dir))) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const manifestPath = path.join(dir, MANIFEST_FILE);
|
|
27
|
+
const literalPath = path.join(dir, LITERAL_DISPERSION_FILE);
|
|
28
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const manifest = (await fs.readJson(manifestPath));
|
|
33
|
+
let smells = [];
|
|
34
|
+
if (await fs.pathExists(literalPath)) {
|
|
35
|
+
smells = (await fs.readJson(literalPath));
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
manifest,
|
|
39
|
+
results: [
|
|
40
|
+
{
|
|
41
|
+
layer: 'literal-dispersion',
|
|
42
|
+
smells,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
const message = errorMessage(err);
|
|
49
|
+
throw new Error(`Failed to load shape-smell results from ${dir}: ${message}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export async function loadLiteralDispersion(archDir) {
|
|
53
|
+
const results = await loadResults(archDir);
|
|
54
|
+
if (!results)
|
|
55
|
+
return null;
|
|
56
|
+
const literalResult = results.results.find((r) => r.layer === 'literal-dispersion');
|
|
57
|
+
return literalResult?.smells ?? null;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/persistence.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACjD,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAE1D,SAAS,cAAc,CAAC,SAAiB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AACnD,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,QAA4B;IAChF,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAExB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAGpF,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,CAAC;IACrF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE;YAChF,MAAM,EAAE,CAAC;SACV,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;IAE5D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAmC,CAAC;QACrF,IAAI,MAAM,GAA6B,EAAE,CAAC;QAE1C,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA6B,CAAC;QACxE,CAAC;QAED,OAAO;YACL,QAAQ;YACR,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,oBAAoB;oBAC3B,MAAM;iBACP;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe;IAEf,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,CAAC;IACpF,OAAO,aAAa,EAAE,MAAM,IAAI,IAAI,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LiteralDispersionSmell } from './types.js';
|
|
2
|
+
export declare function computeModuleSpan(files: string[], srcRoot: string): {
|
|
3
|
+
modules: string[];
|
|
4
|
+
crossesBoundary: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare function filterCrossModule(smells: LiteralDispersionSmell[], srcRoot?: string): LiteralDispersionSmell[];
|
|
7
|
+
//# sourceMappingURL=scope-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-filter.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/scope-filter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAWzD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAyBjD;AAUD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,sBAAsB,EAAE,EAChC,OAAO,CAAC,EAAE,MAAM,GACf,sBAAsB,EAAE,CAS1B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function computeModuleSpan(files, srcRoot) {
|
|
2
|
+
const modules = new Set();
|
|
3
|
+
for (const file of files) {
|
|
4
|
+
let relative = file;
|
|
5
|
+
if (file.startsWith(srcRoot)) {
|
|
6
|
+
relative = file.slice(srcRoot.length);
|
|
7
|
+
}
|
|
8
|
+
if (relative.startsWith('/')) {
|
|
9
|
+
relative = relative.slice(1);
|
|
10
|
+
}
|
|
11
|
+
const segments = relative.split('/');
|
|
12
|
+
if (segments.length > 1) {
|
|
13
|
+
modules.add(segments[0]);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const modulesArr = [...modules].sort();
|
|
17
|
+
return { modules: modulesArr, crossesBoundary: modulesArr.length >= 2 };
|
|
18
|
+
}
|
|
19
|
+
export function filterCrossModule(smells, srcRoot) {
|
|
20
|
+
if (!srcRoot) {
|
|
21
|
+
return smells;
|
|
22
|
+
}
|
|
23
|
+
return smells.filter((smell) => {
|
|
24
|
+
const { crossesBoundary } = computeModuleSpan(smell.files, srcRoot);
|
|
25
|
+
return crossesBoundary;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=scope-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-filter.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/scope-filter.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,iBAAiB,CAC/B,KAAe,EACf,OAAe;IAEf,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAEzB,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAGD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAExB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;IAEH,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;AAC1E,CAAC;AAUD,MAAM,UAAU,iBAAiB,CAC/B,MAAgC,EAChC,OAAgB;IAEhB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpE,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface SourceLocation {
|
|
2
|
+
file: string;
|
|
3
|
+
line: number;
|
|
4
|
+
}
|
|
5
|
+
export type DiscriminatorKind = 'string-literal-union' | 'enum';
|
|
6
|
+
export interface DiscriminatorType {
|
|
7
|
+
name: string;
|
|
8
|
+
values: string[];
|
|
9
|
+
kind: DiscriminatorKind;
|
|
10
|
+
file: string;
|
|
11
|
+
line: number;
|
|
12
|
+
}
|
|
13
|
+
export interface LiteralDispersionSmell {
|
|
14
|
+
typeName: string;
|
|
15
|
+
value: string;
|
|
16
|
+
files: string[];
|
|
17
|
+
dispersion: number;
|
|
18
|
+
severity: 'info' | 'warning';
|
|
19
|
+
locations: SourceLocation[];
|
|
20
|
+
}
|
|
21
|
+
export interface ShapeSmellManifest {
|
|
22
|
+
version: string;
|
|
23
|
+
generatedAt: string;
|
|
24
|
+
totalSmells: number;
|
|
25
|
+
bySeverity: {
|
|
26
|
+
info: number;
|
|
27
|
+
warning: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export type ShapeSmellLayer = 'literal-dispersion' | 'hidden-coupling' | 'enum-extension-impact';
|
|
31
|
+
export interface ShapeSmellResult {
|
|
32
|
+
layer: ShapeSmellLayer;
|
|
33
|
+
smells: LiteralDispersionSmell[];
|
|
34
|
+
diagnostic?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ShapeSmellAnalysis {
|
|
37
|
+
manifest: ShapeSmellManifest;
|
|
38
|
+
results: ShapeSmellResult[];
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/types.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,GAAG,MAAM,CAAC;AAMhE,MAAM,WAAW,iBAAiB;IAEhC,IAAI,EAAE,MAAM,CAAC;IAEb,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,IAAI,EAAE,iBAAiB,CAAC;IAExB,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,MAAM,WAAW,sBAAsB;IAErC,QAAQ,EAAE,MAAM,CAAC;IAEjB,KAAK,EAAE,MAAM,CAAC;IAEd,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAKD,MAAM,WAAW,kBAAkB;IAEjC,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW,EAAE,MAAM,CAAC;IAEpB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAMD,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,uBAAuB,CAAC;AAKjG,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAEjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/types.ts"],"names":[],"mappings":""}
|
|
@@ -26,7 +26,7 @@ export async function loadSnapshots(outputDir) {
|
|
|
26
26
|
const snapshots = [];
|
|
27
27
|
for (const file of jsonFiles) {
|
|
28
28
|
try {
|
|
29
|
-
const data = await fs.readJson(path.join(dir, file));
|
|
29
|
+
const data = (await fs.readJson(path.join(dir, file)));
|
|
30
30
|
snapshots.push(data);
|
|
31
31
|
}
|
|
32
32
|
catch {
|
|
@@ -52,7 +52,7 @@ export async function pruneSnapshots(outputDir, maxCount) {
|
|
|
52
52
|
const fileSnapshots = [];
|
|
53
53
|
for (const file of jsonFiles) {
|
|
54
54
|
try {
|
|
55
|
-
const data = await fs.readJson(path.join(dir, file));
|
|
55
|
+
const data = (await fs.readJson(path.join(dir, file)));
|
|
56
56
|
fileSnapshots.push({
|
|
57
57
|
file,
|
|
58
58
|
timestamp: new Date(data.timestamp).getTime(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../src/analysis/snapshot-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAY3C,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAErC,SAAS,YAAY,CAAC,SAAiB;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,QAAwB;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,IAAI,SAAS,CAAC;IAE/C,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvE,OAAO,GAAG,MAAM,IAAI,EAAE,OAAO,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,QAAwB;IAC5E,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAEpC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../src/analysis/snapshot-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-analyzer.d.ts","sourceRoot":"","sources":["../../src/analysis/test-analyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,sCAAsC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,
|
|
1
|
+
{"version":3,"file":"test-analyzer.d.ts","sourceRoot":"","sources":["../../src/analysis/test-analyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,sCAAsC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EAIlB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAIhF,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9C;AAMD,wBAAgB,sCAAsC,CACpD,aAAa,CAAC,EAAE,iBAAiB,EACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC3C,iBAAiB,GAAG,SAAS,CA6B/B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,aAAa,CAA2B;IAE1C,OAAO,CACX,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC;YA2BV,iBAAiB;YAgEjB,aAAa;YAeb,mBAAmB;IAoBjC,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,wBAAwB;IA0EhC,OAAO,CAAC,cAAc;CAiDvB"}
|
|
@@ -242,7 +242,7 @@ export class TestAnalyzer {
|
|
|
242
242
|
entityCoverageRatio: totalEntities > 0 ? coveredEntities.size / totalEntities : 0,
|
|
243
243
|
assertionDensity: totalCases > 0 ? totalAssertions / totalCases : 0,
|
|
244
244
|
skipRatio: totalCases > 0 ? totalSkips / totalCases : 0,
|
|
245
|
-
issueCount
|
|
245
|
+
issueCount,
|
|
246
246
|
};
|
|
247
247
|
}
|
|
248
248
|
}
|