code-auditor-mcp 3.1.1 → 3.4.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +724 -1
- package/README.md +85 -11
- package/dist/__test_tmp__/spec18_test.d.ts +2 -0
- package/dist/__test_tmp__/spec18_test.d.ts.map +1 -0
- package/dist/__test_tmp__/spec18_test.js +5 -0
- package/dist/__test_tmp__/spec18_test.js.map +1 -0
- package/dist/__tests__/fixtures/spec-20/scripts/tool.d.ts +6 -0
- package/dist/__tests__/fixtures/spec-20/scripts/tool.d.ts.map +1 -0
- package/dist/__tests__/fixtures/spec-20/scripts/tool.js +12 -0
- package/dist/__tests__/fixtures/spec-20/scripts/tool.js.map +1 -0
- package/dist/__tests__/fixtures/spec-20/src/demo-module.d.ts +7 -0
- package/dist/__tests__/fixtures/spec-20/src/demo-module.d.ts.map +1 -0
- package/dist/__tests__/fixtures/spec-20/src/demo-module.js +13 -0
- package/dist/__tests__/fixtures/spec-20/src/demo-module.js.map +1 -0
- package/dist/analyzers/analyzerUtils.js +2 -2
- package/dist/analyzers/analyzerUtils.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +2 -2
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +3 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +3 -3
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +2 -2
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +83 -0
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +611 -0
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -0
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +8 -4
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/orm/adapterRegistry.d.ts +41 -0
- package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -0
- package/dist/analyzers/orm/adapterRegistry.js +73 -0
- package/dist/analyzers/orm/adapterRegistry.js.map +1 -0
- package/dist/analyzers/orm/drizzleAdapter.d.ts +42 -0
- package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -0
- package/dist/analyzers/orm/drizzleAdapter.js +166 -0
- package/dist/analyzers/orm/drizzleAdapter.js.map +1 -0
- package/dist/analyzers/orm/index.d.ts +14 -0
- package/dist/analyzers/orm/index.d.ts.map +1 -0
- package/dist/analyzers/orm/index.js +24 -0
- package/dist/analyzers/orm/index.js.map +1 -0
- package/dist/analyzers/orm/prismaAdapter.d.ts +45 -0
- package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -0
- package/dist/analyzers/orm/prismaAdapter.js +170 -0
- package/dist/analyzers/orm/prismaAdapter.js.map +1 -0
- package/dist/analyzers/orm/types.d.ts +63 -0
- package/dist/analyzers/orm/types.d.ts.map +1 -0
- package/dist/analyzers/orm/types.js +10 -0
- package/dist/analyzers/orm/types.js.map +1 -0
- package/dist/analyzers/provenance.d.ts +133 -0
- package/dist/analyzers/provenance.d.ts.map +1 -0
- package/dist/analyzers/provenance.js +1041 -0
- package/dist/analyzers/provenance.js.map +1 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +117 -1
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts +38 -0
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -0
- package/dist/analyzers/ruleRegistry.js +123 -0
- package/dist/analyzers/ruleRegistry.js.map +1 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +58 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +445 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +52 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +108 -26
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +64 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +259 -53
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +5 -15
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +10 -10
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +25 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +250 -59
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +103 -0
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +750 -0
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +499 -4
- package/dist/auditRunner.js.map +1 -1
- package/dist/baseline.d.ts +98 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +184 -0
- package/dist/baseline.js.map +1 -0
- package/dist/churn/churnExtractor.d.ts +32 -0
- package/dist/churn/churnExtractor.d.ts.map +1 -0
- package/dist/churn/churnExtractor.js +264 -0
- package/dist/churn/churnExtractor.js.map +1 -0
- package/dist/cli.js +1218 -11
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB-enhanced.js +1 -1
- package/dist/codeIndexDB-enhanced.js.map +1 -1
- package/dist/codeIndexDB.d.ts +101 -0
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +665 -5
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +104 -7
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +72 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +146 -15
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/pathProfiles.d.ts +38 -0
- package/dist/config/pathProfiles.d.ts.map +1 -0
- package/dist/config/pathProfiles.js +47 -0
- package/dist/config/pathProfiles.js.map +1 -0
- package/dist/conventions/conventionMiner.d.ts +63 -0
- package/dist/conventions/conventionMiner.d.ts.map +1 -0
- package/dist/conventions/conventionMiner.js +696 -0
- package/dist/conventions/conventionMiner.js.map +1 -0
- package/dist/coverage/coverageService.d.ts +49 -0
- package/dist/coverage/coverageService.d.ts.map +1 -0
- package/dist/coverage/coverageService.js +117 -0
- package/dist/coverage/coverageService.js.map +1 -0
- package/dist/coverage/istanbulParser.d.ts +84 -0
- package/dist/coverage/istanbulParser.d.ts.map +1 -0
- package/dist/coverage/istanbulParser.js +120 -0
- package/dist/coverage/istanbulParser.js.map +1 -0
- package/dist/coverage/lcovParser.d.ts +40 -0
- package/dist/coverage/lcovParser.d.ts.map +1 -0
- package/dist/coverage/lcovParser.js +168 -0
- package/dist/coverage/lcovParser.js.map +1 -0
- package/dist/fingerprint.d.ts +17 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +42 -0
- package/dist/fingerprint.js.map +1 -1
- package/dist/grammars/tree-sitter-css.wasm +0 -0
- package/dist/graph/blastRadius.d.ts +27 -0
- package/dist/graph/blastRadius.d.ts.map +1 -0
- package/dist/graph/blastRadius.js +150 -0
- package/dist/graph/blastRadius.js.map +1 -0
- package/dist/graph/callGraph.d.ts +78 -0
- package/dist/graph/callGraph.d.ts.map +1 -0
- package/dist/graph/callGraph.js +484 -0
- package/dist/graph/callGraph.js.map +1 -0
- package/dist/graph/importGraph.d.ts +91 -0
- package/dist/graph/importGraph.d.ts.map +1 -0
- package/dist/graph/importGraph.js +602 -0
- package/dist/graph/importGraph.js.map +1 -0
- package/dist/graph/outputFormatter.d.ts +55 -0
- package/dist/graph/outputFormatter.d.ts.map +1 -0
- package/dist/graph/outputFormatter.js +283 -0
- package/dist/graph/outputFormatter.js.map +1 -0
- package/dist/hooks/codex.d.ts +36 -1
- package/dist/hooks/codex.d.ts.map +1 -1
- package/dist/hooks/codex.js +88 -54
- package/dist/hooks/codex.js.map +1 -1
- package/dist/hotspots/hotspotScorer.d.ts +20 -0
- package/dist/hotspots/hotspotScorer.d.ts.map +1 -0
- package/dist/hotspots/hotspotScorer.js +202 -0
- package/dist/hotspots/hotspotScorer.js.map +1 -0
- package/dist/invariants/invariant-rules.schema.json +42 -1
- package/dist/invariants/ruleEngine.d.ts +4 -1
- package/dist/invariants/ruleEngine.d.ts.map +1 -1
- package/dist/invariants/ruleEngine.js +141 -5
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/invariants/ruleValidator.d.ts.map +1 -1
- package/dist/invariants/ruleValidator.js +62 -1
- package/dist/invariants/ruleValidator.js.map +1 -1
- package/dist/invariants/types.d.ts +23 -2
- package/dist/invariants/types.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js +61 -4
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/index.d.ts +1 -0
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +3 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +59 -0
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -0
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +236 -0
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -0
- package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
- package/dist/languages/tree-sitter/parser.js +2 -0
- package/dist/languages/tree-sitter/parser.js.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +61 -10
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/ledger.d.ts +128 -0
- package/dist/ledger.d.ts.map +1 -0
- package/dist/ledger.js +345 -0
- package/dist/ledger.js.map +1 -0
- package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
- package/dist/mcp-tools/projectTasks.js +9 -14
- package/dist/mcp-tools/projectTasks.js.map +1 -1
- package/dist/mcp.js +0 -0
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +3 -0
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/csvReportGenerator.js +7 -1
- package/dist/reporting/csvReportGenerator.js.map +1 -1
- package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
- package/dist/reporting/htmlReportGenerator.js +5 -1
- package/dist/reporting/htmlReportGenerator.js.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +10 -2
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +17 -17
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/scripts/runBench.d.ts +94 -0
- package/dist/scripts/runBench.d.ts.map +1 -0
- package/dist/scripts/runBench.js +1559 -0
- package/dist/scripts/runBench.js.map +1 -0
- package/dist/search/QueryParser.d.ts.map +1 -1
- package/dist/search/QueryParser.js +51 -4
- package/dist/search/QueryParser.js.map +1 -1
- package/dist/services/CodeMapGenerator.d.ts +33 -0
- package/dist/services/CodeMapGenerator.d.ts.map +1 -1
- package/dist/services/CodeMapGenerator.js +404 -0
- package/dist/services/CodeMapGenerator.js.map +1 -1
- package/dist/styles/normalizer.d.ts +37 -0
- package/dist/styles/normalizer.d.ts.map +1 -0
- package/dist/styles/normalizer.js +301 -0
- package/dist/styles/normalizer.js.map +1 -0
- package/dist/styles/styleExtractor.d.ts +38 -0
- package/dist/styles/styleExtractor.d.ts.map +1 -0
- package/dist/styles/styleExtractor.js +630 -0
- package/dist/styles/styleExtractor.js.map +1 -0
- package/dist/styles/styleIndexer.d.ts +35 -0
- package/dist/styles/styleIndexer.d.ts.map +1 -0
- package/dist/styles/styleIndexer.js +266 -0
- package/dist/styles/styleIndexer.js.map +1 -0
- package/dist/styles/tailwindConfigLoader.d.ts +38 -0
- package/dist/styles/tailwindConfigLoader.d.ts.map +1 -0
- package/dist/styles/tailwindConfigLoader.js +374 -0
- package/dist/styles/tailwindConfigLoader.js.map +1 -0
- package/dist/styles/tailwindExpander.d.ts +38 -0
- package/dist/styles/tailwindExpander.d.ts.map +1 -0
- package/dist/styles/tailwindExpander.js +637 -0
- package/dist/styles/tailwindExpander.js.map +1 -0
- package/dist/styles/types.d.ts +92 -0
- package/dist/styles/types.d.ts.map +1 -0
- package/dist/styles/types.js +10 -0
- package/dist/styles/types.js.map +1 -0
- package/dist/symbols.d.ts +21 -0
- package/dist/symbols.d.ts.map +1 -0
- package/dist/symbols.js +31 -0
- package/dist/symbols.js.map +1 -0
- package/dist/types.d.ts +326 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +1 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +8 -2
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/package.json +9 -5
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/scripts/hook-audit.sh +5 -1
- package/plugin/skills/code-auditor/SKILL.md +51 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts +0 -21
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js +0 -21
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js +0 -12
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts +0 -11
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js +0 -22
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts +0 -9
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js +0 -18
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js +0 -16
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts +0 -14
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js +0 -18
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js +0 -22
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js +0 -20
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts +0 -18
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js +0 -28
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts +0 -11
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js +0 -31
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts +0 -11
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js +0 -18
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts +0 -13
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js +0 -61
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js +0 -15
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts +0 -11
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js +0 -49
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js +0 -19
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts +0 -37
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js +0 -73
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts +0 -12
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js +0 -82
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts +0 -10
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts.map +0 -1
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js +0 -15
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js.map +0 -1
- package/dist/analyzers/dataAccessAnalyzer.d.ts +0 -46
- package/dist/analyzers/dataAccessAnalyzer.d.ts.map +0 -1
- package/dist/analyzers/dataAccessAnalyzer.js +0 -474
- package/dist/analyzers/dataAccessAnalyzer.js.map +0 -1
- package/dist/analyzers/dryAnalyzer.d.ts +0 -31
- package/dist/analyzers/dryAnalyzer.d.ts.map +0 -1
- package/dist/analyzers/dryAnalyzer.js +0 -734
- package/dist/analyzers/dryAnalyzer.js.map +0 -1
- package/dist/analyzers/schemaAnalyzer.d.ts +0 -23
- package/dist/analyzers/schemaAnalyzer.d.ts.map +0 -1
- package/dist/analyzers/schemaAnalyzer.js +0 -564
- package/dist/analyzers/schemaAnalyzer.js.map +0 -1
- package/dist/analyzers/solidAnalyzer.d.ts +0 -33
- package/dist/analyzers/solidAnalyzer.d.ts.map +0 -1
- package/dist/analyzers/solidAnalyzer.js +0 -847
- package/dist/analyzers/solidAnalyzer.js.map +0 -1
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma ORM Adapter — Spec 15 R2
|
|
3
|
+
*
|
|
4
|
+
* Extracts table references and schema definitions from Prisma ORM code:
|
|
5
|
+
*
|
|
6
|
+
* Schema: model User { ... } blocks in schema.prisma files
|
|
7
|
+
* Queries: prisma.user.findMany(), prisma.user.create(...),
|
|
8
|
+
* prisma.user.update(...), prisma.user.delete(...)
|
|
9
|
+
*/
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Prisma CRUD operation → usage type mapping
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
const PRISMA_OPERATIONS = {
|
|
14
|
+
findUnique: 'select',
|
|
15
|
+
findFirst: 'select',
|
|
16
|
+
findMany: 'select',
|
|
17
|
+
findFirstOrThrow: 'select',
|
|
18
|
+
findUniqueOrThrow: 'select',
|
|
19
|
+
count: 'select',
|
|
20
|
+
aggregate: 'select',
|
|
21
|
+
groupBy: 'select',
|
|
22
|
+
create: 'insert',
|
|
23
|
+
createMany: 'insert',
|
|
24
|
+
upsert: 'insert',
|
|
25
|
+
update: 'update',
|
|
26
|
+
updateMany: 'update',
|
|
27
|
+
delete: 'delete',
|
|
28
|
+
deleteMany: 'delete',
|
|
29
|
+
};
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Adapter
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
export class PrismaAdapter {
|
|
34
|
+
name = 'prisma';
|
|
35
|
+
fileExtensions = ['.ts', '.tsx', '.js', '.jsx', '.prisma'];
|
|
36
|
+
supportsFile(filePath) {
|
|
37
|
+
const base = filePath.split('/').pop() ?? filePath;
|
|
38
|
+
// Content-based detection for schema files
|
|
39
|
+
if (base === 'schema.prisma' || filePath.endsWith('.prisma')) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
const ext = filePath.split('.').pop()?.toLowerCase() ?? '';
|
|
43
|
+
return this.fileExtensions.includes(`.${ext}`);
|
|
44
|
+
}
|
|
45
|
+
// ── Table references from Prisma client calls ───────────────────────────
|
|
46
|
+
extractTableReferences(ast, adapter, sourceCode) {
|
|
47
|
+
// Prisma schema files (.prisma) don't contain query calls — skip
|
|
48
|
+
if (ast.filePath.endsWith('.prisma'))
|
|
49
|
+
return [];
|
|
50
|
+
const references = [];
|
|
51
|
+
// Find all call_expression nodes
|
|
52
|
+
const calls = adapter.findNodes(ast, { type: 'call_expression' });
|
|
53
|
+
for (const call of calls) {
|
|
54
|
+
const ref = this.extractPrismaCall(call, adapter, sourceCode);
|
|
55
|
+
if (ref)
|
|
56
|
+
references.push(ref);
|
|
57
|
+
}
|
|
58
|
+
return references;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extract table + operation from prisma.modelName.operation() calls.
|
|
62
|
+
*/
|
|
63
|
+
extractPrismaCall(node, adapter, sourceCode) {
|
|
64
|
+
const text = adapter.getNodeText(node, sourceCode);
|
|
65
|
+
// Match prisma.modelName.operation(...)
|
|
66
|
+
const match = text.match(/prisma\s*\.\s*(\w+)\s*\.\s*(\w+)\s*\(/);
|
|
67
|
+
if (!match)
|
|
68
|
+
return null;
|
|
69
|
+
const modelName = match[1]; // e.g. "user"
|
|
70
|
+
const operation = match[2]; // e.g. "findMany"
|
|
71
|
+
// Only handle known CRUD operations
|
|
72
|
+
const usageType = PRISMA_OPERATIONS[operation];
|
|
73
|
+
if (!usageType)
|
|
74
|
+
return null;
|
|
75
|
+
return {
|
|
76
|
+
table: modelName,
|
|
77
|
+
type: usageType,
|
|
78
|
+
location: node.location.start,
|
|
79
|
+
context: match[0],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// ── Schema definitions from schema.prisma ───────────────────────────────
|
|
83
|
+
extractSchemaDefinitions(ast, adapter, sourceCode) {
|
|
84
|
+
// Only extract from .prisma schema files
|
|
85
|
+
if (!ast.filePath.endsWith('.prisma') && !ast.filePath.endsWith('schema.prisma')) {
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
return this.parsePrismaSchema(sourceCode);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Parse model blocks from a Prisma schema file.
|
|
92
|
+
*
|
|
93
|
+
* Prisma schema syntax:
|
|
94
|
+
* model User {
|
|
95
|
+
* id Int @id @default(autoincrement())
|
|
96
|
+
* email String @unique
|
|
97
|
+
* name String?
|
|
98
|
+
* createdAt DateTime @default(now())
|
|
99
|
+
* }
|
|
100
|
+
*/
|
|
101
|
+
parsePrismaSchema(sourceCode) {
|
|
102
|
+
const definitions = [];
|
|
103
|
+
// Match model blocks: model Name { ... }
|
|
104
|
+
// Uses a simple brace-aware parser for Prisma's declarative syntax.
|
|
105
|
+
const modelRegex = /model\s+(\w+)\s*\{/g;
|
|
106
|
+
let match;
|
|
107
|
+
while ((match = modelRegex.exec(sourceCode)) !== null) {
|
|
108
|
+
const modelName = match[1];
|
|
109
|
+
const blockStart = match.index + match[0].length;
|
|
110
|
+
// Find closing brace (brace-aware)
|
|
111
|
+
const blockEnd = this.findMatchingBrace(sourceCode, blockStart - 1);
|
|
112
|
+
if (blockEnd === -1)
|
|
113
|
+
continue;
|
|
114
|
+
const blockBody = sourceCode.slice(blockStart, blockEnd);
|
|
115
|
+
// Count lines before this model to compute its line number
|
|
116
|
+
const lineNumber = sourceCode.slice(0, match.index).split('\n').length;
|
|
117
|
+
const columns = this.parseModelFields(blockBody);
|
|
118
|
+
definitions.push({
|
|
119
|
+
tableName: modelName,
|
|
120
|
+
columns,
|
|
121
|
+
location: { line: lineNumber, column: 1 },
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return definitions;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Find the matching closing brace starting from the opening brace position.
|
|
128
|
+
*/
|
|
129
|
+
findMatchingBrace(text, openBraceIndex) {
|
|
130
|
+
let depth = 1;
|
|
131
|
+
for (let i = openBraceIndex + 1; i < text.length; i++) {
|
|
132
|
+
if (text[i] === '{')
|
|
133
|
+
depth++;
|
|
134
|
+
else if (text[i] === '}') {
|
|
135
|
+
depth--;
|
|
136
|
+
if (depth === 0)
|
|
137
|
+
return i;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return -1;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Parse individual field definitions from a model body.
|
|
144
|
+
*
|
|
145
|
+
* Each field: fieldName FieldType @attributes...
|
|
146
|
+
*/
|
|
147
|
+
parseModelFields(body) {
|
|
148
|
+
const fields = [];
|
|
149
|
+
const lines = body.split('\n');
|
|
150
|
+
for (const line of lines) {
|
|
151
|
+
const trimmed = line.trim();
|
|
152
|
+
if (!trimmed || trimmed.startsWith('//') || trimmed.startsWith('@@')) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
// Match: fieldName FieldType ...
|
|
156
|
+
const fieldMatch = trimmed.match(/^(\w+)\s+(\w+)(\?)?/);
|
|
157
|
+
if (!fieldMatch)
|
|
158
|
+
continue;
|
|
159
|
+
const fieldName = fieldMatch[1];
|
|
160
|
+
let fieldType = fieldMatch[2];
|
|
161
|
+
const optional = fieldMatch[3]; // "?" suffix
|
|
162
|
+
if (optional)
|
|
163
|
+
fieldType += '?';
|
|
164
|
+
// Skip relation fields (types that are other model names are still valid)
|
|
165
|
+
fields.push({ name: fieldName, type: fieldType });
|
|
166
|
+
}
|
|
167
|
+
return fields;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=prismaAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prismaAdapter.js","sourceRoot":"","sources":["../../../src/analyzers/orm/prismaAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ORM Adapter Types — Spec 15 R2
|
|
3
|
+
*
|
|
4
|
+
* ORM adapters extract table references and schema definitions from
|
|
5
|
+
* ORM-specific source code patterns (Drizzle, Prisma). They complement
|
|
6
|
+
* the raw-SQL extraction in UniversalSchemaAnalyzer, feeding into the
|
|
7
|
+
* schema_usage table for cross-domain lifecycle analysis.
|
|
8
|
+
*/
|
|
9
|
+
import type { AST, LanguageAdapter } from '../../languages/types.js';
|
|
10
|
+
export interface OrmTableReference {
|
|
11
|
+
table: string;
|
|
12
|
+
type: 'select' | 'insert' | 'update' | 'delete' | 'create' | 'reference';
|
|
13
|
+
location: {
|
|
14
|
+
line: number;
|
|
15
|
+
column: number;
|
|
16
|
+
};
|
|
17
|
+
context: string;
|
|
18
|
+
}
|
|
19
|
+
export interface OrmSchemaDefinition {
|
|
20
|
+
tableName: string;
|
|
21
|
+
columns: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
type: string;
|
|
24
|
+
}>;
|
|
25
|
+
location: {
|
|
26
|
+
line: number;
|
|
27
|
+
column: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface OrmAdapter {
|
|
31
|
+
/** Unique name for this adapter (e.g. "drizzle", "prisma") */
|
|
32
|
+
readonly name: string;
|
|
33
|
+
/** File extensions this adapter handles */
|
|
34
|
+
readonly fileExtensions: string[];
|
|
35
|
+
/**
|
|
36
|
+
* Whether this adapter can handle the given file.
|
|
37
|
+
* Default checks file extension, but adapters can override for
|
|
38
|
+
* content-based detection (e.g. Prisma checks for `schema.prisma`).
|
|
39
|
+
*/
|
|
40
|
+
supportsFile(filePath: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Extract table references from ORM-specific patterns in the AST.
|
|
43
|
+
* Called during per-file analysis when the file matches this adapter.
|
|
44
|
+
*
|
|
45
|
+
* @param ast — Parsed AST of the source file
|
|
46
|
+
* @param adapter — Language adapter for AST navigation
|
|
47
|
+
* @param sourceCode — Raw source text
|
|
48
|
+
* @returns Array of extracted table references
|
|
49
|
+
*/
|
|
50
|
+
extractTableReferences(ast: AST, adapter: LanguageAdapter, sourceCode: string): OrmTableReference[];
|
|
51
|
+
/**
|
|
52
|
+
* Extract schema/table definitions from ORM schema declarations.
|
|
53
|
+
* For Drizzle this is pgTable/mysqlTable/sqliteTable calls.
|
|
54
|
+
* For Prisma this is `model` blocks in schema.prisma.
|
|
55
|
+
*
|
|
56
|
+
* @param ast — Parsed AST of the source file
|
|
57
|
+
* @param adapter — Language adapter for AST navigation
|
|
58
|
+
* @param sourceCode — Raw source text
|
|
59
|
+
* @returns Array of extracted schema definitions
|
|
60
|
+
*/
|
|
61
|
+
extractSchemaDefinitions(ast: AST, adapter: LanguageAdapter, sourceCode: string): OrmSchemaDefinition[];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analyzers/orm/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAW,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO9E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACzE,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAMD,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAElC;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAExC;;;;;;;;OAQG;IACH,sBAAsB,CACpB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,GACjB,iBAAiB,EAAE,CAAC;IAEvB;;;;;;;;;OASG;IACH,wBAAwB,CACtB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,GACjB,mBAAmB,EAAE,CAAC;CAC1B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ORM Adapter Types — Spec 15 R2
|
|
3
|
+
*
|
|
4
|
+
* ORM adapters extract table references and schema definitions from
|
|
5
|
+
* ORM-specific source code patterns (Drizzle, Prisma). They complement
|
|
6
|
+
* the raw-SQL extraction in UniversalSchemaAnalyzer, feeding into the
|
|
7
|
+
* schema_usage table for cross-domain lifecycle analysis.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analyzers/orm/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance Resolver — Spec 21
|
|
3
|
+
*
|
|
4
|
+
* Language-neutral DB and validator receiver detection through
|
|
5
|
+
* provenance tracking instead of English name matching.
|
|
6
|
+
*
|
|
7
|
+
* "Where did this variable's value come from?" rather than
|
|
8
|
+
* "Is this variable named 'db'?"
|
|
9
|
+
*
|
|
10
|
+
* ─── Architecture ───
|
|
11
|
+
* 1. extractDBProvenancedImports → seed identifiers from known package imports
|
|
12
|
+
* 2. propagateProvenance → follow assignments, destructuring, params
|
|
13
|
+
* 3. buildProvenanceContext → combine seeds + propagation + fallbacks (R3)
|
|
14
|
+
* 4. isDBProvenanced → answer: is this call-expression DB-bound?
|
|
15
|
+
*
|
|
16
|
+
* ─── Modes (R3) ───
|
|
17
|
+
* hybrid (default) — provenance-primary + conjunctive name-fallback
|
|
18
|
+
* provenance — strict provenance only, never consults name lists
|
|
19
|
+
* names — legacy English-only name matching (opt-in escape hatch)
|
|
20
|
+
*/
|
|
21
|
+
import type { AST, LanguageAdapter, ASTNode } from '../languages/types.js';
|
|
22
|
+
/** Database packages — spec R1.1 */
|
|
23
|
+
export declare const DB_PACKAGES: ReadonlySet<string>;
|
|
24
|
+
/** Validator packages — spec R4.1 */
|
|
25
|
+
export declare const VALIDATOR_PACKAGES: ReadonlySet<string>;
|
|
26
|
+
/** Known DB type names — spec R1.1 (propagation rule 8) */
|
|
27
|
+
export declare const DB_TYPES: ReadonlySet<string>;
|
|
28
|
+
/** DB call methods — the fixed API surface (language-invariant) */
|
|
29
|
+
export declare const DB_CALL_METHODS: ReadonlySet<string>;
|
|
30
|
+
/** ORM method patterns — fixed API surface for ORM recognition (Spec 21 R1) */
|
|
31
|
+
export declare const ORM_METHODS: ReadonlySet<string>;
|
|
32
|
+
export type ProvenanceReason = 'package' | 'binding' | 'type' | 'propagation' | 'fallback';
|
|
33
|
+
export interface ProvenanceEvidence {
|
|
34
|
+
identifier: string;
|
|
35
|
+
reason: ProvenanceReason;
|
|
36
|
+
/** Human-readable source of provenance, e.g. "import from better-sqlite3" */
|
|
37
|
+
source: string;
|
|
38
|
+
/** Chain of propagation — each hop records the intermediate identifier */
|
|
39
|
+
chain: string[];
|
|
40
|
+
}
|
|
41
|
+
export type DetectionMode = 'hybrid' | 'provenance' | 'names';
|
|
42
|
+
export interface DetectionConfig {
|
|
43
|
+
mode: DetectionMode;
|
|
44
|
+
}
|
|
45
|
+
export interface ProvenanceContext {
|
|
46
|
+
/** All DB-provenanced identifiers in the current file */
|
|
47
|
+
dbProvenanced: Map<string, ProvenanceEvidence>;
|
|
48
|
+
/** All validator-provenanced identifiers in the current file */
|
|
49
|
+
validatorProvenanced: Map<string, ProvenanceEvidence>;
|
|
50
|
+
/** Active detection mode */
|
|
51
|
+
mode: DetectionMode;
|
|
52
|
+
}
|
|
53
|
+
export interface InferredReceiverSet {
|
|
54
|
+
identifiers: string[];
|
|
55
|
+
evidence: Array<{
|
|
56
|
+
identifier: string;
|
|
57
|
+
reason: string;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extract all DB-provenanced identifiers from a file's import statements.
|
|
62
|
+
*
|
|
63
|
+
* An import like `import Database from 'better-sqlite3'` produces
|
|
64
|
+
* `Database` as DB-provenanced with reason "package".
|
|
65
|
+
*/
|
|
66
|
+
export declare function extractDBProvenancedImports(ast: AST, adapter: LanguageAdapter): Map<string, ProvenanceEvidence>;
|
|
67
|
+
/**
|
|
68
|
+
* Extract all validator-provenanced identifiers from a file's imports.
|
|
69
|
+
* Same pattern as extractDBProvenancedImports but for validator packages.
|
|
70
|
+
*/
|
|
71
|
+
export declare function extractValidatorProvenancedImports(ast: AST, adapter: LanguageAdapter): Map<string, ProvenanceEvidence>;
|
|
72
|
+
/**
|
|
73
|
+
* Propagate provenance through assignments, destructuring, parameters,
|
|
74
|
+
* class fields, and type annotations within a single file.
|
|
75
|
+
*
|
|
76
|
+
* The 8 single-file propagation rules (spec R1):
|
|
77
|
+
* 1. new Expression → variable
|
|
78
|
+
* 2. DB-provenanced call return → variable
|
|
79
|
+
* 3. member expression on DB receiver → variable
|
|
80
|
+
* 4. object destructuring from DB source
|
|
81
|
+
* 5. array destructuring from DB source
|
|
82
|
+
* 6. default parameter with DB value
|
|
83
|
+
* 7. class field initialized with DB value
|
|
84
|
+
* 8. type annotation with known DB type
|
|
85
|
+
*/
|
|
86
|
+
export declare function propagateProvenance(ast: AST, adapter: LanguageAdapter, sourceCode: string, seedMap: Map<string, ProvenanceEvidence>): Map<string, ProvenanceEvidence>;
|
|
87
|
+
export interface BuildProvenanceContextOptions {
|
|
88
|
+
mode: DetectionMode;
|
|
89
|
+
/** Name lists used in hybrid/names fallback modes */
|
|
90
|
+
dbReceiverNames?: string[];
|
|
91
|
+
dbBindingNames?: string[];
|
|
92
|
+
dbCallMethods?: string[];
|
|
93
|
+
/** Validator package list override (defaults to VALIDATOR_PACKAGES) */
|
|
94
|
+
validatorPackageList?: string[];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build a ProvenanceContext for a file.
|
|
98
|
+
*
|
|
99
|
+
* This is the main entry point — call once per file before analysis.
|
|
100
|
+
* Combines import extraction, propagation, and mode-based fallback.
|
|
101
|
+
*/
|
|
102
|
+
export declare function buildProvenanceContext(ast: AST, adapter: LanguageAdapter, sourceCode: string, options: BuildProvenanceContextOptions): ProvenanceContext;
|
|
103
|
+
/**
|
|
104
|
+
* Determine if a call-expression node's callee is DB-provenanced.
|
|
105
|
+
*
|
|
106
|
+
* This replaces the old `isDBCallee()` / `isDbCallNode()` name-based
|
|
107
|
+
* pattern matching in UniversalDataAccessAnalyzer.
|
|
108
|
+
*
|
|
109
|
+
* Checks:
|
|
110
|
+
* 1. Simple identifier call → is the identifier DB-provenanced?
|
|
111
|
+
* 2. Member expression call → is the receiver DB-provenanced AND is the
|
|
112
|
+
* method in the DB call method set?
|
|
113
|
+
* 3. ORM patterns → receiver is DB-provenanced and method matches ORM API
|
|
114
|
+
*/
|
|
115
|
+
export declare function isDBProvenanced(node: ASTNode, adapter: LanguageAdapter, sourceCode: string, context: ProvenanceContext, dbCallMethods?: ReadonlySet<string>): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Check if an identifier is validator-provenanced (R4 infrastructure).
|
|
118
|
+
*
|
|
119
|
+
* This will be consumed by Spec 15's validator-bypass detection.
|
|
120
|
+
*/
|
|
121
|
+
export declare function isValidatorProvenanced(identifier: string, context: ProvenanceContext): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Infer additional DB receivers by tracing identifiers that call DB methods
|
|
124
|
+
* back through assignment chains to provenanced sources.
|
|
125
|
+
*
|
|
126
|
+
* This is the conjunctive inference guard in action: an identifier is only
|
|
127
|
+
* inferred if it (a) appears as a receiver of a known DB call method AND
|
|
128
|
+
* (b) can be traced back to a provenanced source through assignments.
|
|
129
|
+
*
|
|
130
|
+
* Deferred: full implementation in R2 step.
|
|
131
|
+
*/
|
|
132
|
+
export declare function inferReceivers(provenancedSet: Map<string, ProvenanceEvidence>, fileAst: AST, adapter: LanguageAdapter, sourceCode: string): InferredReceiverSet;
|
|
133
|
+
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/analyzers/provenance.ts"],"names":[],"mappings":"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"}
|