Created
May 3, 2018 19:16
-
-
Save rjdestigter/e673ccfcfff921d40d26246bfbb4ca60 to your computer and use it in GitHub Desktop.
Double check if lerna managed packages are up-to-date with versions and don't conflict with npm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const util = require('util') | |
const exec = util.promisify(require('child_process').exec) | |
const fs = require('fs') | |
const figures = require('figures') | |
const ansi = require('ansicolor').nice | |
const cmdList = 'find ./packages -type f -name package.json' | |
async function getPathOfPackageJsons() { | |
const { stdout, stderr } = await exec(cmdList) | |
if (stdout) { | |
const list = stdout.split('\n').filter(path => path && !path.match(/node_modules/)) | |
return list | |
} | |
throw Error('Unable to collection package.json file paths.') | |
} | |
const getPackageJsons = async () => { | |
const list = await getPathOfPackageJsons() | |
return list.reduce((acc, fileName) => { | |
const file = fs.readFileSync(fileName, 'utf8') | |
const json = JSON.parse(file) | |
acc[json.name] = json | |
return acc | |
}, {}) | |
} | |
async function main() { | |
const packages = await getPackageJsons() | |
// Check dependencies | |
Object.keys(packages).forEach(name => { | |
const pckg = packages[name] | |
const deps = pckg.dependencies | |
// console.log(pckg) | |
if (deps) { | |
console.log(ansi.lightCyan(`${pckg.name}`)) | |
Object.keys(deps) | |
.filter(dep => dep.match(/@NAMEOFYOURORGINISATION/)) | |
.forEach(dep => { | |
const used = deps[dep] | |
const av = packages[dep].version | |
const match = used.match(new RegExp(av)) | |
if (!match) { | |
console.log(`${pckg.name} depends on ${dep} and is using ${used} but ${av} is available.`) | |
} else { | |
console.log(`${dep} ` + ansi.green(figures.tick)) | |
} | |
}) | |
console.log('\n') | |
} | |
}) | |
console.log('\n\n') | |
const npmChecks = Object.keys(packages).map(name => { | |
const pckg = packages[name] | |
const version = pckg.version | |
return new Promise(async resolve => { | |
const { stdout, stderr } = exec(`npm view ${name} version`) | |
if (stdout && stdout !== version) { | |
resolve( | |
ansi.red('!!') + | |
`${pckg.name} has version ${version} but the published version is ${stdout}.` + | |
ansi.red(figures.cross) | |
) | |
} else { | |
resolve(`${pckg.name} ` + ansi.green(figures.tick)) | |
} | |
resolve('') | |
}) | |
}) | |
const checks = await Promise.all(npmChecks) | |
const list = checks.filter(c => !!c).forEach(logItem => console.log(logItem)) | |
} | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment