1 | const getLastVersion = require('latest-version');
|
2 | const boxen = require('boxen');
|
3 | const chalk = require('chalk');
|
4 | const compareVersions = require('compare-versions');
|
5 | const spawn = require('./util/spawn-command');
|
6 | const config = require('../bin/config');
|
7 | const path = require('path');
|
8 |
|
9 | const getBoxenListString = (list) => {
|
10 | const str = list.filter(item => item.isUpdate).map(item => {
|
11 | return `${chalk.red(item.name)}: ${chalk.gray(item.preVersion || item.version)} -> ${chalk.yellow(item.version)}`
|
12 | })
|
13 | return boxenStr = `
|
14 | Packages Last Version List:
|
15 |
|
16 | ${str.join('\n')}
|
17 | `
|
18 | }
|
19 |
|
20 | const updateNotify = async (pkgList, show = false) => {
|
21 | const list = pkgList;
|
22 | let isUpdate = show;
|
23 | for (let i = 0; i < pkgList.length; i++) {
|
24 | const pkg = pkgList[i];
|
25 | const lastVersion = await getLastVersion(pkg.name);
|
26 | if (compareVersions.compare(lastVersion, pkg.version, '>')) {
|
27 | list[i] = {
|
28 | version: lastVersion,
|
29 | preVersion: pkg.version,
|
30 | name: pkg.name,
|
31 | isUpdate: true
|
32 | }
|
33 | isUpdate = true;
|
34 | }
|
35 | }
|
36 |
|
37 |
|
38 | if (isUpdate) {
|
39 | console.log(boxen(
|
40 | getBoxenListString(list),
|
41 | {
|
42 | borderColor: 'blue',
|
43 | padding: {
|
44 | left: 2,
|
45 | right: 2
|
46 | }
|
47 | }))
|
48 | }
|
49 |
|
50 | return {
|
51 | list,
|
52 | isUpdate
|
53 | };
|
54 | }
|
55 |
|
56 | const updateInstall = async (pkgList) => {
|
57 | const { list, isUpdate } = await updateNotify(pkgList);
|
58 | list.forEach(pkg => {
|
59 | if (pkg.isUpdate) {
|
60 | spawn.spawnCommandSync(config.npmClient || 'tnpm', ['install', `${pkg.name}@${pkg.version}`], {
|
61 | cwd: path.resolve(__dirname, '../../../')
|
62 | })
|
63 | }
|
64 | })
|
65 |
|
66 | if (isUpdate) {
|
67 | console.log(boxen(
|
68 | `Checking and Updating ${chalk.hex('#fd6dc0')(pkgList.map(item => item.name).join(','))} Finishing`,
|
69 | {
|
70 | borderColor: '#455a66',
|
71 | padding: {
|
72 | left: 2,
|
73 | right: 2
|
74 | }
|
75 | }));
|
76 | }
|
77 |
|
78 |
|
79 | return {
|
80 | list,
|
81 | isUpdate
|
82 | }
|
83 | }
|
84 |
|
85 | module.exports = {
|
86 | updateNotify,
|
87 | updateInstall
|
88 | } |
\ | No newline at end of file |