1- // https://d3js.org v6.3.1 Copyright 2020 Mike Bostock
1+ // https://d3js.org v6.5.0 Copyright 2021 Mike Bostock
22(function (global, factory) {
33typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
44typeof define === 'function' && define.amd ? define(['exports'], factory) :
55(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
66}(this, (function (exports) { 'use strict';
77
8- var version = "6.3.1 ";
8+ var version = "6.5.0 ";
99
1010function ascending(a, b) {
1111 return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
@@ -268,6 +268,68 @@ function fsum(values, valueof) {
268268 return +adder;
269269}
270270
271+ class InternMap extends Map {
272+ constructor(entries = [], key = keyof) {
273+ super();
274+ Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
275+ for (const [key, value] of entries) this.set(key, value);
276+ }
277+ get(key) {
278+ return super.get(intern_get(this, key));
279+ }
280+ has(key) {
281+ return super.has(intern_get(this, key));
282+ }
283+ set(key, value) {
284+ return super.set(intern_set(this, key), value);
285+ }
286+ delete(key) {
287+ return super.delete(intern_delete(this, key));
288+ }
289+ }
290+
291+ class InternSet extends Set {
292+ constructor(values = [], key = keyof) {
293+ super();
294+ Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
295+ for (const value of values) this.add(value);
296+ }
297+ has(value) {
298+ return super.has(intern_get(this, value));
299+ }
300+ add(value) {
301+ return super.add(intern_set(this, value));
302+ }
303+ delete(value) {
304+ return super.delete(intern_delete(this, value));
305+ }
306+ }
307+
308+ function intern_get({_intern, _key}, value) {
309+ const key = _key(value);
310+ return _intern.has(key) ? _intern.get(key) : value;
311+ }
312+
313+ function intern_set({_intern, _key}, value) {
314+ const key = _key(value);
315+ if (_intern.has(key)) return _intern.get(key);
316+ _intern.set(key, value);
317+ return value;
318+ }
319+
320+ function intern_delete({_intern, _key}, value) {
321+ const key = _key(value);
322+ if (_intern.has(key)) {
323+ value = _intern.get(value);
324+ _intern.delete(key);
325+ }
326+ return value;
327+ }
328+
329+ function keyof(value) {
330+ return value !== null && typeof value === "object" ? value.valueOf() : value;
331+ }
332+
271333function identity(x) {
272334 return x;
273335}
@@ -304,7 +366,7 @@ function unique(values) {
304366function nest(values, map, reduce, keys) {
305367 return (function regroup(values, i) {
306368 if (i >= keys.length) return reduce(values);
307- const groups = new Map ();
369+ const groups = new InternMap ();
308370 const keyof = keys[i++];
309371 let index = -1;
310372 for (const value of values) {
@@ -320,6 +382,40 @@ function nest(values, map, reduce, keys) {
320382 })(values, 0);
321383}
322384
385+ function permute(source, keys) {
386+ return Array.from(keys, key => source[key]);
387+ }
388+
389+ function sort(values, ...F) {
390+ if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
391+ values = Array.from(values);
392+ let [f = ascending] = F;
393+ if (f.length === 1 || F.length > 1) {
394+ const index = Uint32Array.from(values, (d, i) => i);
395+ if (F.length > 1) {
396+ F = F.map(f => values.map(f));
397+ index.sort((i, j) => {
398+ for (const f of F) {
399+ const c = ascending(f[i], f[j]);
400+ if (c) return c;
401+ }
402+ });
403+ } else {
404+ f = values.map(f);
405+ index.sort((i, j) => ascending(f[i], f[j]));
406+ }
407+ return permute(values, index);
408+ }
409+ return values.sort(f);
410+ }
411+
412+ function groupSort(values, reduce, key) {
413+ return (reduce.length === 1
414+ ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))
415+ : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))
416+ .map(([key]) => key);
417+ }
418+
323419var array = Array.prototype;
324420
325421var slice = array.slice;
@@ -711,10 +807,6 @@ function pair(a, b) {
711807 return [a, b];
712808}
713809
714- function permute(source, keys) {
715- return Array.from(keys, key => source[key]);
716- }
717-
718810function sequence(start, stop, step) {
719811 start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
720812
@@ -935,16 +1027,6 @@ function reverse(values) {
9351027 return Array.from(values).reverse();
9361028}
9371029
938- function sort(values, f = ascending) {
939- if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
940- values = Array.from(values);
941- if (f.length === 1) {
942- f = values.map(f);
943- return permute(values, values.map((d, i) => i).sort((i, j) => ascending(f[i], f[j])));
944- }
945- return values.sort(f);
946- }
947-
9481030function difference(values, ...others) {
9491031 values = new Set(values);
9501032 for (const other of others) {
@@ -19027,6 +19109,8 @@ function zoom() {
1902719109exports.Adder = Adder;
1902819110exports.Delaunay = Delaunay;
1902919111exports.FormatSpecifier = FormatSpecifier;
19112+ exports.InternMap = InternMap;
19113+ exports.InternSet = InternSet;
1903019114exports.Voronoi = Voronoi;
1903119115exports.active = active;
1903219116exports.arc = arc;
@@ -19204,6 +19288,7 @@ exports.gray = gray;
1920419288exports.greatest = greatest;
1920519289exports.greatestIndex = greatestIndex;
1920619290exports.group = group;
19291+ exports.groupSort = groupSort;
1920719292exports.groups = groups;
1920819293exports.hcl = hcl;
1920919294exports.hierarchy = hierarchy;
0 commit comments