(options: T, argv = process.argv.slice(2))
| 68 | } |
| 69 | |
| 70 | export function args<const T extends Arg>(options: T, argv = process.argv.slice(2)): Result<T> { |
| 71 | for (let [idx, value] of argv.entries()) { |
| 72 | if (value === '-') { |
| 73 | argv[idx] = '__IO_DEFAULT_VALUE__' |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | let parsed = parse(argv) |
| 78 | |
| 79 | for (let key in parsed) { |
| 80 | let value = parsed[key] |
| 81 | |
| 82 | if (key !== '_' && Array.isArray(value)) { |
| 83 | value = value[value.length - 1] |
| 84 | } |
| 85 | |
| 86 | if (value === '__IO_DEFAULT_VALUE__') { |
| 87 | value = '-' |
| 88 | } |
| 89 | |
| 90 | parsed[key] = value |
| 91 | } |
| 92 | |
| 93 | let result: { _: string[]; [key: string]: unknown } = { |
| 94 | _: parsed._, |
| 95 | } |
| 96 | |
| 97 | for (let [ |
| 98 | flag, |
| 99 | { type, alias, default: defaultValue = type === 'boolean' ? false : null }, |
| 100 | ] of Object.entries(options)) { |
| 101 | // Start with the default value |
| 102 | result[flag] = defaultValue |
| 103 | |
| 104 | // Try to find the `alias`, and map it to long form `flag` |
| 105 | if (alias) { |
| 106 | let key = alias.slice(1) |
| 107 | if (parsed[key] !== undefined) { |
| 108 | result[flag] = convert(parsed[key], type) |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | // Try to find the long form `flag` |
| 113 | { |
| 114 | let key = flag.slice(2) |
| 115 | if (parsed[key] !== undefined) { |
| 116 | result[flag] = convert(parsed[key], type) |
| 117 | } |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | return result as Result<T> |
| 122 | } |
| 123 | |
| 124 | // --- |
| 125 |
no test coverage detected