UNPKG

sepack

Version:

Simple cli tool for android project. Generate android project base on template kotlin mvvm, debug and install project without Android Studio.

147 lines 6.86 kB
"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.Cloner = void 0; const shelljs_1 = __importDefault(require("shelljs")); const fs_1 = __importDefault(require("fs")); const ora_1 = __importDefault(require("ora")); const utils_1 = require("./utils"); class Cloner { constructor(setup) { this.currentPackageName = "com.sepack.basic"; this.tempPackageName = "com.sepack"; this.setup = setup; this.spinnerBar = ora_1.default(); this.spinnerBar.color = "white"; this.folder = utils_1.folderNameOf(this.setup.projectName); } startClone() { return __awaiter(this, void 0, void 0, function* () { this.spinnerBar.text = "Preparing..."; this.spinnerBar.start(); const template = this.setup.template; return new Promise((resolve) => { const command = `git clone -b ${template.branch} ${template.url} ${this.folder}`; shelljs_1.default.exec(command, { silent: true, async: true }, (_code, _stdout, stderr) => __awaiter(this, void 0, void 0, function* () { const isError = stderr.includes("fatal"); this.spinnerBar.stop(); if (!isError) { const replace = yield this.replacing(); resolve(replace); } else { resolve(false); } })); }); }); } replacing() { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, _reject) => { shelljs_1.default.cd(this.folder); const prefixMain = utils_1.slash("app/src/main/java/"); const prefixAndroidTest = utils_1.slash("app/src/androidTest/java/"); const prefixUnitTest = utils_1.slash("app/src/test/java/"); const prefixList = [prefixMain, prefixAndroidTest, prefixUnitTest]; prefixList.forEach(item => { this.moving(item); }); const files = shelljs_1.default.find(".").filter(file => { return file.match(/\.kt$/) || file.match(/\/build.gradle$/) || file.match(/\.xml$/); }); files.forEach(file => { utils_1.outLog(`Generated file: `, utils_1.slash(file)); shelljs_1.default.sed("-i", this.currentPackageName, this.setup.packageName, utils_1.slash(file)); }); this.addDependencies(); this.naming(); this.addConfigJson(); resolve(true); }); }); } addConfigJson() { const json = ` { "project_name": "${this.setup.projectName}", "package_name": "${this.setup.packageName}", "sepack_template": { "name": "${this.setup.template.name}", "branch": "${this.setup.template.branch}", "url": "${this.setup.template.url}" } } `; const file = "sepack_config.json"; shelljs_1.default.touch(file); shelljs_1.default.sed("-i", "", json, file); } moving(prefixDir) { const destinationPackage = this.setup.packageName; const currentDir = prefixDir + this.currentPackageName.split(".").join("/"); const temp = prefixDir + this.tempPackageName.split(".").join("/"); const destinationDir = prefixDir + destinationPackage.split(".").join("/"); const isExist = fs_1.default.existsSync(utils_1.slash(currentDir)); const isContainsCom = !destinationPackage.includes("com"); if (isExist) { shelljs_1.default.mkdir("-p", utils_1.slash(destinationDir)); shelljs_1.default.mv("-f", utils_1.slash(currentDir) + "/*", utils_1.slash(destinationDir)); shelljs_1.default.rm("-rf", utils_1.slash(temp)); if (isContainsCom) { shelljs_1.default.rm("-rf", utils_1.slash(prefixDir) + "/com"); } } const unusedFiles = [".DS_Store", ".idea", ".git", ".gitignore", ".gradle"]; unusedFiles.forEach(item => { shelljs_1.default.rm("-rf", utils_1.slash(item)); }); } addDependencies() { const currentPoint = `// sepack-external-dependencies`; const destinationPoint = this.setup.dependencies.map(item => { return `implementation '${item}'`; }); destinationPoint.forEach(item => { utils_1.outLog(`Adding dependencies: `, utils_1.slash(item)); }); const destinationString = ` ${destinationPoint}`.split(",").join("\n "); const files = shelljs_1.default.find(".").filter((file) => { return file.match(/\/external.gradle$/); }); if (destinationPoint.length != 0) { files.forEach((file) => { shelljs_1.default.sed("-i", currentPoint, destinationString, utils_1.slash(file)); }); } } naming() { const currentPoint = `sepack-name-project`; const externalGradle = `apply from: "$rootDir/dependencies/external.gradle"`; const externalGradleFixer = `apply from: "$${utils_1.slash("rootDir/dependencies/external.gradle")}`; const files = shelljs_1.default.find(".").filter((file) => { return file.match(/\/strings.xml$/); }); const appGradle = shelljs_1.default.find(utils_1.slash('app/build.gradle')); files.forEach(file => { shelljs_1.default.sed("-i", currentPoint, this.setup.projectName, utils_1.slash(file)); }); appGradle.forEach(file => { shelljs_1.default.sed("-i", externalGradle, externalGradleFixer, utils_1.slash(file)); }); shelljs_1.default.sed("-i", currentPoint, this.setup.projectName, "settings.gradle"); } } exports.Cloner = Cloner; //# sourceMappingURL=cloner.js.map