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
@@ -1,9 +1,9 @@
1
- /**
2
- * Interface for a readable URLSearchParams object.
3
- *
4
- * This interface is a subset of the {@link URLSearchParams} interface, designed
5
- * especially for the [Hono.JS](https://hono.dev/) library.
6
- *
7
- * @author https://github.com/miyaji255
8
- */
9
- export type IReadableURLSearchParams = Pick<URLSearchParams, "get" | "getAll">;
1
+ /**
2
+ * Interface for a readable URLSearchParams object.
3
+ *
4
+ * This interface is a subset of the {@link URLSearchParams} interface, designed
5
+ * especially for the [Hono.JS](https://hono.dev/) library.
6
+ *
7
+ * @author https://github.com/miyaji255
8
+ */
9
+ export type IReadableURLSearchParams = Pick<URLSearchParams, "get" | "getAll">;
package/src/PascalCase.ts CHANGED
@@ -1,71 +1,71 @@
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
- * Pascal case type.
8
- *
9
- * `PascalCase` type is a type that all keys of an object are pascalized.
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 pascalized
15
- */
16
- export type PascalCase<T> =
17
- Equal<T, PascalizeMain<T>> extends true ? T : PascalizeMain<T>;
18
-
19
- type PascalizeMain<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
- ? PascalizeObject<T>
27
- : T;
28
-
29
- type PascalizeObject<T extends object> =
30
- T extends Array<infer U>
31
- ? IsTuple<T> extends true
32
- ? PascalizeTuple<T>
33
- : PascalizeMain<U>[]
34
- : T extends Set<infer U>
35
- ? Set<PascalizeMain<U>>
36
- : T extends Map<infer K, infer V>
37
- ? Map<PascalizeMain<K>, PascalizeMain<V>>
38
- : T extends WeakSet<any> | WeakMap<any, any>
39
- ? never
40
- : T extends NativeClass
41
- ? T
42
- : {
43
- [Key in keyof T as PascalizeString<
44
- Key & string
45
- >]: PascalizeMain<T[Key]>;
46
- };
47
-
48
- type PascalizeTuple<T extends readonly any[]> = T extends []
49
- ? []
50
- : T extends [infer F]
51
- ? [PascalizeMain<F>]
52
- : T extends [infer F, ...infer Rest extends readonly any[]]
53
- ? [PascalizeMain<F>, ...PascalizeTuple<Rest>]
54
- : T extends [(infer F)?]
55
- ? [PascalizeMain<F>?]
56
- : T extends [(infer F)?, ...infer Rest extends readonly any[]]
57
- ? [PascalizeMain<F>?, ...PascalizeTuple<Rest>]
58
- : [];
59
-
60
- type PascalizeString<Key extends string> = Key extends `_${infer R}`
61
- ? `_${PascalizeString<R>}`
62
- : Key extends `${infer _F}_${infer _R}`
63
- ? PascalizeSnakeString<Key>
64
- : Capitalize<Key>;
65
- type PascalizeSnakeString<Key extends string> = Key extends `_${infer R}`
66
- ? PascalizeSnakeString<R>
67
- : Key extends `${infer F}${infer M}_${infer R}`
68
- ? `${Uppercase<F>}${Lowercase<M>}${PascalizeSnakeString<R>}`
69
- : Key extends `${infer F}${infer R}`
70
- ? `${Uppercase<F>}${Lowercase<R>}`
71
- : 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
+ * Pascal case type.
8
+ *
9
+ * `PascalCase` type is a type that all keys of an object are pascalized.
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 pascalized
15
+ */
16
+ export type PascalCase<T> =
17
+ Equal<T, PascalizeMain<T>> extends true ? T : PascalizeMain<T>;
18
+
19
+ type PascalizeMain<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
+ ? PascalizeObject<T>
27
+ : T;
28
+
29
+ type PascalizeObject<T extends object> =
30
+ T extends Array<infer U>
31
+ ? IsTuple<T> extends true
32
+ ? PascalizeTuple<T>
33
+ : PascalizeMain<U>[]
34
+ : T extends Set<infer U>
35
+ ? Set<PascalizeMain<U>>
36
+ : T extends Map<infer K, infer V>
37
+ ? Map<PascalizeMain<K>, PascalizeMain<V>>
38
+ : T extends WeakSet<any> | WeakMap<any, any>
39
+ ? never
40
+ : T extends NativeClass
41
+ ? T
42
+ : {
43
+ [Key in keyof T as PascalizeString<
44
+ Key & string
45
+ >]: PascalizeMain<T[Key]>;
46
+ };
47
+
48
+ type PascalizeTuple<T extends readonly any[]> = T extends []
49
+ ? []
50
+ : T extends [infer F]
51
+ ? [PascalizeMain<F>]
52
+ : T extends [infer F, ...infer Rest extends readonly any[]]
53
+ ? [PascalizeMain<F>, ...PascalizeTuple<Rest>]
54
+ : T extends [(infer F)?]
55
+ ? [PascalizeMain<F>?]
56
+ : T extends [(infer F)?, ...infer Rest extends readonly any[]]
57
+ ? [PascalizeMain<F>?, ...PascalizeTuple<Rest>]
58
+ : [];
59
+
60
+ type PascalizeString<Key extends string> = Key extends `_${infer R}`
61
+ ? `_${PascalizeString<R>}`
62
+ : Key extends `${infer _F}_${infer _R}`
63
+ ? PascalizeSnakeString<Key>
64
+ : Capitalize<Key>;
65
+ type PascalizeSnakeString<Key extends string> = Key extends `_${infer R}`
66
+ ? PascalizeSnakeString<R>
67
+ : Key extends `${infer F}${infer M}_${infer R}`
68
+ ? `${Uppercase<F>}${Lowercase<M>}${PascalizeSnakeString<R>}`
69
+ : Key extends `${infer F}${infer R}`
70
+ ? `${Uppercase<F>}${Lowercase<R>}`
71
+ : Key;
package/src/Primitive.ts CHANGED
@@ -1,90 +1,90 @@
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
- import { Format } from "./tags";
7
-
8
- /**
9
- * Primitive type of JSON.
10
- *
11
- * `Primitive<T>` is a TMP (Type Meta Programming) type which converts its
12
- * argument as a primitive type within the framework JSON.
13
- *
14
- * If the target argument is a built-in class which returns its origin primitive
15
- * type through the `valueOf()` method like the `String` or `Number`, its return
16
- * type will be the `string` or `number`. Otherwise, if the built-in class does
17
- * not have the `valueOf()` method, the return type will be an empty object
18
- * (`{}`).
19
- *
20
- * Otherwise, if the target argument is a type of custom class, all of its
21
- * custom methods will be erased and its prototype will be changed to the
22
- * primitive `object`. Therefore, the return type of the TMP type will finally
23
- * be the primitive object.
24
- *
25
- * In addition, if the target argument is a type of custom class and it has a
26
- * special method `toJSON()`, the return type of this `Primitive` will be not
27
- * `Primitive<Instance>` but `Primitive<ReturnType<Instance.toJSON>>`.
28
- *
29
- * Before | After
30
- * ------------------------|---------------------------------------- `Boolean` |
31
- * `boolean` `Number` | `number` `String` | `string` `Class` | `object` `Class`
32
- * with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>` Native Class | never
33
- * Others | No change
34
- *
35
- * @author Jeongho Nam - https://github.com/samchon
36
- * @author Kyungsu Kang - https://github.com/kakasoo
37
- * @author Michael - https://github.com/8471919
38
- * @template T Target argument type.
39
- */
40
- export type Primitive<T> =
41
- Equal<T, PrimitiveMain<T>> extends true ? T : PrimitiveMain<T>;
42
-
43
- type PrimitiveMain<Instance> = Instance extends [never]
44
- ? never // (special trick for jsonable | null) type
45
- : ValueOf<Instance> extends bigint
46
- ? never
47
- : ValueOf<Instance> extends boolean | number | string
48
- ? ValueOf<Instance>
49
- : Instance extends Function
50
- ? never
51
- : ValueOf<Instance> extends object
52
- ? Instance extends object
53
- ? Instance extends Date
54
- ? string & Format<"date-time">
55
- : Instance extends IJsonable<infer Raw>
56
- ? ValueOf<Raw> extends object
57
- ? Raw extends object
58
- ? PrimitiveObject<Raw> // object would be primitified
59
- : never // cannot be
60
- : ValueOf<Raw> // atomic value
61
- : Instance extends Exclude<NativeClass, Date>
62
- ? never
63
- : PrimitiveObject<Instance> // object would be primitified
64
- : never // cannot be
65
- : ValueOf<Instance>;
66
-
67
- type PrimitiveObject<Instance extends object> =
68
- Instance extends Array<infer T>
69
- ? IsTuple<Instance> extends true
70
- ? PrimitiveTuple<Instance>
71
- : PrimitiveMain<T>[]
72
- : {
73
- [P in keyof Instance]: PrimitiveMain<Instance[P]>;
74
- };
75
-
76
- type PrimitiveTuple<T extends readonly any[]> = T extends []
77
- ? []
78
- : T extends [infer F]
79
- ? [PrimitiveMain<F>]
80
- : T extends [infer F, ...infer Rest extends readonly any[]]
81
- ? [PrimitiveMain<F>, ...PrimitiveTuple<Rest>]
82
- : T extends [(infer F)?]
83
- ? [PrimitiveMain<F>?]
84
- : T extends [(infer F)?, ...infer Rest extends readonly any[]]
85
- ? [PrimitiveMain<F>?, ...PrimitiveTuple<Rest>]
86
- : [];
87
-
88
- interface IJsonable<T> {
89
- toJSON(): T;
90
- }
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
+ import { Format } from "./tags";
7
+
8
+ /**
9
+ * Primitive type of JSON.
10
+ *
11
+ * `Primitive<T>` is a TMP (Type Meta Programming) type which converts its
12
+ * argument as a primitive type within the framework JSON.
13
+ *
14
+ * If the target argument is a built-in class which returns its origin primitive
15
+ * type through the `valueOf()` method like the `String` or `Number`, its return
16
+ * type will be the `string` or `number`. Otherwise, if the built-in class does
17
+ * not have the `valueOf()` method, the return type will be an empty object
18
+ * (`{}`).
19
+ *
20
+ * Otherwise, if the target argument is a type of custom class, all of its
21
+ * custom methods will be erased and its prototype will be changed to the
22
+ * primitive `object`. Therefore, the return type of the TMP type will finally
23
+ * be the primitive object.
24
+ *
25
+ * In addition, if the target argument is a type of custom class and it has a
26
+ * special method `toJSON()`, the return type of this `Primitive` will be not
27
+ * `Primitive<Instance>` but `Primitive<ReturnType<Instance.toJSON>>`.
28
+ *
29
+ * Before | After
30
+ * ------------------------|---------------------------------------- `Boolean` |
31
+ * `boolean` `Number` | `number` `String` | `string` `Class` | `object` `Class`
32
+ * with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>` Native Class | never
33
+ * Others | No change
34
+ *
35
+ * @author Jeongho Nam - https://github.com/samchon
36
+ * @author Kyungsu Kang - https://github.com/kakasoo
37
+ * @author Michael - https://github.com/8471919
38
+ * @template T Target argument type.
39
+ */
40
+ export type Primitive<T> =
41
+ Equal<T, PrimitiveMain<T>> extends true ? T : PrimitiveMain<T>;
42
+
43
+ type PrimitiveMain<Instance> = Instance extends [never]
44
+ ? never // (special trick for jsonable | null) type
45
+ : ValueOf<Instance> extends bigint
46
+ ? never
47
+ : ValueOf<Instance> extends boolean | number | string
48
+ ? ValueOf<Instance>
49
+ : Instance extends Function
50
+ ? never
51
+ : ValueOf<Instance> extends object
52
+ ? Instance extends object
53
+ ? Instance extends Date
54
+ ? string & Format<"date-time">
55
+ : Instance extends IJsonable<infer Raw>
56
+ ? ValueOf<Raw> extends object
57
+ ? Raw extends object
58
+ ? PrimitiveObject<Raw> // object would be primitified
59
+ : never // cannot be
60
+ : ValueOf<Raw> // atomic value
61
+ : Instance extends Exclude<NativeClass, Date>
62
+ ? never
63
+ : PrimitiveObject<Instance> // object would be primitified
64
+ : never // cannot be
65
+ : ValueOf<Instance>;
66
+
67
+ type PrimitiveObject<Instance extends object> =
68
+ Instance extends Array<infer T>
69
+ ? IsTuple<Instance> extends true
70
+ ? PrimitiveTuple<Instance>
71
+ : PrimitiveMain<T>[]
72
+ : {
73
+ [P in keyof Instance]: PrimitiveMain<Instance[P]>;
74
+ };
75
+
76
+ type PrimitiveTuple<T extends readonly any[]> = T extends []
77
+ ? []
78
+ : T extends [infer F]
79
+ ? [PrimitiveMain<F>]
80
+ : T extends [infer F, ...infer Rest extends readonly any[]]
81
+ ? [PrimitiveMain<F>, ...PrimitiveTuple<Rest>]
82
+ : T extends [(infer F)?]
83
+ ? [PrimitiveMain<F>?]
84
+ : T extends [(infer F)?, ...infer Rest extends readonly any[]]
85
+ ? [PrimitiveMain<F>?, ...PrimitiveTuple<Rest>]
86
+ : [];
87
+
88
+ interface IJsonable<T> {
89
+ toJSON(): T;
90
+ }
package/src/Resolved.ts CHANGED
@@ -1,72 +1,72 @@
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
- * Resolved type that erases every method.
8
- *
9
- * `Resolved` is a TMP (Type Meta Programming) type which converts its argument
10
- * as a resolved type that erases every method property.
11
- *
12
- * If the target argument is a built-in class which returns its origin primitive
13
- * type through the `valueOf()` method like the `String` or `Number`, its return
14
- * type will be the `string` or `number`. Otherwise, if the built-in class does
15
- * not have the `valueOf()` method, the return type will be the same as the
16
- * target argument.
17
- *
18
- * Otherwise, if the target argument is a type of custom class, all of its
19
- * custom methods will be erased and its prototype will be changed to the
20
- * primitive `object`. Therefore, the return type of the TMP type will finally
21
- * be the resolved object.
22
- *
23
- * Before | After
24
- * ------------------------|---------------------------------------- `Boolean` |
25
- * `boolean` `Number` | `number` `BigInt` | `bigint` `String` | `string` `Class`
26
- * | `interface` Native Class or Others | No change
27
- *
28
- * @author Jeongho Nam - https://github.com/samchon
29
- * @author Kyungsu Kang - https://github.com/kakasoo
30
- * @template T Target argument type.
31
- */
32
- export type Resolved<T> =
33
- Equal<T, ResolvedMain<T>> extends true ? T : ResolvedMain<T>;
34
-
35
- type ResolvedMain<T> = T extends [never]
36
- ? never // (special trick for jsonable | null) type
37
- : ValueOf<T> extends boolean | number | bigint | string
38
- ? ValueOf<T>
39
- : T extends Function
40
- ? never
41
- : T extends object
42
- ? ResolvedObject<T>
43
- : ValueOf<T>;
44
-
45
- type ResolvedObject<T extends object> =
46
- T extends Array<infer U>
47
- ? IsTuple<T> extends true
48
- ? ResolvedTuple<T>
49
- : ResolvedMain<U>[]
50
- : T extends Set<infer U>
51
- ? Set<ResolvedMain<U>>
52
- : T extends Map<infer K, infer V>
53
- ? Map<ResolvedMain<K>, ResolvedMain<V>>
54
- : T extends WeakSet<any> | WeakMap<any, any>
55
- ? never
56
- : T extends NativeClass
57
- ? T
58
- : {
59
- [P in keyof T]: ResolvedMain<T[P]>;
60
- };
61
-
62
- type ResolvedTuple<T extends readonly any[]> = T extends []
63
- ? []
64
- : T extends [infer F]
65
- ? [ResolvedMain<F>]
66
- : T extends [infer F, ...infer Rest extends readonly any[]]
67
- ? [ResolvedMain<F>, ...ResolvedTuple<Rest>]
68
- : T extends [(infer F)?]
69
- ? [ResolvedMain<F>?]
70
- : T extends [(infer F)?, ...infer Rest extends readonly any[]]
71
- ? [ResolvedMain<F>?, ...ResolvedTuple<Rest>]
72
- : [];
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
+ * Resolved type that erases every method.
8
+ *
9
+ * `Resolved` is a TMP (Type Meta Programming) type which converts its argument
10
+ * as a resolved type that erases every method property.
11
+ *
12
+ * If the target argument is a built-in class which returns its origin primitive
13
+ * type through the `valueOf()` method like the `String` or `Number`, its return
14
+ * type will be the `string` or `number`. Otherwise, if the built-in class does
15
+ * not have the `valueOf()` method, the return type will be the same as the
16
+ * target argument.
17
+ *
18
+ * Otherwise, if the target argument is a type of custom class, all of its
19
+ * custom methods will be erased and its prototype will be changed to the
20
+ * primitive `object`. Therefore, the return type of the TMP type will finally
21
+ * be the resolved object.
22
+ *
23
+ * Before | After
24
+ * ------------------------|---------------------------------------- `Boolean` |
25
+ * `boolean` `Number` | `number` `BigInt` | `bigint` `String` | `string` `Class`
26
+ * | `interface` Native Class or Others | No change
27
+ *
28
+ * @author Jeongho Nam - https://github.com/samchon
29
+ * @author Kyungsu Kang - https://github.com/kakasoo
30
+ * @template T Target argument type.
31
+ */
32
+ export type Resolved<T> =
33
+ Equal<T, ResolvedMain<T>> extends true ? T : ResolvedMain<T>;
34
+
35
+ type ResolvedMain<T> = T extends [never]
36
+ ? never // (special trick for jsonable | null) type
37
+ : ValueOf<T> extends boolean | number | bigint | string
38
+ ? ValueOf<T>
39
+ : T extends Function
40
+ ? never
41
+ : T extends object
42
+ ? ResolvedObject<T>
43
+ : ValueOf<T>;
44
+
45
+ type ResolvedObject<T extends object> =
46
+ T extends Array<infer U>
47
+ ? IsTuple<T> extends true
48
+ ? ResolvedTuple<T>
49
+ : ResolvedMain<U>[]
50
+ : T extends Set<infer U>
51
+ ? Set<ResolvedMain<U>>
52
+ : T extends Map<infer K, infer V>
53
+ ? Map<ResolvedMain<K>, ResolvedMain<V>>
54
+ : T extends WeakSet<any> | WeakMap<any, any>
55
+ ? never
56
+ : T extends NativeClass
57
+ ? T
58
+ : {
59
+ [P in keyof T]: ResolvedMain<T[P]>;
60
+ };
61
+
62
+ type ResolvedTuple<T extends readonly any[]> = T extends []
63
+ ? []
64
+ : T extends [infer F]
65
+ ? [ResolvedMain<F>]
66
+ : T extends [infer F, ...infer Rest extends readonly any[]]
67
+ ? [ResolvedMain<F>, ...ResolvedTuple<Rest>]
68
+ : T extends [(infer F)?]
69
+ ? [ResolvedMain<F>?]
70
+ : T extends [(infer F)?, ...infer Rest extends readonly any[]]
71
+ ? [ResolvedMain<F>?, ...ResolvedTuple<Rest>]
72
+ : [];