@webqit/port-plus 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.
package/README.md CHANGED
@@ -343,17 +343,11 @@ This allows state to be treated as persistent and reactive across a messaging bo
343
343
 
344
344
  ## Lifecycles
345
345
 
346
- Port+ introduces a unified lifecycle model for all messaging ports.
347
-
348
- The purpose of this lifecycle is to make *interaction readiness* explicit: to know when there is someone actively listening on the other end of a port, and when that condition begins and ends.
349
-
350
- Native web messaging APIs do not expose this information consistently. WebSockets expose transport connectivity, but not as to whether the remote side is actually interacting with the connection. Message ports and broadcast channels expose no readiness signal at all.
351
-
352
- Port+ addresses this by introducing an interaction-based lifecycle that applies uniformly across all port types.
346
+ This section covers important phases in the life of a Port+ instance. Understanding Port+ lifecycles is recommended for coordinating a Port+ messaging system.
353
347
 
354
348
  ### Lifecycle States
355
349
 
356
- Every Port+ instance transitions through four states in its lifetime:
350
+ Every Port+ instance transitions through different states in its lifetime:
357
351
 
358
352
  - **`connecting`**: The port is being established or is waiting for a connection to be established.
359
353
  - **`open`**: The port is ready for interaction.
@@ -377,80 +371,108 @@ await port.readyStateChange('close');
377
371
  > [!TIP]
378
372
  > The `readyState` property reflects the current state as a descriptive value (e.g. `'closed'`), while `readyStateChange()` listens for lifecycle transitions using event-style names (e.g. `'close'`).
379
373
 
380
- ### Ready-State by Interaction
374
+ ### Ready State by Default
381
375
 
382
- In Port+, being "open" for messages is a special phase in the lifecycle model. It is designed to guarantee the readiness of the other end of the port rather than the readiness of the port itself. A port transitions to this state when it has ascertained that the other end is ready to interact – not just alive. Messages sent at this point are more likely to be read by "someone".
376
+ Native web messaging APIs do not expose Ready State information consistently. While WebSockets expose transport-level Ready State (`connecting` -> `open` -> `closing` -> `closed`), MessagePorts and BroadcastChannels expose no readiness signal at all. Consequently, the default Ready State behaviour acorss port types is:
383
377
 
384
- To coordinate readiness across ports, each port is designed to self-signify readiness. The other end of the port receives this signal and acknowledges it. On a successful handshake, the port transitions to the `open` state; an `"open"` event is fired.
378
+ | Port Type | Ready State |
379
+ | --- | --- |
380
+ | **`WebSocket`** | `open` (when a connection is established) -> `messaging` (when the first message is sent) -> `close` (when the connection is closed) |
381
+ | **`MessagePort`** | `open` (immediately on instantiation) -> `messaging` (when the first message is sent) -> `close` (when the port is closed) |
382
+ | **`BroadcastChannel`** | `open` (immediately on instantiation) -> `messaging` (when the first message is sent) -> `close` (when the channel is closed) |
385
383
 
386
- But a port sends a readiness signal on an explicit condition: when `.start()` is called. This is how the calling code says "I'm ready to interact". But by default, ports have an `autoStart` option enabled, which gets the port to automatically start on first interaction with:
384
+ Here, only WebSockets can tell when the other side of the port is connected. For the others, the `open` state is really about the local end of the port itself, not about the remote end.
387
385
 
388
- + `addEventListener()` including higher level APIs that may trigger it
389
- + `postMessage()` – including, also, higher level APIs that may trigger it
386
+ Not knowing when the other side of the port is connected can be a limitation when multiple lifecycles need to be coordinated.
390
387
 
391
- This behaviour is called "Ready-State by Interaction". To switch from this mode to the explicit mode, set `autoStart` to `false`.
388
+ Port+ addresses this by introducing an explicit handshake phase that applies uniformly across all port types. You opt-in via `options.handshake`:
392
389
 
393
390
  ```js
394
391
  // An example for a BroadcastChannel port
395
- const port = new BroadcastChannel(channel, { autoStart: false });
392
+ const port = new BroadcastChannel(channel, { handshake: 1 });
393
+ ```
394
+
395
+ `options.handshake` is a number between `0` and `2`. When `0` – the default – no handshake takes place. When `1` or `2`, the port goes through the Port+ handshake phase.
396
+
397
+ ### Ready-State by Handshake
398
+
399
+ Port+'s handshake model is designed to guarantee the readiness of the remote end of the port – rather than the readiness of the local end itself. In this mode, the port only transitions to the `open` state after each end of the port has ascertained that the other end is ready to interact – not just alive. Messages sent at this point are more likely to be read by "someone".
400
+
401
+ Either end begins the process by sending a "readinnes" signal and waits for it to be acknoledged. If the other end also acknoledges with "readinnes", both ends transitions to the `open` state. Otherwise, the originating end waits for an explicit "readinnes" signal from the other end. The transition to the `open` state happens when both ends have successfully exchanged "readinnes".
402
+
403
+ A Port+ instance self-signifies "readiness" on exactly one condition: **when `.start()` is called**. It says by that: "I'm ready to interact, not just alive". The `options.handshake` parameter, however, lets you say that either explicitly or implicitly:
404
+
405
+ + When `1`, handshake begins on the first interaction with:
406
+ + `addEventListener()` – including higher level APIs that may trigger it
407
+ + `postMessage()` – including, also, higher level APIs that may trigger it
408
+ This behaviour is called Readinnes by Interaction.
409
+ + When `2`, handshake begins on an explicit call to `start()`
396
410
 
397
- port.start(); // Explicitly start the port
411
+ ```js
412
+ // An example for a BroadcastChannel port
413
+ const port = new BroadcastChannel(channel, { handshake: 1 });
414
+
415
+ port.addEventListener('message', handle); // Implicitly triggers start()
398
416
  ```
399
417
 
400
418
  ### Early Sends and Automatic Queuing
401
419
 
402
- Ports may be configured to implicitly await the `open` ready state before sending messages. In this mode, outbound messages are automatically queued until the port is ready.
420
+ Ports may be configured to implicitly await the `open` Ready State before sending messages. In this mode, outbound messages are automatically queued until the port is `open`.
403
421
 
404
422
  ```js
405
423
  // An example for a BroadcastChannel port
406
- const port = new BroadcastChannel(channel, { postAwaitsOpen: true });
424
+ const port = new BroadcastChannel(channel, { handshake: 1, postAwaitsOpen: true });
425
+
426
+ port.postMessage('hello');
427
+ // Queued until port is open.
428
+ // But { handshake: 1 } also lets postMessage() trigger the handshake process.
429
+ // Port is open – and messages flush – when the other end says "ready". Until then, queued
407
430
 
408
- port.postMessage('hello'); // queued
409
431
  await port.readyStateChange('open');
410
432
  // delivered by now
411
433
  ```
412
434
 
413
- This allows application code to send messages without coordinating startup order.
435
+ This allows application code to send messages with guaranteed coordination.
414
436
 
415
437
  ---
416
438
 
417
- ## Lifecycle by Port Type
439
+ ### Handshake by Port Type
418
440
 
419
- Each Port+ transport participates in the lifecycle model differently, while exposing the same observable states.
441
+ Each Port+ transport participates in the handshake model differently, while exposing the same observable states.
420
442
 
421
- ### MessagePortPlus via MessageChannelPlus
443
+ #### MessagePortPlus via MessageChannelPlus
422
444
 
423
- Message ports follow a symmetric, point-to-point handshake.
445
+ MessagePorts follow a symmetric, point-to-point handshake.
424
446
 
425
- Each side transitions to the `open` state when:
447
+ The port transitions to the `open` state when:
426
448
 
427
- 1. `.start()` is triggered explicitly or by interaction
428
- 2. an acknowledgment is recieved from the other side
449
+ 1. `.start()` is triggered explicitly or by interaction – on both ends
450
+ 2. peer acknowledgment is recieved
429
451
 
430
- The port is closed when either side is closed explicitly via `.close()`. Once either side closes, a signal is sent to the other side that closes it automatically. A `"close"` event is fired in each case, and ready state transitions to `closed`.
452
+ The port closes via an explicit `.close()` call on either side. Closure on one end automatically triggers closure on the other via a control message. Ready State transitions to `closed`.
431
453
 
432
- ### BroadcastChannelPlus
454
+ #### BroadcastChannelPlus
433
455
 
434
- Broadcast channels form a many-to-many port topology and require additional coordination to make readiness meaningful.
456
+ BroadcastChannels form a many-to-many port topology and require additional coordination to make readiness meaningful.
435
457
 
436
458
  Port+ supports two modes.
437
459
 
438
- #### (a) Default (Peer Mode)
460
+ ##### (a) Default (Peer Mode)
439
461
 
440
462
  In default mode, each participant becomes `open` when:
441
463
 
442
464
  1. `.start()` is triggered explicitly or by interaction
443
465
  2. an acknowledgment is recieved from at least one peer in the shared channel
444
466
 
445
- The port is closed when closed explicitly via `.close()`. A `"close"` event is fired in each case, and ready state transitions to `closed`.
467
+ A participant closes via an explicit `.close()` call. Its Ready State transitions to `closed`.
446
468
 
447
- #### (b) Client / Server Mode
469
+ ##### (b) Client / Server Mode
448
470
 
449
- While readiness is synchronized in the default mode – as with other port types – termination is not, due to the many-to-many topology.
471
+ While readiness is synchronized in the default mode – as with other port types – closure is not. A participant's closure has no effect on the others, by default.
450
472
 
451
- To support use cases that require synchronized termination across participants, Port+ additionally supports a client/server operational model for BroadcastChannels.
473
+ To support use cases that require synchronized closure across participants, Port+ introduces an optional client/server operational model for BroadcastChannels.
452
474
 
453
- The client/server model introduces explicit role semantics. Here, a specific participant is selected as the "control" port – the `server` – and the others are assigned a `client` role:
475
+ The client/server model establishes explicit role semantics. Here, one participant is assigned a `server` role – the "control plane" – and the others are assigned a `client` role:
454
476
 
455
477
  ```js
456
478
  const server = new BroadcastChannelPlus('room', {
@@ -469,69 +491,40 @@ const client2 = new BroadcastChannelPlus('room', {
469
491
  Both server and clients can join the channel in any order, but the server:
470
492
 
471
493
  + maintains a reference to all connected clients
472
- + automatically closes all clients when closed
473
- + automatically closes when all clients leave and its `autoClose` setting is enabled
494
+ + automatically triggers closure across all clients when closed
495
+ + automatically closes when all clients leave but if `options.autoClose` is enabled
474
496
 
475
497
  By contrast, a client:
476
498
 
477
499
  * closes alone when closed
478
500
 
479
- This mode exists because BroadcastChannel’s native semantics do not provide coordinated teardown or authoritative control. Without it, participants cannot reliably know when a session has ended. Client/server mode enables explicit ownership, deterministic shutdown, and presence-aware coordination over a many-to-many transport.
501
+ This mode exists because BroadcastChannel’s native semantics do not provide coordinated teardown or authoritative control. Without it, participants cannot reliably know when a session has ended. Client/server mode enables explicit ownership, deterministic shutdown, and presence-aware coordination over a many-to-many topology.
480
502
 
481
- ### WebSocketPort
503
+ #### WebSocketPort
482
504
 
483
- The lifecycle of a WebSocket connection is supported by a native ready state system. A webSocket's `.readyState` property, and related events, can already tell when the connection transitions between states. However, it does not solve the same problem as Port+'s Readiness by Interaction model.
505
+ WebSockets have a native Ready State system inspectable via an instance's `.readyState` property.
484
506
 
485
- Port+ therefore lets you have two lifecycle strategies over WebSocketPort:
486
-
487
- + Transport-driven lifecycle (default)
488
- + Interaction-driven lifecycle (opt-in)
489
-
490
- By default, Port+ lets the WebSocket’s native lifecycle be the authoritative lifecycle.
507
+ By default, Port+ lets the WebSocket’s native Ready State be the authoritative Ready State.
491
508
 
492
509
  In this mode:
493
510
 
494
- * WebSocketPort's `open` and `closed` states are based on the WebSocket's native ready states
495
- * no handshake control messages are exchanged
511
+ * The WebSocketPort's `open` and `closed` states are based on the WebSocket's native `open` and `closed` states
512
+ * no handshake takes place
496
513
  * readiness is assumed once the socket opens
497
514
 
498
- #### Explicit Handshake Mode
499
-
500
- To enable interaction-based readiness, WebSocketPort can opt out of native ready states. This is controlled by the `naturalOpen` flag:
515
+ On choosing the explicit handshake model via `options.handshake`, the `open` state is determined differently.
501
516
 
502
517
  ```js
