UNPKG

coincident

Version:

An Atomics based Proxy to simplify, and synchronize, Worker related tasks

60 lines (52 loc) 1.23 kB
const { assign, create, } = Object; /* c8 ignore start */ let ID = 'coincident-', native = true; try { new SharedArrayBuffer(4, { maxByteLength: 8 }); ID += crypto.randomUUID(); } catch (_) { native = false; ID += Math.random().toString(36).substring(2); } /* c8 ignore end */ const byteOffset = 2 * Int32Array.BYTES_PER_ELEMENT; const minByteLength = 0x7FFF; // throws at 0xFFFF via .apply(...) const maxByteLength = 0x1000000; const defaults = { // ⚠️ mandatory: first int32 to notify, second one to store the written length byteOffset, }; const result = async (data, proxied, transform) => { try { const result = await proxied[data[1]].apply(null, data[2]); data[1] = transform ? transform(result) : result; data[2] = null; } catch (error) { data[2] = error } }; const set = (proxied, name, callback) => { const ok = name !== 'then'; if (ok) proxied[name] = callback; return ok; }; /** @param {Event} event */ const stop = event => { event.stopImmediatePropagation(); event.preventDefault(); }; export { ID, assign, create, defaults, maxByteLength, minByteLength, native, result, set, stop, };