driftdetect-core 0.5.0 → 0.6.1
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/boundaries/types.d.ts +1 -1
- package/dist/boundaries/types.d.ts.map +1 -1
- package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -1
- package/dist/call-graph/analysis/graph-builder.js +1 -0
- package/dist/call-graph/analysis/graph-builder.js.map +1 -1
- package/dist/call-graph/extractors/go-data-access-extractor.d.ts +80 -0
- package/dist/call-graph/extractors/go-data-access-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/go-data-access-extractor.js +457 -0
- package/dist/call-graph/extractors/go-data-access-extractor.js.map +1 -0
- package/dist/call-graph/extractors/go-extractor.d.ts +103 -0
- package/dist/call-graph/extractors/go-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/go-extractor.js +509 -0
- package/dist/call-graph/extractors/go-extractor.js.map +1 -0
- package/dist/call-graph/extractors/go-hybrid-extractor.d.ts +97 -0
- package/dist/call-graph/extractors/go-hybrid-extractor.d.ts.map +1 -0
- package/dist/call-graph/extractors/go-hybrid-extractor.js +496 -0
- package/dist/call-graph/extractors/go-hybrid-extractor.js.map +1 -0
- package/dist/call-graph/extractors/regex/go-regex.d.ts +51 -0
- package/dist/call-graph/extractors/regex/go-regex.d.ts.map +1 -0
- package/dist/call-graph/extractors/regex/go-regex.js +435 -0
- package/dist/call-graph/extractors/regex/go-regex.js.map +1 -0
- package/dist/call-graph/extractors/regex/index.d.ts +1 -0
- package/dist/call-graph/extractors/regex/index.d.ts.map +1 -1
- package/dist/call-graph/extractors/regex/index.js +8 -0
- package/dist/call-graph/extractors/regex/index.js.map +1 -1
- package/dist/call-graph/index.d.ts +3 -0
- package/dist/call-graph/index.d.ts.map +1 -1
- package/dist/call-graph/index.js +5 -0
- package/dist/call-graph/index.js.map +1 -1
- package/dist/call-graph/types.d.ts +1 -1
- package/dist/call-graph/types.d.ts.map +1 -1
- package/dist/constraints/extraction/constraint-synthesizer.d.ts +72 -0
- package/dist/constraints/extraction/constraint-synthesizer.d.ts.map +1 -0
- package/dist/constraints/extraction/constraint-synthesizer.js +336 -0
- package/dist/constraints/extraction/constraint-synthesizer.js.map +1 -0
- package/dist/constraints/extraction/index.d.ts +10 -0
- package/dist/constraints/extraction/index.d.ts.map +1 -0
- package/dist/constraints/extraction/index.js +10 -0
- package/dist/constraints/extraction/index.js.map +1 -0
- package/dist/constraints/extraction/invariant-detector.d.ts +109 -0
- package/dist/constraints/extraction/invariant-detector.d.ts.map +1 -0
- package/dist/constraints/extraction/invariant-detector.js +979 -0
- package/dist/constraints/extraction/invariant-detector.js.map +1 -0
- package/dist/constraints/index.d.ts +15 -0
- package/dist/constraints/index.d.ts.map +1 -0
- package/dist/constraints/index.js +16 -0
- package/dist/constraints/index.js.map +1 -0
- package/dist/constraints/store/constraint-store.d.ts +110 -0
- package/dist/constraints/store/constraint-store.d.ts.map +1 -0
- package/dist/constraints/store/constraint-store.js +584 -0
- package/dist/constraints/store/constraint-store.js.map +1 -0
- package/dist/constraints/types.d.ts +605 -0
- package/dist/constraints/types.d.ts.map +1 -0
- package/dist/constraints/types.js +57 -0
- package/dist/constraints/types.js.map +1 -0
- package/dist/constraints/verification/constraint-verifier.d.ts +100 -0
- package/dist/constraints/verification/constraint-verifier.d.ts.map +1 -0
- package/dist/constraints/verification/constraint-verifier.js +638 -0
- package/dist/constraints/verification/constraint-verifier.js.map +1 -0
- package/dist/constraints/verification/index.d.ts +8 -0
- package/dist/constraints/verification/index.d.ts.map +1 -0
- package/dist/constraints/verification/index.js +8 -0
- package/dist/constraints/verification/index.js.map +1 -0
- package/dist/decisions/analyzer/decision-mining-analyzer.d.ts +121 -0
- package/dist/decisions/analyzer/decision-mining-analyzer.d.ts.map +1 -0
- package/dist/decisions/analyzer/decision-mining-analyzer.js +904 -0
- package/dist/decisions/analyzer/decision-mining-analyzer.js.map +1 -0
- package/dist/decisions/analyzer/index.d.ts +5 -0
- package/dist/decisions/analyzer/index.d.ts.map +1 -0
- package/dist/decisions/analyzer/index.js +5 -0
- package/dist/decisions/analyzer/index.js.map +1 -0
- package/dist/decisions/extractors/base-commit-extractor.d.ts +104 -0
- package/dist/decisions/extractors/base-commit-extractor.d.ts.map +1 -0
- package/dist/decisions/extractors/base-commit-extractor.js +305 -0
- package/dist/decisions/extractors/base-commit-extractor.js.map +1 -0
- package/dist/decisions/extractors/csharp-commit-extractor.d.ts +18 -0
- package/dist/decisions/extractors/csharp-commit-extractor.d.ts.map +1 -0
- package/dist/decisions/extractors/csharp-commit-extractor.js +281 -0
- package/dist/decisions/extractors/csharp-commit-extractor.js.map +1 -0
- package/dist/decisions/extractors/index.d.ts +31 -0
- package/dist/decisions/extractors/index.d.ts.map +1 -0
- package/dist/decisions/extractors/index.js +63 -0
- package/dist/decisions/extractors/index.js.map +1 -0
- package/dist/decisions/extractors/java-commit-extractor.d.ts +18 -0
- package/dist/decisions/extractors/java-commit-extractor.d.ts.map +1 -0
- package/dist/decisions/extractors/java-commit-extractor.js +248 -0
- package/dist/decisions/extractors/java-commit-extractor.js.map +1 -0
- package/dist/decisions/extractors/php-commit-extractor.d.ts +18 -0
- package/dist/decisions/extractors/php-commit-extractor.d.ts.map +1 -0
- package/dist/decisions/extractors/php-commit-extractor.js +280 -0
- package/dist/decisions/extractors/php-commit-extractor.js.map +1 -0
- package/dist/decisions/extractors/python-commit-extractor.d.ts +18 -0
- package/dist/decisions/extractors/python-commit-extractor.d.ts.map +1 -0
- package/dist/decisions/extractors/python-commit-extractor.js +248 -0
- package/dist/decisions/extractors/python-commit-extractor.js.map +1 -0
- package/dist/decisions/extractors/typescript-commit-extractor.d.ts +37 -0
- package/dist/decisions/extractors/typescript-commit-extractor.d.ts.map +1 -0
- package/dist/decisions/extractors/typescript-commit-extractor.js +229 -0
- package/dist/decisions/extractors/typescript-commit-extractor.js.map +1 -0
- package/dist/decisions/git/commit-parser.d.ts +58 -0
- package/dist/decisions/git/commit-parser.d.ts.map +1 -0
- package/dist/decisions/git/commit-parser.js +344 -0
- package/dist/decisions/git/commit-parser.js.map +1 -0
- package/dist/decisions/git/diff-analyzer.d.ts +30 -0
- package/dist/decisions/git/diff-analyzer.d.ts.map +1 -0
- package/dist/decisions/git/diff-analyzer.js +492 -0
- package/dist/decisions/git/diff-analyzer.js.map +1 -0
- package/dist/decisions/git/git-walker.d.ts +64 -0
- package/dist/decisions/git/git-walker.d.ts.map +1 -0
- package/dist/decisions/git/git-walker.js +441 -0
- package/dist/decisions/git/git-walker.js.map +1 -0
- package/dist/decisions/git/index.d.ts +11 -0
- package/dist/decisions/git/index.d.ts.map +1 -0
- package/dist/decisions/git/index.js +13 -0
- package/dist/decisions/git/index.js.map +1 -0
- package/dist/decisions/git/types.d.ts +223 -0
- package/dist/decisions/git/types.d.ts.map +1 -0
- package/dist/decisions/git/types.js +7 -0
- package/dist/decisions/git/types.js.map +1 -0
- package/dist/decisions/index.d.ts +27 -0
- package/dist/decisions/index.d.ts.map +1 -0
- package/dist/decisions/index.js +45 -0
- package/dist/decisions/index.js.map +1 -0
- package/dist/decisions/types.d.ts +530 -0
- package/dist/decisions/types.d.ts.map +1 -0
- package/dist/decisions/types.js +8 -0
- package/dist/decisions/types.js.map +1 -0
- package/dist/go/go-analyzer.d.ts +203 -0
- package/dist/go/go-analyzer.d.ts.map +1 -0
- package/dist/go/go-analyzer.js +509 -0
- package/dist/go/go-analyzer.js.map +1 -0
- package/dist/go/index.d.ts +7 -0
- package/dist/go/index.d.ts.map +1 -0
- package/dist/go/index.js +8 -0
- package/dist/go/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/tree-sitter/go-loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/go-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/go-loader.js +161 -0
- package/dist/parsers/tree-sitter/go-loader.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-go-parser.d.ts +250 -0
- package/dist/parsers/tree-sitter/tree-sitter-go-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-go-parser.js +707 -0
- package/dist/parsers/tree-sitter/tree-sitter-go-parser.js.map +1 -0
- package/dist/parsers/types.d.ts +1 -1
- package/dist/parsers/types.d.ts.map +1 -1
- package/dist/simulation/approach-generator.d.ts +73 -0
- package/dist/simulation/approach-generator.d.ts.map +1 -0
- package/dist/simulation/approach-generator.js +371 -0
- package/dist/simulation/approach-generator.js.map +1 -0
- package/dist/simulation/index.d.ts +14 -0
- package/dist/simulation/index.d.ts.map +1 -0
- package/dist/simulation/index.js +19 -0
- package/dist/simulation/index.js.map +1 -0
- package/dist/simulation/language-strategies/csharp-strategies.d.ts +17 -0
- package/dist/simulation/language-strategies/csharp-strategies.d.ts.map +1 -0
- package/dist/simulation/language-strategies/csharp-strategies.js +118 -0
- package/dist/simulation/language-strategies/csharp-strategies.js.map +1 -0
- package/dist/simulation/language-strategies/index.d.ts +41 -0
- package/dist/simulation/language-strategies/index.d.ts.map +1 -0
- package/dist/simulation/language-strategies/index.js +92 -0
- package/dist/simulation/language-strategies/index.js.map +1 -0
- package/dist/simulation/language-strategies/java-strategies.d.ts +17 -0
- package/dist/simulation/language-strategies/java-strategies.d.ts.map +1 -0
- package/dist/simulation/language-strategies/java-strategies.js +119 -0
- package/dist/simulation/language-strategies/java-strategies.js.map +1 -0
- package/dist/simulation/language-strategies/php-strategies.d.ts +17 -0
- package/dist/simulation/language-strategies/php-strategies.d.ts.map +1 -0
- package/dist/simulation/language-strategies/php-strategies.js +129 -0
- package/dist/simulation/language-strategies/php-strategies.js.map +1 -0
- package/dist/simulation/language-strategies/python-strategies.d.ts +17 -0
- package/dist/simulation/language-strategies/python-strategies.d.ts.map +1 -0
- package/dist/simulation/language-strategies/python-strategies.js +208 -0
- package/dist/simulation/language-strategies/python-strategies.js.map +1 -0
- package/dist/simulation/language-strategies/types.d.ts +67 -0
- package/dist/simulation/language-strategies/types.d.ts.map +1 -0
- package/dist/simulation/language-strategies/types.js +23 -0
- package/dist/simulation/language-strategies/types.js.map +1 -0
- package/dist/simulation/language-strategies/typescript-strategies.d.ts +17 -0
- package/dist/simulation/language-strategies/typescript-strategies.d.ts.map +1 -0
- package/dist/simulation/language-strategies/typescript-strategies.js +251 -0
- package/dist/simulation/language-strategies/typescript-strategies.js.map +1 -0
- package/dist/simulation/scorers/friction-scorer.d.ts +45 -0
- package/dist/simulation/scorers/friction-scorer.d.ts.map +1 -0
- package/dist/simulation/scorers/friction-scorer.js +336 -0
- package/dist/simulation/scorers/friction-scorer.js.map +1 -0
- package/dist/simulation/scorers/impact-scorer.d.ts +56 -0
- package/dist/simulation/scorers/impact-scorer.d.ts.map +1 -0
- package/dist/simulation/scorers/impact-scorer.js +273 -0
- package/dist/simulation/scorers/impact-scorer.js.map +1 -0
- package/dist/simulation/scorers/index.d.ts +12 -0
- package/dist/simulation/scorers/index.d.ts.map +1 -0
- package/dist/simulation/scorers/index.js +12 -0
- package/dist/simulation/scorers/index.js.map +1 -0
- package/dist/simulation/scorers/pattern-alignment-scorer.d.ts +83 -0
- package/dist/simulation/scorers/pattern-alignment-scorer.d.ts.map +1 -0
- package/dist/simulation/scorers/pattern-alignment-scorer.js +367 -0
- package/dist/simulation/scorers/pattern-alignment-scorer.js.map +1 -0
- package/dist/simulation/scorers/security-scorer.d.ts +63 -0
- package/dist/simulation/scorers/security-scorer.d.ts.map +1 -0
- package/dist/simulation/scorers/security-scorer.js +346 -0
- package/dist/simulation/scorers/security-scorer.js.map +1 -0
- package/dist/simulation/simulation-engine.d.ts +89 -0
- package/dist/simulation/simulation-engine.d.ts.map +1 -0
- package/dist/simulation/simulation-engine.js +480 -0
- package/dist/simulation/simulation-engine.js.map +1 -0
- package/dist/simulation/types.d.ts +200 -0
- package/dist/simulation/types.d.ts.map +1 -0
- package/dist/simulation/types.js +23 -0
- package/dist/simulation/types.js.map +1 -0
- package/dist/speculative/approach-generator.d.ts +2 -0
- package/dist/speculative/approach-generator.d.ts.map +1 -0
- package/dist/speculative/approach-generator.js +2 -0
- package/dist/speculative/approach-generator.js.map +1 -0
- package/dist/speculative/templates/types.d.ts +133 -0
- package/dist/speculative/templates/types.d.ts.map +1 -0
- package/dist/speculative/templates/types.js +208 -0
- package/dist/speculative/templates/types.js.map +1 -0
- package/dist/speculative/types.d.ts +523 -0
- package/dist/speculative/types.d.ts.map +1 -0
- package/dist/speculative/types.js +71 -0
- package/dist/speculative/types.js.map +1 -0
- package/dist/test-topology/extractors/base-test-extractor.d.ts +1 -1
- package/dist/test-topology/extractors/base-test-extractor.d.ts.map +1 -1
- package/dist/test-topology/extractors/base-test-extractor.js.map +1 -1
- package/dist/test-topology/extractors/go-test-extractor.d.ts +33 -0
- package/dist/test-topology/extractors/go-test-extractor.d.ts.map +1 -0
- package/dist/test-topology/extractors/go-test-extractor.js +436 -0
- package/dist/test-topology/extractors/go-test-extractor.js.map +1 -0
- package/dist/test-topology/extractors/index.d.ts +1 -0
- package/dist/test-topology/extractors/index.d.ts.map +1 -1
- package/dist/test-topology/extractors/index.js +1 -0
- package/dist/test-topology/extractors/index.js.map +1 -1
- package/dist/test-topology/extractors/regex/go-test-regex.d.ts +62 -0
- package/dist/test-topology/extractors/regex/go-test-regex.d.ts.map +1 -0
- package/dist/test-topology/extractors/regex/go-test-regex.js +528 -0
- package/dist/test-topology/extractors/regex/go-test-regex.js.map +1 -0
- package/dist/test-topology/extractors/regex/index.d.ts +1 -0
- package/dist/test-topology/extractors/regex/index.d.ts.map +1 -1
- package/dist/test-topology/extractors/regex/index.js +4 -0
- package/dist/test-topology/extractors/regex/index.js.map +1 -1
- package/dist/test-topology/hybrid-test-topology-analyzer.d.ts.map +1 -1
- package/dist/test-topology/hybrid-test-topology-analyzer.js +1 -0
- package/dist/test-topology/hybrid-test-topology-analyzer.js.map +1 -1
- package/dist/test-topology/test-topology-analyzer.d.ts.map +1 -1
- package/dist/test-topology/test-topology-analyzer.js +1 -0
- package/dist/test-topology/test-topology-analyzer.js.map +1 -1
- package/dist/test-topology/types.d.ts +2 -2
- package/dist/test-topology/types.d.ts.map +1 -1
- package/dist/unified-provider/matching/database-sql-matcher.d.ts +42 -0
- package/dist/unified-provider/matching/database-sql-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/database-sql-matcher.js +282 -0
- package/dist/unified-provider/matching/database-sql-matcher.js.map +1 -0
- package/dist/unified-provider/matching/gorm-matcher.d.ts +41 -0
- package/dist/unified-provider/matching/gorm-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/gorm-matcher.js +222 -0
- package/dist/unified-provider/matching/gorm-matcher.js.map +1 -0
- package/dist/unified-provider/matching/index.d.ts +3 -0
- package/dist/unified-provider/matching/index.d.ts.map +1 -1
- package/dist/unified-provider/matching/index.js +4 -0
- package/dist/unified-provider/matching/index.js.map +1 -1
- package/dist/unified-provider/matching/matcher-registry.d.ts.map +1 -1
- package/dist/unified-provider/matching/matcher-registry.js +7 -0
- package/dist/unified-provider/matching/matcher-registry.js.map +1 -1
- package/dist/unified-provider/matching/sqlx-matcher.d.ts +40 -0
- package/dist/unified-provider/matching/sqlx-matcher.d.ts.map +1 -0
- package/dist/unified-provider/matching/sqlx-matcher.js +214 -0
- package/dist/unified-provider/matching/sqlx-matcher.js.map +1 -0
- package/dist/unified-provider/normalization/go-normalizer.d.ts +62 -0
- package/dist/unified-provider/normalization/go-normalizer.d.ts.map +1 -0
- package/dist/unified-provider/normalization/go-normalizer.js +608 -0
- package/dist/unified-provider/normalization/go-normalizer.js.map +1 -0
- package/dist/unified-provider/normalization/index.d.ts +1 -0
- package/dist/unified-provider/normalization/index.d.ts.map +1 -1
- package/dist/unified-provider/normalization/index.js +6 -1
- package/dist/unified-provider/normalization/index.js.map +1 -1
- package/dist/unified-provider/types.d.ts +1 -1
- package/dist/unified-provider/types.d.ts.map +1 -1
- package/dist/wpf/extractors/binding-error-detector.d.ts +75 -0
- package/dist/wpf/extractors/binding-error-detector.d.ts.map +1 -0
- package/dist/wpf/extractors/binding-error-detector.js +290 -0
- package/dist/wpf/extractors/binding-error-detector.js.map +1 -0
- package/dist/wpf/extractors/code-behind-linker.d.ts +70 -0
- package/dist/wpf/extractors/code-behind-linker.d.ts.map +1 -0
- package/dist/wpf/extractors/code-behind-linker.js +172 -0
- package/dist/wpf/extractors/code-behind-linker.js.map +1 -0
- package/dist/wpf/extractors/dependency-property-extractor.d.ts +61 -0
- package/dist/wpf/extractors/dependency-property-extractor.d.ts.map +1 -0
- package/dist/wpf/extractors/dependency-property-extractor.js +201 -0
- package/dist/wpf/extractors/dependency-property-extractor.js.map +1 -0
- package/dist/wpf/extractors/regex/viewmodel-regex.d.ts +82 -0
- package/dist/wpf/extractors/regex/viewmodel-regex.d.ts.map +1 -0
- package/dist/wpf/extractors/regex/viewmodel-regex.js +412 -0
- package/dist/wpf/extractors/regex/viewmodel-regex.js.map +1 -0
- package/dist/wpf/extractors/regex/xaml-regex.d.ts +77 -0
- package/dist/wpf/extractors/regex/xaml-regex.d.ts.map +1 -0
- package/dist/wpf/extractors/regex/xaml-regex.js +353 -0
- package/dist/wpf/extractors/regex/xaml-regex.js.map +1 -0
- package/dist/wpf/extractors/resource-dictionary-parser.d.ts +103 -0
- package/dist/wpf/extractors/resource-dictionary-parser.d.ts.map +1 -0
- package/dist/wpf/extractors/resource-dictionary-parser.js +296 -0
- package/dist/wpf/extractors/resource-dictionary-parser.js.map +1 -0
- package/dist/wpf/extractors/value-converter-extractor.d.ts +128 -0
- package/dist/wpf/extractors/value-converter-extractor.d.ts.map +1 -0
- package/dist/wpf/extractors/value-converter-extractor.js +312 -0
- package/dist/wpf/extractors/value-converter-extractor.js.map +1 -0
- package/dist/wpf/extractors/viewmodel-hybrid-extractor.d.ts +104 -0
- package/dist/wpf/extractors/viewmodel-hybrid-extractor.d.ts.map +1 -0
- package/dist/wpf/extractors/viewmodel-hybrid-extractor.js +513 -0
- package/dist/wpf/extractors/viewmodel-hybrid-extractor.js.map +1 -0
- package/dist/wpf/extractors/xaml-hybrid-extractor.d.ts +98 -0
- package/dist/wpf/extractors/xaml-hybrid-extractor.d.ts.map +1 -0
- package/dist/wpf/extractors/xaml-hybrid-extractor.js +444 -0
- package/dist/wpf/extractors/xaml-hybrid-extractor.js.map +1 -0
- package/dist/wpf/index.d.ts +25 -0
- package/dist/wpf/index.d.ts.map +1 -0
- package/dist/wpf/index.js +31 -0
- package/dist/wpf/index.js.map +1 -0
- package/dist/wpf/integration/wpf-callgraph-adapter.d.ts +82 -0
- package/dist/wpf/integration/wpf-callgraph-adapter.d.ts.map +1 -0
- package/dist/wpf/integration/wpf-callgraph-adapter.js +311 -0
- package/dist/wpf/integration/wpf-callgraph-adapter.js.map +1 -0
- package/dist/wpf/integration/wpf-data-flow-tracer.d.ts +129 -0
- package/dist/wpf/integration/wpf-data-flow-tracer.d.ts.map +1 -0
- package/dist/wpf/integration/wpf-data-flow-tracer.js +367 -0
- package/dist/wpf/integration/wpf-data-flow-tracer.js.map +1 -0
- package/dist/wpf/linkers/datacontext-resolver.d.ts +66 -0
- package/dist/wpf/linkers/datacontext-resolver.d.ts.map +1 -0
- package/dist/wpf/linkers/datacontext-resolver.js +240 -0
- package/dist/wpf/linkers/datacontext-resolver.js.map +1 -0
- package/dist/wpf/linkers/viewmodel-linker.d.ts +71 -0
- package/dist/wpf/linkers/viewmodel-linker.d.ts.map +1 -0
- package/dist/wpf/linkers/viewmodel-linker.js +268 -0
- package/dist/wpf/linkers/viewmodel-linker.js.map +1 -0
- package/dist/wpf/types.d.ts +451 -0
- package/dist/wpf/types.d.ts.map +1 -0
- package/dist/wpf/types.js +8 -0
- package/dist/wpf/types.js.map +1 -0
- package/dist/wpf/wpf-analyzer.d.ts +114 -0
- package/dist/wpf/wpf-analyzer.d.ts.map +1 -0
- package/dist/wpf/wpf-analyzer.js +332 -0
- package/dist/wpf/wpf-analyzer.js.map +1 -0
- package/dist/wrappers/integration/adapter.d.ts.map +1 -1
- package/dist/wrappers/integration/adapter.js +1 -0
- package/dist/wrappers/integration/adapter.js.map +1 -1
- package/package.json +29 -18
- package/LICENSE +0 -21
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataContext Resolver
|
|
3
|
+
*
|
|
4
|
+
* Resolves DataContext inheritance chain for XAML views.
|
|
5
|
+
* Determines which ViewModel class provides data for bindings.
|
|
6
|
+
*/
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// DataContext Resolver
|
|
10
|
+
// ============================================================================
|
|
11
|
+
export class DataContextResolver {
|
|
12
|
+
viewModels = new Map();
|
|
13
|
+
xamlFiles = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Register a ViewModel for resolution
|
|
16
|
+
*/
|
|
17
|
+
registerViewModel(viewModel) {
|
|
18
|
+
this.viewModels.set(viewModel.className, viewModel);
|
|
19
|
+
this.viewModels.set(viewModel.qualifiedName, viewModel);
|
|
20
|
+
// Also register without namespace prefix for XAML matching
|
|
21
|
+
// e.g., "vm:MainViewModel" should match "MainViewModel"
|
|
22
|
+
const shortName = viewModel.className.split('.').pop() ?? viewModel.className;
|
|
23
|
+
if (shortName !== viewModel.className) {
|
|
24
|
+
this.viewModels.set(shortName, viewModel);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Register XAML extraction result
|
|
29
|
+
*/
|
|
30
|
+
registerXaml(filePath, result) {
|
|
31
|
+
this.xamlFiles.set(filePath, result);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve DataContext for a XAML file
|
|
35
|
+
*/
|
|
36
|
+
resolve(xamlPath, xamlResult) {
|
|
37
|
+
const resolutionPath = [];
|
|
38
|
+
let resolvedType = null;
|
|
39
|
+
let confidence = 'low';
|
|
40
|
+
// Strategy 1: Design-time DataContext (highest confidence)
|
|
41
|
+
if (xamlResult.dataContextType) {
|
|
42
|
+
// Strip namespace prefix if present (e.g., "vm:MainViewModel" -> "MainViewModel")
|
|
43
|
+
const strippedType = this.stripNamespacePrefix(xamlResult.dataContextType);
|
|
44
|
+
// Try to find the ViewModel
|
|
45
|
+
const vm = this.viewModels.get(strippedType) ?? this.viewModels.get(xamlResult.dataContextType);
|
|
46
|
+
if (vm) {
|
|
47
|
+
resolvedType = vm.className;
|
|
48
|
+
resolutionPath.push({
|
|
49
|
+
source: 'design-time',
|
|
50
|
+
type: resolvedType,
|
|
51
|
+
});
|
|
52
|
+
confidence = 'high';
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Still record the type even if we can't find the ViewModel
|
|
56
|
+
resolvedType = strippedType;
|
|
57
|
+
resolutionPath.push({
|
|
58
|
+
source: 'design-time',
|
|
59
|
+
type: resolvedType,
|
|
60
|
+
});
|
|
61
|
+
confidence = 'medium';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Strategy 2: Convention-based (View → ViewModel naming)
|
|
65
|
+
if (!resolvedType) {
|
|
66
|
+
const conventionResult = this.resolveByConvention(xamlPath);
|
|
67
|
+
if (conventionResult) {
|
|
68
|
+
resolvedType = conventionResult;
|
|
69
|
+
resolutionPath.push({
|
|
70
|
+
source: 'inherited', // Convention is a form of implicit inheritance
|
|
71
|
+
type: resolvedType,
|
|
72
|
+
});
|
|
73
|
+
confidence = 'medium';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Strategy 3: x:Class based code-behind analysis
|
|
77
|
+
if (!resolvedType && xamlResult.xClass) {
|
|
78
|
+
const codeBehindResult = this.resolveFromCodeBehind(xamlResult.xClass, xamlPath);
|
|
79
|
+
if (codeBehindResult) {
|
|
80
|
+
resolvedType = codeBehindResult.type;
|
|
81
|
+
resolutionPath.push({
|
|
82
|
+
source: 'code-behind',
|
|
83
|
+
type: resolvedType,
|
|
84
|
+
location: codeBehindResult.location,
|
|
85
|
+
});
|
|
86
|
+
confidence = codeBehindResult.confidence;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
xamlFile: xamlPath,
|
|
91
|
+
element: 'root',
|
|
92
|
+
resolvedType,
|
|
93
|
+
resolutionPath,
|
|
94
|
+
confidence,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Strip namespace prefix from type name
|
|
99
|
+
* e.g., "vm:MainViewModel" -> "MainViewModel"
|
|
100
|
+
* e.g., "local:Converters.BoolToVisibility" -> "Converters.BoolToVisibility"
|
|
101
|
+
*/
|
|
102
|
+
stripNamespacePrefix(typeName) {
|
|
103
|
+
const colonIndex = typeName.indexOf(':');
|
|
104
|
+
if (colonIndex !== -1) {
|
|
105
|
+
return typeName.slice(colonIndex + 1);
|
|
106
|
+
}
|
|
107
|
+
return typeName;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Resolve all registered XAML files
|
|
111
|
+
*/
|
|
112
|
+
resolveAll() {
|
|
113
|
+
const results = [];
|
|
114
|
+
for (const [filePath, xamlResult] of this.xamlFiles) {
|
|
115
|
+
results.push(this.resolve(filePath, xamlResult));
|
|
116
|
+
}
|
|
117
|
+
return results;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Resolve by naming convention (View → ViewModel)
|
|
121
|
+
*/
|
|
122
|
+
resolveByConvention(xamlPath) {
|
|
123
|
+
const fileName = path.basename(xamlPath, '.xaml');
|
|
124
|
+
// Common conventions:
|
|
125
|
+
// MainWindow → MainWindowViewModel or MainViewModel
|
|
126
|
+
// UserView → UserViewModel
|
|
127
|
+
// SettingsPage → SettingsPageViewModel or SettingsViewModel
|
|
128
|
+
const conventions = [
|
|
129
|
+
`${fileName}ViewModel`,
|
|
130
|
+
fileName.replace(/View$/, 'ViewModel'),
|
|
131
|
+
fileName.replace(/Window$/, 'ViewModel'),
|
|
132
|
+
fileName.replace(/Page$/, 'ViewModel'),
|
|
133
|
+
fileName.replace(/Control$/, 'ViewModel'),
|
|
134
|
+
];
|
|
135
|
+
for (const vmName of conventions) {
|
|
136
|
+
if (this.viewModels.has(vmName)) {
|
|
137
|
+
return vmName;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Resolve from code-behind file
|
|
144
|
+
*/
|
|
145
|
+
resolveFromCodeBehind(xClass, _xamlPath) {
|
|
146
|
+
// We can't read the file synchronously here, but we can infer
|
|
147
|
+
// based on the x:Class and registered ViewModels
|
|
148
|
+
// Extract class name from x:Class
|
|
149
|
+
const className = xClass.split('.').pop() ?? xClass;
|
|
150
|
+
// Look for matching ViewModel by convention
|
|
151
|
+
const vmName = className.replace(/(?:View|Window|Page|Control)$/, '') + 'ViewModel';
|
|
152
|
+
if (this.viewModels.has(vmName)) {
|
|
153
|
+
return {
|
|
154
|
+
type: vmName,
|
|
155
|
+
confidence: 'medium',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Find ViewModel for a binding path
|
|
162
|
+
*/
|
|
163
|
+
findViewModelForBinding(xamlPath, _bindingPath) {
|
|
164
|
+
const resolution = this.xamlFiles.get(xamlPath);
|
|
165
|
+
if (!resolution)
|
|
166
|
+
return null;
|
|
167
|
+
const dcResolution = this.resolve(xamlPath, resolution);
|
|
168
|
+
if (!dcResolution.resolvedType)
|
|
169
|
+
return null;
|
|
170
|
+
return this.viewModels.get(dcResolution.resolvedType) ?? null;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Validate a binding against its ViewModel
|
|
174
|
+
*/
|
|
175
|
+
validateBinding(xamlPath, bindingPath) {
|
|
176
|
+
const viewModel = this.findViewModelForBinding(xamlPath, bindingPath);
|
|
177
|
+
if (!viewModel) {
|
|
178
|
+
return {
|
|
179
|
+
valid: false,
|
|
180
|
+
error: 'Could not resolve DataContext',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// Handle nested paths (e.g., "User.Name")
|
|
184
|
+
const pathParts = bindingPath.split('.');
|
|
185
|
+
const propertyName = pathParts[0];
|
|
186
|
+
if (!propertyName) {
|
|
187
|
+
return { valid: false, error: 'Empty binding path' };
|
|
188
|
+
}
|
|
189
|
+
// Check if property exists
|
|
190
|
+
const property = viewModel.properties.find(p => p.name === propertyName);
|
|
191
|
+
const command = viewModel.commands.find(c => c.name === propertyName);
|
|
192
|
+
if (property) {
|
|
193
|
+
return { valid: true, property: property.name };
|
|
194
|
+
}
|
|
195
|
+
if (command) {
|
|
196
|
+
return { valid: true, property: command.name };
|
|
197
|
+
}
|
|
198
|
+
// Property not found - suggest similar
|
|
199
|
+
const similar = this.findSimilarProperty(propertyName, viewModel);
|
|
200
|
+
return {
|
|
201
|
+
valid: false,
|
|
202
|
+
error: `Property '${propertyName}' not found in ${viewModel.className}`,
|
|
203
|
+
...(similar && { suggestion: `Did you mean '${similar}'?` }),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Find similar property name (for suggestions)
|
|
208
|
+
*/
|
|
209
|
+
findSimilarProperty(name, viewModel) {
|
|
210
|
+
const lowerName = name.toLowerCase();
|
|
211
|
+
const allNames = [
|
|
212
|
+
...viewModel.properties.map(p => p.name),
|
|
213
|
+
...viewModel.commands.map(c => c.name),
|
|
214
|
+
];
|
|
215
|
+
// Simple similarity: starts with same letters or contains
|
|
216
|
+
for (const candidate of allNames) {
|
|
217
|
+
const lowerCandidate = candidate.toLowerCase();
|
|
218
|
+
if (lowerCandidate.startsWith(lowerName.slice(0, 3)) ||
|
|
219
|
+
lowerCandidate.includes(lowerName) ||
|
|
220
|
+
lowerName.includes(lowerCandidate)) {
|
|
221
|
+
return candidate;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Clear all registered data
|
|
228
|
+
*/
|
|
229
|
+
clear() {
|
|
230
|
+
this.viewModels.clear();
|
|
231
|
+
this.xamlFiles.clear();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Factory function
|
|
236
|
+
*/
|
|
237
|
+
export function createDataContextResolver() {
|
|
238
|
+
return new DataContextResolver();
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=datacontext-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datacontext-resolver.js","sourceRoot":"","sources":["../../../src/wpf/linkers/datacontext-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewModel Linker
|
|
3
|
+
*
|
|
4
|
+
* Links XAML bindings to ViewModel properties and commands.
|
|
5
|
+
* Creates edges for the call graph integration.
|
|
6
|
+
*/
|
|
7
|
+
import type { ViewModelLink, XamlExtractionResult, ViewModelAnalysis, SourceLocation } from '../types.js';
|
|
8
|
+
import { DataContextResolver } from './datacontext-resolver.js';
|
|
9
|
+
export interface LinkingResult {
|
|
10
|
+
/** Successfully linked bindings */
|
|
11
|
+
links: ViewModelLink[];
|
|
12
|
+
/** Unresolved bindings */
|
|
13
|
+
unresolved: UnresolvedBinding[];
|
|
14
|
+
/** Statistics */
|
|
15
|
+
stats: LinkingStats;
|
|
16
|
+
}
|
|
17
|
+
export interface UnresolvedBinding {
|
|
18
|
+
/** XAML file */
|
|
19
|
+
xamlFile: string;
|
|
20
|
+
/** Binding path */
|
|
21
|
+
bindingPath: string;
|
|
22
|
+
/** Reason for failure */
|
|
23
|
+
reason: string;
|
|
24
|
+
/** Suggested fix */
|
|
25
|
+
suggestion?: string | undefined;
|
|
26
|
+
/** Location */
|
|
27
|
+
location: SourceLocation;
|
|
28
|
+
}
|
|
29
|
+
export interface LinkingStats {
|
|
30
|
+
/** Total bindings processed */
|
|
31
|
+
totalBindings: number;
|
|
32
|
+
/** Successfully linked */
|
|
33
|
+
linkedCount: number;
|
|
34
|
+
/** Unresolved */
|
|
35
|
+
unresolvedCount: number;
|
|
36
|
+
/** Link rate */
|
|
37
|
+
linkRate: number;
|
|
38
|
+
}
|
|
39
|
+
export declare class ViewModelLinker {
|
|
40
|
+
private resolver;
|
|
41
|
+
constructor(resolver?: DataContextResolver);
|
|
42
|
+
/**
|
|
43
|
+
* Link all bindings in a XAML file to ViewModel properties
|
|
44
|
+
*/
|
|
45
|
+
linkBindings(xamlPath: string, xamlResult: XamlExtractionResult, viewModel: ViewModelAnalysis | null): LinkingResult;
|
|
46
|
+
/**
|
|
47
|
+
* Link a single binding to ViewModel property
|
|
48
|
+
*/
|
|
49
|
+
private linkBinding;
|
|
50
|
+
/**
|
|
51
|
+
* Link a command binding to ViewModel command
|
|
52
|
+
*/
|
|
53
|
+
private linkCommand;
|
|
54
|
+
/**
|
|
55
|
+
* Find similar property name for suggestions
|
|
56
|
+
*/
|
|
57
|
+
private findSimilarProperty;
|
|
58
|
+
/**
|
|
59
|
+
* Find similar command name for suggestions
|
|
60
|
+
*/
|
|
61
|
+
private findSimilarCommand;
|
|
62
|
+
/**
|
|
63
|
+
* Get the DataContext resolver
|
|
64
|
+
*/
|
|
65
|
+
getResolver(): DataContextResolver;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Factory function
|
|
69
|
+
*/
|
|
70
|
+
export declare function createViewModelLinker(resolver?: DataContextResolver): ViewModelLinker;
|
|
71
|
+
//# sourceMappingURL=viewmodel-linker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewmodel-linker.d.ts","sourceRoot":"","sources":["../../../src/wpf/linkers/viewmodel-linker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EAGjB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMhE,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,0BAA0B;IAC1B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,iBAAiB;IACjB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,eAAe;IACf,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAsB;gBAE1B,QAAQ,CAAC,EAAE,mBAAmB;IAI1C;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAClC,aAAa;IAsChB;;OAEG;IACH,OAAO,CAAC,WAAW;IAiHnB;;OAEG;IACH,OAAO,CAAC,WAAW;IA0EnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,WAAW,IAAI,mBAAmB;CAGnC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAErF"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewModel Linker
|
|
3
|
+
*
|
|
4
|
+
* Links XAML bindings to ViewModel properties and commands.
|
|
5
|
+
* Creates edges for the call graph integration.
|
|
6
|
+
*/
|
|
7
|
+
import { DataContextResolver } from './datacontext-resolver.js';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// ViewModel Linker
|
|
10
|
+
// ============================================================================
|
|
11
|
+
export class ViewModelLinker {
|
|
12
|
+
resolver;
|
|
13
|
+
constructor(resolver) {
|
|
14
|
+
this.resolver = resolver ?? new DataContextResolver();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Link all bindings in a XAML file to ViewModel properties
|
|
18
|
+
*/
|
|
19
|
+
linkBindings(xamlPath, xamlResult, viewModel) {
|
|
20
|
+
const links = [];
|
|
21
|
+
const unresolved = [];
|
|
22
|
+
// Process data bindings
|
|
23
|
+
for (const binding of xamlResult.bindings) {
|
|
24
|
+
const result = this.linkBinding(xamlPath, binding, viewModel);
|
|
25
|
+
if (result.link) {
|
|
26
|
+
links.push(result.link);
|
|
27
|
+
}
|
|
28
|
+
else if (result.unresolved) {
|
|
29
|
+
unresolved.push(result.unresolved);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Process command bindings
|
|
33
|
+
for (const command of xamlResult.commands) {
|
|
34
|
+
const result = this.linkCommand(xamlPath, command, viewModel);
|
|
35
|
+
if (result.link) {
|
|
36
|
+
links.push(result.link);
|
|
37
|
+
}
|
|
38
|
+
else if (result.unresolved) {
|
|
39
|
+
unresolved.push(result.unresolved);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const totalBindings = xamlResult.bindings.length + xamlResult.commands.length;
|
|
43
|
+
return {
|
|
44
|
+
links,
|
|
45
|
+
unresolved,
|
|
46
|
+
stats: {
|
|
47
|
+
totalBindings,
|
|
48
|
+
linkedCount: links.length,
|
|
49
|
+
unresolvedCount: unresolved.length,
|
|
50
|
+
linkRate: totalBindings > 0 ? links.length / totalBindings : 1,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Link a single binding to ViewModel property
|
|
56
|
+
*/
|
|
57
|
+
linkBinding(xamlPath, binding, viewModel) {
|
|
58
|
+
const bindingPath = binding.parsed.path;
|
|
59
|
+
if (!bindingPath) {
|
|
60
|
+
return {
|
|
61
|
+
unresolved: {
|
|
62
|
+
xamlFile: xamlPath,
|
|
63
|
+
bindingPath: binding.bindingExpression,
|
|
64
|
+
reason: 'Empty binding path',
|
|
65
|
+
location: binding.location,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (!viewModel) {
|
|
70
|
+
return {
|
|
71
|
+
unresolved: {
|
|
72
|
+
xamlFile: xamlPath,
|
|
73
|
+
bindingPath,
|
|
74
|
+
reason: 'Could not resolve DataContext',
|
|
75
|
+
location: binding.location,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Handle nested paths (e.g., "User.Name")
|
|
80
|
+
const pathParts = bindingPath.split('.');
|
|
81
|
+
const propertyName = pathParts[0];
|
|
82
|
+
if (!propertyName) {
|
|
83
|
+
return {
|
|
84
|
+
unresolved: {
|
|
85
|
+
xamlFile: xamlPath,
|
|
86
|
+
bindingPath,
|
|
87
|
+
reason: 'Invalid binding path',
|
|
88
|
+
location: binding.location,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// Find property in ViewModel
|
|
93
|
+
const property = viewModel.properties.find(p => p.name === propertyName);
|
|
94
|
+
if (!property) {
|
|
95
|
+
// Check if it's a command being used as a binding (unusual but possible)
|
|
96
|
+
const command = viewModel.commands.find(c => c.name === propertyName);
|
|
97
|
+
if (command) {
|
|
98
|
+
return {
|
|
99
|
+
link: {
|
|
100
|
+
xamlFile: xamlPath,
|
|
101
|
+
xamlElement: binding.elementName,
|
|
102
|
+
bindingPath,
|
|
103
|
+
viewModelClass: viewModel.className,
|
|
104
|
+
viewModelProperty: command.name,
|
|
105
|
+
propertyType: command.commandType,
|
|
106
|
+
notifiesChange: false,
|
|
107
|
+
locations: {
|
|
108
|
+
xaml: binding.location,
|
|
109
|
+
csharp: command.location,
|
|
110
|
+
},
|
|
111
|
+
confidence: 0.8,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Property not found
|
|
116
|
+
const suggestion = this.findSimilarProperty(propertyName, viewModel);
|
|
117
|
+
return {
|
|
118
|
+
unresolved: {
|
|
119
|
+
xamlFile: xamlPath,
|
|
120
|
+
bindingPath,
|
|
121
|
+
reason: `Property '${propertyName}' not found in ${viewModel.className}`,
|
|
122
|
+
suggestion: suggestion ? `Did you mean '${suggestion}'?` : undefined,
|
|
123
|
+
location: binding.location,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Check for TwoWay binding on readonly property
|
|
128
|
+
if (binding.parsed.mode === 'TwoWay' && !property.hasSetter) {
|
|
129
|
+
return {
|
|
130
|
+
unresolved: {
|
|
131
|
+
xamlFile: xamlPath,
|
|
132
|
+
bindingPath,
|
|
133
|
+
reason: `TwoWay binding on readonly property '${propertyName}'`,
|
|
134
|
+
suggestion: 'Change binding mode to OneWay or add setter to property',
|
|
135
|
+
location: binding.location,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
link: {
|
|
141
|
+
xamlFile: xamlPath,
|
|
142
|
+
xamlElement: binding.elementName,
|
|
143
|
+
bindingPath,
|
|
144
|
+
viewModelClass: viewModel.className,
|
|
145
|
+
viewModelProperty: property.name,
|
|
146
|
+
propertyType: property.type,
|
|
147
|
+
notifiesChange: property.raisesPropertyChanged,
|
|
148
|
+
locations: {
|
|
149
|
+
xaml: binding.location,
|
|
150
|
+
csharp: property.location,
|
|
151
|
+
},
|
|
152
|
+
confidence: 0.9,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Link a command binding to ViewModel command
|
|
158
|
+
*/
|
|
159
|
+
linkCommand(xamlPath, command, viewModel) {
|
|
160
|
+
const commandPath = command.binding;
|
|
161
|
+
if (!viewModel) {
|
|
162
|
+
return {
|
|
163
|
+
unresolved: {
|
|
164
|
+
xamlFile: xamlPath,
|
|
165
|
+
bindingPath: commandPath,
|
|
166
|
+
reason: 'Could not resolve DataContext',
|
|
167
|
+
location: command.location,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Find command in ViewModel
|
|
172
|
+
const vmCommand = viewModel.commands.find(c => c.name === commandPath);
|
|
173
|
+
if (!vmCommand) {
|
|
174
|
+
// Check if it's a property that might be a command
|
|
175
|
+
const property = viewModel.properties.find(p => p.name === commandPath);
|
|
176
|
+
if (property && property.type.includes('Command')) {
|
|
177
|
+
return {
|
|
178
|
+
link: {
|
|
179
|
+
xamlFile: xamlPath,
|
|
180
|
+
xamlElement: command.elementName,
|
|
181
|
+
bindingPath: commandPath,
|
|
182
|
+
viewModelClass: viewModel.className,
|
|
183
|
+
viewModelProperty: property.name,
|
|
184
|
+
propertyType: property.type,
|
|
185
|
+
notifiesChange: false,
|
|
186
|
+
locations: {
|
|
187
|
+
xaml: command.location,
|
|
188
|
+
csharp: property.location,
|
|
189
|
+
},
|
|
190
|
+
confidence: 0.85,
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// Command not found
|
|
195
|
+
const suggestion = this.findSimilarCommand(commandPath, viewModel);
|
|
196
|
+
return {
|
|
197
|
+
unresolved: {
|
|
198
|
+
xamlFile: xamlPath,
|
|
199
|
+
bindingPath: commandPath,
|
|
200
|
+
reason: `Command '${commandPath}' not found in ${viewModel.className}`,
|
|
201
|
+
suggestion: suggestion ? `Did you mean '${suggestion}'?` : undefined,
|
|
202
|
+
location: command.location,
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
link: {
|
|
208
|
+
xamlFile: xamlPath,
|
|
209
|
+
xamlElement: command.elementName,
|
|
210
|
+
bindingPath: commandPath,
|
|
211
|
+
viewModelClass: viewModel.className,
|
|
212
|
+
viewModelProperty: vmCommand.name,
|
|
213
|
+
propertyType: vmCommand.commandType,
|
|
214
|
+
notifiesChange: false,
|
|
215
|
+
locations: {
|
|
216
|
+
xaml: command.location,
|
|
217
|
+
csharp: vmCommand.location,
|
|
218
|
+
},
|
|
219
|
+
confidence: 0.95,
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Find similar property name for suggestions
|
|
225
|
+
*/
|
|
226
|
+
findSimilarProperty(name, viewModel) {
|
|
227
|
+
const lowerName = name.toLowerCase();
|
|
228
|
+
const candidates = viewModel.properties.map(p => p.name);
|
|
229
|
+
for (const candidate of candidates) {
|
|
230
|
+
const lowerCandidate = candidate.toLowerCase();
|
|
231
|
+
if (lowerCandidate.startsWith(lowerName.slice(0, 3)) ||
|
|
232
|
+
lowerCandidate.includes(lowerName) ||
|
|
233
|
+
lowerName.includes(lowerCandidate)) {
|
|
234
|
+
return candidate;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Find similar command name for suggestions
|
|
241
|
+
*/
|
|
242
|
+
findSimilarCommand(name, viewModel) {
|
|
243
|
+
const lowerName = name.toLowerCase();
|
|
244
|
+
const candidates = viewModel.commands.map(c => c.name);
|
|
245
|
+
for (const candidate of candidates) {
|
|
246
|
+
const lowerCandidate = candidate.toLowerCase();
|
|
247
|
+
if (lowerCandidate.startsWith(lowerName.slice(0, 3)) ||
|
|
248
|
+
lowerCandidate.includes(lowerName) ||
|
|
249
|
+
lowerName.includes(lowerCandidate)) {
|
|
250
|
+
return candidate;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get the DataContext resolver
|
|
257
|
+
*/
|
|
258
|
+
getResolver() {
|
|
259
|
+
return this.resolver;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Factory function
|
|
264
|
+
*/
|
|
265
|
+
export function createViewModelLinker(resolver) {
|
|
266
|
+
return new ViewModelLinker(resolver);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=viewmodel-linker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewmodel-linker.js","sourceRoot":"","sources":["../../../src/wpf/linkers/viewmodel-linker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAuChE,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,OAAO,eAAe;IAClB,QAAQ,CAAsB;IAEtC,YAAY,QAA8B;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,mBAAmB,EAAE,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,YAAY,CACV,QAAgB,EAChB,UAAgC,EAChC,SAAmC;QAEnC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAwB,EAAE,CAAC;QAE3C,wBAAwB;QACxB,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC7B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC7B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE9E,OAAO;YACL,KAAK;YACL,UAAU;YACV,KAAK,EAAE;gBACL,aAAa;gBACb,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,eAAe,EAAE,UAAU,CAAC,MAAM;gBAClC,QAAQ,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;aAC/D;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,QAAgB,EAChB,OAAyB,EACzB,SAAmC;QAEnC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAExC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;gBACL,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,OAAO,CAAC,iBAAiB;oBACtC,MAAM,EAAE,oBAAoB;oBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,WAAW;oBACX,MAAM,EAAE,+BAA+B;oBACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B;aACF,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAElC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,WAAW;oBACX,MAAM,EAAE,sBAAsB;oBAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B;aACF,CAAC;QACJ,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAEzE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,yEAAyE;YACzE,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;YACtE,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;oBACL,IAAI,EAAE;wBACJ,QAAQ,EAAE,QAAQ;wBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,WAAW;wBACX,cAAc,EAAE,SAAS,CAAC,SAAS;wBACnC,iBAAiB,EAAE,OAAO,CAAC,IAAI;wBAC/B,YAAY,EAAE,OAAO,CAAC,WAAW;wBACjC,cAAc,EAAE,KAAK;wBACrB,SAAS,EAAE;4BACT,IAAI,EAAE,OAAO,CAAC,QAAQ;4BACtB,MAAM,EAAE,OAAO,CAAC,QAAQ;yBACzB;wBACD,UAAU,EAAE,GAAG;qBAChB;iBACF,CAAC;YACJ,CAAC;YAED,qBAAqB;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACrE,OAAO;gBACL,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,WAAW;oBACX,MAAM,EAAE,aAAa,YAAY,kBAAkB,SAAS,CAAC,SAAS,EAAE;oBACxE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,iBAAiB,UAAU,IAAI,CAAC,CAAC,CAAC,SAAS;oBACpE,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B;aACF,CAAC;QACJ,CAAC;QAED,gDAAgD;QAChD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC5D,OAAO;gBACL,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,WAAW;oBACX,MAAM,EAAE,wCAAwC,YAAY,GAAG;oBAC/D,UAAU,EAAE,yDAAyD;oBACrE,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE;gBACJ,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,WAAW;gBACX,cAAc,EAAE,SAAS,CAAC,SAAS;gBACnC,iBAAiB,EAAE,QAAQ,CAAC,IAAI;gBAChC,YAAY,EAAE,QAAQ,CAAC,IAAI;gBAC3B,cAAc,EAAE,QAAQ,CAAC,qBAAqB;gBAC9C,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO,CAAC,QAAQ;oBACtB,MAAM,EAAE,QAAQ,CAAC,QAAQ;iBAC1B;gBACD,UAAU,EAAE,GAAG;aAChB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,QAAgB,EAChB,OAAyB,EACzB,SAAmC;QAEnC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;QAEpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,WAAW;oBACxB,MAAM,EAAE,+BAA+B;oBACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B;aACF,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAEvE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,mDAAmD;YACnD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;YACxE,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClD,OAAO;oBACL,IAAI,EAAE;wBACJ,QAAQ,EAAE,QAAQ;wBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,WAAW,EAAE,WAAW;wBACxB,cAAc,EAAE,SAAS,CAAC,SAAS;wBACnC,iBAAiB,EAAE,QAAQ,CAAC,IAAI;wBAChC,YAAY,EAAE,QAAQ,CAAC,IAAI;wBAC3B,cAAc,EAAE,KAAK;wBACrB,SAAS,EAAE;4BACT,IAAI,EAAE,OAAO,CAAC,QAAQ;4BACtB,MAAM,EAAE,QAAQ,CAAC,QAAQ;yBAC1B;wBACD,UAAU,EAAE,IAAI;qBACjB;iBACF,CAAC;YACJ,CAAC;YAED,oBAAoB;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACnE,OAAO;gBACL,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,WAAW;oBACxB,MAAM,EAAE,YAAY,WAAW,kBAAkB,SAAS,CAAC,SAAS,EAAE;oBACtE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,iBAAiB,UAAU,IAAI,CAAC,CAAC,CAAC,SAAS;oBACpE,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE;gBACJ,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,WAAW,EAAE,WAAW;gBACxB,cAAc,EAAE,SAAS,CAAC,SAAS;gBACnC,iBAAiB,EAAE,SAAS,CAAC,IAAI;gBACjC,YAAY,EAAE,SAAS,CAAC,WAAW;gBACnC,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO,CAAC,QAAQ;oBACtB,MAAM,EAAE,SAAS,CAAC,QAAQ;iBAC3B;gBACD,UAAU,EAAE,IAAI;aACjB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY,EAAE,SAA4B;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEzD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChD,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAClC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,IAAY,EAAE,SAA4B;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChD,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAClC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA8B;IAClE,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC"}
|