@stryke/capnp 0.12.43 → 0.12.45
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/bin/capnpc.mjs.map +1 -1
- package/dist/helpers-BoKbpcuO.mjs.map +1 -1
- package/dist/{rpc.d.cts → rpc-helpers.d.cts} +2 -2
- package/dist/rpc-helpers.d.cts.map +1 -0
- package/dist/{rpc.d.mts → rpc-helpers.d.mts} +2 -2
- package/dist/rpc-helpers.d.mts.map +1 -0
- package/dist/{rpc.mjs → rpc-helpers.mjs} +1 -1
- package/dist/rpc-helpers.mjs.map +1 -0
- package/package.json +43 -39
- package/dist/rpc.d.cts.map +0 -1
- package/dist/rpc.d.mts.map +0 -1
- package/dist/rpc.mjs.map +0 -1
- /package/dist/{rpc.cjs → rpc-helpers.cjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-helpers.mjs","names":[],"sources":["../../src/rpc-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { Conn, Deferred, DeferredTransport, Message } from \"capnp-es\";\nimport type { Message as RPCMessage } from \"capnp-es/capnp/rpc\";\nimport type { MessagePort } from \"node:worker_threads\";\nimport { MessageChannel } from \"node:worker_threads\";\n\n/**\n * A transport class for Cap'n Proto RPC that uses {@link MessageChannel} for communication.\n */\nexport class CapnpRPCMessageChannelTransport extends DeferredTransport {\n public port: MessagePort;\n\n public constructor(port: MessagePort) {\n super();\n\n this.port = port;\n\n this.port.on(\"message\", this.resolve);\n this.port.on(\"messageerror\", this.reject);\n this.port.on(\"close\", this.close);\n }\n\n /**\n * Closes the transport and removes all event listeners.\n */\n public override close = (): void => {\n this.port.off(\"message\", this.resolve);\n this.port.off(\"messageerror\", this.reject);\n this.port.off(\"close\", this.close);\n this.port.close();\n\n super.close();\n };\n\n /**\n * Sends a Cap'n Proto RPC message over the MessagePort.\n *\n * @param msg - The RPC message to send.\n */\n public sendMessage(msg: RPCMessage): void {\n const m = new Message();\n m.setRoot(msg);\n\n const buf = m.toArrayBuffer();\n this.port.postMessage(buf, [buf]);\n }\n}\n\n/**\n * A class that manages Cap'n Proto RPC connections.\n */\nexport class CapnpRPC {\n /**\n * A queue for deferred connections that are waiting to be accepted.\n *\n * @remarks\n * This is used to manage incoming connections when the accept method is called.\n */\n protected acceptQueue = new Array<Deferred<Conn>>();\n\n /**\n * A map of connections by their ID.\n *\n * @remarks\n * This is used to manage multiple connections and allows for easy retrieval by ID.\n */\n protected connections: Record<number, Conn> = {};\n\n /**\n * A queue for connections that are waiting to be accepted.\n *\n * @remarks\n * This is used to manage incoming connections when the accept method is called.\n */\n protected connectQueue = new Array<MessagePort>();\n\n /**\n * Creates a new {@link Conn} instance.\n *\n * @remarks\n * This class is used to manage connections and accept incoming connections using the {@link MessageChannel} API.\n */\n public connect(id = 0): Conn {\n if (this.connections[id] !== undefined) {\n return this.connections[id];\n }\n\n const ch = new MessageChannel();\n const conn = new Conn(new CapnpRPCMessageChannelTransport(ch.port1));\n const accept = this.acceptQueue.pop();\n this.connections[id] = conn;\n\n if (accept === undefined) {\n this.connectQueue.push(ch.port2);\n } else {\n accept.resolve(new Conn(new CapnpRPCMessageChannelTransport(ch.port2)));\n }\n\n return conn;\n }\n\n /**\n * Accepts a connection from the connect queue.\n *\n * @returns A promise that resolves to a Conn instance when a connection is accepted.\n * @throws If no connections are available in the connect queue.\n */\n public async accept(): Promise<Conn> {\n const port2 = this.connectQueue.pop();\n if (port2 !== undefined) {\n return Promise.resolve(\n new Conn(new CapnpRPCMessageChannelTransport(port2))\n );\n }\n\n const deferred = new Deferred<Conn>();\n this.acceptQueue.push(deferred);\n return deferred.promise;\n }\n\n /**\n * Closes all connections and clears the queues.\n *\n * @remarks\n * This method will reject all pending accept promises and close all\n * connections in the connect queue.\n */\n public close(): void {\n let i = this.acceptQueue.length;\n while (--i >= 0) {\n this.acceptQueue[i]?.reject();\n }\n\n i = this.connectQueue.length;\n while (--i >= 0) {\n this.connectQueue[i]!.close();\n }\n\n for (const id in this.connections) {\n this.connections[id]?.shutdown();\n }\n\n this.acceptQueue.length = 0;\n this.connectQueue.length = 0;\n this.connections = {};\n }\n}\n"],"mappings":"2JA0BA,IAAa,EAAb,cAAqD,CAAkB,CACrE,KAEA,YAAmB,EAAmB,CACpC,OAAO,CAEP,KAAK,KAAO,EAEZ,KAAK,KAAK,GAAG,UAAW,KAAK,QAAQ,CACrC,KAAK,KAAK,GAAG,eAAgB,KAAK,OAAO,CACzC,KAAK,KAAK,GAAG,QAAS,KAAK,MAAM,CAMnC,UAAoC,CAClC,KAAK,KAAK,IAAI,UAAW,KAAK,QAAQ,CACtC,KAAK,KAAK,IAAI,eAAgB,KAAK,OAAO,CAC1C,KAAK,KAAK,IAAI,QAAS,KAAK,MAAM,CAClC,KAAK,KAAK,OAAO,CAEjB,MAAM,OAAO,EAQf,YAAmB,EAAuB,CACxC,IAAM,EAAI,IAAI,EACd,EAAE,QAAQ,EAAI,CAEd,IAAM,EAAM,EAAE,eAAe,CAC7B,KAAK,KAAK,YAAY,EAAK,CAAC,EAAI,CAAC,GAOxB,EAAb,KAAsB,CAOpB,YAAwB,EAA2B,CAQnD,YAA8C,EAAE,CAQhD,aAAyB,EAAwB,CAQjD,QAAe,EAAK,EAAS,CAC3B,GAAI,KAAK,YAAY,KAAQ,IAAA,GAC3B,OAAO,KAAK,YAAY,GAG1B,IAAM,EAAK,IAAI,EACT,EAAO,IAAI,EAAK,IAAI,EAAgC,EAAG,MAAM,CAAC,CAC9D,EAAS,KAAK,YAAY,KAAK,CASrC,MARA,MAAK,YAAY,GAAM,EAEnB,IAAW,IAAA,GACb,KAAK,aAAa,KAAK,EAAG,MAAM,CAEhC,EAAO,QAAQ,IAAI,EAAK,IAAI,EAAgC,EAAG,MAAM,CAAC,CAAC,CAGlE,EAST,MAAa,QAAwB,CACnC,IAAM,EAAQ,KAAK,aAAa,KAAK,CACrC,GAAI,IAAU,IAAA,GACZ,OAAO,QAAQ,QACb,IAAI,EAAK,IAAI,EAAgC,EAAM,CAAC,CACrD,CAGH,IAAM,EAAW,IAAI,EAErB,OADA,KAAK,YAAY,KAAK,EAAS,CACxB,EAAS,QAUlB,OAAqB,CACnB,IAAI,EAAI,KAAK,YAAY,OACzB,KAAO,EAAE,GAAK,GACZ,KAAK,YAAY,IAAI,QAAQ,CAI/B,IADA,EAAI,KAAK,aAAa,OACf,EAAE,GAAK,GACZ,KAAK,aAAa,GAAI,OAAO,CAG/B,IAAK,IAAM,KAAM,KAAK,YACpB,KAAK,YAAY,IAAK,UAAU,CAGlC,KAAK,YAAY,OAAS,EAC1B,KAAK,aAAa,OAAS,EAC3B,KAAK,YAAc,EAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stryke/capnp",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.45",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A package to assist in running the Cap'n Proto compiler and creating Cap'n Proto serialization protocol schemas.",
|
|
6
6
|
"repository": {
|
|
@@ -43,52 +43,56 @@
|
|
|
43
43
|
"storm-capnpc-cjs": "bin/capnpc.cjs",
|
|
44
44
|
"storm-capnpc-esm": "bin/capnpc.mjs"
|
|
45
45
|
},
|
|
46
|
-
"main": "./dist/
|
|
47
|
-
"module": "./dist/
|
|
46
|
+
"main": "./dist/index.cjs",
|
|
47
|
+
"module": "./dist/index.mjs",
|
|
48
48
|
"exports": {
|
|
49
49
|
".": {
|
|
50
|
-
"
|
|
51
|
-
"
|
|
50
|
+
"import": { "types": "./dts/index.d.ts", "default": "./dist/index.mjs" },
|
|
51
|
+
"require": {
|
|
52
|
+
"types": "./dts/index.d.cts",
|
|
53
|
+
"default": "./dist/index.cjs"
|
|
54
|
+
},
|
|
55
|
+
"default": { "types": "./dts/index.d.ts", "default": "./dist/index.mjs" }
|
|
52
56
|
},
|
|
53
|
-
"./
|
|
54
|
-
"
|
|
55
|
-
"
|
|
57
|
+
"./index": {
|
|
58
|
+
"import": { "types": "./dts/index.d.ts", "default": "./dist/index.mjs" },
|
|
59
|
+
"require": {
|
|
60
|
+
"types": "./dts/index.d.cts",
|
|
61
|
+
"default": "./dist/index.cjs"
|
|
62
|
+
},
|
|
63
|
+
"default": { "types": "./dts/index.d.ts", "default": "./dist/index.mjs" }
|
|
56
64
|
},
|
|
57
|
-
"./
|
|
58
|
-
|
|
59
|
-
"
|
|
65
|
+
"./types": { "require": "./dist/types.cjs", "import": "./dist/types.mjs" },
|
|
66
|
+
"./compile": {
|
|
67
|
+
"require": "./dist/compile.cjs",
|
|
68
|
+
"import": "./dist/compile.mjs"
|
|
60
69
|
},
|
|
61
70
|
"./helpers": {
|
|
62
|
-
"require": "./dist/
|
|
63
|
-
"import": "./dist/
|
|
71
|
+
"require": "./dist/helpers.cjs",
|
|
72
|
+
"import": "./dist/helpers.mjs"
|
|
64
73
|
},
|
|
65
|
-
"./
|
|
66
|
-
"require": "./
|
|
67
|
-
"import": "./
|
|
74
|
+
"./rpc-helpers": {
|
|
75
|
+
"require": "./schemas/rpc-helpers.cjs",
|
|
76
|
+
"import": "./schemas/rpc-helpers.mjs"
|
|
68
77
|
},
|
|
69
|
-
"./
|
|
70
|
-
|
|
71
|
-
"
|
|
78
|
+
"./cpp": { "require": "./schemas/cpp.cjs", "import": "./schemas/cpp.mjs" },
|
|
79
|
+
"./persistent": {
|
|
80
|
+
"require": "./schemas/persistent.cjs",
|
|
81
|
+
"import": "./schemas/persistent.mjs"
|
|
72
82
|
},
|
|
83
|
+
"./rpc": { "require": "./schemas/rpc.cjs", "import": "./schemas/rpc.mjs" },
|
|
73
84
|
"./rpc-twoparty": {
|
|
74
|
-
"require": "./
|
|
75
|
-
"import": "./
|
|
85
|
+
"require": "./schemas/rpc-twoparty.cjs",
|
|
86
|
+
"import": "./schemas/rpc-twoparty.mjs"
|
|
76
87
|
},
|
|
77
88
|
"./schema": {
|
|
78
|
-
"require": "./
|
|
79
|
-
"import": "./
|
|
80
|
-
},
|
|
81
|
-
"./ts": {
|
|
82
|
-
"require": "./dist/schemas/ts.cjs",
|
|
83
|
-
"import": "./dist/schemas/ts.mjs"
|
|
84
|
-
},
|
|
85
|
-
"./types": {
|
|
86
|
-
"require": "./dist/src/types.cjs",
|
|
87
|
-
"import": "./dist/src/types.mjs"
|
|
89
|
+
"require": "./schemas/schema.cjs",
|
|
90
|
+
"import": "./schemas/schema.mjs"
|
|
88
91
|
},
|
|
89
|
-
"
|
|
92
|
+
"./ts": { "require": "./schemas/ts.cjs", "import": "./schemas/ts.mjs" },
|
|
93
|
+
"./*": "./dist/*"
|
|
90
94
|
},
|
|
91
|
-
"types": "./
|
|
95
|
+
"types": "./dts/index.d.ts",
|
|
92
96
|
"files": ["bin/**/*", "dist/**/*", "dts/**/*", "schemas/**/*", "vendor/**/*"],
|
|
93
97
|
"keywords": [
|
|
94
98
|
"capnp",
|
|
@@ -102,16 +106,16 @@
|
|
|
102
106
|
"peerDependencies": { "typescript": ">=4.0.0" },
|
|
103
107
|
"peerDependenciesMeta": { "typescript": { "optional": false } },
|
|
104
108
|
"dependencies": {
|
|
105
|
-
"@stryke/fs": "^0.33.
|
|
106
|
-
"@stryke/path": "^0.22.
|
|
109
|
+
"@stryke/fs": "^0.33.20",
|
|
110
|
+
"@stryke/path": "^0.22.11",
|
|
107
111
|
"defu": "^6.1.4",
|
|
108
112
|
"hex2dec": "^1.1.2",
|
|
109
113
|
"nanotar": "^0.2.0"
|
|
110
114
|
},
|
|
111
115
|
"devDependencies": {
|
|
112
|
-
"@storm-software/config": "^1.134.
|
|
113
|
-
"@storm-software/config-tools": "^1.188.
|
|
114
|
-
"@storm-software/testing-tools": "^1.119.
|
|
116
|
+
"@storm-software/config": "^1.134.60",
|
|
117
|
+
"@storm-software/config-tools": "^1.188.60",
|
|
118
|
+
"@storm-software/testing-tools": "^1.119.60",
|
|
115
119
|
"@types/node": "^24.10.1",
|
|
116
120
|
"capnp-es": "^0.0.11",
|
|
117
121
|
"chalk": "^5.6.2",
|
|
@@ -121,5 +125,5 @@
|
|
|
121
125
|
"tsx": "^4.21.0"
|
|
122
126
|
},
|
|
123
127
|
"publishConfig": { "access": "public" },
|
|
124
|
-
"gitHead": "
|
|
128
|
+
"gitHead": "fd38508c876b697a52a0e27df1478b41ae011583"
|
|
125
129
|
}
|
package/dist/rpc.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.cts","names":[],"sources":["../../src/rpc.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA0BA;AACe,cADF,+BAAA,SAAwC,iBAAA,CACtC;EAEY,IAAA,EAFZ,WAEY;EA2BD,WAAA,CAAA,IAAA,EA3BC,WA2BD;EA9B2B;;AA0CrD;EAOuB,KAAA,EAAA,GAAA,GAAA,IAAA;EAAA;;;;;EAiDU,WAAA,CAAA,GAAA,EApEP,OAoEO,CAAA,EAAA,IAAA;;;;;cAxDpB,QAAA;;;;;;;yBAOU,SAAA;;;;;;;yBAQE,eAAe;;;;;;;0BAQhB;;;;;;;wBAQE;;;;;;;YAyBD,QAAQ"}
|
package/dist/rpc.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.mts","names":[],"sources":["../../src/rpc.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA0BA;AACe,cADF,+BAAA,SAAwC,iBAAA,CACtC;EAEY,IAAA,EAFZ,WAEY;EA2BD,WAAA,CAAA,IAAA,EA3BC,WA2BD;EA9B2B;;AA0CrD;EAOuB,KAAA,EAAA,GAAA,GAAA,IAAA;EAAA;;;;;EAiDU,WAAA,CAAA,GAAA,EApEP,OAoEO,CAAA,EAAA,IAAA;;;;;cAxDpB,QAAA;;;;;;;yBAOU,SAAA;;;;;;;yBAQE,eAAe;;;;;;;0BAQhB;;;;;;;wBAQE;;;;;;;YAyBD,QAAQ"}
|
package/dist/rpc.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.mjs","names":[],"sources":["../../src/rpc.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { Conn, Deferred, DeferredTransport, Message } from \"capnp-es\";\nimport type { Message as RPCMessage } from \"capnp-es/capnp/rpc\";\nimport type { MessagePort } from \"node:worker_threads\";\nimport { MessageChannel } from \"node:worker_threads\";\n\n/**\n * A transport class for Cap'n Proto RPC that uses {@link MessageChannel} for communication.\n */\nexport class CapnpRPCMessageChannelTransport extends DeferredTransport {\n public port: MessagePort;\n\n public constructor(port: MessagePort) {\n super();\n\n this.port = port;\n\n this.port.on(\"message\", this.resolve);\n this.port.on(\"messageerror\", this.reject);\n this.port.on(\"close\", this.close);\n }\n\n /**\n * Closes the transport and removes all event listeners.\n */\n public override close = (): void => {\n this.port.off(\"message\", this.resolve);\n this.port.off(\"messageerror\", this.reject);\n this.port.off(\"close\", this.close);\n this.port.close();\n\n super.close();\n };\n\n /**\n * Sends a Cap'n Proto RPC message over the MessagePort.\n *\n * @param msg - The RPC message to send.\n */\n public sendMessage(msg: RPCMessage): void {\n const m = new Message();\n m.setRoot(msg);\n\n const buf = m.toArrayBuffer();\n this.port.postMessage(buf, [buf]);\n }\n}\n\n/**\n * A class that manages Cap'n Proto RPC connections.\n */\nexport class CapnpRPC {\n /**\n * A queue for deferred connections that are waiting to be accepted.\n *\n * @remarks\n * This is used to manage incoming connections when the accept method is called.\n */\n protected acceptQueue = new Array<Deferred<Conn>>();\n\n /**\n * A map of connections by their ID.\n *\n * @remarks\n * This is used to manage multiple connections and allows for easy retrieval by ID.\n */\n protected connections: Record<number, Conn> = {};\n\n /**\n * A queue for connections that are waiting to be accepted.\n *\n * @remarks\n * This is used to manage incoming connections when the accept method is called.\n */\n protected connectQueue = new Array<MessagePort>();\n\n /**\n * Creates a new {@link Conn} instance.\n *\n * @remarks\n * This class is used to manage connections and accept incoming connections using the {@link MessageChannel} API.\n */\n public connect(id = 0): Conn {\n if (this.connections[id] !== undefined) {\n return this.connections[id];\n }\n\n const ch = new MessageChannel();\n const conn = new Conn(new CapnpRPCMessageChannelTransport(ch.port1));\n const accept = this.acceptQueue.pop();\n this.connections[id] = conn;\n\n if (accept === undefined) {\n this.connectQueue.push(ch.port2);\n } else {\n accept.resolve(new Conn(new CapnpRPCMessageChannelTransport(ch.port2)));\n }\n\n return conn;\n }\n\n /**\n * Accepts a connection from the connect queue.\n *\n * @returns A promise that resolves to a Conn instance when a connection is accepted.\n * @throws If no connections are available in the connect queue.\n */\n public async accept(): Promise<Conn> {\n const port2 = this.connectQueue.pop();\n if (port2 !== undefined) {\n return Promise.resolve(\n new Conn(new CapnpRPCMessageChannelTransport(port2))\n );\n }\n\n const deferred = new Deferred<Conn>();\n this.acceptQueue.push(deferred);\n return deferred.promise;\n }\n\n /**\n * Closes all connections and clears the queues.\n *\n * @remarks\n * This method will reject all pending accept promises and close all\n * connections in the connect queue.\n */\n public close(): void {\n let i = this.acceptQueue.length;\n while (--i >= 0) {\n this.acceptQueue[i]?.reject();\n }\n\n i = this.connectQueue.length;\n while (--i >= 0) {\n this.connectQueue[i]!.close();\n }\n\n for (const id in this.connections) {\n this.connections[id]?.shutdown();\n }\n\n this.acceptQueue.length = 0;\n this.connectQueue.length = 0;\n this.connections = {};\n }\n}\n"],"mappings":"2JA0BA,IAAa,EAAb,cAAqD,CAAkB,CACrE,KAEA,YAAmB,EAAmB,CACpC,OAAO,CAEP,KAAK,KAAO,EAEZ,KAAK,KAAK,GAAG,UAAW,KAAK,QAAQ,CACrC,KAAK,KAAK,GAAG,eAAgB,KAAK,OAAO,CACzC,KAAK,KAAK,GAAG,QAAS,KAAK,MAAM,CAMnC,UAAoC,CAClC,KAAK,KAAK,IAAI,UAAW,KAAK,QAAQ,CACtC,KAAK,KAAK,IAAI,eAAgB,KAAK,OAAO,CAC1C,KAAK,KAAK,IAAI,QAAS,KAAK,MAAM,CAClC,KAAK,KAAK,OAAO,CAEjB,MAAM,OAAO,EAQf,YAAmB,EAAuB,CACxC,IAAM,EAAI,IAAI,EACd,EAAE,QAAQ,EAAI,CAEd,IAAM,EAAM,EAAE,eAAe,CAC7B,KAAK,KAAK,YAAY,EAAK,CAAC,EAAI,CAAC,GAOxB,EAAb,KAAsB,CAOpB,YAAwB,EAA2B,CAQnD,YAA8C,EAAE,CAQhD,aAAyB,EAAwB,CAQjD,QAAe,EAAK,EAAS,CAC3B,GAAI,KAAK,YAAY,KAAQ,IAAA,GAC3B,OAAO,KAAK,YAAY,GAG1B,IAAM,EAAK,IAAI,EACT,EAAO,IAAI,EAAK,IAAI,EAAgC,EAAG,MAAM,CAAC,CAC9D,EAAS,KAAK,YAAY,KAAK,CASrC,MARA,MAAK,YAAY,GAAM,EAEnB,IAAW,IAAA,GACb,KAAK,aAAa,KAAK,EAAG,MAAM,CAEhC,EAAO,QAAQ,IAAI,EAAK,IAAI,EAAgC,EAAG,MAAM,CAAC,CAAC,CAGlE,EAST,MAAa,QAAwB,CACnC,IAAM,EAAQ,KAAK,aAAa,KAAK,CACrC,GAAI,IAAU,IAAA,GACZ,OAAO,QAAQ,QACb,IAAI,EAAK,IAAI,EAAgC,EAAM,CAAC,CACrD,CAGH,IAAM,EAAW,IAAI,EAErB,OADA,KAAK,YAAY,KAAK,EAAS,CACxB,EAAS,QAUlB,OAAqB,CACnB,IAAI,EAAI,KAAK,YAAY,OACzB,KAAO,EAAE,GAAK,GACZ,KAAK,YAAY,IAAI,QAAQ,CAI/B,IADA,EAAI,KAAK,aAAa,OACf,EAAE,GAAK,GACZ,KAAK,aAAa,GAAI,OAAO,CAG/B,IAAK,IAAM,KAAM,KAAK,YACpB,KAAK,YAAY,IAAK,UAAU,CAGlC,KAAK,YAAY,OAAS,EAC1B,KAAK,aAAa,OAAS,EAC3B,KAAK,YAAc,EAAE"}
|
|
File without changes
|