poyka
Version:
A framework for interactively creating, extending and maintaining web application as never easier before while doing it in elegant design patterns.
155 lines • 7.02 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.PackMan = exports.CommonDirName = exports.CommonFileName = exports.PackageManifest = void 0;
const decova_filesystem_1 = require("decova-filesystem");
const decova_dotnet_developer_1 = require("decova-dotnet-developer");
const decova_json_1 = require("decova-json");
const decova_environment_1 = require("decova-environment");
const path_1 = __importDefault(require("path"));
const decova_terminal_1 = require("decova-terminal");
class PackageManifest {
constructor(FilePath) {
this.FilePath = FilePath;
this.name = '';
this.version = '';
this.liscense = '';
this.main = '';
this.module = '';
this.description = '';
this.sourceMap = true;
this.inlineSourceMap = false;
this.outDir = '';
this.scripts = [];
this.files = [];
this.keywords = [];
this.dependencies = new Object();
this.bin = new Object();
this.devDependencies = new Object();
decova_json_1.Json.Populate(this, this.FilePath);
}
get Scripts() {
return new decova_dotnet_developer_1.List(this.scripts);
}
get Files() {
return new decova_dotnet_developer_1.List(this.files);
}
get Keywords() {
return new decova_dotnet_developer_1.List(this.keywords);
}
get Dependencies() {
return decova_dotnet_developer_1.Dictionary.FromObjectProps(this.dependencies);
}
get Bin() {
return decova_dotnet_developer_1.Dictionary.FromObjectProps(this.bin);
}
get DevDependencies() {
return decova_dotnet_developer_1.Dictionary.FromObjectProps(this.devDependencies);
}
SaveAs(filePath) {
const objToSave = Object.assign({}, this);
delete objToSave.FilePath;
decova_json_1.Json.TrySave(filePath, objToSave, true);
}
Save() {
this.SaveAs(this.FilePath);
}
}
exports.PackageManifest = PackageManifest;
class DecovaSettings {
constructor() {
this.nodeProjectsContainers = [];
}
}
var CommonFileName;
(function (CommonFileName) {
CommonFileName["decovaSettings"] = "decova-settings.json";
CommonFileName["decovaSnippets"] = "decova.code-snippets";
CommonFileName["launch"] = "launch.json";
CommonFileName["tasksJson"] = "tasks.json";
CommonFileName["settings"] = "settings.json";
CommonFileName["packgeJson"] = "package.json";
})(CommonFileName = exports.CommonFileName || (exports.CommonFileName = {}));
var CommonDirName;
(function (CommonDirName) {
CommonDirName["vscode"] = ".vscode";
})(CommonDirName = exports.CommonDirName || (exports.CommonDirName = {}));
class PackMan {
constructor(PackageDir) {
this.PackageDir = PackageDir;
this._filePath = path_1.default.join(PackageDir, `package.json`);
if (new decova_filesystem_1.FileInfo(this._filePath).Exists() === false)
throw new decova_dotnet_developer_1.Exception(`Package file not found @ [${this._filePath}]`);
try {
this._manifest = decova_json_1.Json.Load(this._filePath);
}
catch (error) {
throw new decova_dotnet_developer_1.Exception(`Couldn't load configuration file`, error);
}
}
IncrementVersionPatch() {
return __awaiter(this, void 0, void 0, function* () {
try {
const version = new decova_dotnet_developer_1.SemVersion(this._manifest.version);
version.Patch++;
this._manifest.version = version.Text;
const packageFilePath = path_1.default.join(this.PackageDir, 'package.json');
decova_json_1.Json.TrySave(packageFilePath, this._manifest, true, true);
return version.Text;
}
catch (err) {
console.log(err);
throw err;
}
});
}
GetProjectsContainerDirs() {
const workSpace = decova_environment_1.Process.Current.CurrentWorkingDirectory.FullName;
const decovaSettingsFile = path_1.default.join(workSpace, CommonDirName.vscode, CommonFileName.decovaSettings);
let decovaSettings = decova_json_1.Json.Load(decovaSettingsFile);
return new decova_dotnet_developer_1.List(decovaSettings.nodeProjectsContainers).Select(path => new decova_filesystem_1.DirectoryInfo(path));
}
GetAllProjectManifests() {
function isProjectDir(dir) {
return dir.GetFiles().Any(f => f.Name.toLowerCase() == 'package.json');
}
function getManifestFile(projDir) {
return new decova_filesystem_1.FileInfo(path_1.default.join(projDir.FullName, CommonFileName.packgeJson));
}
const allProjectDirs = this.GetProjectsContainerDirs()
.SelectMany(d => d.GetDirectories())
.Where(d => isProjectDir(d));
const allPackgeJsonFiles = allProjectDirs.Select(d => getManifestFile(d));
return allPackgeJsonFiles.Select(f => new PackageManifest(f.FullName));
}
GetDependentManifests() {
return this.GetAllProjectManifests().Where(m => m.Dependencies.Contains(this._manifest.name));
}
UpdateLeastVersionOnDependents() {
const allDependencies = this.GetDependentManifests();
if (allDependencies.Count == 0) {
decova_terminal_1.CurrentTerminal.DisplayInfo(`No dependent workspaces detected!`);
}
else {
const updateDependencyVersion = (dependentManifest) => {
dependentManifest.dependencies[this._manifest.name] = `^${this._manifest.version}`;
dependentManifest.Save();
decova_terminal_1.CurrentTerminal.DoneMessage(`[${dependentManifest.name}] was configured as [${this._manifest.name}:^${this._manifest.version}] dependent.`);
};
allDependencies.Foreach(dp => updateDependencyVersion(dp));
}
}
}
exports.PackMan = PackMan;
//# sourceMappingURL=PackMan.js.map