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
JavaScript
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
;