503
- const port = new WebSocketPort(ws, { naturalOpen: false });
518
+ const port = new WebSocketPort(ws, { handshake: 1 });
504
519
  ```
505
520
 
506
521
  In this mode, each side transitions to the `open` state when:
507
522
 
508
- 1. `.start()` is triggered explicitly or by interaction
509
- 2. an acknowledgment is recieved from the other side
523
+ 1. `.start()` is triggered explicitly or by interaction – on both ends
524
+ 2. peer acknowledgment is recieved
510
525
 
511
526
  This allows WebSocketPort to behave identically to MessagePortPlus and BroadcastChannelPlus with respect to readiness and cleanup.
512
527
 
513
- ### Lifecycle Inheritance
514
-
515
- Ports created via `port.channel()` and ports exposed via `event.ports` inherit:
516
-
517
- * `autoStart`
518
- * `postAwaitsOpen`
519
-
520
- from their parent port.
521
-
522
- These ports follow a symmetric, point-to-point lifecycle. Closing either side closes the other.
523
-
524
- ### Practical Use
525
-
526
- The lifecycle API enables:
527
-
528
- * safe startup sequencing
529
- * early message queuing without race conditions
530
- * deterministic teardown and cleanup
531
- * consistent readiness checks across transports
532
-
533
- Port+ makes interaction readiness explicit, observable, and uniform across all messaging primitives.
534
-
535
528
  ---
536
529
 
537
530
  ## Composition and Topology
@@ -580,7 +573,9 @@ star.addEventListener('message', (e) => {
580
573
 
581
574
  ##### Outbound (Fan-Out)
582
575
 
583
- A `.postMessage()` call on the star port is a `.postMessage()` call to all connected ports:
576
+ A `.start()` call on the Star Port is a `.start()` call on all connected ports.
577
+ A `.close()` call on the Star Port is a `.close()` call on all connected ports.
578
+ A `.postMessage()` call on the Star Port is a `.postMessage()` call on all connected ports.
584
579
 
585
580
  ```js
586
581
  star.postMessage(data);
@@ -590,9 +585,16 @@ This makes `StarPort` a true proxy: a single observable endpoint over many indep
590
585
 
591
586
  #### Lifecycle Behavior
592
587
 
593
- * A star port transitions to the `open` ready state when the first child port is added
594
- * Closed ports are removed automatically
595
- * A star port transitions to the `closed` ready state when the last child port is removed and `autoClose` is enabled
588
+ A Star Port automatically transitions to the `open` state by default. But when `options.handshake` is enabled, its Ready State is controlled by that of its child ports:
589
+
590
+ * transitions to the `open` state when at least a child port exists and has Ready State `open`
591
+ * transitions to the `closed` state when the last child closes or is removed – but if `options.autoClose` is enabled
592
+
593
+ Regardless of `options.handshake`:
594
+
595
+ + Closed ports are removed automatically.
596
+ + Child ports added after `.start()` are automatically started.
597
+ + Attempting to add a child port after `.close()` fails with an error.
596
598
 
597
599
  #### Typical Uses
598
600
 
@@ -604,7 +606,7 @@ This makes `StarPort` a true proxy: a single observable endpoint over many indep
604
606
 
605
607
  A `RelayPort` is a **router** that forwards messages *between sibling ports*.
606
608
 
607
- It is an extension of `StarPort` and inherits all of its properties, methods, and behaviors.
609
+ It is an extension of `StarPort` and inherits all of its properties, methods, and lifecycle behavior.
608
610
 
609
611
  ```js
610
612
  const relay = new RelayPort('room');
@@ -631,17 +633,11 @@ This creates peer-to-peer fan-out.
631
633
 
632
634
  ##### Outbound Broadcast
633
635
 
634
- As with a star port, a `.postMessage()` call on the relay port is a `.postMessage()` call to all connected ports:
635
-
636
- ```js
637
- relay.postMessage(data);
638
- ```
639
-
640
- `RelayPort` has identical outbound behavior to `StarPort`.
636
+ As with the Star Port, a `.postMessage()` call on the relay port is a `.postMessage()` call to all connected ports.
641
637
 
642
638
  ##### Join / Leave Signaling
643
639
 
644
- When a port joins (via `relay.addPort()`) or leaves (via `relay.removePort()` or via port close), synthetic join/leave messages are routed to peers.
640
+ When a port joins (via `relay.addPort()`) or leaves (via `relay.removePort()` or via port closure), a synthetic join/leave message is routed to peers.
645
641
 
646
642
  This enables presence-aware systems (e.g. chat rooms).
647
643
 
@@ -823,7 +819,6 @@ port.addEventListener('message', (e) => {
823
819
  Reply ports:
824
820
 
825
821
  * form a symmetric 1:1 connection
826
- * inherit lifecycle settings from their parent port
827
822
  * close automatically when either side closes
828
823
 
829
824
  Use reply ports when:
@@ -910,21 +905,21 @@ All Port+ implementations – `MessagePortPlus`, `BroadcastChannelPlus`, `WebSoc
910
905
 
911
906
  ```js
912
907
  new MessageChannelPlus({
913
- autoStart?: boolean,
908
+ handshake?: number,
914
909
  postAwaitsOpen?: boolean
915
910
  });
916
911
  ```
917
912
 
918
913
  | Option | Default | Description |
919
914
  | ---------------- | ------- | ----------------------------------------------------- |
920
- | `autoStart` | `true` | Automatically initiate handshake on first interaction |
915
+ | `handshake` | `0` | Conduct a handshake process to coordinate Ready State |
921
916
  | `postAwaitsOpen` | `false` | Queue messages until the port is `open` |
922
917
 
923
918
  #### `BroadcastChannelPlus`
924
919
 
925
920
  ```js
926
921
  new BroadcastChannelPlus(name, {
927
- autoStart?: boolean,
922
+ handshake?: number,
928
923
  postAwaitsOpen?: boolean,
929
924
  clientServerMode?: 'server' | 'client' | null,
930
925
  autoClose?: boolean
@@ -933,32 +928,30 @@ new BroadcastChannelPlus(name, {
933
928
 
934
929
  | Option | Default | Description |
935
930
  | ------------------ | ------- | --------------------------------------------- |
936
- | `autoStart` | `true` | Begin handshake on first interaction |
931
+ | `handshake` | `0` | Conduct a handshake process to coordinate Ready State |
937
932
  | `postAwaitsOpen` | `false` | Queue messages until readiness |
938
933
  | `clientServerMode` | `null` | Can be one of `'server'`, `'client'` or `null` |
939
- | `autoClose` | `true` | Auto-close server when all clients disconnect |
934
+ | `autoClose` | `false` | Auto-close server when all clients disconnect |
940
935
 
941
936
  #### `WebSocketPort`
942
937
 
943
938
  ```js
944
939
  new WebSocketPort(wsOrUrl, {
945
- autoStart?: boolean,
946
- naturalOpen?: boolean,
940
+ handshake?: number,
947
941
  postAwaitsOpen?: boolean
948
942
  });
949
943
  ```
950
944
 
951
945
  | Option | Default | Description |
952
946
  | ---------------- | ------- | ------------------------------------ |
953
- | `autoStart` | `true` | Begin handshake on first interaction |
954
- | `naturalOpen` | `true` | Use WebSocket transport readiness instead of Port+ interaction-based ready state |
947
+ | `handshake` | `0` | Conduct a handshake process to coordinate Ready State |
955
948
  | `postAwaitsOpen` | `false` | Queue messages until readiness |
956
949
 
957
950
  #### `StarPort`
958
951
 
959
952
  ```js
960
953
  new StarPort({
961
- autoStart?: boolean,
954
+ handshake?: number,
962
955
  postAwaitsOpen?: boolean,
963
956
  autoClose?: boolean
964
957
  });
