stack-analyze 1.1.6 → 1.1.9
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/CHANGELOG.md +37 -3
- package/about.js +110 -0
- package/cli.js +318 -114
- package/demo.js +20 -0
- package/functions/animeInfo.js +9 -42
- package/functions/bitly.js +5 -7
- package/functions/cryptoList.js +23 -49
- package/functions/gitUser.js +6 -9
- package/functions/hardware.js +191 -231
- package/functions/moviesInfo.js +8 -41
- package/functions/multipleStack.js +19 -34
- package/functions/pageSpeed.js +13 -13
- package/functions/scraping.js +153 -0
- package/functions/singleStack.js +19 -37
- package/functions/twitch.js +44 -0
- package/{index.js → index.cjs} +202 -60
- package/index.mjs +496 -0
- package/package.json +24 -17
- package/readme.md +13 -5
- package/utils.js +15 -0
- package/about/index.js +0 -56
- package/hash/aboutOpts.js +0 -55
- package/hash/hardwareTools.js +0 -47
- package/hash/infoTools.js +0 -90
- package/hash/mainTools.js +0 -67
- package/models/aboutTables.js +0 -40
package/{index.js → index.cjs}
RENAMED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// modules
|
|
2
2
|
const axios = require("axios").default;
|
|
3
|
-
const CoinGecko = require("coingecko-api");
|
|
4
3
|
const {
|
|
5
4
|
cpu,
|
|
6
5
|
mem,
|
|
@@ -10,13 +9,9 @@ const {
|
|
|
10
9
|
bios
|
|
11
10
|
} = require("systeminformation");
|
|
12
11
|
const Wappalyzer = require("wappalyzer");
|
|
12
|
+
const { load } = require("cheerio");
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
const CoinGeckoClient = new CoinGecko();
|
|
16
|
-
|
|
17
|
-
// functions
|
|
18
|
-
|
|
19
|
-
const animeSearch = async (query) => {
|
|
14
|
+
const animeSearch = async ({ query, results }) => {
|
|
20
15
|
/* error manager */
|
|
21
16
|
try {
|
|
22
17
|
// call api
|
|
@@ -27,12 +22,12 @@ const animeSearch = async (query) => {
|
|
|
27
22
|
}
|
|
28
23
|
});
|
|
29
24
|
|
|
30
|
-
|
|
25
|
+
results(data.results);
|
|
31
26
|
|
|
32
|
-
} catch (err) {
|
|
27
|
+
} catch (err) { results(err); }
|
|
33
28
|
};
|
|
34
29
|
|
|
35
|
-
const bitlyInfo = async (link, token) => {
|
|
30
|
+
const bitlyInfo = async ({ link, token, results }) => {
|
|
36
31
|
try {
|
|
37
32
|
const { data } = await axios.post(
|
|
38
33
|
"https://api-ssl.bitly.com/v4/expand",
|
|
@@ -47,37 +42,42 @@ const bitlyInfo = async (link, token) => {
|
|
|
47
42
|
}
|
|
48
43
|
);
|
|
49
44
|
|
|
50
|
-
|
|
51
|
-
} catch (err) {
|
|
45
|
+
results(data);
|
|
46
|
+
} catch (err) { results(err); }
|
|
52
47
|
};
|
|
53
48
|
|
|
54
|
-
|
|
49
|
+
/**
|
|
55
50
|
*
|
|
56
51
|
* @descripiton call the crypto market list
|
|
52
|
+
* @param {function(any): void} callback
|
|
57
53
|
* @returns { Promise<void> } - return results search
|
|
58
|
-
*
|
|
59
54
|
*/
|
|
60
|
-
const cryptoMarket = async () => {
|
|
55
|
+
const cryptoMarket = async (callback) => {
|
|
61
56
|
try {
|
|
62
57
|
// start crypto
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
const { data } = await axios.get(
|
|
59
|
+
"https://api.coingecko.com/api/v3/coins/markets", {
|
|
60
|
+
params: {
|
|
61
|
+
vs_currency: "usd",
|
|
62
|
+
per_page: 10
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
66
|
|
|
67
67
|
// map coinData
|
|
68
|
-
|
|
69
|
-
} catch (err) {
|
|
68
|
+
callback(data);
|
|
69
|
+
} catch (err) { callback(err); }
|
|
70
70
|
};
|
|
71
71
|
|
|
72
|
-
async function githubInfo(user) {
|
|
72
|
+
async function githubInfo({ user, results }) {
|
|
73
73
|
try {
|
|
74
74
|
const { data } = await axios.get(`https://api.github.com/users/${user}`);
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
} catch (err) {
|
|
76
|
+
results(data);
|
|
77
|
+
} catch (err) { results(err); }
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
async function cpuInfo() {
|
|
80
|
+
async function cpuInfo(callback) {
|
|
81
81
|
try {
|
|
82
82
|
const {
|
|
83
83
|
manufacturer,
|
|
@@ -92,7 +92,7 @@ async function cpuInfo() {
|
|
|
92
92
|
} = await cpu();
|
|
93
93
|
|
|
94
94
|
// show results
|
|
95
|
-
|
|
95
|
+
callback({
|
|
96
96
|
manufacturer,
|
|
97
97
|
brand,
|
|
98
98
|
speed,
|
|
@@ -102,11 +102,11 @@ async function cpuInfo() {
|
|
|
102
102
|
vendor,
|
|
103
103
|
family,
|
|
104
104
|
model
|
|
105
|
-
};
|
|
106
|
-
} catch (err) {
|
|
105
|
+
});
|
|
106
|
+
} catch (err) { callback(err); }
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
async function ramMemInfo() {
|
|
109
|
+
async function ramMemInfo(callback) {
|
|
110
110
|
try {
|
|
111
111
|
const {
|
|
112
112
|
total,
|
|
@@ -117,17 +117,17 @@ async function ramMemInfo() {
|
|
|
117
117
|
} = await mem();
|
|
118
118
|
|
|
119
119
|
// show results
|
|
120
|
-
|
|
120
|
+
callback({
|
|
121
121
|
total_mem: `${(total / 1073741824).toFixed(2)} GB`,
|
|
122
122
|
free_mem: `${(free / 1073741824).toFixed(2)} GB`,
|
|
123
123
|
used_mem: `${(used / 1073741824).toFixed(2)} GB`,
|
|
124
124
|
active_mem: `${(active / 1073741824).toFixed(2)} GB`,
|
|
125
125
|
available_mem: `${(available / 1073741824).toFixed(2)} GB`
|
|
126
|
-
};
|
|
127
|
-
} catch (err) {
|
|
126
|
+
});
|
|
127
|
+
} catch (err) { callback(err); }
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
async function osDetail() {
|
|
130
|
+
async function osDetail(callback) {
|
|
131
131
|
try {
|
|
132
132
|
const {
|
|
133
133
|
hostname,
|
|
@@ -141,7 +141,7 @@ async function osDetail() {
|
|
|
141
141
|
} = await osInfo();
|
|
142
142
|
|
|
143
143
|
// show results
|
|
144
|
-
|
|
144
|
+
callback({
|
|
145
145
|
hostname,
|
|
146
146
|
platform,
|
|
147
147
|
distro,
|
|
@@ -150,11 +150,11 @@ async function osDetail() {
|
|
|
150
150
|
arch,
|
|
151
151
|
serial,
|
|
152
152
|
uefi
|
|
153
|
-
};
|
|
154
|
-
} catch (err) {
|
|
153
|
+
});
|
|
154
|
+
} catch (err) { callback(err); }
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
async function diskInfo() {
|
|
157
|
+
async function diskInfo(callback) {
|
|
158
158
|
try {
|
|
159
159
|
const disks = await diskLayout();
|
|
160
160
|
|
|
@@ -172,12 +172,12 @@ async function diskInfo() {
|
|
|
172
172
|
interfaceType
|
|
173
173
|
}));
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
callback(disksList);
|
|
176
176
|
|
|
177
|
-
} catch (err) {
|
|
177
|
+
} catch (err) { callback(err); }
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
async function controllerInfo() {
|
|
180
|
+
async function controllerInfo(callback) {
|
|
181
181
|
try {
|
|
182
182
|
const { controllers } = await graphics();
|
|
183
183
|
|
|
@@ -193,11 +193,11 @@ async function controllerInfo() {
|
|
|
193
193
|
: `${(vram / 1024).toFixed(2)} GB`
|
|
194
194
|
}));
|
|
195
195
|
|
|
196
|
-
|
|
197
|
-
} catch (err) {
|
|
196
|
+
callback(controllersList);
|
|
197
|
+
} catch (err) { callback(err); }
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
async function displayInfo() {
|
|
200
|
+
async function displayInfo(callback) {
|
|
201
201
|
try {
|
|
202
202
|
const { displays } = await graphics();
|
|
203
203
|
|
|
@@ -215,11 +215,11 @@ async function displayInfo() {
|
|
|
215
215
|
resolutionY
|
|
216
216
|
}));
|
|
217
217
|
|
|
218
|
-
|
|
219
|
-
} catch (err) {
|
|
218
|
+
callback(displayList);
|
|
219
|
+
} catch (err) { callback(err); }
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
async function biosInfo() {
|
|
222
|
+
async function biosInfo(callback) {
|
|
223
223
|
try {
|
|
224
224
|
const {
|
|
225
225
|
releaseDate,
|
|
@@ -228,11 +228,11 @@ async function biosInfo() {
|
|
|
228
228
|
version
|
|
229
229
|
} = await bios();
|
|
230
230
|
|
|
231
|
-
|
|
232
|
-
} catch (err) {
|
|
231
|
+
callback({ releaseDate, vendor, revision, version });
|
|
232
|
+
} catch (err) { callback(err); }
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
const movieDB = async (api_key, query) => {
|
|
235
|
+
const movieDB = async ({ api_key, query, results }) => {
|
|
236
236
|
try {
|
|
237
237
|
const { data } = await axios.get("https://api.themoviedb.org/3/search/movie", {
|
|
238
238
|
params: {
|
|
@@ -265,11 +265,11 @@ const movieDB = async (api_key, query) => {
|
|
|
265
265
|
})
|
|
266
266
|
.filter(({ release_date }) => release_date !== undefined && release_date !== "");
|
|
267
267
|
|
|
268
|
-
|
|
269
|
-
} catch (err) {
|
|
268
|
+
results(movieData);
|
|
269
|
+
} catch (err) { results(err); }
|
|
270
270
|
};
|
|
271
271
|
|
|
272
|
-
async function multipleStack(urls) {
|
|
272
|
+
async function multipleStack({ urls, results }) {
|
|
273
273
|
let result;
|
|
274
274
|
const wappalyzer = new Wappalyzer();
|
|
275
275
|
try {
|
|
@@ -285,10 +285,10 @@ async function multipleStack(urls) {
|
|
|
285
285
|
);
|
|
286
286
|
} catch (err) { result = err; }
|
|
287
287
|
await wappalyzer.destroy();
|
|
288
|
-
|
|
288
|
+
results(result);
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
-
const pageSpeed = async (url) => {
|
|
291
|
+
const pageSpeed = async ({ url, results }) => {
|
|
292
292
|
try {
|
|
293
293
|
const resMobile = await axios.get("https://www.googleapis.com/pagespeedonline/v5/runPagespeed", {
|
|
294
294
|
params: {
|
|
@@ -310,11 +310,11 @@ const pageSpeed = async (url) => {
|
|
|
310
310
|
const mobile = Math.round(resMobile.data.lighthouseResult.categories.performance.score * 100);
|
|
311
311
|
const desktop = Math.round(resDesktop.data.lighthouseResult.categories.performance.score * 100);
|
|
312
312
|
|
|
313
|
-
|
|
314
|
-
} catch (err) {
|
|
313
|
+
results({ mobile, desktop });
|
|
314
|
+
} catch (err) { results(err); }
|
|
315
315
|
};
|
|
316
316
|
|
|
317
|
-
async function singleStack(url) {
|
|
317
|
+
async function singleStack({ url, results }) {
|
|
318
318
|
const wappalyzer = await new Wappalyzer;
|
|
319
319
|
|
|
320
320
|
let result;
|
|
@@ -332,15 +332,155 @@ async function singleStack(url) {
|
|
|
332
332
|
techWebsite: website,
|
|
333
333
|
techCategories: categories.map(({ name }) => name).join(", ")
|
|
334
334
|
}));
|
|
335
|
-
} catch (err) {
|
|
335
|
+
} catch (err) { results(err); }
|
|
336
336
|
|
|
337
337
|
await wappalyzer.destroy();
|
|
338
|
-
|
|
338
|
+
results(result);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
async function twitchInfo({ query, token, clientID, results }) {
|
|
342
|
+
try {
|
|
343
|
+
const { data: twitchData } = await axios.get(`https://api.twitch.tv/helix/users?login=${query}`,
|
|
344
|
+
{
|
|
345
|
+
headers: {
|
|
346
|
+
Authorization: `Bearer ${token}`,
|
|
347
|
+
"Client-Id": clientID
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
results(twitchData.data);
|
|
352
|
+
} catch (err) { results(err); }
|
|
339
353
|
}
|
|
340
354
|
|
|
355
|
+
function scrape(url) {
|
|
356
|
+
let $;
|
|
357
|
+
|
|
358
|
+
const scraping = axios.create({
|
|
359
|
+
baseURL: url
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
const title = async (callback) => {
|
|
363
|
+
try {
|
|
364
|
+
const { data } = await scraping.get("");
|
|
365
|
+
$ = load(data);
|
|
366
|
+
|
|
367
|
+
callback($("title").text());
|
|
368
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
const images = async (callback) => {
|
|
372
|
+
try {
|
|
373
|
+
const { data } = await scraping.get("");
|
|
374
|
+
$ = load(data);
|
|
375
|
+
|
|
376
|
+
const imgs = $("img").map((i, el) => ({
|
|
377
|
+
imagePath: $(el).attr("src"),
|
|
378
|
+
imageTitle: $(el).attr("alt")
|
|
379
|
+
})).toArray();
|
|
380
|
+
|
|
381
|
+
callback(imgs);
|
|
382
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
const metadata = async (callback) => {
|
|
386
|
+
try {
|
|
387
|
+
const { data } = await scraping.get("");
|
|
388
|
+
$ = load(data);
|
|
389
|
+
|
|
390
|
+
const metadataList = $("meta").map((i, el) => ({
|
|
391
|
+
metaInfo: $(el).attr("name"),
|
|
392
|
+
metaContent: $(el).attr("content")
|
|
393
|
+
})).toArray()
|
|
394
|
+
.filter(({ metaInfo }) => metaInfo !== undefined);
|
|
395
|
+
|
|
396
|
+
callback(metadataList);
|
|
397
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
const headings = async (callback) => {
|
|
401
|
+
try {
|
|
402
|
+
const { data } = await scraping.get("");
|
|
403
|
+
$ = load(data);
|
|
404
|
+
|
|
405
|
+
const headingList = $("h1, h2, h3, h4, h5, h6").map((i, el) => ({
|
|
406
|
+
headingTag: $(el).prop("tagName"),
|
|
407
|
+
headingText: $(el).text()
|
|
408
|
+
})).toArray();
|
|
409
|
+
|
|
410
|
+
callback(headingList);
|
|
411
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
const table_heading = async (callback) => {
|
|
415
|
+
try {
|
|
416
|
+
const { data } = await scraping.get("");
|
|
417
|
+
$ = load(data);
|
|
418
|
+
|
|
419
|
+
const tableHeadList = $("th").map((i, el) => ({
|
|
420
|
+
headingRow: i,
|
|
421
|
+
text: $(el).text()
|
|
422
|
+
})).toArray();
|
|
423
|
+
|
|
424
|
+
callback(tableHeadList);
|
|
425
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
const table_data = async (callback) => {
|
|
429
|
+
try {
|
|
430
|
+
const { data } = await scraping.get("");
|
|
431
|
+
$ = load(data);
|
|
432
|
+
|
|
433
|
+
const tableColumnList = $("td").map((i, el) => $(el).text()).toArray();
|
|
434
|
+
|
|
435
|
+
callback(tableColumnList);
|
|
436
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
const links = async (callback) => {
|
|
441
|
+
try {
|
|
442
|
+
const { data } = await scraping.get("");
|
|
443
|
+
$ = load(data);
|
|
444
|
+
|
|
445
|
+
const linkList = $("a").map((i, el) => ({
|
|
446
|
+
url: $(el).attr("href"),
|
|
447
|
+
text: $(el).text()
|
|
448
|
+
})).toArray()
|
|
449
|
+
.filter(({ url }) => url.indexOf("#") !== 0);
|
|
450
|
+
|
|
451
|
+
callback(linkList);
|
|
452
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
const cites = async (callback) => {
|
|
456
|
+
try {
|
|
457
|
+
const { data } = await scraping.get("");
|
|
458
|
+
$ = load(data);
|
|
459
|
+
|
|
460
|
+
const citeList = $("q, blockquote").map((i, el) => ({
|
|
461
|
+
citeTag: $(el).prop("tagName"),
|
|
462
|
+
citeLink: $(el).attr("cite"),
|
|
463
|
+
citeText: $(el).text()
|
|
464
|
+
})).toArray();
|
|
465
|
+
|
|
466
|
+
callback(citeList);
|
|
467
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
468
|
+
};
|
|
469
|
+
|
|
470
|
+
return {
|
|
471
|
+
title,
|
|
472
|
+
images,
|
|
473
|
+
metadata,
|
|
474
|
+
headings,
|
|
475
|
+
table_heading,
|
|
476
|
+
table_data,
|
|
477
|
+
links,
|
|
478
|
+
cites
|
|
479
|
+
};
|
|
480
|
+
}
|
|
341
481
|
|
|
342
482
|
// exports
|
|
343
|
-
exports = {
|
|
483
|
+
module.exports = {
|
|
344
484
|
animeSearch,
|
|
345
485
|
bitlyInfo,
|
|
346
486
|
cryptoMarket,
|
|
@@ -355,5 +495,7 @@ exports = {
|
|
|
355
495
|
movieDB,
|
|
356
496
|
multipleStack,
|
|
357
497
|
pageSpeed,
|
|
358
|
-
singleStack
|
|
498
|
+
singleStack,
|
|
499
|
+
twitchInfo,
|
|
500
|
+
scrape
|
|
359
501
|
};
|