import OrderedList from 'misago/utils/ordered-list'; export class Misago { constructor() { this._initializers = []; this._context = {}; } addInitializer(initializer) { this._initializers.push({ key: initializer.name, item: initializer.initializer, after: initializer.after, before: initializer.before }); } init(context) { this._context = context; var initOrder = new OrderedList(this._initializers).orderedValues(); initOrder.forEach(initializer => { initializer(this); }); } // context accessors has(key) { return !!this._context[key]; } get(key, fallback) { if (this.has(key)) { return this._context[key]; } else { return fallback || undefined; } } pop(key) { if (this.has(key)) { let value = this._context[key]; this._context[key] = null; return value; } else { return undefined; } } } // create singleton var misago = new Misago(); // expose it globally global.misago = misago; // and export it for tests and stuff export default misago;