Skip to content

Commit

Permalink
[Tests] add npm run lint
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Feb 21, 2019
1 parent 4b98dd7 commit 5eff582
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 20 deletions.
27 changes: 27 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"root": true,
"extends": "@ljharb",
"parserOptions": {
"ecmaVersion": "2018"
},
"env": {
"es6": true
},
"rules": {
"consistent-return": 1,
"dot-notation": [2, { "allowKeywords": true }],
"func-name-matching": 0,
"max-nested-callbacks": 0,
"max-params": [2, 4],
"no-console": 0,
"sort-keys": 0,
},
"overrides": [
{
"files": "test*",
"rules": {
"max-nested-callbacks": 0,
},
},
],
}
16 changes: 11 additions & 5 deletions bin.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,33 @@ const { filename } = finder(process.cwd()).next();

const getLockfile = require('./getLockfile');

const { argv: { output, date, package: pkg } } = require('yargs')
const {
argv: {
output,
date,
'package': pkg
}
} = require('yargs')
.help()
.option('date', {
type: 'string',
describe: '“now”, or a date (same format as `new Date()`)',
demandOption: true,
coerce(arg) { return arg === 'now' ? arg : new Date(arg); },
coerce: function (arg) { return arg === 'now' ? arg : new Date(arg); }
})
.option('package', {
type: 'string',
describe: 'path to a `package.json` file',
normalize: true,
coerce(arg) { return path.resolve(arg); },
coerce: function (arg) { return path.resolve(arg); }
})
.default('package', filename, path.relative(process.cwd(), filename))
.option('output', {
alias: 'o',
describe: 'output file path',
normalize: true,
demandOption: true,
})
demandOption: true
});

getLockfile(pkg, date === 'now' ? undefined : date, console.log.bind(console))
.then(lockfile => writeFile(output, lockfile))
Expand Down
11 changes: 7 additions & 4 deletions getLockfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,14 @@ module.exports = function getLockfile(packageFile, date, logger = () => {}) {
return Promise.all([tmpDirP, copyPkg]).then(([tmpDir]) => new Promise((resolve, reject) => {
const PATH = path.join(tmpDir, '../node_modules/.bin');
logger(chalk.blue(`Running npm install to create lockfile for ${dateStr}...`));
exec(`PATH=${PATH}:\$PATH npm install --package-lock-only --before=${dateStr}`, { cwd: tmpDir }, (err) => {
if (err) { reject(err); }
else { resolve(tmpDir); }
exec(`PATH=${PATH}:$PATH npm install --package-lock-only --before=${dateStr}`, { cwd: tmpDir }, err => {
if (err) {
reject(err);
} else {
resolve(tmpDir);
}
});
})).then((tmpDir) => {
})).then(tmpDir => {
logger(chalk.blue(`Reading lockfile contents for ${dateStr}...`));
const lockfile = path.join(tmpDir, 'package-lock.json');
return readFile(lockfile, { encoding: 'utf-8' });
Expand Down
30 changes: 19 additions & 11 deletions getProjectTempDir.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,28 @@ const writeFile = promisify(require('fs').writeFile);

const npmNeeded = '^6.9.0-0';
const pkgContents = {
private: true,
'private': true,
name: 'npm-jail',
dependencies: {
npm: npmNeeded,
npm: npmNeeded
}
};

const cleanupHandlers = [];
function finalCleanup() {
const finalCleanup = function finalCleanup() {
for (let i = 0; i < cleanupHandlers.length; ++i) {
cleanupHandlers[i]();
}
}
};

let rootTempDir;
function getRootTempDir(logger = () => {}) {
const getRootTempDir = function getRootTempDir(logger = () => {}) {
if (!rootTempDir) {
logger(chalk.blue('Creating root temp directory, to hold temporary lockfiles...'));
rootTempDir = new Promise((resolve, reject) => tmp.dir((err, tmpDir, cleanup) => {
if (err) { return reject(err); }
if (err) {
return reject(err);
}
resolve(tmpDir);
cleanupHandlers.push(cleanup);
nodeCleanup(finalCleanup);
Expand All @@ -44,9 +46,13 @@ function getRootTempDir(logger = () => {}) {
path.join(tmpDir, 'package.json'),
JSON.stringify(pkgContents)
).then(() => new Promise((resolve, reject) => {
cleanupHandlers.unshift(() => { rimraf.sync(path.join(tmpDir, '*')); });
exec(`npm install --no-package-lock --silent >/dev/null`, { cwd: tmpDir }, (err) => {
if (err) { return reject(err); }
cleanupHandlers.unshift(() => {
rimraf.sync(path.join(tmpDir, '*'));
});
exec('npm install --no-package-lock --silent >/dev/null', { cwd: tmpDir }, err => {
if (err) {
return reject(err);
}
resolve(tmpDir);
});
}));
Expand All @@ -55,13 +61,15 @@ function getRootTempDir(logger = () => {}) {
});
}
return rootTempDir;
}
};

module.exports = function getProjectTempDir(logger = undefined) {
return getRootTempDir(logger).then(rootDir => {
const projectDir = path.join(rootDir, 'XXXXXX');
return new Promise((resolve, reject) => tmp.dir({ template: projectDir }, (err, tmpDir, cleanup) => {
if (err) { return reject(err); }
if (err) {
return reject(err);
}
resolve(tmpDir);
cleanupHandlers.unshift(cleanup);
}));
Expand Down
7 changes: 7 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
"description": "Safely generate an npm lockfile and output it to the filename of your choice.",
"bin": "./bin.js",
"scripts": {
"lint": "eslint .",
"pretest": "npm run lint",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
Expand Down Expand Up @@ -38,5 +40,10 @@
},
"engines": {
"node": ">= 6"
},
"devDependencies": {
"@ljharb/eslint-config": "^13.1.1",
"eslint": "^5.14.1",
"tape": "^4.10.1"
}
}

0 comments on commit 5eff582

Please sign in to comment.