@vielzeug/familiar 3.0.0 → 26.10.1

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.
Files changed (70) hide show
  1. package/README.md +1 -1
  2. package/dist/_pool-core.cjs +1 -1
  3. package/dist/_pool-core.cjs.map +1 -1
  4. package/dist/_pool-core.d.ts +38 -18
  5. package/dist/_pool-core.d.ts.map +1 -1
  6. package/dist/_pool-core.js +1 -117
  7. package/dist/_pool-core.js.map +1 -1
  8. package/dist/_pool.cjs +1 -1
  9. package/dist/_pool.cjs.map +1 -1
  10. package/dist/_pool.d.ts +1 -1
  11. package/dist/_pool.d.ts.map +1 -1
  12. package/dist/_pool.js +1 -158
  13. package/dist/_pool.js.map +1 -1
  14. package/dist/_stream-pool.cjs +1 -1
  15. package/dist/_stream-pool.cjs.map +1 -1
  16. package/dist/_stream-pool.d.ts +8 -3
  17. package/dist/_stream-pool.d.ts.map +1 -1
  18. package/dist/_stream-pool.js +1 -117
  19. package/dist/_stream-pool.js.map +1 -1
  20. package/dist/_timers.cjs +1 -1
  21. package/dist/_timers.cjs.map +1 -1
  22. package/dist/_timers.js +1 -7
  23. package/dist/_timers.js.map +1 -1
  24. package/dist/errors.cjs +1 -1
  25. package/dist/errors.cjs.map +1 -1
  26. package/dist/errors.d.ts +0 -7
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/errors.js +1 -33
  29. package/dist/errors.js.map +1 -1
  30. package/dist/familiar.cjs +1 -1
  31. package/dist/familiar.cjs.map +1 -1
  32. package/dist/familiar.iife.js +1 -1
  33. package/dist/familiar.iife.js.map +1 -1
  34. package/dist/familiar.js +1 -1
  35. package/dist/familiar.js.map +1 -1
  36. package/dist/index.d.ts +4 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -4
  39. package/dist/protocol.cjs +1 -1
  40. package/dist/protocol.cjs.map +1 -1
  41. package/dist/protocol.js +1 -78
  42. package/dist/protocol.js.map +1 -1
  43. package/dist/testing/testing.cjs +1 -1
  44. package/dist/testing/testing.cjs.map +1 -1
  45. package/dist/testing/testing.d.ts +1 -1
  46. package/dist/testing/testing.d.ts.map +1 -1
  47. package/dist/testing/testing.js +1 -76
  48. package/dist/testing/testing.js.map +1 -1
  49. package/dist/testing.js +1 -3
  50. package/dist/types.d.ts +16 -2
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/worker.cjs +1 -1
  53. package/dist/worker.cjs.map +1 -1
  54. package/dist/worker.d.ts +0 -8
  55. package/dist/worker.d.ts.map +1 -1
  56. package/dist/worker.js +1 -189
  57. package/dist/worker.js.map +1 -1
  58. package/package.json +6 -6
  59. package/dist/_dev.cjs +0 -2
  60. package/dist/_dev.cjs.map +0 -1
  61. package/dist/_dev.d.ts +0 -2
  62. package/dist/_dev.d.ts.map +0 -1
  63. package/dist/_dev.js +0 -6
  64. package/dist/_dev.js.map +0 -1
  65. package/dist/_queue.cjs +0 -2
  66. package/dist/_queue.cjs.map +0 -1
  67. package/dist/_queue.d.ts +0 -19
  68. package/dist/_queue.d.ts.map +0 -1
  69. package/dist/_queue.js +0 -54
  70. package/dist/_queue.js.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vielzeug/familiar",
3
- "version": "3.0.0",
4
- "description": "Typed ES module Worker pools with queueing, streaming, and AbortSignal cancellation",
3
+ "version": "26.10.1",
4
+ "description": "Web Worker pool with tasks, timeouts, cancellation",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/helmuthdu/vielzeug",
@@ -62,12 +62,12 @@
62
62
  "verify:exports": "node verify-exports.mjs"
63
63
  },
64
64
  "dependencies": {
65
- "@vielzeug/arsenal": "3.0.0"
65
+ "@vielzeug/arsenal": "26.10.1"
66
66
  },
