@webqit/port-plus 0.1.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.
@@ -0,0 +1,13 @@
1
+ # These are supported funding model platforms
2
+
3
+ github: ox-harris # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4
+ patreon: # Replace with a single Patreon username
5
+ open_collective: webqit # Replace with a single Open Collective username
6
+ ko_fi: # Replace with a single Ko-fi username
7
+ tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8
+ community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9
+ liberapay: # Replace with a single Liberapay username
10
+ issuehunt: # Replace with a single IssueHunt username
11
+ otechie: # Replace with a single Otechie username
12
+ lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
13
+ custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
@@ -0,0 +1,48 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: Checkout repository
14
+ uses: actions/checkout@v4
15
+
16
+ - name: Setup Node.js
17
+ uses: actions/setup-node@v4
18
+ with:
19
+ node-version: 20
20
+ registry-url: 'https://registry.npmjs.org/'
21
+
22
+ - name: Install dependencies
23
+ run: npm ci
24
+
25
+ - name: Build
26
+ run: npm run build
27
+
28
+ - name: Determine npm tag
29
+ id: tag
30
+ run: |
31
+ # Extract tag name without "refs/tags/"
32
+ TAG_REF=${GITHUB_REF#refs/tags/}
33
+ echo "Detected Git tag: $TAG_REF"
34
+
35
+ # Determine npm tag
36
+ if [[ "$TAG_REF" == *-* ]]; then
37
+ # prerelease (contains a hyphen)
38
+ NPM_TAG=$(echo "$TAG_REF" | sed -E 's/^v[0-9]+\.[0-9]+\.[0-9]+-([a-zA-Z0-9]+).*/\1/')
39
+ else
40
+ NPM_TAG="latest"
41
+ fi
42
+ echo "npm publish will use tag: $NPM_TAG"
43
+ echo "tag=$NPM_TAG" >> $GITHUB_OUTPUT
44
+
45
+ - name: Publish to npm
46
+ env:
47
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
48
+ run: npm publish --tag ${{ steps.tag.outputs.tag }}
package/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ .*
2
+
3
+ !/.github
4
+ !.vitepress
5
+ !/.gitignore
6
+ node_modules
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 WebQit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,211 @@
1
+ # Port+ – *Advanced Web Messaging Primitives*
2
+
3
+ [![npm version][npm-version-src]][npm-version-href]
4
+ [![bundle][bundle-src]][bundle-href]
5
+ [![License][license-src]][license-href]
6
+
7
+ **Port+** is an upgrade to the web's port-based messaging APIs — `MessagePort`, `MessageChannel`, `BroadcastChannel` – and an onboarding of the
8
+ WebSocket API into the same port-based messaging model.
9
+
10
+ This README takes you from installation to the design concepts and, ultimately, to the added capabilities implied by Port+.
11
+
12
+ ---
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ npm i @webqit/port-plus
18
+ ```
19
+
20
+ ```js
21
+ import { MessageChannelPlus, BroadcastChannelPlus, WebSocketPort, ... } from '@webqit/port-plus';
22
+ ```
23
+
24
+ ---
25
+
26
+ ## Design Concepts
27
+
28
+ Port+ is an API mirror of the Web Messaging APIs built for advanced use cases. An instance of `BroadcastChannelPlus`, for example, gives you the same standard `BroadcastChannel` instance, but better.
29
+
30
+ The following is the mental model of the existing Web Messaging APIs. The Port+ equivalent comes next.
31
+
32
+ ### (a) The Web's Messaging APIs at a Glance
33
+
34
+ #### 1. MessageChannel
35
+
36
+ ```
37
+ MessageChannel (ch)
38
+ ├─ ch.port1 ──► MessageEvent (e) ──► e.ports
39
+ └─ ch.port2 ──► MessageEvent (e) ──► e.ports
40
+ ```
41
+
42
+ *In this system:*
43
+
44
+ * `ch.port1` and `ch.port2` are each a message port ([`MessagePort`](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort))
45
+ * messages (`e`) arrive as `message` events ([`MessageEvent`](https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent))
46
+ * `e.ports` are each a message port ([`MessagePort`](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort))
47
+
48
+ #### 2. BroadcastChannel
49
+
50
+ ```
51
+ BroadcastChannel (br) ──► MessageEvent (e)
52
+ ```
53
+
54
+ *In this system:*
55
+
56
+ * the `BroadcastChannel` interface is the message port – the equivalent of `MessagePort`
57
+ * messages (`e`) arrive as `message` events ([`MessageEvent`](https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent))
58
+ * no reply ports – `e.ports`; not implemented in BroadcastChannel
59
+
60
+ #### 3. WebSocket
61
+
62
+ ```
63
+ WebSocket ──► MessageEvent (e)
64
+ ```
65
+
66
+ *In this system:*
67
+
68
+ * the `WebSocket` interface is partly a message port (having `addEventListener()`) and partly not (no `postMessage()`)
69
+ * messages (`e`) arrive as `message` events ([`MessageEvent`](https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent))
70
+ * no reply ports – `e.ports`; not implemented in WebSocket
71
+ * no API parity with `MessagePort` / `BroadcastChannel` in all
72
+
73
+ ### (b) The Port+ Equivalent
74
+
75
+ #### 1. MessageChannelPlus
76
+
77
+ ```
78
+ MessageChannelPlus (ch)
79
+ ├─ ch.port1+ ──► MessageEventPlus (e) ──► e.ports+
80
+ └─ ch.port2+ ──► MessageEventPlus (e) ──► e.ports+
81
+ ```
82
+
83
+ #### 2. BroadcastChannelPlus
84
+
85
+ ```
86
+ BroadcastChannelPlus (br) ──► MessageEventPlus (e) ──► e.ports+
87
+ ```
88
+
89
+ #### 3. WebSocketPort (WebSocket)
90
+
91
+ ```
92
+ WebSocketPort ──► MessageEventPlus (e) ──► e.ports+
93
+ ```
94
+
95
+ ### (c) Result
96
+
97
+ **Port+** unifies the messaging model across all three and extends the **port interfaces** and **MessageEvent interface** for advanced use cases.
98
+
99
+ General mental model:
100
+
101
+ ```
102
+ port+ ──► MessageEventPlus ──► e.ports+
103
+ ```
104
+
105
+ Meaning: Port+ interfaces emit `MessageEventPlus`, which recursively exposes `e.ports` as Port+ interface.
106
+
107
+ ---
108
+
109
+ ## The Port+ API Overview
110
+
111
+ ### 1. Port-Level API
112
+
113
+ | API / Feature | Port+ | Msg. Ports | WS |
114
+ | :--------------------------------- | :--------------- | :---------------- | :------------ |
115
+ | `postMessage()` | ✓ (advanced) | ✓ (basic) | ✗ (`send()`) |
116
+ | `addEventListener()` / `onmessage` | ✓ | ✓ | ✓ |
117
+ | `close()` | ✓ | ✓ | ✓ |
118
+ | `readyState` | ✓ | ✗ | ✓ |
119
+ | `readyStateChange()` | ✓ | ✗ | ✗ |
120
+ | `postRequest()` | ✓ | ✗ | ✗ |
121
+ | `handleRequests()` | ✓ | ✗ | ✗ |
122
+ | `forwardPort()` | ✓ | ✗ | ✗ |
123
+ | `Live Objects`** | ✓ | ✗ | ✗ |
124
+
125
+ *In this table:*
126
+
127
+ * **Port+** → `MessagePortPlus`, `BroadcastChannelPlus`, `WebSocketPort`
128
+ * **Msg. Ports** → `MessagePort`, `BroadcastChannel`
129
+ * **WS** → `WebSocket`
130
+ * **`**`** → All-new concept
131
+
132
+ ### 2. Message-Level API
133
+
134
+ | API / Feature | Port+ | Msg. Event | WS |
135
+ | :--------------------------- | :----------------------------- | :---------------------------- | :--------------------- |
136
+ | `data` | ✓ (_Live Objects_ support) | ✓ (no _Live Objects_) | ✓ (typically string) |
137
+ | `type` | ✓ | ✓ | ✓ |
138
+ | `ports` | ✓ (Port+) | ✓** | ✗** |
139
+ | `preventDefault()` | ✓ | ✓ | ✗** |
140
+ | `defaultPrevented` | ✓ | ✓ | ✗** |
141
+ | `stopPropagation()` | ✓ | ✓ | ✗** |
142
+ | `stopImmediatePropagation()` | ✓ | ✓ | ✗** |
143
+ | `respondWith()` | ✓ | ✗ | ✗ |
144
+ | `eventID` | ✓ | ✗ | ✗ |
145
+ | `live` | ✓ | ✗ | ✗ |
146
+ | `forwarded` | ✓ | ✗ | ✗ |
147
+
148
+ *In this table:*
149
+
150
+ * **Port+** → `MessageEventPlus`
151
+ * **Msg. Event** → `MessageEvent`
152
+ * **WS** → `WebSocket`'s `MessageEvent`
153
+ * **`**`** → May be present, but may not be implemented
154
+
155
+ ---
156
+
157
+ ## Entry Points
158
+
159
+ The APIs below are the entry points to a Port+-based messaging system.
160
+
161
+ ```js
162
+ const ch = new MessageChannelPlus();
163
+ const br = new BroadcastChannelPlus('channel-name');
164
+ const soc = new WebSocketPort(url); // or new WebSocketPort(ws)
165
+ ```
166
+
167
+ Above, `WebSocketPort` also takes a `WebSocket` instance – letting you create a port from an existing WebSocket connection:
168
+
169
+ ```js
170
+ const ws = new WebSocket(url);
171
+ const port = new WebSocketPort(ws);
172
+ ```
173
+
174
+ On a WebSocket server, for example, you can do:
175
+
176
+ ```js
177
+ const wss = new WebSocketServer({ server });
178
+ wss.on('connection', (ws) => {
179
+ // The basic way
180
+ ws.send('something');
181
+
182
+ // The unified way
183
+ const port = new WebSocketPort(ws);
184
+ port.postMessage('something');
185
+ });
186
+ ```
187
+
188
+ Whatever the Port+ instance, it always has the same API and set of capabilities. For example, with `WebSocketPort` you get an `event.ports` implementation over web sockets.
189
+
190
+ ---
191
+
192
+ ## Capabilities
193
+
194
+ > **TODO**
195
+ > Live Objects
196
+ > Lifecycle APIs
197
+ > Request / Response Messaging
198
+ > Forwarding and Topologies
199
+
200
+ ---
201
+
202
+ ## License
203
+
204
+ MIT.
205
+
206
+ [npm-version-src]: https://img.shields.io/npm/v/@webqit/port-plus?style=flat&colorA=18181B&colorB=F0DB4F
207
+ [npm-version-href]: https://npmjs.com/package/@webqit/port-plus
208
+ [bundle-src]: https://img.shields.io/bundlephobia/minzip/@webqit/port-plus?style=flat&colorA=18181B&colorB=F0DB4F
209
+ [bundle-href]: https://bundlephobia.com/result?p=@webqit/port-plus
210
+ [license-src]: https://img.shields.io/github/license/webqit/port-plus.svg?style=flat&colorA=18181B&colorB=F0DB4F
211
+ [license-href]: https://github.com/webqit/port-plus/blob/master/LICENSE
@@ -0,0 +1,51 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <script src="main.js"></script>
7
+ </head>
8
+
9
+ <body>
10
+ <script type="module">
11
+
12
+ const t = new MessagePortPlus;
13
+
14
+ let m, q = 3;
15
+
16
+ if (q === 1) {
17
+ m = new MessageChannel;
18
+ } else if (q === 2) {
19
+ m = { port1: new BroadcastChannel('test'), port2: new BroadcastChannel('test') };
20
+ } else if (q === 3) {
21
+ m = new MessageChannelPlus({ postAwaitsOpen: true });
22
+ m.port1.__ = 1;
23
+ m.port2.__ = 2;
24
+ } else if (q === 4) {
25
+ m = { port0: new BroadcastChannelPlus('test', { clientServerMode: 'client', postAwaitsOpen: true }), port1: new BroadcastChannelPlus('test', { clientServerMode: 'client', postAwaitsOpen: true }), port2: new BroadcastChannelPlus('test', { clientServerMode: 'server', postAwaitsOpen: true }) };
26
+ m.port0.__ = 0;
27
+ m.port1.__ = 1;
28
+ m.port2.__ = 2;
29
+ console.log('____________________________________');
30
+ }
31
+
32
+ m.port0?.addEventListener('open', () => console.log('open0'));
33
+ m.port0?.addEventListener('close', () => console.log('close0'));
34
+
35
+ m.port1.addEventListener('open', () => console.log('open1'));
36
+ m.port1.addEventListener('close', () => console.log('close1'));
37
+
38
+ m.port2.addEventListener('open', () => console.log('open2'));
39
+ m.port2.addEventListener('close', () => console.log('close2'));
40
+
41
+ m.port1.addEventListener('message', (e) => console.log('message', e.data));
42
+ m.port2.postMessage('hello');
43
+
44
+ await new Promise((r) => setTimeout(r, 3000));
45
+ m.port1.close();
46
+ //m.port2.close();
47
+
48
+ </script>
49
+ </body>
50
+
51
+ </html>
package/dist/main.js ADDED
@@ -0,0 +1,2 @@
1
+ (()=>{var Je=Object.defineProperty;var de=(r,e)=>{for(var t in e)Je(r,t,{get:e[t],enumerable:!0})};var Le={};de(Le,{BroadcastChannelPlus:()=>ce,MessageChannelPlus:()=>le,MessageEventPlus:()=>M,MessagePortPlus:()=>E,RelayPort:()=>pe,StarPort:()=>Q,WebSocketPort:()=>me});function v(r){return!Array.isArray(r)&&typeof r=="object"&&r}function U(r){return typeof r}function T(r){return Array.isArray(r)}function H(r){return typeof r=="function"}function he(r){return r===null||r===""}function k(r){return arguments.length&&(r===void 0||typeof r>"u")}function b(r){return Array.isArray(r)||typeof r=="object"&&r||H(r)}function ge(r){return he(r)||k(r)||r===!1||r===0||b(r)&&!Object.keys(r).length}function q(r){return H(r)||r&&{}.toString.call(r)==="[object function]"}function oe(r){return r instanceof String||typeof r=="string"&&r!==null}function ye(r){return!oe(r)&&!k(r.length)}function $(r,...e){if(!r||!["object","function"].includes(typeof r))throw new Error("Argument #1 must be of type object");let t=r[Symbol.for("wq")];if(t||(t=new se,Object.defineProperty(r,Symbol.for("wq"),{value:t,enumerable:!1,configurable:!1,writable:!1})),!e.length)return t;let n,o;for(;n=e.shift();)(o=t)&&!(t=t.get(n))&&(t=new se,o.set(n,t));return t}var se=class extends Map{};var M=class extends Event{#e;get originalTarget(){return this.#e}#n;get eventID(){return this.#n}#r;get data(){return this.#r}#o;get live(){return this.#o}#a;get bubbles(){return this.#a}#f;get forwarded(){return this.#f}#s;get honourDoneMutationFlags(){return this.#s}#t=[];get ports(){return this.#t}constructor(e,{originalTarget:t=null,type:n="message",eventID:o,live:s=!1,honourDoneMutationFlags:c=!1,bubbles:f=!1,forwarded:a=!1,ports:i=[]}={}){if(n&&typeof n!="string")throw new TypeError("Where specified, wqEventOptions.type must be a string");if(super(n),this.#r=e,this.#e=t,this.#n=o,this.#o=s,this.#a=f,this.#f=a,this.#s=c,this.#t=i,this.#t.forEach(u=>E.upgradeInPlace(u)),b(this.#r)&&this.#o){if(typeof o!="string")throw new TypeError("eventID must be a non-empty string");Fe.call(t,this.#r,this.#n,{honourDoneMutationFlags:this.#s})}}#u=!1;get immediatePropagationStopped(){return this.#u}stopImmediatePropagation(){this.#u=!0,this.#i=!0,super.stopImmediatePropagation()}#i=!1;get propagationStopped(){return this.#i}stopPropagation(){this.#i=!0,super.stopPropagation()}#c=!1;get defaultPrevented(){return this.#c}preventDefault(){this.#c=!0,super.preventDefault()}respondWith(e,t=[]){for(let n of this.#t)n.postMessage(e,t);return!!this.#t.length}};var qe={};de(qe,{any:()=>ht,apply:()=>Se,batch:()=>je,construct:()=>Me,defineProperties:()=>xt,defineProperty:()=>ee,deleteProperties:()=>bt,deleteProperty:()=>te,get:()=>N,getOwnPropertyDescriptor:()=>ae,getOwnPropertyDescriptors:()=>yt,getPrototypeOf:()=>Pe,has:()=>fe,intercept:()=>gt,isExtensible:()=>Oe,map:()=>_t,observe:()=>De,ownKeys:()=>Ee,path:()=>mt,preventExtensions:()=>Te,reduce:()=>Ie,set:()=>W,setPrototypeOf:()=>Ae,subtree:()=>dt});function F(r,e=!0){return T(r)?r:!e&&v(r)?[r]:r!==!1&&r!==0&&ge(r)?[]:ye(r)?Array.prototype.slice.call(r):v(r)?Object.values(r):[r]}var w=(r,...e)=>$(r,"observerAPI",...e),G=(r,e)=>r instanceof Promise?r.then(e):e(r),ie={};var z=class{constructor(e,t){this.registry=e,Object.assign(this,{...t,target:e.target}),this.params.signal&&this.params.signal.addEventListener("abort",()=>this.remove())}remove(){return this.removed=!0,this.registry.removeRegistration(this)}};var X=class extends z{constructor(){super(...arguments),this.emit.currentRegistration=this,Object.defineProperty(this,"abortController",{value:new AbortController}),Object.defineProperty(this,"signal",{value:this.abortController.signal}),ie.setMaxListeners?.(0,this.signal)}remove(){this.abortController.abort(),super.remove()}fire(e){if(this.emit.recursionTarget&&!["inject","force-async","force-sync"].includes(this.params.recursions))return;let t=e,n=this.filter;if(n!==1/0&&(n=F(n,!1))&&(t=e.filter(s=>n.includes(s.key))),this.params.diff&&(t=t.filter(s=>s.type!=="set"||s.value!==s.oldValue)),!t.length)return;if(["inject","defer"].includes(this.params.recursions)){if(this.emit.recursionTarget){this.emit.recursionTarget.push(...t);return}this.emit.recursionTarget=this.params.recursions==="inject"?t:[]}let o=this.filter===1/0||Array.isArray(this.filter)?this.emit(t,this):this.emit(t[0],this);return G(o,s=>{let c=this.emit.recursionTarget;return delete this.emit.recursionTarget,this.params.recursions==="defer"&&c?.length?this.emit.currentRegistration.fire(c):s})}};var B=class{constructor(e){this.target=e,this.entries=[]}addRegistration(e){return this.entries.push(e),e}removeRegistration(e){this.entries=this.entries.filter(t=>t!==e)}static _getInstance(e,t,n=!0,o=this.__namespace){if(!b(t))throw new Error(`Subject must be of type object; "${U(t)}" given!`);let s=this;return o&&w(globalThis,"observerAPI","namespaces").has(e+"-"+o)&&(s=w(globalThis,"observerAPI","namespaces").get(e+"-"+o),e+="-"+o),!w(t,"registry").has(e)&&n&&w(t,"registry").set(e,new s(t)),w(t,"registry").get(e)}static _namespace(e,t,n=null){if(e+="-"+t,arguments.length===2)return w(globalThis,"observerAPI","namespaces").get(e);if(!(n.prototype instanceof this))throw new Error(`The implementation of the namespace ${this.name}.${t} must be a subclass of ${this.name}.`);w(globalThis,"observerAPI","namespaces").set(e,n),n.__namespace=t}};var O=class{constructor(e,t){if(this.target=e,!t.operation)throw new Error("Descriptor operation must be given in definition!");Object.assign(this,t)}};var C=class extends B{static getInstance(e,t=!0,n=null){return super._getInstance("listeners",...arguments)}static namespace(e,t=null){return super._namespace("listeners",...arguments)}constructor(e){super(e),this.batches=[]}addRegistration(e,t,n){return super.addRegistration(new X(this,{filter:e,emit:t,params:n}))}emit(e,{eventsArePropertyDescriptors:t=!1,eventIsArrayMethodDescriptor:n=!1}={}){if(this.batches.length){let o=this.batches[0].params.arrayMethodName;this.batches[0].snapshots.push({events:[...e],arrayMethodName:o,eventsArePropertyDescriptors:t,eventIsArrayMethodDescriptor:n});return}this.$emit(this.entries,[{events:e,eventsArePropertyDescriptors:t,eventIsArrayMethodDescriptor:n}])}$emit(e,t){let n=0,o=0,s=0;for(let u of e)n+=1,u.params.withPropertyDescriptors&&(o+=1),u.params.withArrayMethodDescriptors&&(s+=1);let c=[],f=[],a=[],i=[];for(let u of t){let l=u.arrayMethodName,p=u.eventsArePropertyDescriptors,g=u.eventIsArrayMethodDescriptor;for(let m of u.events)if(l&&(m.operation=l),o&&(s&&c.push(m),g||s!==n&&f.push(m)),o!==n){let h=m;if(p){let{target:_,type:x,...y}=m;h=new O(_,{type:"set",...y}),Object.defineProperty(h,"value","get"in y.value?{get:()=>y.value.get()}:{value:y.value.value}),y.oldValue&&Object.defineProperty(h,"oldValue","get"in y.oldValue?{get:()=>y.oldValue.get()}:{value:y.oldValue.value})}s&&a.push(h),g||s!==n&&i.push(h)}}for(let u of e)u.params.withPropertyDescriptors?u.params.withArrayMethodDescriptors?c.length&&u.fire(c):f.length&&u.fire(f):u.params.withArrayMethodDescriptors?a.length&&u.fire(a):i.length&&u.fire(i)}batch(e,t={}){this.batches.unshift({entries:[...this.entries],snapshots:[],params:t});let n=e();return G(n,o=>{let s=this.batches.shift();return s.snapshots.length&&this.$emit(s.entries,s.snapshots),o})}};var Y=class extends z{exec(e,t,n){return this.running||!this.traps[e.operation]?t(...Array.prototype.slice.call(arguments,2)):(this.running=!0,this.traps[e.operation](e,n,(...o)=>(this.running=!1,t(...o))))}};var L=class extends B{static getInstance(e,t=!0,n=null){return super._getInstance("traps",...arguments)}static namespace(e,t=null){return super._namespace("traps",...arguments)}addRegistration(e){return super.addRegistration(new Y(this,e))}emit(e,t=null){let n=this;return function o(s,...c){let f=n.entries[s];return f?f.exec(e,(...a)=>o(s+1,...a),...c):t?t(e,...c):c[0]}(0)}};var ve={};de(ve,{accessorize:()=>lt,proxy:()=>be,unaccessorize:()=>pt,unproxy:()=>Z});var Be=Symbol("wqOriginal");function lt(r,e,t={}){r=we(r);let n=w(r,"accessorizedProps");function o(a){let i,u=r;do i=Object.getOwnPropertyDescriptor(u,a);while(!i&&(u=Object.getPrototypeOf(u)));return i?{proto:u,descriptor:i}:{descriptor:{value:void 0,configurable:!0,enumerable:!0,writable:!0}}}function s(a){if(n.has(a+""))return!0;let i=o(a);i.getValue=function(p=!1){return p?this.descriptor:this.descriptor.get?this.descriptor.get():this.descriptor.value},i.setValue=function(p,g=!1){if(this.dirty=!0,g){this.descriptor=p;return}return this.descriptor.set?this.descriptor.set(p)!==!1:(this.descriptor.value=p,!0)},i.intact=function(){let p=Object.getOwnPropertyDescriptor(r,a);return p?.get===l.get&&p?.set===l.set&&n.get(a+"")===this},i.restore=function(){return this.intact()?(this.proto&&this.proto!==r||!this.proto&&!this.dirty?delete r[a]:Object.defineProperty(r,a,this.descriptor),n.delete(a+""),!0):!1},n.set(isNaN(a)?a:parseInt(a),i);let{enumerable:u=!0}=i.descriptor,l={enumerable:u,configurable:!0};("value"in i.descriptor||i.descriptor.set)&&(l.set=function(p){return W(this,a,p,t)}),("value"in i.descriptor||i.descriptor.get)&&(l.get=function(){return N(this,a,t)});try{return Object.defineProperty(r,a,l),!0}catch{return n.delete(a+""),!1}}let f=(Array.isArray(e)?e:e===void 0?Object.keys(r):[e]).map(s);return e===void 0||Array.isArray(e)?f:f[0]}function pt(r,e,t={}){r=we(r);let n=w(r,"accessorizedProps");function o(f){return n.has(f+"")?n.get(f+"").restore():!0}let c=(Array.isArray(e)?e:e===void 0?Object.keys(r):[e]).map(o);return e===void 0||Array.isArray(e)?c:c[0]}function be(r,e={},t=void 0){let n=we(r);if(typeof e.membrane=="boolean")throw new Error("The params.membrane parameter cannot be of type boolean.");if(e.membrane&&w(n,"membraneRef").has(e.membrane))return w(n,"membraneRef").get(e.membrane);let o={apply:(f,a,i)=>Se(f,a,i,void 0,e),construct:(f,a,i=null)=>Me(f,a,i,e),defineProperty:(f,a,i)=>ee(f,a,i,e),deleteProperty:(f,a)=>te(f,a,e),get:(f,a,i=null)=>{if(a===Be)return n;let u={...e,receiver:i},l=N(f,a,u);return Array.isArray(f)&&typeof l=="function"&&!/^class\s?/.test(Function.prototype.toString.call(l))?be(l,{...e,arrayMethodName:a,membrane:i},t):e.chainable&&b(l)&&a!=="prototype"&&!(typeof l=="function"&&/^class\s?|\{\s\[native\scode\]\s\}$/.test(Function.prototype.toString.call(l)))?be(l,e,t):l},getOwnPropertyDescriptor:(f,a)=>ae(f,a,e),getPrototypeOf:f=>Pe(f,e),has:(f,a)=>fe(f,a,e),isExtensible:f=>Oe(f,e),ownKeys:f=>Ee(f,e),preventExtensions:f=>Te(f,e),set:(f,a,i,u=null)=>W(f,a,i,{...e,receiver:u}),setPrototypeOf:(f,a)=>Ae(f,a,e)},s=t?.(o)||o,c=new Proxy(n,s);return e.membrane&&w(n,"membraneRef").set(e.membrane,c),c}function Z(r){return r&&r[Be]||r}function we(r){if(!r||!b(r))throw new Error("Target must be of type object!");return Z(r)}var re=class extends Array{};function mt(...r){return new re(...r)}var V=class extends Array{};function dt(){return new V}function ht(){return 1/0}function Ie(r,e,t,n=s=>s,o={}){let s=e instanceof V;if(!(!s&&!e?.length))return function c(f,a,i,u){let l=u||a[i.level]instanceof V,p=l?1/0:a[i.level],g=l?!1:i.level===a.length-1;return f instanceof O&&f.operation!=="get"?i={...i,probe:"always"}:i.probe!=="always"&&(i={...i,probe:!g}),t(f,p,(m,...h)=>{let _=d=>{d instanceof O&&(d.path="key"in d?[d.key]:[],f instanceof O&&(d.path="key"in d?f.path.concat(d.key):f.path.slice(0),Object.defineProperty(d,"context",{get:()=>f,configurable:!0})))},x=h[0]||{},y=d=>{if(d instanceof O&&"argumentsList"in d)return;let A=j(d,!1);return G(A,S=>(d instanceof O?d.value=S:d=S,c(d,a,{...i,...x,keyInParent:d.key,level:i.level+1},l)))};if(ne(p)&&Array.isArray(m)){if(m.forEach(_),g)return n(m,...h);l&&m[0]instanceof O&&(m[0].operation!=="get"||o.asGet)&&n(m,...h);for(let d of m)y(d);return}return _(m),g?n(m,...h):y(m)},i)}(r,e.slice(0),{...o,level:0},s)}function De(r,e,t,n={}){let o=j(r,!n.level);if(q(arguments[1])&&([,t,n={}]=arguments,e=1/0),!q(t))throw new Error(`Handler must be a function; "${U(t)}" given!`);if(e instanceof re||e instanceof V)return Ie(o,e,De,t,n);if(n={...n,descripted:!0},delete n.live,!b(o))return n.probe&&N(o,e,t,n)||void 0;let s=We(o,e,t,n);return n.probe?N(o,e,s,n):s()}function gt(r,e,t={}){let n=j(r);return v(e)||([,,,t={}]=arguments,e={[arguments[1]]:arguments[2]}),L.getInstance(n,!0,t.namespace).addRegistration({traps:e,params:t})}function ae(r,e,t=o=>o,n={}){return I(r,"getOwnPropertyDescriptor",{key:e},t,n)}function yt(r,e,t=o=>o,n={}){return I(r,"getOwnPropertyDescriptors",{key:e},t,n)}function Pe(r,e=n=>n,t={}){return I(r,"getPrototypeOf",{},e,t)}function Oe(r,e=n=>n,t={}){return I(r,"isExtensible",{},e,t)}function Ee(r,e=n=>n,t={}){return I(r,"ownKeys",{},e,t)}function fe(r,e,t=o=>o,n={}){return I(r,"has",{key:e},t,n)}function N(r,e,t=o=>o,n={}){let o,s=j(r,!n.level);return v(t)?[n,t]=[t,c=>c]:n.live&&(o=!0),e instanceof re||e instanceof V?Ie(s,e,N,t,{...n,asGet:!0}):wt(s,e,c=>{let f=[...c];return function a(i,u,l){if(!u.length)return l(i);let p=u.shift();if(!["string","number","symbol"].includes(typeof p))throw new Error(`Property name/key ${p} invalid.`);function g(_,x=void 0){let y=S=>(_.value=S,a([...i,n.live||n.descripted?_:S],u,l));if(arguments.length>1)return y(x);if(!b(s))return y(s?.[_.key]);let d=w(s,"accessorizedProps",!1),A=d&&d.get(_.key);if(A&&A.intact())return y(A.getValue(n.withPropertyDescriptors));if(n.withPropertyDescriptors){let S=Object.getOwnPropertyDescriptor(s,_.key);return y(S)}return y(Reflect.get(s,_.key))}let m=new O(s,{type:"get",key:p,value:void 0,operation:"get",related:f});if(!b(s))return g(m);let h=L.getInstance(s,!1,n.namespace);return h?h.emit(m,g):g(m)}([],c.slice(0),a=>{let i=ne(e)?a:a[0];return o&&b(s)?We(s,e,t,n,r.key)(i):t(i)})},n)}function je(r,e,t={}){let n=j(r);return C.getInstance(n,!0,t.namespace).batch(e,t)}function _t(r,e,t={}){e=j(e),r=j(r);let n=(t.only||[]).slice(0),o=(t.except||[]).slice(0),s=Object.keys(t.spread?[...r]:r).map(i=>isNaN(i)?i:parseInt(i)),c=n.length?n.filter(i=>s.includes(i)):s.filter(i=>!o.includes(i)),f=i=>!Array.isArray(e)||isNaN(i)?i:i-o.filter(u=>u<i).length,a=i=>{let u=ae(r,i,t);"value"in u&&u.writable&&u.enumerable&&u.configurable?W(e,f(i),u.value,t):(u.enumerable||t.onlyEnumerable===!1)&&ee(e,i,{...u,configurable:!0},t)};return je(e,()=>{c.forEach(a)}),De(r,i=>{i.filter(u=>n.length?n.includes(u.key):!o.includes(u.key)).forEach(u=>{if(u.type==="delete")return te(e,f(u.key),t);if(u.type==="def"){(u.value.enumerable||t.onlyEnumerable===!1)&&ee(e,f(u.key),{...u.value,configurable:!0},t);return}a(u.key)})},{...t,withPropertyDescriptors:!0})}function W(r,e,t,n=c=>c,o={},s=!1){let c=j(r),f=[[e,t]];v(e)&&([,,n=i=>i,o={},s=!1]=arguments,f=Object.entries(e)),v(n)&&([s,o,n]=[typeof o=="boolean"?o:s,n,i=>i]);let a=f.map(([i])=>i);return function i(u,l,p){if(!l.length)return p(u);let[g,m]=l.shift();function h(x,y=void 0){let d=Ke=>(x.status=Ke,i(u.concat(x),l,p));if(arguments.length>1)return d(x,y);let A=w(c,"accessorizedProps",!1),S=A&&A.get(x.key);return x.type==="def"?(S&&!S.restore()&&d(!1),Object.defineProperty(c,x.key,x.value),d(!0)):S&&S.intact()?d(S.setValue(x.value)):d(Reflect.set(c,x.key,x.value))}function _(x,y){if(o.diff&&m===y)return i(u,l,p);let d=new O(c,{type:s?"def":"set",key:g,value:m,isUpdate:x,oldValue:y,related:[...a],operation:s?"defineProperty":"set",detail:o.detail}),A=L.getInstance(c,!1,o.namespace);return A?A.emit(d,h):h(d)}return fe(c,g,x=>{if(!x)return _(x);if(g==="length"&&Array.isArray(c)&&w(c).has("$length"))return _(!0,w(c).get("$length"));let y={...o,withPropertyDescriptors:s};return N(c,g,d=>_(x,d),y)},o)}([],f.slice(0),i=>{let u=C.getInstance(c,!1,o.namespace);return u&&u.emit(i,{eventsArePropertyDescriptors:!!s}),n(ne(e)?i.map(l=>l.status):i[0]?.status)})}function ee(r,e,t,n=s=>s,o={}){return W(r,e,t,n,o,!0)}function xt(r,e,t=o=>o,n={}){return W(r,e,t,n,!0)}function te(r,e,t=o=>o,n={}){let o=j(r);v(t)&&([n,t]=[t,f=>f]);let s=F(e,!1),c=[...s];return function f(a,i,u){if(!i.length)return u(a);let l=i.shift();function p(m,h=void 0){let _=d=>(m.status=d,f(a.concat(m),i,u));if(arguments.length>1)return _(m,h);let x=w(o,"accessorizedProps",!1),y=x&&x.get(m.key);return y&&!y.restore()&&_(!1),_(Reflect.deleteProperty(o,m.key))}function g(m){let h=new O(o,{type:"delete",key:l,oldValue:m,related:[...c],operation:"deleteProperty",detail:n.detail}),_=L.getInstance(o,!1,n.namespace);return _?_.emit(h,p):p(h)}return N(o,l,g,n)}([],s.slice(0),f=>{let a=C.getInstance(o,!1,n.namespace);return a&&a.emit(f),t(ne(e)?f.map(i=>i.status):f[0].status)})}function bt(r,e,t=o=>o,n={}){return te(...arguments)}function Me(r,e,t=null,n=s=>s,o={}){return I(r,"construct",arguments.length>2?{argumentsList:e,newTarget:t}:{argumentsList:e},n,o)}function Se(r,e,t,n=s=>s,o={}){let s=Z(e),c;if(Array.isArray(e)){if(o.arrayMethodName){let f=new O(s,{operation:o.arrayMethodName,argumentsList:t});C.getInstance(s,!1,o.namespace)?.emit([f],{eventIsArrayMethodDescriptor:!0})}w(s).set("$length",s.length),c=je(s,()=>I(r,"apply",{thisArgument:e,argumentsList:t},n,o),o),w(s).delete("$length")}else c=I(r,"apply",{thisArgument:s,argumentsList:t},n,o);return c}function Ae(r,e,t=o=>o,n={}){return I(r,"setPrototypeOf",{proto:e},t,n)}function Te(r,e=n=>n,t={}){return I(r,"preventExtensions",{},e,t)}function We(r,e,t,n={}){let o=new AbortController;ie.setMaxListeners?.(0,o.signal),n.signal&&n.signal.addEventListener("abort",()=>o.abort());let s={...n,signal:o.signal},c=C.getInstance(r,!0,s.namespace),f=new Map;return function a(i=[],u=null){let l,p,g;if(ne(e)){if(u){g=!0,p=u;for(let m of i)f.get(m.key)?.remove(),f.delete(m.key)}else p=c.addRegistration(e,a,s);l={signal:p.signal,childRegistrations:f}}else u?.remove(),p=c.addRegistration(e,a,s),l={signal:p.signal};if(s.childRegistrations&&s.keyInParent&&s.childRegistrations.set(s.keyInParent,p),arguments.length){let m=t(i,l);if(arguments.length>1)return m}return o}}function I(r,e,t={},n=s=>s,o={}){r=j(r),v(n)&&([o,n]=[n,a=>a]);function s(a,i){return arguments.length>1?n(i):n((Reflect[e]||Object[e])(r,...Object.values(t)))}let c=new O(r,{operation:e,...t}),f=L.getInstance(r,!1,o.namespace);return f?f.emit(c,s):s(c)}function ne(r){return r===1/0||Array.isArray(r)}function j(r,e=!0,t=!0){if((!r||!b(r))&&e)throw new Error(`Object must be of type object or array! "${U(r)}" given.`);return r instanceof O&&(r.type==="def"&&t?r=typeof r.value.get=="function"?r.value.get():r.value.value:r=r.value),r&&Z(r)}function wt(r,e,t,n={}){return e===1/0?n.level&&!b(r)?t([]):t(Object.entries(Object.getOwnPropertyDescriptors(r)).filter(([,o])=>o.writable!==!1&&!o.get&&!o.set).map(([o])=>o)):t(F(e,!1))}var vt={...qe,...ve},D=vt;var Pt=(r,...e)=>$(r,"port+",...e),R=r=>$(r,"port+","meta").get("options")||{},P=r=>$(r,"port+","meta"),Ve=["addEventListener","addRequestListener","postMessage","postRequest","dispatchEvent","forwardPort","start","readyStateChange","removeEventListener","close"],Ue=["options","readyState","onmessage","onmessageerror"],E=class extends He(EventTarget){constructor(e={}){super(),Pt(this,"meta").set("options",e)}static[Symbol.hasInstance](e){return Function.prototype[Symbol.hasInstance].call(this,e)?!0:Ve.every(t=>typeof e[t]=="function")||Ue.every(t=>t in e)}};function He(r){return class extends r{static upgradeInPlace(e){if(e instanceof E)return e;let t=this.prototype;for(let n of Ve){let o=e[n],s=t[n];o&&Object.defineProperty(e,`_${n}`,{value:o.bind(e),configurable:!0}),Object.defineProperty(e,n,{value:s.bind(e),configurable:!0})}for(let n of Ue){let o=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),n),s=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t),n);o&&Object.defineProperty(e,`_${n}`,{...o,configurable:!0}),Object.defineProperty(e,n,{...s,configurable:!0})}this.upgradeEvents(e)}static upgradeEvents(e,t=null){t||(t=e);let n=P(e);if(n.get("events+"))return;let o=P(t),s=R(t),c=J.call(t),f=K.call(t);e instanceof BroadcastChannel&&(s.clientServerMode==="server"?o.set("clients",new Set):s.clientServerMode==="client"&&o.set("client_id",`client-${(0|Math.random()*9e6).toString(36)}`));let a=l=>{if(l instanceof M)return;if(e===t&&l.stopImmediatePropagation?.(),l=this._hydrateMessage?.(t,l)||l,l.data.ping==="connect"&&typeof l.data?.[".wq"]?.eventID=="string"&&(!(e instanceof WebSocket)||!s.naturalOpen)){let h=!0;e instanceof BroadcastChannel&&(s.clientServerMode==="server"&&typeof l.data.id=="string"?(o.get("clients").add(l.data.id),h="server"):l.data.id==="server"&&o.has("client_id")&&(h=o.get("client_id"))),l.ports?.forEach(_=>_.postMessage(h)),o.set("remote.start.called",!0),t.start();return}if(l.data.ping==="disconnect"&&typeof l.data?.[".wq"]?.eventID=="string"){let h=()=>{o.set("remote.close.called",!0),t.close()};e instanceof BroadcastChannel?s.clientServerMode==="server"&&typeof l.data.id=="string"?(o.get("clients").delete(l.data.id),!o.get("clients").size&&s.autoClose&&!f.close.state&&h()):s.clientServerMode==="client"&&l.data.id==="server"&&h():e instanceof MessagePort&&h();return}let p=l.data,g={};typeof l.data?.[".wq"]?.eventID=="string"&&({message:p,".wq":g}=l.data);let m=new M(p,{originalTarget:e,...g,ports:l.ports});t.dispatchEvent(m)},i=l=>{e instanceof WebSocket&&s.naturalOpen&&!(l instanceof M)&&(o.set("remote.start.called",!0),t.start())},u=l=>{(e instanceof WebSocket||e instanceof MessagePort)&&!(l instanceof M)&&(o.set("remote.close.called",!0),t.close())};n.set("internal_call",!0),e.addEventListener("message",a),e.addEventListener("error",a),e.addEventListener("open",i),e.addEventListener("close",u),n.delete("internal_call"),n.set("events+",!0),c.add(()=>{e.removeEventListener("message",a),e.removeEventListener("error",a),e.removeEventListener("open",i),e.removeEventListener("close",u),n.set("events+",!1)})}get options(){return{...R(this)}}get onmessageerror(){return typeof super.onmessageerror<"u"?super.onmessageerror:typeof this._onmessageerror<"u"?this._onmessageerror:null}set onmessageerror(e){if(typeof super.onmessageerror<"u"){super.onmessageerror=e;return}if(e!==null&&typeof e!="function")throw new TypeError("onmessageerror must be a function");if(Object.getOwnPropertyDescriptor(this,"_onmessageerror")?.set){this._onmessageerror=e;return}this._onmessageerror&&this.removeEventListener("messageerror",this._onmessageerror),this.addEventListener("messageerror",e),this._onmessageerror=e}get onmessage(){return typeof super.onmessage<"u"?super.onmessage:typeof this._onmessage<"u"?this._onmessage:null}set onmessage(e){let t=P(this),n=R(this);if(!t.get("internal_call")&&n.autoStart&&this.start(),typeof super.onmessage<"u"){super.onmessage=e;return}if(e!==null&&typeof e!="function")throw new TypeError("onmessage must be a function");if(Object.getOwnPropertyDescriptor(this,"_onmessage")?.set){this._onmessage=e;return}this._onmessage&&this.removeEventListener("message",this._onmessage),this.addEventListener("message",e),this._onmessage=e}addEventListener(...e){let t=P(this),n=R(this);return!t.get("internal_call")&&n.autoStart&&this.start(),J.call(this).add(()=>{this._removeEventListener?this._removeEventListener(...e):super.removeEventListener(...e)}),this._addEventListener?this._addEventListener(...e):super.addEventListener(...e)}dispatchEvent(e){let t=this._dispatchEvent?this._dispatchEvent(e):super.dispatchEvent(e);return e instanceof M&&Ot.call(this,e),t}postMessage(e,t={}){let n=P(this),o=R(this);!n.get("internal_call")&&o.autoStart&&this.start();let s=K.call(this);s.messaging.state=!0,s.messaging.resolve();let c;if(!v(e?.[".wq"])){let{portOptions:a,wqOptions:{relayedFrom:i,...u}}=Ce.call(this,e,t);e={message:e,".wq":u},t=a,c=i}let f=()=>{this._postMessage?this._postMessage(e,t,c):super.postMessage(e,t)};o.postAwaitsOpen?s.open.promise.then(f):f()}addRequestListener(e,t,n={}){let o=async s=>{let c=await t(s);for(let f of s.ports)f.postMessage(c)};this.addEventListener(e,o,n)}postRequest(e,t,n={}){let o;v(t)&&(n={once:!0,...t},o=new Promise(u=>{t=u}));let s=new MessageChannel;this.constructor.upgradeEvents(s.port1),s.port1.start();let{signal:c=null,once:f=!1,transfer:a=[],...i}=n;return s.port1.addEventListener("message",u=>t(u),{signal:c,once:f}),c?.addEventListener("abort",()=>{s.port1.close(),s.port2.close()}),this.postMessage(e,{...i,transfer:[s.port2].concat(a)}),o}forwardPort(e,t,{resolveData:n=null,bidirectional:o=!1,namespace1:s=null,namespace2:c=null}={}){if(!(this instanceof E)||!(t instanceof E))throw new Error("Both ports must be instance of MessagePortPlus.");if(typeof e!="function"&&!(e=[].concat(e)).length)throw new Error("Event types must be specified.");let f=Ge.call(this),a={targetPort:t,eventTypes:e,options:{resolveData:n,namespace1:s,namespace2:c}};f.add(a);let i;return o&&(i=this.forwardPort.call(t,typeof e=="function"?e:e.filter(u=>u!=="close"),this,{resolveData:n,bidirectional:!1,namespace1:c,namespace2:s})),()=>{f.delete(a),i?.()}}get readyState(){let e=K.call(this);return e.close.state?"closed":e.open.state?"open":"connecting"}readyStateChange(e){if(!["open","messaging","error","close"].includes(e))throw new Error(`Invalid readyState query "${e}"`);return K.call(this)[e].promise}start(){let e=K.call(this);if(e.open.state)return;let t,n=()=>{if(e.open.state)return;e.open.state=!0,e.open.resolve();let i=new M(null,{type:"open"});this._dispatchEvent?this._dispatchEvent(i):super.dispatchEvent(i),t?.port1.close(),t?.port2.close()},o=P(this),s=R(this);if(o.get("remote.start.called")){n();return}if(o.get("start.called"))return;o.set("start.called",!0),this._start?this._start():super.start?.(),t=new MessageChannel,t.port1.onmessage=i=>{this instanceof BroadcastChannel&&s.clientServerMode==="server"&&typeof i.data=="string"&&o.get("clients").add(i.data),n()};let{wqOptions:c}=Ce.call(this),f=s.clientServerMode==="server"?"server":s.clientServerMode==="client"?o.get("client_id"):null,a={".wq":c,ping:"connect",id:f};this._postMessage?this._postMessage(a,{transfer:[t.port2]}):super.postMessage(a,{transfer:[t.port2]})}close(...e){let t=K.call(this);if(t.close.state)return;t.close.state=!0;let n=P(this),o=R(this);if(!n.get("remote.close.called")&&(this instanceof BroadcastChannel||this instanceof MessagePort)){let{wqOptions:c}=Ce.call(this),f=o.clientServerMode==="server"?"server":o.clientServerMode==="client"?n.get("client_id"):null,a={".wq":c,ping:"disconnect",id:f};this._postMessage?this._postMessage(a):super.postMessage(a)}this._close?this._close(...e):super.close(...e),t.close.resolve();let s=new M(null,{type:"close"});this._dispatchEvent?this._dispatchEvent(s):super.dispatchEvent(s),Et.call(this)}}}function ue(r){return class extends He(r){static _hydrateMessage(e,t){if(typeof t.data?.[".wq"]?.numPorts!="number"||typeof t.data[".wq"].eventID!="string")return t;let n=J.call(e),o=t.data[".wq"].numPorts;Object.defineProperty(t,"ports",{value:[],configurable:!0});for(let s=0;s<o;s++){let c=new MessageChannel;c.port1.start(),E.upgradeInPlace(c.port1),n.add(e.forwardPort("*",c.port1,{bidirectional:!0,namespace1:`${t.data[".wq"].eventID}:${s}`})),t.ports.push(c.port2),e.readyStateChange("close").then(()=>{c.port1.close(),c.port2.close()})}return t}_postMessage(e,t={}){let{transfer:n=[],...o}=t;if(typeof e?.[".wq"]?.eventID=="string"){let s=J.call(this),c=n.filter(a=>a instanceof MessagePort),f=c.length;for(let a=0;a<f;a++)E.upgradeInPlace(c[a]),s.add(this.forwardPort("*",c[a],{bidirectional:!0,namespace1:`${e[".wq"].eventID}:${a}`}));e[".wq"].numPorts=f}return this.__postMessage(e,o)}}}function Ot(r){if(r.propagationStopped)return;let e=P(this);e.get("parentNode")instanceof EventTarget&&(r.bubbles||e.get("parentNode")?.findPort?.(n=>n===this)&&r instanceof M)&&e.get("parentNode").dispatchEvent(r);let t=Ge.call(this);if(t.size&&r instanceof M){let{type:n,eventID:o,data:s,live:c,bubbles:f,ports:a}=r,i=new WeakSet;for(let{targetPort:u,eventTypes:l,options:p}of t){if(i.has(u))continue;let g=n;p.namespace1&&([,g]=new RegExp(`^${p.namespace1.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}:([^:]+)$`).exec(n)||[],!g)||!(typeof l=="function"?l(g,this,u,p):[].concat(l).find(h=>h===g||h==="*"))||(i.add(u),u.postMessage(p.resolveData?p.resolveData(s,this,u,p):s,{transfer:a,type:p.namespace2?`${p.namespace2}:${g}`:g,eventID:o,bubbles:f,live:c,forwarded:!0,relayedFrom:this}))}}}function J(){let r=P(this);return r.has("garbage_collection")||r.set("garbage_collection",new Set),r.get("garbage_collection")}function Ge(){let r=P(this);return r.has("downstream_registry")||r.set("downstream_registry",new Set),r.get("downstream_registry")}function K(){let r=P(this);if(!r.has("readystate_registry")){let e=t=>(t.promise=new Promise(n=>t.resolve=n),t);r.set("readystate_registry",{open:e({}),messaging:e({}),error:e({}),close:e({})})}return r.get("readystate_registry")}function Et(){let r=P(this);for(let e of r.get("garbage_collection")||[])e instanceof AbortController?e.abort():typeof e=="function"&&e();r.get("garbage_collection")?.clear(),r.get("downstream_registry")?.clear()}function Ce(r=void 0,e={}){if(Array.isArray(e))e={transfer:e};else if(!e||typeof e!="object")throw new TypeError("transferOrOptions must be an array or an object");let{type:t="message",eventID:n=null,live:o=!1,observing:s=!1,bubbles:c=!1,forwarded:f=!1,relayedFrom:a=null,signal:i=null,withArrayMethodDescriptors:u=!1,honourDoneMutationFlags:l=!1,...p}=e;return n||(n=`${t}-${(0|Math.random()*9e6).toString(36)}`),!s&&!f&&b(r)&&o&&!t?.endsWith(".mutate")&&(Mt.call(this,r,n,{signal:i,withArrayMethodDescriptors:u,honourDoneMutationFlags:l}),s=!0),{portOptions:p,wqOptions:{type:t,eventID:n,live:o,observing:s,honourDoneMutationFlags:l,bubbles:c,forwarded:f,relayedFrom:a}}}function Mt(r,e,{signal:t,withArrayMethodDescriptors:n=!0,honourDoneMutationFlags:o=!1}={}){if(!b(r))throw new TypeError("data must be a plain object and not a stream");if(typeof e!="string")throw new TypeError("eventID must be a non-empty string");let s=a=>{let i;n&&Array.isArray(a[0].target)&&!a[0].argumentsList&&!["set","defineProperty","deleteProperty"].includes(a[0].operation)||(this.postMessage(a.map(u=>(i=!i&&o&&u.detail?.done,{...u,target:void 0})),{type:`${e}.mutate`}),i&&c.abort())},c=D.observe(r,D.subtree(),s,{signal:t,withArrayMethodDescriptors:n});return J.call(this).add(c),c}function Fe(r,e,{signal:t,honourDoneMutationFlags:n=!1}={}){if(!b(r))throw new TypeError("data must be a plain object and not a stream");if(typeof e!="string")throw new TypeError("eventID must be a non-empty string");let o=f=>{if(!f.data?.length)return;let a;D.batch(r,()=>{for(let i of f.data){if(a=!a&&n&&i.detail?.done,i.argumentsList){let u=i.path.length?D.get(r,D.path(...i.path)):r;D.proxy(u)[i.operation](...i.argumentsList);continue}if(i.key!=="length"||["set","defineProperty","deleteProperty"].includes(i.operation)){let u=i.path.length===1?r:D.get(r,D.path(...i.path.slice(0,-1)));i.type==="delete"?D.deleteProperty(u,i.key):D.set(u,i.key,i.value)}}}),a&&s()};this.addEventListener(`${e}.mutate`,o,{signal:t});let s=()=>this.removeEventListener(`${e}.mutate`,o);return J.call(this).add(s),s}var ce=class extends ue(BroadcastChannel){constructor(e,{autoStart:t=!0,postAwaitsOpen:n=!1,clientServerMode:o=null,autoClose:s=!0}={}){super(e);let c=P(this);if(o&&!["server","client"].includes(o))throw new Error('clientServerMode must be "server" or "client"');c.set("options",{autoStart:t,postAwaitsOpen:n,clientServerMode:o,autoClose:s}),this.constructor.upgradeEvents(this)}__postMessage(e,t){BroadcastChannel.prototype.postMessage.call(this,e)}};var le=class extends MessageChannel{constructor({autoStart:e=!0,postAwaitsOpen:t=!1}={}){super(),[this.port1,this.port2].forEach((n,o)=>{P(n).set("options",{autoStart:e,postAwaitsOpen:t}),E.upgradeInPlace(n)})}};var Q=class extends E{#e=new Set;get length(){return this.#e.size}[Symbol.iterator](){return this.#e[Symbol.iterator]()}constructor({autoClose:e=!0}={}){super({autoStart:!1,postAwaitsOpen:!0,autoClose:e})}addPort(e,{enableBubbling:t=!0}={}){if(!(e instanceof E))throw new TypeError("Port must be a WQMessagePort instance.");if(this.#e.has(e))return;this.#e.add(e);let n=P(e);if(t){if(n.get("parentNode"))throw new TypeError("Incoming port already has a parent node.");n.set("parentNode",this)}e.readyStateChange("open").then(()=>this.start()),e.readyStateChange("close").then(o);let o=()=>{this.#e.has(e)&&(this.#e.delete(e),t&&n.get("parentNode")===this&&n.set("parentNode",null),this.#e.size===0&&R(this).autoClose&&this.close())};return o}findPort(e){for(let t of this.#e)if(e(t))return t}_postMessage(e,t,n){for(let o of this.#e)o!==n&&o.postMessage(e,t)}close(...e){for(let t of this.#e)t.close?.(...e)}};var pe=class extends Q{#e;get namespace(){return this.#e}constructor(e=null){super(),this.#e=e}addPort(e,{resolveData:t=null}={}){let n=(i,...u)=>t?t(i,...u):i,o=super.addPort(e,{enableBubbling:!1}),s=e.forwardPort("*",this,{bidirectional:!1,resolveData:n,namespace1:this.namespace,namespace2:this.namespace}),c=this.namespace&&`${this.namespace}:message`||"message";this.postMessage(n({event:"joins"},e,this),{type:c,relayedFrom:e});let f=()=>{this.postMessage(n({event:"leaves"},e,this),{type:c,relayedFrom:e})},a=()=>{f(),s(),o()};return e.readyStateChange("close").then(a),a}};var me=class extends ue(EventTarget){#e;constructor(e,{autoStart:t=!0,naturalOpen:n=!0,postAwaitsOpen:o=!1}={}){if(super(),this.#e=typeof e=="string"?new WebSocket(e):e,P(this).set("options",{autoStart:t,naturalOpen:n,postAwaitsOpen:o}),this.constructor.upgradeEvents(this.#e,this),n&&t&&this.#e.readyState===WebSocket.OPEN&&this.start(),this.#e.readyState===WebSocket.CLOSED)try{this.close()}catch{}}static _hydrateMessage(e,t){try{let n;if(typeof t.data=="string"&&v(n=JSON.parse(t.data))&&n[".wq"])return Object.defineProperty(t,"data",{value:n,configurable:!0}),super._hydrateMessage(e,t)}catch{}return t}__postMessage(e,t){this.#e.send(JSON.stringify(e),t)}};Object.assign(globalThis,Le);})();
2
+ //# sourceMappingURL=main.js.map