code-auditor-mcp 4.1.1 → 5.0.2
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 +381 -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 +427 -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 +348 -0
- package/dist/analyzers/receiverRoot.d.ts.map +1 -0
- package/dist/analyzers/receiverRoot.js +1032 -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 +241 -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.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +23 -35
- 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 +66 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +1544 -1034
- 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 +983 -821
- 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 +132 -271
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +365 -2729
- 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 +15 -0
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +15 -16
- 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 +16 -14
- 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/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 +22 -4
- package/dist/daemon/main.js.map +1 -1
- package/dist/daemon/resolve.d.ts +18 -3
- package/dist/daemon/resolve.d.ts.map +1 -1
- package/dist/daemon/resolve.js +25 -4
- 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 +17 -8
- package/dist/dataPaths.d.ts.map +1 -1
- package/dist/dataPaths.js +16 -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/graph/resolutionEnvironment.d.ts +61 -0
- package/dist/graph/resolutionEnvironment.d.ts.map +1 -0
- package/dist/graph/resolutionEnvironment.js +57 -0
- package/dist/graph/resolutionEnvironment.js.map +1 -0
- 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 +827 -850
- 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 +491 -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 +1030 -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 +207 -0
- package/dist/phase/receiverConsumers.d.ts.map +1 -0
- package/dist/phase/receiverConsumers.js +1063 -0
- package/dist/phase/receiverConsumers.js.map +1 -0
- package/dist/phase/receiverProvenance.d.ts +120 -0
- package/dist/phase/receiverProvenance.d.ts.map +1 -0
- package/dist/phase/receiverProvenance.js +377 -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 +2199 -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 +1144 -984
- 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 +114 -71
- 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 +18 -9
- package/plugin/.claude-plugin/manifest.json +16 -0
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/hooks/hooks.json +7 -3
- package/plugin/scripts/hook-audit.sh +46 -16
- package/plugin/scripts/hook-common.sh +81 -12
- package/plugin/scripts/hook-drift-check.sh +76 -0
- package/plugin/scripts/hook-self-audit.sh +22 -14
- package/plugin/scripts/hook-warm.sh +5 -6
- package/plugin/skills/code-auditor/SKILL.md +1 -1
- package/server.json +10 -4
|
@@ -9,6 +9,8 @@ import fs from 'fs/promises';
|
|
|
9
9
|
import { readFileSync, statSync } from 'node:fs';
|
|
10
10
|
import path from 'path';
|
|
11
11
|
import { MAX_ORPHAN_SOURCE_BYTES } from '../../../types.js';
|
|
12
|
+
import { isTestOrSpecPath } from '../../../languages/testConventions.js';
|
|
13
|
+
import { parseSqlProgramTolerant, ddlColumnDefinitions, ddlForeignKeys as astDdlForeignKeys, ddlMigrationOps, ddlConstraintColumns, ddlTableNames, isDdlStatement, } from '../../../languages/sql/sqlAst.js';
|
|
12
14
|
/**
|
|
13
15
|
* Strip SQL identifier delimiters: backticks or double-quotes.
|
|
14
16
|
* @param name
|
|
@@ -48,177 +50,417 @@ export function applyMigrationOps(ops, tables) {
|
|
|
48
50
|
* operations to the given table set in migration order.
|
|
49
51
|
* @param source
|
|
50
52
|
* @param tables
|
|
53
|
+
* @param dialect The corpus's named dialect; null is honest abstention — no
|
|
54
|
+
* parse under a guessed {@link DEFAULT_SQL_DIALECT} (unproven, cannot-fire).
|
|
51
55
|
*/
|
|
52
|
-
export function processMigrationSource(source, tables) {
|
|
53
|
-
applyMigrationOps(parseMigrationOps(source), tables);
|
|
56
|
+
export function processMigrationSource(source, tables, dialect) {
|
|
57
|
+
applyMigrationOps(parseMigrationOps(source, dialect), tables);
|
|
54
58
|
}
|
|
55
59
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
+
* Replay per-file DDL declarations in migration order to compute, in one pass,
|
|
61
|
+
* both the net known-table set (a table dropped in a migration and not
|
|
62
|
+
* recreated is *not* known) and the drop provenance (dropped-table name → which
|
|
63
|
+
* migration dropped it and what it introduced). A table created and dropped
|
|
64
|
+
* within the *same* file is a self-contained scratch fixture (its DROP is
|
|
65
|
+
* teardown, not a migration), so it is kept known and excluded from the
|
|
66
|
+
* provenance. This is the shared pure function the legacy schema reducer's
|
|
67
|
+
* inline replay and the phase-model `resolution` / `migration-history`
|
|
68
|
+
* corpus processors both compute, so the two facts are identical by
|
|
69
|
+
* construction (parity-by-construction for `unknown-table` and
|
|
70
|
+
* `stale-table-reference`).
|
|
71
|
+
*
|
|
72
|
+
* @param ddlFiles Per-file declarations with parsed ops and (optionally) the
|
|
73
|
+
* columns the file declares for each table (order-independent — this sorts by
|
|
74
|
+
* the numeric prefix in the basename, then localeCompare).
|
|
75
|
+
* @returns The net known-table set and the drop provenance.
|
|
60
76
|
*/
|
|
61
|
-
|
|
77
|
+
export function replayDdlDeclarations(ddlFiles) {
|
|
78
|
+
const numericPrefix = (p) => {
|
|
79
|
+
const base = p.split('/').pop() ?? p;
|
|
80
|
+
const m = base.match(/^(\d+)/);
|
|
81
|
+
return m ? parseInt(m[1], 10) : 0;
|
|
82
|
+
};
|
|
83
|
+
const sorted = [...ddlFiles]
|
|
84
|
+
// A DROP (or CREATE) inside a test/spec file is test scaffolding, not a
|
|
85
|
+
// production table lifecycle event. Replaying it would let `DROP TABLE
|
|
86
|
+
// users` in `codeIndexDB-security.spec.ts` mark a production table dropped,
|
|
87
|
+
// turning every later reference into a `stale-table-reference` false
|
|
88
|
+
// positive. Skip test/spec files before replay so only production migrations
|
|
89
|
+
// move the known-table set and the drop provenance.
|
|
90
|
+
.filter((d) => !isTestOrSpecPath(d.filePath))
|
|
91
|
+
.sort((a, b) => {
|
|
92
|
+
const na = numericPrefix(a.filePath);
|
|
93
|
+
const nb = numericPrefix(b.filePath);
|
|
94
|
+
if (na !== nb)
|
|
95
|
+
return na - nb;
|
|
96
|
+
return a.filePath.localeCompare(b.filePath);
|
|
97
|
+
});
|
|
98
|
+
const knownTables = new Set();
|
|
99
|
+
// Last-CREATE source file + column list per surviving table, so `resolution`
|
|
100
|
+
// names the file that most recently (re)declared the table, with its columns.
|
|
101
|
+
const sourceFile = new Map();
|
|
102
|
+
const columnsByTable = new Map();
|
|
103
|
+
const uniqueColumnsByTable = new Map();
|
|
104
|
+
const primaryKeyColumnsByTable = new Map();
|
|
105
|
+
const notNullColumnsByTable = new Map();
|
|
106
|
+
const foreignKeysByTable = new Map();
|
|
107
|
+
const dropProvenance = new Map();
|
|
108
|
+
for (const ddlFile of sorted) {
|
|
109
|
+
const before = new Set(knownTables);
|
|
110
|
+
// Replay this file's CREATE/DROP/RENAME transitions, tracking last-CREATE
|
|
111
|
+
// source/columns alongside the net set (the same transitions
|
|
112
|
+
// `applyMigrationOps` performs, but with provenance bookkeeping).
|
|
113
|
+
for (const op of ddlFile.ops) {
|
|
114
|
+
const t = stripIdentifier(op.table);
|
|
115
|
+
if (op.op === 'CREATE') {
|
|
116
|
+
knownTables.add(t);
|
|
117
|
+
sourceFile.set(t, ddlFile.filePath);
|
|
118
|
+
columnsByTable.set(t, [...(ddlFile.tableColumns?.[t] ?? [])]);
|
|
119
|
+
uniqueColumnsByTable.set(t, [...(ddlFile.uniqueColumns?.[t] ?? [])]);
|
|
120
|
+
primaryKeyColumnsByTable.set(t, [...(ddlFile.primaryKeyColumns?.[t] ?? [])]);
|
|
121
|
+
notNullColumnsByTable.set(t, [...(ddlFile.notNullColumns?.[t] ?? [])]);
|
|
122
|
+
foreignKeysByTable.set(t, [...(ddlFile.foreignKeys?.[t] ?? [])]);
|
|
123
|
+
}
|
|
124
|
+
else if (op.op === 'DROP') {
|
|
125
|
+
knownTables.delete(t);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const nt = stripIdentifier(op.newTable);
|
|
129
|
+
knownTables.delete(t);
|
|
130
|
+
knownTables.add(nt);
|
|
131
|
+
sourceFile.delete(t);
|
|
132
|
+
columnsByTable.delete(t);
|
|
133
|
+
uniqueColumnsByTable.delete(t);
|
|
134
|
+
primaryKeyColumnsByTable.delete(t);
|
|
135
|
+
notNullColumnsByTable.delete(t);
|
|
136
|
+
foreignKeysByTable.delete(t);
|
|
137
|
+
sourceFile.set(nt, ddlFile.filePath);
|
|
138
|
+
columnsByTable.set(nt, [...(ddlFile.tableColumns?.[nt] ?? [])]);
|
|
139
|
+
uniqueColumnsByTable.set(nt, [...(ddlFile.uniqueColumns?.[nt] ?? [])]);
|
|
140
|
+
primaryKeyColumnsByTable.set(nt, [...(ddlFile.primaryKeyColumns?.[nt] ?? [])]);
|
|
141
|
+
notNullColumnsByTable.set(nt, [...(ddlFile.notNullColumns?.[nt] ?? [])]);
|
|
142
|
+
foreignKeysByTable.set(nt, [...(ddlFile.foreignKeys?.[nt] ?? [])]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Genuinely-new tables introduced by this migration (excludes rename/rebuild
|
|
146
|
+
// churn like `ALTER … RENAME TO x_old` + re-CREATE of the same name).
|
|
147
|
+
const createdHere = [];
|
|
148
|
+
const createdTables = new Set();
|
|
149
|
+
const droppedTables = new Set();
|
|
150
|
+
for (const op of ddlFile.ops) {
|
|
151
|
+
const t = stripIdentifier(op.table);
|
|
152
|
+
if (op.op === 'CREATE') {
|
|
153
|
+
createdTables.add(t);
|
|
154
|
+
if (!before.has(t))
|
|
155
|
+
createdHere.push(t);
|
|
156
|
+
}
|
|
157
|
+
else if (op.op === 'DROP') {
|
|
158
|
+
droppedTables.add(t);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
for (const op of ddlFile.ops) {
|
|
162
|
+
const t = stripIdentifier(op.table);
|
|
163
|
+
if (op.op === 'DROP') {
|
|
164
|
+
dropProvenance.set(t, { migrationFile: ddlFile.filePath, createdInSameMigration: createdHere });
|
|
165
|
+
}
|
|
166
|
+
else if (op.op === 'CREATE') {
|
|
167
|
+
dropProvenance.delete(t);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// A table created and dropped within this same file is a self-contained
|
|
171
|
+
// fixture — a scratch table a test or script creates, uses, then tears
|
|
172
|
+
// down. Its DROP is teardown, not a migration: keep it known and clear the
|
|
173
|
+
// drop provenance this file recorded for it.
|
|
174
|
+
for (const t of createdTables) {
|
|
175
|
+
if (droppedTables.has(t)) {
|
|
176
|
+
knownTables.add(t);
|
|
177
|
+
if (dropProvenance.get(t)?.migrationFile === ddlFile.filePath) {
|
|
178
|
+
dropProvenance.delete(t);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const netTables = [];
|
|
184
|
+
for (const name of knownTables) {
|
|
185
|
+
netTables.push({
|
|
186
|
+
name,
|
|
187
|
+
source: sourceFile.get(name) ?? '',
|
|
188
|
+
columns: columnsByTable.get(name) ?? [],
|
|
189
|
+
uniqueColumns: uniqueColumnsByTable.get(name) ?? [],
|
|
190
|
+
primaryKeyColumns: primaryKeyColumnsByTable.get(name) ?? [],
|
|
191
|
+
notNullColumns: notNullColumnsByTable.get(name) ?? [],
|
|
192
|
+
foreignKeys: foreignKeysByTable.get(name) ?? [],
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
return { netTables, dropProvenance };
|
|
196
|
+
}
|
|
62
197
|
/**
|
|
63
|
-
* Extract ordered DDL operations from migration SQL text
|
|
64
|
-
*
|
|
65
|
-
*
|
|
198
|
+
* Extract ordered DDL operations from migration SQL text — the AST replacement
|
|
199
|
+
* for site #7's `DDL_RE`, which had to regex the whole create/drop/alter-rename
|
|
200
|
+
* vocabulary as one alternation. Each statement is parsed tolerantly (a `PRAGMA`
|
|
201
|
+
* or `CREATE TRIGGER` beside a `CREATE TABLE` is a failure the caller accounts
|
|
202
|
+
* for, not a discard of the whole file) and walked by {@link ddlMigrationOps}.
|
|
203
|
+
* Emitted by the schema-sql visitor instead of raw source so the reducer only
|
|
204
|
+
* retains the extracted state transitions, not the full file text.
|
|
66
205
|
* @param source
|
|
206
|
+
* @param dialect The corpus's named dialect; null is honest abstention — the SQL
|
|
207
|
+
* is NOT parsed under a guessed {@link DEFAULT_SQL_DIALECT}. An undetermined
|
|
208
|
+
* (or ambiguous) dialect yields `unproven`: the caller surfaces the
|
|
209
|
+
* `dialect undetermined` cannot-fire reason, never a sqlite-guessed op set.
|
|
67
210
|
* @returns
|
|
68
211
|
*/
|
|
69
|
-
export function parseMigrationOps(source) {
|
|
212
|
+
export function parseMigrationOps(source, dialect) {
|
|
213
|
+
// A null dialect is not a licence to guess sqlite. Parsing DDL under a dialect
|
|
214
|
+
// nothing in the manifest suggested is a wrong answer wearing a fact — the
|
|
215
|
+
// same inversion as the dialect gate, one layer over. Abstain: no AST parse and
|
|
216
|
+
// no FTS5 regex recovery, so an ambiguous corpus (pg+mysql) emits zero ops and
|
|
217
|
+
// the cannot-fire reason carries the ambiguity instead.
|
|
218
|
+
if (dialect === null)
|
|
219
|
+
return [];
|
|
220
|
+
const { statements } = parseSqlProgramTolerant(source, dialect);
|
|
70
221
|
const ops = [];
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
222
|
+
for (const stmt of statements) {
|
|
223
|
+
ops.push(...ddlMigrationOps(stmt));
|
|
224
|
+
}
|
|
225
|
+
// FTS5 `CREATE VIRTUAL TABLE … USING fts5(…)` is rejected by node-sql-parser
|
|
226
|
+
// (it is not `CREATE TABLE`), so the tolerant parse drops it and the DDL replay
|
|
227
|
+
// never learns the table exists. That makes a dropped-and-recreated FTS table
|
|
228
|
+
// read as "dropped, never recreated" — the `stale-table-reference` false
|
|
229
|
+
// positive on `functions_fts` (whose v17 migration drops the FTS5 surface, then
|
|
230
|
+
// rebuilds it). Recover those creates here so the replay tracks the virtual
|
|
231
|
+
// table's lifecycle like any other table. The recovered CREATE ops are appended
|
|
232
|
+
// after the AST-derived ops; the replay's net result is unaffected by
|
|
233
|
+
// intra-file ordering because the *last* op per table decides its state — a
|
|
234
|
+
// virtual table's DROP is already captured, so a re-CREATE appended after it
|
|
235
|
+
// correctly restores it to known.
|
|
236
|
+
for (const op of virtualTableCreateOps(source)) {
|
|
237
|
+
ops.push(op);
|
|
238
|
+
}
|
|
239
|
+
return ops;
|
|
240
|
+
}
|
|
241
|
+
/** Regex-scan `source` for `CREATE VIRTUAL TABLE [IF NOT EXISTS] <name>` headers
|
|
242
|
+
* and emit a CREATE op per name. This is the recovery path for FTS5 virtual
|
|
243
|
+
* tables, which node-sql-parser cannot parse; a bare identifier (optionally
|
|
244
|
+
* backtick/double-quoted) is the only supported name shape, matching the
|
|
245
|
+
* `DDL_HEADER_RE` the ddl-declarations oracle counts. */
|
|
246
|
+
const VIRTUAL_TABLE_CREATE_RE = /CREATE\s+VIRTUAL\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?([`"']?[A-Za-z_][A-Za-z0-9_$]*[`"']?)/gi;
|
|
247
|
+
function virtualTableCreateOps(source) {
|
|
248
|
+
const ops = [];
|
|
249
|
+
let m;
|
|
250
|
+
while ((m = VIRTUAL_TABLE_CREATE_RE.exec(source)) !== null) {
|
|
251
|
+
const name = stripIdentifier(m[1]);
|
|
252
|
+
if (name)
|
|
253
|
+
ops.push({ op: 'CREATE', table: name });
|
|
84
254
|
}
|
|
85
255
|
return ops;
|
|
86
256
|
}
|
|
87
257
|
// ── DDL column extraction (Spec 39 — derived applicability) ──────────────────
|
|
258
|
+
//
|
|
259
|
+
// Sites #9 and #10 are the AST replacements for the regex scanners that used to
|
|
260
|
+
// hand-roll paren-depth tracking and quote handling (a SQL parser written one
|
|
261
|
+
// bug at a time). The statement is parsed once by the grammar and the column /
|
|
262
|
+
// constraint / foreign-key facts are read off the definition nodes.
|
|
88
263
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
264
|
+
* The shared DDL-column extraction body behind `extractDdlTableColumns`,
|
|
265
|
+
* `extractDdlUniqueColumns`, `extractDdlPrimaryKeyColumns`, and
|
|
266
|
+
* `extractDdlNotNullColumns`. Each is the same skeleton — null-dialect → empty,
|
|
267
|
+
* parse the program tolerantly, walk the statements adding lowercased columns to
|
|
268
|
+
* a per-table set via the `columnsFor` helper, fold the map to
|
|
269
|
+
* `Record<table, cols>`. Only the per-statement column selection differs, so it
|
|
270
|
+
* is the `collect` callback here; the null-guard, parse, map lifecycle, and fold
|
|
271
|
+
* are shared. The column-set helper is passed in so a caller that groups by a
|
|
272
|
+
* table derived from the statement (a `UNIQUE (…)` / `PRIMARY KEY (…)`
|
|
273
|
+
* constraint, whose table is the statement's own table rather than a column's)
|
|
274
|
+
* can still route to the right bucket.
|
|
94
275
|
*/
|
|
95
|
-
function
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
inString = null;
|
|
106
|
-
continue;
|
|
276
|
+
function extractDdlColumns(source, dialect, collect) {
|
|
277
|
+
if (dialect === null)
|
|
278
|
+
return {}; // honest abstention — no parse under a guessed dialect
|
|
279
|
+
const { statements } = parseSqlProgramTolerant(source, dialect);
|
|
280
|
+
const tableColumns = new Map();
|
|
281
|
+
const columnsFor = (table) => {
|
|
282
|
+
let cols = tableColumns.get(table);
|
|
283
|
+
if (!cols) {
|
|
284
|
+
cols = new Set();
|
|
285
|
+
tableColumns.set(table, cols);
|
|
107
286
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
287
|
+
return cols;
|
|
288
|
+
};
|
|
289
|
+
for (const stmt of statements)
|
|
290
|
+
collect(stmt, columnsFor);
|
|
291
|
+
const result = {};
|
|
292
|
+
for (const [table, cols] of tableColumns)
|
|
293
|
+
result[table] = [...cols];
|
|
294
|
+
return result;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Extract per-table column names from migration SQL — CREATE TABLE column
|
|
298
|
+
* definitions, ALTER TABLE … ADD COLUMN, and the columns of a foreign-key
|
|
299
|
+
* constraint (Drizzle's `ALTER TABLE … ADD CONSTRAINT … FOREIGN KEY
|
|
300
|
+
* ("organization_id") …` declares the tenant column through the constraint, not
|
|
301
|
+
* a column definition). Returns a `Record<table, columns>` with lowercased,
|
|
302
|
+
* deduplicated column names, so the schema reducer can answer "does THIS table
|
|
303
|
+
* carry a tenant-scoping column?" — the per-query question the flat set cannot.
|
|
304
|
+
* @param source Migration/DDL SQL text.
|
|
305
|
+
* @param dialect The corpus's named dialect; null is honest abstention — no
|
|
306
|
+
* parse under a guessed {@link DEFAULT_SQL_DIALECT} (unproven, cannot-fire).
|
|
307
|
+
* @returns Per-table lowercased column-name lists.
|
|
308
|
+
*/
|
|
309
|
+
export function extractDdlTableColumns(source, dialect) {
|
|
310
|
+
return extractDdlColumns(source, dialect, (stmt, columnsFor) => {
|
|
311
|
+
for (const col of ddlColumnDefinitions(stmt)) {
|
|
312
|
+
if (col.table)
|
|
313
|
+
columnsFor(col.table).add(col.column.toLowerCase());
|
|
314
|
+
}
|
|
315
|
+
// FK-constraint columns are the tenant-column pass: a table whose only
|
|
316
|
+
// tenant column is declared through `ADD CONSTRAINT … FOREIGN KEY` still
|
|
317
|
+
// surfaces its columns here (Spec 68 — declared inputs).
|
|
318
|
+
for (const fk of astDdlForeignKeys(stmt)) {
|
|
319
|
+
const cols = columnsFor(fk.table);
|
|
320
|
+
for (const column of fk.columns)
|
|
321
|
+
cols.add(column.toLowerCase());
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Extract per-table *natural* UNIQUE column names from migration SQL — the
|
|
327
|
+
* bootstrap-lookup signal `missing-org-filter` reads: a query whose predicate
|
|
328
|
+
* carries one of these is a structurally-scoped lookup by a natural key. Covers
|
|
329
|
+
* the three DDL spellings of `UNIQUE`:
|
|
330
|
+
*
|
|
331
|
+
* - column-level: `slug TEXT UNIQUE`
|
|
332
|
+
* - table-level: `UNIQUE (slug)`, `UNIQUE (a, b)`
|
|
333
|
+
* - ALTER: `ALTER TABLE t ADD CONSTRAINT … UNIQUE (col)`
|
|
334
|
+
*
|
|
335
|
+
* PRIMARY KEY is deliberately *excluded*. A surrogate primary key is not a
|
|
336
|
+
* bootstrap lookup: `WHERE id = $1` on a tenant table returns exactly one row
|
|
337
|
+
* selected by a caller-supplied id — that is the IDOR surface the rule exists
|
|
338
|
+
* to catch, not a signal that tenant scoping is unnecessary (see
|
|
339
|
+
* `specs/rule-authenticity-ledger.md:46`, and the Thing 1 correction that
|
|
340
|
+
* narrowed this signal to natural keys).
|
|
341
|
+
*
|
|
342
|
+
* Returns lowercased SQL column names keyed by table. A column that is unique
|
|
343
|
+
* only through a composite constraint still appears — the predicate test is
|
|
344
|
+
* "does the filter name this column", not "is the column alone unique".
|
|
345
|
+
* @param source Migration/DDL SQL text.
|
|
346
|
+
* @param dialect The corpus's named dialect; null is honest abstention — no
|
|
347
|
+
* parse under a guessed {@link DEFAULT_SQL_DIALECT} (unproven, cannot-fire).
|
|
348
|
+
* @returns Per-table lowercased natural-UNIQUE column-name lists.
|
|
349
|
+
*/
|
|
350
|
+
export function extractDdlUniqueColumns(source, dialect) {
|
|
351
|
+
return extractDdlColumns(source, dialect, (stmt, columnsFor) => {
|
|
352
|
+
const table = ddlTableNames(stmt)[0] ?? '';
|
|
353
|
+
// Column-level `col … UNIQUE`. PRIMARY KEY is excluded (surrogate PK is the
|
|
354
|
+
// IDOR surface, not a bootstrap-lookup signal) — `ddlColumnDefinitions`
|
|
355
|
+
// carries `unique` and `primaryKey` separately.
|
|
356
|
+
for (const col of ddlColumnDefinitions(stmt)) {
|
|
357
|
+
if (col.unique)
|
|
358
|
+
columnsFor(col.table).add(col.column.toLowerCase());
|
|
112
359
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
continue;
|
|
360
|
+
// Table-level / ALTER `UNIQUE (…)` / `CONSTRAINT x UNIQUE (…)`.
|
|
361
|
+
for (const name of ddlConstraintColumns(stmt, 'unique')) {
|
|
362
|
+
columnsFor(table).add(name.toLowerCase());
|
|
117
363
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Extract per-table PRIMARY KEY columns from migration SQL — the surrogate-vs-
|
|
368
|
+
* natural distinction `missing-org-filter` needs to keep PK *separate* from
|
|
369
|
+
* UNIQUE (Spec 69 R3, criterion 8). Covers the DDL spellings of a primary key:
|
|
370
|
+
*
|
|
371
|
+
* - column-level: `id SERIAL PRIMARY KEY`, `id INTEGER PRIMARY KEY`
|
|
372
|
+
* - table-level: `PRIMARY KEY (id)`, `CONSTRAINT pk PRIMARY KEY (id)`
|
|
373
|
+
* - ALTER: `ALTER TABLE t ADD CONSTRAINT pk PRIMARY KEY (col)`
|
|
374
|
+
*
|
|
375
|
+
* Returns lowercased SQL column names keyed by table. A composite PK lists every
|
|
376
|
+
* member column. PRIMARY KEY and UNIQUE are *never* merged here — the caller
|
|
377
|
+
* records them as separate flags so the quiet set can stay natural-UNIQUE-only.
|
|
378
|
+
* @param source Migration/DDL SQL text.
|
|
379
|
+
* @param dialect The corpus's named dialect; null is honest abstention — no
|
|
380
|
+
* parse under a guessed {@link DEFAULT_SQL_DIALECT} (unproven, cannot-fire).
|
|
381
|
+
* @returns Per-table lowercased PRIMARY-KEY column-name lists.
|
|
382
|
+
*/
|
|
383
|
+
export function extractDdlPrimaryKeyColumns(source, dialect) {
|
|
384
|
+
return extractDdlColumns(source, dialect, (stmt, columnsFor) => {
|
|
385
|
+
const table = ddlTableNames(stmt)[0] ?? '';
|
|
386
|
+
// Column-level `id … PRIMARY KEY`.
|
|
387
|
+
for (const col of ddlColumnDefinitions(stmt)) {
|
|
388
|
+
if (col.primaryKey)
|
|
389
|
+
columnsFor(col.table).add(col.column.toLowerCase());
|
|
122
390
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
continue;
|
|
391
|
+
// Table-level `PRIMARY KEY (…)` / `CONSTRAINT pk PRIMARY KEY (…)`.
|
|
392
|
+
for (const name of ddlConstraintColumns(stmt, 'primary key')) {
|
|
393
|
+
columnsFor(table).add(name.toLowerCase());
|
|
127
394
|
}
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
if (current.trim())
|
|
131
|
-
defs.push(current);
|
|
132
|
-
return defs;
|
|
395
|
+
});
|
|
133
396
|
}
|
|
134
397
|
/**
|
|
135
|
-
* Extract
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* @
|
|
398
|
+
* Extract per-table NOT NULL columns from migration SQL. Column-level only —
|
|
399
|
+
* SQL has no table-level NOT NULL constraint. Returns lowercased SQL column
|
|
400
|
+
* names keyed by table; the resolution fact records the flag separately so a
|
|
401
|
+
* rule can distinguish a required column from a nullable one.
|
|
402
|
+
* @param source Migration/DDL SQL text.
|
|
403
|
+
* @param dialect The corpus's named dialect; null is honest abstention — no
|
|
404
|
+
* parse under a guessed {@link DEFAULT_SQL_DIALECT} (unproven, cannot-fire).
|
|
405
|
+
* @returns Per-table lowercased NOT-NULL column-name lists.
|
|
140
406
|
*/
|
|
141
|
-
function
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
upper === 'FOREIGN' || upper === 'CHECK' || upper === 'KEY' || upper === 'INDEX') {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
return name;
|
|
407
|
+
export function extractDdlNotNullColumns(source, dialect) {
|
|
408
|
+
return extractDdlColumns(source, dialect, (stmt, columnsFor) => {
|
|
409
|
+
for (const col of ddlColumnDefinitions(stmt)) {
|
|
410
|
+
if (col.notNull)
|
|
411
|
+
columnsFor(col.table).add(col.column.toLowerCase());
|
|
412
|
+
}
|
|
413
|
+
});
|
|
152
414
|
}
|
|
153
415
|
/**
|
|
154
|
-
* Extract per-table
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
416
|
+
* Extract per-table foreign-key references from migration SQL. Covers the DDL
|
|
417
|
+
* spellings of a reference:
|
|
418
|
+
*
|
|
419
|
+
* - column-level: `org_id INTEGER REFERENCES organizations(id)`
|
|
420
|
+
* - table-level: `FOREIGN KEY (org_id) REFERENCES organizations(id)`
|
|
421
|
+
* - ALTER: `ALTER TABLE t ADD CONSTRAINT fk FOREIGN KEY (col) REFERENCES other(col)`
|
|
422
|
+
*
|
|
423
|
+
* Returns lowercased SQL names keyed by the declaring table. The reference is a
|
|
424
|
+
* separate fact from PK/UNIQUE/NOT NULL (Spec 69 R3 — each constraint recorded
|
|
425
|
+
* separately), so a rule can trace which column links to which other table.
|
|
160
426
|
* @param source Migration/DDL SQL text.
|
|
161
|
-
* @
|
|
427
|
+
* @param dialect The corpus's named dialect; null is honest abstention — no
|
|
428
|
+
* parse under a guessed {@link DEFAULT_SQL_DIALECT} (unproven, cannot-fire).
|
|
429
|
+
* @returns Per-table foreign-key references.
|
|
162
430
|
*/
|
|
163
|
-
export function
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
431
|
+
export function extractDdlForeignKeys(source, dialect) {
|
|
432
|
+
if (dialect === null)
|
|
433
|
+
return {}; // honest abstention — no parse under a guessed dialect
|
|
434
|
+
const { statements } = parseSqlProgramTolerant(source, dialect);
|
|
435
|
+
const fks = new Map();
|
|
436
|
+
const fksFor = (table) => {
|
|
437
|
+
let list = fks.get(table);
|
|
438
|
+
if (!list) {
|
|
439
|
+
list = [];
|
|
440
|
+
fks.set(table, list);
|
|
170
441
|
}
|
|
171
|
-
return
|
|
442
|
+
return list;
|
|
172
443
|
};
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
188
|
-
if (ch === '"' || ch === "'" || ch === '`') {
|
|
189
|
-
inString = ch;
|
|
190
|
-
continue;
|
|
191
|
-
}
|
|
192
|
-
if (ch === '(')
|
|
193
|
-
depth++;
|
|
194
|
-
else if (ch === ')') {
|
|
195
|
-
depth--;
|
|
196
|
-
if (depth === 0) {
|
|
197
|
-
closeParen = i;
|
|
198
|
-
break;
|
|
444
|
+
// Dedupe by (column, refTable, refColumn) — the same FK is often re-declared
|
|
445
|
+
// in a later migration (DROP + re-ADD), and the replay keeps the last CREATE.
|
|
446
|
+
const seen = new Set();
|
|
447
|
+
for (const stmt of statements) {
|
|
448
|
+
for (const fk of astDdlForeignKeys(stmt)) {
|
|
449
|
+
const refTable = stripIdentifier(fk.referencesTable).toLowerCase();
|
|
450
|
+
const refCols = fk.referencesColumns.map((c) => stripIdentifier(c).toLowerCase());
|
|
451
|
+
const cols = fk.columns.map((c) => stripIdentifier(c).toLowerCase());
|
|
452
|
+
for (let i = 0; i < cols.length; i++) {
|
|
453
|
+
const key = `${cols[i]}|${refTable}|${refCols[i] ?? ''}`;
|
|
454
|
+
if (!seen.has(key)) {
|
|
455
|
+
seen.add(key);
|
|
456
|
+
fksFor(fk.table).push({ column: cols[i], refTable, refColumn: refCols[i] ?? '' });
|
|
199
457
|
}
|
|
200
458
|
}
|
|
201
459
|
}
|
|
202
|
-
if (closeParen === -1) {
|
|
203
|
-
createRe.lastIndex = openParen + 1;
|
|
204
|
-
continue;
|
|
205
|
-
}
|
|
206
|
-
const cols = columnsFor(table);
|
|
207
|
-
const body = source.slice(openParen + 1, closeParen);
|
|
208
|
-
for (const def of splitColumnDefs(body)) {
|
|
209
|
-
const name = leadingColumnName(def);
|
|
210
|
-
if (name)
|
|
211
|
-
cols.add(name.toLowerCase());
|
|
212
|
-
}
|
|
213
|
-
createRe.lastIndex = closeParen + 1;
|
|
214
|
-
}
|
|
215
|
-
const alterRe = /\bALTER\s+TABLE\s+(?:IF\s+EXISTS\s+)?(`[^`]+`|"[^"]+"|\w+)\s+ADD\s+(?:COLUMN\s+)?(?:IF\s+NOT\s+EXISTS\s+)?(`[^`]+`|"[^"]+"|\w+)/gi;
|
|
216
|
-
while ((match = alterRe.exec(source)) !== null) {
|
|
217
|
-
columnsFor(stripIdentifier(match[1])).add(stripIdentifier(match[2]).toLowerCase());
|
|
218
460
|
}
|
|
219
461
|
const result = {};
|
|
220
|
-
for (const [table,
|
|
221
|
-
result[table] =
|
|
462
|
+
for (const [table, list] of fks)
|
|
463
|
+
result[table] = list;
|
|
222
464
|
return result;
|
|
223
465
|
}
|
|
224
466
|
/**
|
|
@@ -229,16 +471,54 @@ export function extractDdlTableColumns(source) {
|
|
|
229
471
|
* column?" without materializing per-table column lists. The flat union of
|
|
230
472
|
* {@link extractDdlTableColumns}.
|
|
231
473
|
* @param source Migration/DDL SQL text.
|
|
474
|
+
* @param dialect The corpus's named dialect; null is honest abstention — no
|
|
475
|
+
* parse under a guessed {@link DEFAULT_SQL_DIALECT} (unproven, cannot-fire).
|
|
232
476
|
* @returns The set of column names declared across the source.
|
|
233
477
|
*/
|
|
234
|
-
export function extractDdlColumnNames(source) {
|
|
478
|
+
export function extractDdlColumnNames(source, dialect) {
|
|
235
479
|
const columns = new Set();
|
|
236
|
-
for (const cols of Object.values(extractDdlTableColumns(source))) {
|
|
480
|
+
for (const cols of Object.values(extractDdlTableColumns(source, dialect))) {
|
|
237
481
|
for (const c of cols)
|
|
238
482
|
columns.add(c);
|
|
239
483
|
}
|
|
240
484
|
return [...columns];
|
|
241
485
|
}
|
|
486
|
+
/**
|
|
487
|
+
* Extract the DDL SQL fragments embedded in host-language source — the TS/JS
|
|
488
|
+
* migration files whose `CREATE/DROP/ALTER TABLE` statements live inside string
|
|
489
|
+
* or template literals (Durable-Object-local DDL and raw `sql.exec(...)` bodies
|
|
490
|
+
* that migration discovery never sees). This is the literal-*extraction* half of
|
|
491
|
+
* that path: the raw TS/JS text carries the SQL verbatim inside the literals, so
|
|
492
|
+
* this names the strings to hand to the AST extractors — it is NOT itself a SQL
|
|
493
|
+
* parse, and it is deliberately NOT a general "find SQL anywhere" sweep. It only
|
|
494
|
+
* matches a literal that contains a CREATE/DROP/ALTER TABLE (or VIRTUAL TABLE)
|
|
495
|
+
* header, the same boundary the legacy schema-code visitor drew; every matched
|
|
496
|
+
* fragment is then parsed by {@link parseMigrationOps} /
|
|
497
|
+
* {@link extractDdlTableColumns} downstream.
|
|
498
|
+
*
|
|
499
|
+
* Returns the fragments joined as a `;`-separated program (so a template literal
|
|
500
|
+
* holding several statements parses as one), or `null` when the source carries no
|
|
501
|
+
* DDL-bearing literal.
|
|
502
|
+
* @param source The raw TS/JS (or other host-language) source text.
|
|
503
|
+
* @returns Pure SQL for the DDL extractors, or null when none is present.
|
|
504
|
+
*/
|
|
505
|
+
export function extractDdlSqlFromSource(source) {
|
|
506
|
+
const templateRe = /`([^`]*(?:CREATE|DROP|ALTER)\s+(?:TABLE|VIRTUAL\s+TABLE)\s+[^`]+)`/gis;
|
|
507
|
+
const stringRe = /(["'])((?:\s*(?:CREATE|DROP|ALTER)\s+(?:TABLE|VIRTUAL\s+TABLE)\s+[^"']+))\1/gis;
|
|
508
|
+
const fragments = [];
|
|
509
|
+
let m;
|
|
510
|
+
while ((m = templateRe.exec(source)) !== null) {
|
|
511
|
+
const sql = m[1].trim();
|
|
512
|
+
if (sql)
|
|
513
|
+
fragments.push(sql);
|
|
514
|
+
}
|
|
515
|
+
while ((m = stringRe.exec(source)) !== null) {
|
|
516
|
+
const sql = m[2].trim();
|
|
517
|
+
if (sql)
|
|
518
|
+
fragments.push(sql);
|
|
519
|
+
}
|
|
520
|
+
return fragments.length > 0 ? fragments.join(';\n') : null;
|
|
521
|
+
}
|
|
242
522
|
// ── One-hop barrel re-export resolution (Spec 33 item 9) ─────────────────────
|
|
243
523
|
/**
|
|
244
524
|
* Extract `export * from 'x'` and `export { a, b as c } from 'x'` statements
|
|
@@ -325,56 +605,26 @@ export function readModuleFromDisk(fromFile, specifier) {
|
|
|
325
605
|
return null;
|
|
326
606
|
}
|
|
327
607
|
}
|
|
328
|
-
/** Lightweight DDL presence marker — detection only, no capture groups. */
|
|
329
|
-
const DDL_PRESENCE_RE = /(?:CREATE|DROP|ALTER)\s+(?:VIRTUAL\s+)?TABLE/i;
|
|
330
|
-
/**
|
|
331
|
-
* Detect whether an SQL file contains any DDL statement without materializing
|
|
332
|
-
* the whole file. Streams in 1 MB chunks, carrying a small tail across chunk
|
|
333
|
-
* boundaries so a marker split at "CREATE TA/BLE" is still caught. Used by the
|
|
334
|
-
* schema-sql visitor for oversized orphans yielded with empty source by stage 1.
|
|
335
|
-
* @param filePath
|
|
336
|
-
* @returns
|
|
337
|
-
*/
|
|
338
|
-
export async function sqlFileHasDdl(filePath) {
|
|
339
|
-
const CHUNK = 1024 * 1024; // 1 MB
|
|
340
|
-
const CARRY = 32; // "ALTER VIRTUAL TABLE IF NOT EXISTS" — enough to bridge a boundary
|
|
341
|
-
const handle = await fs.open(filePath, 'r');
|
|
342
|
-
try {
|
|
343
|
-
const buffer = Buffer.alloc(CHUNK);
|
|
344
|
-
let carry = '';
|
|
345
|
-
let pos = 0;
|
|
346
|
-
for (;;) {
|
|
347
|
-
const { bytesRead } = await handle.read(buffer, 0, CHUNK, pos);
|
|
348
|
-
if (bytesRead === 0)
|
|
349
|
-
break;
|
|
350
|
-
const text = carry + buffer.toString('utf8', 0, bytesRead);
|
|
351
|
-
if (DDL_PRESENCE_RE.test(text))
|
|
352
|
-
return true;
|
|
353
|
-
carry = text.slice(-CARRY);
|
|
354
|
-
pos += bytesRead;
|
|
355
|
-
}
|
|
356
|
-
return false;
|
|
357
|
-
}
|
|
358
|
-
finally {
|
|
359
|
-
await handle.close();
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
608
|
/**
|
|
363
609
|
* Extract migration ops from an SQL file, honoring stage-1 streaming: when
|
|
364
|
-
* `sourceCode` is empty the file was too large to materialize, so
|
|
365
|
-
* is
|
|
366
|
-
*
|
|
367
|
-
*
|
|
610
|
+
* `sourceCode` is empty the file was too large to materialize, so it is read in
|
|
611
|
+
* full only to answer "is this a migration or a data dump?" — the AST successor
|
|
612
|
+
* to site #8's streaming `CREATE|DROP|ALTER TABLE` regex. The parsed statements
|
|
613
|
+
* decide: a file with no table DDL is a data dump and is skipped (surfaced in
|
|
614
|
+
* coverage, no violation); one with table DDL has its ops/columns extracted.
|
|
615
|
+
* Only a real oversized migration is read in full (rare).
|
|
368
616
|
* @param filePath
|
|
369
617
|
* @param sourceCode
|
|
618
|
+
* @param dialect The corpus's named dialect; null is honest abstention — no
|
|
619
|
+
* parse under a guessed {@link DEFAULT_SQL_DIALECT} (unproven, cannot-fire).
|
|
370
620
|
* @returns
|
|
371
621
|
*/
|
|
372
|
-
export async function extractMigrationOpsFromFile(filePath, sourceCode) {
|
|
622
|
+
export async function extractMigrationOpsFromFile(filePath, sourceCode, dialect) {
|
|
373
623
|
if (sourceCode !== '') {
|
|
374
624
|
return {
|
|
375
|
-
ops: parseMigrationOps(sourceCode),
|
|
376
|
-
columns: extractDdlColumnNames(sourceCode),
|
|
377
|
-
tableColumns: extractDdlTableColumns(sourceCode),
|
|
625
|
+
ops: parseMigrationOps(sourceCode, dialect),
|
|
626
|
+
columns: extractDdlColumnNames(sourceCode, dialect),
|
|
627
|
+
tableColumns: extractDdlTableColumns(sourceCode, dialect),
|
|
378
628
|
skipped: false,
|
|
379
629
|
bytes: Buffer.byteLength(sourceCode),
|
|
380
630
|
};
|
|
@@ -390,14 +640,21 @@ export async function extractMigrationOpsFromFile(filePath, sourceCode) {
|
|
|
390
640
|
// Empty or small file whose read produced an empty string — nothing to do.
|
|
391
641
|
return { ops: [], columns: [], tableColumns: {}, skipped: false, bytes: size };
|
|
392
642
|
}
|
|
393
|
-
|
|
643
|
+
const full = await fs.readFile(filePath, 'utf-8');
|
|
644
|
+
if (dialect === null) {
|
|
645
|
+
// Honest abstention — a null dialect must not guess sqlite just to answer
|
|
646
|
+
// "migration or data dump". Report no ops/columns and let the caller's
|
|
647
|
+
// dialect-undetermined cannot-fire reason carry the abstention.
|
|
648
|
+
return { ops: [], columns: [], tableColumns: {}, skipped: false, bytes: size };
|
|
649
|
+
}
|
|
650
|
+
const { statements } = parseSqlProgramTolerant(full, dialect);
|
|
651
|
+
if (!statements.some((stmt) => isDdlStatement(stmt))) {
|
|
394
652
|
return { ops: [], columns: [], tableColumns: {}, skipped: true, bytes: size };
|
|
395
653
|
}
|
|
396
|
-
const full = await fs.readFile(filePath, 'utf-8');
|
|
397
654
|
return {
|
|
398
|
-
ops:
|
|
399
|
-
columns: extractDdlColumnNames(full),
|
|
400
|
-
tableColumns: extractDdlTableColumns(full),
|
|
655
|
+
ops: statements.flatMap((stmt) => ddlMigrationOps(stmt)),
|
|
656
|
+
columns: extractDdlColumnNames(full, dialect),
|
|
657
|
+
tableColumns: extractDdlTableColumns(full, dialect),
|
|
401
658
|
skipped: false,
|
|
402
659
|
bytes: size,
|
|
403
660
|
};
|