67
67
  "devDependencies": {
68
- "@types/node": "^26.4.1",
68
+ "@types/node": "^26.6.2",
69
69
  "typescript": "^6.0.3",
70
- "vite": "^8.2.2",
71
- "vitest": "^5.0.0"
70
+ "vite": "^8.3.0",
71
+ "vitest": "^5.0.1"
72
72
  }
73
73
  }
package/dist/_dev.cjs DELETED
@@ -1,2 +0,0 @@
1
- function e(e){}exports.warn=e;
2
- //# sourceMappingURL=_dev.cjs.map
package/dist/_dev.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"_dev.cjs","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["const isDev = !(globalThis as { __FAMILIAR_PROD__?: boolean }).__FAMILIAR_PROD__;\n\n/** @internal */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/familiar] ${msg}`);\n}\n\n/** @internal — Run fn only in dev builds. Use when dev-only logic goes beyond a single warn() / error() call. */\nexport function devOnly(fn: () => void): void {\n if (isDev) fn();\n}\n"],"mappings":"AAGA,SAAgB,EAAK,EAAmB,CAExC"}
package/dist/_dev.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=_dev.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_dev.d.ts","sourceRoot":"","sources":["../src/_dev.ts"],"names":[],"mappings":""}
package/dist/_dev.js DELETED
@@ -1,6 +0,0 @@
1
- //#region src/_dev.ts
2
- function e(e) {}
3
- //#endregion
4
- export { e as warn };
5
-
6
- //# sourceMappingURL=_dev.js.map
package/dist/_dev.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"_dev.js","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["const isDev = !(globalThis as { __FAMILIAR_PROD__?: boolean }).__FAMILIAR_PROD__;\n\n/** @internal */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/familiar] ${msg}`);\n}\n\n/** @internal — Run fn only in dev builds. Use when dev-only logic goes beyond a single warn() / error() call. */\nexport function devOnly(fn: () => void): void {\n if (isDev) fn();\n}\n"],"mappings":";AAGA,SAAgB,EAAK,GAAmB,CAExC"}
package/dist/_queue.cjs DELETED
@@ -1,2 +0,0 @@
1
- var e=class{#e=[];#t=0;#n=0;get size(){return this.#t}enqueue(e,t){return t!==void 0&&this.#t>=t?!1:(this.#e.push({item:e,sequence:this.#n++}),this.#a(this.#e.length-1),this.#t+=1,!0)}remove(e){let t=this.#e.findIndex(t=>t.item===e);if(t===-1)return!1;let n=this.#e.pop();if(--this.#t,t<this.#e.length){this.#e[t]=n;let e=t-1>>1;t>0&&this.#i(this.#e[t],this.#e[e])?this.#a(t):this.#o(t)}return!0}shift(){if(this.#e.length!==0)return--this.#t,this.#r().item}#r(){let e=this.#e[0],t=this.#e.pop();return this.#e.length>0&&(this.#e[0]=t,this.#o(0)),e}#i(e,t){return e.item.priority===t.item.priority?e.sequence<t.sequence:e.item.priority>t.item.priority}#a(e){for(;e>0;){let t=e-1>>1;if(!this.#i(this.#e[e],this.#e[t]))return;[this.#e[e],this.#e[t]]=[this.#e[t],this.#e[e]],e=t}}#o(e){for(;;){let t=e*2+1,n=t+1,r=e;if(t<this.#e.length&&this.#i(this.#e[t],this.#e[r])&&(r=t),n<this.#e.length&&this.#i(this.#e[n],this.#e[r])&&(r=n),r===e)return;[this.#e[e],this.#e[r]]=[this.#e[r],this.#e[e]],e=r}}};exports.TaskQueue=e;
2
- //# sourceMappingURL=_queue.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_queue.cjs","names":[],"sources":["../src/_queue.ts"],"sourcesContent":["export type QueueItem<TInput, TOutput> = {\n aborted?: boolean;\n cleanupAbort?: () => void;\n input: TInput;\n priority: number;\n reject: (reason: unknown) => void;\n resolve: (value: TOutput) => void;\n signal?: AbortSignal;\n timeout?: number;\n transferables: Transferable[];\n};\n\ntype Entry<TInput, TOutput> = { readonly item: QueueItem<TInput, TOutput>; readonly sequence: number };\n\nexport class TaskQueue<TInput, TOutput> {\n readonly #heap: Entry<TInput, TOutput>[] = [];\n #live = 0;\n #sequence = 0;\n\n get size(): number {\n return this.#live;\n }\n\n enqueue(item: QueueItem<TInput, TOutput>, maxSize: number | undefined): boolean {\n if (maxSize !== undefined && this.#live >= maxSize) return false;\n\n this.#heap.push({ item, sequence: this.#sequence++ });\n this.#siftUp(this.#heap.length - 1);\n this.#live += 1;\n\n return true;\n }\n\n remove(item: QueueItem<TInput, TOutput>): boolean {\n const index = this.#heap.findIndex((entry) => entry.item === item);\n if (index === -1) return false;\n\n const last = this.#heap.pop()!;\n this.#live -= 1;\n\n if (index < this.#heap.length) {\n this.#heap[index] = last;\n const parent = (index - 1) >> 1;\n if (index > 0 && this.#before(this.#heap[index]!, this.#heap[parent]!)) this.#siftUp(index);\n else this.#siftDown(index);\n }\n\n return true;\n }\n\n shift(): QueueItem<TInput, TOutput> | undefined {\n if (this.#heap.length === 0) return undefined;\n this.#live -= 1;\n return this.#extract().item;\n }\n\n #extract(): Entry<TInput, TOutput> {\n const top = this.#heap[0]!;\n const last = this.#heap.pop()!;\n\n if (this.#heap.length > 0) {\n this.#heap[0] = last;\n this.#siftDown(0);\n }\n\n return top;\n }\n\n #before(a: Entry<TInput, TOutput>, b: Entry<TInput, TOutput>): boolean {\n return a.item.priority === b.item.priority ? a.sequence < b.sequence : a.item.priority > b.item.priority;\n }\n\n #siftUp(index: number): void {\n while (index > 0) {\n const parent = (index - 1) >> 1;\n\n if (!this.#before(this.#heap[index]!, this.#heap[parent]!)) return;\n\n [this.#heap[index], this.#heap[parent]] = [this.#heap[parent]!, this.#heap[index]!];\n index = parent;\n }\n }\n\n #siftDown(index: number): void {\n for (;;) {\n const left = index * 2 + 1;\n const right = left + 1;\n let next = index;\n\n if (left < this.#heap.length && this.#before(this.#heap[left]!, this.#heap[next]!)) next = left;\n\n if (right < this.#heap.length && this.#before(this.#heap[right]!, this.#heap[next]!)) next = right;\n\n if (next === index) return;\n\n [this.#heap[index], this.#heap[next]] = [this.#heap[next]!, this.#heap[index]!];\n index = next;\n }\n }\n}\n"],"mappings":"AAcA,IAAa,EAAb,KAAwC,CACtC,GAA2C,CAAC,EAC5C,GAAQ,EACR,GAAY,EAEZ,IAAI,MAAe,CACjB,OAAO,KAAK,EACd,CAEA,QAAQ,EAAkC,EAAsC,CAO9E,OANI,IAAY,IAAA,IAAa,KAAK,IAAS,EAAgB,IAE3D,KAAK,GAAM,KAAK,CAAE,OAAM,SAAU,KAAK,IAAY,CAAC,EACpD,KAAK,GAAQ,KAAK,GAAM,OAAS,CAAC,EAClC,KAAK,IAAS,EAEP,GACT,CAEA,OAAO,EAA2C,CAChD,IAAM,EAAQ,KAAK,GAAM,UAAW,GAAU,EAAM,OAAS,CAAI,EACjE,GAAI,IAAU,GAAI,MAAO,GAEzB,IAAM,EAAO,KAAK,GAAM,IAAI,EAG5B,GAFA,OAAK,GAED,EAAQ,KAAK,GAAM,OAAQ,CAC7B,KAAK,GAAM,GAAS,EACpB,IAAM,EAAU,EAAQ,GAAM,EAC1B,EAAQ,GAAK,KAAK,GAAQ,KAAK,GAAM,GAAS,KAAK,GAAM,EAAQ,EAAG,KAAK,GAAQ,CAAK,EACrF,KAAK,GAAU,CAAK,CAC3B,CAEA,MAAO,EACT,CAEA,OAAgD,CAC1C,QAAK,GAAM,SAAW,EAE1B,MADA,OAAK,GACE,KAAK,GAAS,CAAC,CAAC,IACzB,CAEA,IAAmC,CACjC,IAAM,EAAM,KAAK,GAAM,GACjB,EAAO,KAAK,GAAM,IAAI,EAO5B,OALI,KAAK,GAAM,OAAS,IACtB,KAAK,GAAM,GAAK,EAChB,KAAK,GAAU,CAAC,GAGX,CACT,CAEA,GAAQ,EAA2B,EAAoC,CACrE,OAAO,EAAE,KAAK,WAAa,EAAE,KAAK,SAAW,EAAE,SAAW,EAAE,SAAW,EAAE,KAAK,SAAW,EAAE,KAAK,QAClG,CAEA,GAAQ,EAAqB,CAC3B,KAAO,EAAQ,GAAG,CAChB,IAAM,EAAU,EAAQ,GAAM,EAE9B,GAAI,CAAC,KAAK,GAAQ,KAAK,GAAM,GAAS,KAAK,GAAM,EAAQ,EAAG,OAE5D,CAAC,KAAK,GAAM,GAAQ,KAAK,GAAM,IAAW,CAAC,KAAK,GAAM,GAAU,KAAK,GAAM,EAAO,EAClF,EAAQ,CACV,CACF,CAEA,GAAU,EAAqB,CAC7B,OAAS,CACP,IAAM,EAAO,EAAQ,EAAI,EACnB,EAAQ,EAAO,EACjB,EAAO,EAMX,GAJI,EAAO,KAAK,GAAM,QAAU,KAAK,GAAQ,KAAK,GAAM,GAAQ,KAAK,GAAM,EAAM,IAAG,EAAO,GAEvF,EAAQ,KAAK,GAAM,QAAU,KAAK,GAAQ,KAAK,GAAM,GAAS,KAAK,GAAM,EAAM,IAAG,EAAO,GAEzF,IAAS,EAAO,OAEpB,CAAC,KAAK,GAAM,GAAQ,KAAK,GAAM,IAAS,CAAC,KAAK,GAAM,GAAQ,KAAK,GAAM,EAAO,EAC9E,EAAQ,CACV,CACF,CACF"}
package/dist/_queue.d.ts DELETED
@@ -1,19 +0,0 @@
1
- export type QueueItem<TInput, TOutput> = {
2
- aborted?: boolean;
3
- cleanupAbort?: () => void;
4
- input: TInput;
5
- priority: number;
6
- reject: (reason: unknown) => void;
7
- resolve: (value: TOutput) => void;
8
- signal?: AbortSignal;
9
- timeout?: number;
10
- transferables: Transferable[];
11
- };
12
- export declare class TaskQueue<TInput, TOutput> {
13
- #private;
14
- get size(): number;
15
- enqueue(item: QueueItem<TInput, TOutput>, maxSize: number | undefined): boolean;
16
- remove(item: QueueItem<TInput, TOutput>): boolean;
17
- shift(): QueueItem<TInput, TOutput> | undefined;
18
- }
19
- //# sourceMappingURL=_queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_queue.d.ts","sourceRoot":"","sources":["../src/_queue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,IAAI;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B,CAAC;AAIF,qBAAa,SAAS,CAAC,MAAM,EAAE,OAAO;;IAKpC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAU/E,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAiBjD,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;CAiDhD"}
package/dist/_queue.js DELETED
@@ -1,54 +0,0 @@
1
- //#region src/_queue.ts
2
- var e = class {
3
- #e = [];
4
- #t = 0;
5
- #n = 0;
6
- get size() {
7
- return this.#t;
8
- }
9
- enqueue(e, t) {
10
- return t !== void 0 && this.#t >= t ? !1 : (this.#e.push({
11
- item: e,
12
- sequence: this.#n++
13
- }), this.#a(this.#e.length - 1), this.#t += 1, !0);
14
- }
15
- remove(e) {
16
- let t = this.#e.findIndex((t) => t.item === e);
17
- if (t === -1) return !1;
18
- let n = this.#e.pop();
19
- if (--this.#t, t < this.#e.length) {
20
- this.#e[t] = n;
21
- let e = t - 1 >> 1;
22
- t > 0 && this.#i(this.#e[t], this.#e[e]) ? this.#a(t) : this.#o(t);
23
- }
24
- return !0;
25
- }
26
- shift() {
27
- if (this.#e.length !== 0) return --this.#t, this.#r().item;
28
- }
29
- #r() {
30
- let e = this.#e[0], t = this.#e.pop();
31
- return this.#e.length > 0 && (this.#e[0] = t, this.#o(0)), e;
32
- }
33
- #i(e, t) {
34
- return e.item.priority === t.item.priority ? e.sequence < t.sequence : e.item.priority > t.item.priority;
35
- }
36
- #a(e) {
37
- for (; e > 0;) {
38
- let t = e - 1 >> 1;
39
- if (!this.#i(this.#e[e], this.#e[t])) return;
40
- [this.#e[e], this.#e[t]] = [this.#e[t], this.#e[e]], e = t;
41
- }
42
- }
43
- #o(e) {
44
- for (;;) {
45
- let t = e * 2 + 1, n = t + 1, r = e;
46
- if (t < this.#e.length && this.#i(this.#e[t], this.#e[r]) && (r = t), n < this.#e.length && this.#i(this.#e[n], this.#e[r]) && (r = n), r === e) return;
47
- [this.#e[e], this.#e[r]] = [this.#e[r], this.#e[e]], e = r;
48
- }
49
- }
50
- };
51
- //#endregion
52
- export { e as TaskQueue };
53
-
54
- //# sourceMappingURL=_queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_queue.js","names":[],"sources":["../src/_queue.ts"],"sourcesContent":["export type QueueItem<TInput, TOutput> = {\n aborted?: boolean;\n cleanupAbort?: () => void;\n input: TInput;\n priority: number;\n reject: (reason: unknown) => void;\n resolve: (value: TOutput) => void;\n signal?: AbortSignal;\n timeout?: number;\n transferables: Transferable[];\n};\n\ntype Entry<TInput, TOutput> = { readonly item: QueueItem<TInput, TOutput>; readonly sequence: number };\n\nexport class TaskQueue<TInput, TOutput> {\n readonly #heap: Entry<TInput, TOutput>[] = [];\n #live = 0;\n #sequence = 0;\n\n get size(): number {\n return this.#live;\n }\n\n enqueue(item: QueueItem<TInput, TOutput>, maxSize: number | undefined): boolean {\n if (maxSize !== undefined && this.#live >= maxSize) return false;\n\n this.#heap.push({ item, sequence: this.#sequence++ });\n this.#siftUp(this.#heap.length - 1);\n this.#live += 1;\n\n return true;\n }\n\n remove(item: QueueItem<TInput, TOutput>): boolean {\n const index = this.#heap.findIndex((entry) => entry.item === item);\n if (index === -1) return false;\n\n const last = this.#heap.pop()!;\n this.#live -= 1;\n\n if (index < this.#heap.length) {\n this.#heap[index] = last;\n const parent = (index - 1) >> 1;\n if (index > 0 && this.#before(this.#heap[index]!, this.#heap[parent]!)) this.#siftUp(index);\n else this.#siftDown(index);\n }\n\n return true;\n }\n\n shift(): QueueItem<TInput, TOutput> | undefined {\n if (this.#heap.length === 0) return undefined;\n this.#live -= 1;\n return this.#extract().item;\n }\n\n #extract(): Entry<TInput, TOutput> {\n const top = this.#heap[0]!;\n const last = this.#heap.pop()!;\n\n if (this.#heap.length > 0) {\n this.#heap[0] = last;\n this.#siftDown(0);\n }\n\n return top;\n }\n\n #before(a: Entry<TInput, TOutput>, b: Entry<TInput, TOutput>): boolean {\n return a.item.priority === b.item.priority ? a.sequence < b.sequence : a.item.priority > b.item.priority;\n }\n\n #siftUp(index: number): void {\n while (index > 0) {\n const parent = (index - 1) >> 1;\n\n if (!this.#before(this.#heap[index]!, this.#heap[parent]!)) return;\n\n [this.#heap[index], this.#heap[parent]] = [this.#heap[parent]!, this.#heap[index]!];\n index = parent;\n }\n }\n\n #siftDown(index: number): void {\n for (;;) {\n const left = index * 2 + 1;\n const right = left + 1;\n let next = index;\n\n if (left < this.#heap.length && this.#before(this.#heap[left]!, this.#heap[next]!)) next = left;\n\n if (right < this.#heap.length && this.#before(this.#heap[right]!, this.#heap[next]!)) next = right;\n\n if (next === index) return;\n\n [this.#heap[index], this.#heap[next]] = [this.#heap[next]!, this.#heap[index]!];\n index = next;\n }\n }\n}\n"],"mappings":";AAcA,IAAa,IAAb,MAAwC;CACtC,KAA2C,CAAC;CAC5C,KAAQ;CACR,KAAY;CAEZ,IAAI,OAAe;EACjB,OAAO,KAAK;CACd;CAEA,QAAQ,GAAkC,GAAsC;EAO9E,OANI,MAAY,KAAA,KAAa,KAAK,MAAS,IAAgB,MAE3D,KAAK,GAAM,KAAK;GAAE;GAAM,UAAU,KAAK;EAAY,CAAC,GACpD,KAAK,GAAQ,KAAK,GAAM,SAAS,CAAC,GAClC,KAAK,MAAS,GAEP;CACT;CAEA,OAAO,GAA2C;EAChD,IAAM,IAAQ,KAAK,GAAM,WAAW,MAAU,EAAM,SAAS,CAAI;EACjE,IAAI,MAAU,IAAI,OAAO;EAEzB,IAAM,IAAO,KAAK,GAAM,IAAI;EAG5B,IAFA,OAAK,IAED,IAAQ,KAAK,GAAM,QAAQ;GAC7B,KAAK,GAAM,KAAS;GACpB,IAAM,IAAU,IAAQ,KAAM;GAC9B,AAAI,IAAQ,KAAK,KAAK,GAAQ,KAAK,GAAM,IAAS,KAAK,GAAM,EAAQ,IAAG,KAAK,GAAQ,CAAK,IACrF,KAAK,GAAU,CAAK;EAC3B;EAEA,OAAO;CACT;CAEA,QAAgD;EAC1C,SAAK,GAAM,WAAW,GAE1B,OADA,OAAK,IACE,KAAK,GAAS,CAAC,CAAC;CACzB;CAEA,KAAmC;EACjC,IAAM,IAAM,KAAK,GAAM,IACjB,IAAO,KAAK,GAAM,IAAI;EAO5B,OALI,KAAK,GAAM,SAAS,MACtB,KAAK,GAAM,KAAK,GAChB,KAAK,GAAU,CAAC,IAGX;CACT;CAEA,GAAQ,GAA2B,GAAoC;EACrE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK;CAClG;CAEA,GAAQ,GAAqB;EAC3B,OAAO,IAAQ,IAAG;GAChB,IAAM,IAAU,IAAQ,KAAM;GAE9B,IAAI,CAAC,KAAK,GAAQ,KAAK,GAAM,IAAS,KAAK,GAAM,EAAQ,GAAG;GAG5D,AADA,CAAC,KAAK,GAAM,IAAQ,KAAK,GAAM,MAAW,CAAC,KAAK,GAAM,IAAU,KAAK,GAAM,EAAO,GAClF,IAAQ;EACV;CACF;CAEA,GAAU,GAAqB;EAC7B,SAAS;GACP,IAAM,IAAO,IAAQ,IAAI,GACnB,IAAQ,IAAO,GACjB,IAAO;GAMX,IAJI,IAAO,KAAK,GAAM,UAAU,KAAK,GAAQ,KAAK,GAAM,IAAQ,KAAK,GAAM,EAAM,MAAG,IAAO,IAEvF,IAAQ,KAAK,GAAM,UAAU,KAAK,GAAQ,KAAK,GAAM,IAAS,KAAK,GAAM,EAAM,MAAG,IAAO,IAEzF,MAAS,GAAO;GAGpB,AADA,CAAC,KAAK,GAAM,IAAQ,KAAK,GAAM,MAAS,CAAC,KAAK,GAAM,IAAQ,KAAK,GAAM,EAAO,GAC9E,IAAQ;EACV;CACF;AACF"}