Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | 2x 2x 2x 2x 2x 2x 2x 24x 24x 24x 24x 24x 23x 1x 23x 1x 23x 23x 23x 1x 22x 2x 20x 1x 1x 19x |
/* eslint-disable-next-line import/no-namespace */
import * as program from 'commander'
import { ComparableVersion } from '../commons/ComparableVersion'
import { DEFAULT_CONFIG_OPTIONS } from '../commons/constants'
import type { IConfigOptions } from '../interfaces/config.interfaces'
import type { ConfigWrapper, IChromeSingleConfig } from '../interfaces/interfaces'
import { logger } from '../log/logger'
/* eslint-disable-next-line import/no-namespace */
import * as packageJson from '../package.json'
import { mapOS } from '../utils'
/**
* Checks the arguments passed to the programm and returns them
*/
export function readConfig(args: string[], platform: NodeJS.Platform): ConfigWrapper {
program
.version(packageJson.version)
.option('-m, --min <version>', 'The minimum version', DEFAULT_CONFIG_OPTIONS.min)
.option('-M, --max <version>', 'The maximum version. Newest version if not specificied', DEFAULT_CONFIG_OPTIONS.max)
.option('-r, --max-results <results>', 'The maximum amount of results to choose from', null)
.option('-o, --os <os>', 'The operating system for what the binary should be downloaded')
.option('-a, --arch <arch>', 'The architecture for what the binary should be downloaded. Valid values are "x86" and "x64". Only works when --os is also set')
.option('-d, --decrease-on-fail', 'If a binary does not exist, go to the next lower version number and try again (regarding --min, --max and --max-results)', false)
.option('-i, --increase-on-fail', 'If a binary does not exist, go to the next higher version number and try again (regarding --min, --max and --max-results), overwrites "--decrease-on-fail" if both set', false)
.option('-z, --unzip', 'Directly unzip the downloaded zip-file and delete the .zip afterwards', DEFAULT_CONFIG_OPTIONS.unzip)
.option('-n, --non-interactive', 'Don\'t show the selection menu. Automatically select the newest version. Only works when --decrease-on-fail is also set.', false)
.option('-t, --no-store', 'Don\'t store negative hits in the local store file.', DEFAULT_CONFIG_OPTIONS.store)
.option('-l, --no-download', 'Don\'t download the binary. It also continues with the next version, if --decrease-on-fail or --increase-on-fail is set. Useful to build up the negative hit store', DEFAULT_CONFIG_OPTIONS.download)
.option('-I, --import-store <url>', 'Imports a localstore.json file either by URL (starting with "http://" or "https://" or by local file')
.option('-E, --export-store [path]', 'Exports the localstore.json file to stdout')
.option('-H, --hide-negative-hits', 'Hide negative hits', DEFAULT_CONFIG_OPTIONS.hideNegativeHits)
.option('-f, --folder <folder>', 'Set the download folder', null)
.option('-O, --only-newest-major', 'Show only the newest major version in user selection', DEFAULT_CONFIG_OPTIONS.onlyNewestMajor)
.option('-v, --inverse', 'Sort the selectable versions ascending', DEFAULT_CONFIG_OPTIONS.inverse)
.option('-s, --single <version>', 'Download a specific version in non-interactive mode, even if the file is listed in the localstore.json. Several other flags have no effect.')
.option('--list', 'List versions matching the criteria, doing nothing more', DEFAULT_CONFIG_OPTIONS.list)
.option('-q, --quiet', 'Suppress any logging output', DEFAULT_CONFIG_OPTIONS.quiet)
.option('--debug', 'Activates the debug mode (extended logging)', DEFAULT_CONFIG_OPTIONS.debug)
.parse(args)
const options = program.opts() as IConfigOptions
const minIsSet = +options.min > 0
const maxResultsIsSet = !!options.maxResults
const os = mapOS(options.os || platform)
if (!options.os && options.arch) {
logger.warn('Setting "--arch" has no effect, when "--os" is not set!')
}
if (options.nonInteractive && !options.decreaseOnFail) {
logger.warn('Setting "--non-interactive" has no effect, when "--decrease-on-fail" is not set!')
}
const is64Bit = (options.os && options.arch) ? options.arch === 'x64' : true
const arch = is64Bit ? 'x64' : 'x86'
if (options.importStore) {
return {
action: 'importStore',
config: {
url: options.importStore,
quiet: options.quiet,
debug: options.debug,
},
}
}
if (options.exportStore !== undefined) {
return {
action: 'exportStore',
config: {
path: typeof options.exportStore === 'string' ? options.exportStore : undefined,
quiet: options.quiet,
debug: options.debug,
}
}
}
if (options.single) {
const config: IChromeSingleConfig = {
arch,
os,
autoUnzip: options.unzip,
store: options.store,
download: options.download,
downloadFolder: options.folder || null,
single: new ComparableVersion(options.single),
quiet: options.quiet,
debug: options.debug,
}
return {
action: 'loadChrome',
config,
}
}
return {
action: 'loadChrome',
config: {
arch,
autoUnzip: options.unzip,
debug: options.debug,
download: options.download,
downloadFolder: options.folder || null,
hideNegativeHits: options.hideNegativeHits,
interactive: !options.nonInteractive,
inverse: options.inverse,
list: options.list,
max: new ComparableVersion(options.max),
min: new ComparableVersion(options.min),
onFail: options.increaseOnFail ? 'increase' : options.decreaseOnFail ? 'decrease' : 'nothing',
onlyNewestMajor: options.onlyNewestMajor,
os,
quiet: options.quiet,
results: minIsSet && !maxResultsIsSet ? Infinity : (parseInt(options.maxResults as string, 10) || 10),
single: null,
store: options.store,
},
}
}
|