node-power-user 0.0.29 → 0.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,7 +49,9 @@ Note: you may have to run cli commands with `npx npu <command>` if you install t
49
49
  * `npu bump 3`: Bump the first number (`major` version).
50
50
  * `npu outdated`: Compare the versions of installed modules to those in your package.json
51
51
  * `npu global`: List all global packages for all versions of Node.js on your machine (must use NVM).
52
- * `npu --wait`: Wait the specified amount of time in milliseconds.
52
+ ### Flags
53
+ * `--wait`: Wait the specified amount of time in milliseconds.
54
+ * `--debug`: Log the commands and flags before they are executed
53
55
 
54
56
  ## Final Words
55
57
  If you are still having difficulty, we would love for you to post a question to [the Node Power User issues page](https://github.com/itw-creative-works/node-power-user/issues). It is much easier to answer questions that include your code and relevant files! So if you can provide them, we'd be extremely grateful (and more likely to help you find the answer!)
package/bin/npu CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
- let Main = new (require('../dist/index.js'))(process.argv);
2
+ const argv = require('yargs').argv;
3
+ const Main = new (require('../dist/index.js'))(argv);
3
4
  (async function() {
4
5
  'use strict';
5
- await Main.process(process.argv);
6
+ await Main.process(argv);
6
7
  }());
package/dist/index.js CHANGED
@@ -17,6 +17,7 @@ const { isEqual } = require('lodash');
17
17
  const semverIsEqual = require('semver/functions/eq')
18
18
  const semverCoerce = require('semver/functions/coerce')
19
19
  const table = require('table').table;
20
+ const ProgressBar = require('cli-progress');
20
21
  const Npm = require('npm-api');
21
22
  const os = require('os');
22
23
 
@@ -26,11 +27,11 @@ function Main() {
26
27
 
27
28
  }
28
29
 
29
- Main.prototype.process = async function (args) {
30
- const self = this;
31
- args = args || process.argv
32
- self.options = {};
33
- self.argv = argv;
30
+ Main.prototype.process = async function (options) {
31
+ const self = this;
32
+ self.options = options || {};
33
+
34
+ // console.log('--process.env', process.env);
34
35
 
35
36
  try {
36
37
  self.npu_packageJSON = require('../package.json');
@@ -42,6 +43,8 @@ const self = this;
42
43
  self.proj_path = process.cwd();
43
44
  self.proj_packageJSONPath = path.resolve(self.proj_path, './package.json');
44
45
  self.proj_packageJSON = require(self.proj_packageJSONPath);
46
+ self.proj_packageJSON.allDependencies = _.merge({}, self.proj_packageJSON.peerDependencies, self.proj_packageJSON.devDependencies, self.proj_packageJSON.dependencies);
47
+ self.proj_packageJSON.allDependenciesKeys = Object.keys(self.proj_packageJSON.allDependencies);
45
48
  } catch (e) {
46
49
  self.proj_packageJSON = {
47
50
  name: 'Unknown Name',
@@ -49,36 +52,50 @@ const self = this;
49
52
  dependencies: {},
50
53
  devDependencies: {},
51
54
  peerDependencies: {},
55
+ allDependencies: {},
52
56
  }
53
57
  console.error(chalk.red(`This project does not contain a valid package.json file!: \n${e}`));
54
58
  }
55
59
 
56
- if (Array.isArray(args)) {
57
- for (var i = 0; i < args.length; i++) {
58
- self.options[args[i]] = true;
59
- }
60
- } else {
61
- Object.keys(args)
62
- .forEach((arg, i) => {
63
- self.options[arg] = args[arg];
64
- });
65
- }
60
+ // console.log('---args', args);
61
+ // if (Array.isArray(args)) {
62
+ // for (var i = 0; i < args.length; i++) {
63
+ // self.options[args[i]] = true;
64
+ // }
65
+ // } else {
66
+ // Object.keys(args)
67
+ // .forEach((arg, i) => {
68
+ // self.options[arg] = args[arg];
69
+ // });
70
+ // }
71
+ Object.keys(argv)
72
+ .forEach(arg => {
73
+ self.options[arg] = argv[arg]
74
+ });
66
75
 
67
- if (self.options.d || self.options.debug || self.options['-d'] || self.options['--debug']) {
68
- console.log('options:', self.options);
76
+ if (self.options.d || self.options.debug || process.env.NPU_LOG === 'true') {
77
+ console.log('argv', argv);
78
+ console.log('options', self.options);
69
79
  }
70
80
 
71
- if (self.options.v || self.options.version || self.options['-v'] || self.options['--version']) {
81
+ if (self.options.wait) {
82
+ const time = parseInt(typeof self.options.wait === 'number' ? self.options.wait : 1000);
83
+ self.log(chalk.blue(`Waiting ${time}...`));
84
+ await powertools.wait(time);
85
+ self.log(chalk.green(`Done waiting`));
86
+ }
87
+
88
+ if (self.options.v || self.options.version) {
72
89
  self.log(chalk.blue(`Node Power User is v${chalk.bold(self.npu_packageJSON.version)}`));
73
90
  return self.npu_packageJSON.version;
74
91
  }
75
92
 
76
- if (self.options.pv || self.options['project-version'] || self.options.project) {
93
+ if (self.options.pv || self.options.project || self.options['project-version']) {
77
94
  self.log(chalk.blue(`The current project (${chalk.bold(self.proj_packageJSON.name)}) is v${chalk.bold(self.proj_packageJSON.version)}`));
78
95
  return self.proj_packageJSON.version;
79
96
  }
80
97
 
81
- if (self.options.lp || self.options.listpackages || self.options['-lp'] || self.options['--listpackages']) {
98
+ if (self.options.lp || self.options.listpackages || self.options['list-packages']) {
82
99
  self.log(chalk.blue.bold(`Dependencies:`));
83
100
 
84
101
  Object.keys(self.proj_packageJSON.dependencies || {})
@@ -105,7 +122,7 @@ const self = this;
105
122
  };
106
123
  }
107
124
 
108
- if (self.options.out || self.options.outdated || self.options.match || self.options['-o'] || self.options['--outdated'] || self.options['--match']) {
125
+ if (self.options.out || self.options.outdated || self.options.match) {
109
126
  // self.log(chalk.blue.bold(`Outdated:`));
110
127
  // self.log(chalk.green(`name: package = installed`));
111
128
 
@@ -115,23 +132,24 @@ const self = this;
115
132
 
116
133
  const config = {
117
134
  columnDefault: {
118
- width: 10,
135
+ // width: 10,
119
136
  },
120
137
  header: {
121
138
  alignment: 'center',
122
139
  content: 'Outdated and mismatched packages',
123
140
  },
124
- }
141
+ }
142
+ const progress = new ProgressBar.SingleBar({}, ProgressBar.Presets.shades_classic);
143
+ progress.start(self.proj_packageJSON.allDependenciesKeys.length, 0);
125
144
 
126
145
  const response = {};
127
146
 
128
- const depKeys = Object.keys(self.proj_packageJSON.dependencies || {});
129
-
130
147
  let bumpCommand = '';
131
-
132
- for (var i = 0; i < depKeys.length; i++) {
133
- const dep = depKeys[i];
134
- const packageVersion = _coerce(self.proj_packageJSON.dependencies[dep]);
148
+
149
+ for (var i = 0; i < self.proj_packageJSON.allDependenciesKeys.length; i++) {
150
+ progress.update(i);
151
+ const dep = self.proj_packageJSON.allDependenciesKeys[i];
152
+ const packageVersion = _coerce(self.proj_packageJSON.allDependencies[dep]);
135
153
  const installedVersion = _coerce(
136
154
  _getVersion(
137
155
  (await asyncCommand(`npm list ${dep} --depth=0 | grep ${dep}`))
@@ -183,6 +201,8 @@ const self = this;
183
201
  // .forEach((dep, i) => {
184
202
  // self.log(chalk.blue(`${dep} @ ${self.proj_packageJSON.devDependencies[dep]}`));
185
203
  // });
204
+
205
+ progress.stop();
186
206
 
187
207
  console.log(table(data, config));
188
208
 
@@ -207,7 +227,7 @@ const self = this;
207
227
  return response;
208
228
  }
209
229
 
210
- if (self.options.global || self.options['-g'] || self.options['--global']) {
230
+ if (self.options.global || self.options.g) {
211
231
  const parentPath = `/Users/${os.userInfo().username}/.nvm/versions/node`;
212
232
  const versions = jetpack.list(parentPath);
213
233
  const currentNode = process.versions.node;
@@ -229,17 +249,21 @@ const self = this;
229
249
 
230
250
  const config = {
231
251
  columnDefault: {
232
- width: 10,
252
+ // width: 10,
233
253
  },
234
254
  header: {
235
255
  alignment: 'center',
236
256
  content: `Global packages for v${parsed.version}`,
237
257
  },
238
- }
258
+ }
259
+ const progress = new ProgressBar.SingleBar({}, ProgressBar.Presets.shades_classic);
260
+ progress.start(modules.length, 0);
239
261
 
240
262
  response[parsed.version] = {};
241
263
 
242
264
  for (var j = 0; j < modules.length; j++) {
265
+ progress.update(i, 0);
266
+
243
267
  const mod = modules[j];
244
268
  const packagePath = path.resolve(lib, mod, 'package.json');
245
269
  try {
@@ -267,6 +291,8 @@ const self = this;
267
291
  }
268
292
  }
269
293
 
294
+ progress.stop();
295
+
270
296
  console.log(table(data, config));
271
297
 
272
298
  } catch (e) {
@@ -278,11 +304,11 @@ const self = this;
278
304
  }
279
305
 
280
306
  if (self.options.clean) {
281
- const NPM_INSTALL_FLAG = self.options['--no-optional'] || self.options['-no-optional'] || self.options['no-optional'] ? '--no-optional' : ''
307
+ const NPM_INSTALL_FLAG = self.options['no-optional'] || self.options['nooptional'] ? '--no-optional' : ''
282
308
  const NPM_CLEAN = `rm -fr node_modules && rm -fr package-lock.json && npm cache clean --force && npm install ${NPM_INSTALL_FLAG} && npm rb`;
283
309
 
284
310
  self.log(chalk.blue(`Running: ${NPM_CLEAN}...`));
285
-
311
+
286
312
  return await asyncCommand(NPM_CLEAN)
287
313
  .then(r => {
288
314
  self.log(chalk.green(`Finished cleaning`));
@@ -296,18 +322,12 @@ const self = this;
296
322
  return bump(self);
297
323
  }
298
324
 
299
- if (self.options['wait'] || self.options['--wait']) {
300
- const time = parseInt(self.options['wait'] || self.options['--wait'] || 1000);
301
- self.log(chalk.blue(`Waiting ${time}...`));
302
- await powertools.wait(time);
303
- self.log(chalk.green(`Done waiting`));
304
- }
305
325
  };
306
326
 
307
327
  Main.prototype.log = function () {
308
328
  const self = this;
309
329
 
310
- if (self.options.lo !== false) {
330
+ if (self.options.log !== false) {
311
331
  console.log(...arguments);
312
332
  }
313
333
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-power-user",
3
- "version": "0.0.29",
3
+ "version": "0.0.31",
4
4
  "description": "Easy tools for every Node.js developer!",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -10,7 +10,8 @@
10
10
  },
11
11
  "scripts": {
12
12
  "test": "npm run prepare && ./node_modules/mocha/bin/mocha test/ --recursive --timeout=10000",
13
- "start": "npm run prepare && node -e 'new (require(`./dist/index.js`))().process()'",
13
+ "start": "npm run prepare && ./bin/npu",
14
+ "help": "echo 'npm start -- -v'",
14
15
  "prepare": "node -e 'require(`prepare-package`)()'"
15
16
  },
16
17
  "repository": {
@@ -30,6 +31,7 @@
30
31
  "homepage": "https://itwcreativeworks.com",
31
32
  "dependencies": {
32
33
  "chalk": "^4.1.2",
34
+ "cli-progress": "^3.11.2",
33
35
  "fs-jetpack": "^4.3.1",
34
36
  "inquirer": "^8.2.4",
35
37
  "json5": "^2.2.1",
@@ -49,4 +51,4 @@
49
51
  "mocha": "^8.4.0",
50
52
  "prepare-package": "^0.0.16"
51
53
  }
52
- }
54
+ }
package/src/index.js CHANGED
@@ -17,6 +17,7 @@ const { isEqual } = require('lodash');
17
17
  const semverIsEqual = require('semver/functions/eq')
18
18
  const semverCoerce = require('semver/functions/coerce')
19
19
  const table = require('table').table;
20
+ const ProgressBar = require('cli-progress');
20
21
  const Npm = require('npm-api');
21
22
  const os = require('os');
22
23
 
@@ -26,11 +27,11 @@ function Main() {
26
27
 
27
28
  }
28
29
 
29
- Main.prototype.process = async function (args) {
30
- const self = this;
31
- args = args || process.argv
32
- self.options = {};
33
- self.argv = argv;
30
+ Main.prototype.process = async function (options) {
31
+ const self = this;
32
+ self.options = options || {};
33
+
34
+ // console.log('--process.env', process.env);
34
35
 
35
36
  try {
36
37
  self.npu_packageJSON = require('../package.json');
@@ -42,6 +43,8 @@ const self = this;
42
43
  self.proj_path = process.cwd();
43
44
  self.proj_packageJSONPath = path.resolve(self.proj_path, './package.json');
44
45
  self.proj_packageJSON = require(self.proj_packageJSONPath);
46
+ self.proj_packageJSON.allDependencies = _.merge({}, self.proj_packageJSON.peerDependencies, self.proj_packageJSON.devDependencies, self.proj_packageJSON.dependencies);
47
+ self.proj_packageJSON.allDependenciesKeys = Object.keys(self.proj_packageJSON.allDependencies);
45
48
  } catch (e) {
46
49
  self.proj_packageJSON = {
47
50
  name: 'Unknown Name',
@@ -49,36 +52,50 @@ const self = this;
49
52
  dependencies: {},
50
53
  devDependencies: {},
51
54
  peerDependencies: {},
55
+ allDependencies: {},
52
56
  }
53
57
  console.error(chalk.red(`This project does not contain a valid package.json file!: \n${e}`));
54
58
  }
55
59
 
56
- if (Array.isArray(args)) {
57
- for (var i = 0; i < args.length; i++) {
58
- self.options[args[i]] = true;
59
- }
60
- } else {
61
- Object.keys(args)
62
- .forEach((arg, i) => {
63
- self.options[arg] = args[arg];
64
- });
65
- }
60
+ // console.log('---args', args);
61
+ // if (Array.isArray(args)) {
62
+ // for (var i = 0; i < args.length; i++) {
63
+ // self.options[args[i]] = true;
64
+ // }
65
+ // } else {
66
+ // Object.keys(args)
67
+ // .forEach((arg, i) => {
68
+ // self.options[arg] = args[arg];
69
+ // });
70
+ // }
71
+ Object.keys(argv)
72
+ .forEach(arg => {
73
+ self.options[arg] = argv[arg]
74
+ });
66
75
 
67
- if (self.options.d || self.options.debug || self.options['-d'] || self.options['--debug']) {
68
- console.log('options:', self.options);
76
+ if (self.options.d || self.options.debug || process.env.NPU_LOG === 'true') {
77
+ console.log('argv', argv);
78
+ console.log('options', self.options);
69
79
  }
70
80
 
71
- if (self.options.v || self.options.version || self.options['-v'] || self.options['--version']) {
81
+ if (self.options.wait) {
82
+ const time = parseInt(typeof self.options.wait === 'number' ? self.options.wait : 1000);
83
+ self.log(chalk.blue(`Waiting ${time}...`));
84
+ await powertools.wait(time);
85
+ self.log(chalk.green(`Done waiting`));
86
+ }
87
+
88
+ if (self.options.v || self.options.version) {
72
89
  self.log(chalk.blue(`Node Power User is v${chalk.bold(self.npu_packageJSON.version)}`));
73
90
  return self.npu_packageJSON.version;
74
91
  }
75
92
 
76
- if (self.options.pv || self.options['project-version'] || self.options.project) {
93
+ if (self.options.pv || self.options.project || self.options['project-version']) {
77
94
  self.log(chalk.blue(`The current project (${chalk.bold(self.proj_packageJSON.name)}) is v${chalk.bold(self.proj_packageJSON.version)}`));
78
95
  return self.proj_packageJSON.version;
79
96
  }
80
97
 
81
- if (self.options.lp || self.options.listpackages || self.options['-lp'] || self.options['--listpackages']) {
98
+ if (self.options.lp || self.options.listpackages || self.options['list-packages']) {
82
99
  self.log(chalk.blue.bold(`Dependencies:`));
83
100
 
84
101
  Object.keys(self.proj_packageJSON.dependencies || {})
@@ -105,7 +122,7 @@ const self = this;
105
122
  };
106
123
  }
107
124
 
108
- if (self.options.out || self.options.outdated || self.options.match || self.options['-o'] || self.options['--outdated'] || self.options['--match']) {
125
+ if (self.options.out || self.options.outdated || self.options.match) {
109
126
  // self.log(chalk.blue.bold(`Outdated:`));
110
127
  // self.log(chalk.green(`name: package = installed`));
111
128
 
@@ -115,23 +132,24 @@ const self = this;
115
132
 
116
133
  const config = {
117
134
  columnDefault: {
118
- width: 10,
135
+ // width: 10,
119
136
  },
120
137
  header: {
121
138
  alignment: 'center',
122
139
  content: 'Outdated and mismatched packages',
123
140
  },
124
- }
141
+ }
142
+ const progress = new ProgressBar.SingleBar({}, ProgressBar.Presets.shades_classic);
143
+ progress.start(self.proj_packageJSON.allDependenciesKeys.length, 0);
125
144
 
126
145
  const response = {};
127
146
 
128
- const depKeys = Object.keys(self.proj_packageJSON.dependencies || {});
129
-
130
147
  let bumpCommand = '';
131
-
132
- for (var i = 0; i < depKeys.length; i++) {
133
- const dep = depKeys[i];
134
- const packageVersion = _coerce(self.proj_packageJSON.dependencies[dep]);
148
+
149
+ for (var i = 0; i < self.proj_packageJSON.allDependenciesKeys.length; i++) {
150
+ progress.update(i);
151
+ const dep = self.proj_packageJSON.allDependenciesKeys[i];
152
+ const packageVersion = _coerce(self.proj_packageJSON.allDependencies[dep]);
135
153
  const installedVersion = _coerce(
136
154
  _getVersion(
137
155
  (await asyncCommand(`npm list ${dep} --depth=0 | grep ${dep}`))
@@ -183,6 +201,8 @@ const self = this;
183
201
  // .forEach((dep, i) => {
184
202
  // self.log(chalk.blue(`${dep} @ ${self.proj_packageJSON.devDependencies[dep]}`));
185
203
  // });
204
+
205
+ progress.stop();
186
206
 
187
207
  console.log(table(data, config));
188
208
 
@@ -207,7 +227,7 @@ const self = this;
207
227
  return response;
208
228
  }
209
229
 
210
- if (self.options.global || self.options['-g'] || self.options['--global']) {
230
+ if (self.options.global || self.options.g) {
211
231
  const parentPath = `/Users/${os.userInfo().username}/.nvm/versions/node`;
212
232
  const versions = jetpack.list(parentPath);
213
233
  const currentNode = process.versions.node;
@@ -229,17 +249,21 @@ const self = this;
229
249
 
230
250
  const config = {
231
251
  columnDefault: {
232
- width: 10,
252
+ // width: 10,
233
253
  },
234
254
  header: {
235
255
  alignment: 'center',
236
256
  content: `Global packages for v${parsed.version}`,
237
257
  },
238
- }
258
+ }
259
+ const progress = new ProgressBar.SingleBar({}, ProgressBar.Presets.shades_classic);
260
+ progress.start(modules.length, 0);
239
261
 
240
262
  response[parsed.version] = {};
241
263
 
242
264
  for (var j = 0; j < modules.length; j++) {
265
+ progress.update(i, 0);
266
+
243
267
  const mod = modules[j];
244
268
  const packagePath = path.resolve(lib, mod, 'package.json');
245
269
  try {
@@ -267,6 +291,8 @@ const self = this;
267
291
  }
268
292
  }
269
293
 
294
+ progress.stop();
295
+
270
296
  console.log(table(data, config));
271
297
 
272
298
  } catch (e) {
@@ -278,11 +304,11 @@ const self = this;
278
304
  }
279
305
 
280
306
  if (self.options.clean) {
281
- const NPM_INSTALL_FLAG = self.options['--no-optional'] || self.options['-no-optional'] || self.options['no-optional'] ? '--no-optional' : ''
307
+ const NPM_INSTALL_FLAG = self.options['no-optional'] || self.options['nooptional'] ? '--no-optional' : ''
282
308
  const NPM_CLEAN = `rm -fr node_modules && rm -fr package-lock.json && npm cache clean --force && npm install ${NPM_INSTALL_FLAG} && npm rb`;
283
309
 
284
310
  self.log(chalk.blue(`Running: ${NPM_CLEAN}...`));
285
-
311
+
286
312
  return await asyncCommand(NPM_CLEAN)
287
313
  .then(r => {
288
314
  self.log(chalk.green(`Finished cleaning`));
@@ -296,18 +322,12 @@ const self = this;
296
322
  return bump(self);
297
323
  }
298
324
 
299
- if (self.options['wait'] || self.options['--wait']) {
300
- const time = parseInt(self.options['wait'] || self.options['--wait'] || 1000);
301
- self.log(chalk.blue(`Waiting ${time}...`));
302
- await powertools.wait(time);
303
- self.log(chalk.green(`Done waiting`));
304
- }
305
325
  };
306
326
 
307
327
  Main.prototype.log = function () {
308
328
  const self = this;
309
329
 
310
- if (self.options.lo !== false) {
330
+ if (self.options.log !== false) {
311
331
  console.log(...arguments);
312
332
  }
313
333
  };