Skip to content

Commit 997316f

Browse files
committed
finished testing
1 parent cf6c5bc commit 997316f

36 files changed

Lines changed: 2811 additions & 1856 deletions

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
"jsdom": "^27.2.0",
7373
"postcss": "^8.4.32",
7474
"tailwindcss": "^3.4.0",
75+
"terser": "^5.44.1",
7576
"vite": "^5.0.7",
7677
"vitest": "^4.0.13"
7778
},

src/broker/BrokerRegistrar.js

Lines changed: 51 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,70 @@
1-
import { broker } from "../index.js";
1+
import { container } from "../core/Container.js";
2+
import { isClass } from "../utils/helpers.js";
23

34
/**
45
* Registers events on the broker
56
*/
67
export default class BrokerRegistrar {
7-
async registerNamespace(namespace, events, obj) {
8-
if (typeof events !== "object") {
9-
console.error(
10-
`Namespace has incorrect declaration syntax: '${namespace}' with value: `,
11-
events,
12-
`in ${obj.constructor.name}`
13-
);
8+
async registerNamespace(namespace, events, obj) {
9+
if (typeof events !== "object") {
10+
console.error(
11+
`Namespace has incorrect declaration syntax: '${namespace}' with value: `,
12+
events,
13+
`in ${obj.constructor.name}`
14+
);
1415

15-
return;
16-
}
16+
return;
17+
}
1718

18-
for (let event in events) {
19-
if (
20-
event.startsWith("$$") ||
21-
(typeof events[event] === "object" &&
22-
!(typeof events[event] === "function"))
23-
) {
24-
this.registerNamespace(
25-
`${namespace}:${
26-
event.startsWith("$$") ? event.substring(2) : event
27-
}`,
28-
events[event],
29-
obj
30-
);
31-
} else {
32-
let ev = event.split(/_/g).filter((a) => a.length > 0);
19+
for (let event in events) {
20+
if (
21+
event.startsWith("$$") ||
22+
(typeof events[event] === "object" &&
23+
!(typeof events[event] === "function"))
24+
) {
25+
this.registerNamespace(
26+
`${namespace}:${event.startsWith("$$") ? event.substring(2) : event}`,
27+
events[event],
28+
obj
29+
);
30+
} else {
31+
let ev = event.split(/_/g).filter((a) => a.length > 0);
3332

34-
for (let e of ev) {
35-
this.registerMethod(
36-
`${namespace}:${e}`,
37-
events[event],
38-
obj
39-
);
40-
}
41-
}
33+
for (let e of ev) {
34+
this.registerMethod(`${namespace}:${e}`, events[event], obj);
4235
}
36+
}
4337
}
38+
}
4439

45-
async register(o) {
46-
let obj = o;
47-
let seen = new Set();
40+
async register(o) {
41+
let obj = o;
42+
let seen = new Set();
4843

49-
do {
50-
for (let method of Object.getOwnPropertyNames(obj)) {
51-
if (seen.has(method)) continue;
52-
if (method.length < 3) continue;
53-
if (!method.startsWith("$$")) continue;
44+
do {
45+
for (let method of Object.getOwnPropertyNames(obj)) {
46+
if (seen.has(method)) continue;
47+
if (method.length < 3) continue;
48+
if (!method.startsWith("$$")) continue;
5449

55-
if (typeof obj[method] !== "function") {
56-
await this.registerNamespace(
57-
method.substring(2),
58-
obj[method],
59-
obj
60-
);
61-
continue;
62-
}
50+
if (typeof obj[method] !== "function") {
51+
await this.registerNamespace(method.substring(2), obj[method], obj);
52+
continue;
53+
}
6354

64-
this.registerMethod(method.substring(2), obj[method], obj);
55+
this.registerMethod(method.substring(2), obj[method], obj);
6556

66-
seen.add(method);
67-
}
68-
} while ((obj = Object.getPrototypeOf(obj)));
69-
}
57+
seen.add(method);
58+
}
59+
} while ((obj = Object.getPrototypeOf(obj)));
60+
}
7061

71-
async registerMethod(method, listener, object) {
72-
let events = method.split(/_/g).filter((a) => a.length > 0);
62+
async registerMethod(method, listener, object) {
63+
let events = method.split(/_/g).filter((a) => a.length > 0);
7364

74-
for (let ev of events) {
75-
if (ev.length === 0) continue;
76-
broker.on(ev, listener.bind(object));
77-
}
65+
for (let ev of events) {
66+
if (ev.length === 0) continue;
67+
container.resolve("broker").on(ev, listener.bind(object));
7868
}
69+
}
7970
}

src/broker/Listener.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,22 @@ import BrokerRegistrar from "./BrokerRegistrar.js";
44
* A Broker Listener
55
*/
66
export default class Listener {
7-
/**
8-
* Registers with the broker
9-
*/
10-
async register() {
11-
let br = new BrokerRegistrar();
12-
br.register(this);
7+
/**
8+
* Registers with the broker
9+
*/
10+
async register() {
11+
// Prevent duplicate registration
12+
if (this.__ojsRegistered) {
13+
console.warn(
14+
`Listener "${this.constructor.name}" is already registered. Skipping duplicate registration.`
15+
);
16+
return;
1317
}
18+
19+
let br = new BrokerRegistrar();
20+
br.register(this);
21+
22+
// Mark as registered
23+
this.__ojsRegistered = true;
24+
}
1425
}

0 commit comments

Comments
 (0)