@utoo/web 1.2.0-rc.6 → 1.2.0-rc.7

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/esm/project.js CHANGED
@@ -81,6 +81,9 @@ export class Project {
81
81
  }
82
82
  async writeFile(path, content, encoding) {
83
83
  await __classPrivateFieldGet(this, _Project_mount, "f");
84
+ if (content instanceof Uint8Array) {
85
+ return await this.remote.writeFile(path, comlink.transfer(content, [content.buffer]), encoding);
86
+ }
84
87
  return await this.remote.writeFile(path, content, encoding);
85
88
  }
86
89
  async copyFile(src, dst) {
@@ -111,11 +114,12 @@ export class Project {
111
114
  }
112
115
  async gzip(files) {
113
116
  await __classPrivateFieldGet(this, _Project_mount, "f");
114
- return await this.remote.gzip(files);
117
+ const buffers = files.map((f) => f.content.buffer);
118
+ return await this.remote.gzip(comlink.transfer(files, buffers));
115
119
  }
116
120
  async sigMd5(content) {
117
121
  await __classPrivateFieldGet(this, _Project_mount, "f");
118
- return await this.remote.sigMd5(content);
122
+ return await this.remote.sigMd5(comlink.transfer(content, [content.buffer]));
119
123
  }
120
124
  static fork(channel, eventSource) {
121
125
  (eventSource || self).postMessage(Fork, {
package/esm/sabcom.d.ts CHANGED
@@ -12,11 +12,15 @@ export declare const SAB_OP_COPY_FILE = 7;
12
12
  export declare const SAB_OP_STAT = 8;
13
13
  export declare const STAT_TYPE_FILE = 0;
14
14
  export declare const STAT_TYPE_DIR = 1;
15
+ export declare const SAB_INDEX_STATE = 0;
16
+ export declare const SAB_INDEX_OP = 1;
17
+ export declare const SAB_INDEX_DATA_LEN = 2;
18
+ export declare const SAB_DATA_OFFSET = 12;
15
19
  export declare class SabComHost {
16
20
  private sab;
17
21
  private int32;
18
22
  private uint8;
19
- statStruct: any;
23
+ private dataView;
20
24
  constructor(sab: SharedArrayBuffer);
21
25
  readRequest(): {
22
26
  op: number;
@@ -24,17 +28,24 @@ export declare class SabComHost {
24
28
  };
25
29
  writeResponse(data: Uint8Array | string): void;
26
30
  writeError(message: string): void;
27
- writeStatResponse(): void;
31
+ writeStat(type: number, size: bigint, atimeMs: number, mtimeMs: number, ctimeMs: number, birthtimeMs: number): void;
28
32
  }
29
33
  export declare class SabComClient {
30
34
  private sab;
31
35
  private notifyHost;
32
36
  private int32;
33
37
  private uint8;
34
- statStruct: any;
38
+ private dataView;
35
39
  constructor(sab: SharedArrayBuffer, notifyHost: () => void);
36
40
  call(op: number, data: string): Uint8Array<ArrayBuffer>;
37
- callStat(path: string): any;
41
+ callStat(path: string): {
42
+ type: number;
43
+ size: bigint;
44
+ atimeMs: number;
45
+ mtimeMs: number;
46
+ ctimeMs: number;
47
+ birthtimeMs: number;
48
+ };
38
49
  }
39
50
  export interface SabFileSystem {
40
51
  read(path: string): Promise<Uint8Array>;
package/esm/sabcom.js CHANGED
@@ -1,4 +1,3 @@
1
- import { BigUint64, BufferBackedObject, Float64, Uint8, } from "buffer-backed-object";
2
1
  export const SAB_STATE_IDLE = 0;
3
2
  export const SAB_STATE_REQUEST = 1;
4
3
  export const SAB_STATE_RESPONSE = 2;
@@ -13,14 +12,24 @@ export const SAB_OP_COPY_FILE = 7;
13
12
  export const SAB_OP_STAT = 8;
14
13
  export const STAT_TYPE_FILE = 0;
15
14
  export const STAT_TYPE_DIR = 1;
16
- const StatDescriptor = {
17
- type: Uint8(),
18
- size: BigUint64(),
19
- atimeMs: Float64(),
20
- mtimeMs: Float64(),
21
- ctimeMs: Float64(),
22
- birthtimeMs: Float64(),
23
- };
15
+ export const SAB_INDEX_STATE = 0;
16
+ export const SAB_INDEX_OP = 1;
17
+ export const SAB_INDEX_DATA_LEN = 2;
18
+ export const SAB_DATA_OFFSET = 12;
19
+ // Stat struct layout (starts at byte 12)
20
+ // type: Uint8 (1 byte) -> offset 0
21
+ // padding: 7 bytes
22
+ // size: BigUint64 (8 bytes) -> offset 8
23
+ // atimeMs: Float64 (8 bytes) -> offset 16
24
+ // mtimeMs: Float64 (8 bytes) -> offset 24
25
+ // ctimeMs: Float64 (8 bytes) -> offset 32
26
+ // birthtimeMs: Float64 (8 bytes) -> offset 40
27
+ const STAT_OFFSET_TYPE = 0;
28
+ const STAT_OFFSET_SIZE = 8;
29
+ const STAT_OFFSET_ATIME = 16;
30
+ const STAT_OFFSET_MTIME = 24;
31
+ const STAT_OFFSET_CTIME = 32;
32
+ const STAT_OFFSET_BIRTHTIME = 40;
24
33
  // Layout:
25
34
  // 0: State (Int32)
26
35
  // 1: Op (Int32)
@@ -31,14 +40,12 @@ export class SabComHost {
31
40
  this.sab = sab;
32
41
  this.int32 = new Int32Array(sab);
33
42
  this.uint8 = new Uint8Array(sab);
34
- this.statStruct = BufferBackedObject(sab, StatDescriptor, {
35
- byteOffset: 12,
36
- });
43
+ this.dataView = new DataView(sab);
37
44
  }
38
45
  readRequest() {
39
- const op = this.int32[1];
40
- const len = this.int32[2];
41
- const data = new TextDecoder().decode(this.uint8.slice(12, 12 + len));
46
+ const op = this.int32[SAB_INDEX_OP];
47
+ const len = this.int32[SAB_INDEX_DATA_LEN];
48
+ const data = new TextDecoder().decode(this.uint8.slice(SAB_DATA_OFFSET, SAB_DATA_OFFSET + len));
42
49
  return { op, data };
43
50
  }
44
51
  writeResponse(data) {
@@ -46,21 +53,28 @@ export class SabComHost {
46
53
  data = new TextEncoder().encode(data);
47
54
  }
48
55
  // TODO: Check size overflow
49
- this.int32[2] = data.length;
50
- this.uint8.set(data, 12);
51
- Atomics.store(this.int32, 0, SAB_STATE_RESPONSE);
52
- Atomics.notify(this.int32, 0);
56
+ this.int32[SAB_INDEX_DATA_LEN] = data.length;
57
+ this.uint8.set(data, SAB_DATA_OFFSET);
58
+ Atomics.store(this.int32, SAB_INDEX_STATE, SAB_STATE_RESPONSE);
59
+ Atomics.notify(this.int32, SAB_INDEX_STATE);
53
60
  }
54
61
  writeError(message) {
55
62
  const data = new TextEncoder().encode(message);
56
- this.int32[2] = data.length;
57
- this.uint8.set(data, 12);
58
- Atomics.store(this.int32, 0, SAB_STATE_ERROR);
59
- Atomics.notify(this.int32, 0);
63
+ this.int32[SAB_INDEX_DATA_LEN] = data.length;
64
+ this.uint8.set(data, SAB_DATA_OFFSET);
65
+ Atomics.store(this.int32, SAB_INDEX_STATE, SAB_STATE_ERROR);
66
+ Atomics.notify(this.int32, SAB_INDEX_STATE);
60
67
  }
61
- writeStatResponse() {
62
- Atomics.store(this.int32, 0, SAB_STATE_RESPONSE);
63
- Atomics.notify(this.int32, 0);
68
+ writeStat(type, size, atimeMs, mtimeMs, ctimeMs, birthtimeMs) {
69
+ const base = SAB_DATA_OFFSET;
70
+ this.dataView.setUint8(base + STAT_OFFSET_TYPE, type);
71
+ this.dataView.setBigUint64(base + STAT_OFFSET_SIZE, size, true);
72
+ this.dataView.setFloat64(base + STAT_OFFSET_ATIME, atimeMs, true);
73
+ this.dataView.setFloat64(base + STAT_OFFSET_MTIME, mtimeMs, true);
74
+ this.dataView.setFloat64(base + STAT_OFFSET_CTIME, ctimeMs, true);
75
+ this.dataView.setFloat64(base + STAT_OFFSET_BIRTHTIME, birthtimeMs, true);
76
+ Atomics.store(this.int32, SAB_INDEX_STATE, SAB_STATE_RESPONSE);
77
+ Atomics.notify(this.int32, SAB_INDEX_STATE);
64
78
  }
65
79
  }
66
80
  export class SabComClient {
@@ -69,42 +83,48 @@ export class SabComClient {
69
83
  this.notifyHost = notifyHost;
70
84
  this.int32 = new Int32Array(sab);
71
85
  this.uint8 = new Uint8Array(sab);
72
- this.statStruct = BufferBackedObject(sab, StatDescriptor, {
73
- byteOffset: 12,
74
- });
86
+ this.dataView = new DataView(sab);
75
87
  }
76
88
  call(op, data) {
77
89
  const encoded = new TextEncoder().encode(data);
78
- this.int32[1] = op;
79
- this.int32[2] = encoded.length;
80
- this.uint8.set(encoded, 12);
81
- Atomics.store(this.int32, 0, SAB_STATE_REQUEST);
90
+ this.int32[SAB_INDEX_OP] = op;
91
+ this.int32[SAB_INDEX_DATA_LEN] = encoded.length;
92
+ this.uint8.set(encoded, SAB_DATA_OFFSET);
93
+ Atomics.store(this.int32, SAB_INDEX_STATE, SAB_STATE_REQUEST);
82
94
  this.notifyHost();
83
- Atomics.wait(this.int32, 0, SAB_STATE_REQUEST);
84
- const state = Atomics.load(this.int32, 0);
95
+ Atomics.wait(this.int32, SAB_INDEX_STATE, SAB_STATE_REQUEST);
96
+ const state = Atomics.load(this.int32, SAB_INDEX_STATE);
85
97
  if (state === SAB_STATE_ERROR) {
86
- const len = this.int32[2];
87
- const msg = new TextDecoder().decode(this.uint8.slice(12, 12 + len));
98
+ const len = this.int32[SAB_INDEX_DATA_LEN];
99
+ const msg = new TextDecoder().decode(this.uint8.slice(SAB_DATA_OFFSET, SAB_DATA_OFFSET + len));
88
100
  throw new Error(msg);
89
101
  }
90
- const len = this.int32[2];
91
- return this.uint8.slice(12, 12 + len);
102
+ const len = this.int32[SAB_INDEX_DATA_LEN];
103
+ return this.uint8.slice(SAB_DATA_OFFSET, SAB_DATA_OFFSET + len);
92
104
  }
93
105
  callStat(path) {
94
106
  const encoded = new TextEncoder().encode(path);
95
- this.int32[1] = SAB_OP_STAT;
96
- this.int32[2] = encoded.length;
97
- this.uint8.set(encoded, 12);
98
- Atomics.store(this.int32, 0, SAB_STATE_REQUEST);
107
+ this.int32[SAB_INDEX_OP] = SAB_OP_STAT;
108
+ this.int32[SAB_INDEX_DATA_LEN] = encoded.length;
109
+ this.uint8.set(encoded, SAB_DATA_OFFSET);
110
+ Atomics.store(this.int32, SAB_INDEX_STATE, SAB_STATE_REQUEST);
99
111
  this.notifyHost();
100
- Atomics.wait(this.int32, 0, SAB_STATE_REQUEST);
101
- const state = Atomics.load(this.int32, 0);
112
+ Atomics.wait(this.int32, SAB_INDEX_STATE, SAB_STATE_REQUEST);
113
+ const state = Atomics.load(this.int32, SAB_INDEX_STATE);
102
114
  if (state === SAB_STATE_ERROR) {
103
- const len = this.int32[2];
104
- const msg = new TextDecoder().decode(this.uint8.slice(12, 12 + len));
115
+ const len = this.int32[SAB_INDEX_DATA_LEN];
116
+ const msg = new TextDecoder().decode(this.uint8.slice(SAB_DATA_OFFSET, SAB_DATA_OFFSET + len));
105
117
  throw new Error(msg);
106
118
  }
107
- return this.statStruct;
119
+ const base = SAB_DATA_OFFSET;
120
+ return {
121
+ type: this.dataView.getUint8(base + STAT_OFFSET_TYPE),
122
+ size: this.dataView.getBigUint64(base + STAT_OFFSET_SIZE, true),
123
+ atimeMs: this.dataView.getFloat64(base + STAT_OFFSET_ATIME, true),
124
+ mtimeMs: this.dataView.getFloat64(base + STAT_OFFSET_MTIME, true),
125
+ ctimeMs: this.dataView.getFloat64(base + STAT_OFFSET_CTIME, true),
126
+ birthtimeMs: this.dataView.getFloat64(base + STAT_OFFSET_BIRTHTIME, true),
127
+ };
108
128
  }
109
129
  }
110
130
  export const handleSabRequest = async (sabHost, fs) => {
@@ -165,14 +185,13 @@ export const handleSabRequest = async (sabHost, fs) => {
165
185
  const json = metadata.toJSON
166
186
  ? metadata.toJSON()
167
187
  : metadata;
168
- sabHost.statStruct.type =
169
- json.type === "directory" ? STAT_TYPE_DIR : STAT_TYPE_FILE;
170
- sabHost.statStruct.size = BigInt(json.file_size || 0);
171
- sabHost.statStruct.atimeMs = Number(json.atimeMs || 0);
172
- sabHost.statStruct.mtimeMs = Number(json.mtimeMs || 0);
173
- sabHost.statStruct.ctimeMs = Number(json.ctimeMs || 0);
174
- sabHost.statStruct.birthtimeMs = Number(json.birthtimeMs || 0);
175
- sabHost.writeStatResponse();
188
+ const type = json.type === "directory" ? STAT_TYPE_DIR : STAT_TYPE_FILE;
189
+ const size = BigInt(json.file_size || 0);
190
+ const atimeMs = Number(json.atimeMs || 0);
191
+ const mtimeMs = Number(json.mtimeMs || 0);
192
+ const ctimeMs = Number(json.ctimeMs || 0);
193
+ const birthtimeMs = Number(json.birthtimeMs || 0);
194
+ sabHost.writeStat(type, size, atimeMs, mtimeMs, ctimeMs, birthtimeMs);
176
195
  }
177
196
  else {
178
197
  sabHost.writeError("Unknown op");
package/esm/utoo/index.js CHANGED
@@ -300,7 +300,7 @@ export function wasm_thread_entry_point(ptr) {
300
300
  function __wbg_adapter_4(arg0, arg1, arg2) {
301
301
  wasm.__wbindgen_export_6(arg0, arg1, addHeapObject(arg2));
302
302
  }
303
- function __wbg_adapter_9(arg0, arg1) {
303
+ function __wbg_adapter_11(arg0, arg1) {
304
304
  wasm.__wbindgen_export_7(arg0, arg1);
305
305
  }
306
306
  function __wbg_adapter_18(arg0, arg1, arg2) {
@@ -1774,17 +1774,17 @@ function __wbg_get_imports() {
1774
1774
  };
1775
1775
  imports.wbg.__wbindgen_cast_7b3678bd8e0fb80b = function (arg0, arg1) {
1776
1776
  // Cast intrinsic for `Closure(Closure { dtor_idx: 8626, function: Function { arguments: [NamedExternref("MessageEvent")], shim_idx: 8627, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
1777
- const ret = makeMutClosure(arg0, arg1, 8626, __wbg_adapter_18);
1777
+ const ret = makeMutClosure(arg0, arg1, 8626, __wbg_adapter_4);
1778
1778
  return addHeapObject(ret);
1779
1779
  };
1780
1780
  imports.wbg.__wbindgen_cast_884165a22f3e9702 = function (arg0, arg1) {
1781
1781
  // Cast intrinsic for `Closure(Closure { dtor_idx: 8626, function: Function { arguments: [Externref], shim_idx: 8627, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
1782
- const ret = makeMutClosure(arg0, arg1, 8626, __wbg_adapter_18);
1782
+ const ret = makeMutClosure(arg0, arg1, 8626, __wbg_adapter_4);
1783
1783
  return addHeapObject(ret);
1784
1784
  };
1785
1785
  imports.wbg.__wbindgen_cast_8b2c5f11dff5b9ba = function (arg0, arg1) {
1786
1786
  // Cast intrinsic for `Closure(Closure { dtor_idx: 8626, function: Function { arguments: [], shim_idx: 599, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
1787
- const ret = makeMutClosure(arg0, arg1, 8626, __wbg_adapter_9);
1787
+ const ret = makeMutClosure(arg0, arg1, 8626, __wbg_adapter_11);
1788
1788
  return addHeapObject(ret);
1789
1789
  };
1790
1790
  imports.wbg.__wbindgen_cast_9ae0607507abb057 = function (arg0) {
@@ -1794,12 +1794,12 @@ function __wbg_get_imports() {
1794
1794
  };
1795
1795
  imports.wbg.__wbindgen_cast_9f714a98b1af7c37 = function (arg0, arg1) {
1796
1796
  // Cast intrinsic for `Closure(Closure { dtor_idx: 8610, function: Function { arguments: [NamedExternref("Array<any>")], shim_idx: 8611, ret: Unit, inner_ret: Some(Unit) }, mutable: false }) -> Externref`.
1797
- const ret = makeClosure(arg0, arg1, 8610, __wbg_adapter_4);
1797
+ const ret = makeClosure(arg0, arg1, 8610, __wbg_adapter_18);
1798
1798
  return addHeapObject(ret);
1799
1799
  };
1800
1800
  imports.wbg.__wbindgen_cast_a5ee8c63b746891b = function (arg0, arg1) {
1801
1801
  // Cast intrinsic for `Closure(Closure { dtor_idx: 598, function: Function { arguments: [], shim_idx: 599, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
1802
- const ret = makeMutClosure(arg0, arg1, 598, __wbg_adapter_9);
1802
+ const ret = makeMutClosure(arg0, arg1, 598, __wbg_adapter_11);
1803
1803
  return addHeapObject(ret);
1804
1804
  };
1805
1805
  imports.wbg.__wbindgen_cast_d6cd19b81560fd6e = function (arg0) {
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@utoo/web",
3
- "version": "1.2.0-rc.6",
3
+ "version": "1.2.0-rc.7",
4
4
  "module": "esm/index.js",
5
5
  "types": "esm/index.d.ts",
6
6
  "files": [
@@ -13,19 +13,17 @@
13
13
  "bindgen-dev": "wasm-bindgen ../../target/wasm32-unknown-unknown/wasm-dev/utoo_wasm.wasm --out-dir src/utoo --out-name index --target web --debug --keep-debug --no-demangle",
14
14
  "bindgen-build": "wasm-bindgen ../../target/wasm32-unknown-unknown/release/utoo_wasm.wasm --out-dir src/utoo --out-name index --target web",
15
15
  "bindgen-build:local": "wasm-bindgen ../../target/wasm32-unknown-unknown/release-local/utoo_wasm.wasm --out-dir src/utoo --out-name index --target web",
16
- "pretsc": "npm run build --workspace @utoo/pack-shared",
17
- "tsc": "rm -rf esm && tsc -p ./tsconfig.json",
18
- "dev": "npm run build-wasm -- --profile wasm-dev && npm run bindgen-dev && npm run tsc && npm run build-loaderWorker && cp src/utoo/index_bg.wasm esm/utoo",
16
+ "tsc": "rm -rf esm && tsc -p ./tsconfig.build.json",
17
+ "dev": "npm run build-wasm -- --profile wasm-dev && npm run bindgen-dev && npx turbo run tsc --filter=@utoo/web && npm run build-loaderWorker && cp src/utoo/index_bg.wasm esm/utoo",
19
18
  "dev:pm": "npm run build-wasm:pm -- --profile wasm-dev && npm run bindgen-dev && npm run tsc && cp src/utoo/index_bg.wasm esm/utoo",
20
19
  "wasm-opt": "wasm-opt src/utoo/index_bg.wasm -o esm/utoo/index_bg.wasm --enable-threads --enable-bulk-memory --enable-nontrapping-float-to-int -Oz",
21
20
  "build": "npm run build-wasm -- --release && npm run bindgen-build && npm run tsc && npm run build-loaderWorker && npm run wasm-opt",
22
21
  "build:local": "npm run build-wasm -- --profile release-local && npm run bindgen-build:local && npm run tsc && npm run build-loaderWorker && cp src/utoo/index_bg.wasm esm/utoo",
23
22
  "build-loaderWorker": "node cli/umd.js -e ./src/webpackLoaders/worker.ts -o ./esm/loaderWorker.js -t webworker",
24
- "prepublishOnly": "npm run build"
23
+ "prepublishOnly": "turbo run build --filter=@utoo/web"
25
24
  },
26
25
  "dependencies": {
27
26
  "@utoo/pack-shared": "^0.0.7",
28
- "buffer-backed-object": "^1.0.1",
29
27
  "comlink": "^4.4.2",
30
28
  "micromatch": "^4.0.8",
31
29
  "systemjs": "^6.15.1"
@@ -33,6 +31,7 @@
33
31
  "devDependencies": {
34
32
  "@types/micromatch": "^4.0.8",
35
33
  "@types/systemjs": "^6.15.1",
34
+ "binaryen": "^125.0.0",
36
35
  "node-stdlib-browser": "^1.3.1",
37
36
  "ts-loader": "^9.5.2",
38
37
  "typescript": "^5.8.3",