UNPKG

4.87 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.AppRegistry = void 0;
7const reflux_1 = __importDefault(require("reflux"));
8const eventemitter3_1 = __importDefault(require("eventemitter3"));
9const actions_1 = require("./actions");
10const INT8_MAX = 127;
11const STUB_STORE = reflux_1.default.createStore({});
12class AppRegistry {
13 constructor() {
14 this._emitter = new eventemitter3_1.default();
15 this.actions = {};
16 this.components = {};
17 this.stores = {};
18 this.roles = {};
19 this.storeMisses = {};
20 }
21 static get Actions() {
22 return actions_1.Actions;
23 }
24 static get AppRegistry() {
25 return AppRegistry;
26 }
27 deregisterAction(name) {
28 delete this.actions[name];
29 actions_1.Actions.actionDeregistered(name);
30 return this;
31 }
32 deregisterComponent(name) {
33 delete this.components[name];
34 actions_1.Actions.componentDeregistered(name);
35 return this;
36 }
37 deregisterRole(name, object) {
38 const roles = this.roles[name];
39 roles.splice(roles.indexOf(object), 1);
40 actions_1.Actions.roleDeregistered(name);
41 return this;
42 }
43 deregisterStore(name) {
44 delete this.stores[name];
45 actions_1.Actions.storeDeregistered(name);
46 return this;
47 }
48 getAction(name) {
49 return this.actions[name];
50 }
51 getComponent(name) {
52 return this.components[name];
53 }
54 getRole(name) {
55 return this.roles[name];
56 }
57 getStore(name) {
58 const store = this.stores[name];
59 if (store === undefined) {
60 this.storeMisses[name] = (this.storeMisses[name] || 0) + 1;
61 return STUB_STORE;
62 }
63 return store;
64 }
65 onActivated() {
66 return this._callOnStores((store) => {
67 if (store.onActivated) {
68 store.onActivated(this);
69 }
70 });
71 }
72 registerAction(name, action) {
73 const overwrite = Object.prototype.hasOwnProperty.call(this.actions, name);
74 this.actions[name] = action;
75 if (overwrite) {
76 actions_1.Actions.actionOverridden(name);
77 }
78 else {
79 actions_1.Actions.actionRegistered(name);
80 }
81 return this;
82 }
83 registerComponent(name, component) {
84 const overwrite = Object.prototype.hasOwnProperty.call(this.components, name);
85 this.components[name] = component;
86 if (overwrite) {
87 actions_1.Actions.componentOverridden(name);
88 }
89 else {
90 actions_1.Actions.componentRegistered(name);
91 }
92 return this;
93 }
94 registerRole(name, role) {
95 if (Object.prototype.hasOwnProperty.call(this.roles, name) &&
96 !this.roles[name].includes(role)) {
97 this.roles[name].push(role);
98 this.roles[name].sort(this._roleComparator.bind(this));
99 }
100 else {
101 this.roles[name] = [role];
102 }
103 actions_1.Actions.roleRegistered(name);
104 return this;
105 }
106 registerStore(name, store) {
107 const overwrite = Object.prototype.hasOwnProperty.call(this.stores, name);
108 this.stores[name] = store;
109 if (overwrite) {
110 actions_1.Actions.storeOverridden(name);
111 }
112 else {
113 actions_1.Actions.storeRegistered(name);
114 }
115 return this;
116 }
117 addListener(eventName, listener) {
118 return this.on(eventName, listener);
119 }
120 emit(eventName, ...args) {
121 return this._emitter.emit(eventName, ...args);
122 }
123 eventNames() {
124 return this._emitter.eventNames();
125 }
126 listenerCount(eventName) {
127 return this._emitter.listeners(eventName).length;
128 }
129 listeners(eventName) {
130 return this._emitter.listeners(eventName);
131 }
132 on(eventName, listener) {
133 this._emitter.on(eventName, listener);
134 return this;
135 }
136 once(eventName, listener) {
137 this._emitter.once(eventName, listener);
138 return this;
139 }
140 removeListener(eventName, listener) {
141 this._emitter.removeListener(eventName, listener);
142 return this;
143 }
144 removeAllListeners(eventName) {
145 this._emitter.removeAllListeners(eventName);
146 return this;
147 }
148 _callOnStores(fn) {
149 for (const key of Object.keys(this.stores)) {
150 const store = this.stores[key];
151 fn(store);
152 }
153 return this;
154 }
155 _roleComparator(a, b) {
156 const aOrder = a.order || INT8_MAX;
157 const bOrder = b.order || INT8_MAX;
158 return aOrder - bOrder;
159 }
160}
161exports.AppRegistry = AppRegistry;
162//# sourceMappingURL=app-registry.js.map
\No newline at end of file