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.
- package/cloudflare/index.js +47 -14
- package/index.js +47 -14
- package/package.json +2 -2
- package/wasm/index.js +36 -8
- package/wasm/init.dev.js +9 -4
- package/wasm/init.js +3 -3
package/cloudflare/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
|
|
514
|
+
return read(key);
|
|
491
515
|
},
|
|
492
|
-
async put(key, value) {
|
|
493
|
-
|
|
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) =>
|
|
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("
|
|
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("
|
|
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
|
|
2063
|
+
function parseZiexMeta(stderrText) {
|
|
2036
2064
|
const meta = { status: 200, headers: new Headers, streaming: false };
|
|
2037
|
-
const metaPrefix = "
|
|
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 =
|
|
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 =
|
|
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
|
|
185
|
+
return read(key);
|
|
162
186
|
},
|
|
163
|
-
async put(key, value) {
|
|
164
|
-
|
|
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) =>
|
|
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("
|
|
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("
|
|
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
|
|
920
|
+
function parseZiexMeta(stderrText) {
|
|
893
921
|
const meta = { status: 200, headers: new Headers, streaming: false };
|
|
894
|
-
const metaPrefix = "
|
|
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 =
|
|
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 =
|
|
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.
|
|
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.
|
|
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
|
|
514
|
+
return read(key);
|
|
491
515
|
},
|
|
492
|
-
async put(key, value) {
|
|
493
|
-
|
|
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) =>
|
|
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,
|
|
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,
|
|
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())();
|