#!/usr/bin/env node
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const Commander = require("commander");
const engine_1 = require("./engine");
const Case = __importStar(require("../../case/src"));
const Utils = __importStar(require("../../util/src"));
const pkg = require('../../../package.json');
Commander.version(`${pkg.version}`);
Commander
    .command('build')
    .description('编译工程')
    .option('-p, --path <v>', '目标工程路径')
    .option('-d, --dist <v>', '编译结果路径')
    .option('-a, --all <v>', '批量将同一文件夹下的所有Cube有效工程进行编译，编译结果将存放到每个工程的dist目录下')
    .action(cmd => {
    if (cmd.all) {
        engine_1.AntCube.pack.buildAllProjects(cmd.all).then(value => {
            Utils.Console.info(`all done!`);
            process.exit(0);
        }).catch(reason => {
            Utils.Console.error(`${reason}`);
            process.exit(1);
        });
    }
    else {
        engine_1.AntCube.pack.buildProject(cmd.path, cmd.dist).then(value => {
            if (value.success) {
                Utils.Console.info('success');
                process.exit(0);
            }
            else {
                Utils.Console.error(`${value.message}`);
                process.exit(1);
            }
        }).catch(reason => {
            Utils.Console.error(`build project failure\n${reason.message}`);
            process.exit(1);
        });
    }
});
Commander
    .command('caseserver')
    .description('启动用例server')
    .action(cmd => {
    Case.Build.ftp.run().then(value => {
        Utils.Console.info(`服务启动完毕，请勿关闭终端窗口`);
    }).catch(reason => {
        Utils.Console.error(`服务启动异常 [${reason}]`);
        process.exit(1);
    });
});
Commander
    .command('runcase')
    .description('执行用例')
    .option('-c, --case <v>', 'case所在工程根目录，支持将多个工程放置在同一个目录下批量处理')
    .option('-d, --device <v>', '运行case的设备ID')
    .action(cmd => {
    Utils.Console.info(`***********
    用例工程(必要) : ${cmd.case}
    设备ID(必要) : ${cmd.device}
        `);
    if (cmd.case && cmd.device) {
        Case.iOS.run(cmd.case, cmd.device).then(value => {
            Utils.Console.info(`用例执行完成`);
            process.exit(0);
        }).catch(reason => {
            Utils.Console.error(`用例执行失败 : ${reason}`);
            process.exit(2);
        });
    }
    else {
        Utils.Console.error(`缺少必要参数`);
        process.exit(1);
    }
});
Commander
    .command('buildcase')
    .description('构建用例')
    .option('-p, --path <v>', 'case所在工程根目录，支持将多个工程放置在同一个目录下批量处理')
    .action(cmd => {
    Utils.Console.info(`***********
    用例工程(必要) : ${cmd.path}
        `);
    if (!cmd.path) {
        Utils.Console.error(`缺少必要参数`);
        process.exit(2);
    }
    Case.Build.allCases(cmd.path).then(value => {
        Utils.Console.info(`用例构造完成`);
        process.exit(0);
    }).catch(reason => {
        Utils.Console.error(`用例构建失败 : ${reason}`);
        process.exit(1);
    });
});
Commander
    .command('pickcase')
    .description('提取用例执行结果到vscode，使用期需先连接vscode')
    .option('-d, --device <v>', '运行case的设备ID')
    .action(cmd => {
    if (!cmd.device) {
        Utils.Console.error(`缺少必要参数`);
        process.exit(1);
    }
    Case.iOS.pick(cmd.device).then(value => {
        Utils.Console.info(`已发送提取指令`);
        process.exit(0);
    }).catch(reason => {
        Utils.Console.error(`提取结果失败 : ${reason}`);
        process.exit(2);
    });
});
Commander
    .command('storebaseline')
    .description('更新store')
    .option('-p, --path <v>', '基线根路径')
    .action(cmd => {
    if (cmd.path) {
        Utils.Console.info(`开始更新基线 [${cmd.path}]`);
        Case.Store.updateBaseline(cmd.path).then(value => {
            Utils.Console.info(`更新完成`);
            process.exit(0);
        }).catch(reason => {
            Utils.Console.error(`更新失败 : ${reason}`);
            process.exit(2);
        });
    }
    else {
        Utils.Console.error(`缺少必要参数`);
        process.exit(1);
    }
});
Commander
    .command('storecheck')
    .description('校验特征')
    .option('-p, --path <v>', '基线根路径')
    .action(cmd => {
    if (cmd.path) {
        Utils.Console.info(`开始校验 [${cmd.path}]`);
        Case.check(cmd.path).then((value) => __awaiter(void 0, void 0, void 0, function* () {
            Utils.Console.info(`校验完成`);
            yield Case.report(value);
            process.exit(0);
        })).catch(reason => {
            Utils.Console.error(`校验失败 : ${reason}`);
            process.exit(2);
        });
    }
    else {
        Utils.Console.error(`缺少必要参数`);
        process.exit(1);
    }
});
Commander
    .command('tinysplit')
    .description('拆分用例')
    .option('-p, --path <v>', '小程序工程根路径')
    .action(cmd => {
    if (cmd.path) {
        Utils.Console.info(`开始拆分 [${cmd.path}]`);
        Case.TinySuit.split(cmd.path).then((value) => __awaiter(void 0, void 0, void 0, function* () {
            Utils.Console.info(`拆分完成`);
            process.exit(0);
        })).catch(reason => {
            Utils.Console.error(`拆分失败 : ${reason}`);
            process.exit(2);
        });
    }
    else {
        Utils.Console.error(`缺少必要参数`);
        process.exit(1);
    }
});
Commander.parse(process.argv);
//# sourceMappingURL=cli.js.map