UNPKG

dependency-manager.js

Version:
104 lines (87 loc) 2.58 kB
module.exports = class DependencyManager { static BuiltInDependencies = require("./BuiltInDependencies/list"); static CustomDependencies = new Array(); static DependenciesList = new Array(); static Dependencies; static Models = require("./Models/Models") static async InitializeAndExportAsync() { try { this.BuildList(); await this.InitializeDependenciesAsync(); this.BuildDependencies(); return this.Dependencies; } catch (erro) { throw erro; } } static BuildList() { try { this.DependenciesList = this.BuiltInDependencies.concat(this.CustomDependencies); return } catch (erro) { throw erro; } } static async InitializeDependenciesAsync() { try { for (let dependency of this.DependenciesList) { if (dependency.InitializeAsyncMustBeCalled === true) { await dependency.InitializeAsync(); } } return; } catch (erro) { throw erro; } } static BuildDependencies() { try { let dependencies = new Object(); for (let dependency of this.DependenciesList) { dependencies[`${dependency.Name}`] = new dependency(); } this.Dependencies = dependencies; return; } catch (erro) { throw erro; } } static ValidateDependency(dependency) { try { if (!(dependency.__proto__ === this.Models.Dependency)) { throw Error(`${dependency} <-- Is not a dependency implementation`); } return; } catch (erro) { throw erro; } } Models = DependencyManager.Models; constructor() { } AddDependency(dependency) { try { DependencyManager.ValidateDependency(dependency); DependencyManager.CustomDependencies.push(dependency); } catch (erro) { throw erro; } } async InitializeAndExportAsync() { try { return await DependencyManager.InitializeAndExportAsync(); } catch (erro) { throw erro; } } SetDependenciesList(list) { DependencyManager.DependenciesList = list; } }