( values: readonly number[], input: NumericDomainInput = "auto" )
| 43 | }; |
| 44 | |
| 45 | export const resolveNumericDomain = ( |
| 46 | values: readonly number[], |
| 47 | input: NumericDomainInput = "auto" |
| 48 | ): [number, number] => { |
| 49 | const finite = finiteValues(values); |
| 50 | const dataMin = finite.length > 0 ? Math.min(...finite) : 0; |
| 51 | const dataMax = finite.length > 0 ? Math.max(...finite) : 0; |
| 52 | |
| 53 | if (input === "auto") { |
| 54 | return expandDegenerateDomain([dataMin, dataMax]); |
| 55 | } |
| 56 | |
| 57 | if (Array.isArray(input)) { |
| 58 | return expandDegenerateDomain([ |
| 59 | resolveNumericDomainValue(input[0], dataMin, dataMax, dataMin), |
| 60 | resolveNumericDomainValue(input[1], dataMin, dataMax, dataMax) |
| 61 | ]); |
| 62 | } |
| 63 | |
| 64 | let min = resolveNumericDomainValue(input.min, dataMin, dataMax, dataMin); |
| 65 | let max = resolveNumericDomainValue(input.max, dataMin, dataMax, dataMax); |
| 66 | |
| 67 | if (input.includeZero) { |
| 68 | min = Math.min(min, 0); |
| 69 | max = Math.max(max, 0); |
| 70 | } |
| 71 | |
| 72 | const domain = expandDegenerateDomain([min, max]); |
| 73 | return input.nice ? niceNumericDomain(domain) : domain; |
| 74 | }; |
| 75 | |
| 76 | const resolveTimeInput = ( |
| 77 | value: TimeDomainValue | undefined, |
no test coverage detected