sabayon
Version:
SharedArrayBuffer always on
44 lines (35 loc) • 942 B
JavaScript
//@ts-check
import { SharedArrayBuffer, native } from './sab.js';
import { handler } from './utils/handler.js';
import { asDescriptorValue, create, waitAsync } from './utils/shared.js';
import mitm from './utils/mitm.js';
let {
Atomics: A,
Worker: W,
} = globalThis;
if (!native) {
const _ = mitm(handler);
A = create(A, {
notify: asDescriptorValue((...args) => handler.notify(...args)),
// TODO: currently only main notifies workers
// waitAsync: asDescriptorValue((view, index, value, timeout = Infinity) => ({
// async: true,
// value: waitAsync(view, _)
// }))
});
W = class Worker extends W {
constructor(...args) {
//@ts-ignore
super(...args);
super.addEventListener('message', handler);
super.postMessage(handler.id);
}
};
}
export {
SharedArrayBuffer,
A as Atomics,
W as Worker,
native
};
export { MessageChannel } from './message-channel.js';