@ricsam/isolate-fetch 0.1.14 → 0.1.15

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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/isolate-fetch",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "type": "commonjs"
5
5
  }
@@ -2102,6 +2102,41 @@ async function setupFetch(context, options) {
2102
2102
  setupServerWebSocket(context, wsCommandCallbacks);
2103
2103
  setupServe(context);
2104
2104
  setupClientWebSocket(context, clientWsCommandCallbacks);
2105
+ const eventCallbacks = new Set;
2106
+ context.global.setSync("__emit", new ivm.Callback((eventName, payloadJson) => {
2107
+ const payload = JSON.parse(payloadJson);
2108
+ for (const cb of eventCallbacks)
2109
+ cb(eventName, payload);
2110
+ }));
2111
+ context.evalSync(`
2112
+ (function() {
2113
+ const __eventListeners = new Map();
2114
+
2115
+ globalThis.__on = function(event, callback) {
2116
+ let listeners = __eventListeners.get(event);
2117
+ if (!listeners) {
2118
+ listeners = new Set();
2119
+ __eventListeners.set(event, listeners);
2120
+ }
2121
+ listeners.add(callback);
2122
+ return function() {
2123
+ listeners.delete(callback);
2124
+ if (listeners.size === 0) {
2125
+ __eventListeners.delete(event);
2126
+ }
2127
+ };
2128
+ };
2129
+
2130
+ globalThis.__dispatchExternalEvent = function(event, payloadJson) {
2131
+ const listeners = __eventListeners.get(event);
2132
+ if (!listeners) return;
2133
+ const payload = JSON.parse(payloadJson);
2134
+ for (const cb of listeners) {
2135
+ try { cb(payload); } catch (e) { console.error('Event listener error:', e); }
2136
+ }
2137
+ };
2138
+ })();
2139
+ `);
2105
2140
  return {
2106
2141
  dispose() {
2107
2142
  stateMap.clear();
@@ -2406,6 +2441,16 @@ async function setupFetch(context, options) {
2406
2441
  onClientWebSocketCommand(callback) {
2407
2442
  clientWsCommandCallbacks.add(callback);
2408
2443
  return () => clientWsCommandCallbacks.delete(callback);
2444
+ },
2445
+ onEvent(callback) {
2446
+ eventCallbacks.add(callback);
2447
+ return () => eventCallbacks.delete(callback);
2448
+ },
2449
+ dispatchEvent(event, payload) {
2450
+ const json = JSON.stringify(payload);
2451
+ const safeEvent = JSON.stringify(event);
2452
+ const safeJson = JSON.stringify(json);
2453
+ context.evalSync(`__dispatchExternalEvent(${safeEvent}, ${safeJson});`);
2409
2454
  }
2410
2455
  };
2411
2456
  }
@@ -2414,4 +2459,4 @@ export {
2414
2459
  clearAllInstanceState
2415
2460
  };
2416
2461
 
2417
- //# debugId=9CCD39D3AEDB908864756E2164756E21
2462
+ //# debugId=98B5825CD3CA576464756E2164756E21