@gjsify/message-channel 0.4.12
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/globals.mjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-exports native MessageChannel/MessagePort globals for Node.js builds.
|
|
3
|
+
*
|
|
4
|
+
* On Node 22+ these are real globals (HTML spec implementation lives in
|
|
5
|
+
* the runtime since Node 15). The `ALIASES_WEB_FOR_NODE` redirect in
|
|
6
|
+
* `@gjsify/resolve-npm` points bare `message-channel` imports here on
|
|
7
|
+
* Node so consumer code gets the native implementation.
|
|
8
|
+
*
|
|
9
|
+
* On GJS the bare `message-channel` specifier resolves to
|
|
10
|
+
* `@gjsify/message-channel` instead — see `ALIASES_WEB_FOR_GJS`.
|
|
11
|
+
*/
|
|
12
|
+
export const MessageChannel = globalThis.MessageChannel;
|
|
13
|
+
export const MessagePort = globalThis.MessagePort;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});export{__name};
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{EventTarget as e,MessageEvent as t}from"@gjsify/dom-events";let n=1;var MessagePort=class extends e{_partner=null;_portId=n++;_transferred=!1;_transport=null;_started=!1;_queue=[];_closed=!1;_onmessage=null;_onmessageerror=null;postMessage(e,t){if(this._transferred)throw DOMException_(`Cannot post on a transferred MessagePort`,`InvalidStateError`);if(!this._closed){if(this._transport!==null){this._transport.send(this._portId,e);return}this._partner&&!this._partner._closed&&this._partner._receive(e)}}start(){if(this._started||this._closed)return;this._started=!0;let e=this._queue;this._queue=[];for(let t of e)this._dispatch(t)}close(){this._closed||(this._closed=!0,this._transport!==null&&(this._transport.close(this._portId),this._transport=null),this._partner=null,this._queue.length=0)}_receive(e){if(!this._closed){if(!this._started){this._queue.push(e);return}this._dispatch(e)}}_dispatch(e){Promise.resolve().then(()=>{this._closed||this.dispatchEvent(new t(`message`,{data:e}))})}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener(`message`,this._onmessage),this._onmessage=e,e&&this.addEventListener(`message`,e)}get onmessageerror(){return this._onmessageerror}set onmessageerror(e){this._onmessageerror&&this.removeEventListener(`messageerror`,this._onmessageerror),this._onmessageerror=e,e&&this.addEventListener(`messageerror`,e)}addEventListener(e,t,n){super.addEventListener(e,t,n),e===`message`&&this.start()}get[Symbol.toStringTag](){return`MessagePort`}},MessageChannel=class{port1;port2;constructor(){this.port1=new MessagePort,this.port2=new MessagePort,this.port1._partner=this.port2,this.port2._partner=this.port1}get[Symbol.toStringTag](){return`MessageChannel`}};function DOMException_(e,t){let n=globalThis.DOMException;if(typeof n==`function`)return new n(e,t);let r=Error(e);return r.name=t,r}export{MessageChannel,MessagePort};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{MessageChannel as e,MessagePort as t}from"./index.js";globalThis.MessageChannel===void 0&&(globalThis.MessageChannel=e),globalThis.MessagePort===void 0&&(globalThis.MessagePort=t);
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { EventTarget, MessageEvent } from '@gjsify/dom-events';
|
|
2
|
+
/**
|
|
3
|
+
* Pluggable transport interface that lets a MessagePort route its
|
|
4
|
+
* outbound messages through something other than its in-process partner.
|
|
5
|
+
*
|
|
6
|
+
* @gjsify/iframe attaches a transport that JSON-serialises + sends over
|
|
7
|
+
* a WebKit script-message-handler. Future transports might attach a
|
|
8
|
+
* stdin-pipe writer (worker_threads) or a BroadcastChannel relay.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export interface MessagePortTransport {
|
|
13
|
+
/** Send a payload along this port's wire. */
|
|
14
|
+
send(portId: number, data: unknown): void;
|
|
15
|
+
/** Close this port's wire endpoint. */
|
|
16
|
+
close(portId: number): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class MessagePort extends EventTarget {
|
|
19
|
+
/** @internal In-process partner; null after transfer attaches a transport. */
|
|
20
|
+
_partner: MessagePort | null;
|
|
21
|
+
/** @internal Per-port unique id. Used by transports for routing. */
|
|
22
|
+
_portId: number;
|
|
23
|
+
/** @internal True once the port has been listed in a transferList. Future
|
|
24
|
+
* postMessage calls on this instance throw — see HTML spec. */
|
|
25
|
+
_transferred: boolean;
|
|
26
|
+
/** @internal Outbound-message router. When set, postMessage routes via
|
|
27
|
+
* `transport.send(portId, data)` instead of the in-process partner. */
|
|
28
|
+
_transport: MessagePortTransport | null;
|
|
29
|
+
/** @internal HTML implicit-start gate: messages received before start()
|
|
30
|
+
* (or before the first addEventListener('message')) buffer here. */
|
|
31
|
+
_started: boolean;
|
|
32
|
+
_queue: unknown[];
|
|
33
|
+
_closed: boolean;
|
|
34
|
+
/** @internal onmessage / onmessageerror IDL attribute backing field. */
|
|
35
|
+
_onmessage: ((evt: MessageEvent) => unknown) | null;
|
|
36
|
+
_onmessageerror: ((evt: MessageEvent) => unknown) | null;
|
|
37
|
+
postMessage(data: unknown, _transfer?: unknown[]): void;
|
|
38
|
+
/**
|
|
39
|
+
* Per W3C: enables dispatching of queued messages. Explicit `start()`
|
|
40
|
+
* is rarely needed — adding a `'message'` listener via
|
|
41
|
+
* addEventListener (or assigning to `.onmessage`) auto-starts the
|
|
42
|
+
* port. This method exists for code that defers listener attachment.
|
|
43
|
+
*/
|
|
44
|
+
start(): void;
|
|
45
|
+
close(): void;
|
|
46
|
+
/** @internal Wire-side delivery point: called by the in-process partner
|
|
47
|
+
* OR by the transport's recv-loop when a message arrives off the wire. */
|
|
48
|
+
_receive(data: unknown): void;
|
|
49
|
+
private _dispatch;
|
|
50
|
+
get onmessage(): ((evt: MessageEvent) => unknown) | null;
|
|
51
|
+
set onmessage(fn: ((evt: MessageEvent) => unknown) | null);
|
|
52
|
+
get onmessageerror(): ((evt: MessageEvent) => unknown) | null;
|
|
53
|
+
set onmessageerror(fn: ((evt: MessageEvent) => unknown) | null);
|
|
54
|
+
addEventListener(type: string, listener: any, options?: any): void;
|
|
55
|
+
get [Symbol.toStringTag](): string;
|
|
56
|
+
}
|
|
57
|
+
export declare class MessageChannel {
|
|
58
|
+
readonly port1: MessagePort;
|
|
59
|
+
readonly port2: MessagePort;
|
|
60
|
+
constructor();
|
|
61
|
+
get [Symbol.toStringTag](): string;
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gjsify/message-channel",
|
|
3
|
+
"version": "0.4.12",
|
|
4
|
+
"description": "W3C MessageChannel + MessagePort for GJS — EventTarget-based, transport-pluggable. Same surface backs in-process channels (default), the @gjsify/iframe WebKit bridge, and (future) @gjsify/worker_threads cross-process workers.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"module": "lib/esm/index.js",
|
|
7
|
+
"types": "lib/types/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/types/index.d.ts",
|
|
11
|
+
"default": "./lib/esm/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./register": {
|
|
14
|
+
"types": "./lib/types/register.d.ts",
|
|
15
|
+
"default": "./lib/esm/register.js"
|
|
16
|
+
},
|
|
17
|
+
"./globals": "./globals.mjs"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"lib",
|
|
21
|
+
"globals.mjs"
|
|
22
|
+
],
|
|
23
|
+
"sideEffects": [
|
|
24
|
+
"./lib/esm/register.js",
|
|
25
|
+
"./globals.mjs"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
|
|
29
|
+
"check": "tsc --noEmit",
|
|
30
|
+
"build": "gjsify run build:gjsify && gjsify run build:types",
|
|
31
|
+
"build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
|
|
32
|
+
"build:types": "tsc",
|
|
33
|
+
"build:test": "gjsify run build:test:gjs && gjsify run build:test:node",
|
|
34
|
+
"build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
|
|
35
|
+
"build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
|
|
36
|
+
"test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:node && gjsify run test:gjs",
|
|
37
|
+
"test:gjs": "gjsify run test.gjs.mjs",
|
|
38
|
+
"test:node": "node test.node.mjs"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"gjs",
|
|
42
|
+
"web",
|
|
43
|
+
"messagechannel",
|
|
44
|
+
"messageport"
|
|
45
|
+
],
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@gjsify/cli": "^0.4.12",
|
|
48
|
+
"@gjsify/unit": "^0.4.12",
|
|
49
|
+
"@types/node": "^25.6.2",
|
|
50
|
+
"typescript": "^6.0.3"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@gjsify/dom-events": "^0.4.12"
|
|
54
|
+
},
|
|
55
|
+
"license": "MIT",
|
|
56
|
+
"author": "Pascal Garber <pascal@artandcode.studio>"
|
|
57
|
+
}
|