All files / src/cli template.js

45% Statements 27/60
0% Branches 0/6
0% Functions 0/20
42.31% Lines 22/52

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 1081x 1x 1x 1x 1x                                   1x 1x 1x 1x 1x 1x   1x 1x 1x 1x   1x   1x             1x                                       1x             1x                       1x                                               1x  
import path from 'path';
import fs from 'fs';
import shell from 'shelljs';
import chalk from 'chalk';
import {
    isPlatformSupported,
    cleanNodeModules,
    isBuildSchemeSupported,
    isPlatformSupportedSync,
    getConfig,
    logTask,
    logComplete,
    checkSdk,
    logError,
    getAppFolder,
    logDebug,
    logErrorPlatform,
    isSdkInstalled,
    logWarning,
    configureIfRequired,
    cleanPlatformIfRequired
} from '../common';
import { askQuestion, generateOptions, finishQuestion } from '../systemTools/prompt';
import { IOS } from '../constants';
import { executeAsync, execCLI } from '../systemTools/exec';
import { executePipe } from '../projectTools/buildHooks';
import appRunner, { copyRuntimeAssets } from './app';
import { listTemplates, addTemplate, getTemplateOptions, getInstalledTemplateOptions, applyTemplate } from '../templateTools';
 
const LIST = 'list';
const ADD = 'add';
const REMOVE = 'remove';
const APPLY = 'apply';
 
const PIPES = {
    ADD_BEFORE: 'add:before',
    ADD_AFTER: 'add:after',
};
 
// ##########################################
// PUBLIC API
// ##########################################
 
const run = (c) => {
    logTask('run');
 
    switch (c.subCommand) {
    case LIST:
        return _templateList(c);
    case ADD:
        return _templateAdd(c);
    case APPLY:
        return _templateApply(c);
 
    default:
        return Promise.reject(`cli:template Command ${c.command} not supported`);
    }
};
 
// ##########################################
// PRIVATE
// ##########################################
 
const _templateList = c => new Promise((resolve, reject) => {
    logTask('_templateList');
    listTemplates(c)
        .then(() => resolve())
        .catch(e => reject(e));
});
 
const _templateAdd = c => new Promise((resolve, reject) => {
    logTask('_templateAdd');
 
    const opts = getTemplateOptions(c);
 
    askQuestion(`Pick which template to install : \n${opts.asString}`)
        .then(v => opts.pick(v))
        .then(() => addTemplate(c, opts))
        .then(() => resolve())
        .catch(e => reject(e));
});
 
const _templateApply = c => new Promise((resolve, reject) => {
    logTask(`_templateApply:${c.program.template}`);
 
    if (c.program.template) {
        applyTemplate(c, c.program.template)
            .then(() => resolve())
            .catch(e => reject(e));
    } else {
        const opts = getInstalledTemplateOptions(c);
 
        askQuestion(`Pick which template to apply ${chalk.yellow('(NOTE: your project content will be overriden!)')}: \n${opts.asString}`)
            .then(v => opts.pick(v))
            .then((v) => {
                finishQuestion();
                return Promise.resolve();
            })
            .then(() => applyTemplate(c, opts.selectedOption))
            .then(() => resolve())
            .catch(e => reject(e));
    }
});
 
export { PIPES };
 
export default run;