Skip to content

Commit 36fc251

Browse files
committed
Implement outdated script
1 parent 1ef8150 commit 36fc251

File tree

5 files changed

+125
-5
lines changed

5 files changed

+125
-5
lines changed

.eslintrc.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ module.exports = {
8585
'max-statements': 'error',
8686
'max-statements-per-line': 'error',
8787
'multiline-comment-style': 'error',
88-
'multiline-ternary': 'error',
88+
'multiline-ternary': 'off',
8989
'new-cap': 'error',
9090
'new-parens': 'error',
9191
'newline-after-var': 'off',
@@ -122,7 +122,7 @@ module.exports = {
122122
'no-lone-blocks': 'error',
123123
'no-lonely-if': 'error',
124124
'no-loop-func': 'error',
125-
'no-magic-numbers': 'error',
125+
'no-magic-numbers': ['error', { ignore: [-1, -0, 1] }],
126126
'no-mixed-operators': 'error',
127127
'no-mixed-requires': 'error',
128128
'no-multi-assign': 'error',

gulpfile.js

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
const path = require('path');
44
const gulp = require('gulp');
5+
const log = require('fancy-log');
56
const glob = require('glob');
67
const ejs = require('gulp-ejs');
78
const zip = require('gulp-zip');
89
const mergeStream = require('merge-stream');
9-
const { formatVersionFolder } = require('./utility');
10+
const { formatVersionFolder, compareStrings } = require('./utility');
1011

1112
const { dependencies } = require('./package.json');
1213

@@ -52,3 +53,96 @@ libraries.forEach(library =>
5253
const libraryTaskNames = libraries.map(l => l.path);
5354

5455
gulp.task('default', libraryTaskNames);
56+
57+
gulp.task('outdated', () => {
58+
const packageJson = require('package-json');
59+
const semver = require('semver');
60+
const cliui = require('cliui');
61+
62+
const allUpgradesPromises = Object.keys(dependencies).map(name => {
63+
const currentVersion = dependencies[name];
64+
65+
const packageUpgrades = packageJson(name, { allVersions: true }).then(
66+
({ versions }) =>
67+
Object.keys(versions)
68+
.filter(version => semver.gt(version, currentVersion))
69+
.sort(semver.compare)
70+
.reduce(
71+
(upgrades, version) =>
72+
upgrades.set(
73+
semver.diff(version, currentVersion),
74+
version
75+
),
76+
new Map()
77+
)
78+
);
79+
80+
return packageUpgrades.then(upgrades => ({
81+
name,
82+
upgrades,
83+
}));
84+
});
85+
86+
Promise.all(allUpgradesPromises).then(allUpgrades => {
87+
const validUpgrades = allUpgrades
88+
.filter(({ upgrades }) => upgrades.size > 0)
89+
.sort(({ name: a }, { name: b }) => compareStrings(a, b));
90+
91+
if (validUpgrades.length === 0) {
92+
log.warn(`All ${allUpgrades.length} packages up-to-date`);
93+
94+
return;
95+
}
96+
97+
const ui = cliui();
98+
ui.div(
99+
{
100+
text: 'Name',
101+
align: 'left',
102+
border: true,
103+
},
104+
{
105+
text: 'Patch',
106+
align: 'right',
107+
border: true,
108+
},
109+
{
110+
text: 'Minor',
111+
align: 'right',
112+
border: true,
113+
},
114+
{
115+
text: 'Major',
116+
align: 'right',
117+
border: true,
118+
}
119+
);
120+
validUpgrades.forEach(({ name, upgrades }) =>
121+
ui.div(
122+
{
123+
text: name,
124+
align: 'left',
125+
padding: [0, 0, 0, 1],
126+
},
127+
{
128+
text: upgrades.get('patch') || '',
129+
align: 'right',
130+
padding: [0, 1, 0, 0],
131+
},
132+
{
133+
text: upgrades.get('minor') || '',
134+
align: 'right',
135+
padding: [0, 1, 0, 0],
136+
},
137+
{
138+
text: upgrades.get('major') || '',
139+
align: 'right',
140+
padding: [0, 1, 0, 0],
141+
}
142+
)
143+
);
144+
145+
log.info(`
146+
${ui.toString()}`);
147+
});
148+
});

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
],
88
"scripts": {
99
"package": "gulp",
10+
"outdated": "gulp outdated",
1011
"new": "yo ./_new"
1112
},
1213
"dependencies": {
@@ -76,13 +77,16 @@
7677
},
7778
"devDependencies": {
7879
"chalk": "^2.4.1",
80+
"cliui": "4.1.0",
81+
"fancy-log": "1.3.2",
7982
"glob": "^7.1.2",
8083
"globby": "^8.0.1",
8184
"gulp": "^3.9.1",
8285
"gulp-ejs": "^3.1.3",
8386
"gulp-zip": "^4.1.0",
8487
"merge-stream": "^1.0.1",
8588
"package-json": "^4.0.1",
89+
"semver": "5.5.0",
8690
"yeoman-generator": "^2.0.5",
8791
"yo": "^2.0.2"
8892
}

utility.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,18 @@ module.exports = {
99
.map(n => n.padStart(versionFolderPadding, '0'))
1010
.join('_');
1111
},
12+
13+
compareStrings(a, b) {
14+
const upperA = a ? a.toUpperCase() : a;
15+
const upperB = b ? b.toUpperCase() : b;
16+
if (upperA < upperB) {
17+
return -1;
18+
}
19+
20+
if (upperA > upperB) {
21+
return 1;
22+
}
23+
24+
return 0;
25+
},
1226
};

yarn.lock

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,14 @@ clipboard@1.7.1:
575575
select "^1.1.2"
576576
tiny-emitter "^2.0.0"
577577

578+
cliui@4.1.0:
579+
version "4.1.0"
580+
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
581+
dependencies:
582+
string-width "^2.1.1"
583+
strip-ansi "^4.0.0"
584+
wrap-ansi "^2.0.0"
585+
578586
clone-buffer@^1.0.0:
579587
version "1.0.0"
580588
resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
@@ -1220,7 +1228,7 @@ extsprintf@1.3.0, extsprintf@^1.2.0:
12201228
version "1.3.0"
12211229
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
12221230

1223-
fancy-log@^1.1.0:
1231+
fancy-log@1.3.2, fancy-log@^1.1.0:
12241232
version "1.3.2"
12251233
resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1"
12261234
dependencies:
@@ -3957,7 +3965,7 @@ semver-truncate@^1.0.0:
39573965
dependencies:
39583966
semver "^5.3.0"
39593967

3960-
"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0:
3968+
"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0:
39613969
version "5.5.0"
39623970
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
39633971

0 commit comments

Comments
 (0)