pkg-json-to-md 1.0.0
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 +32 -0
- package/index.js +103 -0
- package/package.json +27 -0
package/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# pkg-json-to-md
|
2
|
+
|
3
|
+
Do `npx pkgtbl` inside a folder with `package.json`, get Markdown table.
|
4
|
+
|
5
|
+
Example:
|
6
|
+
|
7
|
+
**prodDependencies table:**
|
8
|
+
| name | current version | available version |
|
9
|
+
| ------------------------- | --------------- | ----------------- |
|
10
|
+
| š“ @redis/client | 1.6.0 | 5.0.1 |
|
11
|
+
| š” dotenv | 16.4.5 | 16.5.0 |
|
12
|
+
| š“ express | 4.21.2 | 5.1.0 |
|
13
|
+
| š¢ imdb-watchlist-scraper | 2.0.4 | 2.0.4 |
|
14
|
+
| š¢ knex | 3.1.0 | 3.1.0 |
|
15
|
+
| š” mysql2 | 3.11.3 | 3.14.1 |
|
16
|
+
| š¢ nouislider | 15.8.1 | 15.8.1 |
|
17
|
+
| š¢ object-hash | 3.0.0 | 3.0.0 |
|
18
|
+
|
19
|
+
**prodDependencies summary:**
|
20
|
+
| total | major | minor/patch |
|
21
|
+
| ----- | ----- | ----------- |
|
22
|
+
| 4 | 2 | 2 |
|
23
|
+
|
24
|
+
**devDependencies table:**
|
25
|
+
| name | current version | available version |
|
26
|
+
| -------------- | --------------- | ----------------- |
|
27
|
+
| š” @types/node | 22.7.4 | 22.15.15 |
|
28
|
+
|
29
|
+
**devDependencies summary:**
|
30
|
+
| total | major | minor/patch |
|
31
|
+
| ----- | ----- | ----------- |
|
32
|
+
| 1 | 1 | 0 |
|
package/index.js
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
|
3
|
+
import { markdownTable } from "markdown-table";
|
4
|
+
import { exec } from "child_process";
|
5
|
+
import { promisify } from "util";
|
6
|
+
import { cwd } from "process";
|
7
|
+
const execAsync = promisify(exec);
|
8
|
+
|
9
|
+
const baseTable = [["name", "current version", "available version"]];
|
10
|
+
|
11
|
+
async function getDependencies() {
|
12
|
+
const { stdout } = await execAsync(`npm pkg get --json=true`);
|
13
|
+
const deps = JSON.parse(stdout);
|
14
|
+
const prodDependencies = deps.dependencies;
|
15
|
+
const devDependencies = deps.devDependencies;
|
16
|
+
|
17
|
+
const currentDependencies = await getCurrentVersions();
|
18
|
+
|
19
|
+
for (const [key, value] of Object.entries(currentDependencies)) {
|
20
|
+
prodDependencies[key]
|
21
|
+
? (prodDependencies[key] = value.version)
|
22
|
+
: (devDependencies[key] = value.version);
|
23
|
+
}
|
24
|
+
|
25
|
+
return { prodDependencies, devDependencies };
|
26
|
+
}
|
27
|
+
|
28
|
+
async function getLatestVersion(pkgName) {
|
29
|
+
const { stdout } = await execAsync(`npm view ${pkgName} version`);
|
30
|
+
|
31
|
+
return stdout.trim();
|
32
|
+
}
|
33
|
+
|
34
|
+
async function buildTable(dependencies) {
|
35
|
+
const table = [...baseTable];
|
36
|
+
|
37
|
+
let info = { majorDep: 0, minorDep: 0 };
|
38
|
+
|
39
|
+
for (const [name, version] of Object.entries(dependencies)) {
|
40
|
+
const currentVersion = version;
|
41
|
+
const latestVersion = await getLatestVersion(name);
|
42
|
+
|
43
|
+
if (currentVersion == latestVersion) {
|
44
|
+
table.push(["š¢ " + name, currentVersion, latestVersion]);
|
45
|
+
continue;
|
46
|
+
}
|
47
|
+
|
48
|
+
const currentMajorVer = currentVersion.split(".")[0];
|
49
|
+
const latestMajorVer = latestVersion.split(".")[0];
|
50
|
+
|
51
|
+
const isMajorDiff = currentMajorVer == latestMajorVer;
|
52
|
+
isMajorDiff ? info.majorDep++ : info.minorDep++;
|
53
|
+
const symbol = isMajorDiff ? "š” " : "š“ ";
|
54
|
+
|
55
|
+
table.push([symbol + name, currentVersion, latestVersion]);
|
56
|
+
}
|
57
|
+
|
58
|
+
const totalMissing = info.majorDep + info.minorDep;
|
59
|
+
if (totalMissing) {
|
60
|
+
info = markdownTable([
|
61
|
+
["total", "major", "minor/patch"],
|
62
|
+
[totalMissing, info.majorDep, info.minorDep],
|
63
|
+
]);
|
64
|
+
} else {
|
65
|
+
info = null;
|
66
|
+
}
|
67
|
+
|
68
|
+
return { table: markdownTable(table), info };
|
69
|
+
}
|
70
|
+
|
71
|
+
async function getCurrentVersions() {
|
72
|
+
const { stdout } = await execAsync(`npm list --depth=0 --json`);
|
73
|
+
|
74
|
+
return JSON.parse(stdout).dependencies;
|
75
|
+
}
|
76
|
+
|
77
|
+
async function main() {
|
78
|
+
const { prodDependencies, devDependencies } = await getDependencies();
|
79
|
+
|
80
|
+
const [prodDependenciesTable, devDependenciesTable] = await Promise.all([
|
81
|
+
buildTable(prodDependencies),
|
82
|
+
buildTable(devDependencies),
|
83
|
+
]);
|
84
|
+
|
85
|
+
console.log(`**prodDependencies table:**\n${prodDependenciesTable.table}\n`);
|
86
|
+
console.log(
|
87
|
+
`**prodDependencies summary:**\n${
|
88
|
+
prodDependenciesTable.info
|
89
|
+
? prodDependenciesTable.info
|
90
|
+
: "\nā
All dependencies up to date!"
|
91
|
+
}\n`
|
92
|
+
);
|
93
|
+
console.log(`**devDependencies table:**\n${devDependenciesTable.table}\n`);
|
94
|
+
console.log(
|
95
|
+
`**devDependencies summary:**\n${
|
96
|
+
devDependenciesTable.info
|
97
|
+
? devDependenciesTable.info
|
98
|
+
: "\nā
All dependencies up to date!"
|
99
|
+
}\n`
|
100
|
+
);
|
101
|
+
}
|
102
|
+
|
103
|
+
main();
|
package/package.json
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"name": "pkg-json-to-md",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"description": "",
|
5
|
+
"main": "index.js",
|
6
|
+
"scripts": {
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
8
|
+
},
|
9
|
+
"bin": {
|
10
|
+
"pkgtbl": "./index.js"
|
11
|
+
},
|
12
|
+
"repository": {
|
13
|
+
"type": "git",
|
14
|
+
"url": "git+https://github.com/RasmusKard/pkg-json-to-md.git"
|
15
|
+
},
|
16
|
+
"keywords": [],
|
17
|
+
"author": "",
|
18
|
+
"license": "ISC",
|
19
|
+
"type": "module",
|
20
|
+
"bugs": {
|
21
|
+
"url": "https://github.com/RasmusKard/pkg-json-to-md/issues"
|
22
|
+
},
|
23
|
+
"homepage": "https://github.com/RasmusKard/pkg-json-to-md#readme",
|
24
|
+
"dependencies": {
|
25
|
+
"markdown-table": "^3.0.4"
|
26
|
+
}
|
27
|
+
}
|