Compare commits
4 Commits
229b916cd5
...
7574c250af
Author | SHA1 | Date | |
---|---|---|---|
7574c250af | |||
021f55833d | |||
742d77d29f | |||
3f0b9fad79 |
38
AppTest.js
38
AppTest.js
@ -7,23 +7,31 @@
|
|||||||
|
|
||||||
// @ts-nocheck
|
// @ts-nocheck
|
||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable id-match */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// eslint-disable-next-line node/no-missing-require, id-match
|
const {
|
||||||
const { InteractiveOptions } = require ('./dist/lib/index.js');
|
StringOption,
|
||||||
|
BooleanOption,
|
||||||
|
NumberOption,
|
||||||
|
ArrayOption,
|
||||||
|
FolderOption
|
||||||
|
} = require ('./dist/lib/index.js');
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const reader = new InteractiveOptions ([
|
const str = await new StringOption ({ name: 'str' })
|
||||||
{ name: 'str', type: 'string', env: 'TEST_STR' },
|
.parse ();
|
||||||
{ name: 'bool', type: 'boolean', env: 'TEST_BOOL' },
|
const bool = await new BooleanOption ({ name: 'bool' })
|
||||||
{ name: 'num', type: 'number', env: 'TEST_NUM' },
|
.parse ();
|
||||||
{ name: 'arr', type: 'array', env: 'TEST_ARR' },
|
const num = await new NumberOption ({ name: 'num' })
|
||||||
{ name: 'fld', type: 'folder', env: 'TEST_FOLDER' }
|
.parse ();
|
||||||
], {
|
const arr = await new ArrayOption ({ name: 'arr' })
|
||||||
exit_on_interrupt: true,
|
.parse ();
|
||||||
configs: [ 'test.json' ],
|
const fld = await new FolderOption ({ name: 'fld' })
|
||||||
error_callback: console.log
|
.parse ();
|
||||||
});
|
|
||||||
await reader.parse ();
|
const data = { str, bool, num, arr, fld };
|
||||||
console.log (reader.serialize (true));
|
|
||||||
|
console.log (data);
|
||||||
}) ();
|
}) ();
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) Sapphirecode - All Rights Reserved
|
|
||||||
* This file is part of console-app which is released under MIT.
|
|
||||||
* See file 'LICENSE' for full license details.
|
|
||||||
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { Persistent } from '@sapphirecode/modelling';
|
|
||||||
import { TypeValidation } from './Types/TypeValidation';
|
|
||||||
import { PathType } from './Types/PathType';
|
|
||||||
import { OptionType } from './OptionType';
|
|
||||||
import { OptionSource } from './Sources/OptionSource';
|
|
||||||
import { EnvSource } from './Sources/EnvSource';
|
|
||||||
import { ArgSource } from './Sources/ArgSource';
|
|
||||||
import { ConfigSource } from './Sources/ConfigSource';
|
|
||||||
import { InteractiveSource } from './Sources/InteractiveSource';
|
|
||||||
import { Option, OptionProcess } from './Option';
|
|
||||||
import { ErrorCallback } from './Types/ErrorCallback';
|
|
||||||
|
|
||||||
const types: Record<OptionType, TypeValidation> = {
|
|
||||||
string: new TypeValidation ('string'),
|
|
||||||
number: new TypeValidation ('number'),
|
|
||||||
boolean: new TypeValidation ('boolean'),
|
|
||||||
file: new PathType ('file'),
|
|
||||||
folder: new PathType ('folder'),
|
|
||||||
path: new PathType ('path'),
|
|
||||||
array: new TypeValidation ('array')
|
|
||||||
};
|
|
||||||
|
|
||||||
interface SourceConfig {
|
|
||||||
env?: boolean;
|
|
||||||
args?: boolean;
|
|
||||||
interactive?: boolean;
|
|
||||||
configs?: string[];
|
|
||||||
exit_on_interrupt?: boolean;
|
|
||||||
error_callback?: ErrorCallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class InteractiveOptions extends Persistent {
|
|
||||||
protected options: Array<OptionProcess>;
|
|
||||||
protected quiet = false;
|
|
||||||
protected sources: OptionSource[] = [];
|
|
||||||
|
|
||||||
public constructor (
|
|
||||||
options: Array<Option>,
|
|
||||||
source_config: SourceConfig = {}
|
|
||||||
) {
|
|
||||||
super ();
|
|
||||||
this.options = options
|
|
||||||
.map ((v) => ({
|
|
||||||
filled: false,
|
|
||||||
type_validation: types[v.type],
|
|
||||||
...v
|
|
||||||
} as OptionProcess));
|
|
||||||
for (const option of this.options) {
|
|
||||||
if (
|
|
||||||
typeof option.default !== 'undefined'
|
|
||||||
&& typeof option.default !== option.type_validation.string_type
|
|
||||||
) {
|
|
||||||
throw new Error (
|
|
||||||
`default does not match option type on ${option.name}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.properties[option.name] = option.type_validation.persistent_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
const exit_on_interrupt
|
|
||||||
= typeof source_config.exit_on_interrupt === 'boolean'
|
|
||||||
? source_config.exit_on_interrupt
|
|
||||||
: false;
|
|
||||||
|
|
||||||
if (
|
|
||||||
typeof source_config.configs !== 'undefined'
|
|
||||||
&& Array.isArray (source_config.configs)
|
|
||||||
) {
|
|
||||||
this.sources.push (new ConfigSource (
|
|
||||||
source_config.configs,
|
|
||||||
source_config.error_callback
|
|
||||||
));
|
|
||||||
}
|
|
||||||
if (source_config.env !== false)
|
|
||||||
this.sources.push (new EnvSource (source_config.error_callback));
|
|
||||||
if (source_config.args !== false)
|
|
||||||
this.sources.push (new ArgSource (source_config.error_callback));
|
|
||||||
if (source_config.interactive !== false) {
|
|
||||||
this.sources.push (new InteractiveSource (
|
|
||||||
exit_on_interrupt,
|
|
||||||
source_config.error_callback
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async parse (): Promise<Record<string, unknown>> {
|
|
||||||
for (const src of this.sources) {
|
|
||||||
// eslint-disable-next-line no-await-in-loop
|
|
||||||
await src.parse (this.options);
|
|
||||||
}
|
|
||||||
for (const opt of this.options) {
|
|
||||||
if (!opt.filled) {
|
|
||||||
opt.value = opt.default;
|
|
||||||
opt.filled = true;
|
|
||||||
}
|
|
||||||
this.set (opt.name, opt.value);
|
|
||||||
}
|
|
||||||
return this.to_object ();
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,26 +5,34 @@
|
|||||||
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { TypeValidation } from './Types/TypeValidation';
|
import { TypeValidation } from './TypeValidation/TypeValidation';
|
||||||
import { OptionType } from './OptionType';
|
|
||||||
|
interface SourceConfig {
|
||||||
|
console?: boolean,
|
||||||
|
configs?: string[],
|
||||||
|
env?: boolean,
|
||||||
|
interactive?: boolean,
|
||||||
|
}
|
||||||
|
|
||||||
interface Option {
|
interface Option {
|
||||||
name: string;
|
name: string;
|
||||||
type: OptionType;
|
|
||||||
required?: boolean;
|
required?: boolean;
|
||||||
default?: unknown;
|
default?: unknown;
|
||||||
|
sources?: SourceConfig;
|
||||||
alias?: string;
|
alias?: string;
|
||||||
env?: string;
|
env?: string;
|
||||||
description?: string;
|
|
||||||
message?: string;
|
message?: string;
|
||||||
preset?: unknown[];
|
|
||||||
error?: string;
|
error?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface OptionProcess extends Option {
|
class OptionValue {
|
||||||
filled: boolean;
|
public filled = false;
|
||||||
value?: unknown;
|
public value?: unknown;
|
||||||
type_validation: TypeValidation;
|
public readonly type_validation: TypeValidation;
|
||||||
|
|
||||||
|
public constructor (type_validation: TypeValidation) {
|
||||||
|
this.type_validation = type_validation;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Option, OptionProcess };
|
export { Option, OptionValue };
|
||||||
|
@ -13,4 +13,3 @@ export type OptionType =
|
|||||||
| 'folder'
|
| 'folder'
|
||||||
| 'path'
|
| 'path'
|
||||||
| 'array';
|
| 'array';
|
||||||
|
|
||||||
|
8
lib/Options/ArrayOption.ts
Normal file
8
lib/Options/ArrayOption.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { BaseOption } from './BaseOption';
|
||||||
|
|
||||||
|
export class ArrayOption extends BaseOption<(string|number|boolean)[]> {
|
||||||
|
protected get validation ():TypeValidation {
|
||||||
|
return new TypeValidation ('array');
|
||||||
|
}
|
||||||
|
}
|
52
lib/Options/BaseOption.ts
Normal file
52
lib/Options/BaseOption.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { OptionSource } from '../Sources/OptionSource';
|
||||||
|
import { Option, OptionValue } from '../Option';
|
||||||
|
import { EnvSource } from '../Sources/EnvSource';
|
||||||
|
import { ErrorCallback } from '../ErrorCallback';
|
||||||
|
import { ArgSource } from '../Sources/ArgSource';
|
||||||
|
import { ConfigSource } from '../Sources/ConfigSource';
|
||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { InteractiveSource } from '../Sources/InteractiveSource';
|
||||||
|
|
||||||
|
export abstract class BaseOption<T> {
|
||||||
|
protected readonly sources: OptionSource[] = [];
|
||||||
|
private _config: Option;
|
||||||
|
|
||||||
|
public constructor (
|
||||||
|
config: Option,
|
||||||
|
error_callback?: ErrorCallback,
|
||||||
|
exit_on_interrupt = true
|
||||||
|
) {
|
||||||
|
this._config = config;
|
||||||
|
|
||||||
|
const sources = config.sources || {};
|
||||||
|
if (typeof sources.configs !== 'undefined')
|
||||||
|
this.sources.push (new ConfigSource (sources.configs, error_callback));
|
||||||
|
|
||||||
|
if (sources.env !== false)
|
||||||
|
this.sources.push (new EnvSource (error_callback));
|
||||||
|
|
||||||
|
if (sources.console !== false)
|
||||||
|
this.sources.push (new ArgSource (error_callback));
|
||||||
|
|
||||||
|
if (sources.interactive !== false) {
|
||||||
|
this.sources.push (new InteractiveSource (
|
||||||
|
exit_on_interrupt,
|
||||||
|
error_callback
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract get validation(): TypeValidation;
|
||||||
|
|
||||||
|
public async parse (): Promise<T> {
|
||||||
|
const val = new OptionValue (this.validation);
|
||||||
|
|
||||||
|
for (const source of this.sources)
|
||||||
|
// eslint-disable-next-line no-await-in-loop
|
||||||
|
await source.parse (this._config, val);
|
||||||
|
|
||||||
|
if (!val.filled)
|
||||||
|
return this._config.default as T;
|
||||||
|
return val.value as T;
|
||||||
|
}
|
||||||
|
}
|
8
lib/Options/BooleanOption.ts
Normal file
8
lib/Options/BooleanOption.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { BaseOption } from './BaseOption';
|
||||||
|
|
||||||
|
export class BooleanOption extends BaseOption<boolean> {
|
||||||
|
protected get validation ():TypeValidation {
|
||||||
|
return new TypeValidation ('boolean');
|
||||||
|
}
|
||||||
|
}
|
9
lib/Options/FileOption.ts
Normal file
9
lib/Options/FileOption.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { PathType } from '../TypeValidation/PathType';
|
||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { StringOption } from './StringOption';
|
||||||
|
|
||||||
|
export class FileOption extends StringOption {
|
||||||
|
protected get validation ():TypeValidation {
|
||||||
|
return new PathType ('file');
|
||||||
|
}
|
||||||
|
}
|
9
lib/Options/FolderOption.ts
Normal file
9
lib/Options/FolderOption.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { PathType } from '../TypeValidation/PathType';
|
||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { StringOption } from './StringOption';
|
||||||
|
|
||||||
|
export class FolderOption extends StringOption {
|
||||||
|
protected get validation (): TypeValidation {
|
||||||
|
return new PathType ('folder');
|
||||||
|
}
|
||||||
|
}
|
8
lib/Options/NumberOption.ts
Normal file
8
lib/Options/NumberOption.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { BaseOption } from './BaseOption';
|
||||||
|
|
||||||
|
export class NumberOption extends BaseOption<number> {
|
||||||
|
protected get validation ():TypeValidation {
|
||||||
|
return new TypeValidation ('number');
|
||||||
|
}
|
||||||
|
}
|
9
lib/Options/PathOption.ts
Normal file
9
lib/Options/PathOption.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { PathType } from '../TypeValidation/PathType';
|
||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { StringOption } from './StringOption';
|
||||||
|
|
||||||
|
export class PathOption extends StringOption {
|
||||||
|
protected get validation (): TypeValidation {
|
||||||
|
return new PathType ('path');
|
||||||
|
}
|
||||||
|
}
|
14
lib/Options/StringOption.ts
Normal file
14
lib/Options/StringOption.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import { TypeValidation } from '../TypeValidation/TypeValidation';
|
||||||
|
import { StringOptionConfig } from '../SubConfigs';
|
||||||
|
import { BaseOption } from './BaseOption';
|
||||||
|
|
||||||
|
export class StringOption extends BaseOption<string> {
|
||||||
|
protected get validation ():TypeValidation {
|
||||||
|
return new TypeValidation ('string');
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-useless-constructor
|
||||||
|
public constructor (config: StringOptionConfig) {
|
||||||
|
super (config);
|
||||||
|
}
|
||||||
|
}
|
@ -8,68 +8,43 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
/* eslint-disable no-process-exit */
|
/* eslint-disable no-process-exit */
|
||||||
import yargs, { Options } from 'yargs';
|
import yargs, { Options } from 'yargs';
|
||||||
import { OptionProcess } from '../Option';
|
import { Option, OptionValue } from '../Option';
|
||||||
import { OptionSource } from './OptionSource';
|
import { OptionSource } from './OptionSource';
|
||||||
|
|
||||||
export class ArgSource extends OptionSource {
|
export class ArgSource extends OptionSource {
|
||||||
private create_config (options: OptionProcess[]): Record<string, Options> {
|
private create_config (
|
||||||
const yargs_config: Record<string, Options> = {
|
config: Option,
|
||||||
quiet: {
|
persistent_type: string
|
||||||
alias: 'q',
|
): Record<string, Options> {
|
||||||
default: false,
|
return {
|
||||||
type: 'boolean',
|
[config.name]: {
|
||||||
describe: 'do not ask for options interactively'
|
alias: config.alias,
|
||||||
},
|
|
||||||
help: {
|
|
||||||
alias: 'h',
|
|
||||||
default: false,
|
|
||||||
type: 'boolean',
|
|
||||||
describe: ''
|
|
||||||
}
|
|
||||||
};
|
|
||||||
for (const opt of options) {
|
|
||||||
const type = opt.type_validation.persistent_type;
|
|
||||||
yargs_config[opt.name] = {
|
|
||||||
alias: opt.alias,
|
|
||||||
// eslint-disable-next-line no-undefined
|
// eslint-disable-next-line no-undefined
|
||||||
default: type === 'boolean' ? undefined : opt.default,
|
default: undefined,
|
||||||
type,
|
type: persistent_type
|
||||||
describe: opt.description
|
}
|
||||||
};
|
} as Record<string, Options>;
|
||||||
}
|
|
||||||
return yargs_config;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async parse (options: OptionProcess[]): Promise<void> {
|
public async parse (opt: Option, val: OptionValue): Promise<void> {
|
||||||
const yargs_config = this.create_config (options);
|
const yargs_config = this.create_config (
|
||||||
|
opt,
|
||||||
|
val.type_validation.persistent_type
|
||||||
|
);
|
||||||
|
|
||||||
const argv = yargs.options (yargs_config)
|
const argv = yargs.options (yargs_config)
|
||||||
.parse ();
|
.parse ();
|
||||||
if (argv.help) {
|
|
||||||
yargs.options (yargs_config)
|
|
||||||
.showHelp ();
|
|
||||||
process.exit (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
await Promise.all (options.map ((opt) => {
|
if (typeof argv[opt.name] === 'undefined')
|
||||||
if (typeof argv[opt.name] === 'undefined')
|
return;
|
||||||
return Promise.resolve ();
|
|
||||||
if (
|
if (
|
||||||
opt.type === 'array'
|
val.type_validation.option_type === 'array'
|
||||||
&& (argv[opt.name] as Array<unknown>)
|
&& (argv[opt.name] as Array<unknown>)
|
||||||
.filter ((v) => typeof v !== 'undefined').length <= 0
|
.filter ((v) => typeof v !== 'undefined').length <= 0
|
||||||
)
|
)
|
||||||
return Promise.resolve ();
|
return;
|
||||||
return this.assign_arg (opt, argv[opt.name]);
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (argv.quiet) {
|
await this.assign_arg (opt, val, argv[opt.name]);
|
||||||
const missing = options.filter ((o) => !o.filled && o.required)
|
|
||||||
.map ((o) => o.name);
|
|
||||||
if (missing.length > 0) {
|
|
||||||
console.error ('missing arguments:');
|
|
||||||
console.error (missing.join (', '));
|
|
||||||
process.exit (0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@ import { dirname, join } from 'path';
|
|||||||
import fs from 'fs-extra';
|
import fs from 'fs-extra';
|
||||||
import { run_regex } from '@sapphirecode/utilities';
|
import { run_regex } from '@sapphirecode/utilities';
|
||||||
import hjson from 'hjson';
|
import hjson from 'hjson';
|
||||||
import { OptionProcess } from '../Option';
|
import { OptionValue, Option } from '../Option';
|
||||||
import { ErrorCallback } from '../Types/ErrorCallback';
|
import { ErrorCallback } from '../ErrorCallback';
|
||||||
import { OptionSource } from './OptionSource';
|
import { OptionSource } from './OptionSource';
|
||||||
|
|
||||||
export class ConfigSource extends OptionSource {
|
export class ConfigSource extends OptionSource {
|
||||||
@ -46,7 +46,7 @@ export class ConfigSource extends OptionSource {
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async parse (options: OptionProcess[]): Promise<void> {
|
public async parse (opt: Option, val: OptionValue): Promise<void> {
|
||||||
const data: Record<string, unknown> = {};
|
const data: Record<string, unknown> = {};
|
||||||
for (const f of this._config_files) {
|
for (const f of this._config_files) {
|
||||||
try {
|
try {
|
||||||
@ -63,9 +63,7 @@ export class ConfigSource extends OptionSource {
|
|||||||
|
|
||||||
const keys = Object.keys (data);
|
const keys = Object.keys (data);
|
||||||
|
|
||||||
for (const opt of options) {
|
if (keys.includes (opt.name))
|
||||||
if (keys.includes (opt.name))
|
await this.assign_arg (opt, val, data[opt.name]);
|
||||||
await this.assign_arg (opt, data[opt.name]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,18 +6,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* eslint-disable no-process-env */
|
/* eslint-disable no-process-env */
|
||||||
import { OptionProcess } from '../Option';
|
import { Option, OptionValue } from '../Option';
|
||||||
import { OptionSource } from './OptionSource';
|
import { OptionSource } from './OptionSource';
|
||||||
|
|
||||||
export class EnvSource extends OptionSource {
|
export class EnvSource extends OptionSource {
|
||||||
public async parse (options: OptionProcess[]): Promise<void> {
|
public async parse (opt: Option, val:OptionValue): Promise<void> {
|
||||||
await Promise.all (options.map ((opt) => {
|
if (
|
||||||
if (
|
typeof opt.env !== 'undefined'
|
||||||
typeof opt.env !== 'undefined'
|
|
||||||
&& typeof process.env[opt.env] !== 'undefined'
|
&& typeof process.env[opt.env] !== 'undefined'
|
||||||
)
|
)
|
||||||
return this.assign_arg (opt, process.env[opt.env]);
|
await this.assign_arg (opt, val, process.env[opt.env]);
|
||||||
return Promise.resolve ();
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,9 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
/* eslint-disable no-process-exit */
|
/* eslint-disable no-process-exit */
|
||||||
import { Confirm, Input, List, AutoComplete } from 'enquirer';
|
import { Confirm, Input, List, AutoComplete } from 'enquirer';
|
||||||
import { OptionProcess, Option } from '../Option';
|
import { ErrorCallback } from '../ErrorCallback';
|
||||||
import { ErrorCallback } from '../Types/ErrorCallback';
|
import { Option, OptionValue } from '../Option';
|
||||||
|
import { StringOptionConfig } from '../SubConfigs';
|
||||||
import { OptionSource } from './OptionSource';
|
import { OptionSource } from './OptionSource';
|
||||||
|
|
||||||
export class InteractiveSource extends OptionSource {
|
export class InteractiveSource extends OptionSource {
|
||||||
@ -29,18 +30,20 @@ export class InteractiveSource extends OptionSource {
|
|||||||
: opt.message;
|
: opt.message;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async prompt (opt: OptionProcess): Promise<void> {
|
private async prompt (opt: Option, val:OptionValue): Promise<void> {
|
||||||
if (opt.filled)
|
if (val.filled)
|
||||||
return;
|
return;
|
||||||
let value = null;
|
let value = null;
|
||||||
|
const { option_type } = val.type_validation;
|
||||||
|
const { preset } = opt as StringOptionConfig;
|
||||||
if (
|
if (
|
||||||
opt.type === 'string'
|
option_type === 'string'
|
||||||
|| opt.type === 'file'
|
|| option_type === 'file'
|
||||||
|| opt.type === 'folder'
|
|| option_type === 'folder'
|
||||||
|| opt.type === 'path'
|
|| option_type === 'path'
|
||||||
|| opt.type === 'number'
|
|| option_type === 'number'
|
||||||
) {
|
) {
|
||||||
if (typeof opt.preset === 'undefined') {
|
if (typeof preset === 'undefined') {
|
||||||
value = await new Input ({
|
value = await new Input ({
|
||||||
message: this.get_message (opt),
|
message: this.get_message (opt),
|
||||||
default: opt.default
|
default: opt.default
|
||||||
@ -51,14 +54,14 @@ export class InteractiveSource extends OptionSource {
|
|||||||
value = await new AutoComplete ({
|
value = await new AutoComplete ({
|
||||||
message: this.get_message (opt),
|
message: this.get_message (opt),
|
||||||
default: opt.default,
|
default: opt.default,
|
||||||
choices: opt.preset,
|
choices: preset,
|
||||||
limit: 10
|
limit: 10
|
||||||
})
|
})
|
||||||
.run ();
|
.run ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
opt.type === 'boolean'
|
option_type === 'boolean'
|
||||||
) {
|
) {
|
||||||
value = await new Confirm ({
|
value = await new Confirm ({
|
||||||
message: this.get_message (opt),
|
message: this.get_message (opt),
|
||||||
@ -66,7 +69,7 @@ export class InteractiveSource extends OptionSource {
|
|||||||
})
|
})
|
||||||
.run ();
|
.run ();
|
||||||
}
|
}
|
||||||
if (opt.type === 'array') {
|
if (option_type === 'array') {
|
||||||
value = await new List ({
|
value = await new List ({
|
||||||
message: this.get_message (opt),
|
message: this.get_message (opt),
|
||||||
default: opt.default
|
default: opt.default
|
||||||
@ -76,22 +79,20 @@ export class InteractiveSource extends OptionSource {
|
|||||||
if (value === null)
|
if (value === null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await this.assign_arg (opt, value);
|
await this.assign_arg (opt, val, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async parse (options: OptionProcess[]): Promise<void> {
|
public async parse (opt: Option, val:OptionValue): Promise<void> {
|
||||||
for (const opt of options) {
|
while (!val.filled) {
|
||||||
while (!opt.filled) {
|
// eslint-disable-next-line no-await-in-loop
|
||||||
// eslint-disable-next-line no-await-in-loop
|
await this.prompt (opt, val)
|
||||||
await this.prompt (opt)
|
.catch ((e) => {
|
||||||
.catch ((e) => {
|
if (this._exit_on_interrupt)
|
||||||
if (this._exit_on_interrupt)
|
process.exit (0);
|
||||||
process.exit (0);
|
throw e;
|
||||||
throw e;
|
});
|
||||||
});
|
if (!val.filled)
|
||||||
if (!opt.filled)
|
console.log (opt.error || 'input was invalid');
|
||||||
console.log (opt.error || 'input was invalid');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { OptionProcess } from '../Option';
|
import { ErrorCallback } from '../ErrorCallback';
|
||||||
import { ErrorCallback } from '../Types/ErrorCallback';
|
import { OptionValue, Option } from '../Option';
|
||||||
|
|
||||||
export abstract class OptionSource {
|
export abstract class OptionSource {
|
||||||
public abstract async parse(opt: OptionProcess[]): Promise<void>;
|
public abstract async parse(opt: Option, value: OptionValue): Promise<void>;
|
||||||
|
|
||||||
protected error_callback?: ErrorCallback;
|
protected error_callback?: ErrorCallback;
|
||||||
|
|
||||||
@ -18,12 +18,13 @@ export abstract class OptionSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected async assign_arg (
|
protected async assign_arg (
|
||||||
opt: OptionProcess,
|
opt: Option,
|
||||||
|
val: OptionValue,
|
||||||
value: unknown
|
value: unknown
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
try {
|
try {
|
||||||
opt.value = await opt.type_validation.to_type (value);
|
val.value = await val.type_validation.to_type (value);
|
||||||
opt.filled = true;
|
val.filled = true;
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
if (typeof this.error_callback !== 'undefined')
|
if (typeof this.error_callback !== 'undefined')
|
||||||
|
7
lib/SubConfigs.ts
Normal file
7
lib/SubConfigs.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { Option } from './Option';
|
||||||
|
|
||||||
|
interface StringOptionConfig extends Option {
|
||||||
|
preset?: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export { StringOptionConfig };
|
@ -5,4 +5,10 @@
|
|||||||
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export { InteractiveOptions } from './InteractiveOptions';
|
export { ArrayOption } from './Options/ArrayOption';
|
||||||
|
export { BooleanOption } from './Options/BooleanOption';
|
||||||
|
export { FileOption } from './Options/FileOption';
|
||||||
|
export { FolderOption } from './Options/FolderOption';
|
||||||
|
export { NumberOption } from './Options/NumberOption';
|
||||||
|
export { PathOption } from './Options/PathOption';
|
||||||
|
export { StringOption } from './Options/StringOption';
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import test from 'ava';
|
import test from 'ava';
|
||||||
import { PathType } from '../lib/Types/PathType';
|
import { PathType } from '../lib/TypeValidation/PathType';
|
||||||
|
|
||||||
test ('no file', async (t) => {
|
test ('no file', async (t) => {
|
||||||
const validator = new PathType ('file');
|
const validator = new PathType ('file');
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import test from 'ava';
|
import test from 'ava';
|
||||||
import { TypeValidation } from '../lib/Types/TypeValidation';
|
import { TypeValidation } from '../lib/TypeValidation/TypeValidation';
|
||||||
|
|
||||||
test ('string', async (t) => {
|
test ('string', async (t) => {
|
||||||
const validator = new TypeValidation ('string');
|
const validator = new TypeValidation ('string');
|
||||||
|
179
yarn.lock
179
yarn.lock
@ -270,16 +270,16 @@
|
|||||||
eslint-plugin-sort-requires-by-path "^1.0.2"
|
eslint-plugin-sort-requires-by-path "^1.0.2"
|
||||||
|
|
||||||
"@sapphirecode/modelling@^1.0.35":
|
"@sapphirecode/modelling@^1.0.35":
|
||||||
version "1.0.40"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@sapphirecode/modelling/-/modelling-1.0.40.tgz#2118087f3ff5c2e7eedbe6dccfa42e906ec7b71e"
|
resolved "https://registry.yarnpkg.com/@sapphirecode/modelling/-/modelling-1.1.1.tgz#fa67779e3aa3fe267b64a3be7f2b6ee472bc3f1e"
|
||||||
integrity sha512-7bXC09JfdoPvrPXHXiEwavPeNFleSA4g+AgJOBIE0IR0WMCU1n4yTh0xhXOaYhDXNUCMGZkY7PJkJyryUq5Vkw==
|
integrity sha512-/8xbn8DuXiL4HbmOGzEs1ClApTEnbRgf9ZhUyrlLjHwR0CPelKGuEcyZh02Zmv3LY0fx/RoEvLcXHZay24modw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@sapphirecode/utilities" "^1.3.2"
|
"@sapphirecode/utilities" "^1.3.2"
|
||||||
|
|
||||||
"@sapphirecode/utilities@^1.3.2", "@sapphirecode/utilities@^1.3.4":
|
"@sapphirecode/utilities@^1.3.2", "@sapphirecode/utilities@^1.3.4":
|
||||||
version "1.3.5"
|
version "1.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/@sapphirecode/utilities/-/utilities-1.3.5.tgz#2010304ac43bdc685b31f6816b5717d451e45b2a"
|
resolved "https://registry.yarnpkg.com/@sapphirecode/utilities/-/utilities-1.4.1.tgz#3463136d2aa110f086317748fac7ad6a004d205e"
|
||||||
integrity sha512-blPObWTPCXaGkHFonIigDcuA3kEFkg8XqXyoLWFR6bGtHJvIA9z5IxYaV9ZGzGcMHEqUsH0+T0FaxOgwzxFk0w==
|
integrity sha512-KGUzrt1dnFJ3PzF/CGKQyxS6GD34E55Vap8qmDjTNw/JHRLX9hiJbBGTOfBdQEZ43n+3HIfKlNZgXV0T992OSg==
|
||||||
|
|
||||||
"@sindresorhus/is@^0.14.0":
|
"@sindresorhus/is@^0.14.0":
|
||||||
version "0.14.0"
|
version "0.14.0"
|
||||||
@ -303,11 +303,6 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
|
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
|
||||||
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
|
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
|
||||||
|
|
||||||
"@types/events@*":
|
|
||||||
version "3.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
|
|
||||||
integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
|
|
||||||
|
|
||||||
"@types/fs-extra@^9.0.0":
|
"@types/fs-extra@^9.0.0":
|
||||||
version "9.0.1"
|
version "9.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.1.tgz#91c8fc4c51f6d5dbe44c2ca9ab09310bd00c7918"
|
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.1.tgz#91c8fc4c51f6d5dbe44c2ca9ab09310bd00c7918"
|
||||||
@ -316,11 +311,10 @@
|
|||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/glob@^7.1.1":
|
"@types/glob@^7.1.1":
|
||||||
version "7.1.1"
|
version "7.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
|
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz#06ca26521353a545d94a0adc74f38a59d232c987"
|
||||||
integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
|
integrity sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/events" "*"
|
|
||||||
"@types/minimatch" "*"
|
"@types/minimatch" "*"
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
@ -334,15 +328,20 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
|
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
|
||||||
integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
|
integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
|
||||||
|
|
||||||
|
"@types/json5@^0.0.29":
|
||||||
|
version "0.0.29"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
||||||
|
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
|
||||||
|
|
||||||
"@types/minimatch@*":
|
"@types/minimatch@*":
|
||||||
version "3.0.3"
|
version "3.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "14.0.10"
|
version "14.0.12"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.10.tgz#dbfaa170bd9eafccccb6d7060743a761b0844afd"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.12.tgz#9c1d8ffb8084e8936603a6122a7649e40e68e04b"
|
||||||
integrity sha512-Bz23oN/5bi0rniKT24ExLf4cK0JdvN3dH/3k0whYkdN4eI4vS2ZW/2ENNn2uxHCzWcbdHIa/GRuWQytfzCjRYw==
|
integrity sha512-/sjzehvjkkpvLpYtN6/2dv5kg41otMGuHQUt9T2aiAuIfleCQRQHXXzF1eAw/qkZTj5Kcf4JSTf7EIizHocy6Q==
|
||||||
|
|
||||||
"@types/normalize-package-data@^2.4.0":
|
"@types/normalize-package-data@^2.4.0":
|
||||||
version "2.4.0"
|
version "2.4.0"
|
||||||
@ -362,40 +361,40 @@
|
|||||||
"@types/yargs-parser" "*"
|
"@types/yargs-parser" "*"
|
||||||
|
|
||||||
"@typescript-eslint/eslint-plugin@^3.0.0":
|
"@typescript-eslint/eslint-plugin@^3.0.0":
|
||||||
version "3.1.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.1.0.tgz#4ac00ecca3bbea740c577f1843bc54fa69c3def2"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.2.0.tgz#7fb997f391af32ae6ca1dbe56bcefe4dd30bda14"
|
||||||
integrity sha512-D52KwdgkjYc+fmTZKW7CZpH5ZBJREJKZXRrveMiRCmlzZ+Rw9wRVJ1JAmHQ9b/+Ehy1ZeaylofDB9wwXUt83wg==
|
integrity sha512-t9RTk/GyYilIXt6BmZurhBzuMT9kLKw3fQoJtK9ayv0tXTlznXEAnx07sCLXdkN3/tZDep1s1CEV95CWuARYWA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/experimental-utils" "3.1.0"
|
"@typescript-eslint/experimental-utils" "3.2.0"
|
||||||
functional-red-black-tree "^1.0.1"
|
functional-red-black-tree "^1.0.1"
|
||||||
regexpp "^3.0.0"
|
regexpp "^3.0.0"
|
||||||
semver "^7.3.2"
|
semver "^7.3.2"
|
||||||
tsutils "^3.17.1"
|
tsutils "^3.17.1"
|
||||||
|
|
||||||
"@typescript-eslint/experimental-utils@3.1.0":
|
"@typescript-eslint/experimental-utils@3.2.0":
|
||||||
version "3.1.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.1.0.tgz#2d5dba7c2ac2a3da3bfa3f461ff64de38587a872"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.2.0.tgz#4dab8fc9f44f059ec073470a81bb4d7d7d51e6c5"
|
||||||
integrity sha512-Zf8JVC2K1svqPIk1CB/ehCiWPaERJBBokbMfNTNRczCbQSlQXaXtO/7OfYz9wZaecNvdSvVADt6/XQuIxhC79w==
|
integrity sha512-UbJBsk+xO9dIFKtj16+m42EvUvsjZbbgQ2O5xSTSfVT1Z3yGkL90DVu0Hd3029FZ5/uBgl+F3Vo8FAcEcqc6aQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/json-schema" "^7.0.3"
|
"@types/json-schema" "^7.0.3"
|
||||||
"@typescript-eslint/typescript-estree" "3.1.0"
|
"@typescript-eslint/typescript-estree" "3.2.0"
|
||||||
eslint-scope "^5.0.0"
|
eslint-scope "^5.0.0"
|
||||||
eslint-utils "^2.0.0"
|
eslint-utils "^2.0.0"
|
||||||
|
|
||||||
"@typescript-eslint/parser@^3.0.0":
|
"@typescript-eslint/parser@^3.0.0":
|
||||||
version "3.1.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.1.0.tgz#9c02ba5d88ad2355672f39e6cd4176f172dd47f8"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.2.0.tgz#d9d7867456b1b8ecae9e724269b0bc932f06cbca"
|
||||||
integrity sha512-NcDSJK8qTA2tPfyGiPes9HtVKLbksmuYjlgGAUs7Ld2K0swdWibnCq9IJx9kJN8JJdgUJSorFiGaPHBgH81F/Q==
|
integrity sha512-Vhu+wwdevDLVDjK1lIcoD6ZbuOa93fzqszkaO3iCnmrScmKwyW/AGkzc2UvfE5TCoCXqq7Jyt6SOXjsIlpqF4A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/eslint-visitor-keys" "^1.0.0"
|
"@types/eslint-visitor-keys" "^1.0.0"
|
||||||
"@typescript-eslint/experimental-utils" "3.1.0"
|
"@typescript-eslint/experimental-utils" "3.2.0"
|
||||||
"@typescript-eslint/typescript-estree" "3.1.0"
|
"@typescript-eslint/typescript-estree" "3.2.0"
|
||||||
eslint-visitor-keys "^1.1.0"
|
eslint-visitor-keys "^1.1.0"
|
||||||
|
|
||||||
"@typescript-eslint/typescript-estree@3.1.0":
|
"@typescript-eslint/typescript-estree@3.2.0":
|
||||||
version "3.1.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.1.0.tgz#eaff52d31e615e05b894f8b9d2c3d8af152a5dd2"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.2.0.tgz#c735f1ca6b4d3cd671f30de8c9bde30843e7ead8"
|
||||||
integrity sha512-+4nfYauqeQvK55PgFrmBWFVYb6IskLyOosYEmhH3mSVhfBp9AIJnjExdgDmKWoOBHRcPM8Ihfm2BFpZf0euUZQ==
|
integrity sha512-uh+Y2QO7dxNrdLw7mVnjUqkwO/InxEqwN0wF+Za6eo3coxls9aH9kQ/5rSvW2GcNanebRTmsT5w1/92lAOb1bA==
|
||||||
dependencies:
|
dependencies:
|
||||||
debug "^4.1.1"
|
debug "^4.1.1"
|
||||||
eslint-visitor-keys "^1.1.0"
|
eslint-visitor-keys "^1.1.0"
|
||||||
@ -415,7 +414,7 @@ acorn-walk@^7.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e"
|
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e"
|
||||||
integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==
|
integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==
|
||||||
|
|
||||||
acorn@^7.1.1:
|
acorn@^7.1.1, acorn@^7.2.0:
|
||||||
version "7.2.0"
|
version "7.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe"
|
||||||
integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==
|
integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==
|
||||||
@ -529,7 +528,7 @@ array-find-index@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
|
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
|
||||||
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
|
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
|
||||||
|
|
||||||
array-includes@^3.0.3:
|
array-includes@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
|
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348"
|
||||||
integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
|
integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==
|
||||||
@ -543,7 +542,7 @@ array-union@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
|
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
|
||||||
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
|
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
|
||||||
|
|
||||||
array.prototype.flat@^1.2.1:
|
array.prototype.flat@^1.2.3:
|
||||||
version "1.2.3"
|
version "1.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
|
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
|
||||||
integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
|
integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
|
||||||
@ -742,9 +741,9 @@ chalk@^3.0.0:
|
|||||||
supports-color "^7.1.0"
|
supports-color "^7.1.0"
|
||||||
|
|
||||||
chalk@^4.0.0:
|
chalk@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
||||||
integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==
|
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-styles "^4.1.0"
|
ansi-styles "^4.1.0"
|
||||||
supports-color "^7.1.0"
|
supports-color "^7.1.0"
|
||||||
@ -1167,7 +1166,7 @@ escape-string-regexp@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
||||||
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
||||||
|
|
||||||
eslint-import-resolver-node@^0.3.2:
|
eslint-import-resolver-node@^0.3.3:
|
||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
|
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
|
||||||
integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
|
integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
|
||||||
@ -1175,7 +1174,7 @@ eslint-import-resolver-node@^0.3.2:
|
|||||||
debug "^2.6.9"
|
debug "^2.6.9"
|
||||||
resolve "^1.13.1"
|
resolve "^1.13.1"
|
||||||
|
|
||||||
eslint-module-utils@^2.4.1:
|
eslint-module-utils@^2.6.0:
|
||||||
version "2.6.0"
|
version "2.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
|
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
|
||||||
integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
|
integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
|
||||||
@ -1192,22 +1191,23 @@ eslint-plugin-es@^3.0.0:
|
|||||||
regexpp "^3.0.0"
|
regexpp "^3.0.0"
|
||||||
|
|
||||||
eslint-plugin-import@^2.20.2:
|
eslint-plugin-import@^2.20.2:
|
||||||
version "2.20.2"
|
version "2.21.1"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d"
|
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.1.tgz#3398318e5e4abbd23395c4964ce61538705154c8"
|
||||||
integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==
|
integrity sha512-qYOOsgUv63vHof7BqbzuD+Ud34bXHxFJxntuAC1ZappFZXYbRIek3aJ7jc9i2dHDGDyZ/0zlO0cpioES265Lsw==
|
||||||
dependencies:
|
dependencies:
|
||||||
array-includes "^3.0.3"
|
array-includes "^3.1.1"
|
||||||
array.prototype.flat "^1.2.1"
|
array.prototype.flat "^1.2.3"
|
||||||
contains-path "^0.1.0"
|
contains-path "^0.1.0"
|
||||||
debug "^2.6.9"
|
debug "^2.6.9"
|
||||||
doctrine "1.5.0"
|
doctrine "1.5.0"
|
||||||
eslint-import-resolver-node "^0.3.2"
|
eslint-import-resolver-node "^0.3.3"
|
||||||
eslint-module-utils "^2.4.1"
|
eslint-module-utils "^2.6.0"
|
||||||
has "^1.0.3"
|
has "^1.0.3"
|
||||||
minimatch "^3.0.4"
|
minimatch "^3.0.4"
|
||||||
object.values "^1.1.0"
|
object.values "^1.1.1"
|
||||||
read-pkg-up "^2.0.0"
|
read-pkg-up "^2.0.0"
|
||||||
resolve "^1.12.0"
|
resolve "^1.17.0"
|
||||||
|
tsconfig-paths "^3.9.0"
|
||||||
|
|
||||||
eslint-plugin-node@^11.1.0:
|
eslint-plugin-node@^11.1.0:
|
||||||
version "11.1.0"
|
version "11.1.0"
|
||||||
@ -1234,10 +1234,10 @@ eslint-plugin-tsdoc@^0.2.4:
|
|||||||
"@microsoft/tsdoc" "0.12.20"
|
"@microsoft/tsdoc" "0.12.20"
|
||||||
"@microsoft/tsdoc-config" "0.13.4"
|
"@microsoft/tsdoc-config" "0.13.4"
|
||||||
|
|
||||||
eslint-scope@^5.0.0:
|
eslint-scope@^5.0.0, eslint-scope@^5.1.0:
|
||||||
version "5.0.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
|
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5"
|
||||||
integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
|
integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==
|
||||||
dependencies:
|
dependencies:
|
||||||
esrecurse "^4.1.0"
|
esrecurse "^4.1.0"
|
||||||
estraverse "^4.1.1"
|
estraverse "^4.1.1"
|
||||||
@ -1249,15 +1249,15 @@ eslint-utils@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
eslint-visitor-keys "^1.1.0"
|
eslint-visitor-keys "^1.1.0"
|
||||||
|
|
||||||
eslint-visitor-keys@^1.1.0:
|
eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.0:
|
||||||
version "1.1.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
|
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa"
|
||||||
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
|
integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==
|
||||||
|
|
||||||
eslint@^7.0.0:
|
eslint@^7.0.0:
|
||||||
version "7.1.0"
|
version "7.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.1.0.tgz#d9a1df25e5b7859b0a3d86bb05f0940ab676a851"
|
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.2.0.tgz#d41b2e47804b30dbabb093a967fb283d560082e6"
|
||||||
integrity sha512-DfS3b8iHMK5z/YLSme8K5cge168I8j8o1uiVmFCgnnjxZQbCGyraF8bMl7Ju4yfBmCuxD7shOF7eqGkcuIHfsA==
|
integrity sha512-B3BtEyaDKC5MlfDa2Ha8/D6DsS4fju95zs0hjS3HdGazw+LNayai38A25qMppK37wWGWNYSPOR6oYzlz5MHsRQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "^7.0.0"
|
"@babel/code-frame" "^7.0.0"
|
||||||
ajv "^6.10.0"
|
ajv "^6.10.0"
|
||||||
@ -1265,10 +1265,10 @@ eslint@^7.0.0:
|
|||||||
cross-spawn "^7.0.2"
|
cross-spawn "^7.0.2"
|
||||||
debug "^4.0.1"
|
debug "^4.0.1"
|
||||||
doctrine "^3.0.0"
|
doctrine "^3.0.0"
|
||||||
eslint-scope "^5.0.0"
|
eslint-scope "^5.1.0"
|
||||||
eslint-utils "^2.0.0"
|
eslint-utils "^2.0.0"
|
||||||
eslint-visitor-keys "^1.1.0"
|
eslint-visitor-keys "^1.2.0"
|
||||||
espree "^7.0.0"
|
espree "^7.1.0"
|
||||||
esquery "^1.2.0"
|
esquery "^1.2.0"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
file-entry-cache "^5.0.1"
|
file-entry-cache "^5.0.1"
|
||||||
@ -1296,14 +1296,14 @@ eslint@^7.0.0:
|
|||||||
text-table "^0.2.0"
|
text-table "^0.2.0"
|
||||||
v8-compile-cache "^2.0.3"
|
v8-compile-cache "^2.0.3"
|
||||||
|
|
||||||
espree@^7.0.0:
|
espree@^7.1.0:
|
||||||
version "7.0.0"
|
version "7.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/espree/-/espree-7.0.0.tgz#8a7a60f218e69f120a842dc24c5a88aa7748a74e"
|
resolved "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c"
|
||||||
integrity sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==
|
integrity sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==
|
||||||
dependencies:
|
dependencies:
|
||||||
acorn "^7.1.1"
|
acorn "^7.2.0"
|
||||||
acorn-jsx "^5.2.0"
|
acorn-jsx "^5.2.0"
|
||||||
eslint-visitor-keys "^1.1.0"
|
eslint-visitor-keys "^1.2.0"
|
||||||
|
|
||||||
esprima@^4.0.0:
|
esprima@^4.0.0:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
@ -1354,9 +1354,9 @@ fast-deep-equal@^2.0.1:
|
|||||||
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
|
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
|
||||||
|
|
||||||
fast-deep-equal@^3.1.1:
|
fast-deep-equal@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
|
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||||
integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
|
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||||
|
|
||||||
fast-diff@^1.1.2:
|
fast-diff@^1.1.2:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
@ -2040,6 +2040,13 @@ json-stable-stringify-without-jsonify@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||||
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
||||||
|
|
||||||
|
json5@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
|
||||||
|
integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
|
||||||
|
dependencies:
|
||||||
|
minimist "^1.2.0"
|
||||||
|
|
||||||
json5@^2.1.2:
|
json5@^2.1.2:
|
||||||
version "2.1.3"
|
version "2.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
|
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
|
||||||
@ -2364,7 +2371,7 @@ object.assign@^4.1.0:
|
|||||||
has-symbols "^1.0.0"
|
has-symbols "^1.0.0"
|
||||||
object-keys "^1.0.11"
|
object-keys "^1.0.11"
|
||||||
|
|
||||||
object.values@^1.1.0:
|
object.values@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
|
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
|
||||||
integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
|
integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
|
||||||
@ -2772,7 +2779,7 @@ resolve-from@^5.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
|
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
|
||||||
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
|
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
|
||||||
|
|
||||||
resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2:
|
resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2:
|
||||||
version "1.17.0"
|
version "1.17.0"
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
||||||
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
||||||
@ -3178,6 +3185,16 @@ trim-off-newlines@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
|
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
|
||||||
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
|
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
|
||||||
|
|
||||||
|
tsconfig-paths@^3.9.0:
|
||||||
|
version "3.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
|
||||||
|
integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
|
||||||
|
dependencies:
|
||||||
|
"@types/json5" "^0.0.29"
|
||||||
|
json5 "^1.0.1"
|
||||||
|
minimist "^1.2.0"
|
||||||
|
strip-bom "^3.0.0"
|
||||||
|
|
||||||
tslib@^1.8.1, tslib@^1.9.0:
|
tslib@^1.8.1, tslib@^1.9.0:
|
||||||
version "1.13.0"
|
version "1.13.0"
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
|
||||||
@ -3225,9 +3242,9 @@ typedarray-to-buffer@^3.1.5:
|
|||||||
is-typedarray "^1.0.0"
|
is-typedarray "^1.0.0"
|
||||||
|
|
||||||
typescript@^3.9.2:
|
typescript@^3.9.2:
|
||||||
version "3.9.3"
|
version "3.9.5"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.3.tgz#d3ac8883a97c26139e42df5e93eeece33d610b8a"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36"
|
||||||
integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==
|
integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==
|
||||||
|
|
||||||
unique-string@^2.0.0:
|
unique-string@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user