Offload functions to worker threads with shared memory primitives for Node.js.
8
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: rename sync protocol to shared (Symbol, markers)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

+18 -18
+1 -1
src/shared/atomic-bool.ts
··· 39 39 return Atomics.compareExchange(this.view, 0, expected ? 1 : 0, replacement ? 1 : 0) !== 0; 40 40 } 41 41 42 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 42 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 43 43 return { tag: 'AtomicBool', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 44 44 } 45 45 }
+1 -1
src/shared/atomic-int16.ts
··· 47 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 48 } 49 49 50 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 50 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 51 return { tag: 'AtomicInt16', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 52 } 53 53 }
+1 -1
src/shared/atomic-int32.ts
··· 47 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 48 } 49 49 50 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 50 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 51 return { tag: 'AtomicInt32', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 52 } 53 53 }
+1 -1
src/shared/atomic-int64.ts
··· 47 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 48 } 49 49 50 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 50 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 51 return { tag: 'AtomicInt64', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 52 } 53 53 }
+1 -1
src/shared/atomic-int8.ts
··· 47 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 48 } 49 49 50 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 50 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 51 return { tag: 'AtomicInt8', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 52 } 53 53 }
+1 -1
src/shared/atomic-uint16.ts
··· 47 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 48 } 49 49 50 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 50 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 51 return { tag: 'AtomicUint16', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 52 } 53 53 }
+1 -1
src/shared/atomic-uint32.ts
··· 47 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 48 } 49 49 50 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 50 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 51 return { tag: 'AtomicUint32', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 52 } 53 53 }
+1 -1
src/shared/atomic-uint64.ts
··· 47 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 48 } 49 49 50 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 50 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 51 return { tag: 'AtomicUint64', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 52 } 53 53 }
+1 -1
src/shared/atomic-uint8.ts
··· 47 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 48 } 49 49 50 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 50 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 51 return { tag: 'AtomicUint8', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 52 } 53 53 }
+1 -1
src/shared/mutex.ts
··· 45 45 Atomics.notify(this.view, 0, 1); 46 46 } 47 47 48 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 48 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 49 49 return { tag: 'Mutex', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 50 50 } 51 51 }
+7 -7
src/shared/reconstruct.ts
··· 1 - const SYNC = Symbol.for('moroutine.sync'); 1 + const SHARED = Symbol.for('moroutine.shared'); 2 2 3 3 const registry = new Map<string, new (buffer: SharedArrayBuffer, byteOffset: number) => unknown>(); 4 4 ··· 7 7 } 8 8 9 9 export function serializeArg(arg: unknown): unknown { 10 - if (typeof arg === 'object' && arg !== null && SYNC in arg) { 11 - const sync = (arg as { [key: symbol]: () => { tag: string; buffer: SharedArrayBuffer; byteOffset: number } })[SYNC](); 12 - return { __sync__: sync.tag, buffer: sync.buffer, byteOffset: sync.byteOffset }; 10 + if (typeof arg === 'object' && arg !== null && SHARED in arg) { 11 + const shared = (arg as { [key: symbol]: () => { tag: string; buffer: SharedArrayBuffer; byteOffset: number } })[SHARED](); 12 + return { __shared__: shared.tag, buffer: shared.buffer, byteOffset: shared.byteOffset }; 13 13 } 14 14 return arg; 15 15 } 16 16 17 17 export function deserializeArg(arg: unknown): unknown { 18 - if (typeof arg === 'object' && arg !== null && '__sync__' in arg) { 19 - const data = arg as { __sync__: string; buffer: SharedArrayBuffer; byteOffset: number }; 20 - const ctor = registry.get(data.__sync__); 18 + if (typeof arg === 'object' && arg !== null && '__shared__' in arg) { 19 + const data = arg as { __shared__: string; buffer: SharedArrayBuffer; byteOffset: number }; 20 + const ctor = registry.get(data.__shared__); 21 21 if (ctor) return new ctor(data.buffer, data.byteOffset); 22 22 } 23 23 return arg;
+1 -1
src/shared/rwlock.ts
··· 87 87 Atomics.notify(this.view, 0, +Infinity); 88 88 } 89 89 90 - [Symbol.for('moroutine.sync')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 90 + [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 91 91 return { tag: 'RwLock', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 92 92 } 93 93 }