@automerge/automerge-repo-network-websocket 2.0.0-alpha.20 → 2.0.0-alpha.23

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.
@@ -4,7 +4,7 @@ import { FromClientMessage } from "./messages.js";
4
4
  declare abstract class WebSocketNetworkAdapter extends NetworkAdapter {
5
5
  socket?: WebSocket;
6
6
  }
7
- export declare class BrowserWebSocketClientAdapter extends WebSocketNetworkAdapter {
7
+ export declare class WebSocketClientAdapter extends WebSocketNetworkAdapter {
8
8
  #private;
9
9
  readonly url: string;
10
10
  readonly retryInterval: number;
@@ -25,4 +25,4 @@ export declare class BrowserWebSocketClientAdapter extends WebSocketNetworkAdapt
25
25
  receiveMessage(messageBytes: Uint8Array): void;
26
26
  }
27
27
  export {};
28
- //# sourceMappingURL=BrowserWebSocketClientAdapter.d.ts.map
28
+ //# sourceMappingURL=WebSocketClientAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketClientAdapter.d.ts","sourceRoot":"","sources":["../src/WebSocketClientAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,MAAM,EACN,YAAY,EAEb,MAAM,gCAAgC,CAAA;AACvC,OAAO,SAAS,MAAM,eAAe,CAAA;AAIrC,OAAO,EACL,iBAAiB,EAKlB,MAAM,eAAe,CAAA;AAKtB,uBAAe,uBAAwB,SAAQ,cAAc;IAC3D,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,qBAAa,sBAAuB,SAAQ,uBAAuB;;aA4B/C,GAAG,EAAE,MAAM;aACX,aAAa;IAtB/B,OAAO;IAIP,SAAS;IAcT,YAAY,CAAC,EAAE,MAAM,CAAA;gBAGH,GAAG,EAAE,MAAM,EACX,aAAa,SAAO;IAMtC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY;IAqCnD,MAAM,aAKL;IAGD,OAAO,aAWN;IAED,SAAS,UAAW,SAAS,CAAC,YAAY,UAEzC;IAED,mFAAmF;IACnF,OAAO,UAED,KAAK,GACL,SAAS,CAAC,UAAU,UAezB;IAED,IAAI;IAUJ,UAAU;IAiBV,IAAI,CAAC,OAAO,EAAE,iBAAiB;IAe/B,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY;IAU9D,cAAc,CAAC,YAAY,EAAE,UAAU;CAiBxC"}
@@ -8,7 +8,7 @@ import { toArrayBuffer } from "./toArrayBuffer.js";
8
8
  class WebSocketNetworkAdapter extends NetworkAdapter {
9
9
  socket;
10
10
  }
11
- export class BrowserWebSocketClientAdapter extends WebSocketNetworkAdapter {
11
+ export class WebSocketClientAdapter extends WebSocketNetworkAdapter {
12
12
  url;
13
13
  retryInterval;
14
14
  #ready = false;
@@ -2,7 +2,7 @@ import WebSocket from "isomorphic-ws";
2
2
  import { type WebSocketServer } from "isomorphic-ws";
3
3
  import { NetworkAdapter, type PeerMetadata, type PeerId } from "@automerge/automerge-repo/slim";
4
4
  import { FromServerMessage } from "./messages.js";
5
- export declare class NodeWSServerAdapter extends NetworkAdapter {
5
+ export declare class WebSocketServerAdapter extends NetworkAdapter {
6
6
  #private;
7
7
  private server;
8
8
  private keepAliveInterval;
@@ -17,4 +17,4 @@ export declare class NodeWSServerAdapter extends NetworkAdapter {
17
17
  send(message: FromServerMessage): void;
18
18
  receiveMessage(messageBytes: Uint8Array, socket: WebSocket): void;
19
19
  }
20
- //# sourceMappingURL=NodeWSServerAdapter.d.ts.map
20
+ //# sourceMappingURL=WebSocketServerAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketServerAdapter.d.ts","sourceRoot":"","sources":["../src/WebSocketServerAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAKpD,OAAO,EAEL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,MAAM,EACZ,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,iBAAiB,EAElB,MAAM,eAAe,CAAA;AAOtB,qBAAa,sBAAuB,SAAQ,cAAc;;IAyBtD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,iBAAiB;IAzB3B,OAAO,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAK;IAQ7C,OAAO;IAIP,SAAS;gBAYC,MAAM,EAAE,eAAe,EACvB,iBAAiB,SAAO;IAKlC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY;IAyCnD,UAAU;IAQV,IAAI,CAAC,OAAO,EAAE,iBAAiB;IAqB/B,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS;CA2E3D"}
@@ -7,7 +7,7 @@ import { ProtocolV1 } from "./protocolVersion.js";
7
7
  import { assert } from "./assert.js";
8
8
  import { toArrayBuffer } from "./toArrayBuffer.js";
9
9
  const { encode, decode } = cborHelpers;
10
- export class NodeWSServerAdapter extends NetworkAdapter {
10
+ export class WebSocketServerAdapter extends NetworkAdapter {
11
11
  server;
12
12
  keepAliveInterval;
13
13
  sockets = {};
package/dist/index.d.ts CHANGED
@@ -2,9 +2,9 @@
2
2
  * A `NetworkAdapter` which connects to a remote host via WebSockets
3
3
  *
4
4
  * The websocket protocol requires a server to be listening and a client to
5
- * connect to the server. To that end the {@link NodeWSServerAdapter} does not
5
+ * connect to the server. To that end the {@link WebSocketServerAdapter} does not
6
6
  * make outbound connections and instead listens on the provided socket for
7
- * new connections whilst the {@link BrowserWebSocketClientAdapter} makes an
7
+ * new connections whilst the {@link WebSocketClientAdapter} makes an
8
8
  * outbound connection to the provided socket.
9
9
  *
10
10
  * Note that the "browser" and "node" naming is a bit misleading, both
@@ -12,8 +12,12 @@
12
12
  *
13
13
  * @module
14
14
  * */
15
- export { BrowserWebSocketClientAdapter } from "./BrowserWebSocketClientAdapter.js";
16
- export { NodeWSServerAdapter } from "./NodeWSServerAdapter.js";
15
+ export { WebSocketClientAdapter } from "./WebSocketClientAdapter.js";
16
+ export { WebSocketServerAdapter } from "./WebSocketServerAdapter.js";
17
+ /** @hidden */
18
+ export { WebSocketClientAdapter as BrowserWebSocketClientAdapter } from "./WebSocketClientAdapter.js";
19
+ /** @hidden */
20
+ export { WebSocketServerAdapter as NodeWSServerAdapter } from "./WebSocketServerAdapter.js";
17
21
  export type { FromClientMessage, FromServerMessage, JoinMessage, ErrorMessage, PeerMessage, } from "./messages.js";
18
22
  export type { ProtocolVersion } from "./protocolVersion.js";
19
23
  export { ProtocolV1 } from "./protocolVersion.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;KAaK;AACL,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAA;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;KAaK;AACL,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,cAAc;AACd,OAAO,EAAE,sBAAsB,IAAI,6BAA6B,EAAE,MAAM,6BAA6B,CAAA;AAErG,cAAc;AACd,OAAO,EAAE,sBAAsB,IAAI,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAE3F,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -2,9 +2,9 @@
2
2
  * A `NetworkAdapter` which connects to a remote host via WebSockets
3
3
  *
4
4
  * The websocket protocol requires a server to be listening and a client to
5
- * connect to the server. To that end the {@link NodeWSServerAdapter} does not
5
+ * connect to the server. To that end the {@link WebSocketServerAdapter} does not
6
6
  * make outbound connections and instead listens on the provided socket for
7
- * new connections whilst the {@link BrowserWebSocketClientAdapter} makes an
7
+ * new connections whilst the {@link WebSocketClientAdapter} makes an
8
8
  * outbound connection to the provided socket.
9
9
  *
10
10
  * Note that the "browser" and "node" naming is a bit misleading, both
@@ -12,6 +12,10 @@
12
12
  *
13
13
  * @module
14
14
  * */
15
- export { BrowserWebSocketClientAdapter } from "./BrowserWebSocketClientAdapter.js";
16
- export { NodeWSServerAdapter } from "./NodeWSServerAdapter.js";
15
+ export { WebSocketClientAdapter } from "./WebSocketClientAdapter.js";
16
+ export { WebSocketServerAdapter } from "./WebSocketServerAdapter.js";
17
+ /** @hidden */
18
+ export { WebSocketClientAdapter as BrowserWebSocketClientAdapter } from "./WebSocketClientAdapter.js";
19
+ /** @hidden */
20
+ export { WebSocketServerAdapter as NodeWSServerAdapter } from "./WebSocketServerAdapter.js";
17
21
  export { ProtocolV1 } from "./protocolVersion.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automerge/automerge-repo-network-websocket",
3
- "version": "2.0.0-alpha.20",
3
+ "version": "2.0.0-alpha.23",
4
4
  "description": "isomorphic node/browser Websocket network adapter for Automerge Repo",
5
5
  "repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-network-websocket",
6
6
  "author": "Peter van Hardenberg <pvh@pvh.ca>",
@@ -13,7 +13,7 @@
13
13
  "test": "vitest"
14
14
  },
15
15
  "dependencies": {
16
- "@automerge/automerge-repo": "2.0.0-alpha.20",
16
+ "@automerge/automerge-repo": "2.0.0-alpha.23",
17
17
  "cbor-x": "^1.3.0",
18
18
  "debug": "^4.3.4",
19
19
  "eventemitter3": "^5.0.1",
@@ -31,5 +31,5 @@
31
31
  "publishConfig": {
32
32
  "access": "public"
33
33
  },
34
- "gitHead": "d53bc37be0fd923ff40f3cf7e2bd06a0496ddb73"
34
+ "gitHead": "82a9bed7cc6a92940f3aa68167f6990123dda58e"
35
35
  }
@@ -23,7 +23,7 @@ abstract class WebSocketNetworkAdapter extends NetworkAdapter {
23
23
  socket?: WebSocket
24
24
  }
25
25
 
26
- export class BrowserWebSocketClientAdapter extends WebSocketNetworkAdapter {
26
+ export class WebSocketClientAdapter extends WebSocketNetworkAdapter {
27
27
  #ready = false
28
28
  #readyResolver?: () => void
29
29
  #readyPromise: Promise<void> = new Promise<void>(resolve => {
@@ -21,7 +21,7 @@ import { toArrayBuffer } from "./toArrayBuffer.js"
21
21
 
22
22
  const { encode, decode } = cborHelpers
23
23
 
24
- export class NodeWSServerAdapter extends NetworkAdapter {
24
+ export class WebSocketServerAdapter extends NetworkAdapter {
25
25
  sockets: { [peerId: PeerId]: WebSocket } = {}
26
26
 
27
27
  #ready = false
package/src/index.ts CHANGED
@@ -2,9 +2,9 @@
2
2
  * A `NetworkAdapter` which connects to a remote host via WebSockets
3
3
  *
4
4
  * The websocket protocol requires a server to be listening and a client to
5
- * connect to the server. To that end the {@link NodeWSServerAdapter} does not
5
+ * connect to the server. To that end the {@link WebSocketServerAdapter} does not
6
6
  * make outbound connections and instead listens on the provided socket for
7
- * new connections whilst the {@link BrowserWebSocketClientAdapter} makes an
7
+ * new connections whilst the {@link WebSocketClientAdapter} makes an
8
8
  * outbound connection to the provided socket.
9
9
  *
10
10
  * Note that the "browser" and "node" naming is a bit misleading, both
@@ -12,8 +12,15 @@
12
12
  *
13
13
  * @module
14
14
  * */
15
- export { BrowserWebSocketClientAdapter } from "./BrowserWebSocketClientAdapter.js"
16
- export { NodeWSServerAdapter } from "./NodeWSServerAdapter.js"
15
+ export { WebSocketClientAdapter } from "./WebSocketClientAdapter.js"
16
+ export { WebSocketServerAdapter } from "./WebSocketServerAdapter.js"
17
+
18
+ /** @hidden */
19
+ export { WebSocketClientAdapter as BrowserWebSocketClientAdapter } from "./WebSocketClientAdapter.js"
20
+
21
+ /** @hidden */
22
+ export { WebSocketServerAdapter as NodeWSServerAdapter } from "./WebSocketServerAdapter.js"
23
+
17
24
  export type {
18
25
  FromClientMessage,
19
26
  FromServerMessage,
@@ -20,8 +20,8 @@ import http from "http"
20
20
  import { getPortPromise as getAvailablePort } from "portfinder"
21
21
  import { describe, it } from "vitest"
22
22
  import WebSocket from "ws"
23
- import { BrowserWebSocketClientAdapter } from "../src/BrowserWebSocketClientAdapter.js"
24
- import { NodeWSServerAdapter } from "../src/NodeWSServerAdapter.js"
23
+ import { WebSocketClientAdapter } from "../src/WebSocketClientAdapter.js"
24
+ import { WebSocketServerAdapter } from "../src/WebSocketServerAdapter.js"
25
25
  import { encodeHeads } from "../../automerge-repo/dist/AutomergeUrl.js"
26
26
 
27
27
  describe("Websocket adapters", () => {
@@ -43,7 +43,7 @@ describe("Websocket adapters", () => {
43
43
  return { adapters: [aliceAdapter, serverAdapter, bobAdapter], teardown }
44
44
  })
45
45
 
46
- describe("BrowserWebSocketClientAdapter", () => {
46
+ describe("WebSocketClientAdapter", () => {
47
47
  it("should advertise the protocol versions it supports in its join message", async () => {
48
48
  const {
49
49
  serverSocket: socket,
@@ -180,7 +180,7 @@ describe("Websocket adapters", () => {
180
180
  const serverUrl = `ws://localhost:${port}`
181
181
 
182
182
  const retry = 100
183
- const browser = new BrowserWebSocketClientAdapter(serverUrl, retry)
183
+ const browser = new WebSocketClientAdapter(serverUrl, retry)
184
184
 
185
185
  const _browserRepo = new Repo({
186
186
  network: [browser],
@@ -191,7 +191,7 @@ describe("Websocket adapters", () => {
191
191
  const serverSocket = new WebSocket.Server({ server })
192
192
 
193
193
  await new Promise<void>(resolve => server.listen(port, resolve))
194
- const serverAdapter = new NodeWSServerAdapter(serverSocket, retry)
194
+ const serverAdapter = new WebSocketServerAdapter(serverSocket, retry)
195
195
 
196
196
  const serverRepo = new Repo({
197
197
  network: [serverAdapter],
@@ -216,7 +216,7 @@ describe("Websocket adapters", () => {
216
216
  })
217
217
 
218
218
  it("should correctly clear event handlers on reconnect", async () => {
219
- // This reproduces an issue where the BrowserWebSocketClientAdapter.connect
219
+ // This reproduces an issue where the WebSocketClientAdapter.connect
220
220
  // call registered event handlers on the websocket but didn't clear them
221
221
  // up again on a second call to connect. This combined with the reconnect
222
222
  // timer to produce the following sequence of events:
@@ -247,12 +247,12 @@ describe("Websocket adapters", () => {
247
247
  })
248
248
  })
249
249
 
250
- describe("NodeWSServerAdapter", () => {
250
+ describe("WebSocketServerAdapter", () => {
251
251
  const serverResponse = async (clientHello: Object) => {
252
252
  const { serverSocket, serverUrl } = await setup({
253
253
  clientCount: 0,
254
254
  })
255
- const server = new NodeWSServerAdapter(serverSocket)
255
+ const server = new WebSocketServerAdapter(serverSocket)
256
256
  const _serverRepo = new Repo({
257
257
  network: [server],
258
258
  peerId: serverPeerId,
@@ -314,13 +314,13 @@ describe("Websocket adapters", () => {
314
314
  const serverUrl = `ws://localhost:${port}`
315
315
 
316
316
  const retry = 100
317
- const browserAdapter = new BrowserWebSocketClientAdapter(serverUrl, retry)
317
+ const browserAdapter = new WebSocketClientAdapter(serverUrl, retry)
318
318
 
319
319
  const server = http.createServer()
320
320
  const serverSocket = new WebSocket.Server({ server })
321
321
 
322
322
  await new Promise<void>(resolve => server.listen(port, resolve))
323
- const serverAdapter = new NodeWSServerAdapter(serverSocket, retry)
323
+ const serverAdapter = new WebSocketServerAdapter(serverSocket, retry)
324
324
 
325
325
  const _browserRepo = new Repo({
326
326
  network: [browserAdapter],
@@ -349,7 +349,7 @@ describe("Websocket adapters", () => {
349
349
  await new Promise<void>(resolve => server.listen(port, resolve))
350
350
 
351
351
  // Create a repo listening on the socket
352
- const serverAdapter = new NodeWSServerAdapter(serverSocket)
352
+ const serverAdapter = new WebSocketServerAdapter(serverSocket)
353
353
  const serverRepo = new Repo({
354
354
  network: [serverAdapter],
355
355
  peerId: serverPeerId,
@@ -512,7 +512,7 @@ describe("Websocket adapters", () => {
512
512
  clientDoc = A.change(clientDoc, d => (d.foo = "qux"))
513
513
 
514
514
  // Now create a websocket sync server with the original document in it's storage
515
- const adapter = new NodeWSServerAdapter(socket)
515
+ const adapter = new WebSocketServerAdapter(socket)
516
516
  const repo = new Repo({
517
517
  network: [adapter],
518
518
  storage,
@@ -520,8 +520,7 @@ describe("Websocket adapters", () => {
520
520
  })
521
521
 
522
522
  // make a change to the handle on the sync server
523
- const handle = repo.find<{ foo: string }>(url)
524
- await handle.whenReady()
523
+ const handle = await repo.find<{ foo: string }>(url)
525
524
  handle.change(d => (d.foo = "baz"))
526
525
 
527
526
  // Okay, so now there is a document on both the client and the server
@@ -569,7 +568,7 @@ describe("Websocket adapters", () => {
569
568
  // Now, assume either the network or the server is going slow, so the
570
569
  // server thinks it has sent the response above, but for whatever reason
571
570
  // it never gets to the client. In that case the reconnect timer in the
572
- // BrowserWebSocketClientAdapter will fire and we'll create a new
571
+ // WebSocketClientAdapter will fire and we'll create a new
573
572
  // websocket and connect it. To simulate this we drop the above response
574
573
  // on the floor and start connecting again.
575
574
 
@@ -661,7 +660,7 @@ const setupServer = async (options: SetupOptions = {}) => {
661
660
  const server = http.createServer()
662
661
  const serverSocket = new WebSocket.Server({ server })
663
662
  await new Promise<void>(resolve => server.listen(port, resolve))
664
- const serverAdapter = new NodeWSServerAdapter(serverSocket, retryInterval)
663
+ const serverAdapter = new WebSocketServerAdapter(serverSocket, retryInterval)
665
664
  return { server, serverAdapter, serverSocket, serverUrl }
666
665
  }
667
666
 
@@ -672,7 +671,7 @@ const setupClient = async (options: SetupOptions = {}) => {
672
671
  port = await getPort(),
673
672
  } = options
674
673
  const serverUrl = `ws://localhost:${port}`
675
- return new BrowserWebSocketClientAdapter(serverUrl, retryInterval)
674
+ return new WebSocketClientAdapter(serverUrl, retryInterval)
676
675
  }
677
676
 
678
677
  const pause = (t = 0) =>
@@ -1 +0,0 @@
1
- {"version":3,"file":"BrowserWebSocketClientAdapter.d.ts","sourceRoot":"","sources":["../src/BrowserWebSocketClientAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,MAAM,EACN,YAAY,EAEb,MAAM,gCAAgC,CAAA;AACvC,OAAO,SAAS,MAAM,eAAe,CAAA;AAIrC,OAAO,EACL,iBAAiB,EAKlB,MAAM,eAAe,CAAA;AAKtB,uBAAe,uBAAwB,SAAQ,cAAc;IAC3D,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,qBAAa,6BAA8B,SAAQ,uBAAuB;;aA4BtD,GAAG,EAAE,MAAM;aACX,aAAa;IAtB/B,OAAO;IAIP,SAAS;IAcT,YAAY,CAAC,EAAE,MAAM,CAAA;gBAGH,GAAG,EAAE,MAAM,EACX,aAAa,SAAO;IAMtC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY;IAqCnD,MAAM,aAKL;IAGD,OAAO,aAWN;IAED,SAAS,UAAW,SAAS,CAAC,YAAY,UAEzC;IAED,mFAAmF;IACnF,OAAO,UAED,KAAK,GACL,SAAS,CAAC,UAAU,UAezB;IAED,IAAI;IAUJ,UAAU;IAiBV,IAAI,CAAC,OAAO,EAAE,iBAAiB;IAe/B,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY;IAU9D,cAAc,CAAC,YAAY,EAAE,UAAU;CAiBxC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeWSServerAdapter.d.ts","sourceRoot":"","sources":["../src/NodeWSServerAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAKpD,OAAO,EAEL,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,MAAM,EACZ,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,iBAAiB,EAElB,MAAM,eAAe,CAAA;AAOtB,qBAAa,mBAAoB,SAAQ,cAAc;;IAyBnD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,iBAAiB;IAzB3B,OAAO,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAK;IAQ7C,OAAO;IAIP,SAAS;gBAYC,MAAM,EAAE,eAAe,EACvB,iBAAiB,SAAO;IAKlC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY;IAyCnD,UAAU;IAQV,IAAI,CAAC,OAAO,EAAE,iBAAiB;IAqB/B,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS;CA2E3D"}