import ascending from "./ascending.js"; import permute from "./permute.js"; export default function sort(values, ...F) { if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable"); values = Array.from(values); let [f = ascending] = F; if (f.length === 1 || F.length > 1) { const index = Uint32Array.from(values, (d, i) => i); if (F.length > 1) { F = F.map(f => values.map(f)); index.sort((i, j) => { for (const f of F) { const c = ascending(f[i], f[j]); if (c) return c; } }); } else { f = values.map(f); index.sort((i, j) => ascending(f[i], f[j])); } return permute(values, index); } return values.sort(f); }