constructor(config) {
        super();

        const cwd = config.cwd;
        const registry = config.registry;

        const packageManager = config.use === undefined ?
            USE_OPTIONS[0] :
            config.use;

        const updateTo = config.updateTo === undefined ?
            UPDATE_TO_OPTIONS[0] :
            config.updateTo;

        const exclude = Array.isArray(config.exclude) === true ?
            config.exclude :
            [];

        const save = config.save === undefined ? SAVE_OPTIONS[0] : config.save;

        checkCwd(cwd);
        checkUse(packageManager);
        checkForYarnWithCustomReg(packageManager, registry);
        checkUpdateTo(updateTo);
        checkSave(save);

        this.config = {
            cwd,
            use: packageManager,
            exclude,
            test: config.test,
            registry,
            updateTo,
            save,
            interactive: config.interactive,
        };
        this.cmds = cmds[packageManager];
        this.parse = parse[packageManager];

        if (typeof config.test === "string") {
            this.cmds = {
                ...this.cmds,
                test: () => config.test,
            };
        }
    }
The config passed-in here should look identically to the CLI config.
Dash-cased properties should be renamed to camelCased.
The goal is to replicate the API of the CLI as close as possible so users don't
have to guess the options.

@param {UpdtrConfig} config