UNPKG

@rickosborne/rebound

Version:

Rick Osborne's utilities for working with bounded numbers

46 lines 4.92 kB
import type { NumberRange } from "./number-range.js"; import type { Rebound } from "./rebound.js"; import type { BoundedNumber, BoundsConfig, IntegerSet, LowerExclusive, LowerInclusive, LowerInEx, LowerInExFrom, NegInfinity, NumberSet, NumberSetFrom, PosInfinity, RealSet, UpperExclusive, UpperInclusive, UpperInEx, UpperInExFrom } from "./spec.js"; type IsCompleteConfig<LowerInc extends LowerInEx, Lower extends number, Int extends NumberSet, Upper extends number, UpperInc extends UpperInEx> = number extends Lower ? false : number extends Upper ? false : NumberSet extends Int ? false : LowerInEx extends LowerInc ? false : UpperInEx extends UpperInc ? false : true; export type ReboundConfigBuilder<LowerInc extends LowerInEx, Lower extends number, Int extends NumberSet, Upper extends number, UpperInc extends UpperInEx> = { readonly config: BoundsConfig<LowerInc, Lower, Int, Upper, UpperInc>; } & IsCompleteConfig<LowerInc, Lower, Int, Upper, UpperInc> extends true ? { build(): Rebound<BoundedNumber<BoundsConfig<LowerInc, Lower, Int, Upper, UpperInc>>>; } : ((number extends Lower ? { fromExclusive<L extends number>(value: L): ReboundConfigBuilder<LowerExclusive, L, Int, Upper, UpperInc>; fromInclusive<L extends number>(value: L): ReboundConfigBuilder<LowerInclusive, L, Int, Upper, UpperInc>; fromNegInfinity(): ReboundConfigBuilder<LowerInExFrom<true>, NegInfinity, Int, Upper, UpperInc>; fromValue<L extends number, LI extends boolean>(value: L, inclusive: LI): ReboundConfigBuilder<LowerInExFrom<LI>, L, Int, Upper, UpperInc>; } : object) & (NumberSet extends Int ? { intOnly<IR extends boolean>(int: IR): ReboundConfigBuilder<LowerInc, Lower, NumberSetFrom<IR>, Upper, UpperInc>; integers(): ReboundConfigBuilder<LowerInc, Lower, IntegerSet, Upper, UpperInc>; reals(): ReboundConfigBuilder<LowerInc, Lower, RealSet, Upper, UpperInc>; } : object) & (number extends Upper ? { toExclusive<U extends number>(value: U): ReboundConfigBuilder<LowerInc, Lower, Int, U, UpperExclusive>; toInclusive<U extends number>(value: U): ReboundConfigBuilder<LowerInc, Lower, Int, U, UpperInclusive>; toPosInfinity(): ReboundConfigBuilder<LowerInc, Lower, Int, PosInfinity, UpperInExFrom<true>>; toValue<U extends number, UI extends boolean>(value: U, inclusive: UI): ReboundConfigBuilder<LowerInc, Lower, Int, U, UpperInExFrom<UI>>; } : object)); export declare function checkMissing<Lower extends number, LowerInc extends LowerInEx, Int extends NumberSet, UpperInc extends UpperInEx, Upper extends number>(config: Partial<BoundsConfig<LowerInEx, number, NumberSet, number, UpperInEx>>): asserts config is BoundsConfig<LowerInc, Lower, Int, Upper, UpperInc>; export declare class ReboundBuilder<LowerInc extends LowerInEx, Lower extends number, Int extends NumberSet, Upper extends number, UpperInc extends UpperInEx> { private readonly config; private readonly toRebound; constructor(config: BoundsConfig<LowerInc, Lower, Int, Upper, UpperInc>, toRebound: <Config extends BoundsConfig<LowerInc, Lower, Int, Upper, UpperInc>>(config: Config, range: NumberRange) => Rebound<BoundedNumber<Config>>); build(): Rebound<BoundedNumber<typeof this.config>>; fromExclusive<L extends number>(value: L): ReboundConfigBuilder<LowerExclusive, L, Int, Upper, UpperInc>; fromInclusive<L extends number>(value: L): ReboundConfigBuilder<LowerInclusive, L, Int, Upper, UpperInc>; fromNegInfinity(): ReboundConfigBuilder<LowerInExFrom<true>, NegInfinity, Int, Upper, UpperInc>; fromValue<L extends number, LI extends boolean>(lower: L, inclusive: LI): ReboundConfigBuilder<LowerInExFrom<LI>, L, Int, Upper, UpperInc>; intOnly<IR extends boolean>(intOnly: IR): ReboundConfigBuilder<LowerInc, Lower, NumberSetFrom<IR>, Upper, UpperInc>; integers(): ReboundConfigBuilder<LowerInc, Lower, IntegerSet, Upper, UpperInc>; reals(): ReboundConfigBuilder<LowerInc, Lower, RealSet, Upper, UpperInc>; protected setIntReal<IR extends NumberSet>(int: IR): asserts this is ReboundConfigBuilder<LowerInc, Lower, IR, Upper, UpperInc>; protected setLower<L extends number, LI extends LowerInEx>(lower: L, lowerInc: LI): asserts this is ReboundConfigBuilder<LI, L, Int, Upper, UpperInc>; protected setUpper<U extends number, UI extends UpperInEx>(upper: U, upperInc: UI): asserts this is ReboundConfigBuilder<LowerInc, Lower, Int, U, UI>; toExclusive<U extends number>(value: U): ReboundConfigBuilder<LowerInc, Lower, Int, U, UpperExclusive>; toInclusive<U extends number>(value: U): ReboundConfigBuilder<LowerInc, Lower, Int, U, UpperInclusive>; toPosInfinity(): ReboundConfigBuilder<LowerInc, Lower, Int, PosInfinity, UpperInExFrom<true>>; toValue<U extends number, UI extends boolean>(value: U, inclusive: UI): ReboundConfigBuilder<LowerInc, Lower, Int, U, UpperInExFrom<UI>>; } export {}; //# sourceMappingURL=rebound-builder.d.ts.map