edges = {
const seen = new Set();
const queue = [start];
const answers = new d3.InternSet([], ({ TTL, ...rest }) =>
JSON.stringify(rest)
);
while (queue.length) {
const name = queue.shift();
if (seen.has(name)) continue;
seen.add(name);
for (const type of types(name)) {
const response = await query({ name, type });
for (const a of response.Answer ?? [{ name, type }]) {
answers.add(a);
switch (a.type) {
case 1:
case 28: {
if (allowed.includes("ptr")) {
const data = invert(a.data);
answers.add({ name: a.data, type: "ptr?", data });
queue.push(data);
}
break;
}
case 5:
case 12:
queue.push(a.data);
break;
case 15: {
const data = a.data.split(" ", 2)[1];
answers.add({ name: a.data, type: "mx?", data });
queue.push(data);
break;
}
}
}
yield answers;
}
}
}