records = (
await d3
.csv(endpoint)
.then((data) => data)
.catch((fault) => Object.assign([], { columns: [], error: fault.message }))
).map(({ "good name": best, ...rest }) =>
Object.assign(rest, {
rgb: (({ r, g, b, ...discard }) => [r, g, b])(d3.rgb(rest.hex)).join(" "),
hsl: (({ h, s, l, ...discard }, n) =>
[h, s, l].map(
(x, i) =>
((+x || 0) * (i ? 100 : 1))
.toFixed(n)
.replace(/(?:[.]0+|([.]\d+?)0+)$/, "$1") + (i ? "%" : "")
))(d3.hsl(rest.hex), 5).join(" "),
best
})
)