snyk-nodejs-lockfile-parser
Version:
Generate a dep tree given a lockfile
54 lines • 2.26 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.YarnLockParser = void 0;
const yarnLockfileParser = require("@yarnpkg/lockfile");
const index_1 = require("./index");
const errors_1 = require("../errors");
const lock_parser_base_1 = require("./lock-parser-base");
const config_1 = require("../config");
class YarnLockParser extends lock_parser_base_1.LockParserBase {
constructor() {
super(index_1.LockfileType.yarn, config_1.config.YARN_TREE_SIZE_LIMIT);
}
parseLockFile(lockFileContents) {
try {
const yarnLock = yarnLockfileParser.parse(lockFileContents);
yarnLock.dependencies = yarnLock.object;
yarnLock.type = this.type;
return yarnLock;
}
catch (e) {
throw new errors_1.InvalidUserInputError(`yarn.lock parsing failed with an error: ${e.message}`);
}
}
async getDependencyTree(manifestFile, lockfile, includeDev = false, strictOutOfSync = true) {
const depTree = await super.getDependencyTree(manifestFile, lockfile, includeDev, strictOutOfSync);
const meta = { lockfileVersion: 1, packageManager: 'yarn' };
const depTreeWithMeta = Object.assign(Object.assign({}, depTree), { meta: Object.assign(Object.assign({}, depTree.meta), meta) });
return depTreeWithMeta;
}
getDepMap(lockfile) {
const yarnLockfile = lockfile;
const depMap = {};
for (const [depName, dep] of Object.entries(yarnLockfile.object)) {
const subDependencies = Object.entries(Object.assign(Object.assign({}, (dep.dependencies || {})), (dep.optionalDependencies || {})));
depMap[depName] = {
labels: {
scope: index_1.Scope.prod,
},
name: getName(depName),
requires: subDependencies.map(([key, ver]) => `${key}@${ver}`),
version: dep.version,
};
}
return depMap;
}
getDepTreeKey(dep) {
return `${dep.name}@${dep.version}`;
}
}
exports.YarnLockParser = YarnLockParser;
function getName(depName) {
return depName.slice(0, depName.indexOf('@', 1));
}
//# sourceMappingURL=yarn-lock-parser.js.map
;