1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | exports.AppRegistry = void 0;
|
7 | const reflux_1 = __importDefault(require("reflux"));
|
8 | const eventemitter3_1 = __importDefault(require("eventemitter3"));
|
9 | const actions_1 = require("./actions");
|
10 | const INT8_MAX = 127;
|
11 | const STUB_STORE = reflux_1.default.createStore({});
|
12 | class 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 | }
|
161 | exports.AppRegistry = AppRegistry;
|
162 |
|
\ | No newline at end of file |