import { Multiply } from "./node_modules/.pnpm/ts-arithmetic@0.1.1/node_modules/ts-arithmetic/dist/ts-arithmetic.mjs"; import { Trim } from "./node_modules/.pnpm/type-fest@5.6.0/node_modules/type-fest/source/trim.mjs"; //#region src/ms.d.ts type NonEmptyString = '' extends T ? never : T; type IsFirstCharDigit = T extends `${number}` ? T extends ' ' ? false : true : false; type OrPlural = T | `${T}s`; type PostfixesToMilliseconds = Record<'ms' | OrPlural<'msec' | 'millisecond'>, 1> & Record<'s' | OrPlural<'sec' | 'second'>, 1000> & Record<'m' | OrPlural<'min' | 'minute'>, 60_000> & Record<'h' | OrPlural<'hr' | 'hour'>, 3_600_000> & Record<'d' | OrPlural<'day'>, 86_400_000> & Record<'w' | OrPlural<'week'>, 604_800_000> & Record<'y' | OrPlural<'yr' | 'year'>, 31_557_600_000>; type AllUnitsLowercase = keyof PostfixesToMilliseconds; type AllUnits = AllUnitsLowercase | Uppercase | Lowercase; type ParseFraction = T extends `${infer First}${infer Rest}` ? First extends `${infer Digit}` ? IsFirstCharDigit extends true ? ParseFraction : [Parsed extends '' ? never : Negative extends true ? `-${Parsed}` : Parsed, `${First}${Rest}`] : [Parsed extends '' ? never : Negative extends true ? `-${Parsed}` : Parsed, `${First}${Rest}`] : [Parsed extends '' ? never : Negative extends true ? `-${Parsed}` : Parsed, '']; type ParseFloat = T extends `${infer First}${infer Rest}` ? First extends ' ' ? ParseFloat : First extends '-' ? Negative extends true ? never : ParseFloat : First extends '.' ? ParseFraction : First extends `${infer Digit}` ? IsFirstCharDigit extends true ? ParseFloat : [Parsed extends '' ? never : Negative extends true ? `-${Parsed}` : Parsed, T] : [Parsed extends '' ? never : Negative extends true ? `-${Parsed}` : Parsed, T] : [Parsed extends '' ? never : Negative extends true ? `-${Parsed}` : Parsed, '']; type ParseInt = T extends '-0' ? 0 : T extends `-0${NonEmptyString}` ? ParseInt<`-${N}`> : T extends `0${NonEmptyString}` ? ParseInt : T extends ` ${NonEmptyString}` ? ParseInt : T extends `${NonEmptyString} ` ? ParseInt : T extends `${infer N extends number}` ? N : never; type MsInternal = Unit extends AllUnits ? Multiply, PostfixesToMilliseconds[Lowercase]> : never; /** * Type which receives a duration string in [`ms` format](https://npmx.dev/ms) and * evaluates to the duration in milliseconds. * * Handles integer and floating point numbers, leading and trailing whitespaces, * negative numbers. * @example Basic usage — declare the type after a variable name: * const duration: Ms<'42s'> = 42_000; * @example Use `satisfies` (not `as`!) to assert a type in expressions: * const config = { * duration1: 2_520_000 satisfies Ms<'42m'>, * duration2: 271_296_000 satisfies Ms<'3.14d'>, * }; * @example Supported units (case-insensitive): * type A = Ms<'1ms'>; // 1 (milliseconds) * type B = Ms<'1s'>; // 1_000 (seconds) * type C = Ms<'1m'>; // 60_000 (minutes) * type D = Ms<'1h'>; // 3_600_000 (hours) * type E = Ms<'1d'>; // 86_400_000 (days) * type F = Ms<'1w'>; // 604_800_000 (weeks) * type G = Ms<'1y'>; // 31_557_600_000 (years, 365.25 days) * @example Unit aliases are supported: * type A = Ms<'1millisecond'>; // 1 * type B = Ms<'1 seconds'>; // 1_000 * type C = Ms<'1 mins'>; // 60_000 * type D = Ms<'1 hour'>; // 3_600_000 * @example Negative numbers, floating-point numbers, whitespace trimming, leading zeroes: * type A = Ms<'-42s'>; // -42_000 * type B = Ms<'3.14d'>; // 271_296_000 * type C = Ms<' 010ms '>; // 10 * @example Invalid inputs resolve to `never`: * type A = Ms<'s'>; // never — missing number * type B = Ms<'--42ms'>; // never — double minus * type C = Ms<'42mss'>; // never — unknown unit */ type Ms = MsInternal>>; //#endregion export { AllUnits, Ms };