eimer 0.1.0 → 0.1.2
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.
- package/dist/cjs/eimer/Eimer.d.ts +1 -3
- package/dist/cjs/eimer/Eimer.d.ts.map +1 -1
- package/dist/cjs/eimer/Eimer.js.map +1 -1
- package/dist/cjs/transports/EimerUtilityProcessTransport.d.ts +33 -0
- package/dist/cjs/transports/EimerUtilityProcessTransport.d.ts.map +1 -0
- package/dist/cjs/transports/EimerUtilityProcessTransport.js +47 -0
- package/dist/cjs/transports/EimerUtilityProcessTransport.js.map +1 -0
- package/dist/cjs/transports/EimerWebWorkerTransport.d.ts +46 -0
- package/dist/cjs/transports/EimerWebWorkerTransport.d.ts.map +1 -0
- package/dist/cjs/transports/EimerWebWorkerTransport.js +56 -0
- package/dist/cjs/transports/EimerWebWorkerTransport.js.map +1 -0
- package/dist/cjs/transports/index.d.ts +2 -0
- package/dist/cjs/transports/index.d.ts.map +1 -1
- package/dist/cjs/transports/index.js +2 -0
- package/dist/cjs/transports/index.js.map +1 -1
- package/dist/esm/eimer/Eimer.js.map +1 -1
- package/dist/esm/transports/EimerUtilityProcessTransport.js +43 -0
- package/dist/esm/transports/EimerUtilityProcessTransport.js.map +1 -0
- package/dist/esm/transports/EimerWebWorkerTransport.js +52 -0
- package/dist/esm/transports/EimerWebWorkerTransport.js.map +1 -0
- package/dist/esm/transports/index.js +2 -0
- package/dist/esm/transports/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -6,8 +6,6 @@ import type { RpcHandler } from './RpcHandler';
|
|
|
6
6
|
import type { RpcMethod } from './RpcMethod';
|
|
7
7
|
import type { Topic } from './Topic';
|
|
8
8
|
import type { Transport } from './Transport';
|
|
9
|
-
export interface EimerInterface {
|
|
10
|
-
}
|
|
11
9
|
/**
|
|
12
10
|
* Eimer main class
|
|
13
11
|
* This class represents an instance of a "node" on the Eimer "network".
|
|
@@ -18,7 +16,7 @@ export interface EimerInterface {
|
|
|
18
16
|
* To use it, create an instance with a unique node id and connect a transport
|
|
19
17
|
* After that, publish/subscribe and RPC can be used.
|
|
20
18
|
*/
|
|
21
|
-
export declare class Eimer
|
|
19
|
+
export declare class Eimer {
|
|
22
20
|
private readonly nodeId;
|
|
23
21
|
private readonly idGenerator;
|
|
24
22
|
private readonly messageBus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Eimer.d.ts","sourceRoot":"","sources":["../../../src/eimer/Eimer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C
|
|
1
|
+
{"version":3,"file":"Eimer.d.ts","sourceRoot":"","sources":["../../../src/eimer/Eimer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;;GASG;AACH,qBAAa,KAAK;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAGhC,OAAO,CAAC,UAAU,CAA8D;IAEhF;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,iBAAiB;IAQpF;;;OAGG;IACH,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKnC;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKtC;;;;;;;;OAQG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAKnF;;;;;;OAMG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAKhE;;;OAGG;IACH,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAK7C;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAY9C;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,IAAI;IA4BnE;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI;IAgB/D;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAalC;;;;OAIG;IACH,QAAQ,IAAI,IAAI;CAKnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Eimer.js","sourceRoot":"","sources":["../../../src/eimer/Eimer.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAC9C,yCAAsC;AAEtC,uEAAoE;AACpE,uDAAoD;AACpD,oEAAiE;AACjE,4DAAyD;
|
|
1
|
+
{"version":3,"file":"Eimer.js","sourceRoot":"","sources":["../../../src/eimer/Eimer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { EimerMessagePortTransport, EimerMessagePortTransportDependencies, EimerMessagePortTransportOptions } from './EimerMessagePortTransport';
|
|
2
|
+
/**
|
|
3
|
+
* Structural type covering both sides of an Electron utility_process channel:
|
|
4
|
+
* - `utilityProcess` (Electron.UtilityProcess) in the main process
|
|
5
|
+
* - `process.parentPort` (Electron.ParentPort) inside the utility process
|
|
6
|
+
*
|
|
7
|
+
* Note that the two sides are *not* symmetric at runtime: `UtilityProcess`
|
|
8
|
+
* delivers the raw message to its `'message'` listener, while `ParentPort`
|
|
9
|
+
* wraps it in a `MessageEvent` (`{ data, ports }`). `EimerUtilityProcessTransport`
|
|
10
|
+
* unwraps that `MessageEvent` shape internally so callers can use this type on
|
|
11
|
+
* both ends without worrying about the discrepancy.
|
|
12
|
+
*/
|
|
13
|
+
export interface UtilityProcessPort {
|
|
14
|
+
postMessage(message: any): void;
|
|
15
|
+
on(event: 'message', handler: (message: any) => void): this;
|
|
16
|
+
off?(event: 'message', handler: (message: any) => void): this;
|
|
17
|
+
}
|
|
18
|
+
export interface EimerUtilityProcessTransportOptions extends EimerMessagePortTransportOptions {
|
|
19
|
+
}
|
|
20
|
+
export interface EimerUtilityProcessTransportDependencies extends EimerMessagePortTransportDependencies {
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Eimer UtilityProcess Transport
|
|
24
|
+
*
|
|
25
|
+
* A Transport for communicating with Electron utility_processes via MessagePort.
|
|
26
|
+
* Use it on both ends of the channel:
|
|
27
|
+
* - In the main process: pass the `utilityProcess` object returned by `utilityProcess.fork()`
|
|
28
|
+
* - Inside the utility process: pass `process.parentPort`
|
|
29
|
+
*/
|
|
30
|
+
export declare class EimerUtilityProcessTransport extends EimerMessagePortTransport {
|
|
31
|
+
constructor(port: UtilityProcessPort, options?: EimerUtilityProcessTransportOptions, dependencies?: EimerUtilityProcessTransportDependencies);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=EimerUtilityProcessTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerUtilityProcessTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,qCAAqC,EAAE,gCAAgC,EAAe,MAAM,6BAA6B,CAAC;AAE9J;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAChC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,mCAAoC,SAAQ,gCAAgC;CAAG;AAEhG,MAAM,WAAW,wCAAyC,SAAQ,qCAAqC;CAAG;AA+B1G;;;;;;;GAOG;AACH,qBAAa,4BAA6B,SAAQ,yBAAyB;gBAC3D,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,mCAAmC,EAAE,YAAY,CAAC,EAAE,wCAAwC;CAG/I"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EimerUtilityProcessTransport = void 0;
|
|
4
|
+
const EimerMessage_1 = require("../eimer/EimerMessage");
|
|
5
|
+
const EimerMessagePortTransport_1 = require("./EimerMessagePortTransport");
|
|
6
|
+
/**
|
|
7
|
+
* Wraps a `UtilityProcessPort` so that `'message'` listeners always receive the
|
|
8
|
+
* raw eimer message, regardless of whether the underlying port delivers it directly
|
|
9
|
+
* (`Electron.UtilityProcess`) or wrapped in a `MessageEvent` (`Electron.ParentPort`).
|
|
10
|
+
*/
|
|
11
|
+
class MessageEventUnwrappingPort {
|
|
12
|
+
constructor(port) {
|
|
13
|
+
this.port = port;
|
|
14
|
+
}
|
|
15
|
+
postMessage(message) {
|
|
16
|
+
this.port.postMessage(message);
|
|
17
|
+
}
|
|
18
|
+
on(event, handler) {
|
|
19
|
+
this.port.on(event, (received) => {
|
|
20
|
+
if (!EimerMessage_1.EimerMessage.isEimerMessage(received) && received !== null && typeof received === 'object' && 'data' in received) {
|
|
21
|
+
handler(received.data);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
handler(received);
|
|
25
|
+
});
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
off(event, handler) {
|
|
29
|
+
this.port.off?.(event, handler);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Eimer UtilityProcess Transport
|
|
35
|
+
*
|
|
36
|
+
* A Transport for communicating with Electron utility_processes via MessagePort.
|
|
37
|
+
* Use it on both ends of the channel:
|
|
38
|
+
* - In the main process: pass the `utilityProcess` object returned by `utilityProcess.fork()`
|
|
39
|
+
* - Inside the utility process: pass `process.parentPort`
|
|
40
|
+
*/
|
|
41
|
+
class EimerUtilityProcessTransport extends EimerMessagePortTransport_1.EimerMessagePortTransport {
|
|
42
|
+
constructor(port, options, dependencies) {
|
|
43
|
+
super(new MessageEventUnwrappingPort(port), { ...options, logModuleName: options?.logModuleName ?? 'EimerUtilityProcessTransport' }, dependencies);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.EimerUtilityProcessTransport = EimerUtilityProcessTransport;
|
|
47
|
+
//# sourceMappingURL=EimerUtilityProcessTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerUtilityProcessTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":";;;AAAA,wDAAqD;AAErD,2EAA8J;AAuB9J;;;;GAIG;AACH,MAAM,0BAA0B;IAC5B,YAA6B,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAEzD,WAAW,CAAC,OAAY;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,KAAgB,EAAE,OAA+B;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,QAAa,EAAQ,EAAE;YACxC,IAAI,CAAC,2BAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACpH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO;YACX,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,KAAgB,EAAE,OAA+B;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,MAAa,4BAA6B,SAAQ,qDAAyB;IACvE,YAAY,IAAwB,EAAE,OAA6C,EAAE,YAAuD;QACxI,KAAK,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAgB,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,8BAA8B,EAAE,EAAE,YAAY,CAAC,CAAC;IACtK,CAAC;CACJ;AAJD,oEAIC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { EimerMessage } from '../eimer/EimerMessage';
|
|
2
|
+
import type { EimerDependencies } from '../eimer/EimerDependencies';
|
|
3
|
+
import type { EimerOptions } from '../eimer/EimerOptions';
|
|
4
|
+
import type { MessageHandler } from '../eimer/MessageHandler';
|
|
5
|
+
import type { NodeId } from '../eimer/NodeId';
|
|
6
|
+
import type { Transport } from '../eimer/Transport';
|
|
7
|
+
/**
|
|
8
|
+
* Represents a browser-side message port: a Worker (from the parent window),
|
|
9
|
+
* a DedicatedWorkerGlobalScope (`self` inside a worker), or a MessagePort
|
|
10
|
+
* from MessageChannel. All three share this shape.
|
|
11
|
+
*/
|
|
12
|
+
export interface WebWorkerPort {
|
|
13
|
+
postMessage(message: any): void;
|
|
14
|
+
addEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
15
|
+
removeEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
16
|
+
/** MessagePort from MessageChannel requires start() before messages flow */
|
|
17
|
+
start?(): void;
|
|
18
|
+
}
|
|
19
|
+
export interface EimerWebWorkerTransportOptions extends Pick<EimerOptions, 'logLevel' | 'logModuleName'> {
|
|
20
|
+
}
|
|
21
|
+
export interface EimerWebWorkerTransportDependencies extends Pick<EimerDependencies, 'logger'> {
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Eimer Web Worker Transport
|
|
25
|
+
*
|
|
26
|
+
* A Transport for communicating across browser Web Workers. Works with:
|
|
27
|
+
* - A `Worker` instance in the parent window (communicating with a dedicated worker)
|
|
28
|
+
* - `self` (DedicatedWorkerGlobalScope) inside the worker (communicating with the parent)
|
|
29
|
+
* - A browser `MessagePort` from `MessageChannel`
|
|
30
|
+
*
|
|
31
|
+
* Unlike EimerMessagePortTransport (which expects a Node.js EventEmitter-style `.on()` API),
|
|
32
|
+
* this transport uses `addEventListener`/`removeEventListener` and unwraps `MessageEvent.data`.
|
|
33
|
+
*/
|
|
34
|
+
export declare class EimerWebWorkerTransport implements Transport {
|
|
35
|
+
private nodeId?;
|
|
36
|
+
private incomingMessageHandler?;
|
|
37
|
+
private logger;
|
|
38
|
+
private port;
|
|
39
|
+
private boundHandleMessage;
|
|
40
|
+
constructor(port: WebWorkerPort, options?: EimerWebWorkerTransportOptions, dependencies?: EimerWebWorkerTransportDependencies);
|
|
41
|
+
initialize(nodeId: NodeId, incomingMessageHandler: MessageHandler): void;
|
|
42
|
+
send(message: EimerMessage): void;
|
|
43
|
+
shutdown(): void;
|
|
44
|
+
private handleMessage;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=EimerWebWorkerTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerWebWorkerTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerWebWorkerTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAChC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC;IACjF,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC;IACpF,4EAA4E;IAC5E,KAAK,CAAC,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,8BAA+B,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC;CAAG;AAE3G,MAAM,WAAW,mCAAoC,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;CAAG;AAEjG;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,YAAW,SAAS;IACrD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,sBAAsB,CAAC,CAAiB;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,kBAAkB,CAAgC;gBAE9C,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,8BAA8B,EAAE,YAAY,CAAC,EAAE,mCAAmC;IAM7H,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,GAAG,IAAI;IAWxE,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IASjC,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,aAAa;CAexB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EimerWebWorkerTransport = void 0;
|
|
4
|
+
const EimerMessage_1 = require("../eimer/EimerMessage");
|
|
5
|
+
const LogLevel_1 = require("../eimer/LogLevel");
|
|
6
|
+
const EimerLogger_1 = require("../logger/EimerLogger");
|
|
7
|
+
/**
|
|
8
|
+
* Eimer Web Worker Transport
|
|
9
|
+
*
|
|
10
|
+
* A Transport for communicating across browser Web Workers. Works with:
|
|
11
|
+
* - A `Worker` instance in the parent window (communicating with a dedicated worker)
|
|
12
|
+
* - `self` (DedicatedWorkerGlobalScope) inside the worker (communicating with the parent)
|
|
13
|
+
* - A browser `MessagePort` from `MessageChannel`
|
|
14
|
+
*
|
|
15
|
+
* Unlike EimerMessagePortTransport (which expects a Node.js EventEmitter-style `.on()` API),
|
|
16
|
+
* this transport uses `addEventListener`/`removeEventListener` and unwraps `MessageEvent.data`.
|
|
17
|
+
*/
|
|
18
|
+
class EimerWebWorkerTransport {
|
|
19
|
+
constructor(port, options, dependencies) {
|
|
20
|
+
this.logger = dependencies?.logger ?? new EimerLogger_1.EimerLogger(options?.logLevel ?? LogLevel_1.LogLevel.DEBUG, options?.logModuleName ?? 'WebWorkerTransport');
|
|
21
|
+
this.port = port;
|
|
22
|
+
this.boundHandleMessage = this.handleMessage.bind(this);
|
|
23
|
+
}
|
|
24
|
+
initialize(nodeId, incomingMessageHandler) {
|
|
25
|
+
this.nodeId = nodeId;
|
|
26
|
+
this.logger.setNodeId?.(this.nodeId);
|
|
27
|
+
this.incomingMessageHandler = incomingMessageHandler;
|
|
28
|
+
this.port.addEventListener('message', this.boundHandleMessage);
|
|
29
|
+
// MessagePort from MessageChannel does not deliver messages until start() is called
|
|
30
|
+
this.port.start?.();
|
|
31
|
+
}
|
|
32
|
+
send(message) {
|
|
33
|
+
this.logger.debug('Sending message', {
|
|
34
|
+
topic: message.topic,
|
|
35
|
+
payload: message.payload,
|
|
36
|
+
});
|
|
37
|
+
this.port.postMessage(message);
|
|
38
|
+
}
|
|
39
|
+
shutdown() {
|
|
40
|
+
this.port.removeEventListener('message', this.boundHandleMessage);
|
|
41
|
+
}
|
|
42
|
+
handleMessage(event) {
|
|
43
|
+
const message = event.data;
|
|
44
|
+
if (!EimerMessage_1.EimerMessage.isEimerMessage(message)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.logger.debug('Received message', {
|
|
48
|
+
from: message.from,
|
|
49
|
+
topic: message.topic,
|
|
50
|
+
payload: message.payload,
|
|
51
|
+
});
|
|
52
|
+
this.incomingMessageHandler?.(message);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.EimerWebWorkerTransport = EimerWebWorkerTransport;
|
|
56
|
+
//# sourceMappingURL=EimerWebWorkerTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerWebWorkerTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerWebWorkerTransport.ts"],"names":[],"mappings":";;;AAAA,wDAAqD;AACrD,gDAA6C;AAC7C,uDAAoD;AA0BpD;;;;;;;;;;GAUG;AACH,MAAa,uBAAuB;IAOhC,YAAY,IAAmB,EAAE,OAAwC,EAAE,YAAkD;QACzH,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,IAAI,yBAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,mBAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,IAAI,oBAAoB,CAAC,CAAC;QAC3I,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,sBAAsC;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE/D,oFAAoF;QACpF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,OAAqB;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtE,CAAC;IAEO,aAAa,CAAC,KAAmB;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QAE3B,IAAI,CAAC,2BAAY,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;CACJ;AApDD,0DAoDC"}
|
|
@@ -4,4 +4,6 @@ export * from './EimerIpcRendererTransport';
|
|
|
4
4
|
export * from './EimerMockTransport';
|
|
5
5
|
export * from './EimerMessagePortTransport';
|
|
6
6
|
export * from './EimerWorkerThreadTransport';
|
|
7
|
+
export * from './EimerUtilityProcessTransport';
|
|
8
|
+
export * from './EimerWebWorkerTransport';
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC"}
|
|
@@ -20,4 +20,6 @@ __exportStar(require("./EimerIpcRendererTransport"), exports);
|
|
|
20
20
|
__exportStar(require("./EimerMockTransport"), exports);
|
|
21
21
|
__exportStar(require("./EimerMessagePortTransport"), exports);
|
|
22
22
|
__exportStar(require("./EimerWorkerThreadTransport"), exports);
|
|
23
|
+
__exportStar(require("./EimerUtilityProcessTransport"), exports);
|
|
24
|
+
__exportStar(require("./EimerWebWorkerTransport"), exports);
|
|
23
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,0DAAwC;AACxC,8DAA4C;AAC5C,uDAAqC;AACrC,8DAA4C;AAC5C,+DAA6C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,0DAAwC;AACxC,8DAA4C;AAC5C,uDAAqC;AACrC,8DAA4C;AAC5C,+DAA6C;AAC7C,iEAA+C;AAC/C,4DAA0C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Eimer.js","sourceRoot":"","sources":["../../../src/eimer/Eimer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Eimer.js","sourceRoot":"","sources":["../../../src/eimer/Eimer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { EimerMessage } from '../eimer/EimerMessage';
|
|
2
|
+
import { EimerMessagePortTransport } from './EimerMessagePortTransport';
|
|
3
|
+
/**
|
|
4
|
+
* Wraps a `UtilityProcessPort` so that `'message'` listeners always receive the
|
|
5
|
+
* raw eimer message, regardless of whether the underlying port delivers it directly
|
|
6
|
+
* (`Electron.UtilityProcess`) or wrapped in a `MessageEvent` (`Electron.ParentPort`).
|
|
7
|
+
*/
|
|
8
|
+
class MessageEventUnwrappingPort {
|
|
9
|
+
constructor(port) {
|
|
10
|
+
this.port = port;
|
|
11
|
+
}
|
|
12
|
+
postMessage(message) {
|
|
13
|
+
this.port.postMessage(message);
|
|
14
|
+
}
|
|
15
|
+
on(event, handler) {
|
|
16
|
+
this.port.on(event, (received) => {
|
|
17
|
+
if (!EimerMessage.isEimerMessage(received) && received !== null && typeof received === 'object' && 'data' in received) {
|
|
18
|
+
handler(received.data);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
handler(received);
|
|
22
|
+
});
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
off(event, handler) {
|
|
26
|
+
this.port.off?.(event, handler);
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Eimer UtilityProcess Transport
|
|
32
|
+
*
|
|
33
|
+
* A Transport for communicating with Electron utility_processes via MessagePort.
|
|
34
|
+
* Use it on both ends of the channel:
|
|
35
|
+
* - In the main process: pass the `utilityProcess` object returned by `utilityProcess.fork()`
|
|
36
|
+
* - Inside the utility process: pass `process.parentPort`
|
|
37
|
+
*/
|
|
38
|
+
export class EimerUtilityProcessTransport extends EimerMessagePortTransport {
|
|
39
|
+
constructor(port, options, dependencies) {
|
|
40
|
+
super(new MessageEventUnwrappingPort(port), { ...options, logModuleName: options?.logModuleName ?? 'EimerUtilityProcessTransport' }, dependencies);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=EimerUtilityProcessTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerUtilityProcessTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,yBAAyB,EAAwF,MAAM,6BAA6B,CAAC;AAuB9J;;;;GAIG;AACH,MAAM,0BAA0B;IAC5B,YAA6B,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAEzD,WAAW,CAAC,OAAY;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,KAAgB,EAAE,OAA+B;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,QAAa,EAAQ,EAAE;YACxC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACpH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO;YACX,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,KAAgB,EAAE,OAA+B;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,4BAA6B,SAAQ,yBAAyB;IACvE,YAAY,IAAwB,EAAE,OAA6C,EAAE,YAAuD;QACxI,KAAK,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAgB,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,8BAA8B,EAAE,EAAE,YAAY,CAAC,CAAC;IACtK,CAAC;CACJ"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { EimerMessage } from '../eimer/EimerMessage';
|
|
2
|
+
import { LogLevel } from '../eimer/LogLevel';
|
|
3
|
+
import { EimerLogger } from '../logger/EimerLogger';
|
|
4
|
+
/**
|
|
5
|
+
* Eimer Web Worker Transport
|
|
6
|
+
*
|
|
7
|
+
* A Transport for communicating across browser Web Workers. Works with:
|
|
8
|
+
* - A `Worker` instance in the parent window (communicating with a dedicated worker)
|
|
9
|
+
* - `self` (DedicatedWorkerGlobalScope) inside the worker (communicating with the parent)
|
|
10
|
+
* - A browser `MessagePort` from `MessageChannel`
|
|
11
|
+
*
|
|
12
|
+
* Unlike EimerMessagePortTransport (which expects a Node.js EventEmitter-style `.on()` API),
|
|
13
|
+
* this transport uses `addEventListener`/`removeEventListener` and unwraps `MessageEvent.data`.
|
|
14
|
+
*/
|
|
15
|
+
export class EimerWebWorkerTransport {
|
|
16
|
+
constructor(port, options, dependencies) {
|
|
17
|
+
this.logger = dependencies?.logger ?? new EimerLogger(options?.logLevel ?? LogLevel.DEBUG, options?.logModuleName ?? 'WebWorkerTransport');
|
|
18
|
+
this.port = port;
|
|
19
|
+
this.boundHandleMessage = this.handleMessage.bind(this);
|
|
20
|
+
}
|
|
21
|
+
initialize(nodeId, incomingMessageHandler) {
|
|
22
|
+
this.nodeId = nodeId;
|
|
23
|
+
this.logger.setNodeId?.(this.nodeId);
|
|
24
|
+
this.incomingMessageHandler = incomingMessageHandler;
|
|
25
|
+
this.port.addEventListener('message', this.boundHandleMessage);
|
|
26
|
+
// MessagePort from MessageChannel does not deliver messages until start() is called
|
|
27
|
+
this.port.start?.();
|
|
28
|
+
}
|
|
29
|
+
send(message) {
|
|
30
|
+
this.logger.debug('Sending message', {
|
|
31
|
+
topic: message.topic,
|
|
32
|
+
payload: message.payload,
|
|
33
|
+
});
|
|
34
|
+
this.port.postMessage(message);
|
|
35
|
+
}
|
|
36
|
+
shutdown() {
|
|
37
|
+
this.port.removeEventListener('message', this.boundHandleMessage);
|
|
38
|
+
}
|
|
39
|
+
handleMessage(event) {
|
|
40
|
+
const message = event.data;
|
|
41
|
+
if (!EimerMessage.isEimerMessage(message)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.logger.debug('Received message', {
|
|
45
|
+
from: message.from,
|
|
46
|
+
topic: message.topic,
|
|
47
|
+
payload: message.payload,
|
|
48
|
+
});
|
|
49
|
+
this.incomingMessageHandler?.(message);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=EimerWebWorkerTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerWebWorkerTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerWebWorkerTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AA0BpD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,uBAAuB;IAOhC,YAAY,IAAmB,EAAE,OAAwC,EAAE,YAAkD;QACzH,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,IAAI,oBAAoB,CAAC,CAAC;QAC3I,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,sBAAsC;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE/D,oFAAoF;QACpF,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,OAAqB;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtE,CAAC;IAEO,aAAa,CAAC,KAAmB;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QAE3B,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;CACJ"}
|
|
@@ -4,4 +4,6 @@ export * from './EimerIpcRendererTransport';
|
|
|
4
4
|
export * from './EimerMockTransport';
|
|
5
5
|
export * from './EimerMessagePortTransport';
|
|
6
6
|
export * from './EimerWorkerThreadTransport';
|
|
7
|
+
export * from './EimerUtilityProcessTransport';
|
|
8
|
+
export * from './EimerWebWorkerTransport';
|
|
7
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eimer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Electron Interprocess MEssage Router - IPC library for Electron.js",
|
|
5
5
|
"author": "Jan Hapke (https://janhapke.com)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -54,4 +54,4 @@
|
|
|
54
54
|
"typescript": "^5.0.0",
|
|
55
55
|
"vitest": "^4.0.14"
|
|
56
56
|
}
|
|
57
|
-
}
|
|
57
|
+
}
|