more types
This commit is contained in:
parent
0e12cd0fb5
commit
8dd3d75a7c
@ -1,22 +1,30 @@
|
||||
/* eslint-disable complexity */
|
||||
/* eslint-disable max-statements */
|
||||
/* eslint-disable no-process-env */
|
||||
import { Persistent } from '@scode/modelling';
|
||||
import fs from 'fs-extra';
|
||||
|
||||
enum OptionType {
|
||||
string = 'string',
|
||||
number = 'number',
|
||||
boolean = 'boolean'
|
||||
boolean = 'boolean',
|
||||
file = 'file',
|
||||
folder = 'folder',
|
||||
path = 'path'
|
||||
}
|
||||
|
||||
interface Option {
|
||||
name: string;
|
||||
type: OptionType;
|
||||
required?: boolean;
|
||||
default: unknown;
|
||||
alias: string;
|
||||
env: string;
|
||||
default?: unknown;
|
||||
alias?: string;
|
||||
env?: string;
|
||||
}
|
||||
|
||||
interface OptionProcess extends Option {
|
||||
filled: boolean;
|
||||
value?: unknown;
|
||||
}
|
||||
|
||||
export class InteractiveOptions extends Persistent {
|
||||
@ -42,11 +50,66 @@ export class InteractiveOptions extends Persistent {
|
||||
await this.get_interactive_options ();
|
||||
}
|
||||
|
||||
private get_env_options (): void {
|
||||
|
||||
private get unfilled (): Array<OptionProcess> {
|
||||
return this.options.filter ((o) => !o.filled);
|
||||
}
|
||||
|
||||
private get_args_options (): void {
|
||||
private async assign_arg (opt: OptionProcess, value: unknown): Promise<void> {
|
||||
if (opt.type === OptionType.string) {
|
||||
opt.value = value;
|
||||
opt.filled = true;
|
||||
return;
|
||||
}
|
||||
if (opt.type === OptionType.number) {
|
||||
const as_num = parseInt (value);
|
||||
const is_num = !isNaN (as_num);
|
||||
if (is_num) {
|
||||
opt.value = as_num;
|
||||
opt.filled = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (opt.type === OptionType.boolean) {
|
||||
const is_boo = (/^(?:true|false)$/ui).test (value);
|
||||
if (is_boo) {
|
||||
const as_boo = (/true/ui).test (value);
|
||||
opt.value = as_boo;
|
||||
opt.filled = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (
|
||||
opt.type === OptionType.path
|
||||
|| opt.type === OptionType.file
|
||||
|| opt.type === OptionType.folder
|
||||
) {
|
||||
if (!await fs.pathExists (value))
|
||||
return;
|
||||
if (opt.type === OptionType.path) {
|
||||
opt.value = value;
|
||||
opt.filled = true;
|
||||
return;
|
||||
}
|
||||
const stat = await fs.stat (value);
|
||||
if (stat.isDirectory () === (opt.type === OptionType.folder)) {
|
||||
opt.value = value;
|
||||
opt.filled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async get_env_options (): void {
|
||||
await Promise.all (this.options.map ((opt) => {
|
||||
if (
|
||||
typeof opt.env !== 'undefined'
|
||||
&& typeof process.env[opt.env] !== 'undefined'
|
||||
)
|
||||
return this.assign_arg (opt, process.env[opt.env]);
|
||||
return Promise.resolve ();
|
||||
}));
|
||||
}
|
||||
|
||||
private async get_args_options (): void {
|
||||
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
"devDependencies": {
|
||||
"@ava/typescript": "^1.1.1",
|
||||
"@scode/eslint-config-ts": "^1.0.31",
|
||||
"@types/fs-extra": "^8.1.0",
|
||||
"ava": "^3.8.1",
|
||||
"eslint": "^6.8.0",
|
||||
"nyc": "^15.0.1",
|
||||
@ -24,6 +25,7 @@
|
||||
"dependencies": {
|
||||
"@scode/modelling": "^1.0.24",
|
||||
"enquirer": "^2.3.5",
|
||||
"fs-extra": "^9.0.0",
|
||||
"yargs": "^15.3.1"
|
||||
}
|
||||
}
|
||||
|
38
yarn.lock
38
yarn.lock
@ -285,6 +285,13 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
|
||||
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
|
||||
|
||||
"@types/fs-extra@^8.1.0":
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d"
|
||||
integrity sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/glob@^7.1.1":
|
||||
version "7.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
|
||||
@ -518,6 +525,11 @@ astral-regex@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
|
||||
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
|
||||
|
||||
at-least-node@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
|
||||
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
|
||||
|
||||
ava@^3.8.1:
|
||||
version "3.8.1"
|
||||
resolved "https://registry.yarnpkg.com/ava/-/ava-3.8.1.tgz#ec50814f8e6c769b8ed0dcc64bca990cd06bb2d1"
|
||||
@ -1432,6 +1444,16 @@ fromentries@^1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.2.0.tgz#e6aa06f240d6267f913cea422075ef88b63e7897"
|
||||
integrity sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==
|
||||
|
||||
fs-extra@^9.0.0:
|
||||
version "9.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3"
|
||||
integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==
|
||||
dependencies:
|
||||
at-least-node "^1.0.0"
|
||||
graceful-fs "^4.2.0"
|
||||
jsonfile "^6.0.1"
|
||||
universalify "^1.0.0"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
@ -1557,7 +1579,7 @@ got@^9.6.0:
|
||||
to-readable-stream "^1.0.0"
|
||||
url-parse-lax "^3.0.0"
|
||||
|
||||
graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.2:
|
||||
graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
|
||||
version "4.2.4"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
|
||||
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
|
||||
@ -1991,6 +2013,15 @@ json5@^2.1.2:
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
|
||||
jsonfile@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179"
|
||||
integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==
|
||||
dependencies:
|
||||
universalify "^1.0.0"
|
||||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
keyv@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
|
||||
@ -3190,6 +3221,11 @@ unique-string@^2.0.0:
|
||||
dependencies:
|
||||
crypto-random-string "^2.0.0"
|
||||
|
||||
universalify@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d"
|
||||
integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
|
||||
|
||||
update-notifier@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3"
|
||||
|
Loading…
x
Reference in New Issue
Block a user