Skip to content
This repository was archived by the owner on Feb 5, 2023. It is now read-only.

Commit 9e075d8

Browse files
authored
feat: Quiet mode, simple functions (#123)
1 parent ee06247 commit 9e075d8

File tree

3 files changed

+49
-47
lines changed

3 files changed

+49
-47
lines changed

README.md

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,26 @@ Run `yarn global add crates-updater` or `npm i -g crates-updater`.
99
## Usage
1010

1111
```
12-
Usage: crates-updater [options]
12+
Usage: crates-updater [options] <package> [packageVersion]
1313
1414
Check your Rust packages for updates.
1515
1616
Options:
17-
-p, --package <package> which package to check (required)
18-
-V, --package-version <version> which version to check
19-
-v, --version output the version number
20-
-h, --help output usage information
17+
-q, --quiet quiet mode. Display newer version or nothing
18+
-v, --version output the version number
19+
-h, --help output usage information
2120
```
2221

2322
## Examples
2423

2524
```shell
2625
# returns either a newer version or nothing
27-
crates-updater -p ripgrep -V 0.9.0
26+
crates-updater ripgrep -q 0.9.0
2827

29-
# returns the latest version
30-
crates-updater -p ripgrep
28+
# returns the latest version with a helpful text
29+
crates-updater ripgrep
3130
```
31+
32+
## API Usage
33+
34+
See [`cli.ts`](./src/cli.ts).

src/CratesUpdater.ts

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,23 @@
11
import compareVersions = require('compare-versions');
22
import {CratesIO, Version as CrateVersion} from 'crates.io';
33

4-
class CratesUpdater {
5-
private readonly cratesIO: CratesIO;
4+
const cratesIO = new CratesIO();
65

7-
constructor() {
8-
this.cratesIO = new CratesIO();
6+
export async function checkForUpdate(packageName: string, version: string): Promise<string | null> {
7+
const latestVersion = await getLatestVersion(packageName);
8+
if (compareVersions(latestVersion.num, version) > 0) {
9+
return latestVersion.num;
910
}
1011

11-
public async checkForUpdate(packageName: string, version: string): Promise<string | null> {
12-
const latestVersion = await this.getLatestVersion(packageName);
13-
if (compareVersions(latestVersion.num, version) > 0) {
14-
return latestVersion.num;
15-
}
16-
17-
return null;
18-
}
19-
20-
public async getLatestVersion(packageName: string): Promise<CrateVersion> {
21-
const versions = await this.getVersions(packageName);
22-
return versions.sort((a, b) => compareVersions(a.num, b.num)).pop()!;
23-
}
12+
return null;
13+
}
2414

25-
public async getVersions(packageName: string): Promise<CrateVersion[]> {
26-
const {versions} = await this.cratesIO.api.crates.getVersions(packageName);
27-
return versions;
28-
}
15+
export async function getLatestVersion(packageName: string): Promise<CrateVersion> {
16+
const versions = await getVersions(packageName);
17+
return versions.sort((a, b) => compareVersions(a.num, b.num)).pop()!;
2918
}
3019

31-
export {CratesUpdater};
20+
export async function getVersions(packageName: string): Promise<CrateVersion[]> {
21+
const {versions} = await cratesIO.api.crates.getVersions(packageName);
22+
return versions;
23+
}

src/cli.ts

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,52 @@
11
#!/usr/bin/env node
22

33
import * as program from 'commander';
4-
import {CratesUpdater} from './CratesUpdater';
4+
import * as CratesUpdater from './CratesUpdater';
55

6-
const {name, version, description}: {description: string; name: string; version: string} = require('../package.json');
6+
const {name, version, description} = require('../package.json');
77

88
program
99
.name(name)
1010
.description(description)
11-
.option('-p, --package <package>', 'which package to check (required)')
12-
.option('-V, --package-version <version>', 'which version to check')
11+
.arguments('<package>')
12+
.arguments('[packageVersion]')
13+
.option('-q, --quiet', 'quiet mode. Display newer version or nothing')
1314
.version(version, '-v, --version')
1415
.parse(process.argv);
1516

16-
if (!program.options.length || !program.package) {
17+
if (!program.args.length) {
1718
program.outputHelp();
1819
process.exit(1);
1920
}
2021

21-
const cratesUpdater = new CratesUpdater();
22+
const [packageName, packageVersion] = program.args;
2223

23-
if (program.package && program.packageVersion) {
24-
cratesUpdater
25-
.checkForUpdate(program.package, program.packageVersion)
24+
if (packageVersion) {
25+
CratesUpdater.checkForUpdate(packageName, packageVersion)
2626
.then(version => {
27-
if (version) {
28-
console.log(`An update for ${program.package} is available: ${version}.`);
27+
if (program.quiet) {
28+
if (version) {
29+
console.log(version);
30+
}
2931
} else {
30-
console.log(`No update for ${program.package} available.`);
32+
const text = version
33+
? `An update for ${packageName} is available: ${version}.`
34+
: `No update for ${packageName} available.`;
35+
console.log(text);
3136
}
3237
})
3338
.catch(error => {
34-
console.error(error);
39+
console.error(error.message);
3540
process.exit(1);
3641
});
3742
} else {
38-
cratesUpdater
39-
.getLatestVersion(program.package)
40-
.then(version => console.log(version.num))
43+
CratesUpdater.getLatestVersion(packageName)
44+
.then(version => {
45+
const text = program.quiet ? version.num : `Latest ${packageName} version is ${version.num}.`;
46+
console.log(text);
47+
})
4148
.catch(error => {
42-
console.error(error);
49+
console.error(error.message);
4350
process.exit(1);
4451
});
4552
}

0 commit comments

Comments
 (0)