import { AsNumber, Reverse } from "../../string"; import { Unreachable } from "../../type"; import { StripLeadingZeros } from "../string"; import { ValidateNonnegInt, ValidateInt } from "./_validate"; import { _DecPos } from "."; type AdditionDigitMap = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ]; /** * "increments" the string produced from reversing a stringified nonnegative integer. * e.g. `__Inc<"9"> = "01"` since `"9"` represents `9` and `"01"` represents `10` */ type __Inc = S extends '9' ? '01' : S extends `${infer D extends number}${infer T}` ? D extends 9 ? `0${__Inc}` : `${AdditionDigitMap[D]}${T}` : Unreachable; /** * increments nonnegative integer `N` * * @warning you probably want to use `IncNonneg` instead. this type does not enforce type constraints past `number`. * * @since 0.0.2 */ export type _IncNonneg = AsNumber>>>>; /** * increments integer `N` * * @warning you probably want to use `Inc` instead. this type does not enforce type constraints past `number`. * * @since 0.0.2 */ export type _Inc = `${N}` extends (infer S extends string) ? S extends '-1' ? 0 : S extends `-${infer Abs extends number}` ? AsNumber<`-${_DecPos}`> : _IncNonneg : Unreachable; /** * increments nonnegative integer `N` * * validates that `N` is in fact a nonnegative integer * * @since 0.0.2 */ export type IncNonneg> = ValidateNonnegInt extends number ? N extends (infer N extends number) ? _IncNonneg : Unreachable : never; /** * increments integer `N` * * validates that `N` is in fact an integer * * @since 0.0.2 */ export type Inc> = ValidateInt extends number ? N extends (infer N extends number) ? _Inc : Unreachable : never; export {}; //# sourceMappingURL=inc.d.ts.map