@middy/util 5.0.0 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +4 -4
  2. package/type-utils.d.ts +71 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@middy/util",
3
- "version": "5.0.0",
3
+ "version": "5.0.2",
4
4
  "description": "🛵 The stylish Node.js middleware engine for AWS Lambda (util package)",
5
5
  "type": "module",
6
6
  "engines": {
@@ -23,7 +23,7 @@
23
23
  "files": [
24
24
  "index.js",
25
25
  "index.d.ts",
26
- "codes.js"
26
+ "type-utils.d.ts"
27
27
  ],
28
28
  "scripts": {
29
29
  "test": "npm run test:unit",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "devDependencies": {
57
57
  "@aws-sdk/client-ssm": "^3.0.0",
58
- "@middy/core": "5.0.0",
58
+ "@middy/core": "5.0.2",
59
59
  "@types/aws-lambda": "^8.10.76",
60
60
  "@types/node": "^20.0.0",
61
61
  "aws-xray-sdk": "^3.3.3"
@@ -65,5 +65,5 @@
65
65
  "type": "github",
66
66
  "url": "https://github.com/sponsors/willfarrell"
67
67
  },
68
- "gitHead": "3e7e1c9b5ebb7e9448473a11ab4fb69ef0cc46a1"
68
+ "gitHead": "6d17e155237022f2a0abd095ac7cd99ebfc7fc71"
69
69
  }
@@ -0,0 +1,71 @@
1
+ type Digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
2
+ type LetterLower = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i'
3
+ | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't'
4
+ | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'
5
+ type LetterUpper = Uppercase<LetterLower>
6
+ type AlphaNumeric = Digit | LetterLower | LetterUpper
7
+
8
+ type SanitizeKeyPrefixLeadingNumber<T> =
9
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
+ T extends `${infer _ extends Digit}${any}`
11
+ ? `_${T}`
12
+ : T
13
+
14
+ type SanitizeKeyRemoveDisallowedChar<T> =
15
+ T extends `${infer First}${infer Rest}`
16
+ ? First extends AlphaNumeric
17
+ ? `${First}${SanitizeKeyRemoveDisallowedChar<Rest>}`
18
+ : `_${SanitizeKeyRemoveDisallowedChar<Rest>}`
19
+ : T extends ''
20
+ ? T
21
+ : never
22
+
23
+ type RemoveAllLeadingUnderscore<T> =
24
+ T extends `_${infer Rest}`
25
+ ? RemoveAllLeadingUnderscore<Rest>
26
+ : T extends string
27
+ ? T
28
+ : never
29
+
30
+ type RemoveRepeatedUnderscore<T> =
31
+ T extends `${infer First}_${infer Rest}`
32
+ ? `${First}_${RemoveRepeatedUnderscore<RemoveAllLeadingUnderscore<Rest>>}`
33
+ : T extends string
34
+ ? T
35
+ : never
36
+
37
+ export type SanitizeKey<T> =
38
+ RemoveRepeatedUnderscore<
39
+ SanitizeKeyRemoveDisallowedChar<
40
+ SanitizeKeyPrefixLeadingNumber<T>
41
+ >
42
+ >
43
+
44
+ export type SanitizeKeys<T extends Record<string, unknown>> = {
45
+ [P in keyof T as SanitizeKey<P>]: T[P]
46
+ }
47
+
48
+ // recursion limit hack from https://www.angularfix.com/2022/01/why-am-i-getting-instantiation-is.html
49
+ type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
50
+ export type DeepAwaited<T, RecursionDepth extends Prev[number] = 4> =
51
+ [RecursionDepth] extends [never]
52
+ ? unknown // stop evaluating recursively rather than failing with never
53
+ : T extends Promise<infer R>
54
+ ? Awaited<R>
55
+ : T extends Record<any, any>
56
+ ? {
57
+ [P in keyof T]:
58
+ T[P] extends Promise<infer R>
59
+ ? Awaited<R> // if it's a Promise resolve
60
+ : DeepAwaited<T[P], Prev[RecursionDepth]>
61
+ }
62
+ : T
63
+
64
+ export type Choose<
65
+ T extends Record<string | number, any>,
66
+ K extends string
67
+ > = K extends `${infer U}.${infer Rest}` ? Choose<T[U], Rest> : T[K]
68
+
69
+ export type IsUnknown<T> = unknown extends T ? true : false
70
+
71
+ export type ArrayValues<T> = T extends Array<infer U> ? U : never