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,109 @@
1
+ /**
2
+ * Pure in-memory Host implementation. No filesystem, no Node imports —
3
+ * runs identically in Node, Deno, Bun, and the browser. This is the default
4
+ * backend for the public Archive class.
5
+ *
6
+ * Internal layout: a single `Map<string, MemEntry>` keyed by absolute paths
7
+ * with `/` separators. Directories are tracked explicitly (so we can detect
8
+ * "is this an empty dir vs a missing path"). File handles map to a small
9
+ * record with the entry path and a streaming position.
10
+ */
11
+ import type { Host, StatResult } from "./host.ts";
12
+ export declare class MemoryHost implements Host {
13
+ private entries;
14
+ private dirs;
15
+ private files;
16
+ private nextHandle;
17
+ trace: boolean;
18
+ constructor();
19
+ private log;
20
+ private now;
21
+ private allocHandle;
22
+ private resolve;
23
+ private ensureDir;
24
+ private statToResult;
25
+ /** Stable per-path inode-like number, useful for index entry equality. */
26
+ private hashPath;
27
+ /** Bulk-load a tree from a path → bytes map (e.g. unzipped archive). */
28
+ bulkLoad(tree: Map<string, Uint8Array>): void;
29
+ /** Snapshot every file in the tree (excluding directories) for serialization. */
30
+ snapshot(): Map<string, Uint8Array>;
31
+ /** Direct write bypassing wasm — used by Archive.write. */
32
+ putFile(path: string, content: Uint8Array): void;
33
+ getFile(path: string): Uint8Array | null;
34
+ removeFile(path: string): boolean;
35
+ listFiles(prefix?: string): string[];
36
+ dirCreateFile(dirHandle: number, sub: string): {
37
+ code: number;
38
+ handle: number;
39
+ };
40
+ dirOpenFile(dirHandle: number, sub: string): {
41
+ code: number;
42
+ handle: number;
43
+ };
44
+ dirCreateDir(dirHandle: number, sub: string): 0 | 1;
45
+ dirCreateDirPath(dirHandle: number, sub: string): {
46
+ code: number;
47
+ existed: boolean;
48
+ };
49
+ dirCreateDirPathOpen(dirHandle: number, sub: string): {
50
+ code: number;
51
+ handle: number;
52
+ };
53
+ dirOpenDir(dirHandle: number, sub: string): {
54
+ code: number;
55
+ handle: number;
56
+ };
57
+ dirClose(handle: number): void;
58
+ dirDeleteFile(dirHandle: number, sub: string): 0 | 2;
59
+ dirRename(oldDir: number, oldSub: string, newDir: number, newSub: string): 0 | 1 | 2;
60
+ dirStatFile(dirHandle: number, sub: string): {
61
+ code: number;
62
+ stat?: undefined;
63
+ } | {
64
+ code: number;
65
+ stat: StatResult;
66
+ };
67
+ dirAccess(dirHandle: number, sub: string): 0 | 2;
68
+ dirReadLink(_dirHandle: number, _sub: string): {
69
+ code: number;
70
+ };
71
+ fileClose(handle: number): void;
72
+ fileRead(handle: number, offset: bigint, len: number): {
73
+ code: number;
74
+ data: Uint8Array<ArrayBufferLike>;
75
+ };
76
+ fileWrite(handle: number, offset: bigint, data: Uint8Array): {
77
+ code: number;
78
+ written: number;
79
+ };
80
+ fileWriteStream(handle: number, data: Uint8Array): {
81
+ code: number;
82
+ written: number;
83
+ };
84
+ fileReadStream(handle: number, len: number): {
85
+ code: number;
86
+ data: Uint8Array<ArrayBufferLike>;
87
+ };
88
+ fileStat(handle: number): {
89
+ code: number;
90
+ stat?: undefined;
91
+ } | {
92
+ code: number;
93
+ stat: StatResult;
94
+ };
95
+ fileLength(handle: number): {
96
+ code: number;
97
+ length: bigint;
98
+ };
99
+ fileSeekTo(handle: number, offset: bigint): 0 | 1;
100
+ fileSeekBy(handle: number, relative: bigint): 0 | 1;
101
+ fileLock(_handle: number, _kind: number): number;
102
+ fileTryLock(_handle: number, _kind: number): number;
103
+ fileUnlock(_handle: number): void;
104
+ fileSync(_handle: number): number;
105
+ fileSetLength(handle: number, length: bigint): 0 | 1;
106
+ nowNanos(): bigint;
107
+ random(buf: Uint8Array): void;
108
+ }
109
+ //# sourceMappingURL=host-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-memory.d.ts","sourceRoot":"","sources":["../src/host-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,432 @@
1
+ /**
2
+ * Pure in-memory Host implementation. No filesystem, no Node imports —
3
+ * runs identically in Node, Deno, Bun, and the browser. This is the default
4
+ * backend for the public Archive class.
5
+ *
6
+ * Internal layout: a single `Map<string, MemEntry>` keyed by absolute paths
7
+ * with `/` separators. Directories are tracked explicitly (so we can detect
8
+ * "is this an empty dir vs a missing path"). File handles map to a small
9
+ * record with the entry path and a streaming position.
10
+ */
11
+ import { KIND_FILE, KIND_DIR, KIND_OTHER, OK, ERR_GENERIC, ERR_NOT_FOUND, } from "./host.js";
12
+ const ROOT = "/";
13
+ function joinPath(base, sub) {
14
+ if (sub.startsWith("/"))
15
+ return normalize(sub);
16
+ if (base === ROOT)
17
+ return normalize("/" + sub);
18
+ return normalize(base + "/" + sub);
19
+ }
20
+ /** Normalize a path: collapse runs of `/`, resolve `.` and `..`. Throws on
21
+ * attempts to escape the root via `..`. */
22
+ function normalize(p) {
23
+ const parts = p.split("/").filter((s) => s !== "" && s !== ".");
24
+ const stack = [];
25
+ for (const part of parts) {
26
+ if (part === "..") {
27
+ if (stack.length === 0) {
28
+ throw new Error(`path ${p} escapes the in-memory root`);
29
+ }
30
+ stack.pop();
31
+ }
32
+ else {
33
+ stack.push(part);
34
+ }
35
+ }
36
+ return "/" + stack.join("/");
37
+ }
38
+ function dirname(p) {
39
+ if (p === ROOT)
40
+ return ROOT;
41
+ const idx = p.lastIndexOf("/");
42
+ if (idx <= 0)
43
+ return ROOT;
44
+ return p.slice(0, idx);
45
+ }
46
+ export class MemoryHost {
47
+ entries = new Map();
48
+ dirs = new Map();
49
+ files = new Map();
50
+ nextHandle = 100;
51
+ trace = false;
52
+ constructor() {
53
+ this.entries.set(ROOT, { type: "dir", mtimeNs: this.now() });
54
+ this.dirs.set(0, ROOT);
55
+ }
56
+ log(...args) {
57
+ if (this.trace)
58
+ console.error("[mem]", ...args);
59
+ }
60
+ now() {
61
+ return BigInt(Date.now()) * 1000000n;
62
+ }
63
+ allocHandle() {
64
+ return this.nextHandle++;
65
+ }
66
+ resolve(dirHandle, sub) {
67
+ const base = this.dirs.get(dirHandle);
68
+ if (base === undefined) {
69
+ throw new Error(`unknown dir handle ${dirHandle}`);
70
+ }
71
+ return joinPath(base, sub);
72
+ }
73
+ ensureDir(path) {
74
+ if (path === ROOT)
75
+ return;
76
+ if (!this.entries.has(path)) {
77
+ this.ensureDir(dirname(path));
78
+ this.entries.set(path, { type: "dir", mtimeNs: this.now() });
79
+ }
80
+ }
81
+ statToResult(path, entry) {
82
+ return {
83
+ size: entry.type === "file" ? BigInt(entry.content.length) : 0n,
84
+ mtimeNs: entry.mtimeNs,
85
+ atimeNs: entry.mtimeNs,
86
+ ctimeNs: entry.mtimeNs,
87
+ inode: BigInt(this.hashPath(path)),
88
+ kind: entry.type === "file" ? KIND_FILE : entry.type === "dir" ? KIND_DIR : KIND_OTHER,
89
+ modeBits: 0o644,
90
+ };
91
+ }
92
+ /** Stable per-path inode-like number, useful for index entry equality. */
93
+ hashPath(p) {
94
+ let h = 2166136261;
95
+ for (let i = 0; i < p.length; i++) {
96
+ h ^= p.charCodeAt(i);
97
+ h = Math.imul(h, 16777619);
98
+ }
99
+ return h >>> 0;
100
+ }
101
+ // ---- public helpers used by Archive (not part of Host) ----
102
+ /** Bulk-load a tree from a path → bytes map (e.g. unzipped archive). */
103
+ bulkLoad(tree) {
104
+ for (const [path, content] of tree) {
105
+ const abs = normalize(path.startsWith("/") ? path : "/" + path);
106
+ this.ensureDir(dirname(abs));
107
+ this.entries.set(abs, { type: "file", content, mtimeNs: this.now() });
108
+ }
109
+ }
110
+ /** Snapshot every file in the tree (excluding directories) for serialization. */
111
+ snapshot() {
112
+ const out = new Map();
113
+ for (const [path, entry] of this.entries) {
114
+ if (entry.type === "file") {
115
+ // Strip the leading slash so consumers can use the keys as zip
116
+ // entry names without producing absolute paths inside the archive.
117
+ out.set(path.slice(1), entry.content);
118
+ }
119
+ }
120
+ return out;
121
+ }
122
+ /** Direct write bypassing wasm — used by Archive.write. */
123
+ putFile(path, content) {
124
+ const abs = normalize(path.startsWith("/") ? path : "/" + path);
125
+ this.ensureDir(dirname(abs));
126
+ this.entries.set(abs, { type: "file", content, mtimeNs: this.now() });
127
+ }
128
+ getFile(path) {
129
+ const abs = normalize(path.startsWith("/") ? path : "/" + path);
130
+ const entry = this.entries.get(abs);
131
+ return entry?.type === "file" ? entry.content : null;
132
+ }
133
+ removeFile(path) {
134
+ const abs = normalize(path.startsWith("/") ? path : "/" + path);
135
+ const entry = this.entries.get(abs);
136
+ if (entry?.type !== "file")
137
+ return false;
138
+ this.entries.delete(abs);
139
+ return true;
140
+ }
141
+ listFiles(prefix) {
142
+ const out = [];
143
+ for (const [path, entry] of this.entries) {
144
+ if (entry.type !== "file")
145
+ continue;
146
+ const rel = path.slice(1);
147
+ if (prefix === undefined || rel.startsWith(prefix))
148
+ out.push(rel);
149
+ }
150
+ return out.sort();
151
+ }
152
+ // ---- Host interface ----
153
+ dirCreateFile(dirHandle, sub) {
154
+ let abs;
155
+ try {
156
+ abs = this.resolve(dirHandle, sub);
157
+ }
158
+ catch {
159
+ return { code: ERR_GENERIC, handle: -1 };
160
+ }
161
+ this.ensureDir(dirname(abs));
162
+ this.entries.set(abs, { type: "file", content: new Uint8Array(0), mtimeNs: this.now() });
163
+ const handle = this.allocHandle();
164
+ this.files.set(handle, { path: abs, position: 0n });
165
+ this.log("dirCreateFile", abs, "->", handle);
166
+ return { code: OK, handle };
167
+ }
168
+ dirOpenFile(dirHandle, sub) {
169
+ let abs;
170
+ try {
171
+ abs = this.resolve(dirHandle, sub);
172
+ }
173
+ catch {
174
+ return { code: ERR_NOT_FOUND, handle: -1 };
175
+ }
176
+ const entry = this.entries.get(abs);
177
+ if (entry?.type !== "file") {
178
+ this.log("dirOpenFile MISSING", abs);
179
+ return { code: ERR_NOT_FOUND, handle: -1 };
180
+ }
181
+ const handle = this.allocHandle();
182
+ this.files.set(handle, { path: abs, position: 0n });
183
+ this.log("dirOpenFile", abs, "->", handle);
184
+ return { code: OK, handle };
185
+ }
186
+ dirCreateDir(dirHandle, sub) {
187
+ try {
188
+ const abs = this.resolve(dirHandle, sub);
189
+ const existing = this.entries.get(abs);
190
+ if (existing?.type === "dir")
191
+ return ERR_GENERIC; // EEXIST equivalent
192
+ this.entries.set(abs, { type: "dir", mtimeNs: this.now() });
193
+ return OK;
194
+ }
195
+ catch {
196
+ return ERR_GENERIC;
197
+ }
198
+ }
199
+ dirCreateDirPath(dirHandle, sub) {
200
+ try {
201
+ const abs = this.resolve(dirHandle, sub);
202
+ const existed = this.entries.get(abs)?.type === "dir";
203
+ this.ensureDir(abs);
204
+ return { code: OK, existed };
205
+ }
206
+ catch {
207
+ return { code: ERR_GENERIC, existed: false };
208
+ }
209
+ }
210
+ dirCreateDirPathOpen(dirHandle, sub) {
211
+ try {
212
+ const abs = this.resolve(dirHandle, sub);
213
+ this.ensureDir(abs);
214
+ const handle = this.allocHandle();
215
+ this.dirs.set(handle, abs);
216
+ return { code: OK, handle };
217
+ }
218
+ catch {
219
+ return { code: ERR_GENERIC, handle: -1 };
220
+ }
221
+ }
222
+ dirOpenDir(dirHandle, sub) {
223
+ try {
224
+ const abs = this.resolve(dirHandle, sub);
225
+ const entry = this.entries.get(abs);
226
+ if (entry?.type !== "dir")
227
+ return { code: ERR_NOT_FOUND, handle: -1 };
228
+ const handle = this.allocHandle();
229
+ this.dirs.set(handle, abs);
230
+ return { code: OK, handle };
231
+ }
232
+ catch {
233
+ return { code: ERR_NOT_FOUND, handle: -1 };
234
+ }
235
+ }
236
+ dirClose(handle) {
237
+ if (handle === 0)
238
+ return;
239
+ this.dirs.delete(handle);
240
+ }
241
+ dirDeleteFile(dirHandle, sub) {
242
+ try {
243
+ const abs = this.resolve(dirHandle, sub);
244
+ const entry = this.entries.get(abs);
245
+ if (entry?.type !== "file")
246
+ return ERR_NOT_FOUND;
247
+ this.entries.delete(abs);
248
+ return OK;
249
+ }
250
+ catch {
251
+ return ERR_NOT_FOUND;
252
+ }
253
+ }
254
+ dirRename(oldDir, oldSub, newDir, newSub) {
255
+ try {
256
+ const oldAbs = this.resolve(oldDir, oldSub);
257
+ const newAbs = this.resolve(newDir, newSub);
258
+ const entry = this.entries.get(oldAbs);
259
+ if (!entry)
260
+ return ERR_NOT_FOUND;
261
+ this.entries.delete(oldAbs);
262
+ this.ensureDir(dirname(newAbs));
263
+ this.entries.set(newAbs, entry);
264
+ // Update any file handles pointing at the old path.
265
+ for (const open of this.files.values()) {
266
+ if (open.path === oldAbs)
267
+ open.path = newAbs;
268
+ }
269
+ return OK;
270
+ }
271
+ catch {
272
+ return ERR_GENERIC;
273
+ }
274
+ }
275
+ dirStatFile(dirHandle, sub) {
276
+ try {
277
+ const abs = this.resolve(dirHandle, sub);
278
+ const entry = this.entries.get(abs);
279
+ if (!entry)
280
+ return { code: ERR_NOT_FOUND };
281
+ return { code: OK, stat: this.statToResult(abs, entry) };
282
+ }
283
+ catch {
284
+ return { code: ERR_NOT_FOUND };
285
+ }
286
+ }
287
+ dirAccess(dirHandle, sub) {
288
+ try {
289
+ const abs = this.resolve(dirHandle, sub);
290
+ return this.entries.has(abs) ? OK : ERR_NOT_FOUND;
291
+ }
292
+ catch {
293
+ return ERR_NOT_FOUND;
294
+ }
295
+ }
296
+ dirReadLink(_dirHandle, _sub) {
297
+ // No symlinks in the in-memory tree. Return "exists but not a symlink"
298
+ // when the path points at a real entry, ENOENT otherwise — xit's
299
+ // fs.Metadata.init switches on error.NotLink (code 0) to fall through.
300
+ try {
301
+ const abs = this.resolve(_dirHandle, _sub);
302
+ return this.entries.has(abs) ? { code: 0 } : { code: -1 };
303
+ }
304
+ catch {
305
+ return { code: -1 };
306
+ }
307
+ }
308
+ fileClose(handle) {
309
+ this.files.delete(handle);
310
+ }
311
+ fileRead(handle, offset, len) {
312
+ const open = this.files.get(handle);
313
+ if (!open)
314
+ return { code: ERR_GENERIC, data: new Uint8Array(0) };
315
+ const entry = this.entries.get(open.path);
316
+ if (entry?.type !== "file")
317
+ return { code: ERR_GENERIC, data: new Uint8Array(0) };
318
+ const start = Number(offset);
319
+ const end = Math.min(entry.content.length, start + len);
320
+ const data = entry.content.subarray(start, end);
321
+ return { code: OK, data };
322
+ }
323
+ fileWrite(handle, offset, data) {
324
+ const open = this.files.get(handle);
325
+ if (!open)
326
+ return { code: ERR_GENERIC, written: 0 };
327
+ const entry = this.entries.get(open.path);
328
+ if (entry?.type !== "file")
329
+ return { code: ERR_GENERIC, written: 0 };
330
+ const start = Number(offset);
331
+ const end = start + data.length;
332
+ if (end > entry.content.length) {
333
+ const grown = new Uint8Array(end);
334
+ grown.set(entry.content);
335
+ entry.content = grown;
336
+ }
337
+ entry.content.set(data, start);
338
+ entry.mtimeNs = this.now();
339
+ return { code: OK, written: data.length };
340
+ }
341
+ fileWriteStream(handle, data) {
342
+ const open = this.files.get(handle);
343
+ if (!open)
344
+ return { code: ERR_GENERIC, written: 0 };
345
+ const r = this.fileWrite(handle, open.position, data);
346
+ if (r.code === OK)
347
+ open.position += BigInt(r.written);
348
+ return r;
349
+ }
350
+ fileReadStream(handle, len) {
351
+ const open = this.files.get(handle);
352
+ if (!open)
353
+ return { code: ERR_GENERIC, data: new Uint8Array(0) };
354
+ const r = this.fileRead(handle, open.position, len);
355
+ if (r.code === OK)
356
+ open.position += BigInt(r.data.length);
357
+ return r;
358
+ }
359
+ fileStat(handle) {
360
+ const open = this.files.get(handle);
361
+ if (!open)
362
+ return { code: ERR_GENERIC };
363
+ const entry = this.entries.get(open.path);
364
+ if (!entry)
365
+ return { code: ERR_GENERIC };
366
+ return { code: OK, stat: this.statToResult(open.path, entry) };
367
+ }
368
+ fileLength(handle) {
369
+ const open = this.files.get(handle);
370
+ if (!open)
371
+ return { code: ERR_GENERIC, length: 0n };
372
+ const entry = this.entries.get(open.path);
373
+ if (entry?.type !== "file")
374
+ return { code: ERR_GENERIC, length: 0n };
375
+ return { code: OK, length: BigInt(entry.content.length) };
376
+ }
377
+ fileSeekTo(handle, offset) {
378
+ const open = this.files.get(handle);
379
+ if (!open)
380
+ return ERR_GENERIC;
381
+ open.position = offset;
382
+ return OK;
383
+ }
384
+ fileSeekBy(handle, relative) {
385
+ const open = this.files.get(handle);
386
+ if (!open)
387
+ return ERR_GENERIC;
388
+ open.position += relative;
389
+ return OK;
390
+ }
391
+ fileLock(_handle, _kind) {
392
+ return OK;
393
+ }
394
+ fileTryLock(_handle, _kind) {
395
+ return 1;
396
+ }
397
+ fileUnlock(_handle) { }
398
+ fileSync(_handle) {
399
+ return OK;
400
+ }
401
+ fileSetLength(handle, length) {
402
+ const open = this.files.get(handle);
403
+ if (!open)
404
+ return ERR_GENERIC;
405
+ const entry = this.entries.get(open.path);
406
+ if (entry?.type !== "file")
407
+ return ERR_GENERIC;
408
+ const n = Number(length);
409
+ if (n === entry.content.length)
410
+ return OK;
411
+ const grown = new Uint8Array(n);
412
+ grown.set(entry.content.subarray(0, Math.min(n, entry.content.length)));
413
+ entry.content = grown;
414
+ entry.mtimeNs = this.now();
415
+ return OK;
416
+ }
417
+ nowNanos() {
418
+ return this.now();
419
+ }
420
+ random(buf) {
421
+ // Use crypto.getRandomValues if available (browser, modern Node, Deno);
422
+ // fall back to Math.random for the few environments missing it.
423
+ const c = globalThis.crypto;
424
+ if (c?.getRandomValues) {
425
+ c.getRandomValues(buf);
426
+ return;
427
+ }
428
+ for (let i = 0; i < buf.length; i++)
429
+ buf[i] = (Math.random() * 256) | 0;
430
+ }
431
+ }
432
+ //# sourceMappingURL=host-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-memory.js","sourceRoot":"","sources":["../src/host-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
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 type { Host, StatResult } from "./host.ts";
15
+ export declare class NodeHost implements Host {
16
+ private dirs;
17
+ private files;
18
+ private nextHandle;
19
+ trace: boolean;
20
+ constructor(rootPath: string);
21
+ private log;
22
+ private resolve;
23
+ private allocHandle;
24
+ private statToResult;
25
+ dirCreateFile(dirHandle: number, sub: string): {
26
+ code: number;
27
+ handle: number;
28
+ };
29
+ dirOpenFile(dirHandle: number, sub: string): {
30
+ code: number;
31
+ handle: number;
32
+ };
33
+ dirCreateDir(dirHandle: number, sub: string): 0 | 1;
34
+ dirCreateDirPath(dirHandle: number, sub: string): {
35
+ code: number;
36
+ existed: boolean;
37
+ };
38
+ dirCreateDirPathOpen(dirHandle: number, sub: string): {
39
+ code: number;
40
+ handle: number;
41
+ };
42
+ dirOpenDir(dirHandle: number, sub: string): {
43
+ code: number;
44
+ handle: number;
45
+ };
46
+ dirClose(handle: number): void;
47
+ dirDeleteFile(dirHandle: number, sub: string): 0 | 2;
48
+ dirRename(oldDir: number, oldSub: string, newDir: number, newSub: string): 0 | 1;
49
+ dirStatFile(dirHandle: number, sub: string): {
50
+ code: number;
51
+ stat: StatResult;
52
+ } | {
53
+ code: number;
54
+ stat?: undefined;
55
+ };
56
+ dirReadLink(dirHandle: number, sub: string): {
57
+ code: number;
58
+ target: string;
59
+ } | {
60
+ code: number;
61
+ target?: undefined;
62
+ };
63
+ dirAccess(dirHandle: number, sub: string): 0 | 2;
64
+ fileClose(handle: number): void;
65
+ fileRead(handle: number, offset: bigint, len: number): {
66
+ code: number;
67
+ data: Uint8Array<ArrayBuffer>;
68
+ };
69
+ fileWriteStream(handle: number, data: Uint8Array): {
70
+ code: number;
71
+ written: number;
72
+ };
73
+ fileReadStream(handle: number, len: number): {
74
+ code: number;
75
+ data: Uint8Array<ArrayBuffer>;
76
+ };
77
+ fileWrite(handle: number, offset: bigint, data: Uint8Array): {
78
+ code: number;
79
+ written: number;
80
+ };
81
+ fileStat(handle: number): {
82
+ code: number;
83
+ stat?: undefined;
84
+ } | {
85
+ code: number;
86
+ stat: StatResult;
87
+ };
88
+ fileLength(handle: number): {
89
+ code: number;
90
+ length: bigint;
91
+ };
92
+ fileSeekTo(handle: number, offset: bigint): 0 | 1;
93
+ fileSeekBy(handle: number, relative: bigint): 0 | 1;
94
+ fileLock(_handle: number, _kind: number): number;
95
+ fileTryLock(_handle: number, _kind: number): number;
96
+ fileUnlock(_handle: number): void;
97
+ fileSync(handle: number): 0 | 1;
98
+ fileSetLength(handle: number, length: bigint): 0 | 1;
99
+ nowNanos(): bigint;
100
+ random(buf: Uint8Array): void;
101
+ }
102
+ //# sourceMappingURL=host-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-node.d.ts","sourceRoot":"","sources":["../src/host-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAeH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAOlD,qBAAa,QAAS,YAAW,IAAI;IACnC,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,UAAU,CAAO;IACzB,KAAK,UAAS;gBAEF,QAAQ,EAAE,MAAM;IAI5B,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAsBpB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;IAc5C,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;IAc1C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAU3C,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;IAe/C,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;IAcnD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;IAazC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAKvB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAY5C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAaxE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;;;;IAY1C,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;;;;IAiB1C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAcxC,SAAS,CAAC,MAAM,EAAE,MAAM;IASxB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;IAcpD,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;;;;IAehD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;IAe1C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;;;;IAc1D,QAAQ,CAAC,MAAM,EAAE,MAAM;;;;;;;IAavB,UAAU,CAAC,MAAM,EAAE,MAAM;;;;IAazB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOzC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAO3C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAMvC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAI1C,UAAU,CAAC,OAAO,EAAE,MAAM;IAI1B,QAAQ,CAAC,MAAM,EAAE,MAAM;IAWvB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAe5C,QAAQ;IAIR,MAAM,CAAC,GAAG,EAAE,UAAU;CAGvB"}