code-auditor-mcp 4.1.0 → 5.0.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 +374 -0
- package/README.md +4 -4
- package/configs/hhra-compat.json +0 -8
- package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts +1 -1
- package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js +7 -1
- package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts +2 -8
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js +4 -4
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts +1 -1
- package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.js.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts +2 -2
- package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.js.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts +1 -1
- package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.js.map +1 -1
- package/dist/analyzers/applicability.d.ts +42 -0
- package/dist/analyzers/applicability.d.ts.map +1 -1
- package/dist/analyzers/applicability.js +74 -0
- package/dist/analyzers/applicability.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +18 -24
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +30 -23
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +113 -76
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +2 -0
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +8 -3
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +210 -148
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +23 -28
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/handleIdentification.d.ts +356 -0
- package/dist/analyzers/handleIdentification.d.ts.map +1 -0
- package/dist/analyzers/handleIdentification.js +424 -0
- package/dist/analyzers/handleIdentification.js.map +1 -0
- package/dist/analyzers/manifestStaleness.d.ts +64 -0
- package/dist/analyzers/manifestStaleness.d.ts.map +1 -0
- package/dist/analyzers/manifestStaleness.js +115 -0
- package/dist/analyzers/manifestStaleness.js.map +1 -0
- package/dist/analyzers/orgFilterTiers.d.ts +73 -1
- package/dist/analyzers/orgFilterTiers.d.ts.map +1 -1
- package/dist/analyzers/orgFilterTiers.js +166 -1
- package/dist/analyzers/orgFilterTiers.js.map +1 -1
- package/dist/analyzers/provenance.d.ts +251 -57
- package/dist/analyzers/provenance.d.ts.map +1 -1
- package/dist/analyzers/provenance.js +1109 -429
- package/dist/analyzers/provenance.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.d.ts +2 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +2 -0
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/receiverResolution.d.ts +183 -0
- package/dist/analyzers/receiverResolution.d.ts.map +1 -0
- package/dist/analyzers/receiverResolution.js +540 -0
- package/dist/analyzers/receiverResolution.js.map +1 -0
- package/dist/analyzers/receiverRoot.d.ts +328 -0
- package/dist/analyzers/receiverRoot.d.ts.map +1 -0
- package/dist/analyzers/receiverRoot.js +990 -0
- package/dist/analyzers/receiverRoot.js.map +1 -0
- package/dist/analyzers/ruleRegistry.d.ts +12 -68
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +32 -342
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/ruleTiming.d.ts +10 -0
- package/dist/analyzers/ruleTiming.d.ts.map +1 -1
- package/dist/analyzers/ruleTiming.js +20 -0
- package/dist/analyzers/ruleTiming.js.map +1 -1
- package/dist/analyzers/sqlLiteral.d.ts +76 -0
- package/dist/analyzers/sqlLiteral.d.ts.map +1 -0
- package/dist/analyzers/sqlLiteral.js +419 -0
- package/dist/analyzers/sqlLiteral.js.map +1 -0
- package/dist/analyzers/tsEcosystem.d.ts +115 -0
- package/dist/analyzers/tsEcosystem.d.ts.map +1 -0
- package/dist/analyzers/tsEcosystem.js +231 -0
- package/dist/analyzers/tsEcosystem.js.map +1 -0
- package/dist/analyzers/tsExpressionDescriptor.d.ts +156 -0
- package/dist/analyzers/tsExpressionDescriptor.d.ts.map +1 -0
- package/dist/analyzers/tsExpressionDescriptor.js +374 -0
- package/dist/analyzers/tsExpressionDescriptor.js.map +1 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +6 -0
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +107 -44
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +1 -12
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +24 -101
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +287 -49
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +2130 -512
- 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 +2 -18
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +0 -33
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +20 -143
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +4 -3
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +36 -13
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSecretsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSecretsAnalyzer.js +6 -0
- package/dist/analyzers/universal/UniversalSecretsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSecurityAnalyzer.d.ts +15 -0
- package/dist/analyzers/universal/UniversalSecurityAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSecurityAnalyzer.js +25 -0
- package/dist/analyzers/universal/UniversalSecurityAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +21 -32
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +166 -196
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/functionConcerns.d.ts +3 -0
- package/dist/analyzers/universal/functionConcerns.d.ts.map +1 -1
- package/dist/analyzers/universal/functionConcerns.js +4 -1
- package/dist/analyzers/universal/functionConcerns.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts +310 -69
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js +709 -383
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
- package/dist/analyzers/universal/schema/config.d.ts +3 -14
- package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/config.js +3 -16
- package/dist/analyzers/universal/schema/config.js.map +1 -1
- package/dist/analyzers/universal/schema/discovery.d.ts +22 -1
- package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/discovery.js +36 -20
- package/dist/analyzers/universal/schema/discovery.js.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js +13 -3
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
- package/dist/analyzers/universal/schema/migrations.d.ts +187 -27
- package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/migrations.js +443 -186
- package/dist/analyzers/universal/schema/migrations.js.map +1 -1
- package/dist/analyzers/universal/schema/types.d.ts +17 -3
- package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/violations.js +1 -1
- package/dist/analyzers/universal/schema/violations.js.map +1 -1
- package/dist/analyzers/universal/styleScale.d.ts +52 -0
- package/dist/analyzers/universal/styleScale.d.ts.map +1 -0
- package/dist/analyzers/universal/styleScale.js +95 -0
- package/dist/analyzers/universal/styleScale.js.map +1 -0
- package/dist/applyDataDirEnv.js +1 -1
- package/dist/applyDataDirEnv.js.map +1 -1
- package/dist/auditRouter.d.ts +26 -30
- package/dist/auditRouter.d.ts.map +1 -1
- package/dist/auditRouter.js +373 -143
- package/dist/auditRouter.js.map +1 -1
- package/dist/auditRunner.d.ts +64 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +1537 -1051
- package/dist/auditRunner.js.map +1 -1
- package/dist/baseline.d.ts +30 -3
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +70 -9
- package/dist/baseline.js.map +1 -1
- package/dist/cli.js +997 -812
- package/dist/cli.js.map +1 -1
- package/dist/codeIndex/analyzerConfig.d.ts +60 -0
- package/dist/codeIndex/analyzerConfig.d.ts.map +1 -0
- package/dist/codeIndex/analyzerConfig.js +98 -0
- package/dist/codeIndex/analyzerConfig.js.map +1 -0
- package/dist/codeIndex/auditResults.d.ts +39 -0
- package/dist/codeIndex/auditResults.d.ts.map +1 -0
- package/dist/codeIndex/auditResults.js +99 -0
- package/dist/codeIndex/auditResults.js.map +1 -0
- package/dist/codeIndex/codeMap.d.ts +59 -0
- package/dist/codeIndex/codeMap.d.ts.map +1 -0
- package/dist/codeIndex/codeMap.js +72 -0
- package/dist/codeIndex/codeMap.js.map +1 -0
- package/dist/codeIndex/conventions.d.ts +33 -0
- package/dist/codeIndex/conventions.d.ts.map +1 -0
- package/dist/codeIndex/conventions.js +84 -0
- package/dist/codeIndex/conventions.js.map +1 -0
- package/dist/codeIndex/coverage.d.ts +78 -0
- package/dist/codeIndex/coverage.d.ts.map +1 -0
- package/dist/codeIndex/coverage.js +164 -0
- package/dist/codeIndex/coverage.js.map +1 -0
- package/dist/codeIndex/dependencyGraph.d.ts +97 -0
- package/dist/codeIndex/dependencyGraph.d.ts.map +1 -0
- package/dist/codeIndex/dependencyGraph.js +241 -0
- package/dist/codeIndex/dependencyGraph.js.map +1 -0
- package/dist/codeIndex/functionIndex.d.ts +111 -0
- package/dist/codeIndex/functionIndex.d.ts.map +1 -0
- package/dist/codeIndex/functionIndex.js +306 -0
- package/dist/codeIndex/functionIndex.js.map +1 -0
- package/dist/codeIndex/inferredReceivers.d.ts +32 -0
- package/dist/codeIndex/inferredReceivers.d.ts.map +1 -0
- package/dist/codeIndex/inferredReceivers.js +41 -0
- package/dist/codeIndex/inferredReceivers.js.map +1 -0
- package/dist/codeIndex/meta.d.ts +30 -0
- package/dist/codeIndex/meta.d.ts.map +1 -0
- package/dist/codeIndex/meta.js +37 -0
- package/dist/codeIndex/meta.js.map +1 -0
- package/dist/codeIndex/migrations.d.ts +96 -0
- package/dist/codeIndex/migrations.d.ts.map +1 -0
- package/dist/codeIndex/migrations.js +1302 -0
- package/dist/codeIndex/migrations.js.map +1 -0
- package/dist/codeIndex/projectTasks.d.ts +54 -0
- package/dist/codeIndex/projectTasks.d.ts.map +1 -0
- package/dist/codeIndex/projectTasks.js +81 -0
- package/dist/codeIndex/projectTasks.js.map +1 -0
- package/dist/codeIndex/provenance.d.ts +47 -0
- package/dist/codeIndex/provenance.d.ts.map +1 -0
- package/dist/codeIndex/provenance.js +48 -0
- package/dist/codeIndex/provenance.js.map +1 -0
- package/dist/codeIndex/rawSql.d.ts +54 -0
- package/dist/codeIndex/rawSql.d.ts.map +1 -0
- package/dist/codeIndex/rawSql.js +71 -0
- package/dist/codeIndex/rawSql.js.map +1 -0
- package/dist/codeIndex/schema.d.ts +99 -0
- package/dist/codeIndex/schema.d.ts.map +1 -0
- package/dist/codeIndex/schema.js +174 -0
- package/dist/codeIndex/schema.js.map +1 -0
- package/dist/codeIndex/search.d.ts +40 -0
- package/dist/codeIndex/search.d.ts.map +1 -0
- package/dist/codeIndex/search.js +316 -0
- package/dist/codeIndex/search.js.map +1 -0
- package/dist/codeIndex/shared.d.ts +27 -0
- package/dist/codeIndex/shared.d.ts.map +1 -0
- package/dist/codeIndex/shared.js +46 -0
- package/dist/codeIndex/shared.js.map +1 -0
- package/dist/codeIndex/sqliteCollection.d.ts +81 -0
- package/dist/codeIndex/sqliteCollection.d.ts.map +1 -0
- package/dist/codeIndex/sqliteCollection.js +250 -0
- package/dist/codeIndex/sqliteCollection.js.map +1 -0
- package/dist/codeIndex/whitelist.d.ts +59 -0
- package/dist/codeIndex/whitelist.d.ts.map +1 -0
- package/dist/codeIndex/whitelist.js +188 -0
- package/dist/codeIndex/whitelist.js.map +1 -0
- package/dist/codeIndexDB.d.ts +130 -277
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +364 -2748
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/codeIndexService.d.ts +87 -12
- package/dist/codeIndexService.d.ts.map +1 -1
- package/dist/codeIndexService.js +110 -34
- package/dist/codeIndexService.js.map +1 -1
- package/dist/componentScanner.d.ts +35 -0
- package/dist/componentScanner.d.ts.map +1 -1
- package/dist/componentScanner.js +114 -80
- package/dist/componentScanner.js.map +1 -1
- package/dist/config/configGeneratePath.d.ts +4 -0
- package/dist/config/configGeneratePath.d.ts.map +1 -1
- package/dist/config/configGeneratePath.js +4 -0
- package/dist/config/configGeneratePath.js.map +1 -1
- package/dist/config/configLoader.d.ts +16 -1
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +26 -23
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +11 -7
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +21 -20
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/effectiveConfig.d.ts +17 -2
- package/dist/config/effectiveConfig.d.ts.map +1 -1
- package/dist/config/effectiveConfig.js +32 -25
- package/dist/config/effectiveConfig.js.map +1 -1
- package/dist/config/lintConfigReader.d.ts +6 -0
- package/dist/config/lintConfigReader.d.ts.map +1 -1
- package/dist/config/lintConfigReader.js +6 -0
- package/dist/config/lintConfigReader.js.map +1 -1
- package/dist/config/staticObjectExtract.d.ts +4 -0
- package/dist/config/staticObjectExtract.d.ts.map +1 -1
- package/dist/config/staticObjectExtract.js +7 -3
- package/dist/config/staticObjectExtract.js.map +1 -1
- package/dist/config/thresholdRationales.d.ts +2 -0
- package/dist/config/thresholdRationales.d.ts.map +1 -1
- package/dist/config/thresholdRationales.js +5 -2
- package/dist/config/thresholdRationales.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -5
- package/dist/constants.js.map +1 -1
- package/dist/conventions/conventionMiner.d.ts +105 -2
- package/dist/conventions/conventionMiner.d.ts.map +1 -1
- package/dist/conventions/conventionMiner.js +334 -259
- package/dist/conventions/conventionMiner.js.map +1 -1
- package/dist/coverage/coverageService.js +4 -4
- package/dist/coverage/coverageService.js.map +1 -1
- package/dist/daemon/args.d.ts +3 -0
- package/dist/daemon/args.d.ts.map +1 -1
- package/dist/daemon/args.js +3 -0
- package/dist/daemon/args.js.map +1 -1
- package/dist/daemon/core.d.ts +33 -27
- package/dist/daemon/core.d.ts.map +1 -1
- package/dist/daemon/core.js +198 -162
- package/dist/daemon/core.js.map +1 -1
- package/dist/daemon/lspServer.d.ts +8 -0
- package/dist/daemon/lspServer.d.ts.map +1 -1
- package/dist/daemon/lspServer.js +8 -0
- package/dist/daemon/lspServer.js.map +1 -1
- package/dist/daemon/main.d.ts +2 -0
- package/dist/daemon/main.d.ts.map +1 -1
- package/dist/daemon/main.js +2 -0
- package/dist/daemon/main.js.map +1 -1
- package/dist/daemon/resolve.d.ts +22 -7
- package/dist/daemon/resolve.d.ts.map +1 -1
- package/dist/daemon/resolve.js +29 -8
- package/dist/daemon/resolve.js.map +1 -1
- package/dist/daemon/socketClient.d.ts +10 -1
- package/dist/daemon/socketClient.d.ts.map +1 -1
- package/dist/daemon/socketClient.js +10 -1
- package/dist/daemon/socketClient.js.map +1 -1
- package/dist/daemon/socketServer.d.ts +13 -0
- package/dist/daemon/socketServer.d.ts.map +1 -1
- package/dist/daemon/socketServer.js +13 -0
- package/dist/daemon/socketServer.js.map +1 -1
- package/dist/dataPaths.d.ts +27 -8
- package/dist/dataPaths.d.ts.map +1 -1
- package/dist/dataPaths.js +28 -44
- package/dist/dataPaths.js.map +1 -1
- package/dist/dismissals.d.ts +22 -1
- package/dist/dismissals.d.ts.map +1 -1
- package/dist/dismissals.js +22 -1
- package/dist/dismissals.js.map +1 -1
- package/dist/enforcement/gate.d.ts +1 -0
- package/dist/enforcement/gate.d.ts.map +1 -1
- package/dist/enforcement/gate.js +1 -0
- package/dist/enforcement/gate.js.map +1 -1
- package/dist/fingerprint.d.ts +6 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +46 -1
- package/dist/fingerprint.js.map +1 -1
- package/dist/functionScanner.d.ts +30 -1
- package/dist/functionScanner.d.ts.map +1 -1
- package/dist/functionScanner.js +258 -256
- package/dist/functionScanner.js.map +1 -1
- package/dist/generators/AWSQConfigGenerator.d.ts +23 -0
- package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
- package/dist/generators/AWSQConfigGenerator.js +23 -0
- package/dist/generators/AWSQConfigGenerator.js.map +1 -1
- package/dist/generators/BaseConfigGenerator.d.ts +7 -0
- package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.js +7 -0
- package/dist/generators/BaseConfigGenerator.js.map +1 -1
- package/dist/generators/ClaudeConfigGenerator.d.ts +23 -0
- package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ClaudeConfigGenerator.js +23 -0
- package/dist/generators/ClaudeConfigGenerator.js.map +1 -1
- package/dist/generators/ClineConfigGenerator.d.ts +23 -0
- package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ClineConfigGenerator.js +23 -0
- package/dist/generators/ClineConfigGenerator.js.map +1 -1
- package/dist/generators/CodeiumConfigGenerator.d.ts +23 -0
- package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodeiumConfigGenerator.js +23 -0
- package/dist/generators/CodeiumConfigGenerator.js.map +1 -1
- package/dist/generators/CodexConfigGenerator.d.ts +23 -0
- package/dist/generators/CodexConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodexConfigGenerator.js +23 -0
- package/dist/generators/CodexConfigGenerator.js.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.d.ts +9 -0
- package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.js +9 -0
- package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
- package/dist/generators/ContinueConfigGenerator.d.ts +23 -0
- package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ContinueConfigGenerator.js +23 -0
- package/dist/generators/ContinueConfigGenerator.js.map +1 -1
- package/dist/generators/CopilotConfigGenerator.d.ts +23 -0
- package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CopilotConfigGenerator.js +23 -0
- package/dist/generators/CopilotConfigGenerator.js.map +1 -1
- package/dist/generators/CursorConfigGenerator.d.ts +23 -0
- package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CursorConfigGenerator.js +23 -0
- package/dist/generators/CursorConfigGenerator.js.map +1 -1
- package/dist/generators/GeminiConfigGenerator.d.ts +23 -0
- package/dist/generators/GeminiConfigGenerator.d.ts.map +1 -1
- package/dist/generators/GeminiConfigGenerator.js +23 -0
- package/dist/generators/GeminiConfigGenerator.js.map +1 -1
- package/dist/generators/VSCodeConfigGenerator.d.ts +23 -0
- package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/VSCodeConfigGenerator.js +23 -0
- package/dist/generators/VSCodeConfigGenerator.js.map +1 -1
- package/dist/generators/ZCodeConfigGenerator.d.ts +23 -0
- package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ZCodeConfigGenerator.js +23 -0
- package/dist/generators/ZCodeConfigGenerator.js.map +1 -1
- package/dist/graph/blastRadius.d.ts.map +1 -1
- package/dist/graph/blastRadius.js +12 -7
- package/dist/graph/blastRadius.js.map +1 -1
- package/dist/graph/callGraph.d.ts +31 -0
- package/dist/graph/callGraph.d.ts.map +1 -1
- package/dist/graph/callGraph.js +62 -32
- package/dist/graph/callGraph.js.map +1 -1
- package/dist/graph/importClassification.d.ts +28 -0
- package/dist/graph/importClassification.d.ts.map +1 -1
- package/dist/graph/importClassification.js +57 -0
- package/dist/graph/importClassification.js.map +1 -1
- package/dist/graph/importGraph.d.ts +38 -0
- package/dist/graph/importGraph.d.ts.map +1 -1
- package/dist/graph/importGraph.js +38 -0
- package/dist/graph/importGraph.js.map +1 -1
- package/dist/graph/outputFormatter.d.ts +12 -4
- package/dist/graph/outputFormatter.d.ts.map +1 -1
- package/dist/graph/outputFormatter.js +12 -62
- package/dist/graph/outputFormatter.js.map +1 -1
- package/dist/hooks/codex.d.ts +8 -1
- package/dist/hooks/codex.d.ts.map +1 -1
- package/dist/hooks/codex.js +7 -0
- package/dist/hooks/codex.js.map +1 -1
- package/dist/hooks/core.d.ts +6 -0
- package/dist/hooks/core.d.ts.map +1 -1
- package/dist/hooks/core.js +6 -1
- package/dist/hooks/core.js.map +1 -1
- package/dist/hooks/cursor.d.ts +11 -1
- package/dist/hooks/cursor.d.ts.map +1 -1
- package/dist/hooks/cursor.js +10 -0
- package/dist/hooks/cursor.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/installConfig.d.ts +23 -5
- package/dist/installConfig.d.ts.map +1 -1
- package/dist/installConfig.js +23 -5
- package/dist/installConfig.js.map +1 -1
- package/dist/installer.d.ts +6 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +6 -0
- package/dist/installer.js.map +1 -1
- package/dist/invariants/ruleEngine.d.ts +3 -0
- package/dist/invariants/ruleEngine.d.ts.map +1 -1
- package/dist/invariants/ruleEngine.js +156 -119
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/invariants/ruleValidator.d.ts +3 -0
- package/dist/invariants/ruleValidator.d.ts.map +1 -1
- package/dist/invariants/ruleValidator.js +185 -178
- package/dist/invariants/ruleValidator.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +4 -1
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js +8 -19
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/RuntimeManager.d.ts +8 -0
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +55 -5
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.js +1 -1
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/adapterBridge.d.ts +4 -0
- package/dist/languages/adapterBridge.d.ts.map +1 -1
- package/dist/languages/adapterBridge.js +37 -3
- package/dist/languages/adapterBridge.js.map +1 -1
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +11 -14
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/go/analyzer-darwin-amd64 +0 -0
- package/dist/languages/go/analyzer-darwin-arm64 +0 -0
- package/dist/languages/go/analyzer-linux-amd64 +0 -0
- package/dist/languages/go/analyzer-linux-arm64 +0 -0
- package/dist/languages/go/analyzer-src/analyzer.go +2 -0
- package/dist/languages/go/analyzer-src/dataaccess.go +388 -0
- package/dist/languages/go/analyzer-src/types.go +8 -0
- package/dist/languages/go/analyzer-windows-amd64.exe +0 -0
- package/dist/languages/go/database-packages.json +8 -0
- package/dist/languages/go/goResolution.d.ts +229 -0
- package/dist/languages/go/goResolution.d.ts.map +1 -0
- package/dist/languages/go/goResolution.js +799 -0
- package/dist/languages/go/goResolution.js.map +1 -0
- package/dist/languages/go/stdlib-packages.json +353 -0
- package/dist/languages/go/tenantInputs.d.ts +37 -0
- package/dist/languages/go/tenantInputs.d.ts.map +1 -0
- package/dist/languages/go/tenantInputs.js +121 -0
- package/dist/languages/go/tenantInputs.js.map +1 -0
- package/dist/languages/index.d.ts +1 -0
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +5 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/json/JsonAdapter.d.ts +177 -0
- package/dist/languages/json/JsonAdapter.d.ts.map +1 -0
- package/dist/languages/json/JsonAdapter.js +531 -0
- package/dist/languages/json/JsonAdapter.js.map +1 -0
- package/dist/languages/locationIndex.d.ts +41 -0
- package/dist/languages/locationIndex.d.ts.map +1 -0
- package/dist/languages/locationIndex.js +42 -0
- package/dist/languages/locationIndex.js.map +1 -0
- package/dist/languages/sql/dialectDetection.d.ts +57 -0
- package/dist/languages/sql/dialectDetection.d.ts.map +1 -0
- package/dist/languages/sql/dialectDetection.js +135 -0
- package/dist/languages/sql/dialectDetection.js.map +1 -0
- package/dist/languages/sql/sqlAst.d.ts +494 -0
- package/dist/languages/sql/sqlAst.d.ts.map +1 -0
- package/dist/languages/sql/sqlAst.js +1817 -0
- package/dist/languages/sql/sqlAst.js.map +1 -0
- package/dist/languages/testConventions.d.ts +12 -1
- package/dist/languages/testConventions.d.ts.map +1 -1
- package/dist/languages/testConventions.js +13 -1
- package/dist/languages/testConventions.js.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
- package/dist/languages/tree-sitter/converter.js +2 -2
- package/dist/languages/tree-sitter/converter.js.map +1 -1
- package/dist/languages/tree-sitter/parser.d.ts +3 -4
- package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
- package/dist/languages/tree-sitter/parser.js +10 -4
- package/dist/languages/tree-sitter/parser.js.map +1 -1
- package/dist/languages/tree-sitter/rawNode.d.ts +3 -0
- package/dist/languages/tree-sitter/rawNode.d.ts.map +1 -1
- package/dist/languages/tree-sitter/rawNode.js +3 -0
- package/dist/languages/tree-sitter/rawNode.js.map +1 -1
- package/dist/languages/types.d.ts +7 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +36 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +168 -45
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/languages/typescript/database-packages.json +19 -0
- package/dist/ledger.d.ts +118 -2
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +167 -45
- package/dist/ledger.js.map +1 -1
- package/dist/legacyIndexNotice.d.ts +32 -0
- package/dist/legacyIndexNotice.d.ts.map +1 -0
- package/dist/legacyIndexNotice.js +89 -0
- package/dist/legacyIndexNotice.js.map +1 -0
- package/dist/mcp-tools/discoveryQueries.d.ts +55 -0
- package/dist/mcp-tools/discoveryQueries.d.ts.map +1 -0
- package/dist/mcp-tools/discoveryQueries.js +157 -0
- package/dist/mcp-tools/discoveryQueries.js.map +1 -0
- package/dist/mcp-tools/projectTasks.d.ts +9 -123
- package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
- package/dist/mcp-tools/projectTasks.js +180 -170
- package/dist/mcp-tools/projectTasks.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +20 -0
- package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
- package/dist/mcp-tools/whitelistTools.js +20 -0
- package/dist/mcp-tools/whitelistTools.js.map +1 -1
- package/dist/mcp-tools/workflowGuide.d.ts +9 -0
- package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.js +13 -5
- package/dist/mcp-tools/workflowGuide.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts +78 -0
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js +203 -340
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp-ui-simple.d.ts +2 -0
- package/dist/mcp-ui-simple.d.ts.map +1 -1
- package/dist/mcp-ui-simple.js +12 -5
- package/dist/mcp-ui-simple.js.map +1 -1
- package/dist/mcp.d.ts +6 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +832 -851
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.d.ts +29 -33
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +102 -791
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/mcpAutoIndex.d.ts +5 -0
- package/dist/mcpAutoIndex.d.ts.map +1 -1
- package/dist/mcpAutoIndex.js +7 -2
- package/dist/mcpAutoIndex.js.map +1 -1
- package/dist/mcpDiagnostics.d.ts +7 -0
- package/dist/mcpDiagnostics.d.ts.map +1 -1
- package/dist/mcpDiagnostics.js +34 -9
- package/dist/mcpDiagnostics.js.map +1 -1
- package/dist/mcpToolErrors.d.ts +16 -0
- package/dist/mcpToolErrors.d.ts.map +1 -1
- package/dist/mcpToolErrors.js +16 -0
- package/dist/mcpToolErrors.js.map +1 -1
- package/dist/nextFile.d.ts +6 -0
- package/dist/nextFile.d.ts.map +1 -1
- package/dist/nextFile.js +6 -0
- package/dist/nextFile.js.map +1 -1
- package/dist/nextFileIncremental.d.ts +44 -4
- package/dist/nextFileIncremental.d.ts.map +1 -1
- package/dist/nextFileIncremental.js +47 -7
- package/dist/nextFileIncremental.js.map +1 -1
- package/dist/phase/batchFunctions.d.ts +38 -0
- package/dist/phase/batchFunctions.d.ts.map +1 -0
- package/dist/phase/batchFunctions.js +64 -0
- package/dist/phase/batchFunctions.js.map +1 -0
- package/dist/phase/checks.d.ts +39 -0
- package/dist/phase/checks.d.ts.map +1 -0
- package/dist/phase/checks.js +48 -0
- package/dist/phase/checks.js.map +1 -0
- package/dist/phase/codeBlocks.d.ts +25 -0
- package/dist/phase/codeBlocks.d.ts.map +1 -0
- package/dist/phase/codeBlocks.js +268 -0
- package/dist/phase/codeBlocks.js.map +1 -0
- package/dist/phase/colorMath.d.ts +41 -0
- package/dist/phase/colorMath.d.ts.map +1 -0
- package/dist/phase/colorMath.js +109 -0
- package/dist/phase/colorMath.js.map +1 -0
- package/dist/phase/config.d.ts +29 -0
- package/dist/phase/config.d.ts.map +1 -0
- package/dist/phase/config.js +54 -0
- package/dist/phase/config.js.map +1 -0
- package/dist/phase/consumed.d.ts +47 -0
- package/dist/phase/consumed.d.ts.map +1 -0
- package/dist/phase/consumed.js +22 -0
- package/dist/phase/consumed.js.map +1 -0
- package/dist/phase/conventionMining.d.ts +59 -0
- package/dist/phase/conventionMining.d.ts.map +1 -0
- package/dist/phase/conventionMining.js +152 -0
- package/dist/phase/conventionMining.js.map +1 -0
- package/dist/phase/coverage.d.ts +65 -0
- package/dist/phase/coverage.d.ts.map +1 -0
- package/dist/phase/coverage.js +121 -0
- package/dist/phase/coverage.js.map +1 -0
- package/dist/phase/dag.d.ts +49 -0
- package/dist/phase/dag.d.ts.map +1 -0
- package/dist/phase/dag.js +120 -0
- package/dist/phase/dag.js.map +1 -0
- package/dist/phase/dataAccessCalls.d.ts +33 -0
- package/dist/phase/dataAccessCalls.d.ts.map +1 -0
- package/dist/phase/dataAccessCalls.js +42 -0
- package/dist/phase/dataAccessCalls.js.map +1 -0
- package/dist/phase/dataAccessCallsCandidates.d.ts +25 -0
- package/dist/phase/dataAccessCallsCandidates.d.ts.map +1 -0
- package/dist/phase/dataAccessCallsCandidates.js +27 -0
- package/dist/phase/dataAccessCallsCandidates.js.map +1 -0
- package/dist/phase/dynamicSql.d.ts +18 -0
- package/dist/phase/dynamicSql.d.ts.map +1 -0
- package/dist/phase/dynamicSql.js +20 -0
- package/dist/phase/dynamicSql.js.map +1 -0
- package/dist/phase/exportForm.d.ts +23 -0
- package/dist/phase/exportForm.d.ts.map +1 -0
- package/dist/phase/exportForm.js +29 -0
- package/dist/phase/exportForm.js.map +1 -0
- package/dist/phase/exportSymbols.d.ts +21 -0
- package/dist/phase/exportSymbols.d.ts.map +1 -0
- package/dist/phase/exportSymbols.js +28 -0
- package/dist/phase/exportSymbols.js.map +1 -0
- package/dist/phase/fileHeader.d.ts +15 -0
- package/dist/phase/fileHeader.d.ts.map +1 -0
- package/dist/phase/fileHeader.js +33 -0
- package/dist/phase/fileHeader.js.map +1 -0
- package/dist/phase/fileImports.d.ts +39 -0
- package/dist/phase/fileImports.d.ts.map +1 -0
- package/dist/phase/fileImports.js +138 -0
- package/dist/phase/fileImports.js.map +1 -0
- package/dist/phase/fileSymbols.d.ts +25 -0
- package/dist/phase/fileSymbols.d.ts.map +1 -0
- package/dist/phase/fileSymbols.js +302 -0
- package/dist/phase/fileSymbols.js.map +1 -0
- package/dist/phase/functionBodies.d.ts +28 -0
- package/dist/phase/functionBodies.d.ts.map +1 -0
- package/dist/phase/functionBodies.js +67 -0
- package/dist/phase/functionBodies.js.map +1 -0
- package/dist/phase/functionIndex.d.ts +28 -0
- package/dist/phase/functionIndex.d.ts.map +1 -0
- package/dist/phase/functionIndex.js +152 -0
- package/dist/phase/functionIndex.js.map +1 -0
- package/dist/phase/goFunctionAnalysis.d.ts +47 -0
- package/dist/phase/goFunctionAnalysis.d.ts.map +1 -0
- package/dist/phase/goFunctionAnalysis.js +291 -0
- package/dist/phase/goFunctionAnalysis.js.map +1 -0
- package/dist/phase/goFunctions.d.ts +38 -0
- package/dist/phase/goFunctions.d.ts.map +1 -0
- package/dist/phase/goFunctions.js +154 -0
- package/dist/phase/goFunctions.js.map +1 -0
- package/dist/phase/goImports.d.ts +29 -0
- package/dist/phase/goImports.d.ts.map +1 -0
- package/dist/phase/goImports.js +68 -0
- package/dist/phase/goImports.js.map +1 -0
- package/dist/phase/goPackageBindings.d.ts +22 -0
- package/dist/phase/goPackageBindings.d.ts.map +1 -0
- package/dist/phase/goPackageBindings.js +30 -0
- package/dist/phase/goPackageBindings.js.map +1 -0
- package/dist/phase/goSwitches.d.ts +28 -0
- package/dist/phase/goSwitches.d.ts.map +1 -0
- package/dist/phase/goSwitches.js +52 -0
- package/dist/phase/goSwitches.js.map +1 -0
- package/dist/phase/importForm.d.ts +20 -0
- package/dist/phase/importForm.d.ts.map +1 -0
- package/dist/phase/importForm.js +27 -0
- package/dist/phase/importForm.js.map +1 -0
- package/dist/phase/importSpecifiers.d.ts +20 -0
- package/dist/phase/importSpecifiers.d.ts.map +1 -0
- package/dist/phase/importSpecifiers.js +30 -0
- package/dist/phase/importSpecifiers.js.map +1 -0
- package/dist/phase/imports.d.ts +18 -0
- package/dist/phase/imports.d.ts.map +1 -0
- package/dist/phase/imports.js +25 -0
- package/dist/phase/imports.js.map +1 -0
- package/dist/phase/jsonDocument.d.ts +26 -0
- package/dist/phase/jsonDocument.d.ts.map +1 -0
- package/dist/phase/jsonDocument.js +36 -0
- package/dist/phase/jsonDocument.js.map +1 -0
- package/dist/phase/localBinding.d.ts +33 -0
- package/dist/phase/localBinding.d.ts.map +1 -0
- package/dist/phase/localBinding.js +208 -0
- package/dist/phase/localBinding.js.map +1 -0
- package/dist/phase/loopQueries.d.ts +31 -0
- package/dist/phase/loopQueries.d.ts.map +1 -0
- package/dist/phase/loopQueries.js +44 -0
- package/dist/phase/loopQueries.js.map +1 -0
- package/dist/phase/loopQueryCandidates.d.ts +26 -0
- package/dist/phase/loopQueryCandidates.d.ts.map +1 -0
- package/dist/phase/loopQueryCandidates.js +28 -0
- package/dist/phase/loopQueryCandidates.js.map +1 -0
- package/dist/phase/oracles.d.ts +216 -0
- package/dist/phase/oracles.d.ts.map +1 -0
- package/dist/phase/oracles.js +484 -0
- package/dist/phase/oracles.js.map +1 -0
- package/dist/phase/phaseModel.d.ts +190 -0
- package/dist/phase/phaseModel.d.ts.map +1 -0
- package/dist/phase/phaseModel.js +468 -0
- package/dist/phase/phaseModel.js.map +1 -0
- package/dist/phase/producers.d.ts +450 -0
- package/dist/phase/producers.d.ts.map +1 -0
- package/dist/phase/producers.js +1027 -0
- package/dist/phase/producers.js.map +1 -0
- package/dist/phase/querySiteCandidates.d.ts +27 -0
- package/dist/phase/querySiteCandidates.d.ts.map +1 -0
- package/dist/phase/querySiteCandidates.js +66 -0
- package/dist/phase/querySiteCandidates.js.map +1 -0
- package/dist/phase/querySites.d.ts +30 -0
- package/dist/phase/querySites.d.ts.map +1 -0
- package/dist/phase/querySites.js +93 -0
- package/dist/phase/querySites.js.map +1 -0
- package/dist/phase/reachability.d.ts +61 -0
- package/dist/phase/reachability.d.ts.map +1 -0
- package/dist/phase/reachability.js +104 -0
- package/dist/phase/reachability.js.map +1 -0
- package/dist/phase/reactComponents.d.ts +33 -0
- package/dist/phase/reactComponents.d.ts.map +1 -0
- package/dist/phase/reactComponents.js +47 -0
- package/dist/phase/reactComponents.js.map +1 -0
- package/dist/phase/receiverActivity.d.ts +35 -0
- package/dist/phase/receiverActivity.d.ts.map +1 -0
- package/dist/phase/receiverActivity.js +66 -0
- package/dist/phase/receiverActivity.js.map +1 -0
- package/dist/phase/receiverConsumers.d.ts +200 -0
- package/dist/phase/receiverConsumers.d.ts.map +1 -0
- package/dist/phase/receiverConsumers.js +1025 -0
- package/dist/phase/receiverConsumers.js.map +1 -0
- package/dist/phase/receiverProvenance.d.ts +97 -0
- package/dist/phase/receiverProvenance.d.ts.map +1 -0
- package/dist/phase/receiverProvenance.js +337 -0
- package/dist/phase/receiverProvenance.js.map +1 -0
- package/dist/phase/routing.d.ts +47 -0
- package/dist/phase/routing.d.ts.map +1 -0
- package/dist/phase/routing.js +62 -0
- package/dist/phase/routing.js.map +1 -0
- package/dist/phase/rules/conventions.d.ts +61 -0
- package/dist/phase/rules/conventions.d.ts.map +1 -0
- package/dist/phase/rules/conventions.js +403 -0
- package/dist/phase/rules/conventions.js.map +1 -0
- package/dist/phase/rules/crossDomain.d.ts +102 -0
- package/dist/phase/rules/crossDomain.d.ts.map +1 -0
- package/dist/phase/rules/crossDomain.js +918 -0
- package/dist/phase/rules/crossDomain.js.map +1 -0
- package/dist/phase/rules/dataAccess.d.ts +62 -0
- package/dist/phase/rules/dataAccess.d.ts.map +1 -0
- package/dist/phase/rules/dataAccess.js +480 -0
- package/dist/phase/rules/dataAccess.js.map +1 -0
- package/dist/phase/rules/dependencyGraph.d.ts +44 -0
- package/dist/phase/rules/dependencyGraph.d.ts.map +1 -0
- package/dist/phase/rules/dependencyGraph.js +260 -0
- package/dist/phase/rules/dependencyGraph.js.map +1 -0
- package/dist/phase/rules/documentation.d.ts +45 -0
- package/dist/phase/rules/documentation.d.ts.map +1 -0
- package/dist/phase/rules/documentation.js +340 -0
- package/dist/phase/rules/documentation.js.map +1 -0
- package/dist/phase/rules/dry.d.ts +109 -0
- package/dist/phase/rules/dry.d.ts.map +1 -0
- package/dist/phase/rules/dry.js +803 -0
- package/dist/phase/rules/dry.js.map +1 -0
- package/dist/phase/rules/fileDocumentation.d.ts +36 -0
- package/dist/phase/rules/fileDocumentation.d.ts.map +1 -0
- package/dist/phase/rules/fileDocumentation.js +134 -0
- package/dist/phase/rules/fileDocumentation.js.map +1 -0
- package/dist/phase/rules/functionBodies.d.ts +33 -0
- package/dist/phase/rules/functionBodies.d.ts.map +1 -0
- package/dist/phase/rules/functionBodies.js +71 -0
- package/dist/phase/rules/functionBodies.js.map +1 -0
- package/dist/phase/rules/goRules.d.ts +49 -0
- package/dist/phase/rules/goRules.d.ts.map +1 -0
- package/dist/phase/rules/goRules.js +209 -0
- package/dist/phase/rules/goRules.js.map +1 -0
- package/dist/phase/rules/querySites.d.ts +29 -0
- package/dist/phase/rules/querySites.d.ts.map +1 -0
- package/dist/phase/rules/querySites.js +94 -0
- package/dist/phase/rules/querySites.js.map +1 -0
- package/dist/phase/rules/react.d.ts +38 -0
- package/dist/phase/rules/react.d.ts.map +1 -0
- package/dist/phase/rules/react.js +202 -0
- package/dist/phase/rules/react.js.map +1 -0
- package/dist/phase/rules/registry.d.ts +170 -0
- package/dist/phase/rules/registry.d.ts.map +1 -0
- package/dist/phase/rules/registry.js +103 -0
- package/dist/phase/rules/registry.js.map +1 -0
- package/dist/phase/rules/schema.d.ts +79 -0
- package/dist/phase/rules/schema.d.ts.map +1 -0
- package/dist/phase/rules/schema.js +273 -0
- package/dist/phase/rules/schema.js.map +1 -0
- package/dist/phase/rules/schemaJson.d.ts +32 -0
- package/dist/phase/rules/schemaJson.d.ts.map +1 -0
- package/dist/phase/rules/schemaJson.js +81 -0
- package/dist/phase/rules/schemaJson.js.map +1 -0
- package/dist/phase/rules/schemaValidator.d.ts +38 -0
- package/dist/phase/rules/schemaValidator.d.ts.map +1 -0
- package/dist/phase/rules/schemaValidator.js +107 -0
- package/dist/phase/rules/schemaValidator.js.map +1 -0
- package/dist/phase/rules/secrets.d.ts +34 -0
- package/dist/phase/rules/secrets.d.ts.map +1 -0
- package/dist/phase/rules/secrets.js +208 -0
- package/dist/phase/rules/secrets.js.map +1 -0
- package/dist/phase/rules/security.d.ts +30 -0
- package/dist/phase/rules/security.d.ts.map +1 -0
- package/dist/phase/rules/security.js +85 -0
- package/dist/phase/rules/security.js.map +1 -0
- package/dist/phase/rules/securityDefects.d.ts +37 -0
- package/dist/phase/rules/securityDefects.d.ts.map +1 -0
- package/dist/phase/rules/securityDefects.js +167 -0
- package/dist/phase/rules/securityDefects.js.map +1 -0
- package/dist/phase/rules/solid.d.ts +61 -0
- package/dist/phase/rules/solid.d.ts.map +1 -0
- package/dist/phase/rules/solid.js +562 -0
- package/dist/phase/rules/solid.js.map +1 -0
- package/dist/phase/rules/styles.d.ts +77 -0
- package/dist/phase/rules/styles.d.ts.map +1 -0
- package/dist/phase/rules/styles.js +868 -0
- package/dist/phase/rules/styles.js.map +1 -0
- package/dist/phase/rules/unreferencedModule.d.ts +26 -0
- package/dist/phase/rules/unreferencedModule.d.ts.map +1 -0
- package/dist/phase/rules/unreferencedModule.js +61 -0
- package/dist/phase/rules/unreferencedModule.js.map +1 -0
- package/dist/phase/runner.d.ts +549 -0
- package/dist/phase/runner.d.ts.map +1 -0
- package/dist/phase/runner.js +1098 -0
- package/dist/phase/runner.js.map +1 -0
- package/dist/phase/schemaCode.d.ts +34 -0
- package/dist/phase/schemaCode.d.ts.map +1 -0
- package/dist/phase/schemaCode.js +53 -0
- package/dist/phase/schemaCode.js.map +1 -0
- package/dist/phase/schemaObjects.d.ts +37 -0
- package/dist/phase/schemaObjects.d.ts.map +1 -0
- package/dist/phase/schemaObjects.js +139 -0
- package/dist/phase/schemaObjects.js.map +1 -0
- package/dist/phase/schemaUsage.d.ts +30 -0
- package/dist/phase/schemaUsage.d.ts.map +1 -0
- package/dist/phase/schemaUsage.js +99 -0
- package/dist/phase/schemaUsage.js.map +1 -0
- package/dist/phase/schemaUsageCandidates.d.ts +32 -0
- package/dist/phase/schemaUsageCandidates.d.ts.map +1 -0
- package/dist/phase/schemaUsageCandidates.js +165 -0
- package/dist/phase/schemaUsageCandidates.js.map +1 -0
- package/dist/phase/schemaValidations.d.ts +34 -0
- package/dist/phase/schemaValidations.d.ts.map +1 -0
- package/dist/phase/schemaValidations.js +53 -0
- package/dist/phase/schemaValidations.js.map +1 -0
- package/dist/phase/secretCandidates.d.ts +28 -0
- package/dist/phase/secretCandidates.d.ts.map +1 -0
- package/dist/phase/secretCandidates.js +132 -0
- package/dist/phase/secretCandidates.js.map +1 -0
- package/dist/phase/securityCandidates.d.ts +29 -0
- package/dist/phase/securityCandidates.d.ts.map +1 -0
- package/dist/phase/securityCandidates.js +469 -0
- package/dist/phase/securityCandidates.js.map +1 -0
- package/dist/phase/seeded-defects.d.ts +18 -0
- package/dist/phase/seeded-defects.d.ts.map +1 -0
- package/dist/phase/seeded-defects.js +61 -0
- package/dist/phase/seeded-defects.js.map +1 -0
- package/dist/phase/stringLiterals.d.ts +24 -0
- package/dist/phase/stringLiterals.d.ts.map +1 -0
- package/dist/phase/stringLiterals.js +35 -0
- package/dist/phase/stringLiterals.js.map +1 -0
- package/dist/phase/stylesCss.d.ts +25 -0
- package/dist/phase/stylesCss.d.ts.map +1 -0
- package/dist/phase/stylesCss.js +34 -0
- package/dist/phase/stylesCss.js.map +1 -0
- package/dist/phase/stylesMarkup.d.ts +31 -0
- package/dist/phase/stylesMarkup.d.ts.map +1 -0
- package/dist/phase/stylesMarkup.js +48 -0
- package/dist/phase/stylesMarkup.js.map +1 -0
- package/dist/phase/stylesSource.d.ts +36 -0
- package/dist/phase/stylesSource.d.ts.map +1 -0
- package/dist/phase/stylesSource.js +50 -0
- package/dist/phase/stylesSource.js.map +1 -0
- package/dist/phase/typeDeclarations.d.ts +33 -0
- package/dist/phase/typeDeclarations.d.ts.map +1 -0
- package/dist/phase/typeDeclarations.js +76 -0
- package/dist/phase/typeDeclarations.js.map +1 -0
- package/dist/phase/types.d.ts +2191 -0
- package/dist/phase/types.d.ts.map +1 -0
- package/dist/phase/types.js +27 -0
- package/dist/phase/types.js.map +1 -0
- package/dist/phase/withinFileProvenance.d.ts +50 -0
- package/dist/phase/withinFileProvenance.d.ts.map +1 -0
- package/dist/phase/withinFileProvenance.js +112 -0
- package/dist/phase/withinFileProvenance.js.map +1 -0
- package/dist/pipeline.d.ts +37 -30
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +131 -326
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +104 -21
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +1145 -988
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/pipelineTypes.d.ts +21 -0
- package/dist/pipelineTypes.d.ts.map +1 -1
- package/dist/pipelineTypes.js +21 -10
- package/dist/pipelineTypes.js.map +1 -1
- package/dist/presets/presets.d.ts +9 -2
- package/dist/presets/presets.d.ts.map +1 -1
- package/dist/presets/presets.js +15 -26
- package/dist/presets/presets.js.map +1 -1
- package/dist/reporting/csvReportGenerator.d.ts +14 -3
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/csvReportGenerator.js +14 -3
- package/dist/reporting/csvReportGenerator.js.map +1 -1
- package/dist/reporting/htmlReportGenerator.d.ts +5 -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 +9 -2
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +19 -5
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/reporting/reportGenerator.d.ts +9 -2
- package/dist/reporting/reportGenerator.d.ts.map +1 -1
- package/dist/reporting/reportGenerator.js +9 -2
- package/dist/reporting/reportGenerator.js.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts +14 -0
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +14 -0
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/reporting/sizeDistribution.d.ts +19 -2
- package/dist/reporting/sizeDistribution.d.ts.map +1 -1
- package/dist/reporting/sizeDistribution.js +23 -5
- package/dist/reporting/sizeDistribution.js.map +1 -1
- package/dist/ruleAliases.d.ts +6 -8
- package/dist/ruleAliases.d.ts.map +1 -1
- package/dist/ruleAliases.js +29 -4
- package/dist/ruleAliases.js.map +1 -1
- package/dist/search/QueryParser.d.ts +1 -0
- package/dist/search/QueryParser.d.ts.map +1 -1
- package/dist/search/QueryParser.js +32 -91
- package/dist/search/QueryParser.js.map +1 -1
- package/dist/services/CodeMapGenerator.d.ts +19 -20
- package/dist/services/CodeMapGenerator.d.ts.map +1 -1
- package/dist/services/CodeMapGenerator.js +214 -194
- package/dist/services/CodeMapGenerator.js.map +1 -1
- package/dist/services/ProjectTaskRepository.d.ts +65 -3
- package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
- package/dist/services/ProjectTaskRepository.js +94 -25
- package/dist/services/ProjectTaskRepository.js.map +1 -1
- package/dist/services/auditJobService.d.ts +17 -1
- package/dist/services/auditJobService.d.ts.map +1 -1
- package/dist/services/auditJobService.js +16 -0
- package/dist/services/auditJobService.js.map +1 -1
- package/dist/services/fileAccounting.d.ts +43 -5
- package/dist/services/fileAccounting.d.ts.map +1 -1
- package/dist/services/fileAccounting.js +48 -9
- package/dist/services/fileAccounting.js.map +1 -1
- package/dist/services/projectTaskHelpers.d.ts +45 -0
- package/dist/services/projectTaskHelpers.d.ts.map +1 -1
- package/dist/services/projectTaskHelpers.js +45 -0
- package/dist/services/projectTaskHelpers.js.map +1 -1
- package/dist/services/whitelistService.d.ts +40 -5
- package/dist/services/whitelistService.d.ts.map +1 -1
- package/dist/services/whitelistService.js +87 -46
- package/dist/services/whitelistService.js.map +1 -1
- package/dist/sqlite/betterSqlite3.d.ts +35 -1
- package/dist/sqlite/betterSqlite3.d.ts.map +1 -1
- package/dist/sqlite/betterSqlite3.js +35 -1
- package/dist/sqlite/betterSqlite3.js.map +1 -1
- package/dist/sqlite/driver.d.ts +23 -0
- package/dist/sqlite/driver.d.ts.map +1 -1
- package/dist/sqlite/driver.js +23 -0
- package/dist/sqlite/driver.js.map +1 -1
- package/dist/sqlite/nodeSqlite.d.ts +35 -1
- package/dist/sqlite/nodeSqlite.d.ts.map +1 -1
- package/dist/sqlite/nodeSqlite.js +35 -1
- package/dist/sqlite/nodeSqlite.js.map +1 -1
- package/dist/structuralSignature.d.ts +9 -0
- package/dist/structuralSignature.d.ts.map +1 -1
- package/dist/structuralSignature.js +9 -0
- package/dist/structuralSignature.js.map +1 -1
- package/dist/styles/cssAstExtractor.d.ts +15 -0
- package/dist/styles/cssAstExtractor.d.ts.map +1 -1
- package/dist/styles/cssAstExtractor.js +15 -0
- package/dist/styles/cssAstExtractor.js.map +1 -1
- package/dist/styles/normalizer.d.ts +6 -0
- package/dist/styles/normalizer.d.ts.map +1 -1
- package/dist/styles/normalizer.js +6 -0
- package/dist/styles/normalizer.js.map +1 -1
- package/dist/styles/styleExtractor.d.ts +29 -2
- package/dist/styles/styleExtractor.d.ts.map +1 -1
- package/dist/styles/styleExtractor.js +67 -48
- package/dist/styles/styleExtractor.js.map +1 -1
- package/dist/styles/styleIndexer.d.ts +8 -0
- package/dist/styles/styleIndexer.d.ts.map +1 -1
- package/dist/styles/styleIndexer.js +135 -138
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/styles/tailwindConfigLoader.d.ts +12 -0
- package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
- package/dist/styles/tailwindConfigLoader.js +12 -0
- package/dist/styles/tailwindConfigLoader.js.map +1 -1
- package/dist/styles/tailwindExpander.d.ts +3 -0
- package/dist/styles/tailwindExpander.d.ts.map +1 -1
- package/dist/styles/tailwindExpander.js +8 -4
- package/dist/styles/tailwindExpander.js.map +1 -1
- package/dist/styles/tailwindProbe.d.ts +9 -0
- package/dist/styles/tailwindProbe.d.ts.map +1 -1
- package/dist/styles/tailwindProbe.js +181 -166
- package/dist/styles/tailwindProbe.js.map +1 -1
- package/dist/styles/tailwindUtilityExpander.d.ts +13 -0
- package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.js +13 -0
- package/dist/styles/tailwindUtilityExpander.js.map +1 -1
- package/dist/symbols.d.ts +13 -11
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +14 -21
- package/dist/symbols.js.map +1 -1
- package/dist/telemetry.d.ts +31 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +31 -3
- package/dist/telemetry.js.map +1 -1
- package/dist/tool-registry.d.ts +37 -1
- package/dist/tool-registry.d.ts.map +1 -1
- package/dist/tool-registry.js +37 -1
- package/dist/tool-registry.js.map +1 -1
- package/dist/types.d.ts +106 -92
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -16
- package/dist/types.js.map +1 -1
- package/dist/ui/InteractivePrompts.d.ts +12 -0
- package/dist/ui/InteractivePrompts.d.ts.map +1 -1
- package/dist/ui/InteractivePrompts.js +12 -0
- package/dist/ui/InteractivePrompts.js.map +1 -1
- package/dist/utils/astParser.d.ts +15 -0
- package/dist/utils/astParser.d.ts.map +1 -1
- package/dist/utils/astParser.js +15 -0
- package/dist/utils/astParser.js.map +1 -1
- package/dist/utils/astUtils.d.ts +60 -0
- package/dist/utils/astUtils.d.ts.map +1 -1
- package/dist/utils/astUtils.js +350 -362
- package/dist/utils/astUtils.js.map +1 -1
- package/dist/utils/contentHash.d.ts +22 -0
- package/dist/utils/contentHash.d.ts.map +1 -0
- package/dist/utils/contentHash.js +26 -0
- package/dist/utils/contentHash.js.map +1 -0
- package/dist/utils/dependencyExtractor.d.ts +28 -0
- package/dist/utils/dependencyExtractor.d.ts.map +1 -1
- package/dist/utils/dependencyExtractor.js +28 -1
- package/dist/utils/dependencyExtractor.js.map +1 -1
- package/dist/utils/errorMessage.d.ts +10 -0
- package/dist/utils/errorMessage.d.ts.map +1 -0
- package/dist/utils/errorMessage.js +12 -0
- package/dist/utils/errorMessage.js.map +1 -0
- package/dist/utils/fileDiscovery.d.ts +61 -2
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +131 -23
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/dist/utils/reactDetection.d.ts +34 -5
- package/dist/utils/reactDetection.d.ts.map +1 -1
- package/dist/utils/reactDetection.js +73 -52
- package/dist/utils/reactDetection.js.map +1 -1
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.js +1 -1
- package/dist/workers/auditWorker.js +7 -3
- package/dist/workers/auditWorker.js.map +1 -1
- package/examples/.auditrc.example.json +0 -8
- package/examples/.auditrc.json +0 -11
- package/examples/.code-auditor.json +0 -2
- package/examples/nextjs.auditrc.json +0 -8
- package/examples/node-api.auditrc.json +0 -7
- package/examples/react.auditrc.json +0 -6
- package/examples/tolerant-solid.auditrc.json +0 -5
- package/package.json +14 -8
- package/plugin/.claude-plugin/manifest.json +16 -0
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/hooks/hooks.json +6 -2
- package/plugin/scripts/hook-audit.sh +41 -14
- package/plugin/scripts/hook-common.sh +50 -5
- package/plugin/scripts/hook-drift-check.sh +72 -0
- package/plugin/scripts/hook-self-audit.sh +17 -12
- package/plugin/skills/code-auditor/SKILL.md +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,1027 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 68 §3.1 — one producer per (fact kind, format), enforced by a nested
|
|
3
|
+
* mapped type.
|
|
4
|
+
*
|
|
5
|
+
* `ProducerMap` is a mapped type over {@link FileFactKind}, and for each kind a
|
|
6
|
+
* second mapped type over that kind's {@link SupplyingFormats} — exhaustive by
|
|
7
|
+
* construction in both axes. A file fact kind with no entry (or a format named
|
|
8
|
+
* in `SupplyingFormats` with no producer) fails the type (residue check #1 in
|
|
9
|
+
* checks.ts); a second producer for one (kind, format) is a duplicate object
|
|
10
|
+
* key (single-producer check). There is no list to be omitted from — which is
|
|
11
|
+
* the defect class Spec 68 §0, row 2 exists to remove.
|
|
12
|
+
*
|
|
13
|
+
* The split is the fix for the naming rule in its second form: a fact kind is a
|
|
14
|
+
* *concept*, not a language. `file-symbols` is supplied by three formats that
|
|
15
|
+
* all run one format-agnostic extractor, so it has three (kind, format) entries
|
|
16
|
+
* sharing a `process`; a future `channel-operations` would have a `go`, a
|
|
17
|
+
* `rust` and a `typescript` entry with *different* extractors. A corpus
|
|
18
|
+
* processor (a derived fact, no format) lives in {@link CORPUS_PRODUCERS}, not
|
|
19
|
+
* here — the DAG (§5) walks that map's `needs` edges.
|
|
20
|
+
*
|
|
21
|
+
* Only kinds with a producer that returns *real* data appear. A planned kind
|
|
22
|
+
* without a working producer is absent from {@link FactShapes} and from these
|
|
23
|
+
* maps by construction; the migration map (spec68-rule-migration-map.md) holds
|
|
24
|
+
* the plan, the type holds only what runs.
|
|
25
|
+
*/
|
|
26
|
+
import { countOracle, noOracle, countFileSymbols, countImports, countExportForm, countExportSymbols, countFunctionIndex, countStringLiterals, countCrossLanguageEntities, countCodeBlocks, countFileImports, countJsxElements, countBatchFunctions, countGoImports, countGoFunctions, countGoSwitches, countTypeDeclarations, countGoPackageBindings, countSchemaObjects, countDdlOps, countCssDeclarations, countSecretCandidates, countSecurityCandidates, countDataAccessCalls, countLoopQueries, countDynamicSql, countQuerySites, countSchemaUsage, measuredDdlOps, measuredStyleDeclarations, measuredJsxElements, measuredFileImports, measuredGoPackageBindings, measuredQuerySites, measuredSchemaUsageCandidates, } from './oracles.js';
|
|
27
|
+
import { extractFileSymbols } from './fileSymbols.js';
|
|
28
|
+
import { extractFunctionIndex } from './functionIndex.js';
|
|
29
|
+
import { extractQuerySiteCandidates } from './querySiteCandidates.js';
|
|
30
|
+
import { extractReactComponents } from './reactComponents.js';
|
|
31
|
+
import { extractFileHeader } from './fileHeader.js';
|
|
32
|
+
import { extractCodeBlocks } from './codeBlocks.js';
|
|
33
|
+
import { extractBatchFunctions } from './batchFunctions.js';
|
|
34
|
+
import { extractJsonDocument } from './jsonDocument.js';
|
|
35
|
+
import { buildSchemaValidations } from './schemaValidations.js';
|
|
36
|
+
import { extractImports } from './imports.js';
|
|
37
|
+
import { extractImportSpecifiers } from './importSpecifiers.js';
|
|
38
|
+
import { extractExportSymbols } from './exportSymbols.js';
|
|
39
|
+
import { extractExportForm } from './exportForm.js';
|
|
40
|
+
import { extractImportForm } from './importForm.js';
|
|
41
|
+
import { extractStringLiterals } from './stringLiterals.js';
|
|
42
|
+
import { extractSecretCandidates } from './secretCandidates.js';
|
|
43
|
+
import { extractSecurityCandidates } from './securityCandidates.js';
|
|
44
|
+
import { extractStylesCss } from './stylesCss.js';
|
|
45
|
+
import { extractStylesSource } from './stylesSource.js';
|
|
46
|
+
import { extractStylesMarkup } from './stylesMarkup.js';
|
|
47
|
+
import { extractDataAccessCallCandidates } from './dataAccessCallsCandidates.js';
|
|
48
|
+
import { extractLoopQueryRawCandidates } from './loopQueryCandidates.js';
|
|
49
|
+
import { extractDynamicSql } from './dynamicSql.js';
|
|
50
|
+
import { extractSchemaUsageCandidates } from './schemaUsageCandidates.js';
|
|
51
|
+
import { extractSchemaCode } from './schemaCode.js';
|
|
52
|
+
import { extractSchemaObjects } from './schemaObjects.js';
|
|
53
|
+
import { extractCrossLanguageEntities } from '../pipelineAdapters.js';
|
|
54
|
+
import { getLanguageFromPath } from '../utils/fileDiscovery.js';
|
|
55
|
+
import { mineConventionsFromFunctionIndex } from './conventionMining.js';
|
|
56
|
+
import { replayDdlDeclarations } from '../analyzers/universal/schema/migrations.js';
|
|
57
|
+
import { extractFileImports } from './fileImports.js';
|
|
58
|
+
import { extractTypeDeclarations } from './typeDeclarations.js';
|
|
59
|
+
import { extractGoFunctions } from './goFunctions.js';
|
|
60
|
+
import { extractGoSwitches } from './goSwitches.js';
|
|
61
|
+
import { extractGoImports } from './goImports.js';
|
|
62
|
+
import { extractGoPackageBindings } from './goPackageBindings.js';
|
|
63
|
+
import { extractWithinFileProvenance, evidenceToFact } from './withinFileProvenance.js';
|
|
64
|
+
import { extractReceiverActivity } from './receiverActivity.js';
|
|
65
|
+
import { computeReceiverProvenance } from './receiverProvenance.js';
|
|
66
|
+
import { classifyQuerySites, classifySchemaUsage, classifyDataAccessCalls, classifyLoopQueries } from './receiverConsumers.js';
|
|
67
|
+
import { extractErrorBindings, extractConcurrencyPrimitives, extractChannelOperations } from './goFunctionAnalysis.js';
|
|
68
|
+
import { computeReachability } from './reachability.js';
|
|
69
|
+
import { DEFAULT_VIRTUAL_MODULES } from '../graph/importClassification.js';
|
|
70
|
+
import { parseColorToRGB, rgbToLab } from './colorMath.js';
|
|
71
|
+
/** Build one (kind, format) file-producer entry from a shared extractor. */
|
|
72
|
+
function fileProducer(kind, format, process, oracle) {
|
|
73
|
+
return { id: `${kind}.${format}`, produces: kind, format, process, oracle };
|
|
74
|
+
}
|
|
75
|
+
// The seven per-file extractors, hoisted so each (kind, format) entry reuses the
|
|
76
|
+
// one format-agnostic `process` for the formats that share an adapter. Every
|
|
77
|
+
// AST-reading extractor narrows `ParsedFile` to `AstFile`: the ProducerMap type
|
|
78
|
+
// only ever registers these under adapter-backed formats (a `sql` key exists on
|
|
79
|
+
// `ddl-declarations` alone, and `extractSchemaCode` reads `.source`, not the
|
|
80
|
+
// AST), so the cast is the one boundary where a text-only file cannot reach an
|
|
81
|
+
// AST consumer.
|
|
82
|
+
const fileSymbolsProcess = (file) => extractFileSymbols(file);
|
|
83
|
+
const functionIndexProcess = (file) => extractFunctionIndex(file);
|
|
84
|
+
const querySiteCandidatesProcess = (file) => extractQuerySiteCandidates(file);
|
|
85
|
+
const importsProcess = (file) => extractImports(file);
|
|
86
|
+
const importSpecifiersProcess = (file) => extractImportSpecifiers(file);
|
|
87
|
+
const exportSymbolsProcess = (file) => extractExportSymbols(file);
|
|
88
|
+
const exportFormProcess = (file) => extractExportForm(file);
|
|
89
|
+
const importFormProcess = (file) => extractImportForm(file);
|
|
90
|
+
const stringLiteralsProcess = (file) => extractStringLiterals(file);
|
|
91
|
+
const secretCandidatesProcess = (file) => extractSecretCandidates(file);
|
|
92
|
+
const securityCandidatesProcess = (file) => extractSecurityCandidates(file);
|
|
93
|
+
const ddlProcess = (file) => extractSchemaCode(file);
|
|
94
|
+
const schemaUsageCandidatesProcess = (file) => extractSchemaUsageCandidates(file);
|
|
95
|
+
const schemaObjectsProcess = (file) => extractSchemaObjects(file);
|
|
96
|
+
const styleProcess = (file) => [extractStylesCss(file)];
|
|
97
|
+
const styleSourceProcess = (file) => extractStylesSource(file);
|
|
98
|
+
const styleMarkupProcess = (file) => extractStylesMarkup(file);
|
|
99
|
+
const crossLangProcess = (file) => extractCrossLanguageEntities(file.ast, file.file, file.source, getLanguageFromPath(file.file));
|
|
100
|
+
const dataAccessCandidatesProcess = (file) => extractDataAccessCallCandidates(file);
|
|
101
|
+
const loopQueryCandidatesProcess = (file) => extractLoopQueryRawCandidates(file);
|
|
102
|
+
const dynamicSqlProcess = (file) => extractDynamicSql(file);
|
|
103
|
+
const reactComponentProcess = (file) => [extractReactComponents(file)];
|
|
104
|
+
const fileHeaderProcess = (file) => extractFileHeader(file);
|
|
105
|
+
const codeBlockProcess = (file) => extractCodeBlocks(file);
|
|
106
|
+
const jsonDocumentProcess = (file) => extractJsonDocument(file);
|
|
107
|
+
const fileImportsProcess = (file) => [extractFileImports(file.ast, file.file, file.source, getLanguageFromPath(file.file))];
|
|
108
|
+
const typeDeclarationsProcess = (file) => extractTypeDeclarations(file);
|
|
109
|
+
const goFunctionsProcess = (file) => extractGoFunctions(file);
|
|
110
|
+
const goSwitchesProcess = (file) => extractGoSwitches(file);
|
|
111
|
+
const goImportsProcess = (file) => extractGoImports(file);
|
|
112
|
+
const goPackageBindingsProcess = (file) => extractGoPackageBindings(file);
|
|
113
|
+
const withinFileProvenanceProcess = (file) => extractWithinFileProvenance(file);
|
|
114
|
+
const receiverActivityProcess = (file) => extractReceiverActivity(file);
|
|
115
|
+
const errorBindingsProcess = (file) => extractErrorBindings(file);
|
|
116
|
+
const concurrencyPrimitivesProcess = (file) => extractConcurrencyPrimitives(file);
|
|
117
|
+
const channelOperationsProcess = (file) => extractChannelOperations(file);
|
|
118
|
+
const batchFunctionsProcess = (file) => extractBatchFunctions(file);
|
|
119
|
+
// ── Spec 69 R1 — the `none` residues (every one enumerated in the run, criterion 3) ──
|
|
120
|
+
// The R1 correction re-examined every `none` against an *upper-bound* bar, not an
|
|
121
|
+
// exact-count bar: an oracle that over-counts is still an oracle, because the
|
|
122
|
+
// residual is pinned and a movement in it is the signal (the `batch-functions`
|
|
123
|
+
// / `countCssDeclarations` precedent). That converted all 22 of the old
|
|
124
|
+
// CLASSIFICATION/GATED `none`s to coarse counted oracles — "no exact counter"
|
|
125
|
+
// and "the residual drowns the signal" were judgements, not measurements, and
|
|
126
|
+
// the aggregate gate pins `actual` exactly so any producer regression shows
|
|
127
|
+
// regardless of residual size. The split is now 80 counted / 15 none.
|
|
128
|
+
// • STYLE_SOURCE / STYLE_MARKUP — the declaration unit is the *expansion* of a
|
|
129
|
+
// union of source mechanisms (Tailwind utility classes, inline-style object
|
|
130
|
+
// pairs, CSS-in-JS templates). Tailwind-utility and shorthand expansion make
|
|
131
|
+
// the emitted declaration count exceed any cheap count of source syntactic
|
|
132
|
+
// features, so no source-feature count upper-bounds it (a class token expands
|
|
133
|
+
// to ≥1 declaration; `margin: 4px` to 4). Any cheap count would *under*-bound
|
|
134
|
+
// and never fire — a dead oracle, not a noisy one. This is a genuine `none`:
|
|
135
|
+
// not "no exact counter" but "no cheap *upper* bound exists".
|
|
136
|
+
// • SINGLE_OBJECT — the producer emits exactly one fragment per file
|
|
137
|
+
// (null-or-value), so there is no partial-extraction failure mode for an
|
|
138
|
+
// oracle to guard: a count of 1 against 1 is the empty oracle.
|
|
139
|
+
const STYLE_SOURCE = noOracle('declarations are the expansion of a union of source mechanisms (Tailwind utility classes, inline-style object pairs, CSS-in-JS templates); Tailwind-utility and shorthand expansion make the emitted count exceed any cheap count of source features, so every cheap count under-bounds and would never fire a shortfall');
|
|
140
|
+
const STYLE_MARKUP = noOracle('declarations are extracted by regex over markup source with no AST and are the expansion of class/style/block mechanisms; Tailwind-utility and shorthand expansion make the emitted count exceed any cheap count of source features, so every cheap count under-bounds and would never fire a shortfall');
|
|
141
|
+
const SINGLE_OBJECT = noOracle('emits exactly one fragment per file (null-or-value); there is no partial-extraction failure mode to guard, so a count of 1 against 1 is the empty oracle');
|
|
142
|
+
const WITHIN_FILE_PROVENANCE = noOracle('projects several distinct node families (imports, six function-node types, three class-node types, four propagation-rule node shapes) into six heterogeneous lists, and one named function node contributes to three of them at once (wrapper, returning, local-function) — so no cheap node-type count upper-bounds the total unit count without a weighted per-family multiplier, and any unweighted count either under-bounds (a dead oracle) or counts a different unit (total nodes) than the R1 "same unit" rule allows; the fact is an intermediate projection whose completeness is pinned byte-for-byte by the corpus-level parity assertion against resolveCorpusReceivers, which is the stronger guard');
|
|
143
|
+
export const PRODUCERS = {
|
|
144
|
+
'file-symbols': {
|
|
145
|
+
typescript: fileProducer('file-symbols', 'typescript', fileSymbolsProcess, countOracle(countFileSymbols)),
|
|
146
|
+
tsx: fileProducer('file-symbols', 'tsx', fileSymbolsProcess, countOracle(countFileSymbols)),
|
|
147
|
+
javascript: fileProducer('file-symbols', 'javascript', fileSymbolsProcess, countOracle(countFileSymbols)),
|
|
148
|
+
},
|
|
149
|
+
'function-index': {
|
|
150
|
+
typescript: fileProducer('function-index', 'typescript', functionIndexProcess, countOracle(countFunctionIndex)),
|
|
151
|
+
tsx: fileProducer('function-index', 'tsx', functionIndexProcess, countOracle(countFunctionIndex)),
|
|
152
|
+
javascript: fileProducer('function-index', 'javascript', functionIndexProcess, countOracle(countFunctionIndex)),
|
|
153
|
+
},
|
|
154
|
+
// Spec 70 Item 4 (step 3) — the un-gated per-file query-site candidates. The
|
|
155
|
+
// `query-sites` corpus producer re-applies the file gate once the
|
|
156
|
+
// `receiver-provenance` fixed point supplies the cross-file seed. Emits one
|
|
157
|
+
// fragment per TS-family file (null-or-value) carrying the located `sites`
|
|
158
|
+
// array, so the oracle counts the site units inside it: `countQuerySites` is
|
|
159
|
+
// the same every-member-call + every-SQL-keyword upper bound the resolved
|
|
160
|
+
// producer used, measured as the summed `sites.length` — not the fragment
|
|
161
|
+
// count (which would be a 1-against-1 empty oracle).
|
|
162
|
+
'query-site-candidates': {
|
|
163
|
+
typescript: fileProducer('query-site-candidates', 'typescript', querySiteCandidatesProcess, countOracle(countQuerySites, measuredQuerySites)),
|
|
164
|
+
tsx: fileProducer('query-site-candidates', 'tsx', querySiteCandidatesProcess, countOracle(countQuerySites, measuredQuerySites)),
|
|
165
|
+
javascript: fileProducer('query-site-candidates', 'javascript', querySiteCandidatesProcess, countOracle(countQuerySites, measuredQuerySites)),
|
|
166
|
+
},
|
|
167
|
+
'imports': {
|
|
168
|
+
typescript: fileProducer('imports', 'typescript', importsProcess, countOracle(countImports)),
|
|
169
|
+
tsx: fileProducer('imports', 'tsx', importsProcess, countOracle(countImports)),
|
|
170
|
+
javascript: fileProducer('imports', 'javascript', importsProcess, countOracle(countImports)),
|
|
171
|
+
go: fileProducer('imports', 'go', goImportsProcess, countOracle(countGoImports)),
|
|
172
|
+
},
|
|
173
|
+
'import-specifiers': {
|
|
174
|
+
typescript: fileProducer('import-specifiers', 'typescript', importSpecifiersProcess, countOracle(countImports)),
|
|
175
|
+
tsx: fileProducer('import-specifiers', 'tsx', importSpecifiersProcess, countOracle(countImports)),
|
|
176
|
+
javascript: fileProducer('import-specifiers', 'javascript', importSpecifiersProcess, countOracle(countImports)),
|
|
177
|
+
},
|
|
178
|
+
'export-symbols': {
|
|
179
|
+
typescript: fileProducer('export-symbols', 'typescript', exportSymbolsProcess, countOracle(countExportSymbols)),
|
|
180
|
+
tsx: fileProducer('export-symbols', 'tsx', exportSymbolsProcess, countOracle(countExportSymbols)),
|
|
181
|
+
javascript: fileProducer('export-symbols', 'javascript', exportSymbolsProcess, countOracle(countExportSymbols)),
|
|
182
|
+
},
|
|
183
|
+
'export-form': {
|
|
184
|
+
typescript: fileProducer('export-form', 'typescript', exportFormProcess, countOracle(countExportForm)),
|
|
185
|
+
tsx: fileProducer('export-form', 'tsx', exportFormProcess, countOracle(countExportForm)),
|
|
186
|
+
javascript: fileProducer('export-form', 'javascript', exportFormProcess, countOracle(countExportForm)),
|
|
187
|
+
},
|
|
188
|
+
'import-form': {
|
|
189
|
+
typescript: fileProducer('import-form', 'typescript', importFormProcess, countOracle(countImports)),
|
|
190
|
+
tsx: fileProducer('import-form', 'tsx', importFormProcess, countOracle(countImports)),
|
|
191
|
+
javascript: fileProducer('import-form', 'javascript', importFormProcess, countOracle(countImports)),
|
|
192
|
+
},
|
|
193
|
+
'string-literals': {
|
|
194
|
+
typescript: fileProducer('string-literals', 'typescript', stringLiteralsProcess, countOracle(countStringLiterals)),
|
|
195
|
+
tsx: fileProducer('string-literals', 'tsx', stringLiteralsProcess, countOracle(countStringLiterals)),
|
|
196
|
+
javascript: fileProducer('string-literals', 'javascript', stringLiteralsProcess, countOracle(countStringLiterals)),
|
|
197
|
+
},
|
|
198
|
+
'secret-candidates': {
|
|
199
|
+
typescript: fileProducer('secret-candidates', 'typescript', secretCandidatesProcess, countOracle(countSecretCandidates)),
|
|
200
|
+
tsx: fileProducer('secret-candidates', 'tsx', secretCandidatesProcess, countOracle(countSecretCandidates)),
|
|
201
|
+
javascript: fileProducer('secret-candidates', 'javascript', secretCandidatesProcess, countOracle(countSecretCandidates)),
|
|
202
|
+
},
|
|
203
|
+
'security-candidates': {
|
|
204
|
+
typescript: fileProducer('security-candidates', 'typescript', securityCandidatesProcess, countOracle(countSecurityCandidates)),
|
|
205
|
+
tsx: fileProducer('security-candidates', 'tsx', securityCandidatesProcess, countOracle(countSecurityCandidates)),
|
|
206
|
+
javascript: fileProducer('security-candidates', 'javascript', securityCandidatesProcess, countOracle(countSecurityCandidates)),
|
|
207
|
+
},
|
|
208
|
+
// `ddl-declarations` was `schema-code`: DDL declarations parsed from code.
|
|
209
|
+
// `sql` is the text-only supplier — the whole file is DDL (a migration), so
|
|
210
|
+
// the same extractor runs over `.source` (it never reads the AST).
|
|
211
|
+
'ddl-declarations': {
|
|
212
|
+
typescript: fileProducer('ddl-declarations', 'typescript', ddlProcess, countOracle(countDdlOps, measuredDdlOps)),
|
|
213
|
+
tsx: fileProducer('ddl-declarations', 'tsx', ddlProcess, countOracle(countDdlOps, measuredDdlOps)),
|
|
214
|
+
javascript: fileProducer('ddl-declarations', 'javascript', ddlProcess, countOracle(countDdlOps, measuredDdlOps)),
|
|
215
|
+
sql: fileProducer('ddl-declarations', 'sql', ddlProcess, countOracle(countDdlOps, measuredDdlOps)),
|
|
216
|
+
},
|
|
217
|
+
// Spec 70 Item 4 (step 3) — the un-gated per-file schema-usage candidates. The
|
|
218
|
+
// `schema-usage` corpus producer re-applies the file gate and re-admits the
|
|
219
|
+
// provenance-dependent references once the `receiver-provenance` fixed point
|
|
220
|
+
// supplies the cross-file seed. Emits one fragment per TS-family file
|
|
221
|
+
// (null-or-value) carrying the five candidate arrays, so the oracle counts the
|
|
222
|
+
// candidate units inside it: `countSchemaUsage` is the same call+string+
|
|
223
|
+
// template upper bound the resolved producer used, measured as the summed
|
|
224
|
+
// candidate lengths — not the fragment count (which would be a 1-against-1
|
|
225
|
+
// empty oracle).
|
|
226
|
+
'schema-usage-candidates': {
|
|
227
|
+
typescript: fileProducer('schema-usage-candidates', 'typescript', schemaUsageCandidatesProcess, countOracle(countSchemaUsage, measuredSchemaUsageCandidates)),
|
|
228
|
+
tsx: fileProducer('schema-usage-candidates', 'tsx', schemaUsageCandidatesProcess, countOracle(countSchemaUsage, measuredSchemaUsageCandidates)),
|
|
229
|
+
javascript: fileProducer('schema-usage-candidates', 'javascript', schemaUsageCandidatesProcess, countOracle(countSchemaUsage, measuredSchemaUsageCandidates)),
|
|
230
|
+
},
|
|
231
|
+
// `schema-objects` — ORM `const <id> = pgTable('name', …)` bindings, the
|
|
232
|
+
// identifier → SQL-name half of the known-table catalog's alias map. Text-only
|
|
233
|
+
// projection (no AST), like `ddl-declarations`, so it reads `ParsedFile`.
|
|
234
|
+
'schema-objects': {
|
|
235
|
+
typescript: fileProducer('schema-objects', 'typescript', schemaObjectsProcess, countOracle(countSchemaObjects)),
|
|
236
|
+
tsx: fileProducer('schema-objects', 'tsx', schemaObjectsProcess, countOracle(countSchemaObjects)),
|
|
237
|
+
javascript: fileProducer('schema-objects', 'javascript', schemaObjectsProcess, countOracle(countSchemaObjects)),
|
|
238
|
+
},
|
|
239
|
+
// `style-declarations` was `styles-css` (named for the declaration, not the format).
|
|
240
|
+
'style-declarations': {
|
|
241
|
+
css: fileProducer('style-declarations', 'css', styleProcess, countOracle(countCssDeclarations, measuredStyleDeclarations)),
|
|
242
|
+
scss: fileProducer('style-declarations', 'scss', styleProcess, countOracle(countCssDeclarations, measuredStyleDeclarations)),
|
|
243
|
+
typescript: fileProducer('style-declarations', 'typescript', styleSourceProcess, STYLE_SOURCE),
|
|
244
|
+
tsx: fileProducer('style-declarations', 'tsx', styleSourceProcess, STYLE_SOURCE),
|
|
245
|
+
javascript: fileProducer('style-declarations', 'javascript', styleSourceProcess, STYLE_SOURCE),
|
|
246
|
+
markup: fileProducer('style-declarations', 'markup', styleMarkupProcess, STYLE_MARKUP),
|
|
247
|
+
},
|
|
248
|
+
'cross-language-entities': {
|
|
249
|
+
typescript: fileProducer('cross-language-entities', 'typescript', crossLangProcess, countOracle(countCrossLanguageEntities)),
|
|
250
|
+
tsx: fileProducer('cross-language-entities', 'tsx', crossLangProcess, countOracle(countCrossLanguageEntities)),
|
|
251
|
+
javascript: fileProducer('cross-language-entities', 'javascript', crossLangProcess, countOracle(countCrossLanguageEntities)),
|
|
252
|
+
go: fileProducer('cross-language-entities', 'go', crossLangProcess, countOracle(countCrossLanguageEntities)),
|
|
253
|
+
},
|
|
254
|
+
// Spec 70 Item 4 (step 3) — the raw, provenance-free candidate half of the
|
|
255
|
+
// `data-access-calls` collapse. Extracted while the AST lives on the
|
|
256
|
+
// empty-provenance scan; the corpus `data-access-calls` producer re-folds the
|
|
257
|
+
// provenance-dependent half (handle verdict → admission + injection gate, site
|
|
258
|
+
// dialect → SQL parse) once the `receiver-provenance` fixed point supplies the
|
|
259
|
+
// seed. The oracle is the same `call_expression` + `template_string` upper bound
|
|
260
|
+
// the resolved-call producer used: every candidate is a call or a tagged
|
|
261
|
+
// template (a variable-assignment candidate is a `variable_declaration`, the same
|
|
262
|
+
// residual the old producer carried).
|
|
263
|
+
'data-access-calls-candidates': {
|
|
264
|
+
typescript: fileProducer('data-access-calls-candidates', 'typescript', dataAccessCandidatesProcess, countOracle(countDataAccessCalls)),
|
|
265
|
+
tsx: fileProducer('data-access-calls-candidates', 'tsx', dataAccessCandidatesProcess, countOracle(countDataAccessCalls)),
|
|
266
|
+
javascript: fileProducer('data-access-calls-candidates', 'javascript', dataAccessCandidatesProcess, countOracle(countDataAccessCalls)),
|
|
267
|
+
go: fileProducer('data-access-calls-candidates', 'go', dataAccessCandidatesProcess, countOracle(countDataAccessCalls)),
|
|
268
|
+
},
|
|
269
|
+
// Spec 70 Item 4 (step 3) — the raw, provenance-free candidate half of the
|
|
270
|
+
// `loop-queries` collapse. No dedup and no symbol happen here (both depend on
|
|
271
|
+
// the re-folded handle set); the corpus `loop-queries` producer re-folds the
|
|
272
|
+
// strict-handle filter, dedups by loop byte-offset, and assigns the symbol.
|
|
273
|
+
'loop-query-candidates': {
|
|
274
|
+
typescript: fileProducer('loop-query-candidates', 'typescript', loopQueryCandidatesProcess, countOracle(countLoopQueries)),
|
|
275
|
+
tsx: fileProducer('loop-query-candidates', 'tsx', loopQueryCandidatesProcess, countOracle(countLoopQueries)),
|
|
276
|
+
javascript: fileProducer('loop-query-candidates', 'javascript', loopQueryCandidatesProcess, countOracle(countLoopQueries)),
|
|
277
|
+
},
|
|
278
|
+
'dynamic-sql': {
|
|
279
|
+
typescript: fileProducer('dynamic-sql', 'typescript', dynamicSqlProcess, countOracle(countDynamicSql)),
|
|
280
|
+
tsx: fileProducer('dynamic-sql', 'tsx', dynamicSqlProcess, countOracle(countDynamicSql)),
|
|
281
|
+
javascript: fileProducer('dynamic-sql', 'javascript', dynamicSqlProcess, countOracle(countDynamicSql)),
|
|
282
|
+
},
|
|
283
|
+
'react-component': {
|
|
284
|
+
typescript: fileProducer('react-component', 'typescript', reactComponentProcess, countOracle(countJsxElements, measuredJsxElements)),
|
|
285
|
+
tsx: fileProducer('react-component', 'tsx', reactComponentProcess, countOracle(countJsxElements, measuredJsxElements)),
|
|
286
|
+
javascript: fileProducer('react-component', 'javascript', reactComponentProcess, countOracle(countJsxElements, measuredJsxElements)),
|
|
287
|
+
},
|
|
288
|
+
'file-header': {
|
|
289
|
+
typescript: fileProducer('file-header', 'typescript', fileHeaderProcess, SINGLE_OBJECT),
|
|
290
|
+
tsx: fileProducer('file-header', 'tsx', fileHeaderProcess, SINGLE_OBJECT),
|
|
291
|
+
javascript: fileProducer('file-header', 'javascript', fileHeaderProcess, SINGLE_OBJECT),
|
|
292
|
+
},
|
|
293
|
+
'code-block': {
|
|
294
|
+
typescript: fileProducer('code-block', 'typescript', codeBlockProcess, countOracle(countCodeBlocks)),
|
|
295
|
+
tsx: fileProducer('code-block', 'tsx', codeBlockProcess, countOracle(countCodeBlocks)),
|
|
296
|
+
javascript: fileProducer('code-block', 'javascript', codeBlockProcess, countOracle(countCodeBlocks)),
|
|
297
|
+
},
|
|
298
|
+
// `json-document` was the Amendment-1 "json is a format" producer: a `.json`
|
|
299
|
+
// file's parsed value, read for the `schema-validations` corpus reduction.
|
|
300
|
+
// It reads `.source` only (the JsonAdapter has no code constructs), so it
|
|
301
|
+
// takes `ParsedFile`, not `AstFile` — like the text-only `sql` DDL producer.
|
|
302
|
+
'json-document': {
|
|
303
|
+
json: fileProducer('json-document', 'json', jsonDocumentProcess, SINGLE_OBJECT),
|
|
304
|
+
},
|
|
305
|
+
'file-imports': {
|
|
306
|
+
typescript: fileProducer('file-imports', 'typescript', fileImportsProcess, countOracle(countFileImports, measuredFileImports)),
|
|
307
|
+
tsx: fileProducer('file-imports', 'tsx', fileImportsProcess, countOracle(countFileImports, measuredFileImports)),
|
|
308
|
+
javascript: fileProducer('file-imports', 'javascript', fileImportsProcess, countOracle(countFileImports, measuredFileImports)),
|
|
309
|
+
go: fileProducer('file-imports', 'go', fileImportsProcess, countOracle(countFileImports, measuredFileImports)),
|
|
310
|
+
},
|
|
311
|
+
// §9 — Go named struct/interface declarations, served only for the `go`
|
|
312
|
+
// format (the Go grammar is the only supplier). `struct-size` and the Go arm
|
|
313
|
+
// of `interface-size` read it.
|
|
314
|
+
'type-declarations': {
|
|
315
|
+
go: fileProducer('type-declarations', 'go', typeDeclarationsProcess, countOracle(countTypeDeclarations)),
|
|
316
|
+
},
|
|
317
|
+
// §9 — Go function metrics + switch case counts, served only for the `go`
|
|
318
|
+
// format. `function-size` + `liskov-substitution` read `go-functions`;
|
|
319
|
+
// `switch-size` reads `go-switches`.
|
|
320
|
+
'go-functions': {
|
|
321
|
+
go: fileProducer('go-functions', 'go', goFunctionsProcess, countOracle(countGoFunctions)),
|
|
322
|
+
},
|
|
323
|
+
'go-switches': {
|
|
324
|
+
go: fileProducer('go-switches', 'go', goSwitchesProcess, countOracle(countGoSwitches)),
|
|
325
|
+
},
|
|
326
|
+
// §9 — the three function-level Go producers (error-binding positions,
|
|
327
|
+
// goroutine-synchronization signal, channel-operation counts). `error-handling`
|
|
328
|
+
// reads `error-bindings`; `concurrency` reads `concurrency-primitives`;
|
|
329
|
+
// `channel-deadlock` reads `channel-operations`.
|
|
330
|
+
'error-bindings': {
|
|
331
|
+
go: fileProducer('error-bindings', 'go', errorBindingsProcess, countOracle(countGoFunctions)),
|
|
332
|
+
},
|
|
333
|
+
'concurrency-primitives': {
|
|
334
|
+
go: fileProducer('concurrency-primitives', 'go', concurrencyPrimitivesProcess, countOracle(countGoFunctions)),
|
|
335
|
+
},
|
|
336
|
+
'channel-operations': {
|
|
337
|
+
go: fileProducer('channel-operations', 'go', channelOperationsProcess, countOracle(countGoFunctions)),
|
|
338
|
+
},
|
|
339
|
+
// Spec 70 Item 4 (2a) — the per-file Go package-scope symbol table. The
|
|
340
|
+
// cross-file receiver-provenance fixed point groups these by directory and
|
|
341
|
+
// merges first-wins. The oracle is the *pre-dedup* binding-declaration count
|
|
342
|
+
// (top-level function/method/type/var declarations with a name) — the same
|
|
343
|
+
// number `buildGoFileBindings` emits before its first-wins dedup, which is a
|
|
344
|
+
// no-op within a single valid Go file, so it bounds the deduped
|
|
345
|
+
// `bindings.length` exactly.
|
|
346
|
+
'go-package-bindings': {
|
|
347
|
+
go: fileProducer('go-package-bindings', 'go', goPackageBindingsProcess, countOracle(countGoPackageBindings, measuredGoPackageBindings)),
|
|
348
|
+
},
|
|
349
|
+
// Spec 70 Item 4 (2a) — the per-file within-file-provenance projection. The
|
|
350
|
+
// extract half of the TS/Go split; the corpus `receiver-provenance` fixed
|
|
351
|
+
// point rehydrates it with no AST. Completeness is pinned by the parity
|
|
352
|
+
// assertion (classify(extract) ≡ compute), not by a per-file node count, so
|
|
353
|
+
// the oracle is a `none` (see WITHIN_FILE_PROVENANCE).
|
|
354
|
+
'within-file-provenance': {
|
|
355
|
+
typescript: fileProducer('within-file-provenance', 'typescript', withinFileProvenanceProcess, WITHIN_FILE_PROVENANCE),
|
|
356
|
+
tsx: fileProducer('within-file-provenance', 'tsx', withinFileProvenanceProcess, WITHIN_FILE_PROVENANCE),
|
|
357
|
+
javascript: fileProducer('within-file-provenance', 'javascript', withinFileProvenanceProcess, WITHIN_FILE_PROVENANCE),
|
|
358
|
+
go: fileProducer('within-file-provenance', 'go', withinFileProvenanceProcess, WITHIN_FILE_PROVENANCE),
|
|
359
|
+
},
|
|
360
|
+
// Spec 70 Item 4 (step 3) — the per-file receiver-resolution inputs (bindings +
|
|
361
|
+
// R3 sites + DB activity) the corpus-side `dbProvenanced` re-derivation reads.
|
|
362
|
+
// Emits exactly one fragment per TS-family file (null-or-value), so the oracle
|
|
363
|
+
// is the single-object one; completeness is pinned by the corpus parity assertion
|
|
364
|
+
// against `buildProvenanceContext`, not by a per-file count.
|
|
365
|
+
'receiver-activity': {
|
|
366
|
+
typescript: fileProducer('receiver-activity', 'typescript', receiverActivityProcess, SINGLE_OBJECT),
|
|
367
|
+
tsx: fileProducer('receiver-activity', 'tsx', receiverActivityProcess, SINGLE_OBJECT),
|
|
368
|
+
javascript: fileProducer('receiver-activity', 'javascript', receiverActivityProcess, SINGLE_OBJECT),
|
|
369
|
+
},
|
|
370
|
+
// `batch-functions` — the functions whose full span contains `.batch(` (a
|
|
371
|
+
// Cloudflare D1 / SQLite transaction-batching commit). `multi-table-write`
|
|
372
|
+
// reads it to skip the transaction-boundary flag for batched commits; the
|
|
373
|
+
// producer re-homes the legacy `enclosingFunctionBatches` re-parse.
|
|
374
|
+
'batch-functions': {
|
|
375
|
+
typescript: fileProducer('batch-functions', 'typescript', batchFunctionsProcess, countOracle(countBatchFunctions)),
|
|
376
|
+
tsx: fileProducer('batch-functions', 'tsx', batchFunctionsProcess, countOracle(countBatchFunctions)),
|
|
377
|
+
javascript: fileProducer('batch-functions', 'javascript', batchFunctionsProcess, countOracle(countBatchFunctions)),
|
|
378
|
+
},
|
|
379
|
+
};
|
|
380
|
+
// ── Corpus producers producing derived facts (no format) ─────────────────────
|
|
381
|
+
// `resolution` and `migration-history` reduce the `ddl-declarations` fact
|
|
382
|
+
// through the ONE shared `replayDdlDeclarations` — so the known-table set and
|
|
383
|
+
// the drop provenance can never disagree about which table a migration dropped.
|
|
384
|
+
// `needs` forms the DAG edges ddl-declarations → {resolution,
|
|
385
|
+
// migration-history}. Corpus producers are a separate map because the
|
|
386
|
+
// (kind, format) key cannot express a derived fact.
|
|
387
|
+
export const CORPUS_PRODUCERS = {
|
|
388
|
+
'resolution': {
|
|
389
|
+
id: 'resolution',
|
|
390
|
+
produces: 'resolution',
|
|
391
|
+
needs: ['ddl-declarations', 'schema-objects', 'file-symbols'],
|
|
392
|
+
process(facts, ctx) {
|
|
393
|
+
// The known-table set is the *net* set after replaying DDL across files
|
|
394
|
+
// in migration order — a table dropped in a later migration is a stale
|
|
395
|
+
// reference, not a known table. `replayDdlDeclarations` returns that net
|
|
396
|
+
// set with each table's last-CREATE source file, its columns, and its four
|
|
397
|
+
// per-column constraint maps (UNIQUE, PRIMARY KEY, NOT NULL, foreign key)
|
|
398
|
+
// recorded *separately* so PK and natural UNIQUE stay distinguishable.
|
|
399
|
+
const { netTables } = replayDdlDeclarations(facts['ddl-declarations'].map((d) => ({
|
|
400
|
+
filePath: d.file,
|
|
401
|
+
ops: d.ops,
|
|
402
|
+
tableColumns: d.tableColumns,
|
|
403
|
+
uniqueColumns: d.uniqueColumns,
|
|
404
|
+
primaryKeyColumns: d.primaryKeyColumns,
|
|
405
|
+
notNullColumns: d.notNullColumns,
|
|
406
|
+
foreignKeys: d.foreignKeys,
|
|
407
|
+
})));
|
|
408
|
+
const tables = netTables.map((t) => {
|
|
409
|
+
const pk = new Set(t.primaryKeyColumns.map((c) => c.toLowerCase()));
|
|
410
|
+
const uniq = new Set(t.uniqueColumns.map((c) => c.toLowerCase()));
|
|
411
|
+
const nn = new Set(t.notNullColumns.map((c) => c.toLowerCase()));
|
|
412
|
+
const fk = new Map();
|
|
413
|
+
for (const ref of t.foreignKeys) {
|
|
414
|
+
if (!fk.has(ref.column.toLowerCase()))
|
|
415
|
+
fk.set(ref.column.toLowerCase(), { table: ref.refTable, column: ref.refColumn });
|
|
416
|
+
}
|
|
417
|
+
const columns = t.columns.map((c) => ({
|
|
418
|
+
name: c,
|
|
419
|
+
primaryKey: pk.has(c.toLowerCase()),
|
|
420
|
+
unique: uniq.has(c.toLowerCase()),
|
|
421
|
+
notNull: nn.has(c.toLowerCase()),
|
|
422
|
+
foreignKey: fk.get(c.toLowerCase()) ?? null,
|
|
423
|
+
}));
|
|
424
|
+
return { name: t.name, source: t.source, columns };
|
|
425
|
+
});
|
|
426
|
+
// §5 parity: merge the config-declared external tables the legacy schema
|
|
427
|
+
// reducer added to the known-table set (`knownTables` + `schemas`). Without
|
|
428
|
+
// them a config-only schema is a 0-table catalog and `unknown-table`'s
|
|
429
|
+
// fail-open guard silently never fires — exactly the sql-cte regression.
|
|
430
|
+
// Config-declared tables carry no column metadata, so no constraints.
|
|
431
|
+
for (const t of ctx?.externalTables ?? []) {
|
|
432
|
+
tables.push({
|
|
433
|
+
name: t.name,
|
|
434
|
+
source: t.source,
|
|
435
|
+
columns: t.columns.map((c) => ({ name: c, primaryKey: false, unique: false, notNull: false, foreignKey: null })),
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
// The ORM schema-object alias map: `.from(sampleOwnership)` names the JS
|
|
439
|
+
// identifier, not the SQL table. Resolve it through the pgTable/mysqlTable/
|
|
440
|
+
// sqliteTable bindings so a query referencing a schema object reaches the
|
|
441
|
+
// catalog entry (and Tier-3 tenancy) the identifier declares. The `.unique()`
|
|
442
|
+
// and `.primaryKey()` markers are merged into the matching table's columns
|
|
443
|
+
// as *separate* `unique` / `primaryKey` flags (both JS and SQL spelling), so
|
|
444
|
+
// the natural-UNIQUE quiet set and the PK surface never collapse into one.
|
|
445
|
+
const aliases = {};
|
|
446
|
+
for (const obj of facts['schema-objects']) {
|
|
447
|
+
if (!(obj.identifier in aliases))
|
|
448
|
+
aliases[obj.identifier] = obj.table;
|
|
449
|
+
const entry = tables.find((t) => t.name === obj.table);
|
|
450
|
+
if (!entry)
|
|
451
|
+
continue;
|
|
452
|
+
const merged = [...entry.columns];
|
|
453
|
+
for (const name of obj.uniqueColumns) {
|
|
454
|
+
const key = name.toLowerCase();
|
|
455
|
+
const existing = merged.find((c) => c.name.toLowerCase() === key);
|
|
456
|
+
if (existing)
|
|
457
|
+
existing.unique = true;
|
|
458
|
+
else
|
|
459
|
+
merged.push({ name, primaryKey: false, unique: true, notNull: false, foreignKey: null });
|
|
460
|
+
}
|
|
461
|
+
for (const name of obj.primaryKeyColumns) {
|
|
462
|
+
const key = name.toLowerCase();
|
|
463
|
+
const existing = merged.find((c) => c.name.toLowerCase() === key);
|
|
464
|
+
if (existing)
|
|
465
|
+
existing.primaryKey = true;
|
|
466
|
+
else
|
|
467
|
+
merged.push({ name, primaryKey: true, unique: false, notNull: false, foreignKey: null });
|
|
468
|
+
}
|
|
469
|
+
entry.columns = merged;
|
|
470
|
+
}
|
|
471
|
+
// Class/interface declarations → what they extend/implements, resolved in
|
|
472
|
+
// repo (Spec 69 R3 criterion 7c). `open-closed` reads these instead of
|
|
473
|
+
// walking the `file-symbols` classes itself.
|
|
474
|
+
const classes = [];
|
|
475
|
+
const interfaces = [];
|
|
476
|
+
for (const sym of facts['file-symbols']) {
|
|
477
|
+
if (sym.kind === 'class') {
|
|
478
|
+
classes.push({
|
|
479
|
+
name: sym.name,
|
|
480
|
+
file: sym.file,
|
|
481
|
+
extends: sym.extends ?? null,
|
|
482
|
+
implements: [...(sym.implements ?? [])],
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
else if (sym.kind === 'interface') {
|
|
486
|
+
interfaces.push({ name: sym.name, file: sym.file, extends: [...(sym.extends ?? [])] });
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
return { tables, aliases, classes, interfaces };
|
|
490
|
+
},
|
|
491
|
+
},
|
|
492
|
+
// `migration-history` reduces the DDL declarations into the cross-file drop
|
|
493
|
+
// provenance (dropped-table → dropping migration + what it created). `needs`
|
|
494
|
+
// forms the DAG edge ddl-declarations → migration-history, parallel to
|
|
495
|
+
// resolution. The provenance is the same `replayDdlDeclarations` pass the
|
|
496
|
+
// legacy schema reducer ran, so `stale-table-reference` parity holds by
|
|
497
|
+
// construction — the phase rule reads the same map the reducer did.
|
|
498
|
+
'migration-history': {
|
|
499
|
+
id: 'migration-history',
|
|
500
|
+
produces: 'migration-history',
|
|
501
|
+
needs: ['ddl-declarations'],
|
|
502
|
+
process(facts) {
|
|
503
|
+
const { dropProvenance } = replayDdlDeclarations(facts['ddl-declarations'].map((d) => ({
|
|
504
|
+
filePath: d.file,
|
|
505
|
+
ops: d.ops,
|
|
506
|
+
tableColumns: d.tableColumns,
|
|
507
|
+
})));
|
|
508
|
+
const dropped = {};
|
|
509
|
+
for (const [table, entry] of dropProvenance) {
|
|
510
|
+
dropped[table] = {
|
|
511
|
+
migrationFile: entry.migrationFile,
|
|
512
|
+
createdInSameMigration: entry.createdInSameMigration,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
return { dropped };
|
|
516
|
+
},
|
|
517
|
+
},
|
|
518
|
+
// `mined-conventions` reduces the function index into the mined-convention
|
|
519
|
+
// set the three function-index-servable convention rules read. `needs` forms
|
|
520
|
+
// the DAG edge function-index → mined-conventions.
|
|
521
|
+
'mined-conventions': {
|
|
522
|
+
id: 'mined-conventions',
|
|
523
|
+
produces: 'mined-conventions',
|
|
524
|
+
needs: ['function-index', 'export-form', 'import-form'],
|
|
525
|
+
process(facts) {
|
|
526
|
+
return mineConventionsFromFunctionIndex(facts['function-index'], facts['export-form'], facts['import-form']);
|
|
527
|
+
},
|
|
528
|
+
},
|
|
529
|
+
// `schema-validations` reduces the `json-document` fact through the legacy
|
|
530
|
+
// `analyzeJsonSchemas` free function. `needs` forms the DAG edge
|
|
531
|
+
// json-document → schema-validations.
|
|
532
|
+
'schema-validations': {
|
|
533
|
+
id: 'schema-validations',
|
|
534
|
+
produces: 'schema-validations',
|
|
535
|
+
needs: ['json-document'],
|
|
536
|
+
process(facts) {
|
|
537
|
+
return buildSchemaValidations(facts['json-document']);
|
|
538
|
+
},
|
|
539
|
+
},
|
|
540
|
+
// `color-values` reduces the `style-declarations` fact into the CIELAB-converted
|
|
541
|
+
// color set the `styles/value-drift` rule reads (Spec 69 R4). The conversion —
|
|
542
|
+
// raw string → sRGB → Lab — was the one computation R4 found still living in a
|
|
543
|
+
// rule body; it moves here so the rule's clustering and flagging read
|
|
544
|
+
// pre-computed Lab triples and never re-parse a color. `needs` forms the DAG
|
|
545
|
+
// edge style-declarations → color-values.
|
|
546
|
+
'color-values': {
|
|
547
|
+
id: 'color-values',
|
|
548
|
+
produces: 'color-values',
|
|
549
|
+
needs: ['style-declarations'],
|
|
550
|
+
process(facts) {
|
|
551
|
+
const out = [];
|
|
552
|
+
for (const f of facts['style-declarations']) {
|
|
553
|
+
for (const d of f.declarations) {
|
|
554
|
+
const rgb = parseColorToRGB(d.rawValue);
|
|
555
|
+
if (!rgb)
|
|
556
|
+
continue;
|
|
557
|
+
out.push({
|
|
558
|
+
property: d.property,
|
|
559
|
+
filePath: d.filePath,
|
|
560
|
+
line: d.line,
|
|
561
|
+
rawValue: d.rawValue,
|
|
562
|
+
normalizedValue: d.normalizedValue ? JSON.stringify(d.normalizedValue) : null,
|
|
563
|
+
rgb,
|
|
564
|
+
lab: rgbToLab(rgb),
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return out;
|
|
569
|
+
},
|
|
570
|
+
},
|
|
571
|
+
// `reachability` reduces the `file-imports` fact into the reverse import
|
|
572
|
+
// adjacency + package entry-point set (§8). It is the one corpus processor
|
|
573
|
+
// that reads the `CorpusContext` — the discovery list, virtual-module list,
|
|
574
|
+
// tsconfig aliases and package.json entry points are corpus-level inputs the
|
|
575
|
+
// per-file fact cannot carry. Defaults mirror the legacy reducer's fallback
|
|
576
|
+
// (corpus = the file-imports set, no aliases, DEFAULT_VIRTUAL_MODULES, no
|
|
577
|
+
// package entries) so the slice tests stay self-contained.
|
|
578
|
+
'reachability': {
|
|
579
|
+
id: 'reachability',
|
|
580
|
+
produces: 'reachability',
|
|
581
|
+
needs: ['file-imports'],
|
|
582
|
+
process(facts, ctx) {
|
|
583
|
+
const fileImports = facts['file-imports'];
|
|
584
|
+
return computeReachability(fileImports, {
|
|
585
|
+
corpusFiles: new Set(ctx?.corpusFiles ?? fileImports.map((f) => f.file)),
|
|
586
|
+
virtualModules: ctx?.virtualModules ?? DEFAULT_VIRTUAL_MODULES,
|
|
587
|
+
tsconfigAliases: ctx?.tsconfigAliases,
|
|
588
|
+
packageEntryPoints: new Set(ctx?.packageEntryPoints ?? []),
|
|
589
|
+
projectRoot: ctx?.projectRoot ?? '',
|
|
590
|
+
});
|
|
591
|
+
},
|
|
592
|
+
},
|
|
593
|
+
// `call-graph` (§2.2) — the function catalog + call edges the cross-domain
|
|
594
|
+
// rules' depth-1 callee expansion reads. The functions and `callEdges` remain
|
|
595
|
+
// index reads (`functions` + `graph_cache`), per "reading the index is always
|
|
596
|
+
// fine" — re-deriving the edges here from `functionCalls` would turn on the
|
|
597
|
+
// depth-1 expansion during a plain audit (the sync-only `graph_cache` is empty
|
|
598
|
+
// there), moving `multi-table-write`. Only `usedImports` moves (Item 4 2b): it
|
|
599
|
+
// was the one field the index column could not supply without the sync path's
|
|
600
|
+
// second parse, so it now comes from the `function-index` fact, joined by the
|
|
601
|
+
// `(file, name, line)` identity the index conflictKey uses.
|
|
602
|
+
'call-graph': {
|
|
603
|
+
id: 'call-graph',
|
|
604
|
+
produces: 'call-graph',
|
|
605
|
+
needs: ['function-index'],
|
|
606
|
+
process(facts, ctx) {
|
|
607
|
+
const usedImportsByFn = new Map();
|
|
608
|
+
for (const f of facts['function-index']) {
|
|
609
|
+
usedImportsByFn.set(`${f.file}::${f.name}::${f.line}`, f.usedImports);
|
|
610
|
+
}
|
|
611
|
+
const ih = ctx?.indexHandle;
|
|
612
|
+
if (!ih)
|
|
613
|
+
return { functions: [], callEdges: [] };
|
|
614
|
+
let funcs = [];
|
|
615
|
+
let edges = [];
|
|
616
|
+
try {
|
|
617
|
+
funcs = ih.query('SELECT id, name, file_path, line_number, is_exported FROM functions');
|
|
618
|
+
edges = ih.query("SELECT node_key, neighbor_key FROM graph_cache WHERE graph_type = 'call'");
|
|
619
|
+
}
|
|
620
|
+
catch {
|
|
621
|
+
// `functions`/`graph_cache` may not exist or be unpopulated — degrade.
|
|
622
|
+
}
|
|
623
|
+
const callEdges = [];
|
|
624
|
+
for (const e of edges) {
|
|
625
|
+
const fromId = parseInt(e.node_key, 10);
|
|
626
|
+
const toId = parseInt(e.neighbor_key, 10);
|
|
627
|
+
if (!isNaN(fromId) && !isNaN(toId))
|
|
628
|
+
callEdges.push({ fromId, toId });
|
|
629
|
+
}
|
|
630
|
+
return {
|
|
631
|
+
functions: funcs.map((f) => ({
|
|
632
|
+
id: f.id,
|
|
633
|
+
name: f.name,
|
|
634
|
+
filePath: f.file_path,
|
|
635
|
+
lineNumber: f.line_number ?? null,
|
|
636
|
+
usedImports: usedImportsByFn.get(`${f.file_path}::${f.name}::${f.line_number}`) ?? [],
|
|
637
|
+
isExported: f.is_exported === 1,
|
|
638
|
+
})),
|
|
639
|
+
callEdges,
|
|
640
|
+
};
|
|
641
|
+
},
|
|
642
|
+
},
|
|
643
|
+
// `hotspot` (R4 uncovered-risk) — the `hotspot_scores` rows the uncovered-risk
|
|
644
|
+
// ranking LEFT-JOINs on (target = file_path || ':' || name, type = 'function').
|
|
645
|
+
'hotspot': {
|
|
646
|
+
id: 'hotspot',
|
|
647
|
+
produces: 'hotspot',
|
|
648
|
+
needs: [],
|
|
649
|
+
process(_facts, ctx) {
|
|
650
|
+
const ih = ctx?.indexHandle;
|
|
651
|
+
if (!ih)
|
|
652
|
+
return [];
|
|
653
|
+
let rows = [];
|
|
654
|
+
try {
|
|
655
|
+
rows = ih.query('SELECT target, type, score FROM hotspot_scores');
|
|
656
|
+
}
|
|
657
|
+
catch {
|
|
658
|
+
// `hotspot_scores` may not exist — degrade to an empty fact.
|
|
659
|
+
}
|
|
660
|
+
return rows.map((r) => ({ target: r.target, type: r.type, score: r.score }));
|
|
661
|
+
},
|
|
662
|
+
},
|
|
663
|
+
// `coverage` (R4 uncovered-risk) — the `coverage_data` identity projection plus
|
|
664
|
+
// the two measured-path metadata reads the legacy `detectMeasuredUncovered`
|
|
665
|
+
// made (source/imported_at LIMIT 1, and `last_full_sync_timestamp` for stale
|
|
666
|
+
// detection). Degrades to an empty fact with no handle.
|
|
667
|
+
'coverage': {
|
|
668
|
+
id: 'coverage',
|
|
669
|
+
produces: 'coverage',
|
|
670
|
+
needs: [],
|
|
671
|
+
process(_facts, ctx) {
|
|
672
|
+
const ih = ctx?.indexHandle;
|
|
673
|
+
if (!ih)
|
|
674
|
+
return { measuredCount: 0, source: null, importedAt: null, lastFullSync: null, entries: [] };
|
|
675
|
+
try {
|
|
676
|
+
const measuredRow = ih.query("SELECT COUNT(*) AS cnt FROM coverage_data WHERE basis = 'measured'")[0];
|
|
677
|
+
const measuredCount = measuredRow?.cnt ?? 0;
|
|
678
|
+
const sourceRow = ih.query("SELECT source, imported_at FROM coverage_data WHERE basis = 'measured' LIMIT 1")[0];
|
|
679
|
+
const lastFullSync = ih.getMeta?.('last_full_sync_timestamp') ?? null;
|
|
680
|
+
const entries = ih.query('SELECT function_name, file_path, covered FROM coverage_data');
|
|
681
|
+
return {
|
|
682
|
+
measuredCount,
|
|
683
|
+
source: sourceRow?.source ?? null,
|
|
684
|
+
importedAt: sourceRow?.imported_at ?? null,
|
|
685
|
+
lastFullSync,
|
|
686
|
+
entries: entries.map((e) => ({ functionName: e.function_name, filePath: e.file_path, covered: e.covered === 1 })),
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
catch {
|
|
690
|
+
return { measuredCount: 0, source: null, importedAt: null, lastFullSync: null, entries: [] };
|
|
691
|
+
}
|
|
692
|
+
},
|
|
693
|
+
},
|
|
694
|
+
// `clone-pair-history` (R5 diverging-clone) — the `dry_pair_history` rows the
|
|
695
|
+
// diverging-clone rule's cross-run pass reads, grouped by fingerprint. The
|
|
696
|
+
// file/line anchors are the most recent row's (ORDER BY timestamp ASC, last
|
|
697
|
+
// wins). Degrades to an empty fact with no handle or an absent table.
|
|
698
|
+
'clone-pair-history': {
|
|
699
|
+
id: 'clone-pair-history',
|
|
700
|
+
produces: 'clone-pair-history',
|
|
701
|
+
needs: [],
|
|
702
|
+
process(_facts, ctx) {
|
|
703
|
+
const ih = ctx?.indexHandle;
|
|
704
|
+
if (!ih)
|
|
705
|
+
return [];
|
|
706
|
+
let rows = [];
|
|
707
|
+
try {
|
|
708
|
+
rows = ih.query('SELECT pair_fingerprint, file1, file2, line1, line2, similarity, timestamp FROM dry_pair_history ORDER BY pair_fingerprint, timestamp ASC');
|
|
709
|
+
}
|
|
710
|
+
catch {
|
|
711
|
+
// `dry_pair_history` may not exist — degrade to an empty fact.
|
|
712
|
+
}
|
|
713
|
+
const byFingerprint = new Map();
|
|
714
|
+
for (const r of rows) {
|
|
715
|
+
const g = byFingerprint.get(r.pair_fingerprint) ?? { file1: r.file1, file2: r.file2, line1: r.line1, line2: r.line2, rows: [] };
|
|
716
|
+
// Last row in the ASC ordering wins — the most recent measurement's anchors.
|
|
717
|
+
g.file1 = r.file1;
|
|
718
|
+
g.file2 = r.file2;
|
|
719
|
+
g.line1 = r.line1;
|
|
720
|
+
g.line2 = r.line2;
|
|
721
|
+
g.rows.push({ similarity: r.similarity, timestamp: r.timestamp });
|
|
722
|
+
byFingerprint.set(r.pair_fingerprint, g);
|
|
723
|
+
}
|
|
724
|
+
return [...byFingerprint.entries()].map(([fingerprint, g]) => ({
|
|
725
|
+
fingerprint,
|
|
726
|
+
file1: g.file1,
|
|
727
|
+
file2: g.file2,
|
|
728
|
+
line1: g.line1,
|
|
729
|
+
line2: g.line2,
|
|
730
|
+
rows: g.rows,
|
|
731
|
+
}));
|
|
732
|
+
},
|
|
733
|
+
},
|
|
734
|
+
// `defined-classes` (styles/undefined-class) — re-derived from the
|
|
735
|
+
// `style-declarations` phase fact rather than the `style_defined_classes`
|
|
736
|
+
// index table (Item 4 2b: style-declarations → defined-classes). Every writer
|
|
737
|
+
// of `style_defined_classes` (source CSS-in-JS, compiled CSS, other extractable
|
|
738
|
+
// files) derives the class name by the SAME regex `/\.([a-zA-Z0-9_-]+)/g` over
|
|
739
|
+
// the declaration's selector `context`, so the phase fact reproduces the table
|
|
740
|
+
// byte-for-byte: group by class name, keep MIN(file_path). `context`/`filePath`
|
|
741
|
+
// are plain data already on `StylesDeclaration`.
|
|
742
|
+
//
|
|
743
|
+
// Parity notes: (1) the index producer's MIN(file_path) used SQLite BINARY
|
|
744
|
+
// collation (UTF-8 byte order); JS `<` is UTF-16 code-unit order — identical
|
|
745
|
+
// for the ASCII paths these corpora use. (2) The catalog is sorted by
|
|
746
|
+
// `className` so the undefined-class near-miss tie-break (`dist < bestDist`,
|
|
747
|
+
// styles.ts) sees the same iteration order the `GROUP BY class_name` index scan
|
|
748
|
+
// produced (ascending class_name). Membership lookups are order-independent.
|
|
749
|
+
'defined-classes': {
|
|
750
|
+
id: 'defined-classes',
|
|
751
|
+
produces: 'defined-classes',
|
|
752
|
+
needs: ['style-declarations'],
|
|
753
|
+
process(facts) {
|
|
754
|
+
const byClass = new Map(); // className -> MIN(file_path)
|
|
755
|
+
for (const f of facts['style-declarations']) {
|
|
756
|
+
for (const d of f.declarations) {
|
|
757
|
+
const ctx = d.context;
|
|
758
|
+
if (!ctx)
|
|
759
|
+
continue;
|
|
760
|
+
for (const m of ctx.matchAll(/\.([a-zA-Z0-9_-]+)/g)) {
|
|
761
|
+
const className = m[1];
|
|
762
|
+
const fp = d.filePath;
|
|
763
|
+
const prev = byClass.get(className);
|
|
764
|
+
if (prev === undefined || fp < prev)
|
|
765
|
+
byClass.set(className, fp);
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
return [...byClass.entries()]
|
|
770
|
+
.map(([className, filePath]) => ({ className, filePath }))
|
|
771
|
+
.sort((a, b) => (a.className < b.className ? -1 : a.className > b.className ? 1 : 0));
|
|
772
|
+
},
|
|
773
|
+
},
|
|
774
|
+
// `unread-style-sources` (styles/undefined-class) — the content-level
|
|
775
|
+
// `<style lang="…">` reasons, flattened from the markup producer's
|
|
776
|
+
// `style-declarations` fact (`extractStylesMarkup` collects them into each
|
|
777
|
+
// file's `unreadSources` during its `extractDeclarations` pass). One entry per
|
|
778
|
+
// markup file whose embedded style block uses a dialect the regex path cannot
|
|
779
|
+
// read (Spec 45 R5). The rule carries the list as
|
|
780
|
+
// `details.incompleteDefinitions` so "undefined" reads as "not defined in any
|
|
781
|
+
// *read* stylesheet". The walk-level reasons (`.less`/`.styl`/`.sass`
|
|
782
|
+
// dialects, read failures, unknown extensions) are produced by the traverse
|
|
783
|
+
// phase and merged ahead of this in `buildFacts`; this producer contributes
|
|
784
|
+
// only the content-level half. Degrades to an empty fact when no markup file
|
|
785
|
+
// carries an unread embedded block.
|
|
786
|
+
'unread-style-sources': {
|
|
787
|
+
id: 'unread-style-sources',
|
|
788
|
+
produces: 'unread-style-sources',
|
|
789
|
+
needs: ['style-declarations'],
|
|
790
|
+
process(facts) {
|
|
791
|
+
const seen = new Set();
|
|
792
|
+
const out = [];
|
|
793
|
+
for (const f of facts['style-declarations']) {
|
|
794
|
+
for (const s of f.unreadSources) {
|
|
795
|
+
if (seen.has(s.filePath))
|
|
796
|
+
continue;
|
|
797
|
+
seen.add(s.filePath);
|
|
798
|
+
out.push(s);
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
return out;
|
|
802
|
+
},
|
|
803
|
+
},
|
|
804
|
+
// `receiver-provenance` (Spec 70 Item 4, 2a) — the cross-file DB-receiver
|
|
805
|
+
// provenance fixed point, re-derived from the four additive file facts with no
|
|
806
|
+
// AST. This is the phase-side replacement for `resolveCorpusReceivers`'
|
|
807
|
+
// `fileProvenance` + `unresolvedImports` halves. `needs` forms the DAG edges
|
|
808
|
+
// {within-file-provenance, import-specifiers, export-symbols,
|
|
809
|
+
// go-package-bindings} → receiver-provenance. The core (`computeReceiverProvenance`)
|
|
810
|
+
// returns the legacy `FileProvenance`/`FileExports`/`UnresolvedImport` types so
|
|
811
|
+
// the parity assertion can diff it byte-for-byte against `resolveReceiverProvenance`;
|
|
812
|
+
// the fact itself projects only the two consumer-facing halves (`files` +
|
|
813
|
+
// `unresolvedImports`), dropping the Phase-2 `fileExports` intermediate no
|
|
814
|
+
// consumer reads.
|
|
815
|
+
'receiver-provenance': {
|
|
816
|
+
id: 'receiver-provenance',
|
|
817
|
+
produces: 'receiver-provenance',
|
|
818
|
+
needs: ['within-file-provenance', 'import-specifiers', 'export-symbols', 'go-package-bindings'],
|
|
819
|
+
process(facts, ctx) {
|
|
820
|
+
const { fileProvenance, unresolvedImports } = computeReceiverProvenance(facts['within-file-provenance'], facts['import-specifiers'], facts['export-symbols'], facts['go-package-bindings'], ctx?.projectRoot, ctx?.tsconfigAliases);
|
|
821
|
+
return {
|
|
822
|
+
files: [...fileProvenance.entries()].map(([file, prov]) => ({
|
|
823
|
+
file,
|
|
824
|
+
provenance: [...prov.values()].map(evidenceToFact),
|
|
825
|
+
})),
|
|
826
|
+
unresolvedImports: unresolvedImports.map((u) => ({ importer: u.importer, source: u.source, names: u.names })),
|
|
827
|
+
};
|
|
828
|
+
},
|
|
829
|
+
},
|
|
830
|
+
// Spec 70 Item 4 (step 3) — the first of the four receiver consumers converted
|
|
831
|
+
// to a corpus producer. The legacy `query-sites` producer did two jobs: locate
|
|
832
|
+
// each DB-query site (a provenance-free text + function scan) and gate the file
|
|
833
|
+
// on DB context (`passesFileGate`, which needs the cross-file `dbProvenanced`
|
|
834
|
+
// seed). The collapse splits them: `query-site-candidates` runs the location
|
|
835
|
+
// job un-gated while the AST lives, and this producer re-derives each file's
|
|
836
|
+
// `dbProvenanced` (via `classifyBuildProvenance`) from the `within-file-provenance`
|
|
837
|
+
// extract + the `receiver-provenance` fixed point + the `receiver-activity`
|
|
838
|
+
// inputs, then re-applies the gate. `needs` forms the DAG edges
|
|
839
|
+
// {query-site-candidates, within-file-provenance, receiver-provenance,
|
|
840
|
+
// receiver-activity} → query-sites.
|
|
841
|
+
'query-sites': {
|
|
842
|
+
id: 'query-sites',
|
|
843
|
+
produces: 'query-sites',
|
|
844
|
+
needs: ['query-site-candidates', 'within-file-provenance', 'receiver-provenance', 'receiver-activity'],
|
|
845
|
+
process(facts, ctx) {
|
|
846
|
+
return classifyQuerySites(facts['query-site-candidates'], facts['within-file-provenance'], facts['receiver-provenance'], facts['receiver-activity'], ctx?.sqlDialect ?? null);
|
|
847
|
+
},
|
|
848
|
+
},
|
|
849
|
+
// Spec 70 Item 4 (step 3) — the second of the four receiver consumers. The
|
|
850
|
+
// legacy `schema-usage` producer ran `findTableReferences` (six strategies) and
|
|
851
|
+
// re-homed each reference. The collapse splits it: `schema-usage-candidates`
|
|
852
|
+
// extracts the provenance-free references (ORM / query-builder /
|
|
853
|
+
// collection-adapter, already re-homed) plus raw tagged/DB-call candidates while
|
|
854
|
+
// the AST lives, and this producer re-derives each file's `dbProvenanced` (via
|
|
855
|
+
// `classifyBuildProvenance`), re-applies the gate, re-admits the two
|
|
856
|
+
// provenance-dependent strategies (`identifyHandle` over the re-derived
|
|
857
|
+
// provenance), and re-homes their references from the projected function +
|
|
858
|
+
// string-fragment spans. `needs` forms the DAG edges {schema-usage-candidates,
|
|
859
|
+
// within-file-provenance, receiver-provenance, receiver-activity} →
|
|
860
|
+
// schema-usage.
|
|
861
|
+
'schema-usage': {
|
|
862
|
+
id: 'schema-usage',
|
|
863
|
+
produces: 'schema-usage',
|
|
864
|
+
needs: ['schema-usage-candidates', 'within-file-provenance', 'receiver-provenance', 'receiver-activity'],
|
|
865
|
+
process(facts, ctx) {
|
|
866
|
+
return classifySchemaUsage(facts['schema-usage-candidates'], {
|
|
867
|
+
withinFacts: facts['within-file-provenance'],
|
|
868
|
+
provenance: facts['receiver-provenance'],
|
|
869
|
+
activityFacts: facts['receiver-activity'],
|
|
870
|
+
sqlDialect: ctx?.sqlDialect ?? null,
|
|
871
|
+
declaredTypePackages: ctx?.declaredTypePackages,
|
|
872
|
+
projectRoot: ctx?.projectRoot,
|
|
873
|
+
tsconfig: ctx?.tsconfigAliases,
|
|
874
|
+
});
|
|
875
|
+
},
|
|
876
|
+
},
|
|
877
|
+
// Spec 70 Item 4 (step 3) — the third of the four receiver consumers. The
|
|
878
|
+
// legacy `data-access-calls` producer did two jobs: extract the resolved DB
|
|
879
|
+
// calls (an AST scan) and fold the provenance-dependent half of
|
|
880
|
+
// `buildDatabaseCall` (the `identifyHandle` admission verdict → the injection
|
|
881
|
+
// gate, and the per-site dialect → the SQL parse) over the cross-file
|
|
882
|
+
// `dbProvenanced` seed. The collapse splits them: `data-access-calls-candidates`
|
|
883
|
+
// extracts the provenance-free half while the AST lives, and this producer
|
|
884
|
+
// re-derives each file's `dbProvenanced` (TS via `classifyBuildProvenance`; Go
|
|
885
|
+
// via the fixed-point seed) and re-folds the discovery filter → line dedup →
|
|
886
|
+
// `buildDatabaseCall` with no AST. `needs` forms the DAG edges
|
|
887
|
+
// {data-access-calls-candidates, within-file-provenance, receiver-provenance,
|
|
888
|
+
// receiver-activity} → data-access-calls.
|
|
889
|
+
'data-access-calls': {
|
|
890
|
+
id: 'data-access-calls',
|
|
891
|
+
produces: 'data-access-calls',
|
|
892
|
+
needs: ['data-access-calls-candidates', 'within-file-provenance', 'receiver-provenance', 'receiver-activity'],
|
|
893
|
+
process(facts, ctx) {
|
|
894
|
+
return classifyDataAccessCalls(facts['data-access-calls-candidates'], {
|
|
895
|
+
withinFacts: facts['within-file-provenance'],
|
|
896
|
+
provenance: facts['receiver-provenance'],
|
|
897
|
+
activityFacts: facts['receiver-activity'],
|
|
898
|
+
sqlDialect: ctx?.sqlDialect ?? null,
|
|
899
|
+
declaredTypePackages: ctx?.declaredTypePackages,
|
|
900
|
+
projectRoot: ctx?.projectRoot,
|
|
901
|
+
tsconfig: ctx?.tsconfigAliases,
|
|
902
|
+
verdictCache: ctx?.handleVerdictCache,
|
|
903
|
+
});
|
|
904
|
+
},
|
|
905
|
+
},
|
|
906
|
+
// Spec 70 Item 4 (step 3) — the fourth of the four receiver consumers. The
|
|
907
|
+
// legacy `loop-queries` producer ran `collectLoopQueryCandidates` (discovery +
|
|
908
|
+
// provenance-free discriminators + strict-handle filter + loop dedup + symbol)
|
|
909
|
+
// over the AST. The collapse splits it: `loop-query-candidates` runs the
|
|
910
|
+
// discovery + provenance-free discriminators while the AST lives, and this
|
|
911
|
+
// producer re-derives `dbProvenanced` and re-folds the strict-handle filter,
|
|
912
|
+
// the per-loop dedup, and the stable symbol with no AST.
|
|
913
|
+
'loop-queries': {
|
|
914
|
+
id: 'loop-queries',
|
|
915
|
+
produces: 'loop-queries',
|
|
916
|
+
needs: ['loop-query-candidates', 'within-file-provenance', 'receiver-provenance', 'receiver-activity'],
|
|
917
|
+
process(facts, ctx) {
|
|
918
|
+
return classifyLoopQueries(facts['loop-query-candidates'], {
|
|
919
|
+
withinFacts: facts['within-file-provenance'],
|
|
920
|
+
provenance: facts['receiver-provenance'],
|
|
921
|
+
activityFacts: facts['receiver-activity'],
|
|
922
|
+
sqlDialect: ctx?.sqlDialect ?? null,
|
|
923
|
+
declaredTypePackages: ctx?.declaredTypePackages,
|
|
924
|
+
projectRoot: ctx?.projectRoot,
|
|
925
|
+
tsconfig: ctx?.tsconfigAliases,
|
|
926
|
+
verdictCache: ctx?.handleVerdictCache,
|
|
927
|
+
});
|
|
928
|
+
},
|
|
929
|
+
},
|
|
930
|
+
};
|
|
931
|
+
/**
|
|
932
|
+
* The producer that serves `kind` from `format`, or `undefined` when that
|
|
933
|
+
* format cannot supply the concept (which is not a defect — the caller skips
|
|
934
|
+
* the file and §8 reports the rule `notApplicable` for it). The dynamic format
|
|
935
|
+
* in a parsed file is a full {@link Format}, so the lookup is a guarded cast.
|
|
936
|
+
*
|
|
937
|
+
* @param kind - The fact kind whose producer is looked up.
|
|
938
|
+
* @param format - The format the parsed file declares.
|
|
939
|
+
* @returns The producer for `(kind, format)`, or `undefined` when unsupplied.
|
|
940
|
+
*/
|
|
941
|
+
export function fileProducerFor(kind, format) {
|
|
942
|
+
const formats = PRODUCERS[kind];
|
|
943
|
+
return formats[format];
|
|
944
|
+
}
|
|
945
|
+
/**
|
|
946
|
+
* Spec 69 R1 (criterion 3) — every file processor with no statable oracle,
|
|
947
|
+
* named by its `${kind}.${format}` id with the reason. The run enumerates these
|
|
948
|
+
* so an unprovable fact is reported, never silently assumed complete. The list
|
|
949
|
+
* is static because `oracle` is a static property of the processor contract,
|
|
950
|
+
* not a per-run state: a processor that *could* state an oracle but does not is
|
|
951
|
+
* caught at compile time (the `oracle` field is required), so this is only ever
|
|
952
|
+
* the processors that genuinely have none.
|
|
953
|
+
*
|
|
954
|
+
* @returns The `${kind}.${format}` id and reason for every oracle-less processor.
|
|
955
|
+
*/
|
|
956
|
+
export function noOracleProcessors() {
|
|
957
|
+
const out = [];
|
|
958
|
+
for (const [kind, formats] of Object.entries(PRODUCERS)) {
|
|
959
|
+
for (const p of Object.values(formats)) {
|
|
960
|
+
if (p.oracle.status === 'none')
|
|
961
|
+
out.push({ processor: p.id, reason: p.oracle.reason });
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
return out;
|
|
965
|
+
}
|
|
966
|
+
/**
|
|
967
|
+
* The fact-kind vocabulary as a runtime value, kept in lockstep with
|
|
968
|
+
* {@link FactShapes} by the `satisfies` check: a kind added to FactShapes but
|
|
969
|
+
* missing here — or present here but absent from FactShapes — fails to compile.
|
|
970
|
+
* The producer-liveness test derives its expected producer count from this
|
|
971
|
+
* instead of a hand-maintained literal, so the number can only change in the
|
|
972
|
+
* same edit that changes the vocabulary.
|
|
973
|
+
*/
|
|
974
|
+
export const FACT_KINDS = {
|
|
975
|
+
'file-symbols': true,
|
|
976
|
+
'function-index': true,
|
|
977
|
+
'query-sites': true,
|
|
978
|
+
'query-site-candidates': true,
|
|
979
|
+
'imports': true,
|
|
980
|
+
'import-specifiers': true,
|
|
981
|
+
'export-symbols': true,
|
|
982
|
+
'export-form': true,
|
|
983
|
+
'import-form': true,
|
|
984
|
+
'string-literals': true,
|
|
985
|
+
'secret-candidates': true,
|
|
986
|
+
'security-candidates': true,
|
|
987
|
+
'ddl-declarations': true,
|
|
988
|
+
'schema-usage': true,
|
|
989
|
+
'schema-usage-candidates': true,
|
|
990
|
+
'schema-objects': true,
|
|
991
|
+
'style-declarations': true,
|
|
992
|
+
'color-values': true,
|
|
993
|
+
'cross-language-entities': true,
|
|
994
|
+
'data-access-calls': true,
|
|
995
|
+
'data-access-calls-candidates': true,
|
|
996
|
+
'loop-queries': true,
|
|
997
|
+
'loop-query-candidates': true,
|
|
998
|
+
'dynamic-sql': true,
|
|
999
|
+
'resolution': true,
|
|
1000
|
+
'migration-history': true,
|
|
1001
|
+
'mined-conventions': true,
|
|
1002
|
+
'react-component': true,
|
|
1003
|
+
'file-header': true,
|
|
1004
|
+
'code-block': true,
|
|
1005
|
+
'json-document': true,
|
|
1006
|
+
'schema-validations': true,
|
|
1007
|
+
'file-imports': true,
|
|
1008
|
+
'reachability': true,
|
|
1009
|
+
'type-declarations': true,
|
|
1010
|
+
'go-functions': true,
|
|
1011
|
+
'go-package-bindings': true,
|
|
1012
|
+
'within-file-provenance': true,
|
|
1013
|
+
'receiver-activity': true,
|
|
1014
|
+
'receiver-provenance': true,
|
|
1015
|
+
'go-switches': true,
|
|
1016
|
+
'error-bindings': true,
|
|
1017
|
+
'concurrency-primitives': true,
|
|
1018
|
+
'channel-operations': true,
|
|
1019
|
+
'call-graph': true,
|
|
1020
|
+
'batch-functions': true,
|
|
1021
|
+
'hotspot': true,
|
|
1022
|
+
'coverage': true,
|
|
1023
|
+
'clone-pair-history': true,
|
|
1024
|
+
'defined-classes': true,
|
|
1025
|
+
'unread-style-sources': true,
|
|
1026
|
+
};
|
|
1027
|
+
//# sourceMappingURL=producers.js.map
|