xit-wasm 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,376 @@
1
+ /**
2
+ * Node-fs-backed Host implementation.
3
+ *
4
+ * Strategy:
5
+ * - Dir handles are i32s mapped to absolute filesystem paths. Handle 0 is
6
+ * reserved for the "root" directory provided to NodeHost's constructor;
7
+ * all sub-path operations resolve relative to it.
8
+ * - File handles are i32s mapped to Node file descriptors (fs.openSync), but
9
+ * wrapped with a small extra state object so we can track current position
10
+ * (for seek-by) and locked state without re-querying the fs.
11
+ * - All ops use Node sync APIs. Plenty fast for spike-grade testing; can
12
+ * swap for a Worker-driven async model later if needed.
13
+ */
14
+ import * as fs from "node:fs";
15
+ import * as path from "node:path";
16
+ import * as crypto from "node:crypto";
17
+ import { KIND_FILE, KIND_DIR, KIND_SYMLINK, KIND_OTHER, OK, ERR_GENERIC, ERR_NOT_FOUND, } from "./host.js";
18
+ export class NodeHost {
19
+ dirs = new Map();
20
+ files = new Map();
21
+ nextHandle = 100;
22
+ trace = false;
23
+ constructor(rootPath) {
24
+ this.dirs.set(0, rootPath);
25
+ }
26
+ log(...args) {
27
+ if (this.trace)
28
+ console.error("[host]", ...args);
29
+ }
30
+ resolve(dirHandle, sub) {
31
+ const base = this.dirs.get(dirHandle);
32
+ if (base === undefined)
33
+ throw new Error(`unknown dir handle ${dirHandle}`);
34
+ return path.resolve(base, sub);
35
+ }
36
+ allocHandle() {
37
+ return this.nextHandle++;
38
+ }
39
+ statToResult(s) {
40
+ let kind = KIND_OTHER;
41
+ if (s.isFile())
42
+ kind = KIND_FILE;
43
+ else if (s.isDirectory())
44
+ kind = KIND_DIR;
45
+ else if (s.isSymbolicLink())
46
+ kind = KIND_SYMLINK;
47
+ // Node's plain Stats has *Ms (number); promote to ns BigInt by hand. The
48
+ // bigint variant of Stats has *Ns directly but it forces every access to
49
+ // BigInt and is hairier to thread through.
50
+ const msToNs = (ms) => BigInt(Math.floor(ms)) * 1000000n;
51
+ return {
52
+ size: BigInt(s.size),
53
+ mtimeNs: msToNs(s.mtimeMs),
54
+ atimeNs: msToNs(s.atimeMs),
55
+ ctimeNs: msToNs(s.ctimeMs),
56
+ inode: BigInt(s.ino),
57
+ kind,
58
+ modeBits: s.mode & 0o777,
59
+ };
60
+ }
61
+ // ----- dir -----
62
+ dirCreateFile(dirHandle, sub) {
63
+ const abs = this.resolve(dirHandle, sub);
64
+ try {
65
+ const fd = fs.openSync(abs, "w+");
66
+ const handle = this.allocHandle();
67
+ this.files.set(handle, { fd, position: 0n });
68
+ this.log("dirCreateFile", abs, "->", handle);
69
+ return { code: OK, handle };
70
+ }
71
+ catch (err) {
72
+ this.log("dirCreateFile FAIL", abs, err.code);
73
+ return { code: ERR_GENERIC, handle: -1 };
74
+ }
75
+ }
76
+ dirOpenFile(dirHandle, sub) {
77
+ const abs = this.resolve(dirHandle, sub);
78
+ try {
79
+ const fd = fs.openSync(abs, "r+");
80
+ const handle = this.allocHandle();
81
+ this.files.set(handle, { fd, position: 0n });
82
+ this.log("dirOpenFile", abs, "->", handle);
83
+ return { code: OK, handle };
84
+ }
85
+ catch (err) {
86
+ this.log("dirOpenFile FAIL", abs, err.code);
87
+ return { code: ERR_NOT_FOUND, handle: -1 };
88
+ }
89
+ }
90
+ dirCreateDir(dirHandle, sub) {
91
+ try {
92
+ fs.mkdirSync(this.resolve(dirHandle, sub));
93
+ return OK;
94
+ }
95
+ catch (err) {
96
+ if (err.code === "EEXIST")
97
+ return ERR_GENERIC; // xit treats this as already-exists
98
+ return ERR_GENERIC;
99
+ }
100
+ }
101
+ dirCreateDirPath(dirHandle, sub) {
102
+ const abs = this.resolve(dirHandle, sub);
103
+ let existed = false;
104
+ try {
105
+ fs.statSync(abs);
106
+ existed = true;
107
+ }
108
+ catch { }
109
+ try {
110
+ fs.mkdirSync(abs, { recursive: true });
111
+ return { code: OK, existed };
112
+ }
113
+ catch {
114
+ return { code: ERR_GENERIC, existed: false };
115
+ }
116
+ }
117
+ dirCreateDirPathOpen(dirHandle, sub) {
118
+ const abs = this.resolve(dirHandle, sub);
119
+ try {
120
+ fs.mkdirSync(abs, { recursive: true });
121
+ const handle = this.allocHandle();
122
+ this.dirs.set(handle, abs);
123
+ this.log("dirCreateDirPathOpen", abs, "->", handle);
124
+ return { code: OK, handle };
125
+ }
126
+ catch (err) {
127
+ this.log("dirCreateDirPathOpen FAIL", abs, err.code);
128
+ return { code: ERR_GENERIC, handle: -1 };
129
+ }
130
+ }
131
+ dirOpenDir(dirHandle, sub) {
132
+ const abs = this.resolve(dirHandle, sub);
133
+ try {
134
+ const s = fs.statSync(abs);
135
+ if (!s.isDirectory())
136
+ return { code: ERR_NOT_FOUND, handle: -1 };
137
+ const handle = this.allocHandle();
138
+ this.dirs.set(handle, abs);
139
+ return { code: OK, handle };
140
+ }
141
+ catch {
142
+ return { code: ERR_NOT_FOUND, handle: -1 };
143
+ }
144
+ }
145
+ dirClose(handle) {
146
+ if (handle === 0)
147
+ return; // never close the root
148
+ this.dirs.delete(handle);
149
+ }
150
+ dirDeleteFile(dirHandle, sub) {
151
+ const abs = this.resolve(dirHandle, sub);
152
+ try {
153
+ fs.unlinkSync(abs);
154
+ this.log("dirDeleteFile", abs);
155
+ return OK;
156
+ }
157
+ catch (err) {
158
+ this.log("dirDeleteFile FAIL", abs, err.code);
159
+ return ERR_NOT_FOUND;
160
+ }
161
+ }
162
+ dirRename(oldDir, oldSub, newDir, newSub) {
163
+ const oldAbs = this.resolve(oldDir, oldSub);
164
+ const newAbs = this.resolve(newDir, newSub);
165
+ try {
166
+ fs.renameSync(oldAbs, newAbs);
167
+ this.log("dirRename", oldAbs, "->", newAbs);
168
+ return OK;
169
+ }
170
+ catch (err) {
171
+ this.log("dirRename FAIL", oldAbs, "->", newAbs, err.code);
172
+ return ERR_GENERIC;
173
+ }
174
+ }
175
+ dirStatFile(dirHandle, sub) {
176
+ const abs = this.resolve(dirHandle, sub);
177
+ try {
178
+ const s = fs.lstatSync(abs);
179
+ this.log("dirStatFile", abs, "size", s.size);
180
+ return { code: OK, stat: this.statToResult(s) };
181
+ }
182
+ catch (err) {
183
+ this.log("dirStatFile FAIL", abs, err.code);
184
+ return { code: ERR_NOT_FOUND };
185
+ }
186
+ }
187
+ dirReadLink(dirHandle, sub) {
188
+ const abs = this.resolve(dirHandle, sub);
189
+ try {
190
+ const target = fs.readlinkSync(abs);
191
+ this.log("dirReadLink", abs, "->", target);
192
+ return { code: 1, target };
193
+ }
194
+ catch (err) {
195
+ if (err.code === "EINVAL") {
196
+ // not a symlink — xit needs to know this distinction
197
+ this.log("dirReadLink", abs, "(not a symlink)");
198
+ return { code: 0 };
199
+ }
200
+ this.log("dirReadLink FAIL", abs, err.code);
201
+ return { code: -1 };
202
+ }
203
+ }
204
+ dirAccess(dirHandle, sub) {
205
+ const abs = this.resolve(dirHandle, sub);
206
+ try {
207
+ fs.accessSync(abs);
208
+ this.log("dirAccess OK", abs);
209
+ return OK;
210
+ }
211
+ catch {
212
+ this.log("dirAccess MISSING", abs);
213
+ return ERR_NOT_FOUND;
214
+ }
215
+ }
216
+ // ----- file -----
217
+ fileClose(handle) {
218
+ const entry = this.files.get(handle);
219
+ if (!entry)
220
+ return;
221
+ try {
222
+ fs.closeSync(entry.fd);
223
+ }
224
+ catch { }
225
+ this.files.delete(handle);
226
+ }
227
+ fileRead(handle, offset, len) {
228
+ const entry = this.files.get(handle);
229
+ if (!entry)
230
+ return { code: ERR_GENERIC, data: new Uint8Array(0) };
231
+ const buf = Buffer.alloc(len);
232
+ try {
233
+ const n = fs.readSync(entry.fd, buf, 0, len, Number(offset));
234
+ this.log("fileRead", handle, "offset", offset, "len", len, "got", n);
235
+ return { code: OK, data: new Uint8Array(buf.buffer, buf.byteOffset, n) };
236
+ }
237
+ catch (err) {
238
+ this.log("fileRead FAIL", handle, err.code);
239
+ return { code: ERR_GENERIC, data: new Uint8Array(0) };
240
+ }
241
+ }
242
+ fileWriteStream(handle, data) {
243
+ const entry = this.files.get(handle);
244
+ if (!entry)
245
+ return { code: ERR_GENERIC, written: 0 };
246
+ const buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
247
+ try {
248
+ const n = fs.writeSync(entry.fd, buf, 0, buf.length, Number(entry.position));
249
+ entry.position += BigInt(n);
250
+ this.log("fileWriteStream", handle, "wrote", n, "newPos", entry.position);
251
+ return { code: OK, written: n };
252
+ }
253
+ catch (err) {
254
+ this.log("fileWriteStream FAIL", handle, err.code);
255
+ return { code: ERR_GENERIC, written: 0 };
256
+ }
257
+ }
258
+ fileReadStream(handle, len) {
259
+ const entry = this.files.get(handle);
260
+ if (!entry)
261
+ return { code: ERR_GENERIC, data: new Uint8Array(0) };
262
+ const buf = Buffer.alloc(len);
263
+ try {
264
+ const n = fs.readSync(entry.fd, buf, 0, len, Number(entry.position));
265
+ entry.position += BigInt(n);
266
+ this.log("fileReadStream", handle, "got", n, "newPos", entry.position);
267
+ return { code: OK, data: new Uint8Array(buf.buffer, buf.byteOffset, n) };
268
+ }
269
+ catch (err) {
270
+ this.log("fileReadStream FAIL", handle, err.code);
271
+ return { code: ERR_GENERIC, data: new Uint8Array(0) };
272
+ }
273
+ }
274
+ fileWrite(handle, offset, data) {
275
+ const entry = this.files.get(handle);
276
+ if (!entry)
277
+ return { code: ERR_GENERIC, written: 0 };
278
+ const buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
279
+ try {
280
+ const n = fs.writeSync(entry.fd, buf, 0, buf.length, Number(offset));
281
+ this.log("fileWrite", handle, "offset", offset, "len", buf.length, "wrote", n);
282
+ return { code: OK, written: n };
283
+ }
284
+ catch (err) {
285
+ this.log("fileWrite FAIL", handle, err.code);
286
+ return { code: ERR_GENERIC, written: 0 };
287
+ }
288
+ }
289
+ fileStat(handle) {
290
+ const entry = this.files.get(handle);
291
+ if (!entry)
292
+ return { code: ERR_GENERIC };
293
+ try {
294
+ const s = fs.fstatSync(entry.fd);
295
+ this.log("fileStat", handle, "size", s.size, "kind", this.statToResult(s).kind);
296
+ return { code: OK, stat: this.statToResult(s) };
297
+ }
298
+ catch (err) {
299
+ this.log("fileStat FAIL", handle, err.code);
300
+ return { code: ERR_GENERIC };
301
+ }
302
+ }
303
+ fileLength(handle) {
304
+ const entry = this.files.get(handle);
305
+ if (!entry)
306
+ return { code: ERR_GENERIC, length: 0n };
307
+ try {
308
+ const s = fs.fstatSync(entry.fd);
309
+ this.log("fileLength", handle, "->", s.size);
310
+ return { code: OK, length: BigInt(s.size) };
311
+ }
312
+ catch (err) {
313
+ this.log("fileLength FAIL", handle, err.code);
314
+ return { code: ERR_GENERIC, length: 0n };
315
+ }
316
+ }
317
+ fileSeekTo(handle, offset) {
318
+ const entry = this.files.get(handle);
319
+ if (!entry)
320
+ return ERR_GENERIC;
321
+ entry.position = offset;
322
+ return OK;
323
+ }
324
+ fileSeekBy(handle, relative) {
325
+ const entry = this.files.get(handle);
326
+ if (!entry)
327
+ return ERR_GENERIC;
328
+ entry.position += relative;
329
+ return OK;
330
+ }
331
+ fileLock(_handle, _kind) {
332
+ // Spike: no real flock. We're single-process, single-threaded — index/db
333
+ // mutexes inside one xit run are guaranteed serial via JS event loop.
334
+ return OK;
335
+ }
336
+ fileTryLock(_handle, _kind) {
337
+ return 1; // always acquired in spike mode
338
+ }
339
+ fileUnlock(_handle) {
340
+ /* no-op */
341
+ }
342
+ fileSync(handle) {
343
+ const entry = this.files.get(handle);
344
+ if (!entry)
345
+ return ERR_GENERIC;
346
+ try {
347
+ fs.fsyncSync(entry.fd);
348
+ return OK;
349
+ }
350
+ catch {
351
+ return ERR_GENERIC;
352
+ }
353
+ }
354
+ fileSetLength(handle, length) {
355
+ const entry = this.files.get(handle);
356
+ if (!entry)
357
+ return ERR_GENERIC;
358
+ try {
359
+ fs.ftruncateSync(entry.fd, Number(length));
360
+ this.log("fileSetLength", handle, "->", length);
361
+ return OK;
362
+ }
363
+ catch (err) {
364
+ this.log("fileSetLength FAIL", handle, err.code);
365
+ return ERR_GENERIC;
366
+ }
367
+ }
368
+ // ----- misc -----
369
+ nowNanos() {
370
+ return BigInt(Date.now()) * 1000000n;
371
+ }
372
+ random(buf) {
373
+ crypto.randomFillSync(buf);
374
+ }
375
+ }
376
+ //# sourceMappingURL=host-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-node.js","sourceRoot":"","sources":["../src/host-node.ts"],"names":[],"mappings":"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"}
package/dist/host.d.ts ADDED
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Host import surface. The wasm module declares 24 `host.*` extern functions;
3
+ * a Host implementation provides their JS-side bodies. This module defines:
4
+ *
5
+ * - The Host interface (signatures matching src/host_io.zig).
6
+ * - HostStat: byte-layout helper that mirrors the Zig HostStat extern struct.
7
+ * - hostImports(): converts a Host into the WebAssembly imports object the
8
+ * wasm module expects.
9
+ *
10
+ * The wasm passes pointers + lengths into linear memory; Host implementations
11
+ * take a `WebAssembly.Memory` reference at construction time so they can read
12
+ * and write into wasm memory directly.
13
+ */
14
+ /** Wire layout matches `HostStat` in src/host_io.zig — 48 bytes, 8-aligned. */
15
+ export declare const HOST_STAT_BYTES = 48;
16
+ export type Kind = "file" | "directory" | "sym_link" | "other";
17
+ export declare const KIND_FILE = 0;
18
+ export declare const KIND_DIR = 1;
19
+ export declare const KIND_SYMLINK = 2;
20
+ export declare const KIND_OTHER = 3;
21
+ export declare const LOCK_NONE = 0;
22
+ export declare const LOCK_SHARED = 1;
23
+ export declare const LOCK_EXCLUSIVE = 2;
24
+ /** Status codes the Host returns. 0 = success; non-zero values are passed
25
+ * through to xit and surface as errors there. Keeping this enum loose for
26
+ * now — finer-grained error mapping is a follow-up. */
27
+ export declare const OK = 0;
28
+ export declare const ERR_GENERIC = 1;
29
+ export declare const ERR_NOT_FOUND = 2;
30
+ export interface StatResult {
31
+ size: bigint;
32
+ mtimeNs: bigint;
33
+ atimeNs: bigint;
34
+ ctimeNs: bigint;
35
+ inode: bigint;
36
+ kind: number;
37
+ modeBits: number;
38
+ }
39
+ /**
40
+ * The behavior surface a Host has to provide. Each method takes already-decoded
41
+ * arguments (paths as strings, handles as numbers) — the wasm-import shims in
42
+ * hostImports() handle pointer-decoding before calling into the host.
43
+ *
44
+ * Handles are opaque i32s; the host owns the mapping (e.g. dir handle 0 is the
45
+ * "root" the host chose to expose to xit). xit itself only ever passes them
46
+ * back through the same set of host calls.
47
+ */
48
+ export interface Host {
49
+ dirCreateFile(dirHandle: number, path: string): {
50
+ code: number;
51
+ handle: number;
52
+ };
53
+ dirOpenFile(dirHandle: number, path: string): {
54
+ code: number;
55
+ handle: number;
56
+ };
57
+ dirCreateDir(dirHandle: number, path: string): number;
58
+ dirCreateDirPath(dirHandle: number, path: string): {
59
+ code: number;
60
+ existed: boolean;
61
+ };
62
+ dirCreateDirPathOpen(dirHandle: number, path: string): {
63
+ code: number;
64
+ handle: number;
65
+ };
66
+ dirOpenDir(dirHandle: number, path: string): {
67
+ code: number;
68
+ handle: number;
69
+ };
70
+ dirClose(handle: number): void;
71
+ dirDeleteFile(dirHandle: number, path: string): number;
72
+ dirRename(oldDir: number, oldPath: string, newDir: number, newPath: string): number;
73
+ dirStatFile(dirHandle: number, path: string): {
74
+ code: number;
75
+ stat?: StatResult;
76
+ };
77
+ dirAccess(dirHandle: number, path: string): number;
78
+ /** Returns:
79
+ * - { code: 1+, target } — symlink with target string
80
+ * - { code: 0 } — path exists but is not a symlink (xit needs the distinction)
81
+ * - { code: -1 } — path does not exist or unreadable
82
+ */
83
+ dirReadLink(dirHandle: number, path: string): {
84
+ code: number;
85
+ target?: string;
86
+ };
87
+ fileClose(handle: number): void;
88
+ fileRead(handle: number, offset: bigint, len: number): {
89
+ code: number;
90
+ data: Uint8Array;
91
+ };
92
+ fileWrite(handle: number, offset: bigint, data: Uint8Array): {
93
+ code: number;
94
+ written: number;
95
+ };
96
+ fileWriteStream(handle: number, data: Uint8Array): {
97
+ code: number;
98
+ written: number;
99
+ };
100
+ fileReadStream(handle: number, len: number): {
101
+ code: number;
102
+ data: Uint8Array;
103
+ };
104
+ fileStat(handle: number): {
105
+ code: number;
106
+ stat?: StatResult;
107
+ };
108
+ fileLength(handle: number): {
109
+ code: number;
110
+ length: bigint;
111
+ };
112
+ fileSeekTo(handle: number, offset: bigint): number;
113
+ fileSeekBy(handle: number, relative: bigint): number;
114
+ fileLock(handle: number, kind: number): number;
115
+ /** Returns 1 if acquired, 0 if would-block, negative on error. */
116
+ fileTryLock(handle: number, kind: number): number;
117
+ fileUnlock(handle: number): void;
118
+ fileSync(handle: number): number;
119
+ fileSetLength(handle: number, length: bigint): number;
120
+ nowNanos(): bigint;
121
+ random(buf: Uint8Array): void;
122
+ }
123
+ /**
124
+ * Build the WebAssembly imports object expected by the wasm module. Pointer-
125
+ * decoding lives here (centralized) so individual Host implementations can stay
126
+ * focused on their own backing store.
127
+ */
128
+ export declare function hostImports(host: Host, getMemory: () => WebAssembly.Memory): {
129
+ host: {
130
+ host_dir_create_file: (dirH: number, p: number, plen: number, outH: number) => number;
131
+ host_dir_open_file: (dirH: number, p: number, plen: number, outH: number) => number;
132
+ host_dir_create_dir: (dirH: number, p: number, plen: number) => number;
133
+ host_dir_create_dir_path: (dirH: number, p: number, plen: number, outExisted: number) => number;
134
+ host_dir_create_dir_path_open: (dirH: number, p: number, plen: number, outH: number) => number;
135
+ host_dir_open_dir: (dirH: number, p: number, plen: number, outH: number) => number;
136
+ host_dir_close: (h: number) => void;
137
+ host_dir_delete_file: (dirH: number, p: number, plen: number) => number;
138
+ host_dir_rename: (oldDir: number, op: number, olen: number, newDir: number, np: number, nlen: number) => number;
139
+ host_dir_stat_file: (dirH: number, p: number, plen: number, outStat: number) => number;
140
+ host_dir_access: (dirH: number, p: number, plen: number) => number;
141
+ host_dir_read_link: (dirH: number, p: number, plen: number, bufPtr: number, bufLen: number, outSize: number) => number;
142
+ host_file_close: (h: number) => void;
143
+ host_file_read: (h: number, offset: bigint, bufPtr: number, bufLen: number, outRead: number) => number;
144
+ host_file_write: (h: number, offset: bigint, bufPtr: number, bufLen: number, outWritten: number) => number;
145
+ host_file_stat: (h: number, outStat: number) => number;
146
+ host_file_length: (h: number, outLen: number) => number;
147
+ host_file_write_stream: (h: number, bufPtr: number, bufLen: number, outWritten: number) => number;
148
+ host_file_read_stream: (h: number, bufPtr: number, bufLen: number, outRead: number) => number;
149
+ host_file_seek_to: (h: number, offset: bigint) => number;
150
+ host_file_seek_by: (h: number, relative: bigint) => number;
151
+ host_file_lock: (h: number, kind: number) => number;
152
+ host_file_try_lock: (h: number, kind: number) => number;
153
+ host_file_unlock: (h: number) => void;
154
+ host_file_sync: (h: number) => number;
155
+ host_file_set_length: (h: number, len: bigint) => number;
156
+ host_now_nanos: () => bigint;
157
+ host_random: (bufPtr: number, bufLen: number) => void;
158
+ };
159
+ };
160
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}