function* map(projection) {
const svg = d3
.create("svg")
.attr("viewBox", [-5, -5, 970, 510])
.attr("width", 962);
const path = d3.geoPath(projection);
yield svg.node();
svg
.append("path")
.datum({ type: "Sphere" })
.attr("d", path)
.attr("fill", "#f2fefe")
.attr("stroke", "#000");
svg
.append("path")
.datum(pole)
.attr("d", path)
.attr("fill", "#eee")
.attr("stroke", "#000");
svg
.append("path")
.datum(projection.clipAngle()
? {type:"Sphere"}
: Object.assign(d3.geoCircle().center([0,90]).radius(-170)(), {type:"MultiLineString"})
)
.attr("d", path)
.attr("fill", "none")
.attr("stroke-dasharray", "8 4")
.attr("stroke-width", "2")
.attr("stroke", "pink");
svg
.append("path")
.datum({ type: "Point", coordinates: [0, 90] })
.attr("d", path)
.attr("fill", d => "red");
}