@@ -4,7 +4,7 @@ import {ascendingDefined} from "../defined.js";
4
4
import { isNoneish , map } from "../options.js" ;
5
5
import { maybeInterval } from "../transforms/interval.js" ;
6
6
import { maybeSymbol } from "../symbols.js" ;
7
- import { registry , color , symbol } from "./index.js" ;
7
+ import { registry , color , position , symbol } from "./index.js" ;
8
8
import { maybeBooleanRange , ordinalScheme , quantitativeScheme } from "./schemes.js" ;
9
9
10
10
// This denotes an implicitly ordinal color scale: the scale type was not set,
@@ -13,7 +13,7 @@ import {maybeBooleanRange, ordinalScheme, quantitativeScheme} from "./schemes.js
13
13
// of this by setting the type explicitly.
14
14
export const ordinalImplicit = Symbol ( "ordinal" ) ;
15
15
16
- export function ScaleO ( scale , channels , {
16
+ function ScaleO ( key , scale , channels , {
17
17
type,
18
18
interval,
19
19
domain,
@@ -22,7 +22,7 @@ export function ScaleO(scale, channels, {
22
22
hint
23
23
} ) {
24
24
interval = maybeInterval ( interval ) ;
25
- if ( domain === undefined ) domain = inferDomain ( channels , interval ) ;
25
+ if ( domain === undefined ) domain = inferDomain ( channels , interval , key ) ;
26
26
if ( type === "categorical" || type === ordinalImplicit ) type = "ordinal" ; // shorthand for color schemes
27
27
if ( reverse ) domain = reverseof ( domain ) ;
28
28
scale . domain ( domain ) ;
@@ -44,7 +44,7 @@ export function ScaleOrdinal(key, channels, {
44
44
...options
45
45
} ) {
46
46
interval = maybeInterval ( interval ) ;
47
- if ( domain === undefined ) domain = inferDomain ( channels , interval ) ;
47
+ if ( domain === undefined ) domain = inferDomain ( channels , interval , key ) ;
48
48
let hint ;
49
49
if ( registry . get ( key ) === symbol ) {
50
50
hint = inferSymbolHint ( channels ) ;
@@ -68,7 +68,7 @@ export function ScaleOrdinal(key, channels, {
68
68
}
69
69
}
70
70
if ( unknown === scaleImplicit ) throw new Error ( "implicit unknown is not supported" ) ;
71
- return ScaleO ( scaleOrdinal ( ) . unknown ( unknown ) , channels , { ...options , type, domain, range, hint} ) ;
71
+ return ScaleO ( key , scaleOrdinal ( ) . unknown ( unknown ) , channels , { ...options , type, domain, range, hint} ) ;
72
72
}
73
73
74
74
export function ScalePoint ( key , channels , {
@@ -81,7 +81,8 @@ export function ScalePoint(key, channels, {
81
81
. align ( align )
82
82
. padding ( padding ) ,
83
83
channels ,
84
- options
84
+ options ,
85
+ key
85
86
) ;
86
87
}
87
88
@@ -98,19 +99,20 @@ export function ScaleBand(key, channels, {
98
99
. paddingInner ( paddingInner )
99
100
. paddingOuter ( paddingOuter ) ,
100
101
channels ,
101
- options
102
+ options ,
103
+ key
102
104
) ;
103
105
}
104
106
105
- function maybeRound ( scale , channels , options ) {
107
+ function maybeRound ( scale , channels , options , key ) {
106
108
let { round} = options ;
107
109
if ( round !== undefined ) scale . round ( round = ! ! round ) ;
108
- scale = ScaleO ( scale , channels , options ) ;
110
+ scale = ScaleO ( key , scale , channels , options ) ;
109
111
scale . round = round ; // preserve for autoScaleRound
110
112
return scale ;
111
113
}
112
114
113
- function inferDomain ( channels , interval ) {
115
+ function inferDomain ( channels , interval , key ) {
114
116
const values = new InternSet ( ) ;
115
117
for ( const { value, domain} of channels ) {
116
118
if ( domain !== undefined ) return domain ( ) ; // see channelDomain
@@ -121,6 +123,7 @@ function inferDomain(channels, interval) {
121
123
const [ min , max ] = extent ( values ) . map ( interval . floor , interval ) ;
122
124
return interval . range ( min , interval . offset ( max ) ) ;
123
125
}
126
+ if ( values . size > 10e3 && registry . get ( key ) === position ) throw new Error ( "implicit ordinal position domain has more than 10,000 values" ) ;
124
127
return sort ( values , ascendingDefined ) ;
125
128
}
126
129
0 commit comments