UNPKG

@onereach/get-version-data

Version:
58 lines (45 loc) 1.67 kB
'use strict'; const {readJson} = require('./utils'); module.exports = async function parseNpmLock ({lockFile, subDir}, {devDeps}) { const lockData = await readJson(lockFile); const pkgData = lockData.packages?.[subDir]; const deps = { ...pkgData?.dependencies, ...devDeps ? pkgData?.devDependencies : null, }; if (Object.keys(deps).length === 0) return {}; return getDepsVersions(deps, lockData, subDir); } function getDepsVersions (deps, lockData, subDir) { return Object.fromEntries( Object.entries(deps) .map(([name, version]) => { if (version.startsWith('workspace:')) { const workspaceName = version.split(':')[1]; const workspaceData = lockData.workspaces.find(w => w.name === workspaceName); return [name, workspaceData.version]; } else if (version.startsWith('file:')) { // skip file dependencies return [name, version]; } else { const pkgData = lockData.packages?.[`${subDir}/node_modules/${name}`] || lockData.packages?.[`node_modules/${name}`] if (!pkgData) { console.warn(`Package ${name} not found in lock file`); return [name, version]; } if (pkgData.version) { return [name, pkgData.version]; } if (pkgData.link) { const resolvedPackage = lockData.packages?.[pkgData.resolved]; return [name, resolvedPackage?.version || pkgData.resolved]; } console.warn(`Package ${name} has no version or link in lock file`); return [name, version]; } }) ); }