typia 9.7.2 → 10.0.0-dev.20251107

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 (116) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +153 -153
  3. package/lib/factories/ProtobufFactory.js +1 -1
  4. package/lib/factories/ProtobufFactory.mjs +1 -1
  5. package/lib/programmers/internal/json_schema_station.d.mts +2 -2
  6. package/lib/programmers/internal/json_schema_station.d.ts +2 -2
  7. package/lib/programmers/llm/LlmApplicationProgrammer.js +5 -1
  8. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  9. package/lib/programmers/llm/LlmApplicationProgrammer.mjs +5 -1
  10. package/lib/programmers/llm/LlmSchemaProgrammer.js +1 -4
  11. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  12. package/lib/programmers/llm/LlmSchemaProgrammer.mjs +1 -35
  13. package/package.json +121 -121
  14. package/src/AssertionGuard.ts +41 -41
  15. package/src/CamelCase.ts +75 -75
  16. package/src/IRandomGenerator.ts +337 -337
  17. package/src/IReadableURLSearchParams.ts +9 -9
  18. package/src/PascalCase.ts +71 -71
  19. package/src/Primitive.ts +90 -90
  20. package/src/Resolved.ts +72 -72
  21. package/src/SnakeCase.ts +127 -127
  22. package/src/TypeGuardError.ts +216 -216
  23. package/src/factories/MetadataCollection.ts +270 -270
  24. package/src/factories/MetadataCommentTagFactory.ts +632 -632
  25. package/src/factories/MetadataFactory.ts +402 -402
  26. package/src/factories/ProtobufFactory.ts +873 -873
  27. package/src/functional.ts +705 -705
  28. package/src/http.ts +972 -972
  29. package/src/internal/_ProtobufReader.ts +188 -188
  30. package/src/internal/_ProtobufSizer.ts +137 -137
  31. package/src/internal/_ProtobufWriter.ts +135 -135
  32. package/src/internal/_jsonStringifyString.ts +42 -42
  33. package/src/json.ts +643 -643
  34. package/src/llm.ts +615 -615
  35. package/src/misc.ts +594 -594
  36. package/src/module.ts +889 -889
  37. package/src/notations.ts +751 -751
  38. package/src/programmers/FeatureProgrammer.ts +605 -605
  39. package/src/programmers/ImportProgrammer.ts +179 -179
  40. package/src/programmers/RandomProgrammer.ts +1195 -1195
  41. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  42. package/src/programmers/internal/check_array_length.ts +43 -43
  43. package/src/programmers/internal/check_bigint.ts +46 -46
  44. package/src/programmers/internal/check_dynamic_key.ts +197 -197
  45. package/src/programmers/internal/check_dynamic_properties.ts +231 -231
  46. package/src/programmers/internal/check_everything.ts +21 -21
  47. package/src/programmers/internal/check_native.ts +23 -23
  48. package/src/programmers/internal/check_number.ts +108 -108
  49. package/src/programmers/internal/check_object.ts +72 -72
  50. package/src/programmers/internal/check_string.ts +46 -46
  51. package/src/programmers/internal/check_template.ts +46 -46
  52. package/src/programmers/internal/check_union_array_like.ts +331 -331
  53. package/src/programmers/internal/decode_union_object.ts +110 -110
  54. package/src/programmers/internal/feature_object_entries.ts +59 -59
  55. package/src/programmers/internal/json_schema_escaped.ts +78 -78
  56. package/src/programmers/internal/json_schema_object.ts +150 -150
  57. package/src/programmers/internal/json_schema_station.ts +2 -2
  58. package/src/programmers/internal/metadata_to_pattern.ts +40 -40
  59. package/src/programmers/internal/postfix_of_tuple.ts +3 -3
  60. package/src/programmers/internal/prune_object_properties.ts +69 -69
  61. package/src/programmers/internal/stringify_dynamic_properties.ts +158 -158
  62. package/src/programmers/internal/stringify_native.ts +5 -5
  63. package/src/programmers/internal/stringify_regular_properties.ts +77 -77
  64. package/src/programmers/internal/template_to_pattern.ts +21 -21
  65. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +21 -21
  66. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  67. package/src/programmers/llm/LlmApplicationProgrammer.ts +10 -1
  68. package/src/programmers/llm/LlmSchemaProgrammer.ts +2 -7
  69. package/src/protobuf.ts +820 -820
  70. package/src/reflect.ts +46 -46
  71. package/src/schemas/json/IJsonApplication.ts +77 -77
  72. package/src/schemas/json/IJsonSchemaCollection.ts +212 -212
  73. package/src/schemas/json/IJsonSchemaUnit.ts +263 -263
  74. package/src/schemas/metadata/IMetadataTypeTag.ts +14 -14
  75. package/src/schemas/metadata/Metadata.ts +669 -669
  76. package/src/schemas/metadata/MetadataAliasType.ts +57 -57
  77. package/src/schemas/metadata/MetadataApplication.ts +40 -40
  78. package/src/schemas/metadata/MetadataArray.ts +47 -47
  79. package/src/schemas/metadata/MetadataArrayType.ts +51 -51
  80. package/src/schemas/metadata/MetadataAtomic.ts +85 -85
  81. package/src/schemas/metadata/MetadataEscaped.ts +45 -45
  82. package/src/schemas/metadata/MetadataFunction.ts +45 -45
  83. package/src/schemas/metadata/MetadataObject.ts +46 -46
  84. package/src/schemas/metadata/MetadataObjectType.ts +137 -137
  85. package/src/schemas/metadata/MetadataParameter.ts +52 -52
  86. package/src/schemas/metadata/MetadataProperty.ts +53 -53
  87. package/src/schemas/metadata/MetadataTemplate.ts +78 -78
  88. package/src/schemas/metadata/MetadataTuple.ts +28 -28
  89. package/src/schemas/metadata/MetadataTupleType.ts +61 -61
  90. package/src/tags/Constant.ts +47 -47
  91. package/src/tags/ContentMediaType.ts +27 -27
  92. package/src/tags/Default.ts +52 -52
  93. package/src/tags/Example.ts +56 -56
  94. package/src/tags/Examples.ts +56 -56
  95. package/src/tags/ExclusiveMaximum.ts +44 -44
  96. package/src/tags/ExclusiveMinimum.ts +44 -44
  97. package/src/tags/Format.ts +78 -78
  98. package/src/tags/JsonSchemaPlugin.ts +36 -36
  99. package/src/tags/MaxItems.ts +31 -31
  100. package/src/tags/MaxLength.ts +25 -25
  101. package/src/tags/Maximum.ts +39 -39
  102. package/src/tags/MinItems.ts +31 -31
  103. package/src/tags/MinLength.ts +25 -25
  104. package/src/tags/Minimum.ts +39 -39
  105. package/src/tags/MultipleOf.ts +42 -42
  106. package/src/tags/Pattern.ts +49 -49
  107. package/src/tags/Sequence.ts +37 -37
  108. package/src/tags/TagBase.ts +102 -102
  109. package/src/tags/Type.ts +64 -64
  110. package/src/tags/UniqueItems.ts +34 -34
  111. package/src/tags/internal/FormatCheatSheet.ts +71 -71
  112. package/src/transformers/ITransformOptions.ts +70 -70
  113. package/src/transformers/ImportTransformer.ts +253 -253
  114. package/src/transformers/NoTransformConfigurationError.ts +16 -16
  115. package/src/transformers/features/llm/LlmApplicationTransformer.ts +224 -224
  116. package/src/typings/Equal.ts +18 -18
