@snyk/composer-lockfile-parser
Version:
Generate a dep tree given a composer.lock file
55 lines • 2.9 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const _isEmpty = require("lodash.isempty");
const path = require("path");
const errors_1 = require("./errors");
const file_parser_1 = require("./parsers/file-parser");
const composer_parser_1 = require("./parsers/composer-parser");
function buildDepTree(lockFileContent, manifestFileContent, defaultProjectName, systemVersions, includeDev = false) {
const lockFileJson = file_parser_1.FileParser.parseLockFile(lockFileContent);
const manifestJson = file_parser_1.FileParser.parseManifestFile(manifestFileContent);
if (!lockFileJson.packages) {
throw new errors_1.InvalidUserInputError('Invalid lock file. Must contain `packages` property');
}
const name = manifestJson.name || defaultProjectName;
const version = composer_parser_1.ComposerParser.getVersion(manifestJson) || '0.0.0';
const dependencies = composer_parser_1.ComposerParser.buildDependencies(manifestJson, lockFileJson, manifestJson, systemVersions, includeDev);
const hasDevDependencies = !_isEmpty(manifestJson['require-dev']);
return {
name,
version,
dependencies,
hasDevDependencies,
packageFormatVersion: 'composer:0.0.1',
};
}
exports.buildDepTree = buildDepTree;
function buildDepTreeFromFiles(basePath, lockFileName, systemVersions, includeDev = false) {
if (!basePath) {
throw new errors_1.InvalidUserInputError('Missing `basePath` parameter for buildDepTreeFromFiles()');
}
if (!lockFileName) {
throw new errors_1.InvalidUserInputError('Missing `lockfile` parameter for buildDepTreeFromFiles()');
}
if (!systemVersions) {
throw new errors_1.InvalidUserInputError('Missing `systemVersions` parameter for buildDepTreeFromFiles()');
}
const lockFilePath = path.resolve(basePath, lockFileName);
const manifestFilePath = path.resolve(basePath, path.dirname(lockFilePath), 'composer.json');
if (!fs.existsSync(lockFilePath)) {
throw new errors_1.InvalidUserInputError(`Lockfile not found at location: ${lockFilePath}`);
}
if (!fs.existsSync(manifestFilePath)) {
throw new errors_1.InvalidUserInputError(`Target file composer.json not found at location: ${manifestFilePath}`);
}
const lockFileContent = fs.readFileSync(lockFilePath, 'utf-8');
const manifestFileContent = fs.readFileSync(manifestFilePath, 'utf-8');
const defaultProjectName = getDefaultProjectName(basePath, lockFileName);
return buildDepTree(lockFileContent, manifestFileContent, defaultProjectName, systemVersions, includeDev);
}
exports.buildDepTreeFromFiles = buildDepTreeFromFiles;
function getDefaultProjectName(basePath, lockFileName) {
return path.dirname(path.resolve(path.join(basePath, lockFileName))).split(path.sep).pop();
}
//# sourceMappingURL=index.js.map
;