39 lines
936 B
JavaScript
39 lines
936 B
JavaScript
const IS_NODE =
|
|
typeof process !== "undefined" &&
|
|
process.versions?.node != null
|
|
|
|
async function bridgeSend(name, args) {
|
|
// Example browser implementation: send function call to server
|
|
const res = await global.Socket.send({
|
|
name: name,
|
|
args: args
|
|
})
|
|
|
|
const json = await res.json()
|
|
if (!res.ok) throw new Error(json.error)
|
|
return json.result
|
|
}
|
|
|
|
/**
|
|
* Wraps an object of functions so that:
|
|
* - Node calls the real function
|
|
* - Browser calls bridgeSend
|
|
*/
|
|
export function createBridge(funcs) {
|
|
return new Proxy(funcs, {
|
|
get(target, prop) {
|
|
const orig = target[prop]
|
|
|
|
if (typeof orig !== "function") return orig
|
|
|
|
return function (...args) {
|
|
if (IS_NODE) {
|
|
return orig(...args)
|
|
} else {
|
|
return bridgeSend(prop, args)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|