Files
WRNexusJS/scripts/check-security-asvs.mjs
Clintchiz 586a6db8ff
Quality / quality (ubuntu-latest) (push) Failing after 21s
Quality / quality (windows-latest) (push) Canceled after 0s
release: WRNexusJS 0.8.0
2026-08-02 23:18:51 +05:30

42 lines
1.3 KiB
JavaScript

import { existsSync, readFileSync } from "node:fs";
import console from "node:console";
import { resolve } from "node:path";
import process from "node:process";
const root = resolve(import.meta.dirname, "..");
const mapPath = resolve(root, "docs/SECURITY-ASVS-5.md");
const source = readFileSync(mapPath, "utf8");
const requiredIds = [
"v5.0.0-1.1.2",
"v5.0.0-1.2.1",
"v5.0.0-1.2.3",
"v5.0.0-1.2.4",
"v5.0.0-1.3.6",
"v5.0.0-3.3.1",
"v5.0.0-3.3.2",
"v5.0.0-3.3.4",
"v5.0.0-3.4.1",
"v5.0.0-3.4.2",
"v5.0.0-3.4.6",
"v5.0.0-3.5.1",
"v5.0.0-3.7.2",
"v5.0.0-16.2.5",
"v5.0.0-16.3.1",
"v5.0.0-16.3.2",
];
const missingIds = requiredIds.filter((id) => !source.includes(`\`${id}\``));
const evidence = [...source.matchAll(/`((?:packages|scripts)\/[\w./-]+)`/g)].map(
(match) => match[1],
);
const missingEvidence = evidence.filter((path) => !existsSync(resolve(root, path)));
if (missingIds.length || missingEvidence.length) {
if (missingIds.length) console.error(`Missing ASVS mappings: ${missingIds.join(", ")}`);
if (missingEvidence.length)
console.error(`Missing security evidence: ${missingEvidence.join(", ")}`);
process.exit(1);
}
console.log(
`Security map verified: ${requiredIds.length} ASVS requirements, ${evidence.length} evidence files.`,
);