Skip to content

Commit a6c3e83

Browse files
gratclifferunion
andcommitted
fix/help-semver-validation (#78)
* fixed help bug, and added support for semver validation in the cli * Update lib/prompts.js Co-Authored-By: Jon Ursenbach <erunion@users.noreply.github.com>
1 parent 9e44583 commit a6c3e83

File tree

7 files changed

+28
-12
lines changed

7 files changed

+28
-12
lines changed

cmds/versions/create.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
const request = require('request-promise-native');
22
const config = require('config');
3+
const semver = require('semver');
34
const { prompt } = require('enquirer');
45
const promptOpts = require('../../lib/prompts');
56

67
exports.command = 'versions:create';
7-
exports.usage = 'versions:create <version> | --version={project-version} [options]';
8+
exports.usage = 'versions:create --version=<version> [options]';
89
exports.description = 'Create a new version for your project.';
910
exports.category = 'versions';
1011
exports.position = 2;
@@ -56,10 +57,10 @@ exports.run = async function(opts) {
5657
return Promise.reject(new Error('No project API key provided. Please use `--key`.'));
5758
}
5859

59-
if (!version) {
60+
if (!version || !semver.valid(semver.coerce(version))) {
6061
return Promise.reject(
6162
new Error(
62-
`No version provided. Please specify a semantic version. See \`${config.cli} help ${exports.command}\` for help.`,
63+
`Please specify a semantic version. See \`${config.cli} help ${exports.command}\` for help.`,
6364
),
6465
);
6566
}

cmds/versions/delete.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
const request = require('request-promise-native');
22
const config = require('config');
3+
const semver = require('semver');
34

45
exports.command = 'versions:delete';
5-
exports.usage = 'versions:delete --version={project-version} [options]';
6+
exports.usage = 'versions:delete --version=<version> [options]';
67
exports.description = 'Delete a version associated with your ReadMe project.';
78
exports.category = 'versions';
89
exports.position = 4;
@@ -28,10 +29,10 @@ exports.run = async function(opts) {
2829
return Promise.reject(new Error('No project API key provided. Please use `--key`.'));
2930
}
3031

31-
if (!version) {
32+
if (!version || !semver.valid(semver.coerce(version))) {
3233
return Promise.reject(
3334
new Error(
34-
`No version provided. Please specify a semantic version. See \`${config.cli} help ${exports.command}\` for help.`,
35+
`Please specify a semantic version. See \`${config.cli} help ${exports.command}\` for help.`,
3536
),
3637
);
3738
}

cmds/versions/update.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
const request = require('request-promise-native');
22
const config = require('config');
3+
const semver = require('semver');
34
const { prompt } = require('enquirer');
45
const promptOpts = require('../../lib/prompts');
56

67
exports.command = 'versions:update';
7-
exports.usage = 'versions:update --version={project-version} [options]';
8+
exports.usage = 'versions:update --version=<version> [options]';
89
exports.description = 'Update an existing version for your project.';
910
exports.category = 'versions';
1011
exports.position = 3;
@@ -49,10 +50,10 @@ exports.run = async function(opts) {
4950
return Promise.reject(new Error('No project API key provided. Please use `--key`.'));
5051
}
5152

52-
if (!version) {
53+
if (!version || !semver.valid(semver.coerce(version))) {
5354
return Promise.reject(
5455
new Error(
55-
`No version provided. Please specify a semantic version. See \`${config.cli} help ${exports.command}\` for help.`,
56+
`Please specify a semantic version. See \`${config.cli} help ${exports.command}\` for help.`,
5657
),
5758
);
5859
}

lib/prompts.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
const semver = require('semver');
2+
13
exports.generatePrompts = versionList => [
24
{
35
type: 'select',
@@ -57,6 +59,11 @@ exports.createVersionPrompt = (versionList, opts, isUpdate) => [
5759
return opts.newVersion || !isUpdate;
5860
},
5961
hint: '1.0.0',
62+
validate(val) {
63+
return semver.valid(semver.coerce(val))
64+
? true
65+
: this.styles.danger('Please specify a semantic version.');
66+
},
6067
},
6168
{
6269
type: 'confirm',

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"read": "^1.0.7",
4343
"request": "^2.88.0",
4444
"request-promise-native": "^1.0.5",
45+
"semver": "^6.3.0",
4546
"table-layout": "^1.0.0"
4647
},
4748
"devDependencies": {

test/cmds/versions.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ describe('rdme versions*', () => {
103103
createVersion.run({ key }).catch(err => {
104104
assert.equal(
105105
err.message,
106-
'No version provided. Please specify a semantic version. See `rdme help versions:create` for help.',
106+
'Please specify a semantic version. See `rdme help versions:create` for help.',
107107
);
108108
});
109109
});
@@ -159,7 +159,7 @@ describe('rdme versions*', () => {
159159
deleteVersion.run({ key }).catch(err => {
160160
assert.equal(
161161
err.message,
162-
'No version provided. Please specify a semantic version. See `rdme help versions:delete` for help.',
162+
'Please specify a semantic version. See `rdme help versions:delete` for help.',
163163
);
164164
});
165165
});
@@ -198,7 +198,7 @@ describe('rdme versions*', () => {
198198
updateVersion.run({ key }).catch(err => {
199199
assert.equal(
200200
err.message,
201-
'No version provided. Please specify a semantic version. See `rdme help versions:update` for help.',
201+
'Please specify a semantic version. See `rdme help versions:update` for help.',
202202
);
203203
});
204204
});

test/lib/prompts.test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ describe('prompt test bed', () => {
6161
await prompt.keypress(null, { name: 'down' });
6262
await prompt.keypress(null, { name: 'up' });
6363
await prompt.submit();
64+
if (prompt.name === 'newVersion') {
65+
// eslint-disable-next-line
66+
prompt.value = '1.2.1';
67+
await prompt.submit();
68+
}
6469
});
6570
const answer = await enquirer.prompt(
6671
promptHandler.createVersionPrompt(versionlist, opts, false),

0 commit comments

Comments
 (0)