@faberto/core-web
Version:
Nimiq's Rust-to-WASM web client
29 lines (26 loc) • 1.13 kB
JavaScript
export function setupMainThreadTransferHandlers(Comlink, classes) {
Comlink.transferHandlers.set('function', {
canHandle: (obj) => typeof obj === "function",
serialize(obj) {
return Comlink.transferHandlers.get('proxy').serialize(obj);
},
// deserialize(plain) {}, // Cannot receive functions from worker
});
// Serialize some class instances to allow them to be used as arguments in Client methods
function canBeSerializedToPlain(obj) {
return obj instanceof classes.Address
|| obj instanceof classes.Transaction;
}
Comlink.transferHandlers.set('plain', {
canHandle: (obj) => canBeSerializedToPlain(obj)
|| (Array.isArray(obj) && obj.some(item => canBeSerializedToPlain(item))),
serialize(obj) {
if (Array.isArray(obj)) {
return [obj.map(item => canBeSerializedToPlain(item) ? item.toPlain() : item), []];
} else {
return [obj.toPlain(), []];
}
},
// deserialize(plain) {}, // Cannot receive class instances from worker
});
}