UNPKG

2.03 kBJavaScriptView Raw
1const getLastVersion = require('latest-version');
2const boxen = require('boxen');
3const chalk = require('chalk');
4const compareVersions = require('compare-versions');
5const spawn = require('./util/spawn-command');
6const config = require('../bin/config');
7const path = require('path');
8
9const 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 = `
14Packages Last Version List:
15
16${str.join('\n')}
17`
18}
19
20const 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
56const 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, '../../../') // target install to node_module: lib -> dingtalk-cli-pro -> node_module
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
85module.exports = {
86 updateNotify,
87 updateInstall
88}
\No newline at end of file