ziex 0.1.0-dev.1360 → 0.1.0-dev.1367

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.
@@ -483,20 +483,48 @@ __export(exports_kv, {
483
483
  createMemoryKV: () => createMemoryKV,
484
484
  createKVImports: () => createKVImports
485
485
  });
486
+ function putOptions(ttlSeconds) {
487
+ if (ttlSeconds < 60)
488
+ return;
489
+ return { expirationTtl: ttlSeconds };
490
+ }
486
491
  function createMemoryKV() {
487
492
  const store = new Map;
493
+ function read(key) {
494
+ const entry = store.get(key);
495
+ if (!entry)
496
+ return null;
497
+ if (entry.expiresAt !== undefined && Date.now() >= entry.expiresAt) {
498
+ store.delete(key);
499
+ return null;
500
+ }
501
+ return entry.value;
502
+ }
503
+ function write(key, value, options) {
504
+ let expiresAt;
505
+ if (options?.expiration !== undefined) {
506
+ expiresAt = options.expiration * 1000;
507
+ } else if (options?.expirationTtl !== undefined) {
508
+ expiresAt = Date.now() + options.expirationTtl * 1000;
509
+ }
510
+ store.set(key, { value, expiresAt });
511
+ }
488
512
  return {
489
513
  async get(key) {
490
- return store.get(key) ?? null;
514
+ return read(key);
491
515
  },
492
- async put(key, value) {
493
- store.set(key, value);
516
+ async put(key, value, options) {
517
+ write(key, value, options);
494
518
  },
495
519
  async delete(key) {
496
520
  store.delete(key);
497
521
  },
498
522
  async list(options) {
499
- const keys = [...store.keys()].filter((k) => !options?.prefix || k.startsWith(options.prefix)).map((name) => ({ name }));
523
+ const keys = [...store.keys()].filter((k) => {
524
+ if (options?.prefix && !k.startsWith(options.prefix))
525
+ return false;
526
+ return read(k) !== null;
527
+ }).map((name) => ({ name }));
500
528
  return { keys };
501
529
  }
502
530
  };
@@ -536,11 +564,11 @@ function createKVImports(bindings, getMemory) {
536
564
  return -1;
537
565
  return writeBytes2(buf_ptr, buf_max, encoder2.encode(value));
538
566
  },
539
- kv_put: (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len) => {
567
+ kv_put: (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len, ttl_seconds) => {
540
568
  const b = syncBinding(readStr(ns_ptr, ns_len));
541
569
  if (!b)
542
570
  return 0;
543
- b.putSync(readStr(key_ptr, key_len), readStr(val_ptr, val_len));
571
+ b.putSync(readStr(key_ptr, key_len), readStr(val_ptr, val_len), putOptions(ttl_seconds));
544
572
  return 0;
545
573
  },
546
574
  kv_delete: (ns_ptr, ns_len, key_ptr, key_len) => {
@@ -570,11 +598,11 @@ function createKVImports(bindings, getMemory) {
570
598
  return -1;
571
599
  return writeBytes2(buf_ptr, buf_max, encoder2.encode(value));
572
600
  }),
573
- kv_put: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len) => {
601
+ kv_put: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len, ttl_seconds) => {
574
602
  const b = binding(readStr(ns_ptr, ns_len));
575
603
  if (!b)
576
604
  return -1;
577
- await b.put(readStr(key_ptr, key_len), readStr(val_ptr, val_len));
605
+ await b.put(readStr(key_ptr, key_len), readStr(val_ptr, val_len), putOptions(ttl_seconds));
578
606
  return 0;
579
607
  }),
580
608
  kv_delete: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len) => {
@@ -1668,7 +1696,7 @@ function createWasiImports({
1668
1696
  `);
1669
1697
  stderrPartial = lines.pop() ?? "";
1670
1698
  for (const line of lines) {
1671
- if (line.startsWith("__EDGE_META__:")) {
1699
+ if (line.startsWith("__ZIEX_META__:")) {
1672
1700
  stderrMeta += line + `
1673
1701
  `;
1674
1702
  } else if (line.length > 0) {
@@ -1900,7 +1928,7 @@ function createWasiImports({
1900
1928
  const remaining = stderrDecoder.decode(undefined, { stream: false });
1901
1929
  const tail = stderrPartial + remaining;
1902
1930
  if (tail.length > 0) {
1903
- if (tail.startsWith("__EDGE_META__:"))
1931
+ if (tail.startsWith("__ZIEX_META__:"))
1904
1932
  stderrMeta += tail;
1905
1933
  else
1906
1934
  console.error("[ziex]", tail);
@@ -2032,9 +2060,9 @@ function executeWasm(instance, jspi, Suspending, wsState) {
2032
2060
  }
2033
2061
  });
2034
2062
  }
2035
- function parseEdgeMeta(stderrText) {
2063
+ function parseZiexMeta(stderrText) {
2036
2064
  const meta = { status: 200, headers: new Headers, streaming: false };
2037
- const metaPrefix = "__EDGE_META__:";
2065
+ const metaPrefix = "__ZIEX_META__:";
2038
2066
  const metaLine = stderrText.split(`
2039
2067
  `).find((line) => line.startsWith(metaPrefix));
2040
2068
  if (metaLine) {
@@ -2113,7 +2141,7 @@ async function run({
2113
2141
  return new Response(null, { status: 101, webSocket: server.client });
2114
2142
  }
2115
2143
  const { stderrText: earlyStderrText } = collectOutput();
2116
- const earlyMeta = parseEdgeMeta(earlyStderrText);
2144
+ const earlyMeta = parseZiexMeta(earlyStderrText);
2117
2145
  if (earlyMeta.streaming) {
2118
2146
  const { readable, writable } = new TransformStream;
2119
2147
  streamWriter = writable.getWriter();
@@ -2125,9 +2153,14 @@ async function run({
2125
2153
  }
2126
2154
  await wasmPromise;
2127
2155
  const { stderrText } = collectOutput();
2128
- const meta = parseEdgeMeta(stderrText);
2156
+ const meta = parseZiexMeta(stderrText);
2129
2157
  const body = mergeUint8Arrays(stdoutChunks);
2130
2158
  meta.headers.delete("transfer-encoding");
2159
+ const nullBody = meta.status === 101 || meta.status === 204 || meta.status === 205 || meta.status === 304;
2160
+ if (nullBody) {
2161
+ meta.headers.delete("content-length");
2162
+ return new Response(null, { status: meta.status, headers: meta.headers });
2163
+ }
2131
2164
  if (!meta.headers.has("content-length"))
2132
2165
  meta.headers.set("content-length", String(body.byteLength));
2133
2166
  return new Response(body.buffer, { status: meta.status, headers: meta.headers });
package/index.js CHANGED
@@ -154,20 +154,48 @@ __export(exports_kv, {
154
154
  createMemoryKV: () => createMemoryKV,
155
155
  createKVImports: () => createKVImports
156
156
  });
157
+ function putOptions(ttlSeconds) {
158
+ if (ttlSeconds < 60)
159
+ return;
160
+ return { expirationTtl: ttlSeconds };
161
+ }
157
162
  function createMemoryKV() {
158
163
  const store = new Map;
164
+ function read(key) {
165
+ const entry = store.get(key);
166
+ if (!entry)
167
+ return null;
168
+ if (entry.expiresAt !== undefined && Date.now() >= entry.expiresAt) {
169
+ store.delete(key);
170
+ return null;
171
+ }
172
+ return entry.value;
173
+ }
174
+ function write(key, value, options) {
175
+ let expiresAt;
176
+ if (options?.expiration !== undefined) {
177
+ expiresAt = options.expiration * 1000;
178
+ } else if (options?.expirationTtl !== undefined) {
179
+ expiresAt = Date.now() + options.expirationTtl * 1000;
180
+ }
181
+ store.set(key, { value, expiresAt });
182
+ }
159
183
  return {
160
184
  async get(key) {
161
- return store.get(key) ?? null;
185
+ return read(key);
162
186
  },
163
- async put(key, value) {
164
- store.set(key, value);
187
+ async put(key, value, options) {
188
+ write(key, value, options);
165
189
  },
166
190
  async delete(key) {
167
191
  store.delete(key);
168
192
  },
169
193
  async list(options) {
170
- const keys = [...store.keys()].filter((k) => !options?.prefix || k.startsWith(options.prefix)).map((name) => ({ name }));
194
+ const keys = [...store.keys()].filter((k) => {
195
+ if (options?.prefix && !k.startsWith(options.prefix))
196
+ return false;
197
+ return read(k) !== null;
198
+ }).map((name) => ({ name }));
171
199
  return { keys };
172
200
  }
173
201
  };
@@ -207,11 +235,11 @@ function createKVImports(bindings, getMemory) {
207
235
  return -1;
208
236
  return writeBytes(buf_ptr, buf_max, encoder2.encode(value));
209
237
  },
210
- kv_put: (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len) => {
238
+ kv_put: (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len, ttl_seconds) => {
211
239
  const b = syncBinding(readStr(ns_ptr, ns_len));
212
240
  if (!b)
213
241
  return 0;
214
- b.putSync(readStr(key_ptr, key_len), readStr(val_ptr, val_len));
242
+ b.putSync(readStr(key_ptr, key_len), readStr(val_ptr, val_len), putOptions(ttl_seconds));
215
243
  return 0;
216
244
  },
217
245
  kv_delete: (ns_ptr, ns_len, key_ptr, key_len) => {
@@ -241,11 +269,11 @@ function createKVImports(bindings, getMemory) {
241
269
  return -1;
242
270
  return writeBytes(buf_ptr, buf_max, encoder2.encode(value));
243
271
  }),
244
- kv_put: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len) => {
272
+ kv_put: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len, ttl_seconds) => {
245
273
  const b = binding(readStr(ns_ptr, ns_len));
246
274
  if (!b)
247
275
  return -1;
248
- await b.put(readStr(key_ptr, key_len), readStr(val_ptr, val_len));
276
+ await b.put(readStr(key_ptr, key_len), readStr(val_ptr, val_len), putOptions(ttl_seconds));
249
277
  return 0;
250
278
  }),
251
279
  kv_delete: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len) => {
@@ -525,7 +553,7 @@ function createWasiImports({
525
553
  `);
526
554
  stderrPartial = lines.pop() ?? "";
527
555
  for (const line of lines) {
528
- if (line.startsWith("__EDGE_META__:")) {
556
+ if (line.startsWith("__ZIEX_META__:")) {
529
557
  stderrMeta += line + `
530
558
  `;
531
559
  } else if (line.length > 0) {
@@ -757,7 +785,7 @@ function createWasiImports({
757
785
  const remaining = stderrDecoder.decode(undefined, { stream: false });
758
786
  const tail = stderrPartial + remaining;
759
787
  if (tail.length > 0) {
760
- if (tail.startsWith("__EDGE_META__:"))
788
+ if (tail.startsWith("__ZIEX_META__:"))
761
789
  stderrMeta += tail;
762
790
  else
763
791
  console.error("[ziex]", tail);
@@ -889,9 +917,9 @@ function executeWasm(instance, jspi, Suspending, wsState) {
889
917
  }
890
918
  });
891
919
  }
892
- function parseEdgeMeta(stderrText) {
920
+ function parseZiexMeta(stderrText) {
893
921
  const meta = { status: 200, headers: new Headers, streaming: false };
894
- const metaPrefix = "__EDGE_META__:";
922
+ const metaPrefix = "__ZIEX_META__:";
895
923
  const metaLine = stderrText.split(`
896
924
  `).find((line) => line.startsWith(metaPrefix));
897
925
  if (metaLine) {
@@ -970,7 +998,7 @@ async function run({
970
998
  return new Response(null, { status: 101, webSocket: server.client });
971
999
  }
972
1000
  const { stderrText: earlyStderrText } = collectOutput();
973
- const earlyMeta = parseEdgeMeta(earlyStderrText);
1001
+ const earlyMeta = parseZiexMeta(earlyStderrText);
974
1002
  if (earlyMeta.streaming) {
975
1003
  const { readable, writable } = new TransformStream;
976
1004
  streamWriter = writable.getWriter();
@@ -982,9 +1010,14 @@ async function run({
982
1010
  }
983
1011
  await wasmPromise;
984
1012
  const { stderrText } = collectOutput();
985
- const meta = parseEdgeMeta(stderrText);
1013
+ const meta = parseZiexMeta(stderrText);
986
1014
  const body = mergeUint8Arrays(stdoutChunks);
987
1015
  meta.headers.delete("transfer-encoding");
1016
+ const nullBody = meta.status === 101 || meta.status === 204 || meta.status === 205 || meta.status === 304;
1017
+ if (nullBody) {
1018
+ meta.headers.delete("content-length");
1019
+ return new Response(null, { status: meta.status, headers: meta.headers });
1020
+ }
988
1021
  if (!meta.headers.has("content-length"))
989
1022
  meta.headers.set("content-length", String(body.byteLength));
990
1023
  return new Response(body.buffer, { status: meta.status, headers: meta.headers });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ziex",
3
- "version": "0.1.0-dev.1360",
3
+ "version": "0.1.0-dev.1367",
4
4
  "description": "Ziex is a framework for building web applications with Zig.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -37,7 +37,7 @@
37
37
  "license": "MIT",
38
38
  "scripts": {},
39
39
  "dependencies": {
40
- "@ziex/cli": "0.1.0-dev.1360"
40
+ "@ziex/cli": "0.1.0-dev.1367"
41
41
  },
42
42
  "peerDependenciesMeta": {
43
43
  "react": {
package/wasm/index.js CHANGED
@@ -483,20 +483,48 @@ __export(exports_kv, {
483
483
  createMemoryKV: () => createMemoryKV,
484
484
  createKVImports: () => createKVImports
485
485
  });
486
+ function putOptions(ttlSeconds) {
487
+ if (ttlSeconds < 60)
488
+ return;
489
+ return { expirationTtl: ttlSeconds };
490
+ }
486
491
  function createMemoryKV() {
487
492
  const store = new Map;
493
+ function read(key) {
494
+ const entry = store.get(key);
495
+ if (!entry)
496
+ return null;
497
+ if (entry.expiresAt !== undefined && Date.now() >= entry.expiresAt) {
498
+ store.delete(key);
499
+ return null;
500
+ }
501
+ return entry.value;
502
+ }
503
+ function write(key, value, options) {
504
+ let expiresAt;
505
+ if (options?.expiration !== undefined) {
506
+ expiresAt = options.expiration * 1000;
507
+ } else if (options?.expirationTtl !== undefined) {
508
+ expiresAt = Date.now() + options.expirationTtl * 1000;
509
+ }
510
+ store.set(key, { value, expiresAt });
511
+ }
488
512
  return {
489
513
  async get(key) {
490
- return store.get(key) ?? null;
514
+ return read(key);
491
515
  },
492
- async put(key, value) {
493
- store.set(key, value);
516
+ async put(key, value, options) {
517
+ write(key, value, options);
494
518
  },
495
519
  async delete(key) {
496
520
  store.delete(key);
497
521
  },
498
522
  async list(options) {
499
- const keys = [...store.keys()].filter((k) => !options?.prefix || k.startsWith(options.prefix)).map((name) => ({ name }));
523
+ const keys = [...store.keys()].filter((k) => {
524
+ if (options?.prefix && !k.startsWith(options.prefix))
525
+ return false;
526
+ return read(k) !== null;
527
+ }).map((name) => ({ name }));
500
528
  return { keys };
501
529
  }
502
530
  };
@@ -536,11 +564,11 @@ function createKVImports(bindings, getMemory) {
536
564
  return -1;
537
565
  return writeBytes2(buf_ptr, buf_max, encoder2.encode(value));
538
566
  },
539
- kv_put: (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len) => {
567
+ kv_put: (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len, ttl_seconds) => {
540
568
  const b = syncBinding(readStr(ns_ptr, ns_len));
541
569
  if (!b)
542
570
  return 0;
543
- b.putSync(readStr(key_ptr, key_len), readStr(val_ptr, val_len));
571
+ b.putSync(readStr(key_ptr, key_len), readStr(val_ptr, val_len), putOptions(ttl_seconds));
544
572
  return 0;
545
573
  },
546
574
  kv_delete: (ns_ptr, ns_len, key_ptr, key_len) => {
@@ -570,11 +598,11 @@ function createKVImports(bindings, getMemory) {
570
598
  return -1;
571
599
  return writeBytes2(buf_ptr, buf_max, encoder2.encode(value));
572
600
  }),
573
- kv_put: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len) => {
601
+ kv_put: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len, ttl_seconds) => {
574
602
  const b = binding(readStr(ns_ptr, ns_len));
575
603
  if (!b)
576
604
  return -1;
577
- await b.put(readStr(key_ptr, key_len), readStr(val_ptr, val_len));
605
+ await b.put(readStr(key_ptr, key_len), readStr(val_ptr, val_len), putOptions(ttl_seconds));
578
606
  return 0;
579
607
  }),
580
608
  kv_delete: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len) => {
package/wasm/init.dev.js CHANGED
@@ -463,6 +463,11 @@ class ZxBridgeCore {
463
463
  }
464
464
  }
465
465
  // src/kv.ts
466
+ function putOptions(ttlSeconds) {
467
+ if (ttlSeconds < 60)
468
+ return;
469
+ return { expirationTtl: ttlSeconds };
470
+ }
466
471
  function isSyncKVNamespace(binding) {
467
472
  const candidate = binding;
468
473
  return typeof candidate.getSync === "function" && typeof candidate.putSync === "function" && typeof candidate.deleteSync === "function" && typeof candidate.listSync === "function";
@@ -498,11 +503,11 @@ function createKVImports(bindings, getMemory) {
498
503
  return -1;
499
504
  return writeBytes2(buf_ptr, buf_max, encoder2.encode(value));
500
505
  },
501
- kv_put: (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len) => {
506
+ kv_put: (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len, ttl_seconds) => {
502
507
  const b = syncBinding(readStr(ns_ptr, ns_len));
503
508
  if (!b)
504
509
  return 0;
505
- b.putSync(readStr(key_ptr, key_len), readStr(val_ptr, val_len));
510
+ b.putSync(readStr(key_ptr, key_len), readStr(val_ptr, val_len), putOptions(ttl_seconds));
506
511
  return 0;
507
512
  },
508
513
  kv_delete: (ns_ptr, ns_len, key_ptr, key_len) => {
@@ -532,11 +537,11 @@ function createKVImports(bindings, getMemory) {
532
537
  return -1;
533
538
  return writeBytes2(buf_ptr, buf_max, encoder2.encode(value));
534
539
  }),
535
- kv_put: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len) => {
540
+ kv_put: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len, val_ptr, val_len, ttl_seconds) => {
536
541
  const b = binding(readStr(ns_ptr, ns_len));
537
542
  if (!b)
538
543
  return -1;
539
- await b.put(readStr(key_ptr, key_len), readStr(val_ptr, val_len));
544
+ await b.put(readStr(key_ptr, key_len), readStr(val_ptr, val_len), putOptions(ttl_seconds));
540
545
  return 0;
541
546
  }),
542
547
  kv_delete: new Suspending(async (ns_ptr, ns_len, key_ptr, key_len) => {
package/wasm/init.js CHANGED
@@ -1,3 +1,3 @@
1
- var L={nan:0,null:1,true:2,false:3,undefined:4,globalThis:5,runtime:6};var n=new TextEncoder,FK=new TextDecoder("utf-8");class I{memory;values=[NaN,null,!0,!1,void 0,globalThis,this];idPool=[];importObject(){return{"zig-js":{valueGet:this.valueGet.bind(this),valueSet:this.valueSet.bind(this),valueDeinit:this.valueDeinit.bind(this),valueObjectCreate:this.valueObjectCreate.bind(this),valueStringCreate:this.valueStringCreate.bind(this),valueStringLen:this.valueStringLen.bind(this),valueStringCopy:this.valueStringCopy.bind(this),valueNew:this.valueNew.bind(this),funcApply:this.funcApply.bind(this)}}}valueGet(K,$,U,q){let D=this.loadValue($),Y=this.loadString(U,q),F=Reflect.get(D,Y);this.storeValue(K,F)}valueSet(K,$,U,q){let D=this.loadValue(K),Y=this.loadString($,U),F=this.loadRef(q);Reflect.set(D,Y,F)}valueDeinit(K){if(K>6)this.values[K]=null,this.idPool.push(K)}valueObjectCreate(K){this.storeValue(K,{})}valueStringCreate(K,$,U){let q=this.loadString($,U);this.storeValue(K,q)}valueStringLen(K){let $=this.loadValue(K);return n.encode($).byteLength}valueStringCopy(K,$,U){if(this.memory==null)return;let q=this.loadValue(K),D=n.encode(q);if(D.byteLength>U)return;if(D.length===0)return;new Uint8Array(this.memory.buffer,$,D.length).set(D)}valueNew(K,$,U,q){let D=this.loadValue($),Y=[];for(let J=0;J<q;J++)Y.push(this.loadRef(U+J*8));let F=Reflect.construct(D,Y);this.storeValue(K,F)}funcApply(K,$,U,q,D){let Y=this.loadValue($),F=this.loadRef(U),J=[];for(let Q=0;Q<D;Q++)J.push(this.loadRef(q+Q*8));let V=Reflect.apply(Y,F,J);this.storeValue(K,V)}loadValue(K){return this.values[K]}deleteValue(K){let $=this.values[K];return this.valueDeinit(K),$}loadRef(K){if(this.memory==null)return;let U=new DataView(this.memory.buffer).getFloat64(K,!0);if(!isNaN(U))return U;let q=this.loadRefId(K);return this.values[q]}loadRefId(K){if(this.memory==null)return 0;return new DataView(this.memory.buffer).getUint32(K,!0)}storeValue(K,$){if(this.memory==null)return;let U=new DataView(this.memory.buffer);if(typeof $==="number"){if(isNaN($))U.setUint32(K,L.nan,!0),U.setUint32(K+4,2146959360,!0);else U.setFloat64(K,$,!0);return}if($===null){U.setUint32(K,L.null,!0),U.setUint32(K+4,2146959360,!0);return}if($===void 0){U.setUint32(K,L.undefined,!0),U.setUint32(K+4,2146959360,!0);return}if(typeof $==="boolean"){U.setUint32(K,$?L.true:L.false,!0),U.setUint32(K+4,2146959360,!0);return}if(typeof $==="bigint"){U.setFloat64(K,Number($),!0);return}let q=this.idPool.pop();if(q===void 0)q=this.values.length;this.values[q]=$;let D=0;switch(typeof $){case"object":D=1;break;case"string":D=2;break;case"symbol":D=3;break;case"function":D=4;break}U.setUint32(K,Number(q),!0),U.setUint32(K+4,2146959360|D,!0)}loadString(K,$){if(this.memory==null)return"";let q=new Uint8ClampedArray(this.memory.buffer,K,Number($)).slice();return FK.decode(q)}}function _(K){let $=new TextEncoder,U=new TextDecoder;function q(Q,X){return U.decode(new Uint8Array(K().buffer,Q,X))}function D(Q,X,G){if(G.length>X)return-2;return new Uint8Array(K().buffer,Q,G.length).set(G),G.length}function Y(Q,X){return new Uint8Array(K().buffer,Q,X)}function F(Q){let X={};try{X=JSON.parse(Q)}catch{for(let G of Q.split(`
2
- `)){let T=G.indexOf(":");if(T>0)X[G.slice(0,T)]=G.slice(T+1)}}return X}async function J(Q,X,G,T,O,W,Z,B,C,N,S,h){let s=q(Q,X),b=T>0?q(G,T):"GET",DK=W>0?q(O,W):"{}",qK=B>0?Y(Z,B):void 0,l=F(DK),a=new AbortController,y=C>0?setTimeout(()=>a.abort(),C):null;try{let M=await fetch(s,{method:b,headers:Object.keys(l).length>0?l:void 0,body:b!=="GET"&&b!=="HEAD"?qK:void 0,signal:a.signal});if(y)clearTimeout(y);new DataView(K().buffer).setUint16(N,M.status,!0);let m=new Uint8Array(await M.arrayBuffer());return D(S,h,m)}catch(M){if(y)clearTimeout(y);let m=M instanceof Error?M.message:String(M);return console.error(`wasm fetch failed: ${s} (${m})`),-1}}let V=WebAssembly.Suspending;if(typeof V!=="function")return{fetch:(Q,X,G,T,O,W,Z,B,C,N,S,h)=>-1};return{fetch:new V(J)}}var v={Event:0,FetchSuccess:1,FetchError:2,Timeout:3,Interval:4,WebSocketOpen:5,WebSocketMessage:6,WebSocketError:7,WebSocketClose:8},j=new I,d=new ArrayBuffer(8),QK=new DataView(d);function P(K){let $=j.memory;return j.memory={buffer:d},j.storeValue(0,K),j.memory=$,QK.getBigUint64(0,!0)}var k=new TextDecoder,u=new TextEncoder,o=null,t=null;function R(){let K=j.memory.buffer;if(K!==t)t=K,o=new Uint8Array(K);return o}var r=new Map;function YK(K,$){return K*65536+$}function H(K,$){let U=YK(K,$),q=r.get(U);if(q!==void 0)return q;let D=k.decode(R().subarray(K,K+$));return r.set(U,D),D}function c(K,$){R().set($,K)}function E(K){if(!K)return;let $=WebAssembly.promising;if(typeof $!=="function")return K;return $(K)}function z(K,...$){if(!K)return;let U=K(...$);if(U&&typeof U.then==="function")U.then(void 0,(q)=>{console.error(q)})}class x{#K=new Map;_alloc;#U;#D;constructor(K){this._alloc=K.__zx_alloc,this.#U=E(K.__zx_cb);let $=E(K.__zx_fetch_complete);if(!$)throw Error("__zx_fetch_complete not exported from WASM");if(this.#D=$,K.memory)j.memory=K.memory}#$(K,$,U){let q=this.#U;if(!q){console.warn("__zx_cb not exported from WASM");return}let D=P(U);z(q,K,$,D)}fetchAsync(K,$,U,q,D,Y,F,J,V,Q){let X=H(K,$),G=q>0?H(U,q):"GET",T=Y>0?H(D,Y):"{}",O=J>0?R().subarray(F,F+J):void 0,W={};try{W=JSON.parse(T)}catch{for(let N of T.split(`
3
- `)){let S=N.indexOf(":");if(S>0)W[N.slice(0,S)]=N.slice(S+1)}}let Z=new AbortController,B=V>0?setTimeout(()=>Z.abort(),V):null,C={method:G,headers:Object.keys(W).length>0?W:void 0,body:G!=="GET"&&G!=="HEAD"?O:void 0,signal:Z.signal};fetch(X,C).then(async(N)=>{if(B)clearTimeout(B);let S=new Uint8Array(await N.arrayBuffer());this._notifyFetchComplete(Q,N.status,S,!1)}).catch((N)=>{if(B)clearTimeout(B);let h=N.name==="AbortError"?"Request timeout":N.message??"Fetch failed";this._notifyFetchComplete(Q,0,h,!0)})}_notifyFetchComplete(K,$,U,q){let D=this.#D,Y=typeof U==="string"?u.encode(U):U,F=this._alloc(Y.length);c(F,Y),z(D,K,$,F,Y.length,q?1:0)}setTimeout(K,$){setTimeout(()=>{this.#$(v.Timeout,K,null)},$)}setInterval(K,$){let U=setInterval(()=>{this.#$(v.Interval,K,null)},$);this.#K.set(K,U)}clearInterval(K){let $=this.#K.get(K);if($!==void 0)clearInterval($),this.#K.delete(K)}dispose(){for(let K of this.#K.values())clearInterval(K);this.#K.clear()}_writeStringToWasm(K){return this._writeBytesToWasm(u.encode(K))}_writeBytesToWasm(K){let $=this._alloc(K.length);return c($,K),{ptr:$,len:K.length}}static log(K,$,U){let q=k.decode(R().subarray($,$+U));switch(K){case 0:console.error(q);break;case 1:console.warn(q);break;case 3:console.debug(q);break;default:console.log(q);break}}static createImportObject(K){return{...j.importObject(),__zx_net:_(()=>{if(!j.memory)throw Error("WASM memory is not ready");return j.memory}),__zx:{_log:($,U,q)=>x.log($,U,q),_fetchAsync:($,U,q,D,Y,F,J,V,Q,X)=>{K.current?.fetchAsync($,U,q,D,Y,F,J,V,Q,X)},_setTimeout:($,U)=>{K.current?.setTimeout($,U)},_setInterval:($,U)=>{K.current?.setInterval($,U)},_clearInterval:($)=>{K.current?.clearInterval($)}}}}}function VK(K){let $=K;return typeof $.getSync==="function"&&typeof $.putSync==="function"&&typeof $.deleteSync==="function"&&typeof $.listSync==="function"}function e(K,$){let U=new TextEncoder,q=new TextDecoder;function D(V,Q){return q.decode(new Uint8Array($().buffer,V,Q))}function Y(V,Q,X){if(X.length>Q)return-2;return new Uint8Array($().buffer,V,X.length).set(X),X.length}function F(V){return K[V]??K.default??null}let J=WebAssembly.Suspending;if(typeof J!=="function"){let V=function(Q){let X=F(Q);return X&&VK(X)?X:null};return{kv_get:(Q,X,G,T,O,W)=>{let Z=V(D(Q,X));if(!Z)return-1;let B=Z.getSync(D(G,T));if(B===null)return-1;return Y(O,W,U.encode(B))},kv_put:(Q,X,G,T,O,W)=>{let Z=V(D(Q,X));if(!Z)return 0;return Z.putSync(D(G,T),D(O,W)),0},kv_delete:(Q,X,G,T)=>{let O=V(D(Q,X));if(!O)return 0;return O.deleteSync(D(G,T)),0},kv_list:(Q,X,G,T,O,W)=>{let Z=V(D(Q,X));if(!Z)return Y(O,W,U.encode("[]"));let B=D(G,T),C=Z.listSync(B.length>0?{prefix:B}:void 0);return Y(O,W,U.encode(JSON.stringify(C.keys.map((N)=>N.name))))}}}return{kv_get:new J(async(V,Q,X,G,T,O)=>{let W=F(D(V,Q));if(!W)return-1;let Z=await W.get(D(X,G));if(Z===null)return-1;return Y(T,O,U.encode(Z))}),kv_put:new J(async(V,Q,X,G,T,O)=>{let W=F(D(V,Q));if(!W)return-1;return await W.put(D(X,G),D(T,O)),0}),kv_delete:new J(async(V,Q,X,G)=>{let T=F(D(V,Q));if(!T)return-1;return await T.delete(D(X,G)),0}),kv_list:new J(async(V,Q,X,G,T,O)=>{let W=F(D(V,Q));if(!W)return Y(T,O,U.encode("[]"));let Z=D(X,G),B=await W.list(Z.length>0?{prefix:Z}:void 0);return Y(T,O,U.encode(JSON.stringify(B.keys.map((C)=>C.name))))})}}function XK(){if(typeof indexedDB>"u")throw Error("IndexedDB is not available in this environment");return indexedDB}function KK(K){return new Promise(($,U)=>{K.onsuccess=()=>$(K.result),K.onerror=()=>U(K.error??Error("IndexedDB request failed"))})}function g(K){return new Promise(($,U)=>{K.oncomplete=()=>$(),K.onabort=()=>U(K.error??Error("IndexedDB transaction aborted")),K.onerror=()=>U(K.error??Error("IndexedDB transaction failed"))})}function JK(K={}){let $=K.databaseName??"ziex-kv",U=K.storeName??"kv",q=K.namespace??"default",D=new Promise((F,J)=>{let V=XK().open($,1);V.onupgradeneeded=()=>{let Q=V.result;if(!Q.objectStoreNames.contains(U))Q.createObjectStore(U)},V.onsuccess=()=>F(V.result),V.onerror=()=>J(V.error??Error("Failed to open IndexedDB"))}),Y=(F)=>`${q}:${F}`;return{async get(F){let V=(await D).transaction(U,"readonly"),Q=V.objectStore(U),X=await KK(Q.get(Y(F)));return await g(V),console.debug(`KV GET - Key: ${F}, Value: ${X}`),typeof X==="string"?X:null},async put(F,J){let Q=(await D).transaction(U,"readwrite");Q.objectStore(U).put(J,Y(F)),await g(Q),console.debug(`KV PUT - Key: ${F}, Value: ${J}`)},async delete(F){let V=(await D).transaction(U,"readwrite");V.objectStore(U).delete(Y(F)),await g(V)},async list(F){let V=(await D).transaction(U,"readonly"),Q=V.objectStore(U),X=await KK(Q.getAllKeys());await g(V);let G=Y(F?.prefix??"");return{keys:X.filter((T)=>typeof T==="string"&&T.startsWith(G)).map((T)=>({name:T.slice(q.length+1)}))}}}}function GK(){if(typeof localStorage>"u")throw Error("localStorage is not available in this environment");return localStorage}function TK(K={}){let $=GK(),U=K.namespace??"default",q=K.storagePrefix??"ziex-kv",D=(F)=>`${q}:${U}:${F}`,Y=D("");return{getSync(F){return $.getItem(D(F))},async get(F){return this.getSync(F)},putSync(F,J){$.setItem(D(F),J)},async put(F,J){this.putSync(F,J)},deleteSync(F){$.removeItem(D(F))},async delete(F){this.deleteSync(F)},listSync(F){let J=Y+(F?.prefix??""),V=[];for(let Q=0;Q<$.length;Q+=1){let X=$.key(Q);if(!X||!X.startsWith(J))continue;V.push({name:X.slice(Y.length)})}return{keys:V}},async list(F){return this.listSync(F)}}}function WK(){return typeof WebAssembly.Suspending==="function"&&typeof WebAssembly.promising==="function"}function $K(K={}){return{[K.namespace??"default"]:WK()?JK(K):TK(K)}}class p extends x{#K=new Map;#U;#D;#$;#q;#F;#Q;constructor(K){super(K);this.#U=E(K.__zx_ws_onopen),this.#D=E(K.__zx_ws_onmessage),this.#$=E(K.__zx_ws_onerror),this.#q=E(K.__zx_ws_onclose),this.#F=K.__zx_eventbridge,this.#Q=E(K.__zx_eventbridge_async??K.__zx_eventbridge)}eventMaySuspend(K,$){return!!((w.get(K)??0)&1<<$)}setEventHandlerMode(K,$,U){let q=1<<$,D=w.get(K)??0,Y=U?D|q:D&~q;if(Y===0)w.delete(K);else w.set(K,Y)}clearEventHandlerModes(K){w.delete(K)}submitFormActionAsync(K,$,U,q){let D=new FormData(K);D.append("__$states",U),fetch(window.location.href,{method:"POST",headers:{"x-action":String($>>>0)},body:D}).then(async(Y)=>{let F=await Y.text();this._notifyFetchComplete(q,Y.status,F,!1)}).catch((Y)=>{let F=Y instanceof Error?Y.message:"Fetch failed";this._notifyFetchComplete(q,0,F,!0)})}wsConnect(K,$,U,q,D){let Y=H($,U),F=D>0?H(q,D):"",J=F?F.split(",").map((V)=>V.trim()).filter(Boolean):void 0;try{let V=J&&J.length>0?new WebSocket(Y,J):new WebSocket(Y);V.binaryType="arraybuffer",V.onopen=()=>{let Q=this.#U;if(!Q)return;let X=V.protocol||"",{ptr:G,len:T}=this._writeStringToWasm(X);z(Q,K,G,T)},V.onmessage=(Q)=>{let X=this.#D;if(!X)return;let G=Q.data instanceof ArrayBuffer,T=G?new Uint8Array(Q.data):u.encode(Q.data),{ptr:O,len:W}=this._writeBytesToWasm(T);z(X,K,O,W,G?1:0)},V.onerror=(Q)=>{let X=this.#$;if(!X)return;let{ptr:G,len:T}=this._writeStringToWasm("WebSocket error");z(X,K,G,T)},V.onclose=(Q)=>{let X=this.#q;if(!X)return;let G=Q.reason||"",{ptr:T,len:O}=this._writeStringToWasm(G);z(X,K,Q.code,T,O,Q.wasClean?1:0),this.#K.delete(K)},this.#K.set(K,V)}catch(V){let Q=this.#$;if(Q){let X=V instanceof Error?V.message:"WebSocket connection failed",{ptr:G,len:T}=this._writeStringToWasm(X);z(Q,K,G,T)}}}wsSend(K,$,U,q){let D=this.#K.get(K);if(!D||D.readyState!==WebSocket.OPEN)return;let Y=R();if(q)D.send(Y.slice($,$+U));else D.send(k.decode(Y.subarray($,$+U)))}wsClose(K,$,U,q){let D=this.#K.get(K);if(!D)return;let Y=q>0?H(U,q):void 0;try{if(Y)D.close($,Y);else D.close($)}catch{D.close()}}dispose(){super.dispose(),w.clear();for(let K of this.#K.values())try{K.close()}catch{}this.#K.clear()}eventbridge(K,$,U){let q=P(U);if(this.eventMaySuspend(K,$)){z(this.#Q,K,$,q);return}z(this.#F,K,$,q)}static createImportObject(K){return{...j.importObject(),__zx_net:_(()=>{if(!j.memory)throw Error("WASM memory is not ready");return j.memory}),__zx:{_log:($,U,q)=>x.log($,U,q),_setEventHandlerMode:($,U,q)=>{K.current?.setEventHandlerMode($,U,q!==0)},_clearEventHandlerModes:($)=>{K.current?.clearEventHandlerModes($)},_fetchAsync:($,U,q,D,Y,F,J,V,Q,X)=>{K.current?.fetchAsync($,U,q,D,Y,F,J,V,Q,X)},_setTimeout:($,U)=>{K.current?.setTimeout($,U)},_setInterval:($,U)=>{K.current?.setInterval($,U)},_clearInterval:($)=>{K.current?.clearInterval($)},_wsConnect:($,U,q,D,Y)=>{K.current?.wsConnect($,U,q,D,Y)},_wsSend:($,U,q,D)=>{K.current?.wsSend($,U,q,D)},_wsClose:($,U,q,D)=>{K.current?.wsClose($,U,q,D)},_ce:($,U)=>{let q=AK[$],D=$>=OK?document.createElementNS("http://www.w3.org/2000/svg",q):document.createElement(q);return D.__zx_ref=Number(U),A.set(U,D),P(D)},_ct:($,U,q)=>{let D=H($,U),Y=document.createTextNode(D);return Y.__zx_ref=Number(q),A.set(q,Y),P(Y)},_sa:($,U,q,D,Y)=>{A.get($)?.setAttribute(H(U,q),H(D,Y))},_sp:($,U,q,D,Y)=>{let F=A.get($);if(F){let J=H(U,q),V=H(D,Y);if(J==="checked"||J==="selected"||J==="muted")F[J]=V!=="false";else F[J]=V}},_ra:($,U,q)=>{A.get($)?.removeAttribute(H(U,q))},_snv:($,U,q)=>{let D=A.get($);if(D)D.nodeValue=H(U,q)},_srh:($,U,q)=>{let D=A.get($);if(D)D.innerHTML=H(U,q)},_ac:($,U)=>{let q=A.get($),D=A.get(U);if(q&&D)q.appendChild(D)},_ib:($,U,q)=>{let D=A.get($),Y=A.get(U),F=A.get(q)??null;if(D&&Y)D.insertBefore(Y,F)},_rc:($,U)=>{let q=A.get($),D=A.get(U);if(q&&D)q.removeChild(D),i(D)},_rpc:($,U,q)=>{let D=A.get($),Y=A.get(U),F=A.get(q);if(D&&Y&&F)D.replaceChild(Y,F),i(F)},_getLocationHref:($,U)=>{let q=u.encode(window.location.href),D=Math.min(q.length,U);return c($,q.subarray(0,D)),D},_getFormData:($,U,q)=>{let D=A.get($);if(!D||!(D instanceof HTMLFormElement))return 0;let Y=new FormData(D),F=new URLSearchParams(Y).toString(),J=u.encode(F),V=Math.min(J.length,q);return c(U,J.subarray(0,V)),V},_submitFormAction:($,U)=>{let q=A.get($);if(!q||!(q instanceof HTMLFormElement))return;let D=new FormData(q);fetch(window.location.href,{method:"POST",headers:{"x-action":String(U>>>0)},body:D}).catch(()=>{})},_submitFormActionAsync:($,U,q,D,Y)=>{let F=A.get($);if(!F||!(F instanceof HTMLFormElement))return;let J=D>0?H(q,D):"[]";K.current?.submitFormActionAsync(F,U,J,Y)}}}}}var A=new Map;function i(K){let $=K.__zx_ref;if($!==void 0)A.delete(BigInt($));let U=K.childNodes;for(let q=0;q<U.length;q++)i(U[q])}var OK=140,AK=["aside","fragment","iframe","slot","img","html","base","head","link","meta","script","style","title","address","article","body","h1","h6","footer","header","h2","h3","h4","h5","hgroup","nav","section","dd","dl","dt","div","figcaption","figure","hr","li","ol","ul","menu","main","p","picture","pre","a","abbr","b","bdi","bdo","br","cite","code","data","time","dfn","em","i","kbd","mark","q","blockquote","rp","ruby","rt","rtc","rb","s","del","ins","samp","small","span","strong","sub","sup","u","var","wbr","area","map","audio","source","track","video","embed","object","param","canvas","noscript","caption","table","col","colgroup","tbody","tr","thead","tfoot","td","th","button","datalist","option","fieldset","label","form","input","keygen","legend","meter","optgroup","select","output","progress","textarea","details","dialog","menuitem","summary","content","element","shadow","template","acronym","applet","basefont","font","big","blink","center","command","dir","frame","frameset","isindex","listing","marquee","noembed","plaintext","spacer","strike","tt","xmp","animate","animateMotion","animateTransform","circle","clipPath","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","foreignObject","g","image","line","linearGradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","stop","svg","switch","symbol","text","textPath","tspan","use","view"],ZK=[{domType:"click",eventTypeId:0},{domType:"dblclick",eventTypeId:1},{domType:"input",eventTypeId:2},{domType:"change",eventTypeId:3},{domType:"submit",eventTypeId:4},{domType:"focusin",eventTypeId:5},{domType:"focusout",eventTypeId:6},{domType:"keydown",eventTypeId:7},{domType:"keyup",eventTypeId:8},{domType:"keypress",eventTypeId:9},{domType:"mouseenter",eventTypeId:10},{domType:"mouseleave",eventTypeId:11},{domType:"mousedown",eventTypeId:12},{domType:"mouseup",eventTypeId:13},{domType:"mousemove",eventTypeId:14},{domType:"touchstart",eventTypeId:15},{domType:"touchend",eventTypeId:16},{domType:"touchmove",eventTypeId:17},{domType:"scroll",eventTypeId:18}],w=new Map;function jK(K,$="body"){let U=document.querySelector($);if(!U)return()=>{};let q=[];for(let D of ZK){let Y=(J)=>{let V=J.target;while(V&&V!==document.body){let Q=V.__zx_ref;if(Q!==void 0){if(K.eventbridge(BigInt(Q),D.eventTypeId,J),J.cancelBubble)break}V=V.parentElement}},F={passive:D.domType.startsWith("touch")||D.domType==="scroll"};U.addEventListener(D.domType,Y,F),q.push(()=>U.removeEventListener(D.domType,Y,F))}return()=>{for(let D of q)D()}}var HK="/assets/_/main.wasm",f=null;function BK(K={}){return{url:K.url,eventDelegationRoot:K.eventDelegationRoot,importObject:K.importObject,kv:K.kv}}async function UK(K={}){let $=BK(K);if(f)f.dispose(),f=null;let U=K.url??document.getElementById("__$wasmlink")?.href??HK,q={current:null},D=null,Y=K.kv??$K(),F={__zx_kv:e(Y,()=>{if(D)return D;if(j.memory)return j.memory;throw Error("WASM memory is not ready")})},J=Object.assign({},p.createImportObject(q),F,K.importObject),V=await WebAssembly.instantiateStreaming(fetch(U),J),{instance:Q}=V;D=Q.exports.memory,j.memory=D;let X=new p(Q.exports);q.current=X,A.clear();let G=jK(X,K.eventDelegationRoot??"body"),T=E(Q.exports.mainClient);return z(T),f={options:$,dispose:()=>{G(),X.dispose(),A.clear()}},{source:V,bridge:X}}(()=>UK())();
1
+ var L={nan:0,null:1,true:2,false:3,undefined:4,globalThis:5,runtime:6};var n=new TextEncoder,QK=new TextDecoder("utf-8");class I{memory;values=[NaN,null,!0,!1,void 0,globalThis,this];idPool=[];importObject(){return{"zig-js":{valueGet:this.valueGet.bind(this),valueSet:this.valueSet.bind(this),valueDeinit:this.valueDeinit.bind(this),valueObjectCreate:this.valueObjectCreate.bind(this),valueStringCreate:this.valueStringCreate.bind(this),valueStringLen:this.valueStringLen.bind(this),valueStringCopy:this.valueStringCopy.bind(this),valueNew:this.valueNew.bind(this),funcApply:this.funcApply.bind(this)}}}valueGet(K,$,U,q){let D=this.loadValue($),Y=this.loadString(U,q),F=Reflect.get(D,Y);this.storeValue(K,F)}valueSet(K,$,U,q){let D=this.loadValue(K),Y=this.loadString($,U),F=this.loadRef(q);Reflect.set(D,Y,F)}valueDeinit(K){if(K>6)this.values[K]=null,this.idPool.push(K)}valueObjectCreate(K){this.storeValue(K,{})}valueStringCreate(K,$,U){let q=this.loadString($,U);this.storeValue(K,q)}valueStringLen(K){let $=this.loadValue(K);return n.encode($).byteLength}valueStringCopy(K,$,U){if(this.memory==null)return;let q=this.loadValue(K),D=n.encode(q);if(D.byteLength>U)return;if(D.length===0)return;new Uint8Array(this.memory.buffer,$,D.length).set(D)}valueNew(K,$,U,q){let D=this.loadValue($),Y=[];for(let J=0;J<q;J++)Y.push(this.loadRef(U+J*8));let F=Reflect.construct(D,Y);this.storeValue(K,F)}funcApply(K,$,U,q,D){let Y=this.loadValue($),F=this.loadRef(U),J=[];for(let Q=0;Q<D;Q++)J.push(this.loadRef(q+Q*8));let V=Reflect.apply(Y,F,J);this.storeValue(K,V)}loadValue(K){return this.values[K]}deleteValue(K){let $=this.values[K];return this.valueDeinit(K),$}loadRef(K){if(this.memory==null)return;let U=new DataView(this.memory.buffer).getFloat64(K,!0);if(!isNaN(U))return U;let q=this.loadRefId(K);return this.values[q]}loadRefId(K){if(this.memory==null)return 0;return new DataView(this.memory.buffer).getUint32(K,!0)}storeValue(K,$){if(this.memory==null)return;let U=new DataView(this.memory.buffer);if(typeof $==="number"){if(isNaN($))U.setUint32(K,L.nan,!0),U.setUint32(K+4,2146959360,!0);else U.setFloat64(K,$,!0);return}if($===null){U.setUint32(K,L.null,!0),U.setUint32(K+4,2146959360,!0);return}if($===void 0){U.setUint32(K,L.undefined,!0),U.setUint32(K+4,2146959360,!0);return}if(typeof $==="boolean"){U.setUint32(K,$?L.true:L.false,!0),U.setUint32(K+4,2146959360,!0);return}if(typeof $==="bigint"){U.setFloat64(K,Number($),!0);return}let q=this.idPool.pop();if(q===void 0)q=this.values.length;this.values[q]=$;let D=0;switch(typeof $){case"object":D=1;break;case"string":D=2;break;case"symbol":D=3;break;case"function":D=4;break}U.setUint32(K,Number(q),!0),U.setUint32(K+4,2146959360|D,!0)}loadString(K,$){if(this.memory==null)return"";let q=new Uint8ClampedArray(this.memory.buffer,K,Number($)).slice();return QK.decode(q)}}function _(K){let $=new TextEncoder,U=new TextDecoder;function q(Q,X){return U.decode(new Uint8Array(K().buffer,Q,X))}function D(Q,X,G){if(G.length>X)return-2;return new Uint8Array(K().buffer,Q,G.length).set(G),G.length}function Y(Q,X){return new Uint8Array(K().buffer,Q,X)}function F(Q){let X={};try{X=JSON.parse(Q)}catch{for(let G of Q.split(`
2
+ `)){let T=G.indexOf(":");if(T>0)X[G.slice(0,T)]=G.slice(T+1)}}return X}async function J(Q,X,G,T,W,O,A,j,C,N,S,k){let s=q(Q,X),b=T>0?q(G,T):"GET",qK=O>0?q(W,O):"{}",FK=j>0?Y(A,j):void 0,l=F(qK),a=new AbortController,y=C>0?setTimeout(()=>a.abort(),C):null;try{let M=await fetch(s,{method:b,headers:Object.keys(l).length>0?l:void 0,body:b!=="GET"&&b!=="HEAD"?FK:void 0,signal:a.signal});if(y)clearTimeout(y);new DataView(K().buffer).setUint16(N,M.status,!0);let m=new Uint8Array(await M.arrayBuffer());return D(S,k,m)}catch(M){if(y)clearTimeout(y);let m=M instanceof Error?M.message:String(M);return console.error(`wasm fetch failed: ${s} (${m})`),-1}}let V=WebAssembly.Suspending;if(typeof V!=="function")return{fetch:(Q,X,G,T,W,O,A,j,C,N,S,k)=>-1};return{fetch:new V(J)}}var v={Event:0,FetchSuccess:1,FetchError:2,Timeout:3,Interval:4,WebSocketOpen:5,WebSocketMessage:6,WebSocketError:7,WebSocketClose:8},H=new I,d=new ArrayBuffer(8),YK=new DataView(d);function c(K){let $=H.memory;return H.memory={buffer:d},H.storeValue(0,K),H.memory=$,YK.getBigUint64(0,!0)}var h=new TextDecoder,u=new TextEncoder,o=null,r=null;function R(){let K=H.memory.buffer;if(K!==r)r=K,o=new Uint8Array(K);return o}var t=new Map;function VK(K,$){return K*65536+$}function B(K,$){let U=VK(K,$),q=t.get(U);if(q!==void 0)return q;let D=h.decode(R().subarray(K,K+$));return t.set(U,D),D}function P(K,$){R().set($,K)}function E(K){if(!K)return;let $=WebAssembly.promising;if(typeof $!=="function")return K;return $(K)}function z(K,...$){if(!K)return;let U=K(...$);if(U&&typeof U.then==="function")U.then(void 0,(q)=>{console.error(q)})}class x{#K=new Map;_alloc;#U;#D;constructor(K){this._alloc=K.__zx_alloc,this.#U=E(K.__zx_cb);let $=E(K.__zx_fetch_complete);if(!$)throw Error("__zx_fetch_complete not exported from WASM");if(this.#D=$,K.memory)H.memory=K.memory}#$(K,$,U){let q=this.#U;if(!q){console.warn("__zx_cb not exported from WASM");return}let D=c(U);z(q,K,$,D)}fetchAsync(K,$,U,q,D,Y,F,J,V,Q){let X=B(K,$),G=q>0?B(U,q):"GET",T=Y>0?B(D,Y):"{}",W=J>0?R().subarray(F,F+J):void 0,O={};try{O=JSON.parse(T)}catch{for(let N of T.split(`
3
+ `)){let S=N.indexOf(":");if(S>0)O[N.slice(0,S)]=N.slice(S+1)}}let A=new AbortController,j=V>0?setTimeout(()=>A.abort(),V):null,C={method:G,headers:Object.keys(O).length>0?O:void 0,body:G!=="GET"&&G!=="HEAD"?W:void 0,signal:A.signal};fetch(X,C).then(async(N)=>{if(j)clearTimeout(j);let S=new Uint8Array(await N.arrayBuffer());this._notifyFetchComplete(Q,N.status,S,!1)}).catch((N)=>{if(j)clearTimeout(j);let k=N.name==="AbortError"?"Request timeout":N.message??"Fetch failed";this._notifyFetchComplete(Q,0,k,!0)})}_notifyFetchComplete(K,$,U,q){let D=this.#D,Y=typeof U==="string"?u.encode(U):U,F=this._alloc(Y.length);P(F,Y),z(D,K,$,F,Y.length,q?1:0)}setTimeout(K,$){setTimeout(()=>{this.#$(v.Timeout,K,null)},$)}setInterval(K,$){let U=setInterval(()=>{this.#$(v.Interval,K,null)},$);this.#K.set(K,U)}clearInterval(K){let $=this.#K.get(K);if($!==void 0)clearInterval($),this.#K.delete(K)}dispose(){for(let K of this.#K.values())clearInterval(K);this.#K.clear()}_writeStringToWasm(K){return this._writeBytesToWasm(u.encode(K))}_writeBytesToWasm(K){let $=this._alloc(K.length);return P($,K),{ptr:$,len:K.length}}static log(K,$,U){let q=h.decode(R().subarray($,$+U));switch(K){case 0:console.error(q);break;case 1:console.warn(q);break;case 3:console.debug(q);break;default:console.log(q);break}}static createImportObject(K){return{...H.importObject(),__zx_net:_(()=>{if(!H.memory)throw Error("WASM memory is not ready");return H.memory}),__zx:{_log:($,U,q)=>x.log($,U,q),_fetchAsync:($,U,q,D,Y,F,J,V,Q,X)=>{K.current?.fetchAsync($,U,q,D,Y,F,J,V,Q,X)},_setTimeout:($,U)=>{K.current?.setTimeout($,U)},_setInterval:($,U)=>{K.current?.setInterval($,U)},_clearInterval:($)=>{K.current?.clearInterval($)}}}}}function e(K){if(K<60)return;return{expirationTtl:K}}function XK(K){let $=K;return typeof $.getSync==="function"&&typeof $.putSync==="function"&&typeof $.deleteSync==="function"&&typeof $.listSync==="function"}function KK(K,$){let U=new TextEncoder,q=new TextDecoder;function D(V,Q){return q.decode(new Uint8Array($().buffer,V,Q))}function Y(V,Q,X){if(X.length>Q)return-2;return new Uint8Array($().buffer,V,X.length).set(X),X.length}function F(V){return K[V]??K.default??null}let J=WebAssembly.Suspending;if(typeof J!=="function"){let V=function(Q){let X=F(Q);return X&&XK(X)?X:null};return{kv_get:(Q,X,G,T,W,O)=>{let A=V(D(Q,X));if(!A)return-1;let j=A.getSync(D(G,T));if(j===null)return-1;return Y(W,O,U.encode(j))},kv_put:(Q,X,G,T,W,O,A)=>{let j=V(D(Q,X));if(!j)return 0;return j.putSync(D(G,T),D(W,O),e(A)),0},kv_delete:(Q,X,G,T)=>{let W=V(D(Q,X));if(!W)return 0;return W.deleteSync(D(G,T)),0},kv_list:(Q,X,G,T,W,O)=>{let A=V(D(Q,X));if(!A)return Y(W,O,U.encode("[]"));let j=D(G,T),C=A.listSync(j.length>0?{prefix:j}:void 0);return Y(W,O,U.encode(JSON.stringify(C.keys.map((N)=>N.name))))}}}return{kv_get:new J(async(V,Q,X,G,T,W)=>{let O=F(D(V,Q));if(!O)return-1;let A=await O.get(D(X,G));if(A===null)return-1;return Y(T,W,U.encode(A))}),kv_put:new J(async(V,Q,X,G,T,W,O)=>{let A=F(D(V,Q));if(!A)return-1;return await A.put(D(X,G),D(T,W),e(O)),0}),kv_delete:new J(async(V,Q,X,G)=>{let T=F(D(V,Q));if(!T)return-1;return await T.delete(D(X,G)),0}),kv_list:new J(async(V,Q,X,G,T,W)=>{let O=F(D(V,Q));if(!O)return Y(T,W,U.encode("[]"));let A=D(X,G),j=await O.list(A.length>0?{prefix:A}:void 0);return Y(T,W,U.encode(JSON.stringify(j.keys.map((C)=>C.name))))})}}function JK(){if(typeof indexedDB>"u")throw Error("IndexedDB is not available in this environment");return indexedDB}function $K(K){return new Promise(($,U)=>{K.onsuccess=()=>$(K.result),K.onerror=()=>U(K.error??Error("IndexedDB request failed"))})}function g(K){return new Promise(($,U)=>{K.oncomplete=()=>$(),K.onabort=()=>U(K.error??Error("IndexedDB transaction aborted")),K.onerror=()=>U(K.error??Error("IndexedDB transaction failed"))})}function GK(K={}){let $=K.databaseName??"ziex-kv",U=K.storeName??"kv",q=K.namespace??"default",D=new Promise((F,J)=>{let V=JK().open($,1);V.onupgradeneeded=()=>{let Q=V.result;if(!Q.objectStoreNames.contains(U))Q.createObjectStore(U)},V.onsuccess=()=>F(V.result),V.onerror=()=>J(V.error??Error("Failed to open IndexedDB"))}),Y=(F)=>`${q}:${F}`;return{async get(F){let V=(await D).transaction(U,"readonly"),Q=V.objectStore(U),X=await $K(Q.get(Y(F)));return await g(V),console.debug(`KV GET - Key: ${F}, Value: ${X}`),typeof X==="string"?X:null},async put(F,J){let Q=(await D).transaction(U,"readwrite");Q.objectStore(U).put(J,Y(F)),await g(Q),console.debug(`KV PUT - Key: ${F}, Value: ${J}`)},async delete(F){let V=(await D).transaction(U,"readwrite");V.objectStore(U).delete(Y(F)),await g(V)},async list(F){let V=(await D).transaction(U,"readonly"),Q=V.objectStore(U),X=await $K(Q.getAllKeys());await g(V);let G=Y(F?.prefix??"");return{keys:X.filter((T)=>typeof T==="string"&&T.startsWith(G)).map((T)=>({name:T.slice(q.length+1)}))}}}}function TK(){if(typeof localStorage>"u")throw Error("localStorage is not available in this environment");return localStorage}function WK(K={}){let $=TK(),U=K.namespace??"default",q=K.storagePrefix??"ziex-kv",D=(F)=>`${q}:${U}:${F}`,Y=D("");return{getSync(F){return $.getItem(D(F))},async get(F){return this.getSync(F)},putSync(F,J){$.setItem(D(F),J)},async put(F,J){this.putSync(F,J)},deleteSync(F){$.removeItem(D(F))},async delete(F){this.deleteSync(F)},listSync(F){let J=Y+(F?.prefix??""),V=[];for(let Q=0;Q<$.length;Q+=1){let X=$.key(Q);if(!X||!X.startsWith(J))continue;V.push({name:X.slice(Y.length)})}return{keys:V}},async list(F){return this.listSync(F)}}}function OK(){return typeof WebAssembly.Suspending==="function"&&typeof WebAssembly.promising==="function"}function UK(K={}){return{[K.namespace??"default"]:OK()?GK(K):WK(K)}}class p extends x{#K=new Map;#U;#D;#$;#q;#F;#Q;constructor(K){super(K);this.#U=E(K.__zx_ws_onopen),this.#D=E(K.__zx_ws_onmessage),this.#$=E(K.__zx_ws_onerror),this.#q=E(K.__zx_ws_onclose),this.#F=K.__zx_eventbridge,this.#Q=E(K.__zx_eventbridge_async??K.__zx_eventbridge)}eventMaySuspend(K,$){return!!((w.get(K)??0)&1<<$)}setEventHandlerMode(K,$,U){let q=1<<$,D=w.get(K)??0,Y=U?D|q:D&~q;if(Y===0)w.delete(K);else w.set(K,Y)}clearEventHandlerModes(K){w.delete(K)}submitFormActionAsync(K,$,U,q){let D=new FormData(K);D.append("__$states",U),fetch(window.location.href,{method:"POST",headers:{"x-action":String($>>>0)},body:D}).then(async(Y)=>{let F=await Y.text();this._notifyFetchComplete(q,Y.status,F,!1)}).catch((Y)=>{let F=Y instanceof Error?Y.message:"Fetch failed";this._notifyFetchComplete(q,0,F,!0)})}wsConnect(K,$,U,q,D){let Y=B($,U),F=D>0?B(q,D):"",J=F?F.split(",").map((V)=>V.trim()).filter(Boolean):void 0;try{let V=J&&J.length>0?new WebSocket(Y,J):new WebSocket(Y);V.binaryType="arraybuffer",V.onopen=()=>{let Q=this.#U;if(!Q)return;let X=V.protocol||"",{ptr:G,len:T}=this._writeStringToWasm(X);z(Q,K,G,T)},V.onmessage=(Q)=>{let X=this.#D;if(!X)return;let G=Q.data instanceof ArrayBuffer,T=G?new Uint8Array(Q.data):u.encode(Q.data),{ptr:W,len:O}=this._writeBytesToWasm(T);z(X,K,W,O,G?1:0)},V.onerror=(Q)=>{let X=this.#$;if(!X)return;let{ptr:G,len:T}=this._writeStringToWasm("WebSocket error");z(X,K,G,T)},V.onclose=(Q)=>{let X=this.#q;if(!X)return;let G=Q.reason||"",{ptr:T,len:W}=this._writeStringToWasm(G);z(X,K,Q.code,T,W,Q.wasClean?1:0),this.#K.delete(K)},this.#K.set(K,V)}catch(V){let Q=this.#$;if(Q){let X=V instanceof Error?V.message:"WebSocket connection failed",{ptr:G,len:T}=this._writeStringToWasm(X);z(Q,K,G,T)}}}wsSend(K,$,U,q){let D=this.#K.get(K);if(!D||D.readyState!==WebSocket.OPEN)return;let Y=R();if(q)D.send(Y.slice($,$+U));else D.send(h.decode(Y.subarray($,$+U)))}wsClose(K,$,U,q){let D=this.#K.get(K);if(!D)return;let Y=q>0?B(U,q):void 0;try{if(Y)D.close($,Y);else D.close($)}catch{D.close()}}dispose(){super.dispose(),w.clear();for(let K of this.#K.values())try{K.close()}catch{}this.#K.clear()}eventbridge(K,$,U){let q=c(U);if(this.eventMaySuspend(K,$)){z(this.#Q,K,$,q);return}z(this.#F,K,$,q)}static createImportObject(K){return{...H.importObject(),__zx_net:_(()=>{if(!H.memory)throw Error("WASM memory is not ready");return H.memory}),__zx:{_log:($,U,q)=>x.log($,U,q),_setEventHandlerMode:($,U,q)=>{K.current?.setEventHandlerMode($,U,q!==0)},_clearEventHandlerModes:($)=>{K.current?.clearEventHandlerModes($)},_fetchAsync:($,U,q,D,Y,F,J,V,Q,X)=>{K.current?.fetchAsync($,U,q,D,Y,F,J,V,Q,X)},_setTimeout:($,U)=>{K.current?.setTimeout($,U)},_setInterval:($,U)=>{K.current?.setInterval($,U)},_clearInterval:($)=>{K.current?.clearInterval($)},_wsConnect:($,U,q,D,Y)=>{K.current?.wsConnect($,U,q,D,Y)},_wsSend:($,U,q,D)=>{K.current?.wsSend($,U,q,D)},_wsClose:($,U,q,D)=>{K.current?.wsClose($,U,q,D)},_ce:($,U)=>{let q=AK[$],D=$>=ZK?document.createElementNS("http://www.w3.org/2000/svg",q):document.createElement(q);return D.__zx_ref=Number(U),Z.set(U,D),c(D)},_ct:($,U,q)=>{let D=B($,U),Y=document.createTextNode(D);return Y.__zx_ref=Number(q),Z.set(q,Y),c(Y)},_sa:($,U,q,D,Y)=>{Z.get($)?.setAttribute(B(U,q),B(D,Y))},_sp:($,U,q,D,Y)=>{let F=Z.get($);if(F){let J=B(U,q),V=B(D,Y);if(J==="checked"||J==="selected"||J==="muted")F[J]=V!=="false";else F[J]=V}},_ra:($,U,q)=>{Z.get($)?.removeAttribute(B(U,q))},_snv:($,U,q)=>{let D=Z.get($);if(D)D.nodeValue=B(U,q)},_srh:($,U,q)=>{let D=Z.get($);if(D)D.innerHTML=B(U,q)},_ac:($,U)=>{let q=Z.get($),D=Z.get(U);if(q&&D)q.appendChild(D)},_ib:($,U,q)=>{let D=Z.get($),Y=Z.get(U),F=Z.get(q)??null;if(D&&Y)D.insertBefore(Y,F)},_rc:($,U)=>{let q=Z.get($),D=Z.get(U);if(q&&D)q.removeChild(D),i(D)},_rpc:($,U,q)=>{let D=Z.get($),Y=Z.get(U),F=Z.get(q);if(D&&Y&&F)D.replaceChild(Y,F),i(F)},_getLocationHref:($,U)=>{let q=u.encode(window.location.href),D=Math.min(q.length,U);return P($,q.subarray(0,D)),D},_getFormData:($,U,q)=>{let D=Z.get($);if(!D||!(D instanceof HTMLFormElement))return 0;let Y=new FormData(D),F=new URLSearchParams(Y).toString(),J=u.encode(F),V=Math.min(J.length,q);return P(U,J.subarray(0,V)),V},_submitFormAction:($,U)=>{let q=Z.get($);if(!q||!(q instanceof HTMLFormElement))return;let D=new FormData(q);fetch(window.location.href,{method:"POST",headers:{"x-action":String(U>>>0)},body:D}).catch(()=>{})},_submitFormActionAsync:($,U,q,D,Y)=>{let F=Z.get($);if(!F||!(F instanceof HTMLFormElement))return;let J=D>0?B(q,D):"[]";K.current?.submitFormActionAsync(F,U,J,Y)}}}}}var Z=new Map;function i(K){let $=K.__zx_ref;if($!==void 0)Z.delete(BigInt($));let U=K.childNodes;for(let q=0;q<U.length;q++)i(U[q])}var ZK=140,AK=["aside","fragment","iframe","slot","img","html","base","head","link","meta","script","style","title","address","article","body","h1","h6","footer","header","h2","h3","h4","h5","hgroup","nav","section","dd","dl","dt","div","figcaption","figure","hr","li","ol","ul","menu","main","p","picture","pre","a","abbr","b","bdi","bdo","br","cite","code","data","time","dfn","em","i","kbd","mark","q","blockquote","rp","ruby","rt","rtc","rb","s","del","ins","samp","small","span","strong","sub","sup","u","var","wbr","area","map","audio","source","track","video","embed","object","param","canvas","noscript","caption","table","col","colgroup","tbody","tr","thead","tfoot","td","th","button","datalist","option","fieldset","label","form","input","keygen","legend","meter","optgroup","select","output","progress","textarea","details","dialog","menuitem","summary","content","element","shadow","template","acronym","applet","basefont","font","big","blink","center","command","dir","frame","frameset","isindex","listing","marquee","noembed","plaintext","spacer","strike","tt","xmp","animate","animateMotion","animateTransform","circle","clipPath","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","foreignObject","g","image","line","linearGradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","stop","svg","switch","symbol","text","textPath","tspan","use","view"],jK=[{domType:"click",eventTypeId:0},{domType:"dblclick",eventTypeId:1},{domType:"input",eventTypeId:2},{domType:"change",eventTypeId:3},{domType:"submit",eventTypeId:4},{domType:"focusin",eventTypeId:5},{domType:"focusout",eventTypeId:6},{domType:"keydown",eventTypeId:7},{domType:"keyup",eventTypeId:8},{domType:"keypress",eventTypeId:9},{domType:"mouseenter",eventTypeId:10},{domType:"mouseleave",eventTypeId:11},{domType:"mousedown",eventTypeId:12},{domType:"mouseup",eventTypeId:13},{domType:"mousemove",eventTypeId:14},{domType:"touchstart",eventTypeId:15},{domType:"touchend",eventTypeId:16},{domType:"touchmove",eventTypeId:17},{domType:"scroll",eventTypeId:18}],w=new Map;function HK(K,$="body"){let U=document.querySelector($);if(!U)return()=>{};let q=[];for(let D of jK){let Y=(J)=>{let V=J.target;while(V&&V!==document.body){let Q=V.__zx_ref;if(Q!==void 0){if(K.eventbridge(BigInt(Q),D.eventTypeId,J),J.cancelBubble)break}V=V.parentElement}},F={passive:D.domType.startsWith("touch")||D.domType==="scroll"};U.addEventListener(D.domType,Y,F),q.push(()=>U.removeEventListener(D.domType,Y,F))}return()=>{for(let D of q)D()}}var BK="/assets/_/main.wasm",f=null;function NK(K={}){return{url:K.url,eventDelegationRoot:K.eventDelegationRoot,importObject:K.importObject,kv:K.kv}}async function DK(K={}){let $=NK(K);if(f)f.dispose(),f=null;let U=K.url??document.getElementById("__$wasmlink")?.href??BK,q={current:null},D=null,Y=K.kv??UK(),F={__zx_kv:KK(Y,()=>{if(D)return D;if(H.memory)return H.memory;throw Error("WASM memory is not ready")})},J=Object.assign({},p.createImportObject(q),F,K.importObject),V=await WebAssembly.instantiateStreaming(fetch(U),J),{instance:Q}=V;D=Q.exports.memory,H.memory=D;let X=new p(Q.exports);q.current=X,Z.clear();let G=HK(X,K.eventDelegationRoot??"body"),T=E(Q.exports.mainClient);return z(T),f={options:$,dispose:()=>{G(),X.dispose(),Z.clear()}},{source:V,bridge:X}}(()=>DK())();