; | |
const {MAIN, THREAD} = require('./channel.js'); | |
const $coincident = require('./structured.js'); | |
const main = require('./window/main.js'); | |
const thread = require('./window/thread.js'); | |
const be = require('./ws/be.js'); | |
const fe = require('./ws/fe.js'); | |
const server = require('./ws/server.js'); | |
const proxies = new WeakMap; | |
const coincident = (self, ...args) => { | |
if (self.process) { | |
if (!proxies.has(self)) | |
proxies.set(self, server(...args)); | |
} | |
else { | |
const proxy = $coincident(self); | |
if (!proxies.has(proxy)) { | |
const isWorker = self instanceof Worker; | |
const util = isWorker ? main : thread; | |
proxies.set(proxy, (isWorker ? be : fe)(self, util(proxy, MAIN, THREAD), ...args)); | |
} | |
} | |
return proxies.get(proxy); | |
} | |
module.exports = coincident; | |