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.mjs
ADDED
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
// modules
|
|
2
|
+
import {default as axios} from "axios";
|
|
3
|
+
import CoinGecko from "coingecko-api";
|
|
4
|
+
import {
|
|
5
|
+
cpu,
|
|
6
|
+
mem,
|
|
7
|
+
osInfo,
|
|
8
|
+
diskLayout,
|
|
9
|
+
graphics,
|
|
10
|
+
bios
|
|
11
|
+
} from "systeminformation";
|
|
12
|
+
import Wappalyzer from "wappalyzer";
|
|
13
|
+
|
|
14
|
+
const animeSearch = async ({ query, results }) => {
|
|
15
|
+
/* error manager */
|
|
16
|
+
try {
|
|
17
|
+
// call api
|
|
18
|
+
const { data } = await axios.get("https://api.jikan.moe/v3/search/anime", {
|
|
19
|
+
params: {
|
|
20
|
+
q: query,
|
|
21
|
+
limit: 10
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
results(data.results);
|
|
26
|
+
|
|
27
|
+
} catch (err) { results(err); }
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const bitlyInfo = async ({ link, token, results }) => {
|
|
31
|
+
try {
|
|
32
|
+
const { data } = await axios.post(
|
|
33
|
+
"https://api-ssl.bitly.com/v4/expand",
|
|
34
|
+
{
|
|
35
|
+
bitlink_id: link
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
headers: {
|
|
39
|
+
Authorization: `Bearer ${token}`,
|
|
40
|
+
"Content-Type": "application/json"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
results(data);
|
|
46
|
+
} catch (err) { results(err); }
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const cryptoMarket = async (callback) => {
|
|
50
|
+
try {
|
|
51
|
+
// start crypto
|
|
52
|
+
const { data } = await axios.get(
|
|
53
|
+
"https://api.coingecko.com/api/v3/coins/markets", {
|
|
54
|
+
params: {
|
|
55
|
+
vs_currency: "usd",
|
|
56
|
+
per_page: 10
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
// map coinData
|
|
62
|
+
callback(data);
|
|
63
|
+
} catch (err) { callback(err); }
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
async function githubInfo({ user, results }) {
|
|
67
|
+
try {
|
|
68
|
+
const { data } = await axios.get(`https://api.github.com/users/${user}`);
|
|
69
|
+
|
|
70
|
+
results(data);
|
|
71
|
+
} catch (err) { results(err); }
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async function cpuInfo(callback) {
|
|
75
|
+
try {
|
|
76
|
+
const {
|
|
77
|
+
manufacturer,
|
|
78
|
+
brand,
|
|
79
|
+
speed,
|
|
80
|
+
cores,
|
|
81
|
+
physicalCores,
|
|
82
|
+
processors,
|
|
83
|
+
vendor,
|
|
84
|
+
family,
|
|
85
|
+
model
|
|
86
|
+
} = await cpu();
|
|
87
|
+
|
|
88
|
+
// show results
|
|
89
|
+
callback({
|
|
90
|
+
manufacturer,
|
|
91
|
+
brand,
|
|
92
|
+
speed,
|
|
93
|
+
cores,
|
|
94
|
+
physicalCores,
|
|
95
|
+
processors,
|
|
96
|
+
vendor,
|
|
97
|
+
family,
|
|
98
|
+
model
|
|
99
|
+
});
|
|
100
|
+
} catch (err) { callback(err); }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
async function ramMemInfo(callback) {
|
|
104
|
+
try {
|
|
105
|
+
const {
|
|
106
|
+
total,
|
|
107
|
+
free,
|
|
108
|
+
used,
|
|
109
|
+
active,
|
|
110
|
+
available
|
|
111
|
+
} = await mem();
|
|
112
|
+
|
|
113
|
+
// show results
|
|
114
|
+
callback({
|
|
115
|
+
total_mem: `${(total / 1073741824).toFixed(2)} GB`,
|
|
116
|
+
free_mem: `${(free / 1073741824).toFixed(2)} GB`,
|
|
117
|
+
used_mem: `${(used / 1073741824).toFixed(2)} GB`,
|
|
118
|
+
active_mem: `${(active / 1073741824).toFixed(2)} GB`,
|
|
119
|
+
available_mem: `${(available / 1073741824).toFixed(2)} GB`
|
|
120
|
+
});
|
|
121
|
+
} catch (err) { callback(err); }
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async function osDetail(callback) {
|
|
125
|
+
try {
|
|
126
|
+
const {
|
|
127
|
+
hostname,
|
|
128
|
+
platform,
|
|
129
|
+
distro,
|
|
130
|
+
release,
|
|
131
|
+
kernel,
|
|
132
|
+
arch,
|
|
133
|
+
serial,
|
|
134
|
+
uefi
|
|
135
|
+
} = await osInfo();
|
|
136
|
+
|
|
137
|
+
// show results
|
|
138
|
+
callback({
|
|
139
|
+
hostname,
|
|
140
|
+
platform,
|
|
141
|
+
distro,
|
|
142
|
+
release,
|
|
143
|
+
kernel,
|
|
144
|
+
arch,
|
|
145
|
+
serial,
|
|
146
|
+
uefi
|
|
147
|
+
});
|
|
148
|
+
} catch (err) { callback(err); }
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
async function diskInfo(callback) {
|
|
152
|
+
try {
|
|
153
|
+
const disks = await diskLayout();
|
|
154
|
+
|
|
155
|
+
const disksList = disks.map(({
|
|
156
|
+
type,
|
|
157
|
+
name,
|
|
158
|
+
vendor,
|
|
159
|
+
size,
|
|
160
|
+
interfaceType
|
|
161
|
+
}) => ({
|
|
162
|
+
type,
|
|
163
|
+
name,
|
|
164
|
+
vendor,
|
|
165
|
+
diskSize: `${(size / 1073741824).toFixed(2)} GB`,
|
|
166
|
+
interfaceType
|
|
167
|
+
}));
|
|
168
|
+
|
|
169
|
+
callback(disksList);
|
|
170
|
+
|
|
171
|
+
} catch (err) { callback(err); }
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
async function controllerInfo(callback) {
|
|
175
|
+
try {
|
|
176
|
+
const { controllers } = await graphics();
|
|
177
|
+
|
|
178
|
+
const controllersList = controllers.map(({
|
|
179
|
+
model,
|
|
180
|
+
vendor,
|
|
181
|
+
vram
|
|
182
|
+
}) => ({
|
|
183
|
+
model,
|
|
184
|
+
vendor,
|
|
185
|
+
vramSize: vram < 1024
|
|
186
|
+
? `${vram} MB`
|
|
187
|
+
: `${(vram / 1024).toFixed(2)} GB`
|
|
188
|
+
}));
|
|
189
|
+
|
|
190
|
+
callback(controllersList);
|
|
191
|
+
} catch (err) { callback(err); }
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
async function displayInfo(callback) {
|
|
195
|
+
try {
|
|
196
|
+
const { displays } = await graphics();
|
|
197
|
+
|
|
198
|
+
const displayList = displays.map(({
|
|
199
|
+
model,
|
|
200
|
+
main,
|
|
201
|
+
connection,
|
|
202
|
+
resolutionX,
|
|
203
|
+
resolutionY
|
|
204
|
+
}) => ({
|
|
205
|
+
model,
|
|
206
|
+
main,
|
|
207
|
+
connection,
|
|
208
|
+
resolutionX,
|
|
209
|
+
resolutionY
|
|
210
|
+
}));
|
|
211
|
+
|
|
212
|
+
callback(displayList);
|
|
213
|
+
} catch (err) { callback(err); }
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
async function biosInfo(callback) {
|
|
217
|
+
try {
|
|
218
|
+
const {
|
|
219
|
+
releaseDate,
|
|
220
|
+
vendor,
|
|
221
|
+
revision,
|
|
222
|
+
version
|
|
223
|
+
} = await bios();
|
|
224
|
+
|
|
225
|
+
callback({ releaseDate, vendor, revision, version });
|
|
226
|
+
} catch (err) { callback(err); }
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const movieDB = async ({ api_key, query, results }) => {
|
|
230
|
+
try {
|
|
231
|
+
const { data } = await axios.get("https://api.themoviedb.org/3/search/movie", {
|
|
232
|
+
params: {
|
|
233
|
+
api_key,
|
|
234
|
+
query,
|
|
235
|
+
page: 1
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
const movieData = data.results
|
|
240
|
+
.map(({
|
|
241
|
+
title,
|
|
242
|
+
original_language,
|
|
243
|
+
popularity,
|
|
244
|
+
vote_average,
|
|
245
|
+
release_date
|
|
246
|
+
}) => ({
|
|
247
|
+
title,
|
|
248
|
+
original_language,
|
|
249
|
+
popularity,
|
|
250
|
+
vote_average,
|
|
251
|
+
release_date
|
|
252
|
+
}))
|
|
253
|
+
.sort((x, y) => {
|
|
254
|
+
// date values
|
|
255
|
+
const primaryDate = new Date(x.release_date);
|
|
256
|
+
const secondaryDate = new Date(y.release_date);
|
|
257
|
+
|
|
258
|
+
return primaryDate.getTime() - secondaryDate.getTime();
|
|
259
|
+
})
|
|
260
|
+
.filter(({ release_date }) => release_date !== undefined && release_date !== "");
|
|
261
|
+
|
|
262
|
+
results(movieData);
|
|
263
|
+
} catch (err) { results(err); }
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
async function multipleStack({ urls, results }) {
|
|
267
|
+
let result;
|
|
268
|
+
const wappalyzer = new Wappalyzer();
|
|
269
|
+
try {
|
|
270
|
+
await wappalyzer.init();
|
|
271
|
+
result = await Promise.all(
|
|
272
|
+
urls.map(async (url) => {
|
|
273
|
+
const { technologies } = await wappalyzer.open(url).analyze();
|
|
274
|
+
return {
|
|
275
|
+
url,
|
|
276
|
+
technologies
|
|
277
|
+
};
|
|
278
|
+
})
|
|
279
|
+
);
|
|
280
|
+
} catch (err) { result = err; }
|
|
281
|
+
await wappalyzer.destroy();
|
|
282
|
+
results(result);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const pageSpeed = async ({ url, results }) => {
|
|
286
|
+
try {
|
|
287
|
+
const resMobile = await axios.get("https://www.googleapis.com/pagespeedonline/v5/runPagespeed", {
|
|
288
|
+
params: {
|
|
289
|
+
url,
|
|
290
|
+
key: "AIzaSyBEDaW4FxSZ2s1vz5CdD5Ai6PGZGdAzij0",
|
|
291
|
+
strategy: "mobile"
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
const resDesktop = await axios.get("https://www.googleapis.com/pagespeedonline/v5/runPagespeed", {
|
|
296
|
+
params: {
|
|
297
|
+
url,
|
|
298
|
+
key: "AIzaSyBEDaW4FxSZ2s1vz5CdD5Ai6PGZGdAzij0",
|
|
299
|
+
strategy: "desktop"
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
// extract results
|
|
304
|
+
const mobile = Math.round(resMobile.data.lighthouseResult.categories.performance.score * 100);
|
|
305
|
+
const desktop = Math.round(resDesktop.data.lighthouseResult.categories.performance.score * 100);
|
|
306
|
+
|
|
307
|
+
results({ mobile, desktop });
|
|
308
|
+
} catch (err) { results(err); }
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
async function singleStack({ url, results }) {
|
|
312
|
+
const wappalyzer = await new Wappalyzer;
|
|
313
|
+
|
|
314
|
+
let result;
|
|
315
|
+
try {
|
|
316
|
+
await wappalyzer.init();
|
|
317
|
+
|
|
318
|
+
const { technologies } = await wappalyzer.open(url).analyze();
|
|
319
|
+
|
|
320
|
+
result = technologies.map(({
|
|
321
|
+
name,
|
|
322
|
+
website,
|
|
323
|
+
categories
|
|
324
|
+
}) => ({
|
|
325
|
+
techName: name,
|
|
326
|
+
techWebsite: website,
|
|
327
|
+
techCategories: categories.map(({ name }) => name).join(", ")
|
|
328
|
+
}));
|
|
329
|
+
} catch (err) { results(err); }
|
|
330
|
+
|
|
331
|
+
await wappalyzer.destroy();
|
|
332
|
+
results(result);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
async function twitchInfo({ query, token, clientID, results }) {
|
|
336
|
+
try {
|
|
337
|
+
const { data: twitchData } = await axios.get(`https://api.twitch.tv/helix/users?login=${query}`,
|
|
338
|
+
{
|
|
339
|
+
headers: {
|
|
340
|
+
Authorization: `Bearer ${token}`,
|
|
341
|
+
"Client-Id": clientID
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
results(twitchData.data);
|
|
346
|
+
} catch (err) { results(err); }
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
function scrape(url) {
|
|
350
|
+
let $;
|
|
351
|
+
|
|
352
|
+
const scraping = axios.create({
|
|
353
|
+
baseURL: url
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
const title = async (callback) => {
|
|
357
|
+
try {
|
|
358
|
+
const { data } = await scraping.get("");
|
|
359
|
+
$ = load(data);
|
|
360
|
+
|
|
361
|
+
callback($("title").text());
|
|
362
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
const images = async (callback) => {
|
|
366
|
+
try {
|
|
367
|
+
const { data } = await scraping.get("");
|
|
368
|
+
$ = load(data);
|
|
369
|
+
|
|
370
|
+
const imgs = $("img").map((i, el) => ({
|
|
371
|
+
imagePath: $(el).attr("src"),
|
|
372
|
+
imageTitle: $(el).attr("alt")
|
|
373
|
+
})).toArray();
|
|
374
|
+
|
|
375
|
+
callback(imgs);
|
|
376
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
const metadata = async (callback) => {
|
|
380
|
+
try {
|
|
381
|
+
const { data } = await scraping.get("");
|
|
382
|
+
$ = load(data);
|
|
383
|
+
|
|
384
|
+
const metadataList = $("meta").map((i, el) => ({
|
|
385
|
+
metaInfo: $(el).attr("name"),
|
|
386
|
+
metaContent: $(el).attr("content")
|
|
387
|
+
})).toArray()
|
|
388
|
+
.filter(({ metaInfo }) => metaInfo !== undefined);
|
|
389
|
+
|
|
390
|
+
callback(metadataList);
|
|
391
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
const headings = async (callback) => {
|
|
395
|
+
try {
|
|
396
|
+
const { data } = await scraping.get("");
|
|
397
|
+
$ = load(data);
|
|
398
|
+
|
|
399
|
+
const headingList = $("h1, h2, h3, h4, h5, h6").map((i, el) => ({
|
|
400
|
+
headingTag: $(el).prop("tagName"),
|
|
401
|
+
headingText: $(el).text()
|
|
402
|
+
})).toArray();
|
|
403
|
+
|
|
404
|
+
callback(headingList);
|
|
405
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
const table_heading = async (callback) => {
|
|
409
|
+
try {
|
|
410
|
+
const { data } = await scraping.get("");
|
|
411
|
+
$ = load(data);
|
|
412
|
+
|
|
413
|
+
const tableHeadList = $("th").map((i, el) => ({
|
|
414
|
+
headingRow: i,
|
|
415
|
+
text: $(el).text()
|
|
416
|
+
})).toArray();
|
|
417
|
+
|
|
418
|
+
callback(tableHeadList);
|
|
419
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
const table_data = async (callback) => {
|
|
423
|
+
try {
|
|
424
|
+
const { data } = await scraping.get("");
|
|
425
|
+
$ = load(data);
|
|
426
|
+
|
|
427
|
+
const tableColumnList = $("td").map((i, el) => $(el).text()).toArray();
|
|
428
|
+
|
|
429
|
+
callback(tableColumnList);
|
|
430
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
const links = async (callback) => {
|
|
435
|
+
try {
|
|
436
|
+
const { data } = await scraping.get("");
|
|
437
|
+
$ = load(data);
|
|
438
|
+
|
|
439
|
+
const linkList = $("a").map((i, el) => ({
|
|
440
|
+
url: $(el).attr("href"),
|
|
441
|
+
text: $(el).text()
|
|
442
|
+
})).toArray()
|
|
443
|
+
.filter(({ url }) => url.indexOf("#") !== 0);
|
|
444
|
+
|
|
445
|
+
callback(linkList);
|
|
446
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
const cites = async (callback) => {
|
|
450
|
+
try {
|
|
451
|
+
const { data } = await scraping.get("");
|
|
452
|
+
$ = load(data);
|
|
453
|
+
|
|
454
|
+
const citeList = $("q, blockquote").map((i, el) => ({
|
|
455
|
+
citeTag: $(el).prop("tagName"),
|
|
456
|
+
citeLink: $(el).attr("cite"),
|
|
457
|
+
citeText: $(el).text()
|
|
458
|
+
})).toArray();
|
|
459
|
+
|
|
460
|
+
callback(citeList);
|
|
461
|
+
} catch (err) { console.error(colors.red(err.message)); }
|
|
462
|
+
};
|
|
463
|
+
|
|
464
|
+
return {
|
|
465
|
+
title,
|
|
466
|
+
images,
|
|
467
|
+
metadata,
|
|
468
|
+
headings,
|
|
469
|
+
table_heading,
|
|
470
|
+
table_data,
|
|
471
|
+
links,
|
|
472
|
+
cites
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
// exports
|
|
478
|
+
export {
|
|
479
|
+
animeSearch,
|
|
480
|
+
bitlyInfo,
|
|
481
|
+
cryptoMarket,
|
|
482
|
+
githubInfo,
|
|
483
|
+
controllerInfo,
|
|
484
|
+
osDetail,
|
|
485
|
+
diskInfo,
|
|
486
|
+
displayInfo,
|
|
487
|
+
biosInfo,
|
|
488
|
+
cpuInfo,
|
|
489
|
+
ramMemInfo,
|
|
490
|
+
movieDB,
|
|
491
|
+
multipleStack,
|
|
492
|
+
pageSpeed,
|
|
493
|
+
singleStack,
|
|
494
|
+
twitchInfo,
|
|
495
|
+
scrape
|
|
496
|
+
};
|
package/package.json
CHANGED
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stack-analyze",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.9",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "cli tech stack analyze and pagespeed with node.js using the wappalyzer module. with google pagespeed api, hardware and crypto market",
|
|
5
|
-
"main": "index.
|
|
6
|
+
"main": "index.mjs",
|
|
6
7
|
"bin": {
|
|
7
8
|
"stack-analyze": "cli.js"
|
|
8
9
|
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"require": "./index.cjs",
|
|
13
|
+
"import": "./index.mjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
9
16
|
"dependencies": {
|
|
10
|
-
"axios": "^0.
|
|
11
|
-
"
|
|
12
|
-
"
|
|
17
|
+
"axios": "^0.27.2",
|
|
18
|
+
"cheerio": "^1.0.0-rc.12",
|
|
19
|
+
"cli-progress": "^3.11.2",
|
|
13
20
|
"colors": "^1.4.0",
|
|
14
|
-
"console-table-printer": "^2.
|
|
21
|
+
"console-table-printer": "^2.11.0",
|
|
15
22
|
"figlet": "^1.5.2",
|
|
16
|
-
"inquirer": "^
|
|
17
|
-
"systeminformation": "^5.
|
|
23
|
+
"inquirer": "^9.0.0",
|
|
24
|
+
"systeminformation": "^5.11.22",
|
|
18
25
|
"timeago.js": "^4.0.2",
|
|
19
|
-
"wappalyzer": "^6.
|
|
26
|
+
"wappalyzer": "^6.10.37"
|
|
20
27
|
},
|
|
21
28
|
"devDependencies": {
|
|
22
|
-
"eslint": "^
|
|
23
|
-
"gh-pages": "^
|
|
24
|
-
"jest": "^
|
|
25
|
-
"jsdoc": "^3.6.
|
|
29
|
+
"eslint": "^8.18.0",
|
|
30
|
+
"gh-pages": "^4.0.0",
|
|
31
|
+
"jest": "^28.1.2",
|
|
32
|
+
"jsdoc": "^3.6.10",
|
|
26
33
|
"minami": "^1.2.3"
|
|
27
34
|
},
|
|
28
35
|
"scripts": {
|
|
@@ -35,7 +42,7 @@
|
|
|
35
42
|
},
|
|
36
43
|
"repository": {
|
|
37
44
|
"type": "git",
|
|
38
|
-
"url": "git+https://github.com/
|
|
45
|
+
"url": "git+https://github.com/stack-analyze/stack-analyze.git"
|
|
39
46
|
},
|
|
40
47
|
"keywords": [
|
|
41
48
|
"cli",
|
|
@@ -51,12 +58,12 @@
|
|
|
51
58
|
"crypto market info",
|
|
52
59
|
"movie info"
|
|
53
60
|
],
|
|
54
|
-
"author": "
|
|
61
|
+
"author": "stack-analyze",
|
|
55
62
|
"license": "MIT",
|
|
56
63
|
"bugs": {
|
|
57
|
-
"url": "https://github.com/
|
|
64
|
+
"url": "https://github.com/stack-analyze/stack-analyze/issues"
|
|
58
65
|
},
|
|
59
|
-
"homepage": "https://
|
|
66
|
+
"homepage": "https://stack-analyze.github.io/stack-analyze/",
|
|
60
67
|
"directories": {
|
|
61
68
|
"doc": "docs",
|
|
62
69
|
"test": "test"
|
package/readme.md
CHANGED
|
@@ -15,13 +15,21 @@ cli tech stack analyze with **node.js** using the wappalyzer and google pagespee
|
|
|
15
15
|
use the cli program install
|
|
16
16
|
|
|
17
17
|
## example module
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
``` sh
|
|
19
|
+
# global old npm versions
|
|
20
|
+
npm i -g stack-analyze
|
|
21
|
+
|
|
22
|
+
# global new module
|
|
23
|
+
npm i --location=global
|
|
24
|
+
|
|
25
|
+
# portable
|
|
26
|
+
npx stack-analyze
|
|
27
|
+
```
|
|
20
28
|
>note: if global install fail using npx
|
|
21
29
|
|
|
22
|
-
[github repo](https://github.com/
|
|
30
|
+
[github repo](https://github.com/stack-analyze/stack-analyze.git)
|
|
23
31
|
|
|
24
|
-
[docs](https://
|
|
32
|
+
[docs](https://stack-analyze.github.io/stack-analyze/)
|
|
25
33
|
|
|
26
34
|
[gitlab repo](https://gitlab.com/Intermachine-dev/stack-analyze)
|
|
27
35
|
|
|
@@ -29,4 +37,4 @@ use the cli program install
|
|
|
29
37
|
- [changelog module](/CHANGELOG.md)
|
|
30
38
|
## author this project Julian David Cordoba Torres as omega5300
|
|
31
39
|
|
|
32
|
-
**
|
|
40
|
+
**stack-analyze LICENSE MIT**
|
package/utils.js
ADDED
package/about/index.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// version module
|
|
2
|
-
const { license, version } = require("../package.json");
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @type {{ mainDeveloper: string, version: string, license: string }}
|
|
6
|
-
*/
|
|
7
|
-
const aboutApp = {
|
|
8
|
-
mainDeveloper: "omega5300",
|
|
9
|
-
license,
|
|
10
|
-
version
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @typedef {Object} ideas
|
|
15
|
-
* @property {string} ideas.author
|
|
16
|
-
* @property {string} ideas.tool
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
/** @type {ideas[]} */
|
|
20
|
-
const ideas = [
|
|
21
|
-
{ author: "verguiskarime", tool: "bitly info" }
|
|
22
|
-
];
|
|
23
|
-
|
|
24
|
-
/** @type { string[] } */
|
|
25
|
-
const developers = [ "omega5300" ];
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @typedef {Object} youtubeDev
|
|
29
|
-
* @property {string} youtubeDev.youtubeChannel
|
|
30
|
-
* @property {string} youtubeDev.recomendation
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
/** @type {youtubeDev[]} */
|
|
34
|
-
const youtubeDev = [
|
|
35
|
-
{ youtubeChannel: "fazt", recomendation: "recommend" },
|
|
36
|
-
{ youtubeChannel: "doriandesings", recomendation: "recommend" },
|
|
37
|
-
{ youtubeChannel: "bluuweb", recomendation: "recommend" },
|
|
38
|
-
{ youtubeChannel: "leonidas esteban", recomendation: "neutral recommend" },
|
|
39
|
-
{ youtubeChannel: "fernando herrera", recomendation: "recommend" },
|
|
40
|
-
{ youtubeChannel: "soy dalto", recomendation: "neutral recommend" },
|
|
41
|
-
];
|
|
42
|
-
|
|
43
|
-
/** @type { string[] } */
|
|
44
|
-
const twitch = [ "dannyaegyo" ];
|
|
45
|
-
|
|
46
|
-
/** @type { string[] } */
|
|
47
|
-
const projects = [ "Doofy's Projects" ];
|
|
48
|
-
|
|
49
|
-
module.exports = {
|
|
50
|
-
aboutApp,
|
|
51
|
-
developers,
|
|
52
|
-
youtubeDev,
|
|
53
|
-
twitch,
|
|
54
|
-
projects,
|
|
55
|
-
ideas
|
|
56
|
-
};
|