| 226 | valueExtractor: (value: T) => V, |
| 227 | ): AggregateFunction<T, V | undefined, V | undefined> |
| 228 | export function min<T, V extends CanMinMax>( |
| 229 | valueExtractor?: (value: T) => V, |
| 230 | ): AggregateFunction<T, V | undefined, V | undefined> { |
| 231 | const extractor = valueExtractor ?? ((v: T) => v as unknown as V) |
| 232 | return { |
| 233 | preMap: (data: T) => extractor(data), |
| 234 | reduce: (values) => { |
| 235 | let minValue: V | undefined |
| 236 | for (const [value, _multiplicity] of values) { |
| 237 | if (!minValue || (value && value < minValue)) { |
| 238 | minValue = value |
| 239 | } |
| 240 | } |
| 241 | return minValue |
| 242 | }, |
| 243 | } |
| 244 | } |
| 245 | |
| 246 | /** |
| 247 | * Creates a max aggregate function that computes the maximum value in a group |