UNPKG

@cyclonedx/cdxgen

Version:

Creates CycloneDX Software Bill of Materials (SBOM) from source or container image

49 lines (47 loc) 1.56 kB
import { existsSync, readFileSync } from "node:fs"; /** * Function to parse the given gradle build file to identify properties such as included builds * * @param buildFile {build,settings}.gradle(.kts)? Build file in groovy or kotlin format * @param buildContent String content to parse directly. */ export function analyzeBuildSettings(buildFile, buildContent) { const includedBuilds = new Set(); if (!buildContent && !existsSync(buildFile)) { return undefined; } const data = buildContent || readFileSync(buildFile, "utf-8"); let pluginManagementMode = false; for (let aline of data.split("\n")) { aline = aline.replaceAll("\r", "").trim(); if (aline.includes("pluginManagement {")) { pluginManagementMode = true; } if (pluginManagementMode && aline === "}") { pluginManagementMode = false; } if (!pluginManagementMode) { if (aline.includes("includeBuild")) { aline = aline.replace("includeBuild", "").replaceAll(/[ "'()]/g, ""); // Ignore relative includes for now if (!aline.startsWith(".")) { includedBuilds.add(`:${aline.trim()}`); } } else if (aline.includes("includedBuild(")) { aline = aline .split("includedBuild(")[1] .split(")")[0] .replaceAll(/[ "'()]/g, ""); if (!aline.startsWith(".")) { includedBuilds.add(`:${aline.trim()}`); } } } } if (!includedBuilds.size) { return undefined; } return { includedBuilds: Array.from(includedBuilds), }; }