Safari | 15.4.0 | own | function | (...args) => {
const me = globalThis[bindingName];
if (needsHandle && args.slice(1).some(arg => arg !== undefined)) throw new Error(`exposeBindingHandle supports a single argument, ${args.length} received`);
let callbacks = me['callbacks'];
if (!callbacks) {
callbacks = new Map();
me['callbacks'] = callbacks;
}
const seq = (me['lastSeq'] || 0) + 1;
me['lastSeq'] = seq;
let handles = me['handles'];
if (!handles) {
handles = new Map();
me['handles'] = handles;
}
const promise = new Promise((resolve, reject) => callbacks.set(seq, {
resolve,
reject
}));
if (needsHandle) {
handles.set(seq, args[0]);
binding(JSON.stringify({
name: bindingName,
seq
}));
} else {
binding(JSON.stringify({
name: bindingName,
seq,
args
}));
}
return promise;
} |