@oculum/scanner 1.0.10 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/baseline/diff.d.ts +32 -0
- package/dist/baseline/diff.d.ts.map +1 -0
- package/dist/baseline/diff.js +119 -0
- package/dist/baseline/diff.js.map +1 -0
- package/dist/baseline/index.d.ts +9 -0
- package/dist/baseline/index.d.ts.map +1 -0
- package/dist/baseline/index.js +19 -0
- package/dist/baseline/index.js.map +1 -0
- package/dist/baseline/manager.d.ts +67 -0
- package/dist/baseline/manager.d.ts.map +1 -0
- package/dist/baseline/manager.js +180 -0
- package/dist/baseline/manager.js.map +1 -0
- package/dist/baseline/types.d.ts +91 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +12 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/formatters/cli-terminal.d.ts +38 -0
- package/dist/formatters/cli-terminal.d.ts.map +1 -1
- package/dist/formatters/cli-terminal.js +365 -42
- package/dist/formatters/cli-terminal.js.map +1 -1
- package/dist/formatters/github-comment.d.ts +1 -1
- package/dist/formatters/github-comment.d.ts.map +1 -1
- package/dist/formatters/github-comment.js +75 -11
- package/dist/formatters/github-comment.js.map +1 -1
- package/dist/formatters/index.d.ts +1 -1
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +4 -1
- package/dist/formatters/index.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +155 -16
- package/dist/index.js.map +1 -1
- package/dist/layer1/config-audit.d.ts.map +1 -1
- package/dist/layer1/config-audit.js +20 -3
- package/dist/layer1/config-audit.js.map +1 -1
- package/dist/layer1/config-mcp-audit.d.ts +20 -0
- package/dist/layer1/config-mcp-audit.d.ts.map +1 -0
- package/dist/layer1/config-mcp-audit.js +239 -0
- package/dist/layer1/config-mcp-audit.js.map +1 -0
- package/dist/layer1/index.d.ts +1 -0
- package/dist/layer1/index.d.ts.map +1 -1
- package/dist/layer1/index.js +9 -1
- package/dist/layer1/index.js.map +1 -1
- package/dist/layer2/ai-agent-tools.d.ts.map +1 -1
- package/dist/layer2/ai-agent-tools.js +303 -0
- package/dist/layer2/ai-agent-tools.js.map +1 -1
- package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -1
- package/dist/layer2/ai-endpoint-protection.js +17 -3
- package/dist/layer2/ai-endpoint-protection.js.map +1 -1
- package/dist/layer2/ai-execution-sinks.d.ts.map +1 -1
- package/dist/layer2/ai-execution-sinks.js +462 -12
- package/dist/layer2/ai-execution-sinks.js.map +1 -1
- package/dist/layer2/ai-fingerprinting.d.ts.map +1 -1
- package/dist/layer2/ai-fingerprinting.js +3 -0
- package/dist/layer2/ai-fingerprinting.js.map +1 -1
- package/dist/layer2/ai-mcp-security.d.ts +17 -0
- package/dist/layer2/ai-mcp-security.d.ts.map +1 -0
- package/dist/layer2/ai-mcp-security.js +679 -0
- package/dist/layer2/ai-mcp-security.js.map +1 -0
- package/dist/layer2/ai-package-hallucination.d.ts +19 -0
- package/dist/layer2/ai-package-hallucination.d.ts.map +1 -0
- package/dist/layer2/ai-package-hallucination.js +696 -0
- package/dist/layer2/ai-package-hallucination.js.map +1 -0
- package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -1
- package/dist/layer2/ai-prompt-hygiene.js +495 -9
- package/dist/layer2/ai-prompt-hygiene.js.map +1 -1
- package/dist/layer2/ai-rag-safety.d.ts.map +1 -1
- package/dist/layer2/ai-rag-safety.js +372 -1
- package/dist/layer2/ai-rag-safety.js.map +1 -1
- package/dist/layer2/auth-antipatterns.d.ts.map +1 -1
- package/dist/layer2/auth-antipatterns.js +4 -0
- package/dist/layer2/auth-antipatterns.js.map +1 -1
- package/dist/layer2/byok-patterns.d.ts.map +1 -1
- package/dist/layer2/byok-patterns.js +3 -0
- package/dist/layer2/byok-patterns.js.map +1 -1
- package/dist/layer2/dangerous-functions/child-process.d.ts +16 -0
- package/dist/layer2/dangerous-functions/child-process.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/child-process.js +74 -0
- package/dist/layer2/dangerous-functions/child-process.js.map +1 -0
- package/dist/layer2/dangerous-functions/dom-xss.d.ts +29 -0
- package/dist/layer2/dangerous-functions/dom-xss.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/dom-xss.js +179 -0
- package/dist/layer2/dangerous-functions/dom-xss.js.map +1 -0
- package/dist/layer2/dangerous-functions/index.d.ts +13 -0
- package/dist/layer2/dangerous-functions/index.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/index.js +621 -0
- package/dist/layer2/dangerous-functions/index.js.map +1 -0
- package/dist/layer2/dangerous-functions/json-parse.d.ts +31 -0
- package/dist/layer2/dangerous-functions/json-parse.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/json-parse.js +319 -0
- package/dist/layer2/dangerous-functions/json-parse.js.map +1 -0
- package/dist/layer2/dangerous-functions/math-random.d.ts +61 -0
- package/dist/layer2/dangerous-functions/math-random.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/math-random.js +459 -0
- package/dist/layer2/dangerous-functions/math-random.js.map +1 -0
- package/dist/layer2/dangerous-functions/patterns.d.ts +21 -0
- package/dist/layer2/dangerous-functions/patterns.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/patterns.js +161 -0
- package/dist/layer2/dangerous-functions/patterns.js.map +1 -0
- package/dist/layer2/dangerous-functions/request-validation.d.ts +13 -0
- package/dist/layer2/dangerous-functions/request-validation.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/request-validation.js +119 -0
- package/dist/layer2/dangerous-functions/request-validation.js.map +1 -0
- package/dist/layer2/dangerous-functions/utils/control-flow.d.ts +23 -0
- package/dist/layer2/dangerous-functions/utils/control-flow.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/utils/control-flow.js +149 -0
- package/dist/layer2/dangerous-functions/utils/control-flow.js.map +1 -0
- package/dist/layer2/dangerous-functions/utils/helpers.d.ts +31 -0
- package/dist/layer2/dangerous-functions/utils/helpers.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/utils/helpers.js +124 -0
- package/dist/layer2/dangerous-functions/utils/helpers.js.map +1 -0
- package/dist/layer2/dangerous-functions/utils/index.d.ts +9 -0
- package/dist/layer2/dangerous-functions/utils/index.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/utils/index.js +23 -0
- package/dist/layer2/dangerous-functions/utils/index.js.map +1 -0
- package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts +22 -0
- package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/utils/schema-validation.js +89 -0
- package/dist/layer2/dangerous-functions/utils/schema-validation.js.map +1 -0
- package/dist/layer2/data-exposure.d.ts.map +1 -1
- package/dist/layer2/data-exposure.js +3 -0
- package/dist/layer2/data-exposure.js.map +1 -1
- package/dist/layer2/framework-checks.d.ts.map +1 -1
- package/dist/layer2/framework-checks.js +3 -0
- package/dist/layer2/framework-checks.js.map +1 -1
- package/dist/layer2/index.d.ts +3 -0
- package/dist/layer2/index.d.ts.map +1 -1
- package/dist/layer2/index.js +61 -2
- package/dist/layer2/index.js.map +1 -1
- package/dist/layer2/logic-gates.d.ts.map +1 -1
- package/dist/layer2/logic-gates.js +4 -0
- package/dist/layer2/logic-gates.js.map +1 -1
- package/dist/layer2/model-supply-chain.d.ts +20 -0
- package/dist/layer2/model-supply-chain.d.ts.map +1 -0
- package/dist/layer2/model-supply-chain.js +376 -0
- package/dist/layer2/model-supply-chain.js.map +1 -0
- package/dist/layer2/risky-imports.d.ts.map +1 -1
- package/dist/layer2/risky-imports.js +4 -0
- package/dist/layer2/risky-imports.js.map +1 -1
- package/dist/layer2/variables.d.ts.map +1 -1
- package/dist/layer2/variables.js +4 -0
- package/dist/layer2/variables.js.map +1 -1
- package/dist/layer3/anthropic/auto-dismiss.d.ts +24 -0
- package/dist/layer3/anthropic/auto-dismiss.d.ts.map +1 -0
- package/dist/layer3/anthropic/auto-dismiss.js +188 -0
- package/dist/layer3/anthropic/auto-dismiss.js.map +1 -0
- package/dist/layer3/anthropic/clients.d.ts +44 -0
- package/dist/layer3/anthropic/clients.d.ts.map +1 -0
- package/dist/layer3/anthropic/clients.js +81 -0
- package/dist/layer3/anthropic/clients.js.map +1 -0
- package/dist/layer3/anthropic/index.d.ts +41 -0
- package/dist/layer3/anthropic/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/index.js +141 -0
- package/dist/layer3/anthropic/index.js.map +1 -0
- package/dist/layer3/anthropic/prompts/index.d.ts +8 -0
- package/dist/layer3/anthropic/prompts/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/index.js +14 -0
- package/dist/layer3/anthropic/prompts/index.js.map +1 -0
- package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts +15 -0
- package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/semantic-analysis.js +169 -0
- package/dist/layer3/anthropic/prompts/semantic-analysis.js.map +1 -0
- package/dist/layer3/anthropic/prompts/validation.d.ts +12 -0
- package/dist/layer3/anthropic/prompts/validation.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/validation.js +421 -0
- package/dist/layer3/anthropic/prompts/validation.js.map +1 -0
- package/dist/layer3/anthropic/providers/anthropic.d.ts +21 -0
- package/dist/layer3/anthropic/providers/anthropic.d.ts.map +1 -0
- package/dist/layer3/anthropic/providers/anthropic.js +266 -0
- package/dist/layer3/anthropic/providers/anthropic.js.map +1 -0
- package/dist/layer3/anthropic/providers/index.d.ts +8 -0
- package/dist/layer3/anthropic/providers/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/providers/index.js +15 -0
- package/dist/layer3/anthropic/providers/index.js.map +1 -0
- package/dist/layer3/anthropic/providers/openai.d.ts +18 -0
- package/dist/layer3/anthropic/providers/openai.d.ts.map +1 -0
- package/dist/layer3/anthropic/providers/openai.js +340 -0
- package/dist/layer3/anthropic/providers/openai.js.map +1 -0
- package/dist/layer3/anthropic/request-builder.d.ts +20 -0
- package/dist/layer3/anthropic/request-builder.d.ts.map +1 -0
- package/dist/layer3/anthropic/request-builder.js +134 -0
- package/dist/layer3/anthropic/request-builder.js.map +1 -0
- package/dist/layer3/anthropic/types.d.ts +88 -0
- package/dist/layer3/anthropic/types.d.ts.map +1 -0
- package/dist/layer3/anthropic/types.js +38 -0
- package/dist/layer3/anthropic/types.js.map +1 -0
- package/dist/layer3/anthropic/utils/index.d.ts +9 -0
- package/dist/layer3/anthropic/utils/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/index.js +24 -0
- package/dist/layer3/anthropic/utils/index.js.map +1 -0
- package/dist/layer3/anthropic/utils/path-helpers.d.ts +21 -0
- package/dist/layer3/anthropic/utils/path-helpers.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/path-helpers.js +69 -0
- package/dist/layer3/anthropic/utils/path-helpers.js.map +1 -0
- package/dist/layer3/anthropic/utils/response-parser.d.ts +40 -0
- package/dist/layer3/anthropic/utils/response-parser.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/response-parser.js +285 -0
- package/dist/layer3/anthropic/utils/response-parser.js.map +1 -0
- package/dist/layer3/anthropic/utils/retry.d.ts +15 -0
- package/dist/layer3/anthropic/utils/retry.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/retry.js +62 -0
- package/dist/layer3/anthropic/utils/retry.js.map +1 -0
- package/dist/layer3/index.d.ts +1 -0
- package/dist/layer3/index.d.ts.map +1 -1
- package/dist/layer3/index.js +16 -6
- package/dist/layer3/index.js.map +1 -1
- package/dist/layer3/osv-check.d.ts +75 -0
- package/dist/layer3/osv-check.d.ts.map +1 -0
- package/dist/layer3/osv-check.js +308 -0
- package/dist/layer3/osv-check.js.map +1 -0
- package/dist/rules/framework-fixes.d.ts +48 -0
- package/dist/rules/framework-fixes.d.ts.map +1 -0
- package/dist/rules/framework-fixes.js +439 -0
- package/dist/rules/framework-fixes.js.map +1 -0
- package/dist/rules/index.d.ts +8 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +18 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/metadata.d.ts +43 -0
- package/dist/rules/metadata.d.ts.map +1 -0
- package/dist/rules/metadata.js +734 -0
- package/dist/rules/metadata.js.map +1 -0
- package/dist/suppression/config-loader.d.ts +74 -0
- package/dist/suppression/config-loader.d.ts.map +1 -0
- package/dist/suppression/config-loader.js +424 -0
- package/dist/suppression/config-loader.js.map +1 -0
- package/dist/suppression/hash.d.ts +48 -0
- package/dist/suppression/hash.d.ts.map +1 -0
- package/dist/suppression/hash.js +88 -0
- package/dist/suppression/hash.js.map +1 -0
- package/dist/suppression/index.d.ts +11 -0
- package/dist/suppression/index.d.ts.map +1 -0
- package/dist/suppression/index.js +39 -0
- package/dist/suppression/index.js.map +1 -0
- package/dist/suppression/inline-parser.d.ts +39 -0
- package/dist/suppression/inline-parser.d.ts.map +1 -0
- package/dist/suppression/inline-parser.js +218 -0
- package/dist/suppression/inline-parser.js.map +1 -0
- package/dist/suppression/manager.d.ts +94 -0
- package/dist/suppression/manager.d.ts.map +1 -0
- package/dist/suppression/manager.js +292 -0
- package/dist/suppression/manager.js.map +1 -0
- package/dist/suppression/types.d.ts +151 -0
- package/dist/suppression/types.d.ts.map +1 -0
- package/dist/suppression/types.js +28 -0
- package/dist/suppression/types.js.map +1 -0
- package/dist/tiers.d.ts +1 -1
- package/dist/tiers.d.ts.map +1 -1
- package/dist/tiers.js +27 -0
- package/dist/tiers.js.map +1 -1
- package/dist/types.d.ts +62 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/context-helpers.d.ts +4 -0
- package/dist/utils/context-helpers.d.ts.map +1 -1
- package/dist/utils/context-helpers.js +13 -9
- package/dist/utils/context-helpers.js.map +1 -1
- package/package.json +4 -2
- package/src/__tests__/benchmark/fixtures/layer1/mcp-config-audit.json +31 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +1489 -82
- package/src/__tests__/benchmark/fixtures/layer2/ai-mcp-security.ts +495 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-package-hallucination.ts +255 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +300 -1
- package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +139 -0
- package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +7 -0
- package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +63 -0
- package/src/__tests__/benchmark/fixtures/layer2/excessive-agency.ts +221 -0
- package/src/__tests__/benchmark/fixtures/layer2/index.ts +18 -0
- package/src/__tests__/benchmark/fixtures/layer2/model-supply-chain.ts +204 -0
- package/src/__tests__/benchmark/fixtures/layer2/phase1-enhancements.ts +157 -0
- package/src/__tests__/snapshots/__snapshots__/anthropic-validation-refactor.test.ts.snap +758 -0
- package/src/__tests__/snapshots/__snapshots__/dangerous-functions-refactor.test.ts.snap +503 -0
- package/src/__tests__/snapshots/anthropic-validation-refactor.test.ts +321 -0
- package/src/__tests__/snapshots/dangerous-functions-refactor.test.ts +439 -0
- package/src/baseline/__tests__/diff.test.ts +261 -0
- package/src/baseline/__tests__/manager.test.ts +225 -0
- package/src/baseline/diff.ts +135 -0
- package/src/baseline/index.ts +29 -0
- package/src/baseline/manager.ts +230 -0
- package/src/baseline/types.ts +97 -0
- package/src/formatters/cli-terminal.ts +444 -41
- package/src/formatters/github-comment.ts +79 -11
- package/src/formatters/index.ts +4 -0
- package/src/index.ts +197 -14
- package/src/layer1/config-audit.ts +24 -3
- package/src/layer1/config-mcp-audit.ts +276 -0
- package/src/layer1/index.ts +16 -6
- package/src/layer2/ai-agent-tools.ts +336 -0
- package/src/layer2/ai-endpoint-protection.ts +16 -3
- package/src/layer2/ai-execution-sinks.ts +516 -12
- package/src/layer2/ai-fingerprinting.ts +5 -1
- package/src/layer2/ai-mcp-security.ts +730 -0
- package/src/layer2/ai-package-hallucination.ts +791 -0
- package/src/layer2/ai-prompt-hygiene.ts +547 -9
- package/src/layer2/ai-rag-safety.ts +382 -3
- package/src/layer2/auth-antipatterns.ts +5 -0
- package/src/layer2/byok-patterns.ts +5 -1
- package/src/layer2/dangerous-functions/child-process.ts +98 -0
- package/src/layer2/dangerous-functions/dom-xss.ts +220 -0
- package/src/layer2/dangerous-functions/index.ts +949 -0
- package/src/layer2/dangerous-functions/json-parse.ts +385 -0
- package/src/layer2/dangerous-functions/math-random.ts +537 -0
- package/src/layer2/dangerous-functions/patterns.ts +174 -0
- package/src/layer2/dangerous-functions/request-validation.ts +145 -0
- package/src/layer2/dangerous-functions/utils/control-flow.ts +162 -0
- package/src/layer2/dangerous-functions/utils/helpers.ts +170 -0
- package/src/layer2/dangerous-functions/utils/index.ts +25 -0
- package/src/layer2/dangerous-functions/utils/schema-validation.ts +91 -0
- package/src/layer2/data-exposure.ts +5 -1
- package/src/layer2/framework-checks.ts +5 -0
- package/src/layer2/index.ts +63 -1
- package/src/layer2/logic-gates.ts +5 -0
- package/src/layer2/model-supply-chain.ts +456 -0
- package/src/layer2/risky-imports.ts +5 -0
- package/src/layer2/variables.ts +5 -0
- package/src/layer3/__tests__/osv-check.test.ts +384 -0
- package/src/layer3/anthropic/auto-dismiss.ts +212 -0
- package/src/layer3/anthropic/clients.ts +84 -0
- package/src/layer3/anthropic/index.ts +170 -0
- package/src/layer3/anthropic/prompts/index.ts +14 -0
- package/src/layer3/anthropic/prompts/semantic-analysis.ts +173 -0
- package/src/layer3/anthropic/prompts/validation.ts +419 -0
- package/src/layer3/anthropic/providers/anthropic.ts +310 -0
- package/src/layer3/anthropic/providers/index.ts +8 -0
- package/src/layer3/anthropic/providers/openai.ts +384 -0
- package/src/layer3/anthropic/request-builder.ts +150 -0
- package/src/layer3/anthropic/types.ts +148 -0
- package/src/layer3/anthropic/utils/index.ts +26 -0
- package/src/layer3/anthropic/utils/path-helpers.ts +68 -0
- package/src/layer3/anthropic/utils/response-parser.ts +322 -0
- package/src/layer3/anthropic/utils/retry.ts +75 -0
- package/src/layer3/index.ts +18 -5
- package/src/layer3/osv-check.ts +420 -0
- package/src/rules/__tests__/framework-fixes.test.ts +689 -0
- package/src/rules/__tests__/metadata.test.ts +218 -0
- package/src/rules/framework-fixes.ts +470 -0
- package/src/rules/index.ts +21 -0
- package/src/rules/metadata.ts +831 -0
- package/src/suppression/__tests__/config-loader.test.ts +382 -0
- package/src/suppression/__tests__/hash.test.ts +166 -0
- package/src/suppression/__tests__/inline-parser.test.ts +212 -0
- package/src/suppression/__tests__/manager.test.ts +415 -0
- package/src/suppression/config-loader.ts +462 -0
- package/src/suppression/hash.ts +95 -0
- package/src/suppression/index.ts +51 -0
- package/src/suppression/inline-parser.ts +273 -0
- package/src/suppression/manager.ts +379 -0
- package/src/suppression/types.ts +174 -0
- package/src/tiers.ts +36 -0
- package/src/types.ts +90 -0
- package/src/utils/context-helpers.ts +13 -9
- package/dist/layer2/dangerous-functions.d.ts +0 -7
- package/dist/layer2/dangerous-functions.d.ts.map +0 -1
- package/dist/layer2/dangerous-functions.js +0 -1701
- package/dist/layer2/dangerous-functions.js.map +0 -1
- package/dist/layer3/anthropic.d.ts +0 -87
- package/dist/layer3/anthropic.d.ts.map +0 -1
- package/dist/layer3/anthropic.js +0 -1948
- package/dist/layer3/anthropic.js.map +0 -1
- package/dist/layer3/openai.d.ts +0 -25
- package/dist/layer3/openai.d.ts.map +0 -1
- package/dist/layer3/openai.js +0 -238
- package/dist/layer3/openai.js.map +0 -1
- package/src/layer2/dangerous-functions.ts +0 -1940
- package/src/layer3/anthropic.ts +0 -2257
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline Diff Computation
|
|
3
|
+
* Computes the difference between current findings and a baseline
|
|
4
|
+
*/
|
|
5
|
+
import type { Vulnerability } from '../types';
|
|
6
|
+
import type { BaselineData, DiffResult } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Compute the diff between current scan findings and a baseline
|
|
9
|
+
*
|
|
10
|
+
* Uses finding hashes for comparison, which are computed from:
|
|
11
|
+
* - Normalized file path
|
|
12
|
+
* - Normalized line content
|
|
13
|
+
* - Category
|
|
14
|
+
*
|
|
15
|
+
* This means findings are considered the same even if:
|
|
16
|
+
* - Line numbers changed (code moved)
|
|
17
|
+
* - Minor whitespace changes occurred
|
|
18
|
+
*
|
|
19
|
+
* @param currentFindings - Vulnerabilities from the current scan
|
|
20
|
+
* @param baseline - The baseline to compare against
|
|
21
|
+
* @returns DiffResult with new, fixed, and existing findings
|
|
22
|
+
*/
|
|
23
|
+
export declare function computeDiff(currentFindings: Vulnerability[], baseline: BaselineData): DiffResult;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a diff has any new blocking issues (critical or high severity)
|
|
26
|
+
*/
|
|
27
|
+
export declare function hasNewBlockingIssues(diff: DiffResult): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Format a summary string for the diff
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatDiffSummary(diff: DiffResult): string;
|
|
32
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/baseline/diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyC,MAAM,UAAU,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAmB,UAAU,EAAE,MAAM,SAAS,CAAA;AAkCxE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,eAAe,EAAE,aAAa,EAAE,EAChC,QAAQ,EAAE,YAAY,GACrB,UAAU,CAiDZ;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAc1D"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Baseline Diff Computation
|
|
4
|
+
* Computes the difference between current findings and a baseline
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.computeDiff = computeDiff;
|
|
8
|
+
exports.hasNewBlockingIssues = hasNewBlockingIssues;
|
|
9
|
+
exports.formatDiffSummary = formatDiffSummary;
|
|
10
|
+
const hash_1 = require("../suppression/hash");
|
|
11
|
+
/**
|
|
12
|
+
* Compute severity counts from baseline findings
|
|
13
|
+
*/
|
|
14
|
+
function computeBaselineSeverityCounts(findings) {
|
|
15
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
|
|
16
|
+
for (const finding of findings) {
|
|
17
|
+
const severity = finding.severity;
|
|
18
|
+
if (severity in counts) {
|
|
19
|
+
counts[severity]++;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return counts;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Compute severity counts from vulnerabilities
|
|
26
|
+
*/
|
|
27
|
+
function computeVulnerabilitySeverityCounts(vulnerabilities) {
|
|
28
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
|
|
29
|
+
for (const vuln of vulnerabilities) {
|
|
30
|
+
if (vuln.severity in counts) {
|
|
31
|
+
counts[vuln.severity]++;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return counts;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Compute the diff between current scan findings and a baseline
|
|
38
|
+
*
|
|
39
|
+
* Uses finding hashes for comparison, which are computed from:
|
|
40
|
+
* - Normalized file path
|
|
41
|
+
* - Normalized line content
|
|
42
|
+
* - Category
|
|
43
|
+
*
|
|
44
|
+
* This means findings are considered the same even if:
|
|
45
|
+
* - Line numbers changed (code moved)
|
|
46
|
+
* - Minor whitespace changes occurred
|
|
47
|
+
*
|
|
48
|
+
* @param currentFindings - Vulnerabilities from the current scan
|
|
49
|
+
* @param baseline - The baseline to compare against
|
|
50
|
+
* @returns DiffResult with new, fixed, and existing findings
|
|
51
|
+
*/
|
|
52
|
+
function computeDiff(currentFindings, baseline) {
|
|
53
|
+
// Build hash set from baseline for O(1) lookup
|
|
54
|
+
const baselineHashes = new Set(baseline.findings.map(f => f.hash));
|
|
55
|
+
// Build hash map from current findings
|
|
56
|
+
const currentHashMap = new Map();
|
|
57
|
+
for (const finding of currentFindings) {
|
|
58
|
+
const hash = (0, hash_1.computeFindingHash)(finding);
|
|
59
|
+
currentHashMap.set(hash, finding);
|
|
60
|
+
}
|
|
61
|
+
// Compute new findings (in current, not in baseline)
|
|
62
|
+
const newFindings = [];
|
|
63
|
+
for (const finding of currentFindings) {
|
|
64
|
+
const hash = (0, hash_1.computeFindingHash)(finding);
|
|
65
|
+
if (!baselineHashes.has(hash)) {
|
|
66
|
+
newFindings.push(finding);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Compute fixed findings (in baseline, not in current)
|
|
70
|
+
const fixedFindings = [];
|
|
71
|
+
for (const baselineFinding of baseline.findings) {
|
|
72
|
+
if (!currentHashMap.has(baselineFinding.hash)) {
|
|
73
|
+
fixedFindings.push(baselineFinding);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Compute existing findings (in both)
|
|
77
|
+
const existingFindings = [];
|
|
78
|
+
for (const finding of currentFindings) {
|
|
79
|
+
const hash = (0, hash_1.computeFindingHash)(finding);
|
|
80
|
+
if (baselineHashes.has(hash)) {
|
|
81
|
+
existingFindings.push(finding);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
new: newFindings,
|
|
86
|
+
fixed: fixedFindings,
|
|
87
|
+
existing: existingFindings,
|
|
88
|
+
stats: {
|
|
89
|
+
newCount: newFindings.length,
|
|
90
|
+
fixedCount: fixedFindings.length,
|
|
91
|
+
existingCount: existingFindings.length,
|
|
92
|
+
newBySeverity: computeVulnerabilitySeverityCounts(newFindings),
|
|
93
|
+
fixedBySeverity: computeBaselineSeverityCounts(fixedFindings),
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if a diff has any new blocking issues (critical or high severity)
|
|
99
|
+
*/
|
|
100
|
+
function hasNewBlockingIssues(diff) {
|
|
101
|
+
return diff.stats.newBySeverity.critical > 0 || diff.stats.newBySeverity.high > 0;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Format a summary string for the diff
|
|
105
|
+
*/
|
|
106
|
+
function formatDiffSummary(diff) {
|
|
107
|
+
const parts = [];
|
|
108
|
+
if (diff.stats.newCount > 0) {
|
|
109
|
+
parts.push(`${diff.stats.newCount} new`);
|
|
110
|
+
}
|
|
111
|
+
if (diff.stats.fixedCount > 0) {
|
|
112
|
+
parts.push(`${diff.stats.fixedCount} fixed`);
|
|
113
|
+
}
|
|
114
|
+
if (diff.stats.existingCount > 0) {
|
|
115
|
+
parts.push(`${diff.stats.existingCount} existing`);
|
|
116
|
+
}
|
|
117
|
+
return parts.join(', ');
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/baseline/diff.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAqDH,kCAoDC;AAKD,oDAEC;AAKD,8CAcC;AA/HD,8CAAwD;AAExD;;GAEG;AACH,SAAS,6BAA6B,CAAC,QAA2B;IAChE,MAAM,MAAM,GAAmB,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;IAEnF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAiC,CAAA;QAC1D,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,SAAS,kCAAkC,CAAC,eAAgC;IAC1E,MAAM,MAAM,GAAmB,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;IAEnF,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,WAAW,CACzB,eAAgC,EAChC,QAAsB;IAEtB,+CAA+C;IAC/C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAElE,uCAAuC;IACvC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAA;IACvD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAA,yBAAkB,EAAC,OAAO,CAAC,CAAA;QACxC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC;IAED,qDAAqD;IACrD,MAAM,WAAW,GAAoB,EAAE,CAAA;IACvC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAA,yBAAkB,EAAC,OAAO,CAAC,CAAA;QACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,MAAM,aAAa,GAAsB,EAAE,CAAA;IAC3C,KAAK,MAAM,eAAe,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAChD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,gBAAgB,GAAoB,EAAE,CAAA;IAC5C,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAA,yBAAkB,EAAC,OAAO,CAAC,CAAA;QACxC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,gBAAgB;QAC1B,KAAK,EAAE;YACL,QAAQ,EAAE,WAAW,CAAC,MAAM;YAC5B,UAAU,EAAE,aAAa,CAAC,MAAM;YAChC,aAAa,EAAE,gBAAgB,CAAC,MAAM;YACtC,aAAa,EAAE,kCAAkC,CAAC,WAAW,CAAC;YAC9D,eAAe,EAAE,6BAA6B,CAAC,aAAa,CAAC;SAC9D;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,IAAgB;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAA;AACnF,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,IAAgB;IAChD,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,CAAA;IAC1C,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,CAAA;IAC9C,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,WAAW,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline Module
|
|
3
|
+
* Provides baseline/diff mode functionality for tracking security improvements
|
|
4
|
+
*/
|
|
5
|
+
export type { BaselineFinding, BaselineData, DiffResult, BaselineDiff, } from './types';
|
|
6
|
+
export { BASELINE_FILE_PATH, OCULUM_DIR } from './types';
|
|
7
|
+
export { BaselineManager, type BaselineManagerOptions, type LoadBaselineResult, type SaveBaselineResult, type ClearBaselineResult, } from './manager';
|
|
8
|
+
export { computeDiff, hasNewBlockingIssues, formatDiffSummary, } from './diff';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,YAAY,GACb,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGxD,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,QAAQ,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Baseline Module
|
|
4
|
+
* Provides baseline/diff mode functionality for tracking security improvements
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.formatDiffSummary = exports.hasNewBlockingIssues = exports.computeDiff = exports.BaselineManager = exports.OCULUM_DIR = exports.BASELINE_FILE_PATH = void 0;
|
|
8
|
+
var types_1 = require("./types");
|
|
9
|
+
Object.defineProperty(exports, "BASELINE_FILE_PATH", { enumerable: true, get: function () { return types_1.BASELINE_FILE_PATH; } });
|
|
10
|
+
Object.defineProperty(exports, "OCULUM_DIR", { enumerable: true, get: function () { return types_1.OCULUM_DIR; } });
|
|
11
|
+
// Manager
|
|
12
|
+
var manager_1 = require("./manager");
|
|
13
|
+
Object.defineProperty(exports, "BaselineManager", { enumerable: true, get: function () { return manager_1.BaselineManager; } });
|
|
14
|
+
// Diff computation
|
|
15
|
+
var diff_1 = require("./diff");
|
|
16
|
+
Object.defineProperty(exports, "computeDiff", { enumerable: true, get: function () { return diff_1.computeDiff; } });
|
|
17
|
+
Object.defineProperty(exports, "hasNewBlockingIssues", { enumerable: true, get: function () { return diff_1.hasNewBlockingIssues; } });
|
|
18
|
+
Object.defineProperty(exports, "formatDiffSummary", { enumerable: true, get: function () { return diff_1.formatDiffSummary; } });
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AASH,iCAAwD;AAA/C,2GAAA,kBAAkB,OAAA;AAAE,mGAAA,UAAU,OAAA;AAEvC,UAAU;AACV,qCAMkB;AALhB,0GAAA,eAAe,OAAA;AAOjB,mBAAmB;AACnB,+BAIe;AAHb,mGAAA,WAAW,OAAA;AACX,4GAAA,oBAAoB,OAAA;AACpB,yGAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline Manager
|
|
3
|
+
* Handles loading, saving, and clearing baseline files
|
|
4
|
+
*/
|
|
5
|
+
import type { ScanResult, ScanDepth } from '../types';
|
|
6
|
+
import type { BaselineData } from './types';
|
|
7
|
+
export interface BaselineManagerOptions {
|
|
8
|
+
/** Project root path */
|
|
9
|
+
projectPath: string;
|
|
10
|
+
}
|
|
11
|
+
export interface LoadBaselineResult {
|
|
12
|
+
/** Whether a baseline was found */
|
|
13
|
+
found: boolean;
|
|
14
|
+
/** The baseline data (if found) */
|
|
15
|
+
baseline?: BaselineData;
|
|
16
|
+
/** Error message (if failed to load) */
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SaveBaselineResult {
|
|
20
|
+
/** Whether the save was successful */
|
|
21
|
+
success: boolean;
|
|
22
|
+
/** Path where baseline was saved */
|
|
23
|
+
path: string;
|
|
24
|
+
/** Error message (if failed) */
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ClearBaselineResult {
|
|
28
|
+
/** Whether the clear was successful */
|
|
29
|
+
success: boolean;
|
|
30
|
+
/** Whether a baseline existed before clearing */
|
|
31
|
+
existed: boolean;
|
|
32
|
+
/** Error message (if failed) */
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Manages baseline files for diff mode
|
|
37
|
+
*/
|
|
38
|
+
export declare class BaselineManager {
|
|
39
|
+
private projectPath;
|
|
40
|
+
private baselinePath;
|
|
41
|
+
constructor(options: BaselineManagerOptions | string);
|
|
42
|
+
/**
|
|
43
|
+
* Get the full path to the baseline file
|
|
44
|
+
*/
|
|
45
|
+
getBaselinePath(): string;
|
|
46
|
+
/**
|
|
47
|
+
* Load baseline from .oculum/baseline.json
|
|
48
|
+
*/
|
|
49
|
+
loadBaseline(): LoadBaselineResult;
|
|
50
|
+
/**
|
|
51
|
+
* Save current scan result as baseline
|
|
52
|
+
*/
|
|
53
|
+
saveBaseline(scanResult: ScanResult, options?: {
|
|
54
|
+
commit?: string;
|
|
55
|
+
branch?: string;
|
|
56
|
+
scanDepth?: ScanDepth;
|
|
57
|
+
}): SaveBaselineResult;
|
|
58
|
+
/**
|
|
59
|
+
* Clear (delete) the baseline file
|
|
60
|
+
*/
|
|
61
|
+
clearBaseline(): ClearBaselineResult;
|
|
62
|
+
/**
|
|
63
|
+
* Check if a baseline exists
|
|
64
|
+
*/
|
|
65
|
+
hasBaseline(): boolean;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/baseline/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAiB,MAAM,UAAU,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,SAAS,CAAA;AAI5D,MAAM,WAAW,sBAAsB;IACrC,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,KAAK,EAAE,OAAO,CAAA;IACd,mCAAmC;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAA;IAChB,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAA;IAChB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA8CD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAQ;gBAEhB,OAAO,EAAE,sBAAsB,GAAG,MAAM;IAUpD;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,YAAY,IAAI,kBAAkB;IAiClC;;OAEG;IACH,YAAY,CACV,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,GACpE,kBAAkB;IA8CrB;;OAEG;IACH,aAAa,IAAI,mBAAmB;IAmBpC;;OAEG;IACH,WAAW,IAAI,OAAO;CAGvB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Baseline Manager
|
|
4
|
+
* Handles loading, saving, and clearing baseline files
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.BaselineManager = void 0;
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const types_1 = require("./types");
|
|
12
|
+
const hash_1 = require("../suppression/hash");
|
|
13
|
+
/**
|
|
14
|
+
* Get current git commit SHA (short form)
|
|
15
|
+
*/
|
|
16
|
+
function getGitCommit(projectPath) {
|
|
17
|
+
try {
|
|
18
|
+
const result = (0, child_process_1.execFileSync)('git', ['rev-parse', '--short', 'HEAD'], {
|
|
19
|
+
cwd: projectPath,
|
|
20
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
21
|
+
});
|
|
22
|
+
return result.toString().trim();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get current git branch name
|
|
30
|
+
*/
|
|
31
|
+
function getGitBranch(projectPath) {
|
|
32
|
+
try {
|
|
33
|
+
const result = (0, child_process_1.execFileSync)('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
|
|
34
|
+
cwd: projectPath,
|
|
35
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
36
|
+
});
|
|
37
|
+
return result.toString().trim();
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Convert a Vulnerability to a BaselineFinding
|
|
45
|
+
*/
|
|
46
|
+
function toBaselineFinding(vuln) {
|
|
47
|
+
return {
|
|
48
|
+
hash: (0, hash_1.computeFindingHash)(vuln),
|
|
49
|
+
filePath: vuln.filePath,
|
|
50
|
+
lineNumber: vuln.lineNumber,
|
|
51
|
+
category: vuln.category,
|
|
52
|
+
severity: vuln.severity,
|
|
53
|
+
title: vuln.title,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Manages baseline files for diff mode
|
|
58
|
+
*/
|
|
59
|
+
class BaselineManager {
|
|
60
|
+
constructor(options) {
|
|
61
|
+
// Support both old string arg and new options object
|
|
62
|
+
if (typeof options === 'string') {
|
|
63
|
+
this.projectPath = options;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.projectPath = options.projectPath;
|
|
67
|
+
}
|
|
68
|
+
this.baselinePath = (0, path_1.join)(this.projectPath, types_1.BASELINE_FILE_PATH);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the full path to the baseline file
|
|
72
|
+
*/
|
|
73
|
+
getBaselinePath() {
|
|
74
|
+
return this.baselinePath;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Load baseline from .oculum/baseline.json
|
|
78
|
+
*/
|
|
79
|
+
loadBaseline() {
|
|
80
|
+
if (!(0, fs_1.existsSync)(this.baselinePath)) {
|
|
81
|
+
return { found: false };
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const content = (0, fs_1.readFileSync)(this.baselinePath, 'utf-8');
|
|
85
|
+
const baseline = JSON.parse(content);
|
|
86
|
+
// Basic validation
|
|
87
|
+
if (baseline.version !== 1) {
|
|
88
|
+
return {
|
|
89
|
+
found: false,
|
|
90
|
+
error: `Unsupported baseline version: ${baseline.version}. Expected version 1.`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (!Array.isArray(baseline.findings)) {
|
|
94
|
+
return {
|
|
95
|
+
found: false,
|
|
96
|
+
error: 'Invalid baseline: missing findings array',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { found: true, baseline };
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
return {
|
|
103
|
+
found: false,
|
|
104
|
+
error: `Failed to parse baseline: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Save current scan result as baseline
|
|
110
|
+
*/
|
|
111
|
+
saveBaseline(scanResult, options) {
|
|
112
|
+
try {
|
|
113
|
+
// Ensure .oculum directory exists
|
|
114
|
+
const oculumDir = (0, path_1.join)(this.projectPath, types_1.OCULUM_DIR);
|
|
115
|
+
if (!(0, fs_1.existsSync)(oculumDir)) {
|
|
116
|
+
(0, fs_1.mkdirSync)(oculumDir, { recursive: true });
|
|
117
|
+
}
|
|
118
|
+
// Get git info if not provided
|
|
119
|
+
const commit = options?.commit ?? getGitCommit(this.projectPath);
|
|
120
|
+
const branch = options?.branch ?? getGitBranch(this.projectPath);
|
|
121
|
+
// Convert vulnerabilities to baseline findings
|
|
122
|
+
const findings = scanResult.vulnerabilities.map(toBaselineFinding);
|
|
123
|
+
// Build baseline data
|
|
124
|
+
const baseline = {
|
|
125
|
+
version: 1,
|
|
126
|
+
createdAt: new Date().toISOString(),
|
|
127
|
+
commit,
|
|
128
|
+
branch,
|
|
129
|
+
scanDepth: options?.scanDepth,
|
|
130
|
+
findings,
|
|
131
|
+
stats: {
|
|
132
|
+
total: findings.length,
|
|
133
|
+
critical: scanResult.severityCounts.critical,
|
|
134
|
+
high: scanResult.severityCounts.high,
|
|
135
|
+
medium: scanResult.severityCounts.medium,
|
|
136
|
+
low: scanResult.severityCounts.low,
|
|
137
|
+
info: scanResult.severityCounts.info,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
// Write to file
|
|
141
|
+
(0, fs_1.writeFileSync)(this.baselinePath, JSON.stringify(baseline, null, 2));
|
|
142
|
+
return { success: true, path: this.baselinePath };
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
return {
|
|
146
|
+
success: false,
|
|
147
|
+
path: this.baselinePath,
|
|
148
|
+
error: `Failed to save baseline: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Clear (delete) the baseline file
|
|
154
|
+
*/
|
|
155
|
+
clearBaseline() {
|
|
156
|
+
const existed = (0, fs_1.existsSync)(this.baselinePath);
|
|
157
|
+
if (!existed) {
|
|
158
|
+
return { success: true, existed: false };
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
(0, fs_1.unlinkSync)(this.baselinePath);
|
|
162
|
+
return { success: true, existed: true };
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
return {
|
|
166
|
+
success: false,
|
|
167
|
+
existed: true,
|
|
168
|
+
error: `Failed to clear baseline: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Check if a baseline exists
|
|
174
|
+
*/
|
|
175
|
+
hasBaseline() {
|
|
176
|
+
return (0, fs_1.existsSync)(this.baselinePath);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.BaselineManager = BaselineManager;
|
|
180
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/baseline/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline Types
|
|
3
|
+
* Types for baseline/diff mode functionality
|
|
4
|
+
*/
|
|
5
|
+
import type { VulnerabilityCategory, VulnerabilitySeverity, SeverityCounts, ScanDepth } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* A finding stored in the baseline
|
|
8
|
+
* Contains enough information to identify and display the finding
|
|
9
|
+
*/
|
|
10
|
+
export interface BaselineFinding {
|
|
11
|
+
/** Finding hash (from computeFindingHash) */
|
|
12
|
+
hash: string;
|
|
13
|
+
/** File path relative to project root */
|
|
14
|
+
filePath: string;
|
|
15
|
+
/** Line number in the file */
|
|
16
|
+
lineNumber: number;
|
|
17
|
+
/** Vulnerability category */
|
|
18
|
+
category: VulnerabilityCategory;
|
|
19
|
+
/** Severity level */
|
|
20
|
+
severity: VulnerabilitySeverity;
|
|
21
|
+
/** Finding title */
|
|
22
|
+
title: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Baseline data stored in .oculum/baseline.json
|
|
26
|
+
*/
|
|
27
|
+
export interface BaselineData {
|
|
28
|
+
/** Schema version for forward compatibility */
|
|
29
|
+
version: 1;
|
|
30
|
+
/** ISO 8601 timestamp when baseline was created */
|
|
31
|
+
createdAt: string;
|
|
32
|
+
/** Git commit SHA when baseline was created (optional) */
|
|
33
|
+
commit?: string;
|
|
34
|
+
/** Git branch name when baseline was created (optional) */
|
|
35
|
+
branch?: string;
|
|
36
|
+
/** Scan depth used when creating baseline */
|
|
37
|
+
scanDepth?: ScanDepth;
|
|
38
|
+
/** List of findings in the baseline */
|
|
39
|
+
findings: BaselineFinding[];
|
|
40
|
+
/** Summary statistics */
|
|
41
|
+
stats: {
|
|
42
|
+
total: number;
|
|
43
|
+
critical: number;
|
|
44
|
+
high: number;
|
|
45
|
+
medium: number;
|
|
46
|
+
low: number;
|
|
47
|
+
info: number;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Result of comparing current findings against baseline
|
|
52
|
+
*/
|
|
53
|
+
export interface DiffResult {
|
|
54
|
+
/** Findings in current scan but NOT in baseline (new issues) */
|
|
55
|
+
new: import('../types').Vulnerability[];
|
|
56
|
+
/** Findings in baseline but NOT in current scan (fixed issues) */
|
|
57
|
+
fixed: BaselineFinding[];
|
|
58
|
+
/** Findings in both current scan AND baseline (existing issues) */
|
|
59
|
+
existing: import('../types').Vulnerability[];
|
|
60
|
+
/** Summary statistics */
|
|
61
|
+
stats: {
|
|
62
|
+
newCount: number;
|
|
63
|
+
fixedCount: number;
|
|
64
|
+
existingCount: number;
|
|
65
|
+
newBySeverity: SeverityCounts;
|
|
66
|
+
fixedBySeverity: SeverityCounts;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Baseline diff metadata attached to ScanResult
|
|
71
|
+
* Only present when --new flag is used
|
|
72
|
+
*/
|
|
73
|
+
export interface BaselineDiff {
|
|
74
|
+
/** When the baseline was created */
|
|
75
|
+
baselineCreatedAt: string;
|
|
76
|
+
/** Git commit of the baseline (if available) */
|
|
77
|
+
baselineCommit?: string;
|
|
78
|
+
/** Number of new findings (not in baseline) */
|
|
79
|
+
newCount: number;
|
|
80
|
+
/** Number of fixed findings (in baseline, not in current) */
|
|
81
|
+
fixedCount: number;
|
|
82
|
+
/** Number of existing findings (in both) */
|
|
83
|
+
existingCount: number;
|
|
84
|
+
/** Details of fixed findings for display */
|
|
85
|
+
fixedFindings: BaselineFinding[];
|
|
86
|
+
}
|
|
87
|
+
/** Default baseline file path relative to project root */
|
|
88
|
+
export declare const BASELINE_FILE_PATH = ".oculum/baseline.json";
|
|
89
|
+
/** Directory for oculum files */
|
|
90
|
+
export declare const OCULUM_DIR = ".oculum";
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/baseline/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEvG;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,qBAAqB;IACrB,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,OAAO,EAAE,CAAC,CAAA;IACV,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6CAA6C;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,uCAAuC;IACvC,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,yBAAyB;IACzB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,GAAG,EAAE,OAAO,UAAU,EAAE,aAAa,EAAE,CAAA;IACvC,kEAAkE;IAClE,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,mEAAmE;IACnE,QAAQ,EAAE,OAAO,UAAU,EAAE,aAAa,EAAE,CAAA;IAC5C,yBAAyB;IACzB,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;QACrB,aAAa,EAAE,cAAc,CAAA;QAC7B,eAAe,EAAE,cAAc,CAAA;KAChC,CAAA;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,CAAA;IACzB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAA;IAClB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB,4CAA4C;IAC5C,aAAa,EAAE,eAAe,EAAE,CAAA;CACjC;AAED,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,0BAA0B,CAAA;AAEzD,iCAAiC;AACjC,eAAO,MAAM,UAAU,YAAY,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Baseline Types
|
|
4
|
+
* Types for baseline/diff mode functionality
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.OCULUM_DIR = exports.BASELINE_FILE_PATH = void 0;
|
|
8
|
+
/** Default baseline file path relative to project root */
|
|
9
|
+
exports.BASELINE_FILE_PATH = '.oculum/baseline.json';
|
|
10
|
+
/** Directory for oculum files */
|
|
11
|
+
exports.OCULUM_DIR = '.oculum';
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/baseline/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAyFH,0DAA0D;AAC7C,QAAA,kBAAkB,GAAG,uBAAuB,CAAA;AAEzD,iCAAiC;AACpB,QAAA,UAAU,GAAG,SAAS,CAAA"}
|
|
@@ -10,6 +10,44 @@ export declare function formatTerminalOutput(result: ScanResult, options?: {
|
|
|
10
10
|
maxFindingsPerGroup?: number;
|
|
11
11
|
showAllFindings?: boolean;
|
|
12
12
|
noColor?: boolean;
|
|
13
|
+
compact?: boolean;
|
|
14
|
+
verbose?: boolean;
|
|
15
|
+
}): string;
|
|
16
|
+
/**
|
|
17
|
+
* Compact summary options
|
|
18
|
+
*/
|
|
19
|
+
export interface CompactSummaryOptions {
|
|
20
|
+
/** Number findings for reference with show command */
|
|
21
|
+
showNumbers?: boolean;
|
|
22
|
+
/** Limit shown per severity (default: 5) */
|
|
23
|
+
maxPerSeverity?: number;
|
|
24
|
+
/** Show "Run oculum show..." hint */
|
|
25
|
+
showHint?: boolean;
|
|
26
|
+
/** Disable colors */
|
|
27
|
+
noColor?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Format compact summary grouped by severity
|
|
31
|
+
* Output format:
|
|
32
|
+
* HIGH (2)
|
|
33
|
+
* 1. SQL injection in src/api/users.ts:42
|
|
34
|
+
* 2. Missing auth in src/api/admin.ts:15
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatCompactSummary(vulnerabilities: Vulnerability[], options?: CompactSummaryOptions): string;
|
|
37
|
+
/**
|
|
38
|
+
* Format a numbered finding list for the show command
|
|
39
|
+
* Returns findings with their numbers for reference
|
|
40
|
+
*/
|
|
41
|
+
export declare function getNumberedFindings(vulnerabilities: Vulnerability[]): Array<{
|
|
42
|
+
number: number;
|
|
43
|
+
finding: Vulnerability;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* Format a single finding detail view for the show command
|
|
47
|
+
*/
|
|
48
|
+
export declare function formatFindingDetail(finding: Vulnerability, number: number, options?: {
|
|
49
|
+
verbose?: boolean;
|
|
50
|
+
noColor?: boolean;
|
|
13
51
|
}): string;
|
|
14
52
|
/**
|
|
15
53
|
* Format as simple list (no grouping, no colors)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-terminal.d.ts","sourceRoot":"","sources":["../../src/formatters/cli-terminal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"cli-terminal.d.ts","sourceRoot":"","sources":["../../src/formatters/cli-terminal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;AA4MhF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE;IAChE,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;CACb,GAAG,MAAM,CA2Hd;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,aAAa,EAAE,EAChC,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAsFR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CAKvH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GACrD,MAAM,CAoFR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG,MAAM,CASzE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,OAAe,GAAG,MAAM,CAK9E;AAkGD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAwFtD"}
|