package/package.json CHANGED
@@ -1,122 +1,122 @@
1
- {
2
- "name": "typia",
3
- "version": "9.7.2",
4
- "description": "Superfast runtime validators with only one line",
5
- "main": "lib/index.js",
6
- "typings": "lib/index.d.ts",
7
- "module": "lib/index.mjs",
8
- "bin": {
9
- "typia": "./lib/executable/typia.js"
10
- },
11
- "tsp": {
12
- "tscOptions": {
13
- "parseAllJsDoc": true
14
- }
15
- },
16
- "scripts": {
17
- "test": "ts-node deploy --tag test",
18
- "test:template": "npm run --tag test --template",
19
- "-------------------------------------------------": "",
20
- "build": "rimraf lib && tsc && rollup -c",
21
- "dev": "rimraf lib && tsc --watch",
22
- "dev:errors": "tsc --project tsconfig.errors.json --watch",
23
- "eslint": "eslint",
24
- "eslint:fix": "eslint --fix",
25
- "prettier": "prettier src --check",
26
- "prettier:fix": "prettier src --write",
27
- "------------------------------------------------": "",
28
- "package:latest": "ts-node deploy --tag latest",
29
- "package:next": "ts-node deploy --tag next",
30
- "package:patch": "ts-node deploy --tag patch",
31
- "package:tgz": "ts-node deploy/tgz.ts"
32
- },
33
- "repository": {
34
- "type": "git",
35
- "url": "https://github.com/samchon/typia"
36
- },
37
- "author": "Jeongho Nam",
38
- "license": "MIT",
39
- "bugs": {
40
- "url": "https://github.com/samchon/typia/issues"
41
- },
42
- "homepage": "https://typia.io",
43
- "dependencies": {
44
- "@samchon/openapi": "^4.7.1",
45
- "@standard-schema/spec": "^1.0.0",
46
- "commander": "^10.0.0",
47
- "comment-json": "^4.2.3",
48
- "inquirer": "^8.2.5",
49
- "package-manager-detector": "^0.2.0",
50
- "randexp": "^0.5.3"
51
- },
52
- "peerDependencies": {
53
- "typescript": ">=4.8.0 <5.10.0"
54
- },
55
- "devDependencies": {
56
- "@rollup/plugin-commonjs": "^26.0.1",
57
- "@rollup/plugin-node-resolve": "^15.2.3",
58
- "@rollup/plugin-typescript": "^11.1.6",
59
- "@trivago/prettier-plugin-sort-imports": "^4.3.0",
60
- "@types/inquirer": "^8.2.5",
61
- "@types/node": "^18.15.12",
62
- "@types/ts-expose-internals": "npm:ts-expose-internals@5.6.3",
63
- "@typescript-eslint/eslint-plugin": "^8.1.0",
64
- "@typescript-eslint/parser": "^8.1.0",
65
- "chalk": "^4.0.0",
66
- "eslint-plugin-deprecation": "^3.0.0",
67
- "prettier": "^3.2.5",
68
- "prettier-plugin-jsdoc": "^1.3.3",
69
- "rimraf": "^5.0.5",
70
- "rollup": "^4.18.0",
71
- "rollup-plugin-auto-external": "^2.0.0",
72
- "rollup-plugin-node-externals": "^8.0.0",
73
- "suppress-warnings": "^1.0.2",
74
- "tinyglobby": "^0.2.12",
75
- "ts-node": "^10.9.2",
76
- "typescript": "~5.9.2"
77
- },
78
- "sideEffects": false,
79
- "files": [
80
- "LICENSE",
81
- "README.md",
82
- "package.json",
83
- "lib",
84
- "src"
85
- ],
86
- "keywords": [
87
- "fast",
88
- "json",
89
- "stringify",
90
- "typescript",
91
- "transform",
92
- "ajv",
93
- "io-ts",
94
- "zod",
95
- "schema",
96
- "json-schema",
97
- "generator",
98
- "assert",
99
- "clone",
100
- "is",
101
- "validate",
102
- "equal",
103
- "runtime",
104
- "type",
105
- "typebox",
106
- "checker",
107
- "validator",
108
- "safe",
109
- "parse",
110
- "prune",
111
- "random",
112
- "protobuf",
113
- "llm",
114
- "llm-function-calling",
115
- "structured-output",
116
- "openai",
117
- "chatgpt",
118
- "claude",
119
- "gemini",
120
- "llama"
121
- ]
1
+ {
2
+ "name": "typia",
3
+ "version": "10.0.0-dev.20251107",
4
+ "description": "Superfast runtime validators with only one line",
5
+ "main": "lib/index.js",
6
+ "typings": "lib/index.d.ts",
7
+ "module": "lib/index.mjs",
8
+ "bin": {
9
+ "typia": "./lib/executable/typia.js"
10
+ },
11
+ "tsp": {
12
+ "tscOptions": {
13
+ "parseAllJsDoc": true
14
+ }
15
+ },
16
+ "scripts": {
17
+ "test": "ts-node deploy --tag test",
18
+ "test:template": "npm run --tag test --template",
19
+ "-------------------------------------------------": "",
20
+ "build": "rimraf lib && tsc && rollup -c",
21
+ "dev": "rimraf lib && tsc --watch",
22
+ "dev:errors": "tsc --project tsconfig.errors.json --watch",
23
+ "eslint": "eslint",
24
+ "eslint:fix": "eslint --fix",
25
+ "prettier": "prettier src --check",
26
+ "prettier:fix": "prettier src --write",
27
+ "------------------------------------------------": "",
28
+ "package:latest": "ts-node deploy --tag latest",
29
+ "package:next": "ts-node deploy --tag next",
30
+ "package:patch": "ts-node deploy --tag patch",
31
+ "package:tgz": "ts-node deploy/tgz.ts"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/samchon/typia"
36
+ },
37
+ "author": "Jeongho Nam",
38
+ "license": "MIT",
39
+ "bugs": {
40
+ "url": "https://github.com/samchon/typia/issues"
41
+ },
42
+ "homepage": "https://typia.io",
43
+ "dependencies": {
44
+ "@samchon/openapi": "^5.0.0-dev.20251107",
45
+ "@standard-schema/spec": "^1.0.0",
46
+ "commander": "^10.0.0",
47
+ "comment-json": "^4.2.3",
48
+ "inquirer": "^8.2.5",
49
+ "package-manager-detector": "^0.2.0",
50
+ "randexp": "^0.5.3"
51
+ },
52
+ "peerDependencies": {
53
+ "typescript": ">=4.8.0 <5.10.0"
54
+ },
55
+ "devDependencies": {
56
+ "@rollup/plugin-commonjs": "^26.0.1",
57
+ "@rollup/plugin-node-resolve": "^15.2.3",
58
+ "@rollup/plugin-typescript": "^11.1.6",
59
+ "@trivago/prettier-plugin-sort-imports": "^4.3.0",
60
+ "@types/inquirer": "^8.2.5",
61
+ "@types/node": "^18.15.12",
62
+ "@types/ts-expose-internals": "npm:ts-expose-internals@5.6.3",
63
+ "@typescript-eslint/eslint-plugin": "^8.1.0",
64
+ "@typescript-eslint/parser": "^8.1.0",
65
+ "chalk": "^4.0.0",
66
+ "eslint-plugin-deprecation": "^3.0.0",
67
+ "prettier": "^3.2.5",
68
+ "prettier-plugin-jsdoc": "^1.3.3",
69
+ "rimraf": "^5.0.5",
70
+ "rollup": "^4.18.0",
71
+ "rollup-plugin-auto-external": "^2.0.0",
72
+ "rollup-plugin-node-externals": "^8.0.0",
73
+ "suppress-warnings": "^1.0.2",
74
+ "tinyglobby": "^0.2.12",
75
+ "ts-node": "^10.9.2",
76
+ "typescript": "~5.9.2"
77
+ },
78
+ "sideEffects": false,
79
+ "files": [
80
+ "LICENSE",
81
+ "README.md",
82
+ "package.json",
83
+ "lib",
84
+ "src"
85
+ ],
86
+ "keywords": [
87
+ "fast",
88
+ "json",
89
+ "stringify",
90
+ "typescript",
91
+ "transform",
92
+ "ajv",
93
+ "io-ts",
94
+ "zod",
95
+ "schema",
96
+ "json-schema",
97
+ "generator",
98
+ "assert",
99
+ "clone",
100
+ "is",
101
+ "validate",
102
+ "equal",
103
+ "runtime",
104
+ "type",
105
+ "typebox",
106
+ "checker",
107
+ "validator",
108
+ "safe",
109
+ "parse",
110
+ "prune",
111
+ "random",
112
+ "protobuf",
113
+ "llm",
114
+ "llm-function-calling",
115
+ "structured-output",
116
+ "openai",
117
+ "chatgpt",
118
+ "claude",
119
+ "gemini",
120
+ "llama"
121
+ ]
122
122
  }
@@ -1,41 +1,41 @@
1
- /**
2
- * Type definition for assertion guard functions in `typia`.
3
- *
4
- * An assertion guard is a function that asserts an input value's type at
5
- * runtime and performs a TypeScript type assertion if validation passes. Unlike
6
- * regular assertion functions that return the validated value, assertion guards
7
- * return nothing but automatically cast the input parameter to the expected
8
- * type `T`.
9
- *
10
- * This type is used by `typia.createAssertGuard<T>()` and
11
- * `typia.createAssertGuardEquals<T>()` to generate reusable assertion guard
12
- * functions.
13
- *
14
- * @author Jeongho Nam - https://github.com/samchon
15
- * @example
16
- * ```typescript
17
- * interface IMember {
18
- * name: string;
19
- * age: number;
20
- * }
21
- *
22
- * // Create reusable assertion guard
23
- * const assertMember: AssertionGuard<IMember> = typia.createAssertGuard<IMember>();
24
- *
25
- * // Usage - input will be automatically cast to IMember if validation passes
26
- * const unknownData: unknown = { name: "John", age: 25 };
27
- *
28
- * assertMember(unknownData);
29
- * // After this line, unknownData is automatically treated as IMember type
30
- * console.log(unknownData.name); // TypeScript knows this is safe
31
- * ```;
32
- *
33
- * @template T - The expected type to validate and assert against
34
- * @param input - The value to validate (type unknown)
35
- * @returns Void - Returns nothing, but asserts that input is type T
36
- * @throws {TypeGuardError} When the input value doesn't match the expected type
37
- * T
38
- * @see {@link https://github.com/samchon/typia#assertguard-functions} Typia assertion guards documentation
39
- * @see {@link TypeGuardError} Error thrown when assertion fails
40
- */
41
- export type AssertionGuard<T> = (input: unknown) => asserts input is T;
1
+ /**
2
+ * Type definition for assertion guard functions in `typia`.
3
+ *
4
+ * An assertion guard is a function that asserts an input value's type at
5
+ * runtime and performs a TypeScript type assertion if validation passes. Unlike
6
+ * regular assertion functions that return the validated value, assertion guards
7
+ * return nothing but automatically cast the input parameter to the expected
8
+ * type `T`.
9
+ *
10
+ * This type is used by `typia.createAssertGuard<T>()` and
11
+ * `typia.createAssertGuardEquals<T>()` to generate reusable assertion guard
12
+ * functions.
13
+ *
14
+ * @author Jeongho Nam - https://github.com/samchon
15
+ * @example
16
+ * ```typescript
17
+ * interface IMember {
18
+ * name: string;
19
+ * age: number;
20
+ * }
21
+ *
22
+ * // Create reusable assertion guard
23
+ * const assertMember: AssertionGuard<IMember> = typia.createAssertGuard<IMember>();
24
+ *
25
+ * // Usage - input will be automatically cast to IMember if validation passes
26
+ * const unknownData: unknown = { name: "John", age: 25 };
27
+ *
28
+ * assertMember(unknownData);
29
+ * // After this line, unknownData is automatically treated as IMember type
30
+ * console.log(unknownData.name); // TypeScript knows this is safe
31
+ * ```;
32
+ *
33
+ * @template T - The expected type to validate and assert against
34
+ * @param input - The value to validate (type unknown)
35
+ * @returns Void - Returns nothing, but asserts that input is type T
36
+ * @throws {TypeGuardError} When the input value doesn't match the expected type
37
+ * T
38
+ * @see {@link https://github.com/samchon/typia#assertguard-functions} Typia assertion guards documentation
39
+ * @see {@link TypeGuardError} Error thrown when assertion fails
40
+ */
41
+ export type AssertionGuard<T> = (input: unknown) => asserts input is T;
package/src/CamelCase.ts CHANGED
@@ -1,75 +1,75 @@
1
- import { Equal } from "./typings/Equal";
2
- import { IsTuple } from "./typings/IsTuple";
3
- import { NativeClass } from "./typings/NativeClass";
4
- import { ValueOf } from "./typings/ValueOf";
5
-
6
- /**
7
- * Camel case type.
8
- *
9
- * `CamelCase` type is a type that all keys of an object are camelized.
10
- *
11
- * It also erases every method property like {@link Resolved} type.
12
- *
13
- * @author Jeongho Nam - https://github.com/samchon
14
- * @template T Target type to be camelized
15
- */
16
- export type CamelCase<T> =
17
- Equal<T, CamelizeMain<T>> extends true ? T : CamelizeMain<T>;
18
-
19
- type CamelizeMain<T> = T extends [never]
20
- ? never // special trick for (jsonable | null) type
21
- : T extends { valueOf(): boolean | bigint | number | string }
22
- ? ValueOf<T>
23
- : T extends Function
24
- ? never
25
- : T extends object
26
- ? CamelizeObject<T>
27
- : T;
28
-
29
- type CamelizeObject<T extends object> =
30
- T extends Array<infer U>
31
- ? IsTuple<T> extends true
32
- ? CamelizeTuple<T>
33
- : CamelizeMain<U>[]
34
- : T extends Set<infer U>
35
- ? Set<CamelizeMain<U>>
36
- : T extends Map<infer K, infer V>
37
- ? Map<CamelizeMain<K>, CamelizeMain<V>>
38
- : T extends WeakSet<any> | WeakMap<any, any>
39
- ? never
40
- : T extends NativeClass
41
- ? T
42
- : {
43
- [Key in keyof T as CamelizeString<Key & string>]: CamelizeMain<
44
- T[Key]
45
- >;
46
- };
47
-
48
- type CamelizeTuple<T extends readonly any[]> = T extends []
49
- ? []
50
- : T extends [infer F]
51
- ? [CamelizeMain<F>]
52
- : T extends [infer F, ...infer Rest extends readonly any[]]
53
- ? [CamelizeMain<F>, ...CamelizeTuple<Rest>]
54
- : T extends [(infer F)?]
55
- ? [CamelizeMain<F>?]
56
- : T extends [(infer F)?, ...infer Rest extends readonly any[]]
57
- ? [CamelizeMain<F>?, ...CamelizeTuple<Rest>]
58
- : [];
59
-
60
- type CamelizeString<Key extends string> = Key extends `_${infer R}`
61
- ? `_${CamelizeString<R>}`
62
- : Key extends `${infer _F}_${infer _R}`
63
- ? CamelizeSnakeString<Key>
64
- : Key extends Uppercase<Key>
65
- ? Lowercase<Key>
66
- : CamelizePascalString<Key>;
67
- type CamelizePascalString<Key extends string> =
68
- Key extends `${infer F}${infer R}` ? `${Lowercase<F>}${R}` : Key;
69
- type CamelizeSnakeString<Key extends string> = Key extends `_${infer R}`
70
- ? CamelizeSnakeString<R>
71
- : Key extends `${infer F}_${infer M}${infer R}`
72
- ? M extends "_"
73
- ? CamelizeSnakeString<`${F}_${R}`>
74
- : `${Lowercase<F>}${Uppercase<M>}${CamelizeSnakeString<R>}`
75
- : Lowercase<Key>;
1
+ import { Equal } from "./typings/Equal";
2
+ import { IsTuple } from "./typings/IsTuple";
3
+ import { NativeClass } from "./typings/NativeClass";
4
+ import { ValueOf } from "./typings/ValueOf";
5
+
6
+ /**
7
+ * Camel case type.
8
+ *
9
+ * `CamelCase` type is a type that all keys of an object are camelized.
10
+ *
11
+ * It also erases every method property like {@link Resolved} type.
12
+ *
13
+ * @author Jeongho Nam - https://github.com/samchon
14
+ * @template T Target type to be camelized
15
+ */
16
+ export type CamelCase<T> =
17
+ Equal<T, CamelizeMain<T>> extends true ? T : CamelizeMain<T>;
18
+
19
+ type CamelizeMain<T> = T extends [never]
20
+ ? never // special trick for (jsonable | null) type
21
+ : T extends { valueOf(): boolean | bigint | number | string }
22
+ ? ValueOf<T>
23
+ : T extends Function
24
+ ? never
25
+ : T extends object
26
+ ? CamelizeObject<T>
27
+ : T;
28
+
29
+ type CamelizeObject<T extends object> =
30
+ T extends Array<infer U>
31
+ ? IsTuple<T> extends true
32
+ ? CamelizeTuple<T>
33
+ : CamelizeMain<U>[]
34
+ : T extends Set<infer U>
35
+ ? Set<CamelizeMain<U>>
36
+ : T extends Map<infer K, infer V>
37
+ ? Map<CamelizeMain<K>, CamelizeMain<V>>
38
+ : T extends WeakSet<any> | WeakMap<any, any>
39
+ ? never
40
+ : T extends NativeClass
41
+ ? T
42
+ : {
43
+ [Key in keyof T as CamelizeString<Key & string>]: CamelizeMain<
44
+ T[Key]
45
+ >;
46
+ };
47
+
48
+ type CamelizeTuple<T extends readonly any[]> = T extends []
49
+ ? []
50
+ : T extends [infer F]
51
+ ? [CamelizeMain<F>]
52
+ : T extends [infer F, ...infer Rest extends readonly any[]]
53
+ ? [CamelizeMain<F>, ...CamelizeTuple<Rest>]
54
+ : T extends [(infer F)?]
55
+ ? [CamelizeMain<F>?]
56
+ : T extends [(infer F)?, ...infer Rest extends readonly any[]]
57
+ ? [CamelizeMain<F>?, ...CamelizeTuple<Rest>]
58
+ : [];
59
+
60
+ type CamelizeString<Key extends string> = Key extends `_${infer R}`
61
+ ? `_${CamelizeString<R>}`
62
+ : Key extends `${infer _F}_${infer _R}`
63
+ ? CamelizeSnakeString<Key>
64
+ : Key extends Uppercase<Key>
65
+ ? Lowercase<Key>
66
+ : CamelizePascalString<Key>;
67
+ type CamelizePascalString<Key extends string> =
68
+ Key extends `${infer F}${infer R}` ? `${Lowercase<F>}${R}` : Key;
69
+ type CamelizeSnakeString<Key extends string> = Key extends `_${infer R}`
70
+ ? CamelizeSnakeString<R>
71
+ : Key extends `${infer F}_${infer M}${infer R}`
72
+ ? M extends "_"
73
+ ? CamelizeSnakeString<`${F}_${R}`>
74
+ : `${Lowercase<F>}${Uppercase<M>}${CamelizeSnakeString<R>}`
75
+ : Lowercase<Key>;