vaspera 2.5.0
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/CHANGELOG.md +184 -0
- package/LICENSE +21 -0
- package/README.md +809 -0
- package/dist/__tests__/integration/certification-flow.test.d.ts +5 -0
- package/dist/__tests__/integration/certification-flow.test.d.ts.map +1 -0
- package/dist/__tests__/integration/certification-flow.test.js +245 -0
- package/dist/__tests__/integration/certification-flow.test.js.map +1 -0
- package/dist/__tests__/integration/commands.test.d.ts +5 -0
- package/dist/__tests__/integration/commands.test.d.ts.map +1 -0
- package/dist/__tests__/integration/commands.test.js +93 -0
- package/dist/__tests__/integration/commands.test.js.map +1 -0
- package/dist/action/diff-mode.d.ts +34 -0
- package/dist/action/diff-mode.d.ts.map +1 -0
- package/dist/action/diff-mode.js +201 -0
- package/dist/action/diff-mode.js.map +1 -0
- package/dist/action/diff-mode.test.d.ts +5 -0
- package/dist/action/diff-mode.test.d.ts.map +1 -0
- package/dist/action/diff-mode.test.js +162 -0
- package/dist/action/diff-mode.test.js.map +1 -0
- package/dist/action/index.d.ts +10 -0
- package/dist/action/index.d.ts.map +1 -0
- package/dist/action/index.js +231 -0
- package/dist/action/index.js.map +1 -0
- package/dist/action/pr-comment.d.ts +30 -0
- package/dist/action/pr-comment.d.ts.map +1 -0
- package/dist/action/pr-comment.js +301 -0
- package/dist/action/pr-comment.js.map +1 -0
- package/dist/action/pr-comment.test.d.ts +5 -0
- package/dist/action/pr-comment.test.d.ts.map +1 -0
- package/dist/action/pr-comment.test.js +189 -0
- package/dist/action/pr-comment.test.js.map +1 -0
- package/dist/action/sarif-upload.d.ts +104 -0
- package/dist/action/sarif-upload.d.ts.map +1 -0
- package/dist/action/sarif-upload.js +188 -0
- package/dist/action/sarif-upload.js.map +1 -0
- package/dist/action/sarif-upload.test.d.ts +5 -0
- package/dist/action/sarif-upload.test.d.ts.map +1 -0
- package/dist/action/sarif-upload.test.js +206 -0
- package/dist/action/sarif-upload.test.js.map +1 -0
- package/dist/action/types.d.ts +104 -0
- package/dist/action/types.d.ts.map +1 -0
- package/dist/action/types.js +33 -0
- package/dist/action/types.js.map +1 -0
- package/dist/action/types.test.d.ts +5 -0
- package/dist/action/types.test.d.ts.map +1 -0
- package/dist/action/types.test.js +79 -0
- package/dist/action/types.test.js.map +1 -0
- package/dist/agents/agent-integrity.d.ts +111 -0
- package/dist/agents/agent-integrity.d.ts.map +1 -0
- package/dist/agents/agent-integrity.js +308 -0
- package/dist/agents/agent-integrity.js.map +1 -0
- package/dist/agents/agent-privacy.d.ts +68 -0
- package/dist/agents/agent-privacy.d.ts.map +1 -0
- package/dist/agents/agent-privacy.js +345 -0
- package/dist/agents/agent-privacy.js.map +1 -0
- package/dist/agents/exploit-chain.d.ts +64 -0
- package/dist/agents/exploit-chain.d.ts.map +1 -0
- package/dist/agents/exploit-chain.js +477 -0
- package/dist/agents/exploit-chain.js.map +1 -0
- package/dist/agents/exploit-chain.test.d.ts +5 -0
- package/dist/agents/exploit-chain.test.d.ts.map +1 -0
- package/dist/agents/exploit-chain.test.js +455 -0
- package/dist/agents/exploit-chain.test.js.map +1 -0
- package/dist/agents/index.d.ts +14 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +19 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/logic-flaw-detector.d.ts +55 -0
- package/dist/agents/logic-flaw-detector.d.ts.map +1 -0
- package/dist/agents/logic-flaw-detector.js +454 -0
- package/dist/agents/logic-flaw-detector.js.map +1 -0
- package/dist/agents/zero-day-hunter.d.ts +69 -0
- package/dist/agents/zero-day-hunter.d.ts.map +1 -0
- package/dist/agents/zero-day-hunter.js +591 -0
- package/dist/agents/zero-day-hunter.js.map +1 -0
- package/dist/certification/artifacts.d.ts +21 -0
- package/dist/certification/artifacts.d.ts.map +1 -0
- package/dist/certification/artifacts.js +275 -0
- package/dist/certification/artifacts.js.map +1 -0
- package/dist/certification/autofix.d.ts +122 -0
- package/dist/certification/autofix.d.ts.map +1 -0
- package/dist/certification/autofix.js +476 -0
- package/dist/certification/autofix.js.map +1 -0
- package/dist/certification/badge.d.ts +56 -0
- package/dist/certification/badge.d.ts.map +1 -0
- package/dist/certification/badge.js +155 -0
- package/dist/certification/badge.js.map +1 -0
- package/dist/certification/cache.d.ts +121 -0
- package/dist/certification/cache.d.ts.map +1 -0
- package/dist/certification/cache.js +275 -0
- package/dist/certification/cache.js.map +1 -0
- package/dist/certification/cache.test.d.ts +5 -0
- package/dist/certification/cache.test.d.ts.map +1 -0
- package/dist/certification/cache.test.js +270 -0
- package/dist/certification/cache.test.js.map +1 -0
- package/dist/certification/consensus.d.ts +105 -0
- package/dist/certification/consensus.d.ts.map +1 -0
- package/dist/certification/consensus.js +353 -0
- package/dist/certification/consensus.js.map +1 -0
- package/dist/certification/consensus.test.d.ts +5 -0
- package/dist/certification/consensus.test.d.ts.map +1 -0
- package/dist/certification/consensus.test.js +342 -0
- package/dist/certification/consensus.test.js.map +1 -0
- package/dist/certification/index.d.ts +14 -0
- package/dist/certification/index.d.ts.map +1 -0
- package/dist/certification/index.js +14 -0
- package/dist/certification/index.js.map +1 -0
- package/dist/certification/rules.d.ts +89 -0
- package/dist/certification/rules.d.ts.map +1 -0
- package/dist/certification/rules.js +317 -0
- package/dist/certification/rules.js.map +1 -0
- package/dist/certification/sarif.d.ts +107 -0
- package/dist/certification/sarif.d.ts.map +1 -0
- package/dist/certification/sarif.js +191 -0
- package/dist/certification/sarif.js.map +1 -0
- package/dist/certification/store.d.ts +255 -0
- package/dist/certification/store.d.ts.map +1 -0
- package/dist/certification/store.js +835 -0
- package/dist/certification/store.js.map +1 -0
- package/dist/certification/store.test.d.ts +5 -0
- package/dist/certification/store.test.d.ts.map +1 -0
- package/dist/certification/store.test.js +468 -0
- package/dist/certification/store.test.js.map +1 -0
- package/dist/certification/summary.d.ts +72 -0
- package/dist/certification/summary.d.ts.map +1 -0
- package/dist/certification/summary.js +296 -0
- package/dist/certification/summary.js.map +1 -0
- package/dist/certification/types.d.ts +138 -0
- package/dist/certification/types.d.ts.map +1 -0
- package/dist/certification/types.js +34 -0
- package/dist/certification/types.js.map +1 -0
- package/dist/commands/audits/api-check.d.ts +3 -0
- package/dist/commands/audits/api-check.d.ts.map +1 -0
- package/dist/commands/audits/api-check.js +71 -0
- package/dist/commands/audits/api-check.js.map +1 -0
- package/dist/commands/audits/deadcode.d.ts +3 -0
- package/dist/commands/audits/deadcode.d.ts.map +1 -0
- package/dist/commands/audits/deadcode.js +63 -0
- package/dist/commands/audits/deadcode.js.map +1 -0
- package/dist/commands/audits/deps.d.ts +3 -0
- package/dist/commands/audits/deps.d.ts.map +1 -0
- package/dist/commands/audits/deps.js +56 -0
- package/dist/commands/audits/deps.js.map +1 -0
- package/dist/commands/audits/errors.d.ts +3 -0
- package/dist/commands/audits/errors.d.ts.map +1 -0
- package/dist/commands/audits/errors.js +65 -0
- package/dist/commands/audits/errors.js.map +1 -0
- package/dist/commands/audits/index.d.ts +3 -0
- package/dist/commands/audits/index.d.ts.map +1 -0
- package/dist/commands/audits/index.js +15 -0
- package/dist/commands/audits/index.js.map +1 -0
- package/dist/commands/audits/perf.d.ts +3 -0
- package/dist/commands/audits/perf.d.ts.map +1 -0
- package/dist/commands/audits/perf.js +85 -0
- package/dist/commands/audits/perf.js.map +1 -0
- package/dist/commands/audits/secrets.d.ts +3 -0
- package/dist/commands/audits/secrets.d.ts.map +1 -0
- package/dist/commands/audits/secrets.js +71 -0
- package/dist/commands/audits/secrets.js.map +1 -0
- package/dist/commands/certification/certify.d.ts +3 -0
- package/dist/commands/certification/certify.d.ts.map +1 -0
- package/dist/commands/certification/certify.js +108 -0
- package/dist/commands/certification/certify.js.map +1 -0
- package/dist/commands/certification/index.d.ts +3 -0
- package/dist/commands/certification/index.d.ts.map +1 -0
- package/dist/commands/certification/index.js +17 -0
- package/dist/commands/certification/index.js.map +1 -0
- package/dist/commands/certification/performance.d.ts +3 -0
- package/dist/commands/certification/performance.d.ts.map +1 -0
- package/dist/commands/certification/performance.js +89 -0
- package/dist/commands/certification/performance.js.map +1 -0
- package/dist/commands/certification/quality.d.ts +3 -0
- package/dist/commands/certification/quality.d.ts.map +1 -0
- package/dist/commands/certification/quality.js +92 -0
- package/dist/commands/certification/quality.js.map +1 -0
- package/dist/commands/certification/redteam.d.ts +3 -0
- package/dist/commands/certification/redteam.d.ts.map +1 -0
- package/dist/commands/certification/redteam.js +114 -0
- package/dist/commands/certification/redteam.js.map +1 -0
- package/dist/commands/certification/reliability.d.ts +3 -0
- package/dist/commands/certification/reliability.d.ts.map +1 -0
- package/dist/commands/certification/reliability.js +93 -0
- package/dist/commands/certification/reliability.js.map +1 -0
- package/dist/commands/certification/security.d.ts +3 -0
- package/dist/commands/certification/security.d.ts.map +1 -0
- package/dist/commands/certification/security.js +90 -0
- package/dist/commands/certification/security.js.map +1 -0
- package/dist/commands/certification/typesafety.d.ts +3 -0
- package/dist/commands/certification/typesafety.d.ts.map +1 -0
- package/dist/commands/certification/typesafety.js +87 -0
- package/dist/commands/certification/typesafety.js.map +1 -0
- package/dist/commands/core/add-tests.d.ts +3 -0
- package/dist/commands/core/add-tests.d.ts.map +1 -0
- package/dist/commands/core/add-tests.js +29 -0
- package/dist/commands/core/add-tests.js.map +1 -0
- package/dist/commands/core/audit.d.ts +3 -0
- package/dist/commands/core/audit.d.ts.map +1 -0
- package/dist/commands/core/audit.js +64 -0
- package/dist/commands/core/audit.js.map +1 -0
- package/dist/commands/core/fix-critical.d.ts +3 -0
- package/dist/commands/core/fix-critical.d.ts.map +1 -0
- package/dist/commands/core/fix-critical.js +22 -0
- package/dist/commands/core/fix-critical.js.map +1 -0
- package/dist/commands/core/fix-high.d.ts +3 -0
- package/dist/commands/core/fix-high.d.ts.map +1 -0
- package/dist/commands/core/fix-high.js +32 -0
- package/dist/commands/core/fix-high.js.map +1 -0
- package/dist/commands/core/fix-medium.d.ts +3 -0
- package/dist/commands/core/fix-medium.d.ts.map +1 -0
- package/dist/commands/core/fix-medium.js +29 -0
- package/dist/commands/core/fix-medium.js.map +1 -0
- package/dist/commands/core/fix-rls.d.ts +3 -0
- package/dist/commands/core/fix-rls.d.ts.map +1 -0
- package/dist/commands/core/fix-rls.js +17 -0
- package/dist/commands/core/fix-rls.js.map +1 -0
- package/dist/commands/core/harden.d.ts +3 -0
- package/dist/commands/core/harden.d.ts.map +1 -0
- package/dist/commands/core/harden.js +19 -0
- package/dist/commands/core/harden.js.map +1 -0
- package/dist/commands/core/index.d.ts +3 -0
- package/dist/commands/core/index.d.ts.map +1 -0
- package/dist/commands/core/index.js +21 -0
- package/dist/commands/core/index.js.map +1 -0
- package/dist/commands/core/preflight.d.ts +3 -0
- package/dist/commands/core/preflight.d.ts.map +1 -0
- package/dist/commands/core/preflight.js +50 -0
- package/dist/commands/core/preflight.js.map +1 -0
- package/dist/commands/core/verify.d.ts +3 -0
- package/dist/commands/core/verify.d.ts.map +1 -0
- package/dist/commands/core/verify.js +32 -0
- package/dist/commands/core/verify.js.map +1 -0
- package/dist/commands/index.d.ts +28 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +37 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/types.d.ts +9 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +5 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/compliance/cis.d.ts +29 -0
- package/dist/compliance/cis.d.ts.map +1 -0
- package/dist/compliance/cis.js +316 -0
- package/dist/compliance/cis.js.map +1 -0
- package/dist/compliance/frameworks/eu-ai-act.d.ts +55 -0
- package/dist/compliance/frameworks/eu-ai-act.d.ts.map +1 -0
- package/dist/compliance/frameworks/eu-ai-act.js +621 -0
- package/dist/compliance/frameworks/eu-ai-act.js.map +1 -0
- package/dist/compliance/frameworks/index.d.ts +67 -0
- package/dist/compliance/frameworks/index.d.ts.map +1 -0
- package/dist/compliance/frameworks/index.js +97 -0
- package/dist/compliance/frameworks/index.js.map +1 -0
- package/dist/compliance/frameworks/iso-42001.d.ts +59 -0
- package/dist/compliance/frameworks/iso-42001.d.ts.map +1 -0
- package/dist/compliance/frameworks/iso-42001.js +719 -0
- package/dist/compliance/frameworks/iso-42001.js.map +1 -0
- package/dist/compliance/frameworks/mitre-atlas.d.ts +58 -0
- package/dist/compliance/frameworks/mitre-atlas.d.ts.map +1 -0
- package/dist/compliance/frameworks/mitre-atlas.js +686 -0
- package/dist/compliance/frameworks/mitre-atlas.js.map +1 -0
- package/dist/compliance/frameworks/nist-ai-rmf.d.ts +51 -0
- package/dist/compliance/frameworks/nist-ai-rmf.d.ts.map +1 -0
- package/dist/compliance/frameworks/nist-ai-rmf.js +677 -0
- package/dist/compliance/frameworks/nist-ai-rmf.js.map +1 -0
- package/dist/compliance/frameworks/owasp-llm.d.ts +58 -0
- package/dist/compliance/frameworks/owasp-llm.d.ts.map +1 -0
- package/dist/compliance/frameworks/owasp-llm.js +399 -0
- package/dist/compliance/frameworks/owasp-llm.js.map +1 -0
- package/dist/compliance/gdpr.d.ts +34 -0
- package/dist/compliance/gdpr.d.ts.map +1 -0
- package/dist/compliance/gdpr.js +319 -0
- package/dist/compliance/gdpr.js.map +1 -0
- package/dist/compliance/hipaa.d.ts +29 -0
- package/dist/compliance/hipaa.d.ts.map +1 -0
- package/dist/compliance/hipaa.js +205 -0
- package/dist/compliance/hipaa.js.map +1 -0
- package/dist/compliance/index.d.ts +18 -0
- package/dist/compliance/index.d.ts.map +1 -0
- package/dist/compliance/index.js +26 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/compliance/iso27001.d.ts +30 -0
- package/dist/compliance/iso27001.d.ts.map +1 -0
- package/dist/compliance/iso27001.js +332 -0
- package/dist/compliance/iso27001.js.map +1 -0
- package/dist/compliance/mapper.d.ts +42 -0
- package/dist/compliance/mapper.d.ts.map +1 -0
- package/dist/compliance/mapper.js +269 -0
- package/dist/compliance/mapper.js.map +1 -0
- package/dist/compliance/mapper.test.d.ts +5 -0
- package/dist/compliance/mapper.test.d.ts.map +1 -0
- package/dist/compliance/mapper.test.js +360 -0
- package/dist/compliance/mapper.test.js.map +1 -0
- package/dist/compliance/pci-dss.d.ts +29 -0
- package/dist/compliance/pci-dss.d.ts.map +1 -0
- package/dist/compliance/pci-dss.js +247 -0
- package/dist/compliance/pci-dss.js.map +1 -0
- package/dist/compliance/report.d.ts +25 -0
- package/dist/compliance/report.d.ts.map +1 -0
- package/dist/compliance/report.js +254 -0
- package/dist/compliance/report.js.map +1 -0
- package/dist/compliance/report.test.d.ts +5 -0
- package/dist/compliance/report.test.d.ts.map +1 -0
- package/dist/compliance/report.test.js +128 -0
- package/dist/compliance/report.test.js.map +1 -0
- package/dist/compliance/soc2.d.ts +30 -0
- package/dist/compliance/soc2.d.ts.map +1 -0
- package/dist/compliance/soc2.js +262 -0
- package/dist/compliance/soc2.js.map +1 -0
- package/dist/compliance/soc2.test.d.ts +5 -0
- package/dist/compliance/soc2.test.d.ts.map +1 -0
- package/dist/compliance/soc2.test.js +86 -0
- package/dist/compliance/soc2.test.js.map +1 -0
- package/dist/compliance/types.d.ts +125 -0
- package/dist/compliance/types.d.ts.map +1 -0
- package/dist/compliance/types.js +10 -0
- package/dist/compliance/types.js.map +1 -0
- package/dist/config/flags.d.ts +456 -0
- package/dist/config/flags.d.ts.map +1 -0
- package/dist/config/flags.js +464 -0
- package/dist/config/flags.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +10 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/severity-overrides.d.ts +209 -0
- package/dist/config/severity-overrides.d.ts.map +1 -0
- package/dist/config/severity-overrides.js +380 -0
- package/dist/config/severity-overrides.js.map +1 -0
- package/dist/cost/index.d.ts +11 -0
- package/dist/cost/index.d.ts.map +1 -0
- package/dist/cost/index.js +12 -0
- package/dist/cost/index.js.map +1 -0
- package/dist/cost/pricing.d.ts +57 -0
- package/dist/cost/pricing.d.ts.map +1 -0
- package/dist/cost/pricing.js +196 -0
- package/dist/cost/pricing.js.map +1 -0
- package/dist/cost/pricing.test.d.ts +5 -0
- package/dist/cost/pricing.test.d.ts.map +1 -0
- package/dist/cost/pricing.test.js +195 -0
- package/dist/cost/pricing.test.js.map +1 -0
- package/dist/cost/tracker.d.ts +100 -0
- package/dist/cost/tracker.d.ts.map +1 -0
- package/dist/cost/tracker.js +366 -0
- package/dist/cost/tracker.js.map +1 -0
- package/dist/cost/tracker.test.d.ts +5 -0
- package/dist/cost/tracker.test.d.ts.map +1 -0
- package/dist/cost/tracker.test.js +360 -0
- package/dist/cost/tracker.test.js.map +1 -0
- package/dist/cost/types.d.ts +135 -0
- package/dist/cost/types.d.ts.map +1 -0
- package/dist/cost/types.js +9 -0
- package/dist/cost/types.js.map +1 -0
- package/dist/enterprise/auth/oidc.d.ts +231 -0
- package/dist/enterprise/auth/oidc.d.ts.map +1 -0
- package/dist/enterprise/auth/oidc.js +372 -0
- package/dist/enterprise/auth/oidc.js.map +1 -0
- package/dist/enterprise/auth/oidc.test.d.ts +5 -0
- package/dist/enterprise/auth/oidc.test.d.ts.map +1 -0
- package/dist/enterprise/auth/oidc.test.js +435 -0
- package/dist/enterprise/auth/oidc.test.js.map +1 -0
- package/dist/enterprise/index.d.ts +14 -0
- package/dist/enterprise/index.d.ts.map +1 -0
- package/dist/enterprise/index.js +19 -0
- package/dist/enterprise/index.js.map +1 -0
- package/dist/enterprise/integrations/chat.d.ts +205 -0
- package/dist/enterprise/integrations/chat.d.ts.map +1 -0
- package/dist/enterprise/integrations/chat.js +624 -0
- package/dist/enterprise/integrations/chat.js.map +1 -0
- package/dist/enterprise/integrations/chat.test.d.ts +5 -0
- package/dist/enterprise/integrations/chat.test.d.ts.map +1 -0
- package/dist/enterprise/integrations/chat.test.js +557 -0
- package/dist/enterprise/integrations/chat.test.js.map +1 -0
- package/dist/enterprise/integrations/ticketing.d.ts +257 -0
- package/dist/enterprise/integrations/ticketing.d.ts.map +1 -0
- package/dist/enterprise/integrations/ticketing.js +548 -0
- package/dist/enterprise/integrations/ticketing.js.map +1 -0
- package/dist/enterprise/integrations/ticketing.test.d.ts +5 -0
- package/dist/enterprise/integrations/ticketing.test.d.ts.map +1 -0
- package/dist/enterprise/integrations/ticketing.test.js +693 -0
- package/dist/enterprise/integrations/ticketing.test.js.map +1 -0
- package/dist/enterprise/policy/opa.d.ts +194 -0
- package/dist/enterprise/policy/opa.d.ts.map +1 -0
- package/dist/enterprise/policy/opa.js +385 -0
- package/dist/enterprise/policy/opa.js.map +1 -0
- package/dist/enterprise/policy/opa.test.d.ts +5 -0
- package/dist/enterprise/policy/opa.test.d.ts.map +1 -0
- package/dist/enterprise/policy/opa.test.js +702 -0
- package/dist/enterprise/policy/opa.test.js.map +1 -0
- package/dist/enterprise/signing/kms.d.ts +211 -0
- package/dist/enterprise/signing/kms.d.ts.map +1 -0
- package/dist/enterprise/signing/kms.js +480 -0
- package/dist/enterprise/signing/kms.js.map +1 -0
- package/dist/enterprise/signing/kms.test.d.ts +5 -0
- package/dist/enterprise/signing/kms.test.d.ts.map +1 -0
- package/dist/enterprise/signing/kms.test.js +511 -0
- package/dist/enterprise/signing/kms.test.js.map +1 -0
- package/dist/eval/fixtures.d.ts +58 -0
- package/dist/eval/fixtures.d.ts.map +1 -0
- package/dist/eval/fixtures.js +571 -0
- package/dist/eval/fixtures.js.map +1 -0
- package/dist/eval/fixtures.test.d.ts +5 -0
- package/dist/eval/fixtures.test.d.ts.map +1 -0
- package/dist/eval/fixtures.test.js +193 -0
- package/dist/eval/fixtures.test.js.map +1 -0
- package/dist/eval/harness.d.ts +30 -0
- package/dist/eval/harness.d.ts.map +1 -0
- package/dist/eval/harness.js +221 -0
- package/dist/eval/harness.js.map +1 -0
- package/dist/eval/harness.test.d.ts +5 -0
- package/dist/eval/harness.test.d.ts.map +1 -0
- package/dist/eval/harness.test.js +314 -0
- package/dist/eval/harness.test.js.map +1 -0
- package/dist/eval/index.d.ts +15 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +18 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/metrics.d.ts +56 -0
- package/dist/eval/metrics.d.ts.map +1 -0
- package/dist/eval/metrics.js +298 -0
- package/dist/eval/metrics.js.map +1 -0
- package/dist/eval/metrics.test.d.ts +5 -0
- package/dist/eval/metrics.test.d.ts.map +1 -0
- package/dist/eval/metrics.test.js +426 -0
- package/dist/eval/metrics.test.js.map +1 -0
- package/dist/eval/report.d.ts +30 -0
- package/dist/eval/report.d.ts.map +1 -0
- package/dist/eval/report.js +333 -0
- package/dist/eval/report.js.map +1 -0
- package/dist/eval/report.test.d.ts +5 -0
- package/dist/eval/report.test.d.ts.map +1 -0
- package/dist/eval/report.test.js +275 -0
- package/dist/eval/report.test.js.map +1 -0
- package/dist/eval/types.d.ts +234 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +27 -0
- package/dist/eval/types.js.map +1 -0
- package/dist/http-server.d.ts +3 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +127 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4120 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +46 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +131 -0
- package/dist/logger.js.map +1 -0
- package/dist/multimodel/consensus.d.ts +49 -0
- package/dist/multimodel/consensus.d.ts.map +1 -0
- package/dist/multimodel/consensus.js +454 -0
- package/dist/multimodel/consensus.js.map +1 -0
- package/dist/multimodel/consensus.test.d.ts +5 -0
- package/dist/multimodel/consensus.test.d.ts.map +1 -0
- package/dist/multimodel/consensus.test.js +415 -0
- package/dist/multimodel/consensus.test.js.map +1 -0
- package/dist/multimodel/index.d.ts +13 -0
- package/dist/multimodel/index.d.ts.map +1 -0
- package/dist/multimodel/index.js +14 -0
- package/dist/multimodel/index.js.map +1 -0
- package/dist/multimodel/runner.d.ts +95 -0
- package/dist/multimodel/runner.d.ts.map +1 -0
- package/dist/multimodel/runner.js +312 -0
- package/dist/multimodel/runner.js.map +1 -0
- package/dist/multimodel/runner.test.d.ts +5 -0
- package/dist/multimodel/runner.test.d.ts.map +1 -0
- package/dist/multimodel/runner.test.js +224 -0
- package/dist/multimodel/runner.test.js.map +1 -0
- package/dist/multimodel/types.d.ts +202 -0
- package/dist/multimodel/types.d.ts.map +1 -0
- package/dist/multimodel/types.js +10 -0
- package/dist/multimodel/types.js.map +1 -0
- package/dist/observability/index.d.ts +9 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +9 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/otel.d.ts +102 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +284 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +10 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +78 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +470 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +304 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +100 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/sbom/cyclonedx.d.ts +30 -0
- package/dist/sbom/cyclonedx.d.ts.map +1 -0
- package/dist/sbom/cyclonedx.js +392 -0
- package/dist/sbom/cyclonedx.js.map +1 -0
- package/dist/sbom/cyclonedx.test.d.ts +5 -0
- package/dist/sbom/cyclonedx.test.d.ts.map +1 -0
- package/dist/sbom/cyclonedx.test.js +244 -0
- package/dist/sbom/cyclonedx.test.js.map +1 -0
- package/dist/sbom/index.d.ts +13 -0
- package/dist/sbom/index.d.ts.map +1 -0
- package/dist/sbom/index.js +15 -0
- package/dist/sbom/index.js.map +1 -0
- package/dist/sbom/provenance.d.ts +37 -0
- package/dist/sbom/provenance.d.ts.map +1 -0
- package/dist/sbom/provenance.js +268 -0
- package/dist/sbom/provenance.js.map +1 -0
- package/dist/sbom/provenance.test.d.ts +5 -0
- package/dist/sbom/provenance.test.d.ts.map +1 -0
- package/dist/sbom/provenance.test.js +189 -0
- package/dist/sbom/provenance.test.js.map +1 -0
- package/dist/sbom/signing.d.ts +87 -0
- package/dist/sbom/signing.d.ts.map +1 -0
- package/dist/sbom/signing.js +354 -0
- package/dist/sbom/signing.js.map +1 -0
- package/dist/sbom/signing.test.d.ts +5 -0
- package/dist/sbom/signing.test.d.ts.map +1 -0
- package/dist/sbom/signing.test.js +170 -0
- package/dist/sbom/signing.test.js.map +1 -0
- package/dist/sbom/types.d.ts +384 -0
- package/dist/sbom/types.d.ts.map +1 -0
- package/dist/sbom/types.js +17 -0
- package/dist/sbom/types.js.map +1 -0
- package/dist/scanners/agent/credential-scope-audit.d.ts +40 -0
- package/dist/scanners/agent/credential-scope-audit.d.ts.map +1 -0
- package/dist/scanners/agent/credential-scope-audit.js +404 -0
- package/dist/scanners/agent/credential-scope-audit.js.map +1 -0
- package/dist/scanners/agent/exfil-path-graph.d.ts +50 -0
- package/dist/scanners/agent/exfil-path-graph.d.ts.map +1 -0
- package/dist/scanners/agent/exfil-path-graph.js +764 -0
- package/dist/scanners/agent/exfil-path-graph.js.map +1 -0
- package/dist/scanners/agent/index.d.ts +43 -0
- package/dist/scanners/agent/index.d.ts.map +1 -0
- package/dist/scanners/agent/index.js +616 -0
- package/dist/scanners/agent/index.js.map +1 -0
- package/dist/scanners/agent/manifest-audit.d.ts +43 -0
- package/dist/scanners/agent/manifest-audit.d.ts.map +1 -0
- package/dist/scanners/agent/manifest-audit.js +403 -0
- package/dist/scanners/agent/manifest-audit.js.map +1 -0
- package/dist/scanners/agent/payloads/index.d.ts +44 -0
- package/dist/scanners/agent/payloads/index.d.ts.map +1 -0
- package/dist/scanners/agent/payloads/index.js +184 -0
- package/dist/scanners/agent/payloads/index.js.map +1 -0
- package/dist/scanners/agent/permission-minimiser.d.ts +48 -0
- package/dist/scanners/agent/permission-minimiser.d.ts.map +1 -0
- package/dist/scanners/agent/permission-minimiser.js +551 -0
- package/dist/scanners/agent/permission-minimiser.js.map +1 -0
- package/dist/scanners/agent/prompt-injection-fuzzer.d.ts +39 -0
- package/dist/scanners/agent/prompt-injection-fuzzer.d.ts.map +1 -0
- package/dist/scanners/agent/prompt-injection-fuzzer.js +720 -0
- package/dist/scanners/agent/prompt-injection-fuzzer.js.map +1 -0
- package/dist/scanners/agent/sandbox-audit.d.ts +44 -0
- package/dist/scanners/agent/sandbox-audit.d.ts.map +1 -0
- package/dist/scanners/agent/sandbox-audit.js +425 -0
- package/dist/scanners/agent/sandbox-audit.js.map +1 -0
- package/dist/scanners/agent/supply-chain-mcp.d.ts +53 -0
- package/dist/scanners/agent/supply-chain-mcp.d.ts.map +1 -0
- package/dist/scanners/agent/supply-chain-mcp.js +479 -0
- package/dist/scanners/agent/supply-chain-mcp.js.map +1 -0
- package/dist/scanners/agent/tool-description-drift.d.ts +62 -0
- package/dist/scanners/agent/tool-description-drift.d.ts.map +1 -0
- package/dist/scanners/agent/tool-description-drift.js +365 -0
- package/dist/scanners/agent/tool-description-drift.js.map +1 -0
- package/dist/scanners/agent/types.d.ts +840 -0
- package/dist/scanners/agent/types.d.ts.map +1 -0
- package/dist/scanners/agent/types.js +149 -0
- package/dist/scanners/agent/types.js.map +1 -0
- package/dist/scanners/bandit.d.ts +25 -0
- package/dist/scanners/bandit.d.ts.map +1 -0
- package/dist/scanners/bandit.js +129 -0
- package/dist/scanners/bandit.js.map +1 -0
- package/dist/scanners/binary-analysis.d.ts +41 -0
- package/dist/scanners/binary-analysis.d.ts.map +1 -0
- package/dist/scanners/binary-analysis.js +587 -0
- package/dist/scanners/binary-analysis.js.map +1 -0
- package/dist/scanners/binary-analysis.test.d.ts +5 -0
- package/dist/scanners/binary-analysis.test.d.ts.map +1 -0
- package/dist/scanners/binary-analysis.test.js +291 -0
- package/dist/scanners/binary-analysis.test.js.map +1 -0
- package/dist/scanners/brakeman.d.ts +30 -0
- package/dist/scanners/brakeman.d.ts.map +1 -0
- package/dist/scanners/brakeman.js +271 -0
- package/dist/scanners/brakeman.js.map +1 -0
- package/dist/scanners/dependencies.d.ts +22 -0
- package/dist/scanners/dependencies.d.ts.map +1 -0
- package/dist/scanners/dependencies.js +202 -0
- package/dist/scanners/dependencies.js.map +1 -0
- package/dist/scanners/dependencies.test.d.ts +5 -0
- package/dist/scanners/dependencies.test.d.ts.map +1 -0
- package/dist/scanners/dependencies.test.js +185 -0
- package/dist/scanners/dependencies.test.js.map +1 -0
- package/dist/scanners/eslint.d.ts +25 -0
- package/dist/scanners/eslint.d.ts.map +1 -0
- package/dist/scanners/eslint.js +220 -0
- package/dist/scanners/eslint.js.map +1 -0
- package/dist/scanners/gosec.d.ts +25 -0
- package/dist/scanners/gosec.d.ts.map +1 -0
- package/dist/scanners/gosec.js +128 -0
- package/dist/scanners/gosec.js.map +1 -0
- package/dist/scanners/index.d.ts +128 -0
- package/dist/scanners/index.d.ts.map +1 -0
- package/dist/scanners/index.js +811 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/index.test.d.ts +5 -0
- package/dist/scanners/index.test.d.ts.map +1 -0
- package/dist/scanners/index.test.js +424 -0
- package/dist/scanners/index.test.js.map +1 -0
- package/dist/scanners/memory-safety.d.ts +44 -0
- package/dist/scanners/memory-safety.d.ts.map +1 -0
- package/dist/scanners/memory-safety.js +571 -0
- package/dist/scanners/memory-safety.js.map +1 -0
- package/dist/scanners/memory-safety.test.d.ts +5 -0
- package/dist/scanners/memory-safety.test.d.ts.map +1 -0
- package/dist/scanners/memory-safety.test.js +321 -0
- package/dist/scanners/memory-safety.test.js.map +1 -0
- package/dist/scanners/race-condition.d.ts +25 -0
- package/dist/scanners/race-condition.d.ts.map +1 -0
- package/dist/scanners/race-condition.js +443 -0
- package/dist/scanners/race-condition.js.map +1 -0
- package/dist/scanners/race-condition.test.d.ts +5 -0
- package/dist/scanners/race-condition.test.d.ts.map +1 -0
- package/dist/scanners/race-condition.test.js +428 -0
- package/dist/scanners/race-condition.test.js.map +1 -0
- package/dist/scanners/secrets.d.ts +25 -0
- package/dist/scanners/secrets.d.ts.map +1 -0
- package/dist/scanners/secrets.js +367 -0
- package/dist/scanners/secrets.js.map +1 -0
- package/dist/scanners/secrets.test.d.ts +5 -0
- package/dist/scanners/secrets.test.d.ts.map +1 -0
- package/dist/scanners/secrets.test.js +160 -0
- package/dist/scanners/secrets.test.js.map +1 -0
- package/dist/scanners/semgrep.d.ts +33 -0
- package/dist/scanners/semgrep.d.ts.map +1 -0
- package/dist/scanners/semgrep.js +350 -0
- package/dist/scanners/semgrep.js.map +1 -0
- package/dist/scanners/semgrep.test.d.ts +8 -0
- package/dist/scanners/semgrep.test.d.ts.map +1 -0
- package/dist/scanners/semgrep.test.js +254 -0
- package/dist/scanners/semgrep.test.js.map +1 -0
- package/dist/scanners/trivy.d.ts +26 -0
- package/dist/scanners/trivy.d.ts.map +1 -0
- package/dist/scanners/trivy.js +187 -0
- package/dist/scanners/trivy.js.map +1 -0
- package/dist/scanners/types.d.ts +210 -0
- package/dist/scanners/types.d.ts.map +1 -0
- package/dist/scanners/types.js +106 -0
- package/dist/scanners/types.js.map +1 -0
- package/dist/scanners/types.test.d.ts +5 -0
- package/dist/scanners/types.test.d.ts.map +1 -0
- package/dist/scanners/types.test.js +103 -0
- package/dist/scanners/types.test.js.map +1 -0
- package/dist/scanners/typescript.d.ts +32 -0
- package/dist/scanners/typescript.d.ts.map +1 -0
- package/dist/scanners/typescript.js +300 -0
- package/dist/scanners/typescript.js.map +1 -0
- package/dist/scanners/typescript.test.d.ts +5 -0
- package/dist/scanners/typescript.test.d.ts.map +1 -0
- package/dist/scanners/typescript.test.js +296 -0
- package/dist/scanners/typescript.test.js.map +1 -0
- package/dist/transcripts/index.d.ts +13 -0
- package/dist/transcripts/index.d.ts.map +1 -0
- package/dist/transcripts/index.js +17 -0
- package/dist/transcripts/index.js.map +1 -0
- package/dist/transcripts/logger.d.ts +190 -0
- package/dist/transcripts/logger.d.ts.map +1 -0
- package/dist/transcripts/logger.js +385 -0
- package/dist/transcripts/logger.js.map +1 -0
- package/dist/transcripts/logger.test.d.ts +5 -0
- package/dist/transcripts/logger.test.d.ts.map +1 -0
- package/dist/transcripts/logger.test.js +227 -0
- package/dist/transcripts/logger.test.js.map +1 -0
- package/dist/transcripts/redaction.d.ts +125 -0
- package/dist/transcripts/redaction.d.ts.map +1 -0
- package/dist/transcripts/redaction.js +416 -0
- package/dist/transcripts/redaction.js.map +1 -0
- package/dist/transcripts/redaction.test.d.ts +5 -0
- package/dist/transcripts/redaction.test.d.ts.map +1 -0
- package/dist/transcripts/redaction.test.js +267 -0
- package/dist/transcripts/redaction.test.js.map +1 -0
- package/dist/transcripts/signing.d.ts +108 -0
- package/dist/transcripts/signing.d.ts.map +1 -0
- package/dist/transcripts/signing.js +173 -0
- package/dist/transcripts/signing.js.map +1 -0
- package/dist/transcripts/verifier.d.ts +133 -0
- package/dist/transcripts/verifier.d.ts.map +1 -0
- package/dist/transcripts/verifier.js +489 -0
- package/dist/transcripts/verifier.js.map +1 -0
- package/dist/transcripts/verifier.test.d.ts +5 -0
- package/dist/transcripts/verifier.test.d.ts.map +1 -0
- package/dist/transcripts/verifier.test.js +330 -0
- package/dist/transcripts/verifier.test.js.map +1 -0
- package/dist/util/concurrency.d.ts +221 -0
- package/dist/util/concurrency.d.ts.map +1 -0
- package/dist/util/concurrency.js +339 -0
- package/dist/util/concurrency.js.map +1 -0
- package/dist/util/index.d.ts +12 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +12 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/json.d.ts +63 -0
- package/dist/util/json.d.ts.map +1 -0
- package/dist/util/json.js +134 -0
- package/dist/util/json.js.map +1 -0
- package/dist/util/paths.d.ts +56 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +128 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/retry.d.ts +185 -0
- package/dist/util/retry.d.ts.map +1 -0
- package/dist/util/retry.js +338 -0
- package/dist/util/retry.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Certification Badge Generation
|
|
3
|
+
*
|
|
4
|
+
* Generates SVG badges for certification status that can be embedded
|
|
5
|
+
* in README files or displayed on dashboards.
|
|
6
|
+
*
|
|
7
|
+
* @module certification/badge
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Color palette for certification levels
|
|
11
|
+
*/
|
|
12
|
+
const LEVEL_COLORS = {
|
|
13
|
+
CERTIFIED: "#22c55e", // Green
|
|
14
|
+
APPROVED: "#eab308", // Yellow
|
|
15
|
+
REVIEW_REQUIRED: "#f97316", // Orange
|
|
16
|
+
BLOCKED: "#ef4444", // Red
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Human-readable labels for certification levels
|
|
20
|
+
*/
|
|
21
|
+
const LEVEL_LABELS = {
|
|
22
|
+
CERTIFIED: "Certified",
|
|
23
|
+
APPROVED: "Approved",
|
|
24
|
+
REVIEW_REQUIRED: "Review Required",
|
|
25
|
+
BLOCKED: "Blocked",
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Default color for unknown levels
|
|
29
|
+
*/
|
|
30
|
+
const DEFAULT_COLOR = "#6b7280"; // Gray
|
|
31
|
+
/**
|
|
32
|
+
* Badge dimensions
|
|
33
|
+
*/
|
|
34
|
+
const BADGE_HEIGHT = 20;
|
|
35
|
+
const LABEL_WIDTH = 80;
|
|
36
|
+
const VALUE_WIDTH = 120;
|
|
37
|
+
const TOTAL_WIDTH = LABEL_WIDTH + VALUE_WIDTH;
|
|
38
|
+
/**
|
|
39
|
+
* Generate an SVG certification badge.
|
|
40
|
+
*
|
|
41
|
+
* Creates a shields.io-style badge showing certification level and score.
|
|
42
|
+
*
|
|
43
|
+
* @param level - The certification level
|
|
44
|
+
* @param score - The overall score (0-100)
|
|
45
|
+
* @returns SVG string that can be saved to a file or embedded in markdown
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const svg = generateBadgeSvg("APPROVED", 85);
|
|
50
|
+
* // Returns SVG showing "certification | Approved 85/100"
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function generateBadgeSvg(level, score) {
|
|
54
|
+
const color = LEVEL_COLORS[level] || DEFAULT_COLOR;
|
|
55
|
+
const label = LEVEL_LABELS[level] || level;
|
|
56
|
+
const scoreText = `${Math.round(score)}/100`;
|
|
57
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="${TOTAL_WIDTH}" height="${BADGE_HEIGHT}" role="img" aria-label="certification: ${label} ${scoreText}">
|
|
58
|
+
<title>certification: ${label} ${scoreText}</title>
|
|
59
|
+
<linearGradient id="s" x2="0" y2="100%">
|
|
60
|
+
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
|
61
|
+
<stop offset="1" stop-opacity=".1"/>
|
|
62
|
+
</linearGradient>
|
|
63
|
+
<clipPath id="r">
|
|
64
|
+
<rect width="${TOTAL_WIDTH}" height="${BADGE_HEIGHT}" rx="3" fill="#fff"/>
|
|
65
|
+
</clipPath>
|
|
66
|
+
<g clip-path="url(#r)">
|
|
67
|
+
<rect width="${LABEL_WIDTH}" height="${BADGE_HEIGHT}" fill="#555"/>
|
|
68
|
+
<rect x="${LABEL_WIDTH}" width="${VALUE_WIDTH}" height="${BADGE_HEIGHT}" fill="${color}"/>
|
|
69
|
+
<rect width="${TOTAL_WIDTH}" height="${BADGE_HEIGHT}" fill="url(#s)"/>
|
|
70
|
+
</g>
|
|
71
|
+
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="11">
|
|
72
|
+
<text aria-hidden="true" x="${LABEL_WIDTH / 2}" y="15" fill="#010101" fill-opacity=".3">certification</text>
|
|
73
|
+
<text x="${LABEL_WIDTH / 2}" y="14">certification</text>
|
|
74
|
+
<text aria-hidden="true" x="${LABEL_WIDTH + VALUE_WIDTH / 2}" y="15" fill="#010101" fill-opacity=".3">${label} ${scoreText}</text>
|
|
75
|
+
<text x="${LABEL_WIDTH + VALUE_WIDTH / 2}" y="14">${label} ${scoreText}</text>
|
|
76
|
+
</g>
|
|
77
|
+
</svg>`;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generate a simple text badge for markdown.
|
|
81
|
+
*
|
|
82
|
+
* @param level - The certification level
|
|
83
|
+
* @param score - The overall score (0-100)
|
|
84
|
+
* @returns Markdown badge text
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const badge = generateTextBadge("APPROVED", 85);
|
|
89
|
+
* // Returns: ""
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export function generateTextBadge(level, score) {
|
|
93
|
+
const color = LEVEL_COLORS[level]?.replace("#", "") || "gray";
|
|
94
|
+
const label = encodeURIComponent(LEVEL_LABELS[level] || level);
|
|
95
|
+
const scoreText = encodeURIComponent(`${Math.round(score)}/100`);
|
|
96
|
+
return `![Certification: ${LEVEL_LABELS[level] || level}](https://img.shields.io/badge/certification-${label}%20${scoreText}-${color})`;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Generate a compact score-only badge.
|
|
100
|
+
*
|
|
101
|
+
* @param score - The overall score (0-100)
|
|
102
|
+
* @returns SVG string for score badge
|
|
103
|
+
*/
|
|
104
|
+
export function generateScoreBadgeSvg(score) {
|
|
105
|
+
const roundedScore = Math.round(score);
|
|
106
|
+
// Determine color based on score
|
|
107
|
+
let color;
|
|
108
|
+
if (roundedScore >= 90) {
|
|
109
|
+
color = LEVEL_COLORS.CERTIFIED;
|
|
110
|
+
}
|
|
111
|
+
else if (roundedScore >= 70) {
|
|
112
|
+
color = LEVEL_COLORS.APPROVED;
|
|
113
|
+
}
|
|
114
|
+
else if (roundedScore >= 40) {
|
|
115
|
+
color = LEVEL_COLORS.REVIEW_REQUIRED;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
color = LEVEL_COLORS.BLOCKED;
|
|
119
|
+
}
|
|
120
|
+
const width = 90;
|
|
121
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${BADGE_HEIGHT}" role="img" aria-label="score: ${roundedScore}">
|
|
122
|
+
<title>score: ${roundedScore}</title>
|
|
123
|
+
<linearGradient id="s" x2="0" y2="100%">
|
|
124
|
+
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
|
125
|
+
<stop offset="1" stop-opacity=".1"/>
|
|
126
|
+
</linearGradient>
|
|
127
|
+
<clipPath id="r">
|
|
128
|
+
<rect width="${width}" height="${BADGE_HEIGHT}" rx="3" fill="#fff"/>
|
|
129
|
+
</clipPath>
|
|
130
|
+
<g clip-path="url(#r)">
|
|
131
|
+
<rect width="45" height="${BADGE_HEIGHT}" fill="#555"/>
|
|
132
|
+
<rect x="45" width="45" height="${BADGE_HEIGHT}" fill="${color}"/>
|
|
133
|
+
<rect width="${width}" height="${BADGE_HEIGHT}" fill="url(#s)"/>
|
|
134
|
+
</g>
|
|
135
|
+
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="11">
|
|
136
|
+
<text aria-hidden="true" x="22" y="15" fill="#010101" fill-opacity=".3">score</text>
|
|
137
|
+
<text x="22" y="14">score</text>
|
|
138
|
+
<text aria-hidden="true" x="67" y="15" fill="#010101" fill-opacity=".3">${roundedScore}/100</text>
|
|
139
|
+
<text x="67" y="14">${roundedScore}/100</text>
|
|
140
|
+
</g>
|
|
141
|
+
</svg>`;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Generate badge markdown for embedding in README.
|
|
145
|
+
*
|
|
146
|
+
* @param level - The certification level
|
|
147
|
+
* @param score - The overall score (0-100)
|
|
148
|
+
* @param badgePath - Relative path to the badge SVG file
|
|
149
|
+
* @returns Markdown string for embedding the badge
|
|
150
|
+
*/
|
|
151
|
+
export function generateBadgeMarkdown(level, score, badgePath = "./certification-badge.svg") {
|
|
152
|
+
const label = LEVEL_LABELS[level] || level;
|
|
153
|
+
return `[](./CERTIFICATION.md)`;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/certification/badge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental Certification Caching
|
|
3
|
+
*
|
|
4
|
+
* Tracks file hashes to enable incremental certification. Instead of re-auditing
|
|
5
|
+
* the entire codebase, only changed files are analyzed in subsequent runs.
|
|
6
|
+
*
|
|
7
|
+
* Cache structure:
|
|
8
|
+
* ```
|
|
9
|
+
* .vaspera/certifications/{cert-id}/cache.json
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @module certification/cache
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Hash information for a single file
|
|
16
|
+
*/
|
|
17
|
+
export interface FileHash {
|
|
18
|
+
/** Relative path from project root */
|
|
19
|
+
path: string;
|
|
20
|
+
/** SHA-256 hash of file contents */
|
|
21
|
+
hash: string;
|
|
22
|
+
/** ISO timestamp of when this file was last checked */
|
|
23
|
+
lastChecked: string;
|
|
24
|
+
/** File size in bytes */
|
|
25
|
+
size: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Certification cache containing file hashes
|
|
29
|
+
*/
|
|
30
|
+
export interface CertificationCache {
|
|
31
|
+
/** Cache format version for future compatibility */
|
|
32
|
+
version: 1;
|
|
33
|
+
/** Combined hash of all project files */
|
|
34
|
+
projectHash: string;
|
|
35
|
+
/** Timestamp when cache was created */
|
|
36
|
+
createdAt: string;
|
|
37
|
+
/** Timestamp when cache was last updated */
|
|
38
|
+
updatedAt: string;
|
|
39
|
+
/** Individual file hashes */
|
|
40
|
+
files: FileHash[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Result of comparing current files against cache
|
|
44
|
+
*/
|
|
45
|
+
export interface CacheComparison {
|
|
46
|
+
/** Files that have changed since last certification */
|
|
47
|
+
changed: string[];
|
|
48
|
+
/** Files that are new since last certification */
|
|
49
|
+
added: string[];
|
|
50
|
+
/** Files that were removed since last certification */
|
|
51
|
+
removed: string[];
|
|
52
|
+
/** Files that are unchanged */
|
|
53
|
+
unchanged: string[];
|
|
54
|
+
/** Whether the cache is valid and can be used */
|
|
55
|
+
cacheValid: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Compute SHA-256 hash of a file
|
|
59
|
+
*
|
|
60
|
+
* @param filePath - Absolute path to the file
|
|
61
|
+
* @returns Hex-encoded SHA-256 hash
|
|
62
|
+
*/
|
|
63
|
+
export declare function hashFile(filePath: string): Promise<string>;
|
|
64
|
+
/**
|
|
65
|
+
* Compute a combined hash of multiple file hashes
|
|
66
|
+
*
|
|
67
|
+
* @param hashes - Array of file hashes to combine
|
|
68
|
+
* @returns Hex-encoded SHA-256 hash of all files
|
|
69
|
+
*/
|
|
70
|
+
export declare function computeProjectHash(hashes: FileHash[]): string;
|
|
71
|
+
/**
|
|
72
|
+
* Generate file hashes for all relevant files in a project
|
|
73
|
+
*
|
|
74
|
+
* @param projectPath - Absolute path to project root
|
|
75
|
+
* @returns Array of file hashes
|
|
76
|
+
*/
|
|
77
|
+
export declare function generateFileHashes(projectPath: string): Promise<FileHash[]>;
|
|
78
|
+
/**
|
|
79
|
+
* Load certification cache from disk
|
|
80
|
+
*
|
|
81
|
+
* @param certDir - Certification directory path
|
|
82
|
+
* @returns Cache object or null if not found/invalid
|
|
83
|
+
*/
|
|
84
|
+
export declare function loadCache(certDir: string): Promise<CertificationCache | null>;
|
|
85
|
+
/**
|
|
86
|
+
* Save certification cache to disk
|
|
87
|
+
*
|
|
88
|
+
* @param certDir - Certification directory path
|
|
89
|
+
* @param cache - Cache object to save
|
|
90
|
+
*/
|
|
91
|
+
export declare function saveCache(certDir: string, cache: CertificationCache): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Create a new cache from current project state
|
|
94
|
+
*
|
|
95
|
+
* @param projectPath - Absolute path to project root
|
|
96
|
+
* @returns New certification cache
|
|
97
|
+
*/
|
|
98
|
+
export declare function createCache(projectPath: string): Promise<CertificationCache>;
|
|
99
|
+
/**
|
|
100
|
+
* Compare current project state against a cached state
|
|
101
|
+
*
|
|
102
|
+
* @param projectPath - Absolute path to project root
|
|
103
|
+
* @param cache - Previous certification cache
|
|
104
|
+
* @returns Comparison result showing what changed
|
|
105
|
+
*/
|
|
106
|
+
export declare function compareWithCache(projectPath: string, cache: CertificationCache): Promise<CacheComparison>;
|
|
107
|
+
/**
|
|
108
|
+
* Get list of files that need re-auditing based on cache comparison
|
|
109
|
+
*
|
|
110
|
+
* @param comparison - Result of cache comparison
|
|
111
|
+
* @returns Array of file paths that need to be re-audited
|
|
112
|
+
*/
|
|
113
|
+
export declare function getFilesToAudit(comparison: CacheComparison): string[];
|
|
114
|
+
/**
|
|
115
|
+
* Check if incremental audit is possible (cache exists and is valid structure)
|
|
116
|
+
*
|
|
117
|
+
* @param certDir - Certification directory path
|
|
118
|
+
* @returns Whether incremental audit can be performed
|
|
119
|
+
*/
|
|
120
|
+
export declare function canUseIncrementalAudit(certDir: string): Promise<boolean>;
|
|
121
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/certification/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,OAAO,EAAE,CAAC,CAAC;IACX,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iDAAiD;IACjD,UAAU,EAAE,OAAO,CAAC;CACrB;AA2BD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAQ7D;AAgED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0BjF;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAgBnF;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYlF;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CA8C1B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,EAAE,CAErE;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG9E"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental Certification Caching
|
|
3
|
+
*
|
|
4
|
+
* Tracks file hashes to enable incremental certification. Instead of re-auditing
|
|
5
|
+
* the entire codebase, only changed files are analyzed in subsequent runs.
|
|
6
|
+
*
|
|
7
|
+
* Cache structure:
|
|
8
|
+
* ```
|
|
9
|
+
* .vaspera/certifications/{cert-id}/cache.json
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @module certification/cache
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from "crypto";
|
|
15
|
+
import { readFile, writeFile, readdir, stat } from "fs/promises";
|
|
16
|
+
import { join, relative } from "path";
|
|
17
|
+
import { logger } from "../logger.js";
|
|
18
|
+
/**
|
|
19
|
+
* Default file patterns to include in hashing
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_INCLUDE_PATTERNS = [
|
|
22
|
+
/\.(ts|tsx|js|jsx|mjs|cjs)$/,
|
|
23
|
+
/\.(json)$/,
|
|
24
|
+
/\.(sql)$/,
|
|
25
|
+
/\.(env\.example)$/,
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Patterns to exclude from hashing
|
|
29
|
+
*/
|
|
30
|
+
const EXCLUDE_PATTERNS = [
|
|
31
|
+
/node_modules/,
|
|
32
|
+
/\.git/,
|
|
33
|
+
/dist/,
|
|
34
|
+
/build/,
|
|
35
|
+
/coverage/,
|
|
36
|
+
/\.vaspera/,
|
|
37
|
+
/\.next/,
|
|
38
|
+
/\.turbo/,
|
|
39
|
+
/\.cache/,
|
|
40
|
+
];
|
|
41
|
+
/**
|
|
42
|
+
* Compute SHA-256 hash of a file
|
|
43
|
+
*
|
|
44
|
+
* @param filePath - Absolute path to the file
|
|
45
|
+
* @returns Hex-encoded SHA-256 hash
|
|
46
|
+
*/
|
|
47
|
+
export async function hashFile(filePath) {
|
|
48
|
+
const content = await readFile(filePath);
|
|
49
|
+
return createHash("sha256").update(content).digest("hex");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compute a combined hash of multiple file hashes
|
|
53
|
+
*
|
|
54
|
+
* @param hashes - Array of file hashes to combine
|
|
55
|
+
* @returns Hex-encoded SHA-256 hash of all files
|
|
56
|
+
*/
|
|
57
|
+
export function computeProjectHash(hashes) {
|
|
58
|
+
const combined = hashes
|
|
59
|
+
.slice()
|
|
60
|
+
.sort((a, b) => a.path.localeCompare(b.path))
|
|
61
|
+
.map((f) => `${f.path}:${f.hash}`)
|
|
62
|
+
.join("\n");
|
|
63
|
+
return createHash("sha256").update(combined).digest("hex");
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if a file path should be included in hashing
|
|
67
|
+
*/
|
|
68
|
+
function shouldIncludeFile(filePath) {
|
|
69
|
+
// Check exclusions first
|
|
70
|
+
for (const pattern of EXCLUDE_PATTERNS) {
|
|
71
|
+
if (pattern.test(filePath)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Check inclusions
|
|
76
|
+
for (const pattern of DEFAULT_INCLUDE_PATTERNS) {
|
|
77
|
+
if (pattern.test(filePath)) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Recursively scan a directory for hashable files
|
|
85
|
+
*
|
|
86
|
+
* @param dirPath - Directory to scan
|
|
87
|
+
* @param projectRoot - Project root for relative paths
|
|
88
|
+
* @returns Array of absolute file paths
|
|
89
|
+
*/
|
|
90
|
+
async function scanDirectory(dirPath, projectRoot) {
|
|
91
|
+
const files = [];
|
|
92
|
+
try {
|
|
93
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
94
|
+
for (const entry of entries) {
|
|
95
|
+
const fullPath = join(dirPath, entry.name);
|
|
96
|
+
const relativePath = relative(projectRoot, fullPath);
|
|
97
|
+
// Skip excluded directories
|
|
98
|
+
let skip = false;
|
|
99
|
+
for (const pattern of EXCLUDE_PATTERNS) {
|
|
100
|
+
if (pattern.test(relativePath)) {
|
|
101
|
+
skip = true;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (skip)
|
|
106
|
+
continue;
|
|
107
|
+
if (entry.isDirectory()) {
|
|
108
|
+
const subFiles = await scanDirectory(fullPath, projectRoot);
|
|
109
|
+
files.push(...subFiles);
|
|
110
|
+
}
|
|
111
|
+
else if (entry.isFile() && shouldIncludeFile(entry.name)) {
|
|
112
|
+
files.push(fullPath);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
logger.warn("cache.scan_error", { dir: dirPath, error: String(error) });
|
|
118
|
+
}
|
|
119
|
+
return files;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Generate file hashes for all relevant files in a project
|
|
123
|
+
*
|
|
124
|
+
* @param projectPath - Absolute path to project root
|
|
125
|
+
* @returns Array of file hashes
|
|
126
|
+
*/
|
|
127
|
+
export async function generateFileHashes(projectPath) {
|
|
128
|
+
const filePaths = await scanDirectory(projectPath, projectPath);
|
|
129
|
+
const hashes = [];
|
|
130
|
+
const now = new Date().toISOString();
|
|
131
|
+
for (const filePath of filePaths) {
|
|
132
|
+
try {
|
|
133
|
+
const [hash, stats] = await Promise.all([hashFile(filePath), stat(filePath)]);
|
|
134
|
+
hashes.push({
|
|
135
|
+
path: relative(projectPath, filePath),
|
|
136
|
+
hash,
|
|
137
|
+
lastChecked: now,
|
|
138
|
+
size: stats.size,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
logger.warn("cache.hash_error", { file: filePath, error: String(error) });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
logger.debug("cache.hashes_generated", {
|
|
146
|
+
project: projectPath,
|
|
147
|
+
fileCount: hashes.length,
|
|
148
|
+
});
|
|
149
|
+
return hashes;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Load certification cache from disk
|
|
153
|
+
*
|
|
154
|
+
* @param certDir - Certification directory path
|
|
155
|
+
* @returns Cache object or null if not found/invalid
|
|
156
|
+
*/
|
|
157
|
+
export async function loadCache(certDir) {
|
|
158
|
+
try {
|
|
159
|
+
const cachePath = join(certDir, "cache.json");
|
|
160
|
+
const content = await readFile(cachePath, "utf-8");
|
|
161
|
+
const cache = JSON.parse(content);
|
|
162
|
+
// Validate cache version
|
|
163
|
+
if (cache.version !== 1) {
|
|
164
|
+
logger.warn("cache.version_mismatch", { expected: 1, got: cache.version });
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return cache;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Save certification cache to disk
|
|
175
|
+
*
|
|
176
|
+
* @param certDir - Certification directory path
|
|
177
|
+
* @param cache - Cache object to save
|
|
178
|
+
*/
|
|
179
|
+
export async function saveCache(certDir, cache) {
|
|
180
|
+
const cachePath = join(certDir, "cache.json");
|
|
181
|
+
await writeFile(cachePath, JSON.stringify(cache, null, 2), "utf-8");
|
|
182
|
+
logger.debug("cache.saved", {
|
|
183
|
+
certDir,
|
|
184
|
+
fileCount: cache.files.length,
|
|
185
|
+
projectHash: cache.projectHash.slice(0, 12),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Create a new cache from current project state
|
|
190
|
+
*
|
|
191
|
+
* @param projectPath - Absolute path to project root
|
|
192
|
+
* @returns New certification cache
|
|
193
|
+
*/
|
|
194
|
+
export async function createCache(projectPath) {
|
|
195
|
+
const files = await generateFileHashes(projectPath);
|
|
196
|
+
const projectHash = computeProjectHash(files);
|
|
197
|
+
const now = new Date().toISOString();
|
|
198
|
+
return {
|
|
199
|
+
version: 1,
|
|
200
|
+
projectHash,
|
|
201
|
+
createdAt: now,
|
|
202
|
+
updatedAt: now,
|
|
203
|
+
files,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Compare current project state against a cached state
|
|
208
|
+
*
|
|
209
|
+
* @param projectPath - Absolute path to project root
|
|
210
|
+
* @param cache - Previous certification cache
|
|
211
|
+
* @returns Comparison result showing what changed
|
|
212
|
+
*/
|
|
213
|
+
export async function compareWithCache(projectPath, cache) {
|
|
214
|
+
const currentHashes = await generateFileHashes(projectPath);
|
|
215
|
+
const oldHashMap = new Map(cache.files.map((f) => [f.path, f.hash]));
|
|
216
|
+
const newHashMap = new Map(currentHashes.map((f) => [f.path, f.hash]));
|
|
217
|
+
const changed = [];
|
|
218
|
+
const added = [];
|
|
219
|
+
const removed = [];
|
|
220
|
+
const unchanged = [];
|
|
221
|
+
// Check current files against cache
|
|
222
|
+
for (const file of currentHashes) {
|
|
223
|
+
const oldHash = oldHashMap.get(file.path);
|
|
224
|
+
if (oldHash === undefined) {
|
|
225
|
+
added.push(file.path);
|
|
226
|
+
}
|
|
227
|
+
else if (oldHash !== file.hash) {
|
|
228
|
+
changed.push(file.path);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
unchanged.push(file.path);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Check for removed files
|
|
235
|
+
for (const oldFile of cache.files) {
|
|
236
|
+
if (!newHashMap.has(oldFile.path)) {
|
|
237
|
+
removed.push(oldFile.path);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
const cacheValid = changed.length === 0 && added.length === 0 && removed.length === 0;
|
|
241
|
+
logger.info("cache.compared", {
|
|
242
|
+
changed: changed.length,
|
|
243
|
+
added: added.length,
|
|
244
|
+
removed: removed.length,
|
|
245
|
+
unchanged: unchanged.length,
|
|
246
|
+
cacheValid,
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
changed,
|
|
250
|
+
added,
|
|
251
|
+
removed,
|
|
252
|
+
unchanged,
|
|
253
|
+
cacheValid,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get list of files that need re-auditing based on cache comparison
|
|
258
|
+
*
|
|
259
|
+
* @param comparison - Result of cache comparison
|
|
260
|
+
* @returns Array of file paths that need to be re-audited
|
|
261
|
+
*/
|
|
262
|
+
export function getFilesToAudit(comparison) {
|
|
263
|
+
return [...comparison.changed, ...comparison.added];
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Check if incremental audit is possible (cache exists and is valid structure)
|
|
267
|
+
*
|
|
268
|
+
* @param certDir - Certification directory path
|
|
269
|
+
* @returns Whether incremental audit can be performed
|
|
270
|
+
*/
|
|
271
|
+
export async function canUseIncrementalAudit(certDir) {
|
|
272
|
+
const cache = await loadCache(certDir);
|
|
273
|
+
return cache !== null && cache.version === 1 && cache.files.length > 0;
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/certification/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.test.d.ts","sourceRoot":"","sources":["../../src/certification/cache.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|