From a0704712b0e7d93498395fd64544e3f6880d722a Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Fri, 22 Feb 2019 13:18:55 -0800 Subject: [PATCH] [breaking] `getLockfile`/`getProjectTempDir`: take `logger` and `npmNeeded` as object options --- bin.js | 2 +- getLockfile.js | 4 ++-- getProjectTempDir.js | 22 ++++++++++------------ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/bin.js b/bin.js index 3ea6e2c..022cead 100755 --- a/bin.js +++ b/bin.js @@ -46,7 +46,7 @@ const { demandOption: true }); -getLockfile(pkg, date === 'now' ? undefined : date, console.log.bind(console)) +getLockfile(pkg, date === 'now' ? undefined : date, { logger: console.log.bind(console), npmNeeded: '^6.9.0-0' }) .then(lockfile => writeFile(output, lockfile)) .then(() => { console.log(chalk.green('Lockfile contents written!')); }) .catch(err => console.error(err)); diff --git a/getLockfile.js b/getLockfile.js index d39b48f..2e90e22 100644 --- a/getLockfile.js +++ b/getLockfile.js @@ -11,14 +11,14 @@ const readFile = promisify(require('fs').readFile); const getProjectTempDir = require('./getProjectTempDir'); -module.exports = function getLockfile(packageFile, date, logger = () => {}) { +module.exports = function getLockfile(packageFile, date, { npmNeeded, logger = () => {} } = {}) { if (typeof packageFile !== 'string' || packageFile.length === 0) { return Promise.reject(chalk.red(`\`packageFile\` must be a non-empty string; got ${inspect(packageFile)}`)); } if (typeof date !== 'undefined' && !new Date(date).getTime()) { return Promise.reject(chalk.red(`\`date\` must be a valid Date format if provided; got ${inspect(date)}`)); } - const tmpDirP = getProjectTempDir(); + const tmpDirP = getProjectTempDir({ npmNeeded, logger }); const npmRC = path.join(path.dirname(packageFile), '.npmrc'); const copyPkg = tmpDirP.then(tmpDir => { logger(chalk.blue(`Creating \`package.json\` in temp dir for ${date || '“now”'} lockfile`)); diff --git a/getProjectTempDir.js b/getProjectTempDir.js index f3bb4c1..f10a4b4 100644 --- a/getProjectTempDir.js +++ b/getProjectTempDir.js @@ -11,15 +11,6 @@ const path = require('path'); const { exec, execSync } = require('child_process'); const writeFile = promisify(require('fs').writeFile); -const npmNeeded = '^6.9.0-0'; -const pkgContents = { - 'private': true, - name: 'npm-jail', - dependencies: { - npm: npmNeeded - } -}; - const cleanupHandlers = []; const finalCleanup = function finalCleanup() { for (let i = 0; i < cleanupHandlers.length; ++i) { @@ -28,7 +19,7 @@ const finalCleanup = function finalCleanup() { }; let rootTempDir; -const getRootTempDir = function getRootTempDir(logger = () => {}) { +const getRootTempDir = function getRootTempDir(npmNeeded, logger = () => {}) { if (!rootTempDir) { logger(chalk.blue('Creating root temp directory, to hold temporary lockfiles...')); rootTempDir = new Promise((resolve, reject) => tmp.dir((err, tmpDir, cleanup) => { @@ -42,6 +33,13 @@ const getRootTempDir = function getRootTempDir(logger = () => {}) { var npmV = execSync('npm --version', { encoding: 'utf-8', cwd: tmpDir }); logger(`${chalk.blue('Checking npm version:')} \`npm --version\` -> v${npmV}`); if (!semver.satisfies(npmV, npmNeeded)) { + const pkgContents = { + 'private': true, + name: 'npm-jail', + dependencies: { + npm: npmNeeded + } + }; return writeFile( path.join(tmpDir, 'package.json'), JSON.stringify(pkgContents) @@ -63,8 +61,8 @@ const getRootTempDir = function getRootTempDir(logger = () => {}) { return rootTempDir; }; -module.exports = function getProjectTempDir(logger = undefined) { - return getRootTempDir(logger).then(rootDir => { +module.exports = function getProjectTempDir({ npmNeeded = '^6.9.0-0', logger = undefined } = {}) { + return getRootTempDir(npmNeeded, logger).then(rootDir => { const projectDir = path.join(rootDir, 'XXXXXX'); return new Promise((resolve, reject) => tmp.dir({ template: projectDir }, (err, tmpDir, cleanup) => { if (err) {