UNPKG

veendor

Version:

a tool for stroing your npm dependencies in arbitraty storage

66 lines (51 loc) 1.62 kB
/** * package.json-related stuff */ const crypto = require('crypto'); const _ = require('lodash'); /** * Calculates and returns hash of deps in package.json * @param {Object} pkgJson * @param {null|string} lockfileContents * @param {Object} options * @return {string} */ function calcHash(pkgJson, lockfileContents, options = {}) { const resultSha1 = crypto.createHash('sha1'); const resultDeps = []; const addPkgString = (version, pack) => resultDeps.push(`${pack}@${version}`); _.forOwn(pkgJson.dependencies, addPkgString); _.forOwn(pkgJson.devDependencies, addPkgString); resultSha1.update(JSON.stringify(resultDeps.sort())); if (lockfileContents) { resultSha1.update(lockfileContents); } const result = resultSha1.digest('hex'); if (typeof options.suffix === 'string') { return result + '-' + options.suffix; } if (typeof options.suffix === 'function') { return result + '-' + options.suffix(); } return result; } function parsePkgJson(pkgJsonString) { return new Promise((resolve, reject) => { let pkgJson; try { pkgJson = JSON.parse(pkgJsonString); } catch (e) { return reject(e); } if (!(pkgJson.dependencies instanceof Object) && !(pkgJson.devDependencies instanceof Object)) { return reject(new EmptyPkgJsonError('No dependencies or devDependencies supplied')); } resolve(pkgJson); }); } class EmptyPkgJsonError extends Error {} module.exports = { calcHash, parsePkgJson, EmptyPkgJsonError };