sepack
Version:
Simple cli tool for android project. Generate android project base on template kotlin mvvm, debug and install project without Android Studio.
223 lines • 8.92 kB
JavaScript
"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 __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Main = void 0;
const command_1 = require("./command");
const prompter_1 = require("./prompter");
const shelljs_1 = __importDefault(require("shelljs"));
const chalk_1 = __importDefault(require("chalk"));
const model_1 = require("./model");
const utils_1 = require("./utils");
const ora_1 = __importDefault(require("ora"));
const network_1 = require("./network");
const constant_1 = require("./constant");
const boxen_1 = __importDefault(require("boxen"));
const yargs_1 = __importDefault(require("yargs"));
const cli_clear_1 = __importDefault(require("cli-clear"));
class Main {
constructor() { }
startArg() {
return __awaiter(this, void 0, void 0, function* () {
const command = new command_1.Command();
yargs_1.default.command(["create"], "Create project builder", () => __awaiter(this, void 0, void 0, function* () {
yield this.startBuilder();
})).command(["build"], "Build android project", {
sdk: {
describe: 'Path android sdk',
type: 'string',
alias: 's',
default: yield utils_1.sdkPath()
},
checksdk: {
describe: 'Check path of sdk',
type: 'boolean',
alias: 'c',
default: false
},
log: {
describe: 'Show log',
type: 'boolean',
alias: 'l',
default: false
},
skiptest: {
describe: 'Skip tests',
type: 'boolean',
alias: 'st',
default: false
}
}, (arg) => __awaiter(this, void 0, void 0, function* () {
if (arg.checksdk) {
const sdk = yield utils_1.sdkPath();
console.log(`Sdk path: ${sdk}`);
}
else {
const isShowLog = arg.log;
const isSkipTest = arg.skiptest;
yield command.buildProject(arg.sdk, isShowLog, isSkipTest);
}
})).command(["run"], "Run application", {
resume: {
describe: 'Resume, run with skip build and install',
type: 'boolean',
alias: 'r'
},
log: {
describe: 'Show log',
type: 'boolean',
alias: 'l',
default: false
},
tag: {
describe: 'Filter tag',
type: 'string',
default: null,
alias: 't'
},
verbose: {
describe: 'Verbose level',
type: 'boolean',
alias: 'v'
},
debug: {
describe: 'Debug level',
type: 'boolean',
alias: 'd'
},
info: {
describe: 'Info level',
type: 'boolean',
alias: 'i'
},
warning: {
describe: 'Warning level',
type: 'boolean',
alias: 'w'
},
error: {
describe: 'Error level',
type: 'boolean',
alias: 'e'
},
}, (arg) => __awaiter(this, void 0, void 0, function* () {
var _a;
const isShowLog = arg.log;
const isResume = arg.resume;
const tag = (_a = arg.tag) !== null && _a !== void 0 ? _a : "*";
const isTagEnable = arg.tag != "*";
const isFilterVerbose = arg.verbose;
const isFilterDebug = arg.debug;
const isFilterInfo = arg.info;
const isFilterWarning = arg.warning;
const isFilterError = arg.error;
var level;
if (isFilterDebug) {
level = "D";
}
else if (isFilterInfo) {
level = "I";
}
else if (isFilterWarning) {
level = "W";
}
else if (isFilterError) {
level = "E";
}
else if (isFilterVerbose) {
level = "V";
}
else {
level = "V";
}
yield command.runApp(isResume, isShowLog);
if (isTagEnable || isFilterVerbose || isFilterDebug || isFilterInfo || isFilterWarning || isFilterError) {
setTimeout(() => {
command.log(tag, level);
}, 2000);
}
})).command(["init"], "Turn on sepack android project", () => __awaiter(this, void 0, void 0, function* () {
yield command.init();
})).argv;
});
}
startBuilder() {
return __awaiter(this, void 0, void 0, function* () {
cli_clear_1.default();
utils_1.welcomeMessage();
if (!shelljs_1.default.which("git")) {
utils_1.errorLine("Error: git not installed on your computer!");
}
else {
const spinnerBar = ora_1.default();
spinnerBar.text = chalk_1.default.green("Ping server...");
spinnerBar.color = "white";
spinnerBar.start();
try {
const versionApi = yield network_1.getApiVersion();
const updater = new Updater();
spinnerBar.text = chalk_1.default.green("Checking update...");
const isUpdate = updater.isUpdate();
setTimeout(() => {
spinnerBar.stop();
if (!isUpdate) {
utils_1.outLog('Task', "Server connected!");
const templates = versionApi.templates;
const sepackConfig = new model_1.SepackConfig(templates);
const prompter = new prompter_1.Prompter(sepackConfig);
prompter.startPromter();
}
else {
updater.notify();
}
}, 1000);
}
catch (error) {
spinnerBar.stop();
utils_1.errorLine("Server not connected!");
}
}
});
}
}
exports.Main = Main;
class Updater {
constructor() {
const versionProc = shelljs_1.default.exec("npm view sepack version", { silent: true });
this.version = versionProc.stdout;
}
isUpdate() {
const api = this.version.trim();
const current = constant_1.appVersion.replace("v", "");
const isCurrent = api === current;
if (!isCurrent) {
return api.localeCompare(current, undefined, { numeric: true }) === 1;
}
else {
return false;
}
}
notify() {
const command = chalk_1.default.greenBright(`npm i -g sepack`);
const updateVersionColor = chalk_1.default.greenBright(`v${this.version}`);
const message = chalk_1.default.white(`Update available, please run "${command}" to update ${updateVersionColor}`);
const box = boxen_1.default(message, {
padding: 1,
margin: 1,
borderStyle: "round",
borderColor: "green",
});
console.log(box);
}
}
//# sourceMappingURL=main.js.map