fix for number input, new integer input
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
7395241329
commit
7ad999878a
@ -17,7 +17,8 @@ const {
|
|||||||
BooleanOption,
|
BooleanOption,
|
||||||
NumberOption,
|
NumberOption,
|
||||||
ArrayOption,
|
ArrayOption,
|
||||||
FolderOption
|
FolderOption,
|
||||||
|
IntegerOption
|
||||||
} = require ('./dist/lib/index.js');
|
} = require ('./dist/lib/index.js');
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
@ -27,12 +28,14 @@ const {
|
|||||||
.parse ();
|
.parse ();
|
||||||
const num = await new NumberOption ({ name: 'num' })
|
const num = await new NumberOption ({ name: 'num' })
|
||||||
.parse ();
|
.parse ();
|
||||||
|
const int = await new IntegerOption ({ name: 'num' })
|
||||||
|
.parse ();
|
||||||
const arr = await new ArrayOption ({ name: 'arr' })
|
const arr = await new ArrayOption ({ name: 'arr' })
|
||||||
.parse ();
|
.parse ();
|
||||||
const fld = await new FolderOption ({ name: 'fld' })
|
const fld = await new FolderOption ({ name: 'fld' })
|
||||||
.parse ();
|
.parse ();
|
||||||
|
|
||||||
const data = { str, bool, num, arr, fld };
|
const data = { str, bool, num, int, arr, fld };
|
||||||
|
|
||||||
console.log (data);
|
console.log (data);
|
||||||
}) ();
|
}) ();
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2.1.0
|
||||||
|
|
||||||
|
- Fix for NumberOption: do not cut off float values
|
||||||
|
- New type IntegerOption: only allows integer values
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
Restructuring to split different Option types and keep specific parameters separate
|
Restructuring to split different Option types and keep specific parameters separate
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# @sapphirecode/console-app
|
# @sapphirecode/console-app
|
||||||
|
|
||||||
version: 2.0.x
|
version: 2.1.x
|
||||||
|
|
||||||
read parameters from env, config files, console args or interactively
|
read parameters from env, config files, console args or interactively
|
||||||
|
|
||||||
@ -22,7 +22,8 @@ const {
|
|||||||
BooleanOption,
|
BooleanOption,
|
||||||
FileOption, // paths that exist and are a file
|
FileOption, // paths that exist and are a file
|
||||||
FolderOption, // paths that exist and are a folder
|
FolderOption, // paths that exist and are a folder
|
||||||
NumberOption,
|
NumberOption, // integer and float values
|
||||||
|
IntegerOption, // only integer values
|
||||||
PathOption, // paths that exist in the file system
|
PathOption, // paths that exist in the file system
|
||||||
StringOption,
|
StringOption,
|
||||||
} = require('@sapphirecode/console-app');
|
} = require('@sapphirecode/console-app');
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
export type OptionType =
|
export type OptionType =
|
||||||
'string'
|
'string'
|
||||||
| 'number'
|
| 'number'
|
||||||
|
| 'int'
|
||||||
| 'boolean'
|
| 'boolean'
|
||||||
| 'file'
|
| 'file'
|
||||||
| 'folder'
|
| 'folder'
|
||||||
|
8
lib/Options/IntegerOption.ts
Normal file
8
lib/Options/IntegerOption.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { BaseOption } from './BaseOption';
|
||||||
|
|
||||||
|
export class IntegerOption extends BaseOption<number> {
|
||||||
|
protected get validation ():TypeValidation {
|
||||||
|
return new TypeValidation ('int');
|
||||||
|
}
|
||||||
|
}
|
19
lib/Sources/Interactive/NumberSubSource.ts
Normal file
19
lib/Sources/Interactive/NumberSubSource.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { NumberPrompt } from 'enquirer';
|
||||||
|
import { InteractiveSubSource } from './InteractiveSubSource';
|
||||||
|
|
||||||
|
export class NumberSubSource extends InteractiveSubSource {
|
||||||
|
protected condition ():boolean {
|
||||||
|
return this.val.type_validation.option_type === 'number';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async run ():Promise<void> {
|
||||||
|
await this.val.assign_arg (
|
||||||
|
this.opt,
|
||||||
|
await new NumberPrompt ({
|
||||||
|
message: this.get_message (),
|
||||||
|
default: this.opt.default
|
||||||
|
})
|
||||||
|
.run ()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -2,10 +2,12 @@ import { ArraySubSource } from './ArraySubSource';
|
|||||||
import { BooleanSubSource } from './BooleanSubSource';
|
import { BooleanSubSource } from './BooleanSubSource';
|
||||||
import { PresetSubSource } from './PresetSubSource';
|
import { PresetSubSource } from './PresetSubSource';
|
||||||
import { StringSubSource } from './StringSubSource';
|
import { StringSubSource } from './StringSubSource';
|
||||||
|
import { NumberSubSource } from './NumberSubSource';
|
||||||
|
|
||||||
export const sources = [
|
export const sources = [
|
||||||
ArraySubSource,
|
ArraySubSource,
|
||||||
BooleanSubSource,
|
BooleanSubSource,
|
||||||
PresetSubSource,
|
PresetSubSource,
|
||||||
|
NumberSubSource,
|
||||||
StringSubSource
|
StringSubSource
|
||||||
];
|
];
|
||||||
|
@ -40,6 +40,13 @@ export class TypeValidation {
|
|||||||
return Promise.resolve (String (value));
|
return Promise.resolve (String (value));
|
||||||
|
|
||||||
if (this.option_type === 'number') {
|
if (this.option_type === 'number') {
|
||||||
|
const as_num = parseFloat (String (value));
|
||||||
|
if (isNaN (as_num))
|
||||||
|
throw new Error ('value is not a number');
|
||||||
|
return Promise.resolve (as_num);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.option_type === 'int') {
|
||||||
const as_num = parseInt (String (value));
|
const as_num = parseInt (String (value));
|
||||||
if (isNaN (as_num))
|
if (isNaN (as_num))
|
||||||
throw new Error ('value is not a number');
|
throw new Error ('value is not a number');
|
||||||
|
@ -12,3 +12,4 @@ export { FolderOption } from './Options/FolderOption';
|
|||||||
export { NumberOption } from './Options/NumberOption';
|
export { NumberOption } from './Options/NumberOption';
|
||||||
export { PathOption } from './Options/PathOption';
|
export { PathOption } from './Options/PathOption';
|
||||||
export { StringOption } from './Options/StringOption';
|
export { StringOption } from './Options/StringOption';
|
||||||
|
export { IntegerOption } from './Options/IntegerOption';
|
||||||
|
20
package.json
20
package.json
@ -1,13 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "@sapphirecode/console-app",
|
"name": "@sapphirecode/console-app",
|
||||||
"version": "2.0.10",
|
"version": "2.1.0",
|
||||||
"main": "dist/lib/index.js",
|
"main": "dist/lib/index.js",
|
||||||
"author": "Timo Hocker <timo@scode.ovh>",
|
"author": {
|
||||||
|
"name": "Timo Hocker",
|
||||||
|
"email": "timo@scode.ovh"
|
||||||
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git@git.scode.ovh:timo/console-app"
|
"url": "https://git.scode.ovh:timo/console-app.git"
|
||||||
},
|
},
|
||||||
|
"bugs": "https://redmine.scode.ovh/projects/console-app",
|
||||||
"description": "read parameters from env, console args or interactively",
|
"description": "read parameters from env, console args or interactively",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ava/typescript": "^1.1.1",
|
"@ava/typescript": "^1.1.1",
|
||||||
@ -37,5 +41,13 @@
|
|||||||
"fs-extra": "^9.0.0",
|
"fs-extra": "^9.0.0",
|
||||||
"hjson": "^3.2.1",
|
"hjson": "^3.2.1",
|
||||||
"yargs": "^15.3.1"
|
"yargs": "^15.3.1"
|
||||||
}
|
},
|
||||||
|
"keywords": [
|
||||||
|
"interactive",
|
||||||
|
"console input",
|
||||||
|
"config",
|
||||||
|
"command line args",
|
||||||
|
"environment variables",
|
||||||
|
"parsing"
|
||||||
|
]
|
||||||
}
|
}
|
@ -24,7 +24,13 @@ test ('no number', (t) => {
|
|||||||
|
|
||||||
test ('number', async (t) => {
|
test ('number', async (t) => {
|
||||||
const validator = new TypeValidation ('number');
|
const validator = new TypeValidation ('number');
|
||||||
const res = await validator.to_type ('123');
|
const res = await validator.to_type ('123.4');
|
||||||
|
t.is (res, 123.4);
|
||||||
|
});
|
||||||
|
|
||||||
|
test ('int', async (t) => {
|
||||||
|
const validator = new TypeValidation ('int');
|
||||||
|
const res = await validator.to_type ('123.4');
|
||||||
t.is (res, 123);
|
t.is (res, 123);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user