是否可以验证 ocif 标志值

问题描述 投票:0回答:1

我想知道是否可以在执行命令之前验证标志值。

healthCheckPort: Flags.integer({
    description: 'This flag allows you to choose what port the health check sever is running on.',
    default: 6000,
    dependsOn: ['healthCheck'],
  }),

javascript typescript flags inquirer oclif
1个回答
0
投票

您可以通过提供逻辑“解析器”来做到这一点

请参阅

parse
选项此处

工作示例:

要求:有一个

--options
标志,其中要求具有格式为
<string>=<string>,
的字符串 - 有效示例:
foo=bar
foo=bar,hello=world
foo=bar,
foo=bar,hello=world,num=100

指定标志:

    options: Flags.string({
      char: 'o',
      required: false,
      description: 'These are query string parameters send in your request, must be of the format : param=value1,param2=value2',
      parse: async input => validateOptions(input) 
    }), 

validateOptions
写为:

/**
 * 
 * @param providedOptions - format : abc=def,foo=bar,num=199
 * @returns providedOptions if the input matches the requirements
 */
export function validateOptions(providedOptions:string):string {
    let providedOptionList:string[] = providedOptions.split(',')
    providedOptionList.forEach((providedOption) => {
        if (!providedOption.match(/(\w.*)=(\w.*)/)) {
            throw new Error(`${providedOption} : does not match requirements, see --help`)
        }
    })
    // return the same value after validation ; you may also mutate the value if you need to
    return providedOptions
}

如您所见,这将在执行任何操作之前使用用户定义的

validateOptions
调用
input
。 参见示例:

<your bin> <your arg> <your commands> --options abc=1234,def=123,num=

这返回:

Error: Parsing --options 
        num= : does not match requirements, see --help
<error trace>

我正在一个项目中使用这种方法来验证给定的标志输入是否是有效的 IP 地址

© www.soinside.com 2019 - 2024. All rights reserved.