@tak-ps/node-tak 11.26.2 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,10 @@
10
10
 
11
11
  ## Version History
12
12
 
13
+ ### v12.0.0 - 2025-02-11
14
+
15
+ - :tada: Significantly improve memory performance of client when writing large amounts of data
16
+
13
17
  ### v11.26.2 - 2025-02-05
14
18
 
15
19
  - :bug: Wrap return type of Client list in TAKList object
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import EventEmitter from 'node:events';
2
1
  import type { Static } from '@sinclair/typebox';
3
- import CoT from '@tak-ps/node-cot';
4
2
  import type { CoTOptions } from '@tak-ps/node-cot';
3
+ import CoT from '@tak-ps/node-cot';
4
+ import EventEmitter from 'node:events';
5
5
  import type { TLSSocket } from 'node:tls';
6
6
  import TAKAPI from './lib/api.js';
7
7
  import { TAKAuth } from './lib/auth.js';
8
+ import { Queue } from './lib/utils/queue.js';
8
9
  export * from './lib/auth.js';
9
10
  export declare const REGEX_CONTROL: RegExp;
10
11
  export declare const REGEX_EVENT: RegExp;
@@ -12,10 +13,65 @@ export interface PartialCoT {
12
13
  event: string;
13
14
  remainder: string;
14
15
  }
16
+ /**
17
+ * Configuration options for a TAK connection.
18
+ *
19
+ * Performance-related options control the write pipeline:
20
+ *
21
+ * ```
22
+ * write(cots) process()
23
+ * ─────────── ─────────
24
+ * for each CoT: while queue has items:
25
+ * serialize to XML ──push()──► Ring pop socketBatchSize items
26
+ * (returns false ◄──────── Buffer join into one string
27
+ * when full) (capacity = socket.write(batch)
28
+ * writeQueueSize) stop if backpressure
29
+ * when full:
30
+ * setImmediate() yield triggered by:
31
+ * (lets process() drain) - write() calling process()
32
+ * - socket 'drain' event
33
+ * ```
34
+ *
35
+ * @example High-throughput bulk ingestion
36
+ * ```typescript
37
+ * const tak = await TAK.connect(url, auth, {
38
+ * writeQueueSize: 50_000, // large buffer absorbs bursts
39
+ * socketBatchSize: 128, // 128 strings per socket.write()
40
+ * });
41
+ * ```
42
+ *
43
+ * @example Low-latency real-time streams
44
+ * ```typescript
45
+ * const tak = await TAK.connect(url, auth, {
46
+ * writeQueueSize: 400, // small buffer keeps memory minimal
47
+ * socketBatchSize: 10, // flush to socket every 10 items
48
+ * });
49
+ * ```
50
+ */
15
51
  export type TAKOptions = {
52
+ /** Unique connection identifier. Appears in log messages for debugging.
53
+ * Useful when running multiple TAK connections in a single process.
54
+ * @default crypto.randomUUID() */
16
55
  id?: number | string;
56
+ /** Connection type label. Informational only — helps distinguish
57
+ * connections in logs when multiple are active.
58
+ * @default 'unknown' */
17
59
  type?: string;
60
+ /** Options passed through to `@tak-ps/node-cot` for CoT parsing
61
+ * (e.g., on incoming `'cot'` events). Does not affect the write pipeline. */
18
62
  cot?: CoTOptions;
63
+ /** Capacity of the ring buffer that sits between `write()` and `process()`.
64
+ * When the queue is full, `write()` yields via `setImmediate()` until
65
+ * `process()` drains space. Larger values allow more XML strings to be
66
+ * buffered, increasing throughput at the cost of higher peak memory.
67
+ * @default 10_000 */
68
+ writeQueueSize?: number;
69
+ /** How many pre-serialized XML strings are popped from the ring buffer
70
+ * and joined into a single `socket.write()` call in `process()`. Higher
71
+ * values reduce syscall overhead and improve TLS frame packing, but
72
+ * increase per-write latency and the size of each socket write.
73
+ * @default 64 */
74
+ socketBatchSize?: number;
19
75
  };
