All files / src config.js

27.87% Statements 17/61
0% Branches 0/14
23.08% Functions 3/13
40% Lines 10/25

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 1123x 3x 3x   3x 3x 3x 3x                       8x                                                                                     3x                                                                                               3x  
import { writeObjectSync } from './systemTools/fileutils';
import { npmInstall } from './systemTools/exec';
import { inquirerPrompt } from './systemTools/prompt';
 
class Config {
    constructor() {
        this.config = {};
    }
 
    // async initializeConfig(cmd, subCmd, program) {
    //     this.config = await initializeBuilder(cmd, subCmd, process, program);
    // }
 
    initializeConfig(c) {
        this.config = c;
        return c;
    }
 
    getConfig() {
        return this.config;
    }
 
    get command() {
        return this.config.command;
    }
 
    get subCommand() {
        return this.config.subCommand;
    }
 
    get rnvArguments() {
        // commander is stupid https://github.com/tj/commander.js/issues/53
        const { args, rawArgs } = this.config.program;
        const cleanedArgs = args.filter(arg => typeof arg === 'string');
        const missingArg = rawArgs[rawArgs.indexOf(cleanedArgs[1]) + 1];
        cleanedArgs.splice(2, 0, missingArg);
        return cleanedArgs;
    }
 
    async injectProjectDependency(dependency, version) {
        const currentPackage = this.config.files.project.package;
        const existingPath = this.config.paths.project.package;
        currentPackage.dependencies[dependency] = version;
        writeObjectSync(existingPath, currentPackage);
        await npmInstall();
    }
 
    getProjectConfig() {
        return this.config.files.project;
    }
 
    async checkRequiredPackage(pkg) {
        if (!pkg) return;
        const projectConfig = this.getProjectConfig();
 
        if (!projectConfig.package.dependencies[pkg]) {
            const { confirm } = await inquirerPrompt({
                type: 'confirm',
                message: `You do not have ${pkg} installed. Do you want to add it now?`
            });
 
            if (confirm) {
                await this.injectProjectDependency(pkg, 'latest'); // @TODO TO BE CHANGED
            }
        }
    }
 
    //     getBuildConfig() {
    //         return this.config.buildConfig;
    //     }
 
    //     updateLocalConfig() {
    //         writeFileSync(file, newConfig);
    //         this.initializeConfig();
    //     }
 
    //     updateGlobalonfig() {
    //         writeFileSync(file, newConfig);
    //         this.initializeConfig();
    //     }
 
    //     updateCLIPath() {
    //         writeFileSync(file, newConfig);
    //         this.initializeConfig();
    //     }
 
    //     getPath(path) { // getPath(RNV_PLUGINTEMPLATES_DIR) / PROJECT_BUILDS_DIR...
    //         return this.config.paths[path];
    //     }
 
    //     get getInfo() {
    //         return this.c.program.info;
    //     }
 
    //     get platform() {
    //         return this.config.program.platform;
    //     }
 
    //     get mono() {
    //         return this.config.program.mono;
    //     }
 
    //     get target() {}
 
//     set target(newTarget) {
//         this.config.target = newTarget;
//         this.initializeConfig();
//     }
}
 
export default new Config();