// Copyright 2017 - 2026 will Farrell, Luciano Mammino, and Middy contributors. // SPDX-License-Identifier: MIT type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"; type LetterLower = | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"; type LetterUpper = Uppercase; type AlphaNumeric = Digit | LetterLower | LetterUpper; type SanitizeKeyPrefixLeadingNumber = T extends `${infer _ extends Digit}${any}` ? `_${T}` : T; type SanitizeKeyRemoveDisallowedChar = T extends `${infer First}${infer Rest}` ? First extends AlphaNumeric ? `${First}${SanitizeKeyRemoveDisallowedChar}` : `_${SanitizeKeyRemoveDisallowedChar}` : T extends "" ? T : never; type RemoveAllLeadingUnderscore = T extends `_${infer Rest}` ? RemoveAllLeadingUnderscore : T extends string ? T : never; type RemoveRepeatedUnderscore = T extends `${infer First}_${infer Rest}` ? `${First}_${RemoveRepeatedUnderscore>}` : T extends string ? T : never; export type SanitizeKey = RemoveRepeatedUnderscore< SanitizeKeyRemoveDisallowedChar> >; export type SanitizeKeys> = { [P in keyof T as SanitizeKey

]: T[P]; }; // recursion limit hack from https://www.angularfix.com/2022/01/why-am-i-getting-instantiation-is.html type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; export type DeepAwaited = [ RecursionDepth, ] extends [never] ? unknown // stop evaluating recursively rather than failing with never : T extends Promise ? Awaited : T extends Record ? { [P in keyof T]: T[P] extends Promise ? Awaited // if it's a Promise resolve : DeepAwaited; } : T; export type Choose< T extends Record, K extends string, > = K extends `${infer U}.${infer Rest}` ? Choose : T[K]; export type IsUnknown = unknown extends T ? true : false; export type ArrayValues = T extends Array ? U : never;