nativescript
Version:
Command-line interface for building NativeScript projects
91 lines • 4.3 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProjectCleanupService = void 0;
const yok_1 = require("../common/yok");
const path = require("path");
const color_1 = require("../color");
class ProjectCleanupService {
constructor($fs, $logger, $projectHelper, $terminalSpinnerService) {
this.$fs = $fs;
this.$logger = $logger;
this.$projectHelper = $projectHelper;
this.$terminalSpinnerService = $terminalSpinnerService;
}
async clean(pathsToClean, options) {
this.spinner = this.$terminalSpinnerService.createSpinner({
isSilent: options === null || options === void 0 ? void 0 : options.silent,
});
let stats = (options === null || options === void 0 ? void 0 : options.stats) ? new Map() : false;
let success = true;
for (const pathToClean of pathsToClean) {
const cleanRes = await this.cleanPath(pathToClean, options).catch((error) => {
this.$logger.trace(`Encountered error while cleaning. Error is: ${error.message}.`, error);
return { ok: false };
});
if (stats && "size" in cleanRes) {
stats.set(pathToClean, cleanRes.size);
}
success = success && cleanRes.ok;
}
if (!(options === null || options === void 0 ? void 0 : options.silent)) {
// required to print an empty line for the spinner to not replace the last status... (probably a bug in the spinners)
console.log();
}
if (stats) {
return { ok: success, stats };
}
return { ok: success };
}
async cleanPath(pathToClean, options) {
var _a;
const dryRun = (_a = options === null || options === void 0 ? void 0 : options.dryRun) !== null && _a !== void 0 ? _a : false;
const logPrefix = dryRun ? color_1.color.grey("(dry run) ") : "";
this.spinner.clear();
let fileType;
if (!pathToClean || pathToClean.trim().length === 0) {
this.$logger.trace(`${logPrefix}cleanPath called with no pathToClean.`);
return { ok: true };
}
const filePath = path.resolve(this.$projectHelper.projectDir, pathToClean);
const displayPath = color_1.color.yellow(`${path.relative(this.$projectHelper.projectDir, filePath)}`);
this.$logger.trace(`${logPrefix}Trying to clean '${filePath}'`);
if (this.$fs.exists(filePath)) {
const stat = this.$fs.getFsStats(filePath);
let size = 0;
if (options === null || options === void 0 ? void 0 : options.stats) {
size = this.$fs.getSize(filePath);
}
if (stat.isDirectory()) {
this.$logger.trace(`${logPrefix}Path '${filePath}' is a directory, deleting.`);
!dryRun && this.$fs.deleteDirectorySafe(filePath);
fileType = "directory";
}
else {
this.$logger.trace(`${logPrefix}Path '${filePath}' is a file, deleting.`);
!dryRun && this.$fs.deleteFile(filePath);
fileType = "file";
}
const success = dryRun || !this.$fs.exists(filePath);
if (success) {
this.spinner.succeed(`${logPrefix}Cleaned ${fileType} ${displayPath}`);
}
else {
const message = color_1.color.red(`Failed to Clean ${fileType}`);
this.spinner.fail(`${logPrefix}${message} ${displayPath}`);
}
if (options === null || options === void 0 ? void 0 : options.stats) {
return { ok: success, size };
}
return { ok: success };
}
this.$logger.trace(`${logPrefix}Path '${filePath}' not found, skipping.`);
this.spinner.info(`${logPrefix}Skipping ${displayPath} because it doesn't exist.`);
if (options === null || options === void 0 ? void 0 : options.stats) {
return { ok: true, size: 0 };
}
return { ok: true };
}
}
exports.ProjectCleanupService = ProjectCleanupService;
yok_1.injector.register("projectCleanupService", ProjectCleanupService);
//# sourceMappingURL=project-cleanup-service.js.map
;