UNPKG

beyond

Version:

The Full Stack Universal Typescript Framework

69 lines (55 loc) 1.77 kB
const {ipc} = global.utils module.exports = class extends global.utils.ConfigCollection { get dp() { return 'libraries'; } #propagator; #defaults = (require('./defaults')); constructor(...params) { super(...params); this.setMaxListeners(30); this.#propagator = new (require('./propagator'))(this._events); } #initialising = false; get initialising() { return this.#initialising || super.initialising; } async initialise() { if (this.initialised || this.#initialising) return; this.#initialising = true; this.#defaults.ready; await super.initialise(); this.#initialising = false; } /** * Find a library by its name * @param pkg {string} The library package identification */ async find(pkg) { // Wait for all libraries to be ready const promises = []; await this.ready; this.forEach(library => promises.push(library.ready)); await Promise.all(promises); return [...this.values()].find(library => library.package === pkg); } _notify() { ipc.notify('data-notification', { type: 'list/update', table: 'libraries' }); } _processConfig(items) { this.#defaults.forEach((library, path) => !items.has(path) && items.set(path, library)); return items; } _createItem(config) { const library = new (require('./library'))(config); this.#propagator.subscribe(library); return library; } _deleteItem(library) { this.#propagator.unsubscribe(library); super._deleteItem(library); } }