@@ -966,15 +959,15 @@ new StarPort({
966
959
 
967
960
  | Option | Default | Description |
968
961
  | ---------------- | ------- | ------------------------------------ |
969
- | `autoStart` | `true` | Igonred for self. Inherited by `.channel()` ports |
962
+ | `handshake` | `0` | Conduct a handshake process to coordinate Ready State |
970
963
  | `postAwaitsOpen` | `false` | Queue messages until readiness |
971
- | `autoClose` | `true` | Auto-close server when all clients disconnect |
964
+ | `autoClose` | `false` | Auto-close when all clients close or are removed |
972
965
 
973
966
  #### `RelayPort`
974
967
 
975
968
  ```js
976
969
  new RelayPort(channelSpec?, {
977
- autoStart?: boolean,
970
+ handshake?: number,
978
971
  postAwaitsOpen?: boolean,
979
972
  autoClose?: boolean
980
973
  });
@@ -982,9 +975,9 @@ new RelayPort(channelSpec?, {
982
975
 
983
976
  | Option | Default | Description |
984
977
  | ---------------- | ------- | ------------------------------------ |
985
- | `autoStart` | `true` | Igonred for self. Inherited by `.channel()` ports |
978
+ | `handshake` | `0` | Conduct a handshake process to coordinate Ready State |
986
979
  | `postAwaitsOpen` | `false` | Queue messages until readiness |
987
- | `autoClose` | `true` | Auto-close server when all clients disconnect |
980
+ | `autoClose` | `false` | Auto-close when all clients close or are removed |
988
981
 
989
982
  ### Lifecycle API
990
983
 
@@ -997,7 +990,7 @@ new RelayPort(channelSpec?, {
997
990
 
998
991
  Explicitly initiates the interaction handshake.
999
992
 
1000
- * Required when `autoStart` is `false`
993
+ * Required when `options.handshake` is `2`
1001
994
  * Signals readiness to the remote side
1002
995
 
1003
996
  #### `close(): void`
@@ -1091,13 +1084,6 @@ Creates a logical sub-port scoped to a message namespace.
1091
1084
  * Tags outbound messages
1092
1085
  * Shares lifecycle with the parent port
1093
1086
 
1094
- Ports created via `port.channel()` (and ports exposed via `event.ports`) inherit:
1095
-
1096
- * `autoStart`
1097
- * `postAwaitsOpen`
1098
-
1099
- from their parent port.
1100
-
1101
1087
  #### `relay(config): () => void`
1102
1088
 
1103
1089
  Establishes explicit routing between ports. `config` is:
@@ -1140,7 +1126,7 @@ All message events dispatched by Port+ ports.
1140
1126
  | `data` | any | Message payload |
1141
1127
  | `type` | string | Event type |
1142
1128
  | `eventID` | string | Stable message identifier |
1143
- | `ports` | `MessagePortPlus[]` | Reply ports. Each instance inherits `autoStart` and `postAwaitsOpen`. Closing either side closes the other. |
1129
+ | `ports` | `MessagePortPlus[]` | Reply ports. |
1144
1130
  | `live` | boolean | Indicates a live object payload |
1145
1131
  | `relayedFrom` | `MessagePortPlus` | Originating port (if routed) |
1146
1132
 
package/dist/main.js CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{var Ye=Object.defineProperty;var he=(r,e)=>{for(var t in e)Ye(r,t,{get:e[t],enumerable:!0})};var Ne={};he(Ne,{BroadcastChannelPlus:()=>pe,MessageChannelPlus:()=>me,MessageEventPlus:()=>M,MessagePortPlus:()=>O,Observer:()=>Ve,RelayPort:()=>de,StarPort:()=>X,WebSocketPort:()=>Q});function w(r){return!Array.isArray(r)&&typeof r=="object"&&r}function G(r){return typeof r}function T(r){return Array.isArray(r)}function K(r){return typeof r=="function"}function ge(r){return r===null||r===""}function z(r){return arguments.length&&(r===void 0||typeof r>"u")}function b(r){return Array.isArray(r)||typeof r=="object"&&r||K(r)}function ye(r){return ge(r)||z(r)||r===!1||r===0||b(r)&&!Object.keys(r).length}function L(r){return K(r)||r&&{}.toString.call(r)==="[object function]"}function se(r){return r instanceof String||typeof r=="string"&&r!==null}function _e(r){return!se(r)&&!z(r.length)}function F(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 ie,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 ie,o.set(n,t));return t}var ie=class extends Map{};var M=class extends MessageEvent{#e;get originalTarget(){return this.#e}#t;get eventID(){return this.#t}#n;get data(){return this.#n}#o;get live(){return this.#o}#a;get bubbles(){return this.#a}#f;get forwarded(){return this.#f}#s;get honourDoneMutationFlags(){return this.#s}#r=[];get ports(){return this.#r}constructor(e,{originalTarget:t=null,type:n="message",eventID:o,live:s=!1,honourDoneMutationFlags:u=!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");super(n),this.#n=e,this.#e=t,this.#t=o,this.#o=s,this.#a=f,this.#f=a,this.#s=u,this.#r=i;let l=this.#e&&D(this.#e)||{};if(this.#r.forEach(c=>O.upgradeInPlace(c,{autoStart:l.autoStart,postAwaitsOpen:l.postAwaitsOpen})),b(this.#n)&&this.#o){if(typeof o!="string")throw new TypeError("eventID must be a non-empty string");xe.call(t,this.#n,this.#t,{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()}#l=!1;get defaultPrevented(){return this.#l}preventDefault(){this.#l=!0,super.preventDefault()}respondWith(e,t=[]){for(let n of this.#r)n.postMessage(e,t);return!!this.#r.length}};var Le={};he(Le,{any:()=>_t,apply:()=>Ie,batch:()=>Ce,construct:()=>Ae,defineProperties:()=>vt,defineProperty:()=>te,deleteProperties:()=>Pt,deleteProperty:()=>re,get:()=>$,getOwnPropertyDescriptor:()=>fe,getOwnPropertyDescriptors:()=>xt,getPrototypeOf:()=>Ee,has:()=>ue,intercept:()=>bt,isExtensible:()=>Me,map:()=>wt,observe:()=>qe,ownKeys:()=>Se,path:()=>gt,preventExtensions:()=>je,reduce:()=>De,set:()=>V,setPrototypeOf:()=>Te,subtree:()=>yt});function k(r,e=!0){return T(r)?r:!e&&w(r)?[r]:r!==!1&&r!==0&&ye(r)?[]:_e(r)?Array.prototype.slice.call(r):w(r)?Object.values(r):[r]}var v=(r,...e)=>F(r,"observerAPI",...e),J=(r,e)=>r instanceof Promise?r.then(e):e(r),ae={};var B=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 Y=class extends B{constructor(){super(...arguments),this.emit.currentRegistration=this,Object.defineProperty(this,"abortController",{value:new AbortController}),Object.defineProperty(this,"signal",{value:this.abortController.signal}),ae.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=k(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 J(o,s=>{let u=this.emit.recursionTarget;return delete this.emit.recursionTarget,this.params.recursions==="defer"&&u?.length?this.emit.currentRegistration.fire(u):s})}};var W=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; "${G(t)}" given!`);let s=this;return o&&v(globalThis,"observerAPI","namespaces").has(e+"-"+o)&&(s=v(globalThis,"observerAPI","namespaces").get(e+"-"+o),e+="-"+o),!v(t,"registry").has(e)&&n&&v(t,"registry").set(e,new s(t)),v(t,"registry").get(e)}static _namespace(e,t,n=null){if(e+="-"+t,arguments.length===2)return v(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}.`);v(globalThis,"observerAPI","namespaces").set(e,n),n.__namespace=t}};var P=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 N=class extends W{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 Y(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 l of e)n+=1,l.params.withPropertyDescriptors&&(o+=1),l.params.withArrayMethodDescriptors&&(s+=1);let u=[],f=[],a=[],i=[];for(let l of t){let c=l.arrayMethodName,p=l.eventsArePropertyDescriptors,g=l.eventIsArrayMethodDescriptor;for(let m of l.events)if(c&&(m.operation=c),o&&(s&&u.push(m),g||s!==n&&f.push(m)),o!==n){let h=m;if(p){let{target:y,type:x,..._}=m;h=new P(y,{type:"set",..._}),Object.defineProperty(h,"value","get"in _.value?{get:()=>_.value.get()}:{value:_.value.value}),_.oldValue&&Object.defineProperty(h,"oldValue","get"in _.oldValue?{get:()=>_.oldValue.get()}:{value:_.oldValue.value})}s&&a.push(h),g||s!==n&&i.push(h)}}for(let l of e)l.params.withPropertyDescriptors?l.params.withArrayMethodDescriptors?u.length&&l.fire(u):f.length&&l.fire(f):l.params.withArrayMethodDescriptors?a.length&&l.fire(a):i.length&&l.fire(i)}batch(e,t={}){this.batches.unshift({entries:[...this.entries],snapshots:[],params:t});let n=e();return J(n,o=>{let s=this.batches.shift();return s.snapshots.length&&this.$emit(s.entries,s.snapshots),o})}};var Z=class extends B{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 R=class extends W{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 Z(this,e))}emit(e,t=null){let n=this;return function o(s,...u){let f=n.entries[s];return f?f.exec(e,(...a)=>o(s+1,...a),...u):t?t(e,...u):u[0]}(0)}};var Oe={};he(Oe,{accessorize:()=>dt,proxy:()=>ve,unaccessorize:()=>ht,unproxy:()=>ee});var Be=Symbol("wqOriginal");function dt(r,e,t={}){r=Pe(r);let n=v(r,"accessorizedProps");function o(a){let i,l=r;do i=Object.getOwnPropertyDescriptor(l,a);while(!i&&(l=Object.getPrototypeOf(l)));return i?{proto:l,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===c.get&&p?.set===c.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:l=!0}=i.descriptor,c={enumerable:l,configurable:!0};("value"in i.descriptor||i.descriptor.set)&&(c.set=function(p){return V(this,a,p,t)}),("value"in i.descriptor||i.descriptor.get)&&(c.get=function(){return $(this,a,t)});try{return Object.defineProperty(r,a,c),!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 ht(r,e,t={}){r=Pe(r);let n=v(r,"accessorizedProps");function o(f){return n.has(f+"")?n.get(f+"").restore():!0}let u=(Array.isArray(e)?e:e===void 0?Object.keys(r):[e]).map(o);return e===void 0||Array.isArray(e)?u:u[0]}function ve(r,e={},t=void 0){let n=Pe(r);if(typeof e.membrane=="boolean")throw new Error("The params.membrane parameter cannot be of type boolean.");if(e.membrane&&v(n,"membraneRef").has(e.membrane))return v(n,"membraneRef").get(e.membrane);let o={apply:(f,a,i)=>Ie(f,a,i,void 0,e),construct:(f,a,i=null)=>Ae(f,a,i,e),defineProperty:(f,a,i)=>te(f,a,i,e),deleteProperty:(f,a)=>re(f,a,e),get:(f,a,i=null)=>{if(a===Be)return n;let l={...e,receiver:i},c=$(f,a,l);return Array.isArray(f)&&typeof c=="function"&&!/^class\s?/.test(Function.prototype.toString.call(c))?ve(c,{...e,arrayMethodName:a,membrane:i},t):e.chainable&&b(c)&&a!=="prototype"&&!(typeof c=="function"&&/^class\s?|\{\s\[native\scode\]\s\}$/.test(Function.prototype.toString.call(c)))?ve(c,e,t):c},getOwnPropertyDescriptor:(f,a)=>fe(f,a,e),getPrototypeOf:f=>Ee(f,e),has:(f,a)=>ue(f,a,e),isExtensible:f=>Me(f,e),ownKeys:f=>Se(f,e),preventExtensions:f=>je(f,e),set:(f,a,i,l=null)=>V(f,a,i,{...e,receiver:l}),setPrototypeOf:(f,a)=>Te(f,a,e)},s=t?.(o)||o,u=new Proxy(n,s);return e.membrane&&v(n,"membraneRef").set(e.membrane,u),u}function ee(r){return r&&r[Be]||r}function Pe(r){if(!r||!b(r))throw new Error("Target must be of type object!");return ee(r)}var ne=class extends Array{};function gt(...r){return new ne(...r)}var U=class extends Array{};function yt(){return new U}function _t(){return 1/0}function De(r,e,t,n=s=>s,o={}){let s=e instanceof U;if(!(!s&&!e?.length))return function u(f,a,i,l){let c=l||a[i.level]instanceof U,p=c?1/0:a[i.level],g=c?!1:i.level===a.length-1;return f instanceof P&&f.operation!=="get"?i={...i,probe:"always"}:i.probe!=="always"&&(i={...i,probe:!g}),t(f,p,(m,...h)=>{let y=d=>{d instanceof P&&(d.path="key"in d?[d.key]:[],f instanceof P&&(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]||{},_=d=>{if(d instanceof P&&"argumentsList"in d)return;let I=q(d,!1);return J(I,S=>(d instanceof P?d.value=S:d=S,u(d,a,{...i,...x,keyInParent:d.key,level:i.level+1},c)))};if(oe(p)&&Array.isArray(m)){if(m.forEach(y),g)return n(m,...h);c&&m[0]instanceof P&&(m[0].operation!=="get"||o.asGet)&&n(m,...h);for(let d of m)_(d);return}return y(m),g?n(m,...h):_(m)},i)}(r,e.slice(0),{...o,level:0},s)}function qe(r,e,t,n={}){let o=q(r,!n.level);if(L(arguments[1])&&([,t,n={}]=arguments,e=1/0),!L(t))throw new Error(`Handler must be a function; "${G(t)}" given!`);if(e instanceof ne||e instanceof U)return De(o,e,qe,t,n);if(n={...n,descripted:!0},delete n.live,!b(o))return n.probe&&$(o,e,t,n)||void 0;let s=We(o,e,t,n);return n.probe?$(o,e,s,n):s()}function bt(r,e,t={}){let n=q(r);return w(e)||([,,,t={}]=arguments,e={[arguments[1]]:arguments[2]}),R.getInstance(n,!0,t.namespace).addRegistration({traps:e,params:t})}function fe(r,e,t=o=>o,n={}){return j(r,"getOwnPropertyDescriptor",{key:e},t,n)}function xt(r,e,t=o=>o,n={}){return j(r,"getOwnPropertyDescriptors",{key:e},t,n)}function Ee(r,e=n=>n,t={}){return j(r,"getPrototypeOf",{},e,t)}function Me(r,e=n=>n,t={}){return j(r,"isExtensible",{},e,t)}function Se(r,e=n=>n,t={}){return j(r,"ownKeys",{},e,t)}function ue(r,e,t=o=>o,n={}){return j(r,"has",{key:e},t,n)}function $(r,e,t=o=>o,n={}){let o,s=q(r,!n.level);return w(t)?[n,t]=[t,u=>u]:n.live&&(o=!0),e instanceof ne||e instanceof U?De(s,e,$,t,{...n,asGet:!0}):Ot(s,e,u=>{let f=[...u];return function a(i,l,c){if(!l.length)return c(i);let p=l.shift();if(!["string","number","symbol"].includes(typeof p))throw new Error(`Property name/key ${p} invalid.`);function g(y,x=void 0){let _=S=>(y.value=S,a([...i,n.live||n.descripted?y:S],l,c));if(arguments.length>1)return _(x);if(!b(s))return _(s?.[y.key]);let d=v(s,"accessorizedProps",!1),I=d&&d.get(y.key);if(I&&I.intact())return _(I.getValue(n.withPropertyDescriptors));if(n.withPropertyDescriptors){let S=Object.getOwnPropertyDescriptor(s,y.key);return _(S)}return _(Reflect.get(s,y.key))}let m=new P(s,{type:"get",key:p,value:void 0,operation:"get",related:f});if(!b(s))return g(m);let h=R.getInstance(s,!1,n.namespace);return h?h.emit(m,g):g(m)}([],u.slice(0),a=>{let i=oe(e)?a:a[0];return o&&b(s)?We(s,e,t,n,r.key)(i):t(i)})},n)}function Ce(r,e,t={}){let n=q(r);return N.getInstance(n,!0,t.namespace).batch(e,t)}function wt(r,e,t={}){e=q(e),r=q(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)),u=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(l=>l<i).length,a=i=>{let l=fe(r,i,t);"value"in l&&l.writable&&l.enumerable&&l.configurable?V(e,f(i),l.value,t):(l.enumerable||t.onlyEnumerable===!1)&&te(e,i,{...l,configurable:!0},t)};return Ce(e,()=>{u.forEach(a)}),qe(r,i=>{i.filter(l=>n.length?n.includes(l.key):!o.includes(l.key)).forEach(l=>{if(l.type==="delete")return re(e,f(l.key),t);if(l.type==="def"){(l.value.enumerable||t.onlyEnumerable===!1)&&te(e,f(l.key),{...l.value,configurable:!0},t);return}a(l.key)})},{...t,withPropertyDescriptors:!0})}function V(r,e,t,n=u=>u,o={},s=!1){let u=q(r),f=[[e,t]];w(e)&&([,,n=i=>i,o={},s=!1]=arguments,f=Object.entries(e)),w(n)&&([s,o,n]=[typeof o=="boolean"?o:s,n,i=>i]);let a=f.map(([i])=>i);return function i(l,c,p){if(!c.length)return p(l);let[g,m]=c.shift();function h(x,_=void 0){let d=Xe=>(x.status=Xe,i(l.concat(x),c,p));if(arguments.length>1)return d(x,_);let I=v(u,"accessorizedProps",!1),S=I&&I.get(x.key);return x.type==="def"?(S&&!S.restore()&&d(!1),Object.defineProperty(u,x.key,x.value),d(!0)):S&&S.intact()?d(S.setValue(x.value)):d(Reflect.set(u,x.key,x.value))}function y(x,_){if(o.diff&&m===_)return i(l,c,p);let d=new P(u,{type:s?"def":"set",key:g,value:m,isUpdate:x,oldValue:_,related:[...a],operation:s?"defineProperty":"set",detail:o.detail}),I=R.getInstance(u,!1,o.namespace);return I?I.emit(d,h):h(d)}return ue(u,g,x=>{if(!x)return y(x);if(g==="length"&&Array.isArray(u)&&v(u).has("$length"))return y(!0,v(u).get("$length"));let _={...o,withPropertyDescriptors:s};return $(u,g,d=>y(x,d),_)},o)}([],f.slice(0),i=>{let l=N.getInstance(u,!1,o.namespace);return l&&l.emit(i,{eventsArePropertyDescriptors:!!s}),n(oe(e)?i.map(c=>c.status):i[0]?.status)})}function te(r,e,t,n=s=>s,o={}){return V(r,e,t,n,o,!0)}function vt(r,e,t=o=>o,n={}){return V(r,e,t,n,!0)}function re(r,e,t=o=>o,n={}){let o=q(r);w(t)&&([n,t]=[t,f=>f]);let s=k(e,!1),u=[...s];return function f(a,i,l){if(!i.length)return l(a);let c=i.shift();function p(m,h=void 0){let y=d=>(m.status=d,f(a.concat(m),i,l));if(arguments.length>1)return y(m,h);let x=v(o,"accessorizedProps",!1),_=x&&x.get(m.key);return _&&!_.restore()&&y(!1),y(Reflect.deleteProperty(o,m.key))}function g(m){let h=new P(o,{type:"delete",key:c,oldValue:m,related:[...u],operation:"deleteProperty",detail:n.detail}),y=R.getInstance(o,!1,n.namespace);return y?y.emit(h,p):p(h)}return $(o,c,g,n)}([],s.slice(0),f=>{let a=N.getInstance(o,!1,n.namespace);return a&&a.emit(f),t(oe(e)?f.map(i=>i.status):f[0].status)})}function Pt(r,e,t=o=>o,n={}){return re(...arguments)}function Ae(r,e,t=null,n=s=>s,o={}){return j(r,"construct",arguments.length>2?{argumentsList:e,newTarget:t}:{argumentsList:e},n,o)}function Ie(r,e,t,n=s=>s,o={}){let s=ee(e),u;if(Array.isArray(e)){if(o.arrayMethodName){let f=new P(s,{operation:o.arrayMethodName,argumentsList:t});N.getInstance(s,!1,o.namespace)?.emit([f],{eventIsArrayMethodDescriptor:!0})}v(s).set("$length",s.length),u=Ce(s,()=>j(r,"apply",{thisArgument:e,argumentsList:t},n,o),o),v(s).delete("$length")}else u=j(r,"apply",{thisArgument:s,argumentsList:t},n,o);return u}function Te(r,e,t=o=>o,n={}){return j(r,"setPrototypeOf",{proto:e},t,n)}function je(r,e=n=>n,t={}){return j(r,"preventExtensions",{},e,t)}function We(r,e,t,n={}){let o=new AbortController;ae.setMaxListeners?.(0,o.signal),n.signal&&n.signal.addEventListener("abort",()=>o.abort());let s={...n,signal:o.signal},u=N.getInstance(r,!0,s.namespace),f=new Map;return function a(i=[],l=null){let c,p,g;if(oe(e)){if(l){g=!0,p=l;for(let m of i)f.get(m.key)?.remove(),f.delete(m.key)}else p=u.addRegistration(e,a,s);c={signal:p.signal,childRegistrations:f}}else l?.remove(),p=u.addRegistration(e,a,s),c={signal:p.signal};if(s.childRegistrations&&s.keyInParent&&s.childRegistrations.set(s.keyInParent,p),arguments.length){let m=t(i,c);if(arguments.length>1)return m}return o}}function j(r,e,t={},n=s=>s,o={}){r=q(r),w(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 u=new P(r,{operation:e,...t}),f=R.getInstance(r,!1,o.namespace);return f?f.emit(u,s):s(u)}function oe(r){return r===1/0||Array.isArray(r)}function q(r,e=!0,t=!0){if((!r||!b(r))&&e)throw new Error(`Object must be of type object or array! "${G(r)}" given.`);return r instanceof P&&(r.type==="def"&&t?r=typeof r.value.get=="function"?r.value.get():r.value.value:r=r.value),r&&ee(r)}function Ot(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(k(e,!1))}var A={...Le,...Oe},Ve=A;var Q=class extends le(EventTarget){#e;#t;constructor(e,{autoStart:t=!0,naturalOpen:n=!0,postAwaitsOpen:o=!1}={}){if(super(),this.#e=typeof e=="string"?new WebSocket(e):e,E(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.#t=new Promise(u=>{this.#e.readyState===WebSocket.OPEN?u():this.#e.addEventListener("open",u)}),this.#e.readyState===WebSocket.CLOSED)try{this.close()}catch{}}static _hydrateMessage(e,t){try{let n;if(typeof t.data=="string"&&w(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.#t.then(()=>{this.#e.send(JSON.stringify(e),t)})}_close(){this.#e.close()}};var Ue=(r,...e)=>F(r,"port+",...e),E=(r,...e)=>F(r,"port+","meta",...e),D=r=>F(r,"port+","meta").get("options")||{},He=["addEventListener","addRequestListener","postMessage","postRequest","dispatchEvent","relay","start","readyStateChange","removeEventListener","close"],Ge=["options","readyState","onmessage","onmessageerror"],O=class extends Ke(EventTarget){constructor(e={}){super(),Ue(this,"meta").set("options",e)}static[Symbol.hasInstance](e){return Function.prototype[Symbol.hasInstance].call(this,e)?!0:He.every(t=>typeof e[t]=="function")||Ge.every(t=>t in e)}};function Ke(r){return class extends r{static upgradeInPlace(e,t={}){if(e instanceof O)return e;let n=this.prototype;for(let s of He.concat("_autoStart")){let u=e[s],f=n[s];u&&Object.defineProperty(e,`_${s}`,{value:u.bind(e),configurable:!0}),Object.defineProperty(e,s,{value:f.bind(e),configurable:!0})}for(let s of Ge){let u=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),s),f=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(n),s);u&&Object.defineProperty(e,`_${s}`,{...u,configurable:!0}),Object.defineProperty(e,s,{...f,configurable:!0})}return Ue(e,"meta").set("options",t),this.upgradeEvents(e),e}static upgradeEvents(e,t=null){t||(t=e);let n=E(e);if(n.get("events+"))return;let o=E(t),s=D(t),u=H.call(t),f=C.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=c=>{if(c instanceof M)return;if(e===t&&c.stopImmediatePropagation?.(),c=this._hydrateMessage?.(t,c)||c,c.data.ping==="connect"&&typeof c.data?.[".wq"]?.eventID=="string"&&(!(e instanceof WebSocket)||!s.naturalOpen)){let h=!0;e instanceof BroadcastChannel&&(s.clientServerMode==="server"&&typeof c.data.id=="string"?(o.get("clients").add(c.data.id),h="server"):c.data.id==="server"&&o.has("client_id")&&(h=o.get("client_id"))),c.ports?.forEach(y=>y.postMessage(h)),o.set("remote.start.called",!0),t.start();return}if(c.data.ping==="disconnect"&&typeof c.data?.[".wq"]?.eventID=="string"){let h=()=>{o.set("remote.close.called",!0),t.close()};e instanceof BroadcastChannel?s.clientServerMode==="server"&&typeof c.data.id=="string"?(o.get("clients").delete(c.data.id),!o.get("clients").size&&s.autoClose&&!f.close.state&&h()):s.clientServerMode==="client"&&c.data.id==="server"&&h():e instanceof MessagePort&&h();return}let p=c.data,g={};typeof c.data?.[".wq"]?.eventID=="string"&&({message:p,".wq":g}=c.data);let m=new M(p,{originalTarget:e,...g,ports:c.ports});t.dispatchEvent(m)},i=c=>{e instanceof WebSocket&&s.naturalOpen&&!(c instanceof M)&&(o.set("remote.start.called",!0),t.start())},l=c=>{(e instanceof WebSocket||e instanceof MessagePort)&&!(c 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",l),n.delete("internal_call"),n.set("events+",!0),u.add(()=>{e.removeEventListener("message",a),e.removeEventListener("error",a),e.removeEventListener("open",i),e.removeEventListener("close",l),n.set("events+",!1)})}get options(){return{...D(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){if(this._autoStart(),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){return this._autoStart(),H.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&&Et.call(this,e),t}postMessage(e,t={}){this._autoStart();let n=C.call(this);n.messaging.state=!0,n.messaging.resolve(this);let o,{portOptions:s,wqOptions:{relayedFrom:u,...f}}=ce.call(this,e,t);(f.type!=="message"||f.live||f.bubbles||s.transfer?.length&&(this instanceof BroadcastChannel||this instanceof Q))&&(e={message:e,".wq":f}),t=s,o=u;let a=()=>{this._postMessage?this._postMessage(e,t,o):super.postMessage(e,t)};D(this).postAwaitsOpen?n.open.promise.then(a):a()}addRequestListener(e,t,n={}){let o=async s=>{let u=await t(s);for(let f of s.ports)f.postMessage(u)};this.addEventListener(e,o,n)}postRequest(e,t,n={}){let o;w(t)&&(n={once:!0,...t},o=new Promise(l=>{t=l}));let s=new MessageChannel;this.constructor.upgradeEvents(s.port1),s.port1.start();let{signal:u=null,once:f=!1,transfer:a=[],...i}=n;return s.port1.addEventListener("message",l=>t(l),{signal:u,once:f}),u?.addEventListener("abort",()=>{s.port1.close(),s.port2.close()}),this.postMessage(e,{...i,transfer:[s.port2].concat(a)}),o}relay({to:e,from:t,types:n="*",channel:o=null,resolveMessage:s=null,bidirectional:u=!1}={}){if(e&&t)throw new Error('Only one of "to" and "from" may be specified');if(t?e=this:t=this,e===t)throw new Error("Source and target ports cannot be the same");if(!(t instanceof O)||!(e instanceof O))throw new Error("Both source and target ports must be instance of MessagePortPlus.");if(typeof n!="function"&&!(n=[].concat(n)).length)throw new Error("Event types must be specified.");if(typeof o=="string")o={from:o};else if(w(o)){if(Object.keys(o).filter(l=>!["from","to"].includes(l)).length)throw new Error('Channel must be a string or an object of "from"/"to" members')}else if(o)throw new Error("Invalid channel parameter");let f=Je.call(t),a={targetPort:e,types:n,channel:o,resolveMessage:s};f.add(a);let i;return u&&(i=e.relay({to:t,types:n,channel:o&&{to:o.from,from:o.to},resolveMessage:s,bidirectional:!1})),()=>{f.delete(a),i?.()}}channel(e,t=null){let n=new MessageChannel;return O.upgradeInPlace(n.port1,{autoStart:this.options.autoStart,postAwaitsOpen:this.options.postAwaitsOpen}),O.upgradeInPlace(n.port2,{autoStart:this.options.autoStart,postAwaitsOpen:this.options.postAwaitsOpen}),H.call(this).add(this.relay({channel:e,to:n.port1,bidirectional:!0,resolveMessage:t})),n.port1.start(),this.readyStateChange("close").then(()=>{n.port1.close()}),n.port2}projectMutations({from:e,to:t,...n}){if(!e||!t||typeof e=="string"&&typeof t=="string"||b(e)&&b(t))throw new Error('Invalid "from"/"to" parameters');if(typeof e=="string"){if(!b(t))throw new Error('Invalid "to" parameter. Object/array expected');return xe.call(this,t,e,n)}if(typeof t=="string"){if(!b(e))throw new Error('Invalid "from" parameter. Object/array expected');return Qe.call(this,e,t,n)}throw new Error('Invalid "from"/"to" parameters')}get readyState(){let e=C.call(this);return e.close.state?"closed":e.open.state?"open":"connecting"}readyStateChange(e){if(!["open","messaging","close"].includes(e))throw new Error(`Invalid readyState query "${e}"`);return C.call(this)[e].promise}_autoStart(){let e=E(this),t=D(this);!e.get("internal_call")&&t.autoStart&&this.start()}start(){let e=C.call(this);if(e.open.state)return;let t,n=()=>{if(e.open.state)return;e.open.state=!0,e.open.resolve(this);let i=new M(null,{type:"open"});this._dispatchEvent?this._dispatchEvent(i):super.dispatchEvent(i),t?.port1.close(),t?.port2.close()},o=E(this),s=D(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:u}=ce.call(this),f=s.clientServerMode==="server"?"server":s.clientServerMode==="client"?o.get("client_id"):null,a={".wq":u,ping:"connect",id:f};this._postMessage?this._postMessage(a,{transfer:[t.port2]}):super.postMessage(a,{transfer:[t.port2]})}close(...e){let t=C.call(this);if(t.close.state)return;t.close.state=!0;let n=E(this),o=D(this);if(!n.get("remote.close.called")&&(this instanceof BroadcastChannel||this instanceof MessagePort)){let{wqOptions:u}=ce.call(this),f=o.clientServerMode==="server"?"server":o.clientServerMode==="client"?n.get("client_id"):null,a={".wq":u,ping:"disconnect",id:f};this._postMessage?this._postMessage(a):super.postMessage(a)}this._close?this._close(...e):super.close(...e),t.close.resolve(this);let s=new M(null,{type:"close"});this._dispatchEvent?this._dispatchEvent(s):super.dispatchEvent(s),Mt.call(this)}}}function le(r){return class extends Ke(r){static _hydrateMessage(e,t){if(typeof t.data?.[".wq"]?.numPorts!="number"||typeof t.data[".wq"].eventID!="string")return t;let n=H.call(e),o=t.data[".wq"].numPorts;Object.defineProperty(t,"ports",{value:[],configurable:!0});for(let s=0;s<o;s++){let u=e.channel(`${t.data[".wq"].eventID}:${s}`);t.ports.push(u)}return t}_postMessage(e,t={}){let{transfer:n=[],...o}=t;if(typeof e?.[".wq"]?.eventID=="string"){let s=H.call(this),u=n.filter(a=>a instanceof MessagePort),f=u.length;for(let a=0;a<f;a++)O.upgradeInPlace(u[a]),s.add(this.relay({channel:`${e[".wq"].eventID}:${a}`,to:u[a],bidirectional:!0})),u[a].start(),u[a].readyStateChange("close").then(()=>{let{wqOptions:i}=ce.call(this),l={".wq":i,ping:"disconnect"};this.postMessage(l,{type:`${e[".wq"].eventID}:${a}:message`})});e[".wq"].numPorts=f}return this.__postMessage(e,o)}}}function Et(r){if(r.propagationStopped)return;let e=E(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=Je.call(this);if(t.size&&r instanceof M){let{type:n,eventID:o,data:s,live:u,bubbles:f,ports:a}=r,i=new WeakSet;for(let{targetPort:l,types:c,channel:p,resolveMessage:g}of t){if(i.has(l))continue;let m=n;p.from&&([,m]=new RegExp(`^${p.from.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}:([^:]+)$`).exec(n)||[],!m)||!(typeof c=="function"?c(m,this,l,p):[].concat(c).find(y=>y===m||y==="*"))||(i.add(l),l.postMessage(g?g(s,this,l,p):s,{transfer:a,type:p.to?`${p.to}:${m}`:m,eventID:o,bubbles:f,live:u,forwarded:!0,relayedFrom:this}))}}}function H(){let r=E(this);return r.has("garbage_collection")||r.set("garbage_collection",new Set),r.get("garbage_collection")}function Je(){let r=E(this);return r.has("downstream_registry")||r.set("downstream_registry",new Set),r.get("downstream_registry")}function C(){let r=E(this);if(!r.has("readystate_registry")){let e=t=>(t.promise=new Promise((n,o)=>(t.resolve=n,t.reject=o)),t);r.set("readystate_registry",{open:e({}),messaging:e({}),close:e({})})}return r.get("readystate_registry")}function Mt(){let r=E(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:u=!1,forwarded:f=!1,relayedFrom:a=null,signal:i=null,withArrayMethodDescriptors:l=!1,honourDoneMutationFlags:c=!1,...p}=e;return n||(n=`${t}-${(0|Math.random()*9e6).toString(36)}`),!s&&!f&&b(r)&&o&&!t?.endsWith(".mutate")&&(Qe.call(this,r,n,{signal:i,withArrayMethodDescriptors:l,honourDoneMutationFlags:c}),s=!0),{portOptions:p,wqOptions:{type:t,eventID:n,live:o,observing:s,honourDoneMutationFlags:c,bubbles:u,forwarded:f,relayedFrom:a}}}function Qe(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(l=>(i=!i&&o&&l.detail?.done,{...l,target:void 0})),{type:`${e}.mutate`}),i&&u.abort())},u=A.observe(r,A.subtree(),s,{signal:t,withArrayMethodDescriptors:n});return H.call(this).add(u),u}function xe(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;A.batch(r,()=>{for(let i of f.data){if(a=!a&&n&&i.detail?.done,i.argumentsList){let l=i.path.length?A.get(r,A.path(...i.path)):r;A.proxy(l)[i.operation](...i.argumentsList);continue}if(i.key!=="length"||["set","defineProperty","deleteProperty"].includes(i.operation)){let l=i.path.length===1?r:A.get(r,A.path(...i.path.slice(0,-1)));i.type==="delete"?A.deleteProperty(l,i.key):A.set(l,i.key,i.value)}}}),a&&s()};this.addEventListener(`${e}.mutate`,o,{signal:t});let s=()=>this.removeEventListener(`${e}.mutate`,o);return H.call(this).add(s),s}var pe=class extends le(BroadcastChannel){constructor(e,{autoStart:t=!0,postAwaitsOpen:n=!1,clientServerMode:o=null,autoClose:s=!0}={}){super(e);let u=E(this);if(o&&!["server","client"].includes(o))throw new Error('clientServerMode must be "server" or "client"');u.set("options",{autoStart:t,postAwaitsOpen:n,clientServerMode:o,autoClose:s}),this.constructor.upgradeEvents(this)}__postMessage(e,t){BroadcastChannel.prototype.postMessage.call(this,e)}};var me=class extends MessageChannel{constructor({autoStart:e=!0,postAwaitsOpen:t=!1}={}){super(),[this.port1,this.port2].forEach((n,o)=>{O.upgradeInPlace(n,{autoStart:e,postAwaitsOpen:t})})}};var X=class extends O{#e=new Set;get length(){return this.#e.size}[Symbol.iterator](){return this.#e[Symbol.iterator]()}constructor({autoStart:e=!0,postAwaitsOpen:t=!1,autoClose:n=!0}={}){super({autoStart:e,postAwaitsOpen:t,autoClose:n})}addPort(e,{enableBubbling:t=!0}={}){if(!(e instanceof O))throw new TypeError("Port must be a WQMessagePort instance.");if(C.call(this).close.state){let u=this.constructor.name;throw new Error(`Cannot add port to ${u}. ${u} is closed.`)}if(this.#e.has(e))return;this.#e.add(e);let o=E(e);if(t){if(o.get("parentNode"))throw new TypeError("Incoming port already has a parent node.");o.set("parentNode",this)}e.readyStateChange("open").then(()=>this.start()),e.readyStateChange("close").then(s);let s=()=>{this.#e.has(e)&&(this.#e.delete(e),t&&o.get("parentNode")===this&&o.set("parentNode",null),this.#e.size===0&&D(this).autoClose&&this.close())};return s}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)}_autoStart(){}start(){let e=C.call(this);if(e.open.state)return;e.open.state=!0,e.open.resolve(this);let t=new MessageEventPlus(null,{type:"open"});super.dispatchEvent(t)}close(...e){let t=C.call(this);if(t.close.state)return;t.close.state=!0;for(let o of this.#e)o.close?.(...e);t.close.resolve(this);let n=new MessageEventPlus(null,{type:"close"});super.dispatchEvent(n)}};var de=class extends X{#e;get channelSpec(){return this.#e}constructor(e=null,t={}){if(super(t),typeof e=="string")e={from:e,to:e};else if(w(e)){if(Object.keys(e).filter(n=>!["from","to"].includes(n)).length)throw new Error('Channel must be a string or an object of "from"/"to" members')}else if(e)throw new Error("Invalid channel parameter");this.#e=e}addPort(e,{resolveMessage:t=null,...n}={}){let o=(l,...c)=>t?t(l,...c):l,s=super.addPort(e,n),u=e.relay({channel:this.#e,to:this,bidirectional:!1,resolveMessage:o}),f=this.#e.from&&`${this.#e.from}:message`||"message";this.postMessage(o({event:"joins"},e,this),{type:f,relayedFrom:e});let a=()=>{this.postMessage(o({event:"leaves"},e,this),{type:f,relayedFrom:e})},i=()=>{a(),u(),s()};return e.readyStateChange("close").then(i),i}};globalThis.webqit||(globalThis.webqit={});Object.assign(globalThis.webqit,Ne);})();
1
+ (()=>{var Ye=Object.defineProperty;var de=(r,e)=>{for(var t in e)Ye(r,t,{get:e[t],enumerable:!0})};var Re={};de(Re,{BroadcastChannelPlus:()=>pe,MessageChannelPlus:()=>me,MessageEventPlus:()=>j,MessagePortPlus:()=>O,Observer:()=>We,RelayPort:()=>he,StarPort:()=>X,WebSocketPort:()=>Q});function x(r){return!Array.isArray(r)&&typeof r=="object"&&r}function G(r){return typeof r}function I(r){return Array.isArray(r)}function K(r){return typeof r=="function"}function ge(r){return r===null||r===""}function z(r){return arguments.length&&(r===void 0||typeof r>"u")}function y(r){return Array.isArray(r)||typeof r=="object"&&r||K(r)}function ye(r){return ge(r)||z(r)||r===!1||r===0||y(r)&&!Object.keys(r).length}function C(r){return K(r)||r&&{}.toString.call(r)==="[object function]"}function se(r){return r instanceof String||typeof r=="string"&&r!==null}function _e(r){return!se(r)&&!z(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 ie,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 ie,o.set(n,t));return t}var ie=class extends Map{};var j=class extends MessageEvent{#e;get originalTarget(){return this.#e}#t;get eventID(){return this.#t}#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}#n=[];get ports(){return this.#n}constructor(e,{originalTarget:t=null,type:n="message",eventID:o,live:s=!1,honourDoneMutationFlags:u=!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.#t=o,this.#o=s,this.#a=f,this.#f=a,this.#s=u,this.#n=i,this.#n.forEach(l=>O.upgradeInPlace(l)),y(this.#r)&&this.#o){if(typeof o!="string")throw new TypeError("eventID must be a non-empty string");we.call(t,this.#r,this.#t,{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()}#l=!1;get defaultPrevented(){return this.#l}preventDefault(){this.#l=!0,super.preventDefault()}respondWith(e,t=[]){for(let n of this.#n)n.postMessage(e,t);return!!this.#n.length}};var Le={};de(Le,{any:()=>_t,apply:()=>Ie,batch:()=>Ce,construct:()=>Te,defineProperties:()=>vt,defineProperty:()=>te,deleteProperties:()=>Pt,deleteProperty:()=>re,get:()=>N,getOwnPropertyDescriptor:()=>fe,getOwnPropertyDescriptors:()=>wt,getPrototypeOf:()=>Ee,has:()=>ue,intercept:()=>bt,isExtensible:()=>Me,map:()=>xt,observe:()=>qe,ownKeys:()=>Se,path:()=>gt,preventExtensions:()=>je,reduce:()=>De,set:()=>W,setPrototypeOf:()=>Ae,subtree:()=>yt});function F(r,e=!0){return I(r)?r:!e&&x(r)?[r]:r!==!1&&r!==0&&ye(r)?[]:_e(r)?Array.prototype.slice.call(r):x(r)?Object.values(r):[r]}var v=(r,...e)=>$(r,"observerAPI",...e),J=(r,e)=>r instanceof Promise?r.then(e):e(r),ae={};var B=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 Y=class extends B{constructor(){super(...arguments),this.emit.currentRegistration=this,Object.defineProperty(this,"abortController",{value:new AbortController}),Object.defineProperty(this,"signal",{value:this.abortController.signal}),ae.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 J(o,s=>{let u=this.emit.recursionTarget;return delete this.emit.recursionTarget,this.params.recursions==="defer"&&u?.length?this.emit.currentRegistration.fire(u):s})}};var V=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(!y(t))throw new Error(`Subject must be of type object; "${G(t)}" given!`);let s=this;return o&&v(globalThis,"observerAPI","namespaces").has(e+"-"+o)&&(s=v(globalThis,"observerAPI","namespaces").get(e+"-"+o),e+="-"+o),!v(t,"registry").has(e)&&n&&v(t,"registry").set(e,new s(t)),v(t,"registry").get(e)}static _namespace(e,t,n=null){if(e+="-"+t,arguments.length===2)return v(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}.`);v(globalThis,"observerAPI","namespaces").set(e,n),n.__namespace=t}};var P=class{constructor(e,t){if(this.target=e,!t.operation)throw new Error("Descriptor operation must be given in definition!");Object.assign(this,t)}get[Symbol.toStringTag](){return"Descriptor"}static[Symbol.hasInstance](e){return e?.[Symbol.toStringTag]==="Descriptor"&&e.operation}};var L=class extends V{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 Y(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 l of e)n+=1,l.params.withPropertyDescriptors&&(o+=1),l.params.withArrayMethodDescriptors&&(s+=1);let u=[],f=[],a=[],i=[];for(let l of t){let c=l.arrayMethodName,m=l.eventsArePropertyDescriptors,d=l.eventIsArrayMethodDescriptor;for(let p of l.events)if(c&&(p.operation=c),o&&(s&&u.push(p),d||s!==n&&f.push(p)),o!==n){let b=p;if(m){let{target:_,type:w,...g}=p;b=new P(_,{type:"set",...g}),Object.defineProperty(b,"value","get"in g.value?{get:()=>g.value.get()}:{value:g.value.value}),g.oldValue&&Object.defineProperty(b,"oldValue","get"in g.oldValue?{get:()=>g.oldValue.get()}:{value:g.oldValue.value})}s&&a.push(b),d||s!==n&&i.push(b)}}for(let l of e)l.params.withPropertyDescriptors?l.params.withArrayMethodDescriptors?u.length&&l.fire(u):f.length&&l.fire(f):l.params.withArrayMethodDescriptors?a.length&&l.fire(a):i.length&&l.fire(i)}batch(e,t={}){this.batches.unshift({entries:[...this.entries],snapshots:[],params:t});let n=e();return J(n,o=>{let s=this.batches.shift();return s.snapshots.length&&this.$emit(s.entries,s.snapshots),o})}};var Z=class extends B{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 R=class extends V{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 Z(this,e))}emit(e,t=null){let n=this;return function o(s,...u){let f=n.entries[s];return f?f.exec(e,(...a)=>o(s+1,...a),...u):t?t(e,...u):u[0]}(0)}};var Oe={};de(Oe,{accessorize:()=>ht,proxy:()=>ve,unaccessorize:()=>dt,unproxy:()=>ee});var Be=Symbol("wqOriginal");function ht(r,e,t={}){r=Pe(r);let n=v(r,"accessorizedProps");function o(a){let i,l=r;do i=Object.getOwnPropertyDescriptor(l,a);while(!i&&(l=Object.getPrototypeOf(l)));return i?{proto:l,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(m=!1){return m?this.descriptor:this.descriptor.get?this.descriptor.get():this.descriptor.value},i.setValue=function(m,d=!1){if(this.dirty=!0,d){this.descriptor=m;return}return this.descriptor.set?this.descriptor.set(m)!==!1:(this.descriptor.value=m,!0)},i.intact=function(){let m=Object.getOwnPropertyDescriptor(r,a);return m?.get===c.get&&m?.set===c.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:l=!0}=i.descriptor,c={enumerable:l,configurable:!0};("value"in i.descriptor||i.descriptor.set)&&(c.set=function(m){return W(this,a,m,t)}),("value"in i.descriptor||i.descriptor.get)&&(c.get=function(){return N(this,a,t)});try{return Object.defineProperty(r,a,c),!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 dt(r,e,t={}){r=Pe(r);let n=v(r,"accessorizedProps");function o(f){return n.has(f+"")?n.get(f+"").restore():!0}let u=(Array.isArray(e)?e:e===void 0?Object.keys(r):[e]).map(o);return e===void 0||Array.isArray(e)?u:u[0]}function ve(r,e={},t=void 0){let n=Pe(r);if(typeof e.membrane=="boolean")throw new Error("The params.membrane parameter cannot be of type boolean.");if(e.membrane&&v(n,"membraneRef").has(e.membrane))return v(n,"membraneRef").get(e.membrane);let o={apply:(f,a,i)=>Ie(f,a,i,void 0,e),construct:(f,a,i=null)=>Te(f,a,i,e),defineProperty:(f,a,i)=>te(f,a,i,e),deleteProperty:(f,a)=>re(f,a,e),get:(f,a,i=null)=>{if(a===Be)return n;let l={...e,receiver:i},c=N(f,a,l);return Array.isArray(f)&&typeof c=="function"&&!/^class\s?/.test(Function.prototype.toString.call(c))?ve(c,{...e,arrayMethodName:a,membrane:i},t):e.chainable&&y(c)&&a!=="prototype"&&!(typeof c=="function"&&/^class\s?|\{\s\[native\scode\]\s\}$/.test(Function.prototype.toString.call(c)))?ve(c,e,t):c},getOwnPropertyDescriptor:(f,a)=>fe(f,a,e),getPrototypeOf:f=>Ee(f,e),has:(f,a)=>ue(f,a,e),isExtensible:f=>Me(f,e),ownKeys:f=>Se(f,e),preventExtensions:f=>je(f,e),set:(f,a,i,l=null)=>W(f,a,i,{...e,receiver:l}),setPrototypeOf:(f,a)=>Ae(f,a,e)},s=t?.(o)||o,u=new Proxy(n,s);return e.membrane&&v(n,"membraneRef").set(e.membrane,u),u}function ee(r){return r&&r[Be]||r}function Pe(r){if(!r||!y(r))throw new Error("Target must be of type object!");return ee(r)}var ne=class extends Array{get[Symbol.toStringTag](){return"Path"}static[Symbol.hasInstance](e){return Array.isArray(e)&&e[Symbol.toStringTag]==="Path"}};function gt(...r){return new ne(...r)}var U=class extends Array{get[Symbol.toStringTag](){return"Subtree"}static[Symbol.hasInstance](e){return Array.isArray(e)&&e[Symbol.toStringTag]==="Subtree"}};function yt(){return new U}function _t(){return 1/0}function De(r,e,t,n=s=>s,o={}){let s=e instanceof U;if(!(!s&&!e?.length))return function u(f,a,i,l){let c=l||a[i.level]instanceof U,m=c?1/0:a[i.level],d=c?!1:i.level===a.length-1;return f instanceof P&&f.operation!=="get"?i={...i,probe:"always"}:i.probe!=="always"&&(i={...i,probe:!d}),t(f,m,(p,...b)=>{let _=h=>{h instanceof P&&(h.path="key"in h?[h.key]:[],f instanceof P&&(h.path="key"in h?f.path.concat(h.key):f.path.slice(0),Object.defineProperty(h,"context",{get:()=>f,configurable:!0})))},w=b[0]||{},g=h=>{if(h instanceof P&&"argumentsList"in h)return;let T=D(h,!1);return J(T,M=>(h instanceof P?h.value=M:h=M,u(h,a,{...i,...w,keyInParent:h.key,level:i.level+1},c)))};if(oe(m)&&Array.isArray(p)){if(p.forEach(_),d)return n(p,...b);c&&p[0]instanceof P&&(p[0].operation!=="get"||o.asGet)&&n(p,...b);for(let h of p)g(h);return}return _(p),d?n(p,...b):g(p)},i)}(r,e.slice(0),{...o,level:0},s)}function qe(r,e,t,n={}){let o=D(r,!n.level);if(C(arguments[1])&&([,t,n={}]=arguments,e=1/0),!C(t))throw new Error(`Handler must be a function; "${G(t)}" given!`);if(e instanceof ne||e instanceof U)return De(o,e,qe,t,n);if(n={...n,descripted:!0},delete n.live,!y(o))return n.probe&&N(o,e,t,n)||void 0;let s=Ve(o,e,t,n);return n.probe?N(o,e,s,n):s()}function bt(r,e,t={}){let n=D(r);return x(e)||([,,,t={}]=arguments,e={[arguments[1]]:arguments[2]}),R.getInstance(n,!0,t.namespace).addRegistration({traps:e,params:t})}function fe(r,e,t=o=>o,n={}){return A(r,"getOwnPropertyDescriptor",{key:e},t,n)}function wt(r,e,t=o=>o,n={}){return A(r,"getOwnPropertyDescriptors",{key:e},t,n)}function Ee(r,e=n=>n,t={}){return A(r,"getPrototypeOf",{},e,t)}function Me(r,e=n=>n,t={}){return A(r,"isExtensible",{},e,t)}function Se(r,e=n=>n,t={}){return A(r,"ownKeys",{},e,t)}function ue(r,e,t=o=>o,n={}){return A(r,"has",{key:e},t,n)}function N(r,e,t=o=>o,n={}){let o,s=D(r,!n.level);return x(t)?[n,t]=[t,u=>u]:n.live&&(o=!0),e instanceof ne||e instanceof U?De(s,e,N,t,{...n,asGet:!0}):Ot(s,e,u=>{let f=[...u];return function a(i,l,c){if(!l.length)return c(i);let m=l.shift();if(!["string","number","symbol"].includes(typeof m))throw new Error(`Property name/key ${m} invalid.`);function d(_,w=void 0){let g=M=>(_.value=M,a([...i,n.live||n.descripted?_:M],l,c));if(arguments.length>1)return g(w);if(!y(s))return g(s?.[_.key]);let h=v(s,"accessorizedProps",!1),T=h&&h.get(_.key);if(T&&T.intact())return g(T.getValue(n.withPropertyDescriptors));if(n.withPropertyDescriptors){let M=Object.getOwnPropertyDescriptor(s,_.key);return g(M)}return g(Reflect.get(s,_.key))}let p=new P(s,{type:"get",key:m,value:void 0,operation:"get",related:f});if(!y(s))return d(p);let b=R.getInstance(s,!1,n.namespace);return b?b.emit(p,d):d(p)}([],u.slice(0),a=>{let i=oe(e)?a:a[0];return o&&y(s)?Ve(s,e,t,n,r.key)(i):t(i)})},n)}function Ce(r,e,t={}){let n=D(r);return L.getInstance(n,!0,t.namespace).batch(e,t)}function xt(r,e,t={}){e=D(e),r=D(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)),u=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(l=>l<i).length,a=i=>{let l=fe(r,i,t);"value"in l&&l.writable&&l.enumerable&&l.configurable?W(e,f(i),l.value,t):(l.enumerable||t.onlyEnumerable===!1)&&te(e,i,{...l,configurable:!0},t)};return Ce(e,()=>{u.forEach(a)}),qe(r,i=>{i.filter(l=>n.length?n.includes(l.key):!o.includes(l.key)).forEach(l=>{if(l.type==="delete")return re(e,f(l.key),t);if(l.type==="def"){(l.value.enumerable||t.onlyEnumerable===!1)&&te(e,f(l.key),{...l.value,configurable:!0},t);return}a(l.key)})},{...t,withPropertyDescriptors:!0})}function W(r,e,t,n=u=>u,o={},s=!1){let u=D(r),f=[[e,t]];x(e)&&([,,n=i=>i,o={},s=!1]=arguments,f=Object.entries(e)),x(n)&&([s,o,n]=[typeof o=="boolean"?o:s,n,i=>i]);let a=f.map(([i])=>i);return function i(l,c,m){if(!c.length)return m(l);let[d,p]=c.shift();function b(w,g=void 0){let h=Xe=>(w.status=Xe,i(l.concat(w),c,m));if(arguments.length>1)return h(w,g);let T=v(u,"accessorizedProps",!1),M=T&&T.get(w.key);return w.type==="def"?(M&&!M.restore()&&h(!1),Object.defineProperty(u,w.key,w.value),h(!0)):M&&M.intact()?h(M.setValue(w.value)):h(Reflect.set(u,w.key,w.value))}function _(w,g){if(o.diff&&p===g)return i(l,c,m);let h=new P(u,{type:s?"def":"set",key:d,value:p,isUpdate:w,oldValue:g,related:[...a],operation:s?"defineProperty":"set",detail:o.detail}),T=R.getInstance(u,!1,o.namespace);return T?T.emit(h,b):b(h)}return ue(u,d,w=>{if(!w)return _(w);if(d==="length"&&Array.isArray(u)&&v(u).has("$length"))return _(!0,v(u).get("$length"));let g={...o,withPropertyDescriptors:s};return N(u,d,h=>_(w,h),g)},o)}([],f.slice(0),i=>{let l=L.getInstance(u,!1,o.namespace);return l&&l.emit(i,{eventsArePropertyDescriptors:!!s}),n(oe(e)?i.map(c=>c.status):i[0]?.status)})}function te(r,e,t,n=s=>s,o={}){return W(r,e,t,n,o,!0)}function vt(r,e,t=o=>o,n={}){return W(r,e,t,n,!0)}function re(r,e,t=o=>o,n={}){let o=D(r);x(t)&&([n,t]=[t,f=>f]);let s=F(e,!1),u=[...s];return function f(a,i,l){if(!i.length)return l(a);let c=i.shift();function m(p,b=void 0){let _=h=>(p.status=h,f(a.concat(p),i,l));if(arguments.length>1)return _(p,b);let w=v(o,"accessorizedProps",!1),g=w&&w.get(p.key);return g&&!g.restore()&&_(!1),_(Reflect.deleteProperty(o,p.key))}function d(p){let b=new P(o,{type:"delete",key:c,oldValue:p,related:[...u],operation:"deleteProperty",detail:n.detail}),_=R.getInstance(o,!1,n.namespace);return _?_.emit(b,m):m(b)}return N(o,c,d,n)}([],s.slice(0),f=>{let a=L.getInstance(o,!1,n.namespace);return a&&a.emit(f),t(oe(e)?f.map(i=>i.status):f[0].status)})}function Pt(r,e,t=o=>o,n={}){return re(...arguments)}function Te(r,e,t=null,n=s=>s,o={}){return A(r,"construct",arguments.length>2?{argumentsList:e,newTarget:t}:{argumentsList:e},n,o)}function Ie(r,e,t,n=s=>s,o={}){let s=ee(e),u;if(Array.isArray(e)){if(o.arrayMethodName){let f=new P(s,{operation:o.arrayMethodName,argumentsList:t});L.getInstance(s,!1,o.namespace)?.emit([f],{eventIsArrayMethodDescriptor:!0})}v(s).set("$length",s.length),u=Ce(s,()=>A(r,"apply",{thisArgument:e,argumentsList:t},n,o),o),v(s).delete("$length")}else u=A(r,"apply",{thisArgument:s,argumentsList:t},n,o);return u}function Ae(r,e,t=o=>o,n={}){return A(r,"setPrototypeOf",{proto:e},t,n)}function je(r,e=n=>n,t={}){return A(r,"preventExtensions",{},e,t)}function Ve(r,e,t,n={}){let o=new AbortController;ae.setMaxListeners?.(0,o.signal),n.signal&&n.signal.addEventListener("abort",()=>o.abort());let s={...n,signal:o.signal},u=L.getInstance(r,!0,s.namespace),f=new Map;return function a(i=[],l=null){let c,m,d;if(oe(e)){if(l){d=!0,m=l;for(let p of i)f.get(p.key)?.remove(),f.delete(p.key)}else m=u.addRegistration(e,a,s);c={signal:m.signal,childRegistrations:f}}else l?.remove(),m=u.addRegistration(e,a,s),c={signal:m.signal};if(s.childRegistrations&&s.keyInParent&&s.childRegistrations.set(s.keyInParent,m),arguments.length){let p=t(i,c);if(arguments.length>1)return p}return o}}function A(r,e,t={},n=s=>s,o={}){r=D(r),x(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 u=new P(r,{operation:e,...t}),f=R.getInstance(r,!1,o.namespace);return f?f.emit(u,s):s(u)}function oe(r){return r===1/0||Array.isArray(r)}function D(r,e=!0,t=!0){if((!r||!y(r))&&e)throw new Error(`Object must be of type object or array! "${G(r)}" given.`);return r instanceof P&&(r.type==="def"&&t?r=typeof r.value.get=="function"?r.value.get():r.value.value:r=r.value),r&&ee(r)}function Ot(r,e,t,n={}){return e===1/0?n.level&&!y(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 S={...Le,...Oe},We=S;var Q=class extends le(EventTarget){#e;#t;constructor(e,{handshake:t=0,postAwaitsOpen:n=!1}={}){if(super(),typeof t!="number")throw new Error("handshake must be a number");if(t<0||t>2)throw new Error("handshake must be between 0 and 2");if(E(this).set("options",{handshake:t,postAwaitsOpen:n}),this.#e=typeof e=="string"?new WebSocket(e):e,this.constructor.upgradeEvents(this.#e,this),this.#t=new Promise(s=>{this.#e.readyState===WebSocket.OPEN?s():this.#e.addEventListener("open",()=>s(),{once:!0})}),t===0&&this.#t.then(()=>this.start()),this.#e.readyState===WebSocket.CLOSED)try{this.close()}catch{}else this.#e.addEventListener("close",()=>{try{this.close()}catch{}},{once:!0})}static _hydrateMessage(e,t){try{let n;if(typeof t.data=="string"&&x(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.#t.then(()=>{this.#e.send(JSON.stringify(e),t)})}_close(){this.#e.close()}};var Ue=(r,...e)=>$(r,"port+",...e),E=(r,...e)=>$(r,"port+","meta",...e),k=r=>$(r,"port+","meta").get("options")||{},He=["addEventListener","addRequestListener","postMessage","postRequest","dispatchEvent","relay","start","readyStateChange","removeEventListener","close"],Ge=["options","readyState","onmessage","onmessageerror"],O=class extends Ke(EventTarget){constructor({handshake:e=0,postAwaitsOpen:t=!1,...n}={}){if(typeof e!="number")throw new Error("handshake must be a number");if(e<0||e>2)throw new Error("handshake must be between 0 and 2");super(),Ue(this,"meta").set("options",{handshake:e,postAwaitsOpen:t,...n})}static[Symbol.hasInstance](e){return Function.prototype[Symbol.hasInstance].call(this,e)?!0:He.every(t=>typeof e[t]=="function")||Ge.every(t=>t in e)}};function Ke(r){return class extends r{static upgradeInPlace(e,{handshake:t=0,postAwaitsOpen:n=!1}={}){if(e instanceof O)return e;if(typeof t!="number")throw new Error("handshake must be a number");if(t<0||t>2)throw new Error("handshake must be between 0 and 2");let o=this.prototype;for(let u of He.concat("_autoStart")){let f=e[u],a=o[u];f&&Object.defineProperty(e,`_${u}`,{value:f.bind(e),configurable:!0}),Object.defineProperty(e,u,{value:a.bind(e),configurable:!0})}for(let u of Ge){let f=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),u),a=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(o),u);f&&Object.defineProperty(e,`_${u}`,{...f,configurable:!0}),Object.defineProperty(e,u,{...a,configurable:!0})}return Ue(e,"meta").set("options",{handshake:t,postAwaitsOpen:n}),this.upgradeEvents(e),t===0&&e.start(),e}static upgradeEvents(e,t=null){t||(t=e);let n=E(e);if(n.get("events+"))return;let o=E(t),s=k(t),u=H.call(t),f=q.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=i=>{if(i instanceof j)return;if(e===t&&i.stopImmediatePropagation?.(),i=this._hydrateMessage?.(t,i)||i,i.data.ping==="connect"&&typeof i.data?.[".wq"]?.eventID=="string"&&(!(e instanceof WebSocket)||s.handshake)){let d=s.handshake===0||o.get("start.called"),p={isOpen:d};e instanceof BroadcastChannel&&(s.clientServerMode==="server"&&typeof i.data.id=="string"?(o.get("clients").add(i.data.id),p.id="server"):i.data.id==="server"&&o.has("client_id")&&(p.id=o.get("client_id"))),i.ports?.forEach(b=>b.postMessage(p)),d&&(o.set("remote.open.called",!0),t.start());return}if(i.data.ping==="disconnect"&&typeof i.data?.[".wq"]?.eventID=="string"){let d=()=>{o.set("remote.close.called",!0),t.close()};e instanceof BroadcastChannel?s.clientServerMode==="server"&&typeof i.data.id=="string"?(o.get("clients").delete(i.data.id),!o.get("clients").size&&s.autoClose&&!f.close.state&&d()):s.clientServerMode==="client"&&i.data.id==="server"&&d():e instanceof MessagePort&&d();return}let l=i.data,c={};typeof i.data?.[".wq"]?.eventID=="string"&&({message:l,".wq":c}=i.data);let m=new j(l,{originalTarget:e,...c,ports:i.ports});t.dispatchEvent(m)};n.set("internal_call",!0),e.addEventListener("message",a),e.addEventListener("error",a),n.delete("internal_call"),u.add(()=>{e.removeEventListener("message",a),e.removeEventListener("error",a),n.set("events+",!1)}),n.set("events+",!0)}get options(){return{...k(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){if(typeof super.onmessage<"u"){super.onmessage=e,this._autoStart();return}if(e!==null&&typeof e!="function")throw new TypeError("onmessage must be a function");if(Object.getOwnPropertyDescriptor(this,"_onmessage")?.set){this._onmessage=e,this._autoStart();return}this._onmessage&&this.removeEventListener("message",this._onmessage),this.addEventListener("message",e),this._onmessage=e,this._autoStart()}addEventListener(...e){H.call(this).add(()=>{this._removeEventListener?this._removeEventListener(...e):super.removeEventListener(...e)});let n=this._addEventListener?this._addEventListener(...e):super.addEventListener(...e);return this._autoStart(),n}dispatchEvent(e){let t=this._dispatchEvent?this._dispatchEvent(e):super.dispatchEvent(e);return e instanceof j&&Et.call(this,e),t}postMessage(e,t={}){this._autoStart();let n=q.call(this);n.messaging.state=!0,n.messaging.resolve(this);let o,{portOptions:s,wqOptions:{relayedFrom:u,...f}}=ce.call(this,e,t);(f.type!=="message"||f.live||f.bubbles||s.transfer?.length&&(this instanceof BroadcastChannel||this instanceof Q))&&(e={message:e,".wq":f}),t=s,o=u;let a=()=>{this._postMessage?this._postMessage(e,t,o):super.postMessage(e,t)};k(this).postAwaitsOpen?n.open.promise.then(a):a()}addRequestListener(e,t,n={}){let o=async s=>{let u=await t(s);for(let f of s.ports)f.postMessage(u)};this.addEventListener(e,o,n)}postRequest(e,t,n={}){let o;x(t)&&(n={once:!0,...t},o=new Promise(l=>{t=l}));let s=new MessageChannel;this.constructor.upgradeEvents(s.port1),s.port1.start();let{signal:u=null,once:f=!1,transfer:a=[],...i}=n;return s.port1.addEventListener("message",l=>t(l),{signal:u,once:f}),u?.addEventListener("abort",()=>{s.port1.close(),s.port2.close()}),this.postMessage(e,{...i,transfer:[s.port2].concat(a)}),o}relay({to:e,from:t,types:n="*",channel:o=null,resolveMessage:s=null,bidirectional:u=!1}={}){if(e&&t)throw new Error('Only one of "to" and "from" may be specified');if(t?e=this:t=this,e===t)throw new Error("Source and target ports cannot be the same");if(!(t instanceof O)||!(e instanceof O))throw new Error("Both source and target ports must be instance of MessagePortPlus.");if(typeof n!="function"&&!(n=[].concat(n)).length)throw new Error("Event types must be specified.");if(typeof o=="string")o={from:o};else if(x(o)){if(Object.keys(o).filter(l=>!["from","to"].includes(l)).length)throw new Error('Channel must be a string or an object of "from"/"to" members')}else if(o)throw new Error("Invalid channel parameter");let f=Je.call(t),a={targetPort:e,types:n,channel:o,resolveMessage:s};f.add(a);let i;return u&&(i=e.relay({to:t,types:n,channel:o&&{to:o.from,from:o.to},resolveMessage:s,bidirectional:!1})),()=>{f.delete(a),i?.()}}channel(e,t=null,{handshake:n=0,postAwaitsOpen:o=!1}={}){let s=new MessageChannel;return O.upgradeInPlace(s.port1,{handshake:n,postAwaitsOpen:o}),O.upgradeInPlace(s.port2,{handshake:n,postAwaitsOpen:o}),H.call(this).add(this.relay({channel:e,to:s.port2,bidirectional:!0,resolveMessage:t})),s.port2.start(),this.readyStateChange("close").then(()=>{s.port2.close()}),s.port1}projectMutations({from:e,to:t,...n}){if(!e||!t||typeof e=="string"&&typeof t=="string"||y(e)&&y(t))throw new Error('Invalid "from"/"to" parameters');if(typeof e=="string"){if(!y(t))throw new Error('Invalid "to" parameter. Object/array expected');return we.call(this,t,e,n)}if(typeof t=="string"){if(!y(e))throw new Error('Invalid "from" parameter. Object/array expected');return Qe.call(this,e,t,n)}throw new Error('Invalid "from"/"to" parameters')}get readyState(){let e=q.call(this);return e.close.state?"closed":e.open.state?"open":"connecting"}readyStateChange(e){if(!["open","messaging","close"].includes(e))throw new Error(`Invalid readyState query "${e}"`);return q.call(this)[e].promise}_autoStart(){let e=E(this),t=k(this);!e.get("internal_call")&&t.handshake===1&&this.start()}start(){let e=q.call(this);if(e.open.state)return;let t=E(this),n=k(this),o=i=>{i&&(e.open.state=!0,e.open.resolve(this));let l=t.get("handshake_channel");setTimeout(()=>{l?.port1.close(),l?.port2.close(),t.delete("handshake_channel")},100)};if(t.get("remote.open.called")){o(!0);return}if(t.get("start.called"))return;if(t.set("start.called",!0),this._start?this._start():super.start?.(),n.handshake===0){o(!0);return}let s=new MessageChannel;t.set("handshake_channel",s),s.port1.onmessage=i=>{this instanceof BroadcastChannel&&n.clientServerMode==="server"&&typeof i.data?.id=="string"&&t.get("clients").add(i.data.id),i.data?.isOpen,o(!0)};let{wqOptions:u}=ce.call(this),f=n.clientServerMode==="server"?"server":n.clientServerMode==="client"?t.get("client_id"):null,a={".wq":u,ping:"connect",id:f};this._postMessage?this._postMessage(a,{transfer:[s.port2]}):super.postMessage(a,{transfer:[s.port2]})}close(...e){let t=q.call(this);if(t.close.state)return;t.close.state=!0;let n=E(this),o=k(this);if(o.handshake>0&&!n.get("remote.close.called")&&(this instanceof BroadcastChannel||this instanceof MessagePort)){let{wqOptions:s}=ce.call(this),u=o.clientServerMode==="server"?"server":o.clientServerMode==="client"?n.get("client_id"):null,f={".wq":s,ping:"disconnect",id:u};this._postMessage?this._postMessage(f):super.postMessage(f)}this._close?this._close(...e):super.close(...e),t.close.resolve(this),Mt.call(this)}}}function le(r){return class extends Ke(r){static _hydrateMessage(e,t){if(typeof t.data?.[".wq"]?.numPorts!="number"||typeof t.data[".wq"].eventID!="string")return t;let n=H.call(e),o=t.data[".wq"].numPorts;Object.defineProperty(t,"ports",{value:[],configurable:!0});for(let s=0;s<o;s++){let u=e.channel(`${t.data[".wq"].eventID}:${s}`);t.ports.push(u)}return t}_postMessage(e,t={}){let{transfer:n=[],...o}=t;if(typeof e?.[".wq"]?.eventID=="string"){let s=H.call(this),u=n.filter(a=>a instanceof MessagePort),f=u.length;for(let a=0;a<f;a++)O.upgradeInPlace(u[a]),s.add(this.relay({channel:`${e[".wq"].eventID}:${a}`,to:u[a],bidirectional:!0})),u[a].start(),u[a].readyStateChange("close").then(()=>{let{wqOptions:i}=ce.call(this),l={".wq":i,ping:"disconnect"};this.postMessage(l,{type:`${e[".wq"].eventID}:${a}:message`})});e[".wq"].numPorts=f}return this.__postMessage(e,o)}}}function Et(r){if(r.propagationStopped)return;let e=E(this);e.get("parentNode")instanceof EventTarget&&(r.bubbles||e.get("parentNode")?.findPort?.(n=>n===this)&&r instanceof j)&&e.get("parentNode").dispatchEvent(r);let t=Je.call(this);if(t.size&&r instanceof j){let{type:n,eventID:o,data:s,live:u,bubbles:f,ports:a}=r,i=new WeakSet;for(let{targetPort:l,types:c,channel:m,resolveMessage:d}of t){if(i.has(l))continue;let p=n;m.from&&([,p]=new RegExp(`^${m.from.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}:([^:]+)$`).exec(n)||[],!p)||!(typeof c=="function"?c(p,this,l,m):[].concat(c).find(_=>_===p||_==="*"))||(i.add(l),l.postMessage(d?d(s,this,l,m):s,{transfer:a,type:m.to?`${m.to}:${p}`:p,eventID:o,bubbles:f,live:u,forwarded:!0,relayedFrom:this}))}}}function H(){let r=E(this);return r.has("garbage_collection")||r.set("garbage_collection",new Set),r.get("garbage_collection")}function Je(){let r=E(this);return r.has("downstream_registry")||r.set("downstream_registry",new Set),r.get("downstream_registry")}function q(){let r=E(this);if(!r.has("readystate_registry")){let e=t=>(t.promise=new Promise((n,o)=>(t.resolve=n,t.reject=o)),t);r.set("readystate_registry",{open:e({}),messaging:e({}),close:e({})})}return r.get("readystate_registry")}function Mt(){let r=E(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:u=!1,forwarded:f=!1,relayedFrom:a=null,signal:i=null,withArrayMethodDescriptors:l=!1,honourDoneMutationFlags:c=!1,...m}=e;return n||(n=`${t}-${(0|Math.random()*9e6).toString(36)}`),!s&&!f&&y(r)&&o&&!t?.endsWith(".mutate")&&(Qe.call(this,r,n,{signal:i,withArrayMethodDescriptors:l,honourDoneMutationFlags:c}),s=!0),{portOptions:m,wqOptions:{type:t,eventID:n,live:o,observing:s,honourDoneMutationFlags:c,bubbles:u,forwarded:f,relayedFrom:a}}}function Qe(r,e,{signal:t,withArrayMethodDescriptors:n=!0,honourDoneMutationFlags:o=!1}={}){if(!y(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(l=>(i=!i&&o&&l.detail?.done,{...l,target:void 0})),{type:`${e}.mutate`}),i&&u.abort())},u=S.observe(r,S.subtree(),s,{signal:t,withArrayMethodDescriptors:n});return H.call(this).add(u),u}function we(r,e,{signal:t,honourDoneMutationFlags:n=!1}={}){if(!y(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;S.batch(r,()=>{for(let i of f.data){if(a=!a&&n&&i.detail?.done,i.argumentsList){let l=i.path.length?S.get(r,S.path(...i.path)):r;S.proxy(l)[i.operation](...i.argumentsList);continue}if(i.key!=="length"||["set","defineProperty","deleteProperty"].includes(i.operation)){let l=i.path.length===1?r:S.get(r,S.path(...i.path.slice(0,-1)));i.type==="delete"?S.deleteProperty(l,i.key):S.set(l,i.key,i.value)}}}),a&&s()};this.addEventListener(`${e}.mutate`,o,{signal:t});let s=()=>this.removeEventListener(`${e}.mutate`,o);return H.call(this).add(s),s}var pe=class extends le(BroadcastChannel){constructor(e,{handshake:t=0,postAwaitsOpen:n=!1,clientServerMode:o=null,autoClose:s=!1}={}){super(e);let u=E(this);if(typeof t!="number")throw new Error("handshake must be a number");if(t<0||t>2)throw new Error("handshake must be between 0 and 2");if(o&&!["server","client"].includes(o))throw new Error('clientServerMode must be "server" or "client"');u.set("options",{handshake:t,postAwaitsOpen:n,clientServerMode:o,autoClose:s}),this.constructor.upgradeEvents(this),t===0&&this.start()}__postMessage(e,t){BroadcastChannel.prototype.postMessage.call(this,e)}};var me=class extends MessageChannel{constructor({handshake:e=0,postAwaitsOpen:t=!1}={}){super(),[this.port1,this.port2].forEach((n,o)=>{O.upgradeInPlace(n,{handshake:e,postAwaitsOpen:t})})}};var X=class extends O{#e=new Set;#t=!1;#r=!1;get length(){return this.#e.size}[Symbol.iterator](){return this.#e[Symbol.iterator]()}constructor({handshake:e=0,postAwaitsOpen:t=!1,autoClose:n=!1}={}){super({handshake:e,postAwaitsOpen:t,autoClose:n}),e===0&&this.start()}addPort(e,{enableBubbling:t=!0}={}){if(!(e instanceof O))throw new TypeError("Port must be a WQMessagePort instance.");let n=q.call(this);if(this.#r||n.close.state){let u=this.constructor.name;throw new Error(`Cannot add port to ${u}. ${u} is closed.`)}if(this.#e.has(e))return;this.#e.add(e);let o=E(e);if(t){if(o.get("parentNode"))throw new TypeError("Incoming port already has a parent node.");o.set("parentNode",this)}this.options.handshake&&(e.readyStateChange("open").then(()=>{n.open.state=!0,n.open.resolve(this)}),e.readyStateChange("close").then(()=>s())),(this.#t||n.open.state)&&e.start();let s=()=>{this.#e.has(e)&&(this.#e.delete(e),t&&o.get("parentNode")===this&&o.set("parentNode",null),this.#e.size===0&&k(this).autoClose&&(n.close.state=!0,n.close.resolve(this)))};return s}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)}start(){if(!this.#t){this.#t=!0;for(let e of this.#e)e.start();if(!this.options.handshake){let e=q.call(this);e.open.state=!0,e.open.resolve(this)}}}close(...e){if(!this.#r){this.#r=!0;for(let t of this.#e)t.close(...e);if(!this.options.handshake){let t=q.call(this);t.close.state=!0,t.close.resolve(this)}}}};var he=class extends X{#e;get channelSpec(){return this.#e}constructor(e=null,t={}){if(super(t),typeof e=="string")e={from:e,to:e};else if(x(e)){if(Object.keys(e).filter(n=>!["from","to"].includes(n)).length)throw new Error('Channel must be a string or an object of "from"/"to" members')}else if(e)throw new Error("Invalid channel parameter");this.#e=e}addPort(e,{resolveMessage:t=null,...n}={}){let o=(l,...c)=>t?t(l,...c):l,s=super.addPort(e,n),u=e.relay({channel:this.#e,to:this,bidirectional:!1,resolveMessage:o}),f=this.#e.from&&`${this.#e.from}:message`||"message";this.postMessage(o({event:"joins"},e,this),{type:f,relayedFrom:e});let a=()=>{this.postMessage(o({event:"leaves"},e,this),{type:f,relayedFrom:e})},i=()=>{a(),u(),s()};return e.readyStateChange("close").then(i),i}};globalThis.webqit||(globalThis.webqit={});Object.assign(globalThis.webqit,Re);})();
2
2
  //# sourceMappingURL=main.js.map