UNPKG

decova-gotcha

Version:

It's my personal trial for automating daunting tasks

74 lines 3.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PackMan = void 0; const path_1 = __importDefault(require("path")); const decova_filesystem_1 = require("decova-filesystem"); const decova_json_1 = require("decova-json"); const decova_environment_1 = require("decova-environment"); const decova_terminal_1 = require("decova-terminal"); const PackageJson_1 = require("../Package-General/PackageJson"); const PathMan_1 = require("../PathMan"); const TerminalAgent_1 = require("../../../external-sheet/TerminalAgent"); const tsyringe_1 = require("tsyringe"); const decova_dotnet_1 = require("decova-dotnet"); class PackMan { constructor(PackageDir) { this.PackageDir = PackageDir; this.srv_PathMan = tsyringe_1.container.resolve(PathMan_1.PathMan); this._filePath = path_1.default.join(PackageDir, `package.json`); if (new decova_filesystem_1.FileInfo(this._filePath).Exists() === false) throw new decova_dotnet_1.Exception(`Package file not found @ [${this._filePath}]`); try { this._manifest = decova_json_1.Json.Load(this._filePath); } catch (error) { throw new decova_dotnet_1.Exception(`Couldn't load configuration file`, error); } } GetProjectsContainerDirs() { const workSpace = decova_environment_1.Process.Current.CurrentWorkingDirectory.FullName; const decovaSettingsFile = this.srv_PathMan.CurrentWorkspace_DecovaSettings.FullName; let decovaSettings = decova_json_1.Json.Load(decovaSettingsFile); return decovaSettings.nodeProjectsContainers.xSelect(path => new decova_filesystem_1.DirectoryInfo(path)); } GetAllProjectManifests() { function isProjectDir(dir) { return dir.GetFiles().xAny(f => f.Name.toLowerCase() == 'package.json'); } function getManifestFile(projDir) { return new decova_filesystem_1.FileInfo(path_1.default.join(projDir.FullName, 'package.json')); } const allProjectDirs = this.GetProjectsContainerDirs() .xFlatten(d => d.GetDirectories()) .xWhere(d => isProjectDir(d)); const allPackgeJsonFiles = allProjectDirs.xSelect(d => getManifestFile(d)); return allPackgeJsonFiles.xSelect(f => new PackageJson_1.PackageJson(f.FullName)); } GetDependentManifests() { return this.GetAllProjectManifests().xWhere(m => m.Dependencies.xContains(this._manifest.name)); } UpdateLeastVersionOnDependents() { const allDependencies = this.GetDependentManifests(); if (allDependencies.xCount() == 0) { decova_terminal_1.CurrentTerminal.DisplayInfo(`No dependent workspaces detected!`); } else { const updateDependencyVersion = (dependentManifest) => { dependentManifest.dependencies[this._manifest.name] = `^${this._manifest.version}`; try { dependentManifest.Save(); TerminalAgent_1.TerminalAgent.ShowSuccess(`[${dependentManifest.name}] was configured as [${this._manifest.name}:^${this._manifest.version}] dependent.`); } catch (err) { TerminalAgent_1.TerminalAgent.ShowError(`Failed to update [${dependentManifest.name}] with patch of [${this._manifest.name}:^${this._manifest.version}].`); } }; allDependencies.xForeach(dp => updateDependencyVersion(dp)); } } } exports.PackMan = PackMan; //# sourceMappingURL=PackMan.js.map