snyk-go-parser
Version:
Generate a dep tree given a collection of manifests
60 lines • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseGoPkgConfig = parseGoPkgConfig;
const toml = require("@iarna/toml");
const errors_1 = require("../errors");
const event_loop_spinner_1 = require("event-loop-spinner");
async function parseDepLockContents(lockFileString) {
try {
const lockJson = (await toml.parse.async(lockFileString));
const deps = {};
if (lockJson.projects) {
for (const proj of lockJson.projects) {
const version = proj.version || '#' + proj.revision;
for (const subpackageName of proj.packages) {
const name = subpackageName === '.'
? proj.name
: proj.name + '/' + subpackageName;
const dep = {
name,
version,
};
deps[dep.name] = dep;
if (event_loop_spinner_1.eventLoopSpinner.isStarving()) {
await event_loop_spinner_1.eventLoopSpinner.spin();
}
}
}
}
return deps;
}
catch (e) {
throw new errors_1.InvalidUserInputError('Gopkg.lock parsing failed with error ' + e.message);
}
}
function parseDepManifestContents(manifestToml) {
try {
const manifestJson = toml.parse(manifestToml) || {};
manifestJson.ignored = manifestJson.ignored || [];
return manifestJson;
}
catch (e) {
throw new errors_1.InvalidUserInputError('Gopkg.toml parsing failed with error ' + e.message);
}
}
async function parseGoPkgConfig(manifestFileContents, lockFileContents) {
if (!manifestFileContents && !lockFileContents) {
throw new errors_1.InvalidUserInputError('Gopkg.lock and Gopkg.toml file contents are empty');
}
if (!lockFileContents) {
throw new errors_1.InvalidUserInputError('Gopkg.lock is empty, cannot proceed parsing');
}
const lockedVersions = await parseDepLockContents(lockFileContents);
let ignoredPkgs = [];
if (manifestFileContents) {
const manifest = parseDepManifestContents(manifestFileContents);
ignoredPkgs = manifest.ignored;
}
return { lockedVersions, ignoredPkgs };
}
//# sourceMappingURL=gopkg-parser.js.map