UNPKG

snyk-nodejs-lockfile-parser

Version:
133 lines 10.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getYarnLockfileType = exports.NodeLockfileVersion = exports.getPnpmLockfileVersion = exports.getYarnLockfileVersion = exports.getNpmLockfileVersion = exports.getLockfileVersionFromFile = exports.parsePkgJson = exports.parsePnpmWorkspace = exports.parsePnpmProject = exports.getPnpmLockfileParser = exports.buildDepGraphYarnLockV2Simple = exports.parseYarnLockV2Project = exports.extractPkgsFromYarnLockV2 = exports.buildDepGraphYarnLockV1Workspace = exports.buildDepGraphYarnLockV1WorkspaceCyclesPruned = exports.buildDepGraphYarnLockV1Simple = exports.buildDepGraphYarnLockV1SimpleCyclesPruned = exports.parseYarnLockV1WorkspaceProject = exports.parseYarnLockV1Project = exports.extractPkgsFromYarnLockV1 = exports.parseNpmLockV2Project = exports.OutOfSyncError = exports.InvalidUserInputError = exports.UnsupportedRuntimeError = exports.LockfileType = exports.Scope = exports.getPnpmWorkspaces = exports.getYarnWorkspaces = exports.getYarnWorkspacesFromFiles = exports.buildDepGraphFromCliOutput = exports.buildDepTreeFromFiles = exports.buildDepTree = void 0; const fs = require("fs"); const path = require("path"); const parsers_1 = require("./parsers"); Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return parsers_1.Scope; } }); Object.defineProperty(exports, "LockfileType", { enumerable: true, get: function () { return parsers_1.LockfileType; } }); Object.defineProperty(exports, "getYarnWorkspaces", { enumerable: true, get: function () { return parsers_1.getYarnWorkspaces; } }); Object.defineProperty(exports, "getPnpmWorkspaces", { enumerable: true, get: function () { return parsers_1.getPnpmWorkspaces; } }); const package_lock_parser_1 = require("./parsers/package-lock-parser"); const yarn_lock_parser_1 = require("./parsers/yarn-lock-parser"); const yarn2_lock_parser_1 = require("./parsers/yarn2-lock-parser"); const errors_1 = require("./errors"); Object.defineProperty(exports, "UnsupportedRuntimeError", { enumerable: true, get: function () { return errors_1.UnsupportedRuntimeError; } }); Object.defineProperty(exports, "InvalidUserInputError", { enumerable: true, get: function () { return errors_1.InvalidUserInputError; } }); Object.defineProperty(exports, "OutOfSyncError", { enumerable: true, get: function () { return errors_1.OutOfSyncError; } }); const cli_parsers_1 = require("./cli-parsers"); Object.defineProperty(exports, "buildDepGraphFromCliOutput", { enumerable: true, get: function () { return cli_parsers_1.buildDepGraphFromCliOutput; } }); // Straight to Depgraph Functionality ************* // ************************************************ const dep_graph_builders_1 = require("./dep-graph-builders"); Object.defineProperty(exports, "parseNpmLockV2Project", { enumerable: true, get: function () { return dep_graph_builders_1.parseNpmLockV2Project; } }); Object.defineProperty(exports, "extractPkgsFromYarnLockV1", { enumerable: true, get: function () { return dep_graph_builders_1.extractPkgsFromYarnLockV1; } }); Object.defineProperty(exports, "parseYarnLockV1Project", { enumerable: true, get: function () { return dep_graph_builders_1.parseYarnLockV1Project; } }); Object.defineProperty(exports, "parseYarnLockV1WorkspaceProject", { enumerable: true, get: function () { return dep_graph_builders_1.parseYarnLockV1WorkspaceProject; } }); Object.defineProperty(exports, "buildDepGraphYarnLockV1SimpleCyclesPruned", { enumerable: true, get: function () { return dep_graph_builders_1.buildDepGraphYarnLockV1SimpleCyclesPruned; } }); Object.defineProperty(exports, "buildDepGraphYarnLockV1Simple", { enumerable: true, get: function () { return dep_graph_builders_1.buildDepGraphYarnLockV1Simple; } }); Object.defineProperty(exports, "buildDepGraphYarnLockV1WorkspaceCyclesPruned", { enumerable: true, get: function () { return dep_graph_builders_1.buildDepGraphYarnLockV1WorkspaceCyclesPruned; } }); Object.defineProperty(exports, "buildDepGraphYarnLockV1Workspace", { enumerable: true, get: function () { return dep_graph_builders_1.buildDepGraphYarnLockV1Workspace; } }); Object.defineProperty(exports, "extractPkgsFromYarnLockV2", { enumerable: true, get: function () { return dep_graph_builders_1.extractPkgsFromYarnLockV2; } }); Object.defineProperty(exports, "parseYarnLockV2Project", { enumerable: true, get: function () { return dep_graph_builders_1.parseYarnLockV2Project; } }); Object.defineProperty(exports, "buildDepGraphYarnLockV2Simple", { enumerable: true, get: function () { return dep_graph_builders_1.buildDepGraphYarnLockV2Simple; } }); Object.defineProperty(exports, "parsePnpmProject", { enumerable: true, get: function () { return dep_graph_builders_1.parsePnpmProject; } }); Object.defineProperty(exports, "parsePnpmWorkspace", { enumerable: true, get: function () { return dep_graph_builders_1.parsePnpmWorkspace; } }); Object.defineProperty(exports, "parsePkgJson", { enumerable: true, get: function () { return dep_graph_builders_1.parsePkgJson; } }); const lockfile_parser_1 = require("./dep-graph-builders/pnpm/lockfile-parser"); Object.defineProperty(exports, "getPnpmLockfileParser", { enumerable: true, get: function () { return lockfile_parser_1.getPnpmLockfileParser; } }); const utils_1 = require("./utils"); Object.defineProperty(exports, "getLockfileVersionFromFile", { enumerable: true, get: function () { return utils_1.getLockfileVersionFromFile; } }); Object.defineProperty(exports, "getNpmLockfileVersion", { enumerable: true, get: function () { return utils_1.getNpmLockfileVersion; } }); Object.defineProperty(exports, "getYarnLockfileVersion", { enumerable: true, get: function () { return utils_1.getYarnLockfileVersion; } }); Object.defineProperty(exports, "getPnpmLockfileVersion", { enumerable: true, get: function () { return utils_1.getPnpmLockfileVersion; } }); Object.defineProperty(exports, "NodeLockfileVersion", { enumerable: true, get: function () { return utils_1.NodeLockfileVersion; } }); // ********************************** async function buildDepTree(manifestFileContents, lockFileContents, includeDev = false, lockfileType, strictOutOfSync = true, defaultManifestFileName = 'package.json') { if (!lockfileType) { lockfileType = parsers_1.LockfileType.npm; } else if (lockfileType === parsers_1.LockfileType.yarn) { lockfileType = getYarnLockfileType(lockFileContents); } let lockfileParser; switch (lockfileType) { case parsers_1.LockfileType.npm: lockfileParser = new package_lock_parser_1.PackageLockParser(); break; case parsers_1.LockfileType.yarn: lockfileParser = new yarn_lock_parser_1.YarnLockParser(); break; case parsers_1.LockfileType.yarn2: lockfileParser = new yarn2_lock_parser_1.Yarn2LockParser(); break; default: throw new errors_1.InvalidUserInputError('Unsupported lockfile type ' + `${lockfileType} provided. Only 'npm' or 'yarn' is currently ` + 'supported.'); } const manifestFile = (0, parsers_1.parseManifestFile)(manifestFileContents); if (!manifestFile.name) { manifestFile.name = path.isAbsolute(defaultManifestFileName) ? path.basename(defaultManifestFileName) : defaultManifestFileName; } const lockFile = lockfileParser.parseLockFile(lockFileContents); return lockfileParser.getDependencyTree(manifestFile, lockFile, includeDev, strictOutOfSync); } exports.buildDepTree = buildDepTree; async function buildDepTreeFromFiles(root, manifestFilePath, lockFilePath, includeDev = false, strictOutOfSync = true) { if (!root || !manifestFilePath || !lockFilePath) { throw new Error('Missing required parameters for buildDepTreeFromFiles()'); } const manifestFileFullPath = path.resolve(root, manifestFilePath); const lockFileFullPath = path.resolve(root, lockFilePath); if (!fs.existsSync(manifestFileFullPath)) { throw new errors_1.InvalidUserInputError('Target file package.json not found at ' + `location: ${manifestFileFullPath}`); } if (!fs.existsSync(lockFileFullPath)) { throw new errors_1.InvalidUserInputError('Lockfile not found at location: ' + lockFileFullPath); } const manifestFileContents = fs.readFileSync(manifestFileFullPath, 'utf-8'); const lockFileContents = fs.readFileSync(lockFileFullPath, 'utf-8'); let lockFileType; if (lockFilePath.endsWith('package-lock.json')) { lockFileType = parsers_1.LockfileType.npm; } else if (lockFilePath.endsWith('yarn.lock')) { lockFileType = getYarnLockfileType(lockFileContents, root, lockFilePath); } else { throw new errors_1.InvalidUserInputError(`Unknown lockfile ${lockFilePath}. ` + 'Please provide either package-lock.json or yarn.lock.'); } return await buildDepTree(manifestFileContents, lockFileContents, includeDev, lockFileType, strictOutOfSync, manifestFilePath); } exports.buildDepTreeFromFiles = buildDepTreeFromFiles; function getYarnWorkspacesFromFiles(root, manifestFilePath) { if (!root || !manifestFilePath) { throw new Error('Missing required parameters for getYarnWorkspacesFromFiles()'); } const manifestFileFullPath = path.resolve(root, manifestFilePath); if (!fs.existsSync(manifestFileFullPath)) { throw new errors_1.InvalidUserInputError('Target file package.json not found at ' + `location: ${manifestFileFullPath}`); } const manifestFileContents = fs.readFileSync(manifestFileFullPath, 'utf-8'); return (0, parsers_1.getYarnWorkspaces)(manifestFileContents); } exports.getYarnWorkspacesFromFiles = getYarnWorkspacesFromFiles; function getYarnLockfileType(lockFileContents, root, lockFilePath) { if (lockFileContents.includes('__metadata') || (root && lockFilePath && fs.existsSync(path.resolve(root, lockFilePath.replace('yarn.lock', '.yarnrc.yml'))))) { return parsers_1.LockfileType.yarn2; } else { return parsers_1.LockfileType.yarn; } } exports.getYarnLockfileType = getYarnLockfileType; //# sourceMappingURL=index.js.map