decova-gotcha
Version:
It's my personal trial for automating daunting tasks
74 lines • 3.8 kB
JavaScript
;
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