ziex 0.1.0-dev.1014 → 0.1.0-dev.1068
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/README.md +7 -0
- package/app.d.ts +10 -10
- package/build.zig.zon +1 -1
- package/cloudflare/index.js +85 -45
- package/index.js +59 -0
- package/package.json +2 -2
- package/runtime.d.ts +2 -2
- package/vercel/index.d.ts +1 -1
- package/wasi.d.ts +18 -0
- package/wasm/core.d.ts +3 -3
- package/wasm/index.d.ts +1 -1
- package/wasm/index.js +26 -45
- package/wasm/init.js +26 -45
- package/wasm/wasi.d.ts +3 -3
package/README.md
CHANGED
|
@@ -168,6 +168,13 @@ You can view our current progress and planned features here:
|
|
|
168
168
|
|
|
169
169
|
**[Check out the Ziex Issue Tracker →](https://github.com/ziex-dev/ziex/issues)**
|
|
170
170
|
|
|
171
|
+
## Versions
|
|
172
|
+
| Zig | Ziex | Branch | Status |
|
|
173
|
+
|-------------|-------------------|-------------------|----------------|
|
|
174
|
+
| `0.16.0` | `0.1.0-dev.1050+` | `main` | Unstable (dev) |
|
|
175
|
+
| `0.15.2` | `0.1.0-dev-1050` | `zig-0.15` | Stable (dev) |
|
|
176
|
+
|
|
177
|
+
|
|
171
178
|
## Editor Support
|
|
172
179
|
|
|
173
180
|
* [VSCode](https://marketplace.visualstudio.com/items?itemName=ziex.ziex)/[VSCode Forks](https://open-vsx.org/extension/ziex/ziex) Extension
|
package/app.d.ts
CHANGED
|
@@ -4,16 +4,16 @@ import type { D1Database } from "./db";
|
|
|
4
4
|
import type { WASI } from "./wasi";
|
|
5
5
|
/**
|
|
6
6
|
* Anything that can be resolved to a `WebAssembly.Module`:
|
|
7
|
-
* - `WebAssembly.Module`
|
|
8
|
-
* - `ArrayBuffer` / `ArrayBufferView`
|
|
9
|
-
* - `Response`
|
|
10
|
-
* - `string`
|
|
11
|
-
* - `URL`
|
|
7
|
+
* - `WebAssembly.Module` - already compiled (Cloudflare Workers, wrangler)
|
|
8
|
+
* - `ArrayBuffer` / `ArrayBufferView` - raw WASM bytes
|
|
9
|
+
* - `Response` - a fetch() response whose body is the WASM binary
|
|
10
|
+
* - `string` - an HTTP(S) URL or an absolute file path (Bun)
|
|
11
|
+
* - `URL` - a URL object
|
|
12
12
|
*/
|
|
13
13
|
export type WasmInput = WebAssembly.Module | ArrayBuffer | ArrayBufferView | Response | string | URL;
|
|
14
14
|
/**
|
|
15
15
|
* Resolve any supported WASM input to a compiled `WebAssembly.Module`.
|
|
16
|
-
* The result is NOT cached here
|
|
16
|
+
* The result is NOT cached here - cache it at the call site if needed.
|
|
17
17
|
*/
|
|
18
18
|
export declare function resolveModule(input: WasmInput): Promise<WebAssembly.Module>;
|
|
19
19
|
/** Keys of `Env` whose value extends {@link KVNamespace}. */
|
|
@@ -28,7 +28,7 @@ type DBKey<Env> = {
|
|
|
28
28
|
[K in keyof Env]: Env[K] extends D1Database ? K : never;
|
|
29
29
|
}[keyof Env];
|
|
30
30
|
type ZiexOptions<Env> = {
|
|
31
|
-
/** WASM module
|
|
31
|
+
/** WASM module - accepts any {@link WasmInput}. Resolved and cached on first request. */
|
|
32
32
|
module: WasmInput;
|
|
33
33
|
/** Optional pre-configured WASI instance. */
|
|
34
34
|
wasi?: WASI;
|
|
@@ -37,8 +37,8 @@ type ZiexOptions<Env> = {
|
|
|
37
37
|
/**
|
|
38
38
|
* KV namespace bindings. Two forms are supported:
|
|
39
39
|
*
|
|
40
|
-
* - **Env key**: a single key from `Env` whose value is a `KVNamespace`
|
|
41
|
-
* - **Name map**: `{ [bindingName]: envKey }`
|
|
40
|
+
* - **Env key**: a single key from `Env` whose value is a `KVNamespace` - used as the `"default"` binding.
|
|
41
|
+
* - **Name map**: `{ [bindingName]: envKey }` - map namespace names to env keys.
|
|
42
42
|
*
|
|
43
43
|
* @example Single env key (becomes the "default" binding)
|
|
44
44
|
* ```ts
|
|
@@ -69,7 +69,7 @@ type ZiexOptions<Env> = {
|
|
|
69
69
|
websocket?: DOKey<Env>;
|
|
70
70
|
};
|
|
71
71
|
/**
|
|
72
|
-
* Main Ziex application class. Mirrors the Hono API style
|
|
72
|
+
* Main Ziex application class. Mirrors the Hono API style - construct once,
|
|
73
73
|
* export as default, and the runtime calls `fetch` for you.
|
|
74
74
|
*
|
|
75
75
|
* Works on Cloudflare Workers, Bun, and Vercel Edge out of the box.
|
package/build.zig.zon
CHANGED
package/cloudflare/index.js
CHANGED
|
@@ -84,6 +84,8 @@ class ZigJS {
|
|
|
84
84
|
const bytes = encoder.encode(val);
|
|
85
85
|
if (bytes.byteLength > max)
|
|
86
86
|
return;
|
|
87
|
+
if (bytes.length === 0)
|
|
88
|
+
return;
|
|
87
89
|
new Uint8Array(this.memory.buffer, ptr, bytes.length).set(bytes);
|
|
88
90
|
}
|
|
89
91
|
valueNew(out, id, argsAddr, argsLen) {
|
|
@@ -1129,69 +1131,48 @@ var TAG_NAMES = [
|
|
|
1129
1131
|
"view"
|
|
1130
1132
|
];
|
|
1131
1133
|
var DELEGATED_EVENTS = [
|
|
1132
|
-
"click",
|
|
1133
|
-
"dblclick",
|
|
1134
|
-
"input",
|
|
1135
|
-
"change",
|
|
1136
|
-
"submit",
|
|
1137
|
-
"
|
|
1138
|
-
"
|
|
1139
|
-
"keydown",
|
|
1140
|
-
"keyup",
|
|
1141
|
-
"keypress",
|
|
1142
|
-
"mouseenter",
|
|
1143
|
-
"mouseleave",
|
|
1144
|
-
"mousedown",
|
|
1145
|
-
"mouseup",
|
|
1146
|
-
"mousemove",
|
|
1147
|
-
"touchstart",
|
|
1148
|
-
"touchend",
|
|
1149
|
-
"touchmove",
|
|
1150
|
-
"scroll"
|
|
1134
|
+
{ domType: "click", eventTypeId: 0 },
|
|
1135
|
+
{ domType: "dblclick", eventTypeId: 1 },
|
|
1136
|
+
{ domType: "input", eventTypeId: 2 },
|
|
1137
|
+
{ domType: "change", eventTypeId: 3 },
|
|
1138
|
+
{ domType: "submit", eventTypeId: 4 },
|
|
1139
|
+
{ domType: "focusin", eventTypeId: 5 },
|
|
1140
|
+
{ domType: "focusout", eventTypeId: 6 },
|
|
1141
|
+
{ domType: "keydown", eventTypeId: 7 },
|
|
1142
|
+
{ domType: "keyup", eventTypeId: 8 },
|
|
1143
|
+
{ domType: "keypress", eventTypeId: 9 },
|
|
1144
|
+
{ domType: "mouseenter", eventTypeId: 10 },
|
|
1145
|
+
{ domType: "mouseleave", eventTypeId: 11 },
|
|
1146
|
+
{ domType: "mousedown", eventTypeId: 12 },
|
|
1147
|
+
{ domType: "mouseup", eventTypeId: 13 },
|
|
1148
|
+
{ domType: "mousemove", eventTypeId: 14 },
|
|
1149
|
+
{ domType: "touchstart", eventTypeId: 15 },
|
|
1150
|
+
{ domType: "touchend", eventTypeId: 16 },
|
|
1151
|
+
{ domType: "touchmove", eventTypeId: 17 },
|
|
1152
|
+
{ domType: "scroll", eventTypeId: 18 }
|
|
1151
1153
|
];
|
|
1152
|
-
var EVENT_TYPE_MAP = {
|
|
1153
|
-
click: 0,
|
|
1154
|
-
dblclick: 1,
|
|
1155
|
-
input: 2,
|
|
1156
|
-
change: 3,
|
|
1157
|
-
submit: 4,
|
|
1158
|
-
focus: 5,
|
|
1159
|
-
blur: 6,
|
|
1160
|
-
keydown: 7,
|
|
1161
|
-
keyup: 8,
|
|
1162
|
-
keypress: 9,
|
|
1163
|
-
mouseenter: 10,
|
|
1164
|
-
mouseleave: 11,
|
|
1165
|
-
mousedown: 12,
|
|
1166
|
-
mouseup: 13,
|
|
1167
|
-
mousemove: 14,
|
|
1168
|
-
touchstart: 15,
|
|
1169
|
-
touchend: 16,
|
|
1170
|
-
touchmove: 17,
|
|
1171
|
-
scroll: 18
|
|
1172
|
-
};
|
|
1173
1154
|
var eventHandlerModes = new Map;
|
|
1174
1155
|
function initEventDelegation(bridge, rootSelector = "body") {
|
|
1175
1156
|
const root = document.querySelector(rootSelector);
|
|
1176
1157
|
if (!root)
|
|
1177
1158
|
return () => {};
|
|
1178
1159
|
const removers = [];
|
|
1179
|
-
for (const
|
|
1160
|
+
for (const delegatedEvent of DELEGATED_EVENTS) {
|
|
1180
1161
|
const listener = (event) => {
|
|
1181
1162
|
let target = event.target;
|
|
1182
1163
|
while (target && target !== document.body) {
|
|
1183
1164
|
const zxRef = target.__zx_ref;
|
|
1184
1165
|
if (zxRef !== undefined) {
|
|
1185
|
-
bridge.eventbridge(BigInt(zxRef),
|
|
1166
|
+
bridge.eventbridge(BigInt(zxRef), delegatedEvent.eventTypeId, event);
|
|
1186
1167
|
if (event.cancelBubble)
|
|
1187
1168
|
break;
|
|
1188
1169
|
}
|
|
1189
1170
|
target = target.parentElement;
|
|
1190
1171
|
}
|
|
1191
1172
|
};
|
|
1192
|
-
const options = { passive:
|
|
1193
|
-
root.addEventListener(
|
|
1194
|
-
removers.push(() => root.removeEventListener(
|
|
1173
|
+
const options = { passive: delegatedEvent.domType.startsWith("touch") || delegatedEvent.domType === "scroll" };
|
|
1174
|
+
root.addEventListener(delegatedEvent.domType, listener, options);
|
|
1175
|
+
removers.push(() => root.removeEventListener(delegatedEvent.domType, listener, options));
|
|
1195
1176
|
}
|
|
1196
1177
|
return () => {
|
|
1197
1178
|
for (const remove of removers)
|
|
@@ -1707,6 +1688,61 @@ function createWasiImports({
|
|
|
1707
1688
|
dv.setBigUint64(filestat_ptr + 56, 0n, true);
|
|
1708
1689
|
return 0;
|
|
1709
1690
|
},
|
|
1691
|
+
fd_filestat_set_size(_fd, _size) {
|
|
1692
|
+
return 76;
|
|
1693
|
+
},
|
|
1694
|
+
fd_filestat_set_times(_fd, _atim, _mtim, _fst_flags) {
|
|
1695
|
+
return 76;
|
|
1696
|
+
},
|
|
1697
|
+
fd_fdstat_set_flags(_fd, _flags) {
|
|
1698
|
+
return 0;
|
|
1699
|
+
},
|
|
1700
|
+
fd_fdstat_set_rights(_fd, _rights_base, _rights_inheriting) {
|
|
1701
|
+
return 0;
|
|
1702
|
+
},
|
|
1703
|
+
fd_sync(_fd) {
|
|
1704
|
+
return 0;
|
|
1705
|
+
},
|
|
1706
|
+
fd_datasync(_fd) {
|
|
1707
|
+
return 0;
|
|
1708
|
+
},
|
|
1709
|
+
fd_advise(_fd, _offset, _len, _advice) {
|
|
1710
|
+
return 0;
|
|
1711
|
+
},
|
|
1712
|
+
fd_allocate(_fd, _offset, _len) {
|
|
1713
|
+
return 76;
|
|
1714
|
+
},
|
|
1715
|
+
fd_tell(_fd, offset_ptr) {
|
|
1716
|
+
v().setBigUint64(offset_ptr, 0n, true);
|
|
1717
|
+
return 0;
|
|
1718
|
+
},
|
|
1719
|
+
fd_renumber(_from, _to) {
|
|
1720
|
+
return 0;
|
|
1721
|
+
},
|
|
1722
|
+
path_filestat_set_times(_fd, _flags, _path, _path_len, _atim, _mtim, _fst_flags) {
|
|
1723
|
+
return 76;
|
|
1724
|
+
},
|
|
1725
|
+
path_link(_old_fd, _old_flags, _old_path, _old_path_len, _new_fd, _new_path, _new_path_len) {
|
|
1726
|
+
return 76;
|
|
1727
|
+
},
|
|
1728
|
+
path_symlink(_old_path, _old_path_len, _fd, _new_path, _new_path_len) {
|
|
1729
|
+
return 76;
|
|
1730
|
+
},
|
|
1731
|
+
proc_raise(_sig) {
|
|
1732
|
+
return 0;
|
|
1733
|
+
},
|
|
1734
|
+
sock_recv(_fd, _ri_data, _ri_data_len, _ri_flags, ro_datalen_ptr, ro_flags_ptr) {
|
|
1735
|
+
v().setUint32(ro_datalen_ptr, 0, true);
|
|
1736
|
+
v().setUint32(ro_flags_ptr, 0, true);
|
|
1737
|
+
return 76;
|
|
1738
|
+
},
|
|
1739
|
+
sock_send(_fd, _si_data, _si_data_len, _si_flags, so_datalen_ptr) {
|
|
1740
|
+
v().setUint32(so_datalen_ptr, 0, true);
|
|
1741
|
+
return 76;
|
|
1742
|
+
},
|
|
1743
|
+
sock_shutdown(_fd, _how) {
|
|
1744
|
+
return 76;
|
|
1745
|
+
},
|
|
1710
1746
|
fd_seek(_fd, _offset, _whence, newoffset_ptr) {
|
|
1711
1747
|
v().setBigInt64(newoffset_ptr, 0n, true);
|
|
1712
1748
|
return 0;
|
|
@@ -1721,6 +1757,10 @@ function createWasiImports({
|
|
|
1721
1757
|
v().setBigUint64(time_ptr, BigInt(Date.now()) * 1000000n, true);
|
|
1722
1758
|
return 0;
|
|
1723
1759
|
},
|
|
1760
|
+
clock_res_get(_id, res_ptr) {
|
|
1761
|
+
v().setBigUint64(res_ptr, 1000000n, true);
|
|
1762
|
+
return 0;
|
|
1763
|
+
},
|
|
1724
1764
|
random_get(buf_ptr, buf_len) {
|
|
1725
1765
|
crypto.getRandomValues(new Uint8Array(wasmMemory.buffer, buf_ptr, buf_len));
|
|
1726
1766
|
return 0;
|
package/index.js
CHANGED
|
@@ -570,6 +570,61 @@ function createWasiImports({
|
|
|
570
570
|
dv.setBigUint64(filestat_ptr + 56, 0n, true);
|
|
571
571
|
return 0;
|
|
572
572
|
},
|
|
573
|
+
fd_filestat_set_size(_fd, _size) {
|
|
574
|
+
return 76;
|
|
575
|
+
},
|
|
576
|
+
fd_filestat_set_times(_fd, _atim, _mtim, _fst_flags) {
|
|
577
|
+
return 76;
|
|
578
|
+
},
|
|
579
|
+
fd_fdstat_set_flags(_fd, _flags) {
|
|
580
|
+
return 0;
|
|
581
|
+
},
|
|
582
|
+
fd_fdstat_set_rights(_fd, _rights_base, _rights_inheriting) {
|
|
583
|
+
return 0;
|
|
584
|
+
},
|
|
585
|
+
fd_sync(_fd) {
|
|
586
|
+
return 0;
|
|
587
|
+
},
|
|
588
|
+
fd_datasync(_fd) {
|
|
589
|
+
return 0;
|
|
590
|
+
},
|
|
591
|
+
fd_advise(_fd, _offset, _len, _advice) {
|
|
592
|
+
return 0;
|
|
593
|
+
},
|
|
594
|
+
fd_allocate(_fd, _offset, _len) {
|
|
595
|
+
return 76;
|
|
596
|
+
},
|
|
597
|
+
fd_tell(_fd, offset_ptr) {
|
|
598
|
+
v().setBigUint64(offset_ptr, 0n, true);
|
|
599
|
+
return 0;
|
|
600
|
+
},
|
|
601
|
+
fd_renumber(_from, _to) {
|
|
602
|
+
return 0;
|
|
603
|
+
},
|
|
604
|
+
path_filestat_set_times(_fd, _flags, _path, _path_len, _atim, _mtim, _fst_flags) {
|
|
605
|
+
return 76;
|
|
606
|
+
},
|
|
607
|
+
path_link(_old_fd, _old_flags, _old_path, _old_path_len, _new_fd, _new_path, _new_path_len) {
|
|
608
|
+
return 76;
|
|
609
|
+
},
|
|
610
|
+
path_symlink(_old_path, _old_path_len, _fd, _new_path, _new_path_len) {
|
|
611
|
+
return 76;
|
|
612
|
+
},
|
|
613
|
+
proc_raise(_sig) {
|
|
614
|
+
return 0;
|
|
615
|
+
},
|
|
616
|
+
sock_recv(_fd, _ri_data, _ri_data_len, _ri_flags, ro_datalen_ptr, ro_flags_ptr) {
|
|
617
|
+
v().setUint32(ro_datalen_ptr, 0, true);
|
|
618
|
+
v().setUint32(ro_flags_ptr, 0, true);
|
|
619
|
+
return 76;
|
|
620
|
+
},
|
|
621
|
+
sock_send(_fd, _si_data, _si_data_len, _si_flags, so_datalen_ptr) {
|
|
622
|
+
v().setUint32(so_datalen_ptr, 0, true);
|
|
623
|
+
return 76;
|
|
624
|
+
},
|
|
625
|
+
sock_shutdown(_fd, _how) {
|
|
626
|
+
return 76;
|
|
627
|
+
},
|
|
573
628
|
fd_seek(_fd, _offset, _whence, newoffset_ptr) {
|
|
574
629
|
v().setBigInt64(newoffset_ptr, 0n, true);
|
|
575
630
|
return 0;
|
|
@@ -584,6 +639,10 @@ function createWasiImports({
|
|
|
584
639
|
v().setBigUint64(time_ptr, BigInt(Date.now()) * 1000000n, true);
|
|
585
640
|
return 0;
|
|
586
641
|
},
|
|
642
|
+
clock_res_get(_id, res_ptr) {
|
|
643
|
+
v().setBigUint64(res_ptr, 1000000n, true);
|
|
644
|
+
return 0;
|
|
645
|
+
},
|
|
587
646
|
random_get(buf_ptr, buf_len) {
|
|
588
647
|
crypto.getRandomValues(new Uint8Array(wasmMemory.buffer, buf_ptr, buf_len));
|
|
589
648
|
return 0;
|
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.1068",
|
|
4
4
|
"description": "ZX 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.1068"
|
|
41
41
|
},
|
|
42
42
|
"peerDependenciesMeta": {
|
|
43
43
|
"react": {
|
package/runtime.d.ts
CHANGED
|
@@ -58,9 +58,9 @@ export declare function run({ request, env, ctx, module, kv: kvBindings, db: dbB
|
|
|
58
58
|
waitUntil(promise: Promise<unknown>): void;
|
|
59
59
|
};
|
|
60
60
|
module: WebAssembly.Module;
|
|
61
|
-
/** KV namespace bindings
|
|
61
|
+
/** KV namespace bindings - `{ default: env.KV, otherName: env.OTHER_KV }` */
|
|
62
62
|
kv?: Record<string, KVNamespace>;
|
|
63
|
-
/** D1 bindings
|
|
63
|
+
/** D1 bindings - `{ default: env.DB, analytics: env.ANALYTICS_DB }` */
|
|
64
64
|
db?: Record<string, D1Database>;
|
|
65
65
|
imports?: (mem: () => WebAssembly.Memory) => Record<string, Record<string, unknown>>;
|
|
66
66
|
wasi?: WASI;
|
package/vercel/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ type FetchApp = {
|
|
|
20
20
|
* Wrap a Ziex app as a Vercel Edge Function handler.
|
|
21
21
|
*
|
|
22
22
|
* Returns a standard `(req: Request) => Promise<Response>` function.
|
|
23
|
-
* Vercel's edge runtime calls it directly
|
|
23
|
+
* Vercel's edge runtime calls it directly - just export it as default.
|
|
24
24
|
*/
|
|
25
25
|
export declare function handle(app: FetchApp): (req: Request) => Promise<Response>;
|
|
26
26
|
export {};
|
package/wasi.d.ts
CHANGED
|
@@ -37,10 +37,28 @@ export declare function createWasiImports({ request, stdinData, onStdout, }: {
|
|
|
37
37
|
fd_pread(_fd: number, _iovs: number, _iovs_len: number, _offset: bigint, nread_ptr: number): number;
|
|
38
38
|
fd_pwrite(_fd: number, _iovs: number, _iovs_len: number, _offset: bigint, nwritten_ptr: number): number;
|
|
39
39
|
fd_filestat_get(_fd: number, filestat_ptr: number): number;
|
|
40
|
+
fd_filestat_set_size(_fd: number, _size: bigint): number;
|
|
41
|
+
fd_filestat_set_times(_fd: number, _atim: bigint, _mtim: bigint, _fst_flags: number): number;
|
|
42
|
+
fd_fdstat_set_flags(_fd: number, _flags: number): number;
|
|
43
|
+
fd_fdstat_set_rights(_fd: number, _rights_base: bigint, _rights_inheriting: bigint): number;
|
|
44
|
+
fd_sync(_fd: number): number;
|
|
45
|
+
fd_datasync(_fd: number): number;
|
|
46
|
+
fd_advise(_fd: number, _offset: bigint, _len: bigint, _advice: number): number;
|
|
47
|
+
fd_allocate(_fd: number, _offset: bigint, _len: bigint): number;
|
|
48
|
+
fd_tell(_fd: number, offset_ptr: number): number;
|
|
49
|
+
fd_renumber(_from: number, _to: number): number;
|
|
50
|
+
path_filestat_set_times(_fd: number, _flags: number, _path: number, _path_len: number, _atim: bigint, _mtim: bigint, _fst_flags: number): number;
|
|
51
|
+
path_link(_old_fd: number, _old_flags: number, _old_path: number, _old_path_len: number, _new_fd: number, _new_path: number, _new_path_len: number): number;
|
|
52
|
+
path_symlink(_old_path: number, _old_path_len: number, _fd: number, _new_path: number, _new_path_len: number): number;
|
|
53
|
+
proc_raise(_sig: number): number;
|
|
54
|
+
sock_recv(_fd: number, _ri_data: number, _ri_data_len: number, _ri_flags: number, ro_datalen_ptr: number, ro_flags_ptr: number): number;
|
|
55
|
+
sock_send(_fd: number, _si_data: number, _si_data_len: number, _si_flags: number, so_datalen_ptr: number): number;
|
|
56
|
+
sock_shutdown(_fd: number, _how: number): number;
|
|
40
57
|
fd_seek(_fd: number, _offset: bigint, _whence: number, newoffset_ptr: number): number;
|
|
41
58
|
proc_exit(code: number): never;
|
|
42
59
|
sched_yield(): number;
|
|
43
60
|
clock_time_get(_id: number, _precision: bigint, time_ptr: number): number;
|
|
61
|
+
clock_res_get(_id: number, res_ptr: number): number;
|
|
44
62
|
random_get(buf_ptr: number, buf_len: number): number;
|
|
45
63
|
path_open(_fd: number, _dirflags: number, _path: number, _path_len: number, _oflags: number, _rights_base: bigint, _rights_inheriting: bigint, _fdflags: number, opened_fd_ptr: number): number;
|
|
46
64
|
path_create_directory(_fd: number, _path: number, _path_len: number): number;
|
package/wasm/core.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ZigJS } from "../../../../vendor/jsz/js/src";
|
|
2
2
|
/**
|
|
3
|
-
* Core WASM bridge
|
|
3
|
+
* Core WASM bridge - environment-agnostic (browser + edge).
|
|
4
4
|
* Contains no references to browser globals (document, window, WebSocket, HTMLFormElement).
|
|
5
5
|
*/
|
|
6
6
|
export declare const CallbackType: {
|
|
@@ -24,7 +24,7 @@ export type WsOnCloseHandler = (wsId: bigint, code: number, reasonPtr: number, r
|
|
|
24
24
|
export declare const jsz: ZigJS;
|
|
25
25
|
/** Store a value using jsz.storeValue and get the 64-bit reference. */
|
|
26
26
|
export declare function storeValueGetRef(val: any): bigint;
|
|
27
|
-
/** Shared encoder/decoder
|
|
27
|
+
/** Shared encoder/decoder - avoids allocating new instances on every call. */
|
|
28
28
|
export declare const textDecoder: TextDecoder;
|
|
29
29
|
export declare const textEncoder: TextEncoder;
|
|
30
30
|
export declare function getMemoryView(): Uint8Array;
|
|
@@ -35,7 +35,7 @@ export declare function writeBytes(ptr: number, data: Uint8Array): void;
|
|
|
35
35
|
export declare function wrapPromisingExport<F extends (...args: any[]) => any>(fn: F | undefined): F | undefined;
|
|
36
36
|
export declare function invokeWasmExport<F extends (...args: any[]) => any>(fn: F | undefined, ...args: Parameters<F>): void;
|
|
37
37
|
/**
|
|
38
|
-
* Core ZX Bridge
|
|
38
|
+
* Core ZX Bridge - works in both browser and edge runtimes.
|
|
39
39
|
* Contains fetch, timers, and logging. No DOM or browser-WebSocket references.
|
|
40
40
|
*
|
|
41
41
|
* Extend this class in browser environments to add DOM and WebSocket support.
|
package/wasm/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export type { CallbackTypeValue } from "./core";
|
|
|
3
3
|
import { ZxBridgeCore } from "./core";
|
|
4
4
|
import { type KVNamespace } from "../kv";
|
|
5
5
|
/**
|
|
6
|
-
* Browser ZX Bridge
|
|
6
|
+
* Browser ZX Bridge - extends ZxBridgeCore with DOM, WebSocket, and form-action support.
|
|
7
7
|
* Import this from environments that have access to browser globals.
|
|
8
8
|
* For edge runtimes, import ZxBridgeCore from ./core instead.
|
|
9
9
|
*/
|
package/wasm/index.js
CHANGED
|
@@ -84,6 +84,8 @@ class ZigJS {
|
|
|
84
84
|
const bytes = encoder.encode(val);
|
|
85
85
|
if (bytes.byteLength > max)
|
|
86
86
|
return;
|
|
87
|
+
if (bytes.length === 0)
|
|
88
|
+
return;
|
|
87
89
|
new Uint8Array(this.memory.buffer, ptr, bytes.length).set(bytes);
|
|
88
90
|
}
|
|
89
91
|
valueNew(out, id, argsAddr, argsLen) {
|
|
@@ -1129,69 +1131,48 @@ var TAG_NAMES = [
|
|
|
1129
1131
|
"view"
|
|
1130
1132
|
];
|
|
1131
1133
|
var DELEGATED_EVENTS = [
|
|
1132
|
-
"click",
|
|
1133
|
-
"dblclick",
|
|
1134
|
-
"input",
|
|
1135
|
-
"change",
|
|
1136
|
-
"submit",
|
|
1137
|
-
"
|
|
1138
|
-
"
|
|
1139
|
-
"keydown",
|
|
1140
|
-
"keyup",
|
|
1141
|
-
"keypress",
|
|
1142
|
-
"mouseenter",
|
|
1143
|
-
"mouseleave",
|
|
1144
|
-
"mousedown",
|
|
1145
|
-
"mouseup",
|
|
1146
|
-
"mousemove",
|
|
1147
|
-
"touchstart",
|
|
1148
|
-
"touchend",
|
|
1149
|
-
"touchmove",
|
|
1150
|
-
"scroll"
|
|
1134
|
+
{ domType: "click", eventTypeId: 0 },
|
|
1135
|
+
{ domType: "dblclick", eventTypeId: 1 },
|
|
1136
|
+
{ domType: "input", eventTypeId: 2 },
|
|
1137
|
+
{ domType: "change", eventTypeId: 3 },
|
|
1138
|
+
{ domType: "submit", eventTypeId: 4 },
|
|
1139
|
+
{ domType: "focusin", eventTypeId: 5 },
|
|
1140
|
+
{ domType: "focusout", eventTypeId: 6 },
|
|
1141
|
+
{ domType: "keydown", eventTypeId: 7 },
|
|
1142
|
+
{ domType: "keyup", eventTypeId: 8 },
|
|
1143
|
+
{ domType: "keypress", eventTypeId: 9 },
|
|
1144
|
+
{ domType: "mouseenter", eventTypeId: 10 },
|
|
1145
|
+
{ domType: "mouseleave", eventTypeId: 11 },
|
|
1146
|
+
{ domType: "mousedown", eventTypeId: 12 },
|
|
1147
|
+
{ domType: "mouseup", eventTypeId: 13 },
|
|
1148
|
+
{ domType: "mousemove", eventTypeId: 14 },
|
|
1149
|
+
{ domType: "touchstart", eventTypeId: 15 },
|
|
1150
|
+
{ domType: "touchend", eventTypeId: 16 },
|
|
1151
|
+
{ domType: "touchmove", eventTypeId: 17 },
|
|
1152
|
+
{ domType: "scroll", eventTypeId: 18 }
|
|
1151
1153
|
];
|
|
1152
|
-
var EVENT_TYPE_MAP = {
|
|
1153
|
-
click: 0,
|
|
1154
|
-
dblclick: 1,
|
|
1155
|
-
input: 2,
|
|
1156
|
-
change: 3,
|
|
1157
|
-
submit: 4,
|
|
1158
|
-
focus: 5,
|
|
1159
|
-
blur: 6,
|
|
1160
|
-
keydown: 7,
|
|
1161
|
-
keyup: 8,
|
|
1162
|
-
keypress: 9,
|
|
1163
|
-
mouseenter: 10,
|
|
1164
|
-
mouseleave: 11,
|
|
1165
|
-
mousedown: 12,
|
|
1166
|
-
mouseup: 13,
|
|
1167
|
-
mousemove: 14,
|
|
1168
|
-
touchstart: 15,
|
|
1169
|
-
touchend: 16,
|
|
1170
|
-
touchmove: 17,
|
|
1171
|
-
scroll: 18
|
|
1172
|
-
};
|
|
1173
1154
|
var eventHandlerModes = new Map;
|
|
1174
1155
|
function initEventDelegation(bridge, rootSelector = "body") {
|
|
1175
1156
|
const root = document.querySelector(rootSelector);
|
|
1176
1157
|
if (!root)
|
|
1177
1158
|
return () => {};
|
|
1178
1159
|
const removers = [];
|
|
1179
|
-
for (const
|
|
1160
|
+
for (const delegatedEvent of DELEGATED_EVENTS) {
|
|
1180
1161
|
const listener = (event) => {
|
|
1181
1162
|
let target = event.target;
|
|
1182
1163
|
while (target && target !== document.body) {
|
|
1183
1164
|
const zxRef = target.__zx_ref;
|
|
1184
1165
|
if (zxRef !== undefined) {
|
|
1185
|
-
bridge.eventbridge(BigInt(zxRef),
|
|
1166
|
+
bridge.eventbridge(BigInt(zxRef), delegatedEvent.eventTypeId, event);
|
|
1186
1167
|
if (event.cancelBubble)
|
|
1187
1168
|
break;
|
|
1188
1169
|
}
|
|
1189
1170
|
target = target.parentElement;
|
|
1190
1171
|
}
|
|
1191
1172
|
};
|
|
1192
|
-
const options = { passive:
|
|
1193
|
-
root.addEventListener(
|
|
1194
|
-
removers.push(() => root.removeEventListener(
|
|
1173
|
+
const options = { passive: delegatedEvent.domType.startsWith("touch") || delegatedEvent.domType === "scroll" };
|
|
1174
|
+
root.addEventListener(delegatedEvent.domType, listener, options);
|
|
1175
|
+
removers.push(() => root.removeEventListener(delegatedEvent.domType, listener, options));
|
|
1195
1176
|
}
|
|
1196
1177
|
return () => {
|
|
1197
1178
|
for (const remove of removers)
|
package/wasm/init.js
CHANGED
|
@@ -69,6 +69,8 @@ class ZigJS {
|
|
|
69
69
|
const bytes = encoder.encode(val);
|
|
70
70
|
if (bytes.byteLength > max)
|
|
71
71
|
return;
|
|
72
|
+
if (bytes.length === 0)
|
|
73
|
+
return;
|
|
72
74
|
new Uint8Array(this.memory.buffer, ptr, bytes.length).set(bytes);
|
|
73
75
|
}
|
|
74
76
|
valueNew(out, id, argsAddr, argsLen) {
|
|
@@ -1091,69 +1093,48 @@ var TAG_NAMES = [
|
|
|
1091
1093
|
"view"
|
|
1092
1094
|
];
|
|
1093
1095
|
var DELEGATED_EVENTS = [
|
|
1094
|
-
"click",
|
|
1095
|
-
"dblclick",
|
|
1096
|
-
"input",
|
|
1097
|
-
"change",
|
|
1098
|
-
"submit",
|
|
1099
|
-
"
|
|
1100
|
-
"
|
|
1101
|
-
"keydown",
|
|
1102
|
-
"keyup",
|
|
1103
|
-
"keypress",
|
|
1104
|
-
"mouseenter",
|
|
1105
|
-
"mouseleave",
|
|
1106
|
-
"mousedown",
|
|
1107
|
-
"mouseup",
|
|
1108
|
-
"mousemove",
|
|
1109
|
-
"touchstart",
|
|
1110
|
-
"touchend",
|
|
1111
|
-
"touchmove",
|
|
1112
|
-
"scroll"
|
|
1096
|
+
{ domType: "click", eventTypeId: 0 },
|
|
1097
|
+
{ domType: "dblclick", eventTypeId: 1 },
|
|
1098
|
+
{ domType: "input", eventTypeId: 2 },
|
|
1099
|
+
{ domType: "change", eventTypeId: 3 },
|
|
1100
|
+
{ domType: "submit", eventTypeId: 4 },
|
|
1101
|
+
{ domType: "focusin", eventTypeId: 5 },
|
|
1102
|
+
{ domType: "focusout", eventTypeId: 6 },
|
|
1103
|
+
{ domType: "keydown", eventTypeId: 7 },
|
|
1104
|
+
{ domType: "keyup", eventTypeId: 8 },
|
|
1105
|
+
{ domType: "keypress", eventTypeId: 9 },
|
|
1106
|
+
{ domType: "mouseenter", eventTypeId: 10 },
|
|
1107
|
+
{ domType: "mouseleave", eventTypeId: 11 },
|
|
1108
|
+
{ domType: "mousedown", eventTypeId: 12 },
|
|
1109
|
+
{ domType: "mouseup", eventTypeId: 13 },
|
|
1110
|
+
{ domType: "mousemove", eventTypeId: 14 },
|
|
1111
|
+
{ domType: "touchstart", eventTypeId: 15 },
|
|
1112
|
+
{ domType: "touchend", eventTypeId: 16 },
|
|
1113
|
+
{ domType: "touchmove", eventTypeId: 17 },
|
|
1114
|
+
{ domType: "scroll", eventTypeId: 18 }
|
|
1113
1115
|
];
|
|
1114
|
-
var EVENT_TYPE_MAP = {
|
|
1115
|
-
click: 0,
|
|
1116
|
-
dblclick: 1,
|
|
1117
|
-
input: 2,
|
|
1118
|
-
change: 3,
|
|
1119
|
-
submit: 4,
|
|
1120
|
-
focus: 5,
|
|
1121
|
-
blur: 6,
|
|
1122
|
-
keydown: 7,
|
|
1123
|
-
keyup: 8,
|
|
1124
|
-
keypress: 9,
|
|
1125
|
-
mouseenter: 10,
|
|
1126
|
-
mouseleave: 11,
|
|
1127
|
-
mousedown: 12,
|
|
1128
|
-
mouseup: 13,
|
|
1129
|
-
mousemove: 14,
|
|
1130
|
-
touchstart: 15,
|
|
1131
|
-
touchend: 16,
|
|
1132
|
-
touchmove: 17,
|
|
1133
|
-
scroll: 18
|
|
1134
|
-
};
|
|
1135
1116
|
var eventHandlerModes = new Map;
|
|
1136
1117
|
function initEventDelegation(bridge, rootSelector = "body") {
|
|
1137
1118
|
const root = document.querySelector(rootSelector);
|
|
1138
1119
|
if (!root)
|
|
1139
1120
|
return () => {};
|
|
1140
1121
|
const removers = [];
|
|
1141
|
-
for (const
|
|
1122
|
+
for (const delegatedEvent of DELEGATED_EVENTS) {
|
|
1142
1123
|
const listener = (event) => {
|
|
1143
1124
|
let target = event.target;
|
|
1144
1125
|
while (target && target !== document.body) {
|
|
1145
1126
|
const zxRef = target.__zx_ref;
|
|
1146
1127
|
if (zxRef !== undefined) {
|
|
1147
|
-
bridge.eventbridge(BigInt(zxRef),
|
|
1128
|
+
bridge.eventbridge(BigInt(zxRef), delegatedEvent.eventTypeId, event);
|
|
1148
1129
|
if (event.cancelBubble)
|
|
1149
1130
|
break;
|
|
1150
1131
|
}
|
|
1151
1132
|
target = target.parentElement;
|
|
1152
1133
|
}
|
|
1153
1134
|
};
|
|
1154
|
-
const options = { passive:
|
|
1155
|
-
root.addEventListener(
|
|
1156
|
-
removers.push(() => root.removeEventListener(
|
|
1135
|
+
const options = { passive: delegatedEvent.domType.startsWith("touch") || delegatedEvent.domType === "scroll" };
|
|
1136
|
+
root.addEventListener(delegatedEvent.domType, listener, options);
|
|
1137
|
+
removers.push(() => root.removeEventListener(delegatedEvent.domType, listener, options));
|
|
1157
1138
|
}
|
|
1158
1139
|
return () => {
|
|
1159
1140
|
for (const remove of removers)
|
package/wasm/wasi.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WASI/edge WASM bridge
|
|
2
|
+
* WASI/edge WASM bridge - zero dependencies on ZigJS (jsz) or browser globals.
|
|
3
3
|
*
|
|
4
4
|
* Import this (and only this) from edge/server runtimes. It provides the
|
|
5
5
|
* minimal __zx import namespace needed by server-side WASM: log, fetch, and
|
|
6
|
-
* timers. The jsz importObject is intentionally omitted
|
|
6
|
+
* timers. The jsz importObject is intentionally omitted - the server binary
|
|
7
7
|
* does not use jsz value-passing.
|
|
8
8
|
*/
|
|
9
9
|
export declare class ZxWasiBridge {
|
|
@@ -18,7 +18,7 @@ export declare class ZxWasiBridge {
|
|
|
18
18
|
* Create the WASI import object for WASM instantiation.
|
|
19
19
|
*
|
|
20
20
|
* Returns only the `__zx` namespace (log, fetch, timers).
|
|
21
|
-
* Does NOT include jsz.importObject()
|
|
21
|
+
* Does NOT include jsz.importObject() - the server binary does not use jsz.
|
|
22
22
|
*/
|
|
23
23
|
static createImportObject(bridgeRef: {
|
|
24
24
|
current: ZxWasiBridge | null;
|