swarpc
Version:
Full type-safe RPC library for service worker -- move things off of the UI thread with ease!
27 lines (26 loc) • 738 B
JavaScript
// TODO: keep it in sync with web standards, how?
const transferableClasses = [
MessagePort,
ReadableStream,
WritableStream,
TransformStream,
ArrayBuffer,
];
export function findTransferables(value) {
if (value === null || value === undefined) {
return [];
}
if (typeof value === "object") {
if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {
return [value];
}
if (transferableClasses.some((cls) => value instanceof cls)) {
return [value];
}
if (Array.isArray(value)) {
return value.flatMap(findTransferables);
}
return Object.values(value).flatMap(findTransferables);
}
return [];
}