UNPKG

@rimbu/common

Version:

Common types and objects used in many other Rimbu packages

43 lines (42 loc) 1.8 kB
import type { Range } from './internal.cjs'; /** * A flexible range specification for numeric indices. * If a start or end is defined, a tuple can be used where the second item is a boolean * indicating whether that end is inclusive or exclusive.<br/> * An IndexRange can have one of the following forms:<br/> * <br/> * - { amount: number }<br/> * - { start: number }<br/> * - { start: number, amount: number }<br/> * - { start: number, end: number }<br/> * - { start: number, end: [number, boolean] }<br/> * - { start: [number, boolean] }<br/> * - { start: [number, boolean], amount: number }<br/> * - { start: [number, boolean], end: number }<br/> * - { start: [number, boolean], end: [number, boolean] }<br/> * - { end: number }<br/> * - { end: [number, boolean] }<br/> */ export type IndexRange = { amount: number; start?: number | [number, boolean]; end?: undefined; } | Range<number>; export declare namespace IndexRange { /** * Returns, given the `range` `IndexRange`, a normalized tuple containing the * start index, and optionally an end index. * @param range - the `IndexRange` to use */ function getIndexRangeIndices(range: IndexRange): [number, number | undefined]; /** * Returns, given the `range` `IndexRange`, and a target maximum `length`, the actual index range. * This can be one of three options: * - 'empty': there are no elements within the range * - 'all': all elements are within the range * - [start: number, end: number]: an inclusive range of element indices within the given range * @param range - the `IndexRange` to use * @param length - the target maximum length */ function getIndicesFor(range: IndexRange, length: number): [number, number] | 'empty' | 'all'; }