@badisi/latest-version 6.1.6 → 6.1.7
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/cli.js +23 -47
- package/index.js +29 -67
- package/package.json +2 -2
package/cli.js
CHANGED
|
@@ -21,26 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
22
|
mod
|
|
23
23
|
));
|
|
24
|
-
var __async = (__this, __arguments, generator) => {
|
|
25
|
-
return new Promise((resolve, reject) => {
|
|
26
|
-
var fulfilled = (value) => {
|
|
27
|
-
try {
|
|
28
|
-
step(generator.next(value));
|
|
29
|
-
} catch (e) {
|
|
30
|
-
reject(e);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
var rejected = (value) => {
|
|
34
|
-
try {
|
|
35
|
-
step(generator.throw(value));
|
|
36
|
-
} catch (e) {
|
|
37
|
-
reject(e);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
41
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
24
|
|
|
45
25
|
// src/cli.ts
|
|
46
26
|
var import_safe = require("@colors/colors/safe");
|
|
@@ -66,8 +46,7 @@ var colorizeDiff = (from, to) => {
|
|
|
66
46
|
return to;
|
|
67
47
|
};
|
|
68
48
|
var columnCellRenderer = (column, row) => {
|
|
69
|
-
|
|
70
|
-
let text = (_a = row[column.attrName]) != null ? _a : "";
|
|
49
|
+
let text = row[column.attrName] ?? "";
|
|
71
50
|
const gap = text.length < column.maxLength ? " ".repeat(column.maxLength - text.length) : "";
|
|
72
51
|
switch (column.attrName) {
|
|
73
52
|
case "name":
|
|
@@ -122,8 +101,7 @@ var getTableColumns = (rows) => {
|
|
|
122
101
|
];
|
|
123
102
|
rows.forEach(
|
|
124
103
|
(row) => columns.forEach((column) => {
|
|
125
|
-
|
|
126
|
-
column.maxLength = Math.max(column.label.length, column.maxLength, ((_a = row[column.attrName]) == null ? void 0 : _a.length) || 0);
|
|
104
|
+
column.maxLength = Math.max(column.label.length, column.maxLength, row[column.attrName]?.length || 0);
|
|
127
105
|
})
|
|
128
106
|
);
|
|
129
107
|
return columns;
|
|
@@ -132,11 +110,10 @@ var getTableRows = (updates) => {
|
|
|
132
110
|
return updates.reduce((all, pkg) => {
|
|
133
111
|
const { name, latest, local, globalNpm, globalYarn, wantedTagOrRange, updatesAvailable } = pkg;
|
|
134
112
|
const getGroup = (a, b) => {
|
|
135
|
-
var _a;
|
|
136
113
|
if (b && (0, import_major.default)(b) === 0) {
|
|
137
114
|
return "majorVersionZero";
|
|
138
115
|
} else if (a && b) {
|
|
139
|
-
const releaseType = (
|
|
116
|
+
const releaseType = (0, import_diff.default)(a, b) ?? "";
|
|
140
117
|
if (["major", "premajor", "prerelease"].includes(releaseType)) {
|
|
141
118
|
return "major";
|
|
142
119
|
} else if (["minor", "preminor"].includes(releaseType)) {
|
|
@@ -148,13 +125,13 @@ var getTableRows = (updates) => {
|
|
|
148
125
|
return "unknown";
|
|
149
126
|
};
|
|
150
127
|
const add = (group, location, installed, wanted) => all.push({
|
|
151
|
-
name: " " + (name
|
|
152
|
-
location: location
|
|
153
|
-
installed: installed
|
|
154
|
-
latest: latest
|
|
155
|
-
tagOrRange: wantedTagOrRange
|
|
128
|
+
name: " " + (name ?? "unknown"),
|
|
129
|
+
location: location ?? "unknown",
|
|
130
|
+
installed: installed ?? "unknown",
|
|
131
|
+
latest: latest ?? "unknown",
|
|
132
|
+
tagOrRange: wantedTagOrRange ?? "unknown",
|
|
156
133
|
separator: "\u2192",
|
|
157
|
-
wanted: wanted
|
|
134
|
+
wanted: wanted ?? "unknown",
|
|
158
135
|
group
|
|
159
136
|
});
|
|
160
137
|
if (updatesAvailable) {
|
|
@@ -214,24 +191,24 @@ var displayTable = (updates) => {
|
|
|
214
191
|
console.log((0, import_safe.green)("\u{1F389} Packages are up-to-date"));
|
|
215
192
|
}
|
|
216
193
|
};
|
|
217
|
-
var checkVersions =
|
|
194
|
+
var checkVersions = async (packages, skipMissing, options = { useCache: true }) => {
|
|
218
195
|
const spinner = (0, import_ora.default)({ text: (0, import_safe.cyan)("Checking versions...") });
|
|
219
196
|
spinner.start();
|
|
220
|
-
let latestVersionPackages =
|
|
197
|
+
let latestVersionPackages = await (0, import_index.default)(packages, options);
|
|
221
198
|
if (skipMissing) {
|
|
222
199
|
latestVersionPackages = latestVersionPackages.filter((pkg) => pkg.local || pkg.globalNpm || pkg.globalYarn);
|
|
223
200
|
}
|
|
224
201
|
spinner.stop();
|
|
225
202
|
displayTable(latestVersionPackages);
|
|
226
|
-
}
|
|
227
|
-
void (() =>
|
|
203
|
+
};
|
|
204
|
+
void (async () => {
|
|
228
205
|
let args = process.argv.slice(2);
|
|
229
206
|
const skipMissing = args.includes("--skip-missing");
|
|
230
207
|
args = args.filter((arg) => !arg.startsWith("-"));
|
|
231
208
|
if (args.length === 1 && args[0].endsWith("package.json")) {
|
|
232
209
|
if ((0, import_fs.existsSync)(args[0])) {
|
|
233
210
|
process.chdir((0, import_path.dirname)(args[0]));
|
|
234
|
-
|
|
211
|
+
await checkVersions(JSON.parse((0, import_fs.readFileSync)(args[0]).toString()), skipMissing);
|
|
235
212
|
} else {
|
|
236
213
|
console.log((0, import_safe.cyan)("No package.json file were found"));
|
|
237
214
|
}
|
|
@@ -242,21 +219,20 @@ void (() => __async(exports, null, function* () {
|
|
|
242
219
|
}
|
|
243
220
|
if (args.length) {
|
|
244
221
|
args = args.map((arg) => {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
return `${arg}@${(_f = localPkgJson == null ? void 0 : localPkgJson.peerDependencies) == null ? void 0 : _f[arg]}`;
|
|
222
|
+
if (localPkgJson?.dependencies?.[arg]) {
|
|
223
|
+
return `${arg}@${localPkgJson?.dependencies?.[arg]}`;
|
|
224
|
+
} else if (localPkgJson?.devDependencies?.[arg]) {
|
|
225
|
+
return `${arg}@${localPkgJson?.devDependencies?.[arg]}`;
|
|
226
|
+
} else if (localPkgJson?.peerDependencies?.[arg]) {
|
|
227
|
+
return `${arg}@${localPkgJson?.peerDependencies?.[arg]}`;
|
|
252
228
|
}
|
|
253
229
|
return arg;
|
|
254
230
|
});
|
|
255
|
-
|
|
231
|
+
await checkVersions(args, skipMissing);
|
|
256
232
|
} else if (localPkgJson) {
|
|
257
|
-
|
|
233
|
+
await checkVersions(localPkgJson, skipMissing);
|
|
258
234
|
} else {
|
|
259
235
|
console.log((0, import_safe.cyan)("No packages were found"));
|
|
260
236
|
}
|
|
261
237
|
}
|
|
262
|
-
})
|
|
238
|
+
})();
|
package/index.js
CHANGED
|
@@ -1,27 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __create = Object.create;
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
|
-
var __defProps = Object.defineProperties;
|
|
5
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
7
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
9
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
10
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
-
var __spreadValues = (a, b) => {
|
|
14
|
-
for (var prop in b ||= {})
|
|
15
|
-
if (__hasOwnProp.call(b, prop))
|
|
16
|
-
__defNormalProp(a, prop, b[prop]);
|
|
17
|
-
if (__getOwnPropSymbols)
|
|
18
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
-
if (__propIsEnum.call(b, prop))
|
|
20
|
-
__defNormalProp(a, prop, b[prop]);
|
|
21
|
-
}
|
|
22
|
-
return a;
|
|
23
|
-
};
|
|
24
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
8
|
var __export = (target, all) => {
|
|
26
9
|
for (var name in all)
|
|
27
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -43,26 +26,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
43
26
|
mod
|
|
44
27
|
));
|
|
45
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
46
|
-
var __async = (__this, __arguments, generator) => {
|
|
47
|
-
return new Promise((resolve, reject) => {
|
|
48
|
-
var fulfilled = (value) => {
|
|
49
|
-
try {
|
|
50
|
-
step(generator.next(value));
|
|
51
|
-
} catch (e) {
|
|
52
|
-
reject(e);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
var rejected = (value) => {
|
|
56
|
-
try {
|
|
57
|
-
step(generator.throw(value));
|
|
58
|
-
} catch (e) {
|
|
59
|
-
reject(e);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
63
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
29
|
|
|
67
30
|
// src/index.ts
|
|
68
31
|
var src_exports = {};
|
|
@@ -88,7 +51,7 @@ var downloadMetadata = (pkgName, options) => {
|
|
|
88
51
|
return new Promise((resolve, reject) => {
|
|
89
52
|
const i = pkgName.indexOf("/");
|
|
90
53
|
const pkgScope = i !== -1 ? pkgName.slice(0, i) : "";
|
|
91
|
-
const registryUrl =
|
|
54
|
+
const registryUrl = options?.registryUrl || (0, import_registry_url.default)(pkgScope);
|
|
92
55
|
const pkgUrl = new import_url.URL(encodeURIComponent(pkgName).replace(/^%40/, "@"), registryUrl);
|
|
93
56
|
let requestOptions = {
|
|
94
57
|
headers: { accept: "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*" },
|
|
@@ -100,8 +63,8 @@ var downloadMetadata = (pkgName, options) => {
|
|
|
100
63
|
if (authInfo && requestOptions.headers) {
|
|
101
64
|
requestOptions.headers.authorization = `${authInfo.type} ${authInfo.token}`;
|
|
102
65
|
}
|
|
103
|
-
if (options
|
|
104
|
-
requestOptions =
|
|
66
|
+
if (options?.requestOptions) {
|
|
67
|
+
requestOptions = { ...requestOptions, ...options.requestOptions };
|
|
105
68
|
}
|
|
106
69
|
const { get } = pkgUrl.protocol === "https:" ? require("https") : require("http");
|
|
107
70
|
const request = get(requestOptions, (res) => {
|
|
@@ -158,8 +121,7 @@ var saveMetadataToCache = (pkg) => {
|
|
|
158
121
|
(0, import_fs.writeFileSync)(filePath, JSON.stringify(pkg));
|
|
159
122
|
};
|
|
160
123
|
var getMetadataFromCache = (pkgName, options) => {
|
|
161
|
-
|
|
162
|
-
const maxAge = (_a = options == null ? void 0 : options.cacheMaxAge) != null ? _a : ONE_DAY;
|
|
124
|
+
const maxAge = options?.cacheMaxAge ?? ONE_DAY;
|
|
163
125
|
if (maxAge !== 0) {
|
|
164
126
|
const pkgCacheFilePath = (0, import_path.join)(getCacheDir(), `${pkgName}.json`);
|
|
165
127
|
if ((0, import_fs.existsSync)(pkgCacheFilePath)) {
|
|
@@ -171,40 +133,38 @@ var getMetadataFromCache = (pkgName, options) => {
|
|
|
171
133
|
}
|
|
172
134
|
return void 0;
|
|
173
135
|
};
|
|
174
|
-
var getRegistryVersions = (pkgName, tagOrRange, options) =>
|
|
175
|
-
var _a, _b, _c;
|
|
136
|
+
var getRegistryVersions = async (pkgName, tagOrRange, options) => {
|
|
176
137
|
let pkgMetadata;
|
|
177
|
-
if (pkgName.length &&
|
|
138
|
+
if (pkgName.length && options?.useCache) {
|
|
178
139
|
pkgMetadata = getMetadataFromCache(pkgName, options);
|
|
179
140
|
if (!pkgMetadata) {
|
|
180
|
-
pkgMetadata =
|
|
141
|
+
pkgMetadata = await downloadMetadata(pkgName, options);
|
|
181
142
|
saveMetadataToCache(pkgMetadata);
|
|
182
143
|
}
|
|
183
144
|
} else if (pkgName.length) {
|
|
184
|
-
pkgMetadata =
|
|
145
|
+
pkgMetadata = await downloadMetadata(pkgName, options);
|
|
185
146
|
}
|
|
186
147
|
const versions = {
|
|
187
|
-
latest:
|
|
188
|
-
next:
|
|
148
|
+
latest: pkgMetadata?.distTags?.latest,
|
|
149
|
+
next: pkgMetadata?.distTags?.next
|
|
189
150
|
};
|
|
190
|
-
if (tagOrRange &&
|
|
151
|
+
if (tagOrRange && pkgMetadata?.distTags && pkgMetadata?.distTags[tagOrRange]) {
|
|
191
152
|
versions.wanted = pkgMetadata.distTags[tagOrRange];
|
|
192
|
-
} else if (tagOrRange &&
|
|
153
|
+
} else if (tagOrRange && pkgMetadata?.versions?.length) {
|
|
193
154
|
versions.wanted = (0, import_max_satisfying.default)(pkgMetadata.versions, tagOrRange) || void 0;
|
|
194
155
|
}
|
|
195
156
|
return versions;
|
|
196
|
-
}
|
|
157
|
+
};
|
|
197
158
|
var getInstalledVersion = (pkgName, location = "local") => {
|
|
198
|
-
var _a, _b, _c, _d;
|
|
199
159
|
try {
|
|
200
160
|
if (location === "globalNpm") {
|
|
201
|
-
return
|
|
161
|
+
return require((0, import_path.join)(import_global_dirs.npm.packages, pkgName, "package.json"))?.version;
|
|
202
162
|
} else if (location === "globalYarn") {
|
|
203
163
|
const yarnGlobalPkg = require((0, import_path.resolve)(import_global_dirs.yarn.packages, "..", "package.json"));
|
|
204
|
-
if (!
|
|
164
|
+
if (!yarnGlobalPkg?.dependencies?.[pkgName]) {
|
|
205
165
|
return void 0;
|
|
206
166
|
}
|
|
207
|
-
return
|
|
167
|
+
return require((0, import_path.join)(import_global_dirs.yarn.packages, pkgName, "package.json"))?.version;
|
|
208
168
|
} else if (location === "local") {
|
|
209
169
|
const { root } = (0, import_path.parse)(process.cwd());
|
|
210
170
|
let path = process.cwd();
|
|
@@ -216,16 +176,16 @@ var getInstalledVersion = (pkgName, location = "local") => {
|
|
|
216
176
|
for (const localPath of localPaths) {
|
|
217
177
|
const pkgPath = (0, import_path.join)(localPath, pkgName, "package.json");
|
|
218
178
|
if ((0, import_fs.existsSync)(pkgPath)) {
|
|
219
|
-
return
|
|
179
|
+
return require(pkgPath)?.version;
|
|
220
180
|
}
|
|
221
181
|
}
|
|
222
182
|
}
|
|
223
183
|
return void 0;
|
|
224
|
-
} catch
|
|
184
|
+
} catch {
|
|
225
185
|
return void 0;
|
|
226
186
|
}
|
|
227
187
|
};
|
|
228
|
-
var getInfo = (pkg, options) =>
|
|
188
|
+
var getInfo = async (pkg, options) => {
|
|
229
189
|
const i = pkg.lastIndexOf("@");
|
|
230
190
|
let pkgInfo = {
|
|
231
191
|
name: i > 1 ? pkg.slice(0, i) : pkg,
|
|
@@ -233,21 +193,23 @@ var getInfo = (pkg, options) => __async(void 0, null, function* () {
|
|
|
233
193
|
updatesAvailable: false
|
|
234
194
|
};
|
|
235
195
|
try {
|
|
236
|
-
pkgInfo =
|
|
196
|
+
pkgInfo = {
|
|
197
|
+
...pkgInfo,
|
|
237
198
|
local: getInstalledVersion(pkgInfo.name, "local"),
|
|
238
199
|
globalNpm: getInstalledVersion(pkgInfo.name, "globalNpm"),
|
|
239
|
-
globalYarn: getInstalledVersion(pkgInfo.name, "globalYarn")
|
|
240
|
-
|
|
200
|
+
globalYarn: getInstalledVersion(pkgInfo.name, "globalYarn"),
|
|
201
|
+
...await getRegistryVersions(pkgInfo.name, pkgInfo.wantedTagOrRange, options)
|
|
202
|
+
};
|
|
241
203
|
const local = pkgInfo.local && pkgInfo.wanted ? (0, import_gt.default)(pkgInfo.wanted, pkgInfo.local) ? pkgInfo.wanted : false : false;
|
|
242
204
|
const globalNpm = pkgInfo.globalNpm && pkgInfo.wanted ? (0, import_gt.default)(pkgInfo.wanted, pkgInfo.globalNpm) ? pkgInfo.wanted : false : false;
|
|
243
205
|
const globalYarn = pkgInfo.globalYarn && pkgInfo.wanted ? (0, import_gt.default)(pkgInfo.wanted, pkgInfo.globalYarn) ? pkgInfo.wanted : false : false;
|
|
244
206
|
pkgInfo.updatesAvailable = local || globalNpm || globalYarn ? { local, globalNpm, globalYarn } : false;
|
|
245
207
|
} catch (err) {
|
|
246
|
-
pkgInfo.error =
|
|
208
|
+
pkgInfo.error = err?.message || err;
|
|
247
209
|
}
|
|
248
210
|
return pkgInfo;
|
|
249
|
-
}
|
|
250
|
-
var latestVersion = (arg, options) =>
|
|
211
|
+
};
|
|
212
|
+
var latestVersion = async (arg, options) => {
|
|
251
213
|
const pkgs = [];
|
|
252
214
|
if (typeof arg === "string") {
|
|
253
215
|
pkgs.push(arg);
|
|
@@ -263,10 +225,10 @@ var latestVersion = (arg, options) => __async(void 0, null, function* () {
|
|
|
263
225
|
addDeps(arg.devDependencies);
|
|
264
226
|
addDeps(arg.peerDependencies);
|
|
265
227
|
}
|
|
266
|
-
const jobs =
|
|
228
|
+
const jobs = await Promise.allSettled(pkgs.map((pkg) => getInfo(pkg, options)));
|
|
267
229
|
const results = jobs.map((jobResult) => jobResult.value);
|
|
268
230
|
return typeof arg === "string" ? results[0] : results;
|
|
269
|
-
}
|
|
231
|
+
};
|
|
270
232
|
var src_default = latestVersion;
|
|
271
233
|
// Annotate the CommonJS export names for ESM import in node:
|
|
272
234
|
0 && (module.exports = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@badisi/latest-version",
|
|
3
|
-
"version": "6.1.
|
|
3
|
+
"version": "6.1.7",
|
|
4
4
|
"description": "Get latest versions of packages",
|
|
5
5
|
"homepage": "https://github.com/badisi/latest-version",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"global-dirs": "^3.0.1",
|
|
47
47
|
"@colors/colors": "^1.5.0",
|
|
48
48
|
"registry-auth-token": "^5.0.2",
|
|
49
|
-
"semver": "^7.5.
|
|
49
|
+
"semver": "^7.5.3",
|
|
50
50
|
"ora": "5.4.1"
|
|
51
51
|
}
|
|
52
52
|
}
|