UNPKG

1.92 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const { resolve } = require('path');
4
5const npmCheck = require('npm-check');
6
7const { asyncForEach, isDirectory, readDir, readJson } = require('./utils/utils');
8
9const ignoreDirectories = {
10 '.cache': true,
11 '.git': true,
12 '.idea': true,
13 '_volumes': true,
14 'node_modules': true
15};
16
17async function walkRec(dir) {
18 const names = await readDir(resolve(dir));
19 if (names.includes('package.json')) {
20 const path = resolve(dir, 'package.json');
21 const json = await readJson(path);
22 if (json.dependencies) {
23 const state = await npmCheck({ cwd: dir });
24 const packages = state
25 .get('packages')
26 .filter(({ bump, packageWanted }) => bump && packageWanted)
27 .sort((pa, pb) => {
28 const { devDependency: da, moduleName: na } = pa;
29 const { devDependency: db, moduleName: nb } = pb;
30 if (da === db) { return +(na > nb) || +(na === nb) - 1; }
31 else if (da && !db) { return -1; }
32 else { return 1; }
33 });
34 if (packages.length) {
35 console.log(`\n# ${path}:`);
36 packages.forEach((spec) => {
37 const { bump, devDependency, homepage, latest, moduleName, packageWanted } = spec;
38 const devType = devDependency ? 'D' : 'P';
39 //const url = `https://www.npmjs.com/package/${moduleName}`;
40 console.log(`- (${devType}) ${moduleName} - ${packageWanted} >> ${latest} - ${homepage}`);
41 });
42 }
43 return;
44 }
45 }
46 await asyncForEach(readDir(dir), async (name) => {
47 const subdir = resolve(dir, name);
48 if ((await isDirectory(subdir)) && !ignoreDirectories[name]) {
49 await walkRec(subdir);
50 }
51 });
52}
53
54// -- CLI --------------- --- -- -
55
56const path = resolve(process.argv[2] || '../');
57console.log(`Checking for outdated dependencies in ${path} ...`);
58walkRec(path)
59 .catch((error) => {
60 console.error(error);
61 process.exit(1);
62 });