UNPKG

@happy-coders/fun-cli

Version:

Be your project management more fun!

88 lines (87 loc) 3.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FileManager = void 0; var tslib_1 = require("tslib"); var fs = tslib_1.__importStar(require("fs")); var lodash_1 = require("lodash"); var project_entity_1 = require("../../project.entity"); var task_factory_1 = require("../../tasks/task.factory"); var abstract_manager_1 = require("./abstract.manager"); var PROJECTS_FILE_NAME = 'projects.json'; var FileManager = /** @class */ (function (_super) { tslib_1.__extends(FileManager, _super); function FileManager(path) { var _this = _super.call(this) || this; _this.path = path; _this.filePath = path + "/" + PROJECTS_FILE_NAME; return _this; } FileManager.prototype.create = function (project) { var content = this._getProjectsFileContent(); content.projects.push(project); this._write(content); return true; }; FileManager.prototype._getProjectsFileContent = function () { this._ensureProjectsFolderExists(); if (!this._projectsFileExists()) { this._createFreshProjectsFile(); } var buffer = fs.readFileSync(this.filePath); var content = JSON.parse(buffer.toString()); var projects = content.projects.map(function (project) { var instance = new project_entity_1.Project(project.alias, project.path); project.tasks.forEach(function (task) { instance.addTask(task_factory_1.createTask(task.name)); }); return instance; }); return { projects: projects }; }; FileManager.prototype._ensureProjectsFolderExists = function () { if (!this._projectsFolderExists()) { this._createProjectsFolder(); } }; FileManager.prototype._createFreshProjectsFile = function () { this._write(this._freshProjectContent()); }; FileManager.prototype._freshProjectContent = function () { return { projects: [] }; }; FileManager.prototype._write = function (content) { fs.writeFileSync(this.filePath, JSON.stringify(content)); }; FileManager.prototype._projectsFolderExists = function () { return fs.existsSync(this.path); }; FileManager.prototype._projectsFileExists = function () { return fs.existsSync(this.filePath); }; FileManager.prototype._createProjectsFolder = function () { fs.mkdirSync(this.path, { recursive: true }); }; FileManager.prototype.listAll = function () { var content = this._getProjectsFileContent(); return lodash_1.sortBy(content.projects, function (project) { return project.getAlias(); }); }; FileManager.prototype.findOne = function (alias) { var content = this._getProjectsFileContent(); return this._findProjectByAlias(content.projects, alias); }; FileManager.prototype._findProjectByAlias = function (projects, alias) { return projects.find(function (project) { return project.hasSameAlias(alias); }); }; FileManager.prototype.update = function (alias, project) { console.log(alias, project); throw new Error('Method not implemented.'); }; FileManager.prototype.delete = function (alias) { var content = this._getProjectsFileContent(); var updatedProjects = content.projects.filter(function (project) { return !project.hasSameAlias(alias); }); this._write({ projects: updatedProjects }); return updatedProjects.length < content.projects.length; }; return FileManager; }(abstract_manager_1.AbstractManager)); exports.FileManager = FileManager;