20
76
  export default class TAK extends EventEmitter {
21
77
  id: number | string;
@@ -24,12 +80,14 @@ export default class TAK extends EventEmitter {
24
80
  auth: Static<typeof TAKAuth>;
25
81
  open: boolean;
26
82
  destroyed: boolean;
27
- queue: string[];
28
83
  writing: boolean;
84
+ writeQueueSize: number;
85
+ socketBatchSize: number;
29
86
  cotOptions: CoTOptions;
30
87
  pingInterval?: ReturnType<typeof setTimeout>;
31
88
  client?: TLSSocket;
32
89
  version?: string;
90
+ queue: Queue<string>;
33
91
  /**
34
92
  * @param url - Full URL of Streaming COT Endpoint IE: "https://ops.cotak.gov:8089"
35
93
  * @param auth - TAK Certificate Pair
@@ -43,17 +101,47 @@ export default class TAK extends EventEmitter {
43
101
  reconnect(): Promise<void>;
44
102
  destroy(): void;
45
103
  ping(): Promise<void>;
46
- writer(body: string): Promise<boolean>;
47
- process(): Promise<void>;
48
104
  /**
49
- * Write a CoT to the TAK Connection
105
+ * Drain the queue to the socket.
106
+ *
107
+ * Pops pre-serialized XML strings from the ring buffer, batches them
108
+ * (up to `socketBatchSize` per call), and writes to the socket. Runs
109
+ * synchronously in a single event loop tick until the socket signals
110
+ * backpressure or the queue is empty.
111
+ *
112
+ * Called when the socket signals readiness:
113
+ * - `'drain'` event (socket buffer cleared, ready for more)
114
+ * - After `write()` enqueues new items
115
+ *
116
+ * Emits `'_flushed'` when the queue drains to zero, waking any
117
+ * pending `flush()` calls.
118
+ */
119
+ process(): void;
120
+ /**
121
+ * Write CoTs to the TAK connection.
50
122
  *
51
- * @param {CoT} cots CoT Object
123
+ * Serializes each CoT to XML upfront and stores the string in a bounded
124
+ * ring buffer. Fully caller-safe: CoT objects can be mutated or GC'd
125
+ * immediately after this returns.
126
+ * Resolves when all items are queued (not when sent over the wire).
127
+ * Use flush() to wait for delivery.
128
+ *
129
+ * @param cots Array of CoT objects to send
52
130
  */
53
131
  write(cots: CoT[]): Promise<void>;
132
+ /**
133
+ * Wait until all queued CoTs have been flushed to the socket.
134
+ *
135
+ * write() is a fast "enqueue" — it returns once items are in the queue,
136
+ * NOT once they've been sent over the wire.
137
+ *
138
+ * Resolves immediately if nothing is queued.
139
+ * Rejects if the connection is destroyed before flush completes.
140
+ */
141
+ flush(): Promise<void>;
54
142
  write_xml(body: string): void;
55
143
  static findCoT(str: string): null | PartialCoT;
56
144
  }
57
145
  export * from './lib/api.js';
58
146
  export { CommandOutputFormat } from './lib/commands.js';
59
- export { TAKAPI, CoT, };
147
+ export { CoT, TAKAPI };
package/dist/index.js CHANGED
@@ -1,12 +1,15 @@
1
+ import CoT, { CoTParser } from '@tak-ps/node-cot';
1
2
  import EventEmitter from 'node:events';
2
3
  import tls from 'node:tls';
3
- import CoT, { CoTParser } from '@tak-ps/node-cot';
4
4
  import TAKAPI from './lib/api.js';
5
+ import { Queue } from './lib/utils/queue.js';
5
6
  export * from './lib/auth.js';
6
7
  /* eslint-disable no-control-regex */
7
8
  export const REGEX_CONTROL = /[\u000B-\u001F\u007F-\u009F]/g;
8
9
  // Match <event .../> or <event> but not <events>
9
10
  export const REGEX_EVENT = /(<event[ >][\s\S]*?<\/event>)([\s\S]*)/;
11
+ const DEFAULT_WRITE_QUEUE_SIZE = 10_000;
12
+ const DEFAULT_SOCKET_BATCH_SIZE = 64;
10
13
  export default class TAK extends EventEmitter {
11
14
  id;
12
15
  type;
@@ -14,12 +17,18 @@ export default class TAK extends EventEmitter {
14
17
  auth;
15
18
  open;
16
19
  destroyed;
17
- queue;
18
20
  writing;
21
+ writeQueueSize;
22
+ socketBatchSize;
19
23
  cotOptions;
20
24
  pingInterval;
21
25
  client;
22
26
  version;
27
+ // Hybrid pipeline:
28
+ // write() serializes CoTs upfront into a bounded ring buffer of XML strings.
29
+ // process() drains the ring buffer to the socket, driven by drain events.
30
+ // Fully caller-safe: CoT objects can be mutated/GC'd after write() returns.
31
+ queue;
23
32
  /**
24
33
  * @param url - Full URL of Streaming COT Endpoint IE: "https://ops.cotak.gov:8089"
25
34
  * @param auth - TAK Certificate Pair
@@ -36,10 +45,13 @@ export default class TAK extends EventEmitter {
36
45
  this.url = url;
37
46
  this.auth = auth;
38
47
  this.writing = false;
48
+ this.writeQueueSize = opts.writeQueueSize || DEFAULT_WRITE_QUEUE_SIZE;
49
+ this.socketBatchSize =
50
+ opts.socketBatchSize || DEFAULT_SOCKET_BATCH_SIZE;
39
51
  this.cotOptions = opts.cot || {};
40
52
  this.open = false;
41
53
  this.destroyed = false;
42
- this.queue = [];
54
+ this.queue = new Queue(this.writeQueueSize);
43
55
  }
44
56
  static async connect(url, auth, opts = {}) {
45
57
  const tak = new TAK(url, auth, opts);
@@ -76,23 +88,28 @@ export default class TAK extends EventEmitter {
76
88
  this.ping();
77
89
  });
78
90
  let buff = '';
79
- this.client.on('data', async (data) => {
91
+ this.client
92
+ .on('data', async (data) => {
80
93
  // Eventually Parse ProtoBuf
81
94
  buff = buff + data.toString();
82
95
  let result = TAK.findCoT(buff);
83
96
  while (result && result.event) {
84
97
  try {
85
- const cot = await CoTParser.from_xml(result.event, this.cotOptions);
98
+ const cot = CoTParser.from_xml(result.event, this.cotOptions);
86
99
  if (cot.raw.event._attributes.type === 't-x-c-t-r') {
87
100
  this.open = true;
88
101
  this.emit('ping');
89
102
  }
90
- else if (cot.raw.event._attributes.type === 't-x-takp-v'
91
- && cot.raw.event.detail
92
- && cot.raw.event.detail.TakControl
93
- && cot.raw.event.detail.TakControl.TakServerVersionInfo
94
- && cot.raw.event.detail.TakControl.TakServerVersionInfo._attributes) {
95
- this.version = cot.raw.event.detail.TakControl.TakServerVersionInfo._attributes.serverVersion;
103
+ else if (cot.raw.event._attributes.type ===
104
+ 't-x-takp-v' &&
105
+ cot.raw.event.detail &&
106
+ cot.raw.event.detail.TakControl &&
107
+ cot.raw.event.detail.TakControl
108
+ .TakServerVersionInfo &&
109
+ cot.raw.event.detail.TakControl
110
+ .TakServerVersionInfo._attributes) {
111
+ this.version =
112
+ cot.raw.event.detail.TakControl.TakServerVersionInfo._attributes.serverVersion;
96
113
  }
97
114
  else {
98
115
  this.emit('cot', cot);
@@ -104,13 +121,28 @@ export default class TAK extends EventEmitter {
104
121
  buff = result.remainder;
105
122
  result = TAK.findCoT(buff);
106
123
  }
107
- }).on('timeout', () => {
124
+ })
125
+ .on('timeout', () => {
108
126
  this.emit('timeout');
109
- }).on('error', (err) => {
127
+ })
128
+ .on('error', (err) => {
129
+ console.error(`[socket] error:`, err.message);
110
130
  this.emit('error', err);
111
- }).on('end', () => {
131
+ })
132
+ .on('end', () => {
112
133
  this.open = false;
113
134
  this.emit('end');
135
+ if (!this.destroyed) {
136
+ this.destroy();
137
+ }
138
+ })
139
+ .on('close', () => {
140
+ if (!this.destroyed) {
141
+ this.destroy();
142
+ }
143
+ })
144
+ .on('drain', () => {
145
+ this.process();
114
146
  });
115
147
  this.pingInterval = setInterval(() => {
116
148
  this.ping();
@@ -136,59 +168,140 @@ export default class TAK extends EventEmitter {
136
168
  clearInterval(this.pingInterval);
137
169
  this.pingInterval = undefined;
138
170
  }
171
+ // Unblock any flush() waiters
172
+ this.emit('_flushed');
139
173
  }
140
174
  async ping() {
141
175
  this.write([CoT.ping()]);
142
176
  }
143
- writer(body) {
144
- return new Promise((resolve, reject) => {
145
- if (!this.client)
146
- return reject(new Error('A Connection Client must first be created before it can be written'));
147
- const res = this.client.write(body + '\n', () => {
148
- return resolve(res);
149
- });
150
- });
151
- }
152
- async process() {
177
+ /**
178
+ * Drain the queue to the socket.
179
+ *
180
+ * Pops pre-serialized XML strings from the ring buffer, batches them
181
+ * (up to `socketBatchSize` per call), and writes to the socket. Runs
182
+ * synchronously in a single event loop tick until the socket signals
183
+ * backpressure or the queue is empty.
184
+ *
185
+ * Called when the socket signals readiness:
186
+ * - `'drain'` event (socket buffer cleared, ready for more)
187
+ * - After `write()` enqueues new items
188
+ *
189
+ * Emits `'_flushed'` when the queue drains to zero, waking any
190
+ * pending `flush()` calls.
191
+ */
192
+ process() {
193
+ if (this.writing)
194
+ return;
195
+ if (!this.client || this.destroyed)
196
+ return;
153
197
  this.writing = true;
154
- while (this.queue.length) {
155
- const body = this.queue.shift();
156
- if (!body)
157
- continue;
158
- await this.writer(body);
198
+ try {
199
+ while (this.queue.length > 0) {
200
+ if (this.destroyed || !this.client)
201
+ break;
202
+ if (this.client.writableNeedDrain)
203
+ break;
204
+ const batchCount = Math.min(this.socketBatchSize, this.queue.length);
205
+ const parts = new Array(batchCount);
206
+ for (let i = 0; i < batchCount; i++) {
207
+ const xml = this.queue.pop();
208
+ if (!xml)
209
+ break;
210
+ parts[i] = xml;
211
+ }
212
+ const ok = this.client.write(parts.join('\n') + '\n');
213
+ if (!ok)
214
+ break;
215
+ }
159
216
  }
160
- await this.writer('');
161
- if (this.queue.length) {
162
- process.nextTick(() => {
163
- this.process();
164
- });
217
+ catch (err) {
218
+ this.destroy();
219
+ this.emit('error', err);
165
220
  }
166
- else {
221
+ finally {
167
222
  this.writing = false;
223
+ // Safety net: if a drain event fired while writing=true (and was
224
+ // therefore ignored), re-check. If the socket has capacity, reschedule
225
+ // on the next event loop turn so I/O callbacks can run first.
226
+ if (this.queue.length > 0 &&
227
+ !this.destroyed &&
228
+ this.client &&
229
+ !this.client.writableNeedDrain) {
230
+ setImmediate(() => this.process());
231
+ }
232
+ if (this.queue.length === 0) {
233
+ this.emit('_flushed');
234
+ }
168
235
  }
169
236
  }
170
237
  /**
171
- * Write a CoT to the TAK Connection
238
+ * Write CoTs to the TAK connection.
239
+ *
240
+ * Serializes each CoT to XML upfront and stores the string in a bounded
241
+ * ring buffer. Fully caller-safe: CoT objects can be mutated or GC'd
242
+ * immediately after this returns.
243
+ * Resolves when all items are queued (not when sent over the wire).
244
+ * Use flush() to wait for delivery.
172
245
  *
173
- * @param {CoT} cots CoT Object
246
+ * @param cots Array of CoT objects to send
174
247
  */
175
248
  async write(cots) {
176
- for (const cot of cots) {
177
- this.queue.push(await CoTParser.to_xml(cot));
178
- }
179
- if (this.queue.length && !this.writing) {
249
+ for (let i = 0; i < cots.length;) {
250
+ if (this.destroyed)
251
+ return;
252
+ // Serialize upfront and push XML strings into the ring buffer
253
+ while (i < cots.length &&
254
+ this.queue.push(CoTParser.to_xml(cots[i]))) {
255
+ i++;
256
+ }
257
+ // Kick process to start draining
180
258
  this.process();
259
+ // Queue full — yield to let process() drain via I/O callbacks,
260
+ // then retry on the next event loop turn.
261
+ if (i < cots.length) {
262
+ await new Promise((resolve) => setImmediate(resolve));
263
+ }
181
264
  }
182
265
  }
266
+ /**
267
+ * Wait until all queued CoTs have been flushed to the socket.
268
+ *
269
+ * write() is a fast "enqueue" — it returns once items are in the queue,
270
+ * NOT once they've been sent over the wire.
271
+ *
272
+ * Resolves immediately if nothing is queued.
273
+ * Rejects if the connection is destroyed before flush completes.
274
+ */
275
+ async flush() {
276
+ if (this.queue.length === 0 && !this.writing)
277
+ return;
278
+ return new Promise((resolve, reject) => {
279
+ const check = () => {
280
+ if (this.destroyed) {
281
+ cleanup();
282
+ reject(new Error('connection destroyed before flush completed'));
283
+ }
284
+ else if (this.queue.length === 0 && !this.writing) {
285
+ cleanup();
286
+ resolve();
287
+ }
288
+ };
289
+ const cleanup = () => {
290
+ this.removeListener('_flushed', check);
291
+ };
292
+ this.on('_flushed', check);
293
+ check();
294
+ });
295
+ }
183
296
  write_xml(body) {
184
297
  this.queue.push(body);
185
- if (this.queue.length && !this.writing) {
298
+ if (this.queue.length > 0 && !this.writing) {
186
299
  this.process();
187
300
  }
188
301
  }
189
302
  // https://github.com/vidterra/multitak/blob/main/app/lib/helper.js#L4
190
303
  static findCoT(str) {
191
- str = str.replace(REGEX_CONTROL, "");
304
+ str = str.replace(REGEX_CONTROL, '');
192
305
  const match = str.match(REGEX_EVENT); // find first CoT
193
306
  if (!match)
194
307
  return null;
@@ -200,5 +313,5 @@ export default class TAK extends EventEmitter {
200
313
  }
201
314
  export * from './lib/api.js';
202
315
  export { CommandOutputFormat } from './lib/commands.js';
203
- export { TAKAPI, CoT, };
316
+ export { CoT, TAKAPI };
204
317
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export declare const Group: import("@sinclair/typebox").TObject<{
12
12
  }>;
13
13
  export declare const GroupListInput: import("@sinclair/typebox").TObject<{
14
14
  useCache: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
15
+ sendLatestSA: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
15
16
  }>;
16
17
  export declare const TAKList_Group: import("@sinclair/typebox").TObject<{
17
18
  version: import("@sinclair/typebox").TString;
@@ -11,13 +11,14 @@ export const Group = Type.Object({
11
11
  description: Type.Optional(Type.String())
12
12
  });
13
13
  export const GroupListInput = Type.Object({
14
- useCache: Type.Optional(Type.Boolean())
14
+ useCache: Type.Optional(Type.Boolean()),
15
+ sendLatestSA: Type.Optional(Type.Boolean())
15
16
  });
16
17
  export const TAKList_Group = TAKList(Group);
17
18
  export default class GroupCommands extends Commands {
18
19
  schema = {
19
20
  list: {
20
- description: 'List Missions',
21
+ description: 'List Groups',
21
22
  params: Type.Object({}),
22
23
  query: Type.Object({}),
23
24
  formats: [CommandOutputFormat.JSON]
@@ -1 +1 @@
1
- {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../lib/api/groups.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../lib/api/groups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare class Queue<T> {
2
+ private buffer;
3
+ private capacity;
4
+ private head;
5
+ private tail;
6
+ private _length;
7
+ constructor(capacity?: number);
8
+ push(item: T): boolean;
9
+ peek(): T | undefined;
10
+ pop(): T | undefined;
11
+ get length(): number;
12
+ get isFull(): boolean;
13
+ }
@@ -0,0 +1,47 @@
1
+ // A fixed-size Ring Buffer (Circular Queue) for zero-allocation operations.
2
+ export class Queue {
3
+ buffer;
4
+ capacity;
5
+ head;
6
+ tail;
7
+ _length;
8
+ constructor(capacity = 10000) {
9
+ this.capacity = capacity;
10
+ this.buffer = new Array(capacity);
11
+ this.head = 0;
12
+ this.tail = 0;
13
+ this._length = 0;
14
+ }
15
+ // Add item to the queue. Returns false if full.
16
+ push(item) {
17
+ if (this._length >= this.capacity) {
18
+ return false;
19
+ }
20
+ this.buffer[this.tail] = item;
21
+ this.tail = (this.tail + 1) % this.capacity;
22
+ this._length++;
23
+ return true;
24
+ }
25
+ // Peek at the next item
26
+ peek() {
27
+ if (this._length === 0)
28
+ return undefined;
29
+ return this.buffer[this.head];
30
+ }
31
+ pop() {
32
+ if (this._length === 0)
33
+ return undefined;
34
+ const item = this.buffer[this.head];
35
+ this.buffer[this.head] = undefined; // Clear reference for GC
36
+ this.head = (this.head + 1) % this.capacity;
37
+ this._length--;
38
+ return item;
39
+ }
40
+ get length() {
41
+ return this._length;
42
+ }
43
+ get isFull() {
44
+ return this._length === this.capacity;
45
+ }
46
+ }
47
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../lib/utils/queue.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,OAAO,KAAK;IACN,MAAM,CAAoB;IAC1B,QAAQ,CAAS;IACjB,IAAI,CAAS;IACb,IAAI,CAAS;IACb,OAAO,CAAS;IAExB,YAAY,WAAmB,KAAK;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,IAAO;QACR,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,wBAAwB;IACxB,IAAI;QACA,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,GAAG;QACC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,yBAAyB;QAC7D,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC;IAC1C,CAAC;CACJ"}
@@ -0,0 +1 @@
1
+ export {};