1 | #!/usr/bin/env node
|
2 | const fs = require("fs");
|
3 | const path = require("path");
|
4 | const childProcess = require("child_process");
|
5 | const chalk = require("chalk");
|
6 | const logError = message => {
|
7 | console.log(chalk.red("[Error]: " + message));
|
8 | };
|
9 | const logInfo = message => {
|
10 | console.log(chalk.blue("[Start]: " + message));
|
11 | };
|
12 | const logSuccess = message => {
|
13 | console.log(chalk.green("[Done]: " + message));
|
14 | };
|
15 |
|
16 | let global = "";
|
17 | let packagePath = path.resolve(process.cwd(), "package.json");
|
18 |
|
19 | if (!fs.existsSync(packagePath)) {
|
20 | logError("Cannot find package.json file in the current directory");
|
21 | process.exit(1);
|
22 | }
|
23 |
|
24 | const packageJson = require(packagePath);
|
25 | let ignorePkgs = [];
|
26 | const upgradePackages = async () => {
|
27 | if (packageJson["fscripts"]) {
|
28 | if (packageJson["fscripts"]["ignore-upgrade"]) {
|
29 | ignorePkgs = packageJson["fscripts"]["ignore-upgrade"];
|
30 | }
|
31 | }
|
32 | let upgraded = { before: {}, after: {} };
|
33 | for (let element of ["dependencies", "devDependencies", "peerDependencies"]) {
|
34 | if (packageJson[element]) {
|
35 | const packages = Object.keys(packageJson[element]);
|
36 | let packagesList = packages
|
37 | .filter(pkk => !ignorePkgs.includes(pkk))
|
38 | .map(pkk => {
|
39 | upgraded["before"][pkk] = packageJson[element][pkk];
|
40 | return pkk + "@latest";
|
41 | })
|
42 | .join(" ");
|
43 | let command = `yarn add ${packagesList}`;
|
44 | try {
|
45 |
|
46 | childProcess.execSync(command, {
|
47 | stdio: "inherit",
|
48 | env: Object.assign({}, process.env, {
|
49 | FORCE_COLOR: true,
|
50 | PATH: `${path.resolve("node_modules")}:${process.env.PATH}`
|
51 | })
|
52 | });
|
53 | const packageJsonAfter = JSON.parse(fs.readFileSync(packagePath));
|
54 | const packagesAfter = Object.keys(packageJsonAfter[element]);
|
55 | let packagesListAfter = packagesAfter
|
56 | .filter(pkk => !ignorePkgs.includes(pkk))
|
57 | .map(pkk => {
|
58 | upgraded["after"][pkk] = packageJsonAfter[element][pkk];
|
59 | return upgraded["before"][pkk] !== upgraded["after"][pkk]
|
60 | ? `Updated: ${pkk} from: ${upgraded["before"][pkk]} | to: ${
|
61 | upgraded["after"][pkk]
|
62 | }\n`
|
63 | : ``;
|
64 | })
|
65 | .join("");
|
66 | logSuccess(packagesListAfter);
|
67 | } catch (e) {
|
68 | logError(`${command} - ${e}`);
|
69 | }
|
70 | }
|
71 | }
|
72 | };
|
73 | module.exports = upgradePackages;
|