1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | 'use strict';
|
7 |
|
8 |
|
9 |
|
10 | function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
11 |
|
12 | const chalk = require('chalk');
|
13 | const ui = require('cliui')();
|
14 | const columnify = require('columnify');
|
15 | const iPipeTo = require('ipt');
|
16 | const {
|
17 | fetch
|
18 | } = require('./utils/promiseUtil');
|
19 | const {
|
20 | spawn
|
21 | } = require('child_process');
|
22 | const StringUtil = require('./utils/stringUtil');
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | module.exports.main = (() => {
|
31 | var _ref = _asyncToGenerator(function* (module = '') {
|
32 | if (!module) {
|
33 | throw chalk.redBright('No module provided');
|
34 | }
|
35 |
|
36 | let data;
|
37 | try {
|
38 | data = JSON.parse((yield fetch(`https://registry.npmjs.org/${module}`)));
|
39 | } catch (err) {
|
40 | console.log(chalk.redBright(err));
|
41 | }
|
42 |
|
43 |
|
44 | return {
|
45 | simple() {
|
46 | let list = parseToList(data).simple();
|
47 |
|
48 |
|
49 | return {
|
50 | default() {
|
51 | if (!list || list.length === 0) return;
|
52 |
|
53 | return list.forEach(i => console.log(i));
|
54 | },
|
55 | fuzzy() {
|
56 | if (!list || list.length === 0) return;
|
57 |
|
58 | return iPipeTo(list, {
|
59 | size: 20,
|
60 | autocomplete: true,
|
61 | message: ' '
|
62 | }).then(keys => {
|
63 | return keys.forEach((() => {
|
64 | var _ref2 = _asyncToGenerator(function* (key) {
|
65 | let cleansedKey = function () {
|
66 | let tail = key.split(' ')[1];
|
67 | let list = StringUtil.getRidOfColors(tail);
|
68 | list = StringUtil.getRidOfQuotationMarks(list);
|
69 | return list;
|
70 | }();
|
71 |
|
72 | spawn(`npm info ${cleansedKey} | less -r`, {
|
73 | stdio: 'inherit',
|
74 | shell: true
|
75 | });
|
76 | });
|
77 |
|
78 | return function (_x) {
|
79 | return _ref2.apply(this, arguments);
|
80 | };
|
81 | })());
|
82 | }).catch(err => {
|
83 | console.log(err, "Error building interactive interface");
|
84 | });
|
85 | },
|
86 |
|
87 |
|
88 | raw: (() => {
|
89 | var _ref3 = _asyncToGenerator(function* () {
|
90 | if (!list || list.length === 0) return;
|
91 |
|
92 | return list;
|
93 | });
|
94 |
|
95 | return function raw() {
|
96 | return _ref3.apply(this, arguments);
|
97 | };
|
98 | })(),
|
99 |
|
100 | rawNoColor: (() => {
|
101 | var _ref4 = _asyncToGenerator(function* () {
|
102 | if (!list || list.length === 0) return;
|
103 |
|
104 | return list.map(function (key) {
|
105 | let result = StringUtil.getRidOfColors(key);
|
106 | result = StringUtil.getRidOfQuotationMarks(result);
|
107 | return result;
|
108 | });
|
109 | });
|
110 |
|
111 | return function rawNoColor() {
|
112 | return _ref4.apply(this, arguments);
|
113 | };
|
114 | })()
|
115 | };
|
116 | },
|
117 | all() {
|
118 | let list = parseToList(data).all();
|
119 | list.forEach(i => console.log(i));
|
120 | }
|
121 | };
|
122 | });
|
123 |
|
124 | return function () {
|
125 | return _ref.apply(this, arguments);
|
126 | };
|
127 | })();
|
128 |
|
129 |
|
130 |
|
131 |
|
132 | function parseToList(data = {
|
133 | 'name': '',
|
134 | 'dist-tags': {
|
135 | 'latest': ''
|
136 | },
|
137 | 'versions': {}
|
138 | }) {
|
139 | if (!data['name'] || !data['dist-tags'] || !data['versions']) {
|
140 | throw new Error('Fetched info is incomplete, therefore useless');
|
141 | }
|
142 |
|
143 | const title = data['name'] + '@' + data['dist-tags']['latest'];
|
144 | const versions = Object.keys(data.versions);
|
145 | const dependencies = (() => {
|
146 | let latestVersion = versions[versions.length - 1];
|
147 | return data.versions[latestVersion].dependencies;
|
148 | })();
|
149 |
|
150 |
|
151 | return {
|
152 | simple() {
|
153 | if (!dependencies) {
|
154 | console.log(chalk.blueBright(`${title} has no dependencies`));
|
155 | return;
|
156 | }
|
157 | console.log(chalk.blueBright(`${title}'s Dependencies:`));
|
158 |
|
159 | return Object.keys(dependencies).map(key => {
|
160 | let value = dependencies[key] ? dependencies[key].replace(/[^0-9.,]/g, "") : '';
|
161 | return '├── ' + key + '@' + chalk.grey(value);
|
162 | });
|
163 | },
|
164 | all() {
|
165 | console.log(chalk.blueBright(title));
|
166 | ui.div({
|
167 | text: columnify(dependencies),
|
168 | width: 30,
|
169 | padding: [0, 2, 0, 2]
|
170 | }, {
|
171 | text: columnify(versions),
|
172 | width: 25,
|
173 | padding: [0, 2, 0, 2]
|
174 | });
|
175 |
|
176 | return ui.toString().split('\n');
|
177 | }
|
178 | };
|
179 | }
|
180 | module.exports.parseToList = parseToList; |
\ | No newline at end of file |