Current section
Files
Jump to
Current section
Files
src/utils/transferables.ffi.mjs
// src/utils/transferables.ffi.ts
function isMessagePort(value) {
return typeof value === "object" && value !== null && value.constructor?.name === "MessagePort";
}
function collectPorts(value) {
const acc = [];
walk(value, acc, /* @__PURE__ */ new WeakSet());
return acc;
}
function walk(value, acc, seen) {
if (value === null || typeof value !== "object") return;
if (seen.has(value)) return;
seen.add(value);
if (isMessagePort(value)) {
acc.push(value);
return;
}
if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) return;
if (Array.isArray(value)) {
for (const item of value) walk(item, acc, seen);
return;
}
if (value instanceof Map) {
for (const [key, item] of value) {
walk(key, acc, seen);
walk(item, acc, seen);
}
return;
}
if (value instanceof Set) {
for (const item of value) walk(item, acc, seen);
return;
}
for (const key of Object.keys(value)) {
walk(value[key], acc, seen);
}
}
export {
collectPorts,
isMessagePort
};