coincident
Version:
An Atomics based Proxy to simplify, and synchronize, Worker related tasks
37 lines (29 loc) • 986 B
JavaScript
import { MAIN, WORKER } from './constants.js';
import { decoder as directDecoder } from 'reflected-ffi/decoder';
import remote from 'reflected-ffi/remote';
import coincident from '../worker.js';
/**
* @callback Coincident
* @param {import('../worker.js').WorkerOptions} [options]
* @returns {Promise<{native: boolean, transfer: (...args: Transferable[]) => Transferable[], proxy: {}, window: Window, isWindowProxy: (value: any) => boolean}>}
*/
export default /** @type {Coincident} */ async options => {
const exports = await coincident({
...options,
decoder: options?.decoder || directDecoder,
});
const ffi = remote({ ...options, buffer: true, reflect: exports.proxy[MAIN] });
exports.proxy[WORKER] = ffi.reflect;
return {
...exports,
window: ffi.global,
isWindowProxy: ffi.isProxy,
ffi: {
assign: ffi.assign,
direct: ffi.direct,
evaluate: ffi.evaluate,
gather: ffi.gather,
query: ffi.query,
}
};
};