UNPKG

snyk-docker-plugin

Version:
95 lines 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseFile = exports.analyze = void 0; const types_1 = require("../types"); function analyze(targetImage, apkDbFileContent) { return Promise.resolve({ Image: targetImage, AnalyzeType: types_1.AnalysisType.Apk, Analysis: parseFile(apkDbFileContent), }); } exports.analyze = analyze; function parseFile(text) { const pkgs = []; let curPkg = null; // Absolute path of the most recent F: record; "" until one is seen. let currentDir = ""; for (const line of text.split("\n")) { if (line.length < 2) { continue; } const key = line.charAt(0); const value = line.substr(2).trim(); switch (key) { case "P": { // Package curPkg = { Name: value, Version: "", Source: undefined, Provides: [], Deps: {}, AutoInstalled: undefined, Files: [], Directories: [], }; pkgs.push(curPkg); currentDir = ""; break; } case "V": // Version if (curPkg) { curPkg.Version = value; } break; case "p": // Provides if (curPkg) { for (let name of value.split(" ")) { name = name.split("=")[0]; curPkg.Provides.push(name); } } break; case "r": // Depends case "D": // Depends if (curPkg) { for (let name of value.split(" ")) { if (name.charAt(0) !== "!") { name = name.split("=")[0]; curPkg.Deps[name] = true; } } } break; case "o": // Origin if (curPkg) { curPkg.Source = value; } break; case "F": { // Directory for subsequent R: file-list records, root-relative // like "usr/lib" if (!curPkg) { break; } currentDir = value ? "/" + value : ""; if (currentDir && !curPkg.Directories.includes(currentDir)) { curPkg.Directories.push(currentDir); } break; } case "R": { // File name relative to the current F: directory if (!curPkg || !currentDir) { break; } curPkg.Files.push(`${currentDir}/${value}`); break; } } } return pkgs; } exports.parseFile = parseFile; //# sourceMappingURL=apk.js.map