@noxfly/noxus 1.1.10 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -643,6 +643,23 @@ var _Request = class _Request {
643
643
  };
644
644
  __name(_Request, "Request");
645
645
  var Request = _Request;
646
+ var RENDERER_EVENT_TYPE = "noxus:event";
647
+ function createRendererEventMessage(event, payload) {
648
+ return {
649
+ type: RENDERER_EVENT_TYPE,
650
+ event,
651
+ payload
652
+ };
653
+ }
654
+ __name(createRendererEventMessage, "createRendererEventMessage");
655
+ function isRendererEventMessage(value) {
656
+ if (value === null || typeof value !== "object") {
657
+ return false;
658
+ }
659
+ const possibleMessage = value;
660
+ return possibleMessage.type === RENDERER_EVENT_TYPE && typeof possibleMessage.event === "string";
661
+ }
662
+ __name(isRendererEventMessage, "isRendererEventMessage");
646
663
 
647
664
  // src/utils/radix-tree.ts
648
665
  var _a;
@@ -1161,6 +1178,8 @@ Router = _ts_decorate([
1161
1178
 
1162
1179
  // src/app.ts
1163
1180
  import { app, BrowserWindow, ipcMain, MessageChannelMain } from "electron/main";
1181
+
1182
+ // src/socket.ts
1164
1183
  function _ts_decorate2(decorators, target, key, desc) {
1165
1184
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1166
1185
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -1168,16 +1187,98 @@ function _ts_decorate2(decorators, target, key, desc) {
1168
1187
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1169
1188
  }
1170
1189
  __name(_ts_decorate2, "_ts_decorate");
1190
+ var _NoxSocket = class _NoxSocket {
1191
+ constructor() {
1192
+ __publicField(this, "messagePorts", /* @__PURE__ */ new Map());
1193
+ }
1194
+ register(senderId, channel) {
1195
+ this.messagePorts.set(senderId, channel);
1196
+ }
1197
+ get(senderId) {
1198
+ return this.messagePorts.get(senderId);
1199
+ }
1200
+ unregister(senderId) {
1201
+ this.messagePorts.delete(senderId);
1202
+ }
1203
+ getSenderIds() {
1204
+ return [
1205
+ ...this.messagePorts.keys()
1206
+ ];
1207
+ }
1208
+ emit(eventName, payload, targetSenderIds) {
1209
+ const normalizedEvent = eventName.trim();
1210
+ if (normalizedEvent.length === 0) {
1211
+ throw new Error("Renderer event name must be a non-empty string.");
1212
+ }
1213
+ const recipients = targetSenderIds ?? this.getSenderIds();
1214
+ let delivered = 0;
1215
+ for (const senderId of recipients) {
1216
+ const channel = this.messagePorts.get(senderId);
1217
+ if (!channel) {
1218
+ Logger.warn(`No message channel found for sender ID: ${senderId} while emitting "${normalizedEvent}".`);
1219
+ continue;
1220
+ }
1221
+ try {
1222
+ channel.port1.postMessage(createRendererEventMessage(normalizedEvent, payload));
1223
+ delivered++;
1224
+ } catch (error) {
1225
+ Logger.error(`[Noxus] Failed to emit "${normalizedEvent}" to sender ${senderId}.`, error);
1226
+ }
1227
+ }
1228
+ return delivered;
1229
+ }
1230
+ emitToRenderer(senderId, eventName, payload) {
1231
+ return this.emit(eventName, payload, [
1232
+ senderId
1233
+ ]) > 0;
1234
+ }
1235
+ };
1236
+ __name(_NoxSocket, "NoxSocket");
1237
+ var NoxSocket = _NoxSocket;
1238
+ NoxSocket = _ts_decorate2([
1239
+ Injectable("singleton")
1240
+ ], NoxSocket);
1241
+
1242
+ // src/app.ts
1243
+ function _ts_decorate3(decorators, target, key, desc) {
1244
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1245
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1246
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1247
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1248
+ }
1249
+ __name(_ts_decorate3, "_ts_decorate");
1171
1250
  function _ts_metadata(k, v) {
1172
1251
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1173
1252
  }
1174
1253
  __name(_ts_metadata, "_ts_metadata");
1175
1254
  var _NoxApp = class _NoxApp {
1176
- constructor(router) {
1255
+ constructor(router, socket) {
1177
1256
  __publicField(this, "router");
1178
- __publicField(this, "messagePorts", /* @__PURE__ */ new Map());
1257
+ __publicField(this, "socket");
1179
1258
  __publicField(this, "app");
1259
+ __publicField(this, "onRendererMessage", /* @__PURE__ */ __name(async (event) => {
1260
+ const { senderId, requestId, path, method, body } = event.data;
1261
+ const channel = this.socket.get(senderId);
1262
+ if (!channel) {
1263
+ Logger.error(`No message channel found for sender ID: ${senderId}`);
1264
+ return;
1265
+ }
1266
+ try {
1267
+ const request = new Request(event, requestId, method, path, body);
1268
+ const response = await this.router.handle(request);
1269
+ channel.port1.postMessage(response);
1270
+ } catch (err) {
1271
+ const response = {
1272
+ requestId,
1273
+ status: 500,
1274
+ body: null,
1275
+ error: err.message || "Internal Server Error"
1276
+ };
1277
+ channel.port1.postMessage(response);
1278
+ }
1279
+ }, "onRendererMessage"));
1180
1280
  this.router = router;
1281
+ this.socket = socket;
1181
1282
  }
1182
1283
  /**
1183
1284
  * Initializes the NoxApp instance.
@@ -1199,44 +1300,19 @@ var _NoxApp = class _NoxApp {
1199
1300
  */
1200
1301
  giveTheRendererAPort(event) {
1201
1302
  const senderId = event.sender.id;
1202
- if (this.messagePorts.has(senderId)) {
1303
+ if (this.socket.get(senderId)) {
1203
1304
  this.shutdownChannel(senderId);
1204
1305
  }
1205
1306
  const channel = new MessageChannelMain();
1206
- this.messagePorts.set(senderId, channel);
1207
- channel.port1.on("message", this.onRendererMessage.bind(this));
1307
+ channel.port1.on("message", this.onRendererMessage);
1208
1308
  channel.port1.start();
1309
+ this.socket.register(senderId, channel);
1209
1310
  event.sender.postMessage("port", {
1210
1311
  senderId
1211
1312
  }, [
1212
1313
  channel.port2
1213
1314
  ]);
1214
1315
  }
1215
- /**
1216
- * Electron specific message handling.
1217
- * Replaces HTTP calls by using Electron's IPC mechanism.
1218
- */
1219
- async onRendererMessage(event) {
1220
- const { senderId, requestId, path, method, body } = event.data;
1221
- const channel = this.messagePorts.get(senderId);
1222
- if (!channel) {
1223
- Logger.error(`No message channel found for sender ID: ${senderId}`);
1224
- return;
1225
- }
1226
- try {
1227
- const request = new Request(event, requestId, method, path, body);
1228
- const response = await this.router.handle(request);
1229
- channel.port1.postMessage(response);
1230
- } catch (err) {
1231
- const response = {
1232
- requestId,
1233
- status: 500,
1234
- body: null,
1235
- error: err.message || "Internal Server Error"
1236
- };
1237
- channel.port1.postMessage(response);
1238
- }
1239
- }
1240
1316
  /**
1241
1317
  * MacOS specific behavior.
1242
1318
  */
@@ -1253,25 +1329,24 @@ var _NoxApp = class _NoxApp {
1253
1329
  * @param remove - Whether to remove the channel from the messagePorts map.
1254
1330
  */
1255
1331
  shutdownChannel(channelSenderId) {
1256
- const channel = this.messagePorts.get(channelSenderId);
1332
+ const channel = this.socket.get(channelSenderId);
1257
1333
  if (!channel) {
1258
1334
  Logger.warn(`No message channel found for sender ID: ${channelSenderId}`);
1259
1335
  return;
1260
1336
  }
1261
- channel.port1.off("message", this.onRendererMessage.bind(this));
1337
+ channel.port1.off("message", this.onRendererMessage);
1262
1338
  channel.port1.close();
1263
1339
  channel.port2.close();
1264
- this.messagePorts.delete(channelSenderId);
1340
+ this.socket.unregister(channelSenderId);
1265
1341
  }
1266
1342
  /**
1267
1343
  * Handles the application shutdown process.
1268
1344
  * This method is called when all windows are closed, and it cleans up the message channels
1269
1345
  */
1270
1346
  async onAllWindowsClosed() {
1271
- this.messagePorts.forEach((channel, senderId) => {
1347
+ for (const senderId of this.socket.getSenderIds()) {
1272
1348
  this.shutdownChannel(senderId);
1273
- });
1274
- this.messagePorts.clear();
1349
+ }
1275
1350
  Logger.info("All windows closed, shutting down application...");
1276
1351
  await this.app?.dispose();
1277
1352
  if (process.platform !== "darwin") {
@@ -1310,11 +1385,12 @@ var _NoxApp = class _NoxApp {
1310
1385
  };
1311
1386
  __name(_NoxApp, "NoxApp");
1312
1387
  var NoxApp = _NoxApp;
1313
- NoxApp = _ts_decorate2([
1388
+ NoxApp = _ts_decorate3([
1314
1389
  Injectable("singleton"),
1315
1390
  _ts_metadata("design:type", Function),
1316
1391
  _ts_metadata("design:paramtypes", [
1317
- typeof Router === "undefined" ? Object : Router
1392
+ typeof Router === "undefined" ? Object : Router,
1393
+ typeof NoxSocket === "undefined" ? Object : NoxSocket
1318
1394
  ])
1319
1395
  ], NoxApp);
1320
1396
 
@@ -1330,6 +1406,86 @@ async function bootstrapApplication(rootModule) {
1330
1406
  return noxApp;
1331
1407
  }
1332
1408
  __name(bootstrapApplication, "bootstrapApplication");
1409
+
1410
+ // src/renderer-events.ts
1411
+ var _RendererEventRegistry = class _RendererEventRegistry {
1412
+ constructor() {
1413
+ __publicField(this, "listeners", /* @__PURE__ */ new Map());
1414
+ }
1415
+ /**
1416
+ *
1417
+ */
1418
+ subscribe(eventName, handler) {
1419
+ const normalizedEventName = eventName.trim();
1420
+ if (normalizedEventName.length === 0) {
1421
+ throw new Error("Renderer event name must be a non-empty string.");
1422
+ }
1423
+ const handlers = this.listeners.get(normalizedEventName) ?? /* @__PURE__ */ new Set();
1424
+ handlers.add(handler);
1425
+ this.listeners.set(normalizedEventName, handlers);
1426
+ return {
1427
+ unsubscribe: /* @__PURE__ */ __name(() => this.unsubscribe(normalizedEventName, handler), "unsubscribe")
1428
+ };
1429
+ }
1430
+ /**
1431
+ *
1432
+ */
1433
+ unsubscribe(eventName, handler) {
1434
+ const handlers = this.listeners.get(eventName);
1435
+ if (!handlers) {
1436
+ return;
1437
+ }
1438
+ handlers.delete(handler);
1439
+ if (handlers.size === 0) {
1440
+ this.listeners.delete(eventName);
1441
+ }
1442
+ }
1443
+ /**
1444
+ *
1445
+ */
1446
+ clear(eventName) {
1447
+ if (eventName) {
1448
+ this.listeners.delete(eventName);
1449
+ return;
1450
+ }
1451
+ this.listeners.clear();
1452
+ }
1453
+ /**
1454
+ *
1455
+ */
1456
+ dispatch(message) {
1457
+ const handlers = this.listeners.get(message.event);
1458
+ if (!handlers || handlers.size === 0) {
1459
+ return;
1460
+ }
1461
+ handlers.forEach((handler) => {
1462
+ try {
1463
+ handler(message.payload);
1464
+ } catch (error) {
1465
+ console.error(`[Noxus] Renderer event handler for "${message.event}" threw an error.`, error);
1466
+ }
1467
+ });
1468
+ }
1469
+ /**
1470
+ *
1471
+ */
1472
+ tryDispatchFromMessageEvent(event) {
1473
+ if (!isRendererEventMessage(event.data)) {
1474
+ return false;
1475
+ }
1476
+ this.dispatch(event.data);
1477
+ return true;
1478
+ }
1479
+ /**
1480
+ *
1481
+ */
1482
+ hasHandlers(eventName) {
1483
+ const handlers = this.listeners.get(eventName);
1484
+ return !!handlers && handlers.size > 0;
1485
+ }
1486
+ };
1487
+ __name(_RendererEventRegistry, "RendererEventRegistry");
1488
+ var RendererEventRegistry = _RendererEventRegistry;
1333
1489
  export {
1334
1490
  AppInjector,
1335
1491
  Authorize,
@@ -1359,11 +1515,14 @@ export {
1359
1515
  NotFoundException,
1360
1516
  NotImplementedException,
1361
1517
  NoxApp,
1518
+ NoxSocket,
1362
1519
  Patch,
1363
1520
  PaymentRequiredException,
1364
1521
  Post,
1365
1522
  Put,
1523
+ RENDERER_EVENT_TYPE,
1366
1524
  ROUTE_METADATA_KEY,
1525
+ RendererEventRegistry,
1367
1526
  Request,
1368
1527
  RequestTimeoutException,
1369
1528
  ResponseException,
@@ -1376,6 +1535,7 @@ export {
1376
1535
  UseMiddlewares,
1377
1536
  VariantAlsoNegotiatesException,
1378
1537
  bootstrapApplication,
1538
+ createRendererEventMessage,
1379
1539
  getControllerMetadata,
1380
1540
  getGuardForController,
1381
1541
  getGuardForControllerAction,
@@ -1384,11 +1544,12 @@ export {
1384
1544
  getMiddlewaresForControllerAction,
1385
1545
  getModuleMetadata,
1386
1546
  getRouteMetadata,
1387
- inject
1547
+ inject,
1548
+ isRendererEventMessage
1388
1549
  };
1389
1550
  /**
1390
1551
  * @copyright 2025 NoxFly
1391
1552
  * @license MIT
1392
1553
  * @author NoxFly
1393
1554
  */
1394
- //# sourceMappingURL=noxus.mjs.map
1555
+ //# sourceMappingURL=main.mjs.map
@@ -0,0 +1 @@
1
+ export { o as IBatchRequestItem, p as IBatchRequestPayload, q as IBatchResponsePayload, s as IRendererEventMessage, n as IRequest, I as IResponse, r as RENDERER_EVENT_TYPE, v as RendererEventHandler, x as RendererEventRegistry, w as RendererEventSubscription, R as Request, t as createRendererEventMessage, u as isRendererEventMessage } from './index-5OkVPHfI.mjs';
@@ -0,0 +1 @@
1
+ export { o as IBatchRequestItem, p as IBatchRequestPayload, q as IBatchResponsePayload, s as IRendererEventMessage, n as IRequest, I as IResponse, r as RENDERER_EVENT_TYPE, v as RendererEventHandler, x as RendererEventRegistry, w as RendererEventSubscription, R as Request, t as createRendererEventMessage, u as isRendererEventMessage } from './index-5OkVPHfI.js';
@@ -0,0 +1,265 @@
1
+ /**
2
+ * @copyright 2025 NoxFly
3
+ * @license MIT
4
+ * @author NoxFly
5
+ */
6
+ "use strict";
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
27
+
28
+ // src/index.ts
29
+ var src_exports = {};
30
+ __export(src_exports, {
31
+ RENDERER_EVENT_TYPE: () => RENDERER_EVENT_TYPE,
32
+ RendererEventRegistry: () => RendererEventRegistry,
33
+ Request: () => Request,
34
+ createRendererEventMessage: () => createRendererEventMessage,
35
+ isRendererEventMessage: () => isRendererEventMessage
36
+ });
37
+ module.exports = __toCommonJS(src_exports);
38
+
39
+ // src/request.ts
40
+ var import_reflect_metadata2 = require("reflect-metadata");
41
+
42
+ // src/DI/app-injector.ts
43
+ var import_reflect_metadata = require("reflect-metadata");
44
+
45
+ // src/exceptions.ts
46
+ var _ResponseException = class _ResponseException extends Error {
47
+ constructor(statusOrMessage, message) {
48
+ let statusCode;
49
+ if (typeof statusOrMessage === "number") {
50
+ statusCode = statusOrMessage;
51
+ } else if (typeof statusOrMessage === "string") {
52
+ message = statusOrMessage;
53
+ }
54
+ super(message ?? "");
55
+ __publicField(this, "status", 0);
56
+ if (statusCode !== void 0) {
57
+ this.status = statusCode;
58
+ }
59
+ this.name = this.constructor.name.replace(/([A-Z])/g, " $1");
60
+ }
61
+ };
62
+ __name(_ResponseException, "ResponseException");
63
+ var ResponseException = _ResponseException;
64
+ var _InternalServerException = class _InternalServerException extends ResponseException {
65
+ constructor() {
66
+ super(...arguments);
67
+ __publicField(this, "status", 500);
68
+ }
69
+ };
70
+ __name(_InternalServerException, "InternalServerException");
71
+ var InternalServerException = _InternalServerException;
72
+
73
+ // src/DI/app-injector.ts
74
+ var _AppInjector = class _AppInjector {
75
+ constructor(name = null) {
76
+ __publicField(this, "name");
77
+ __publicField(this, "bindings", /* @__PURE__ */ new Map());
78
+ __publicField(this, "singletons", /* @__PURE__ */ new Map());
79
+ __publicField(this, "scoped", /* @__PURE__ */ new Map());
80
+ this.name = name;
81
+ }
82
+ /**
83
+ * Typically used to create a dependency injection scope
84
+ * at the "scope" level (i.e., per-request lifetime).
85
+ *
86
+ * SHOULD NOT BE USED by anything else than the framework itself.
87
+ */
88
+ createScope() {
89
+ const scope = new _AppInjector();
90
+ scope.bindings = this.bindings;
91
+ scope.singletons = this.singletons;
92
+ return scope;
93
+ }
94
+ /**
95
+ * Called when resolving a dependency,
96
+ * i.e., retrieving the instance of a given class.
97
+ */
98
+ resolve(target) {
99
+ const binding = this.bindings.get(target);
100
+ if (!binding) throw new InternalServerException(`Failed to resolve a dependency injection : No binding for type ${target.name}.
101
+ Did you forget to use @Injectable() decorator ?`);
102
+ switch (binding.lifetime) {
103
+ case "transient":
104
+ return this.instantiate(binding.implementation);
105
+ case "scope": {
106
+ if (this.scoped.has(target)) {
107
+ return this.scoped.get(target);
108
+ }
109
+ const instance = this.instantiate(binding.implementation);
110
+ this.scoped.set(target, instance);
111
+ return instance;
112
+ }
113
+ case "singleton": {
114
+ if (binding.instance === void 0 && this.name === "root") {
115
+ binding.instance = this.instantiate(binding.implementation);
116
+ this.singletons.set(target, binding.instance);
117
+ }
118
+ return binding.instance;
119
+ }
120
+ }
121
+ }
122
+ /**
123
+ *
124
+ */
125
+ instantiate(target) {
126
+ const paramTypes = Reflect.getMetadata("design:paramtypes", target) || [];
127
+ const params = paramTypes.map((p) => this.resolve(p));
128
+ return new target(...params);
129
+ }
130
+ };
131
+ __name(_AppInjector, "AppInjector");
132
+ var AppInjector = _AppInjector;
133
+ var RootInjector = new AppInjector("root");
134
+
135
+ // src/request.ts
136
+ var _Request = class _Request {
137
+ constructor(event, id, method, path, body) {
138
+ __publicField(this, "event");
139
+ __publicField(this, "id");
140
+ __publicField(this, "method");
141
+ __publicField(this, "path");
142
+ __publicField(this, "body");
143
+ __publicField(this, "context", RootInjector.createScope());
144
+ __publicField(this, "params", {});
145
+ this.event = event;
146
+ this.id = id;
147
+ this.method = method;
148
+ this.path = path;
149
+ this.body = body;
150
+ this.path = path.replace(/^\/|\/$/g, "");
151
+ }
152
+ };
153
+ __name(_Request, "Request");
154
+ var Request = _Request;
155
+ var RENDERER_EVENT_TYPE = "noxus:event";
156
+ function createRendererEventMessage(event, payload) {
157
+ return {
158
+ type: RENDERER_EVENT_TYPE,
159
+ event,
160
+ payload
161
+ };
162
+ }
163
+ __name(createRendererEventMessage, "createRendererEventMessage");
164
+ function isRendererEventMessage(value) {
165
+ if (value === null || typeof value !== "object") {
166
+ return false;
167
+ }
168
+ const possibleMessage = value;
169
+ return possibleMessage.type === RENDERER_EVENT_TYPE && typeof possibleMessage.event === "string";
170
+ }
171
+ __name(isRendererEventMessage, "isRendererEventMessage");
172
+
173
+ // src/renderer-events.ts
174
+ var _RendererEventRegistry = class _RendererEventRegistry {
175
+ constructor() {
176
+ __publicField(this, "listeners", /* @__PURE__ */ new Map());
177
+ }
178
+ /**
179
+ *
180
+ */
181
+ subscribe(eventName, handler) {
182
+ const normalizedEventName = eventName.trim();
183
+ if (normalizedEventName.length === 0) {
184
+ throw new Error("Renderer event name must be a non-empty string.");
185
+ }
186
+ const handlers = this.listeners.get(normalizedEventName) ?? /* @__PURE__ */ new Set();
187
+ handlers.add(handler);
188
+ this.listeners.set(normalizedEventName, handlers);
189
+ return {
190
+ unsubscribe: /* @__PURE__ */ __name(() => this.unsubscribe(normalizedEventName, handler), "unsubscribe")
191
+ };
192
+ }
193
+ /**
194
+ *
195
+ */
196
+ unsubscribe(eventName, handler) {
197
+ const handlers = this.listeners.get(eventName);
198
+ if (!handlers) {
199
+ return;
200
+ }
201
+ handlers.delete(handler);
202
+ if (handlers.size === 0) {
203
+ this.listeners.delete(eventName);
204
+ }
205
+ }
206
+ /**
207
+ *
208
+ */
209
+ clear(eventName) {
210
+ if (eventName) {
211
+ this.listeners.delete(eventName);
212
+ return;
213
+ }
214
+ this.listeners.clear();
215
+ }
216
+ /**
217
+ *
218
+ */
219
+ dispatch(message) {
220
+ const handlers = this.listeners.get(message.event);
221
+ if (!handlers || handlers.size === 0) {
222
+ return;
223
+ }
224
+ handlers.forEach((handler) => {
225
+ try {
226
+ handler(message.payload);
227
+ } catch (error) {
228
+ console.error(`[Noxus] Renderer event handler for "${message.event}" threw an error.`, error);
229
+ }
230
+ });
231
+ }
232
+ /**
233
+ *
234
+ */
235
+ tryDispatchFromMessageEvent(event) {
236
+ if (!isRendererEventMessage(event.data)) {
237
+ return false;
238
+ }
239
+ this.dispatch(event.data);
240
+ return true;
241
+ }
242
+ /**
243
+ *
244
+ */
245
+ hasHandlers(eventName) {
246
+ const handlers = this.listeners.get(eventName);
247
+ return !!handlers && handlers.size > 0;
248
+ }
249
+ };
250
+ __name(_RendererEventRegistry, "RendererEventRegistry");
251
+ var RendererEventRegistry = _RendererEventRegistry;
252
+ // Annotate the CommonJS export names for ESM import in node:
253
+ 0 && (module.exports = {
254
+ RENDERER_EVENT_TYPE,
255
+ RendererEventRegistry,
256
+ Request,
257
+ createRendererEventMessage,
258
+ isRendererEventMessage
259
+ });
260
+ /**
261
+ * @copyright 2025 NoxFly
262
+ * @license MIT
263
+ * @author NoxFly
264
+ */
265
+ //# sourceMappingURL=renderer.js.map