@rimbu/common
Version:
Common types and objects used in many other Rimbu packages
43 lines (42 loc) • 1.8 kB
text/typescript
import type { Range } from './internal.mjs';
/**
* 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';
}